This commit was manufactured by cvs2svn to create tag 'ngnus-0_3'. ngnus-0_3
authortomo <tomo>
Sun, 1 May 2005 22:31:44 +0000 (22:31 +0000)
committertomo <tomo>
Sun, 1 May 2005 22:31:44 +0000 (22:31 +0000)
116 files changed:
Makefile [deleted file]
contrib/base64.el [deleted file]
contrib/canlock.el [deleted file]
contrib/gnus-idna.el [deleted file]
contrib/hashcash.el [deleted file]
contrib/md5.el [deleted file]
contrib/mml-smime.el [deleted file]
contrib/rfc2015.el [deleted file]
contrib/sha1.el [deleted file]
contrib/smime.el [deleted file]
contrib/starttls.el [deleted file]
etc/gnus/bar.xbm [deleted file]
etc/gnus/bar.xpm [deleted file]
etc/gnus/gnus-group-catchup-current-up.xbm [deleted file]
etc/gnus/gnus-group-catchup-current-up.xpm [deleted file]
etc/gnus/gnus-group-catchup-current.xbm [deleted file]
etc/gnus/gnus-group-catchup-current.xpm [deleted file]
etc/gnus/gnus-group-describe-group-up.xbm [deleted file]
etc/gnus/gnus-group-describe-group-up.xpm [deleted file]
etc/gnus/gnus-group-exit-up.xbm [deleted file]
etc/gnus/gnus-group-exit-up.xpm [deleted file]
etc/gnus/gnus-group-get-new-news-this-group-up.xbm [deleted file]
etc/gnus/gnus-group-get-new-news-this-group-up.xpm [deleted file]
etc/gnus/gnus-group-get-new-news-up.xbm [deleted file]
etc/gnus/gnus-group-get-new-news-up.xpm [deleted file]
etc/gnus/gnus-group-kill-group-up.xbm [deleted file]
etc/gnus/gnus-group-kill-group-up.xpm [deleted file]
etc/gnus/gnus-group-subscribe-up.xbm [deleted file]
etc/gnus/gnus-group-subscribe-up.xpm [deleted file]
etc/gnus/gnus-group-unsubscribe-up.xbm [deleted file]
etc/gnus/gnus-group-unsubscribe-up.xpm [deleted file]
etc/gnus/gnus-pointer.xbm [deleted file]
etc/gnus/gnus-pointer.xpm [deleted file]
etc/gnus/gnus-summary-caesar-message-up.xbm [deleted file]
etc/gnus/gnus-summary-caesar-message-up.xpm [deleted file]
etc/gnus/gnus-summary-cancel-article-up.xbm [deleted file]
etc/gnus/gnus-summary-cancel-article-up.xpm [deleted file]
etc/gnus/gnus-summary-catchup-and-exit-up.xbm [deleted file]
etc/gnus/gnus-summary-catchup-and-exit-up.xpm [deleted file]
etc/gnus/gnus-summary-catchup-up.xbm [deleted file]
etc/gnus/gnus-summary-catchup-up.xpm [deleted file]
etc/gnus/gnus-summary-exit-up.xbm [deleted file]
etc/gnus/gnus-summary-exit-up.xpm [deleted file]
etc/gnus/gnus-summary-followup-up.xbm [deleted file]
etc/gnus/gnus-summary-followup-up.xpm [deleted file]
etc/gnus/gnus-summary-followup-with-original-up.xbm [deleted file]
etc/gnus/gnus-summary-followup-with-original-up.xpm [deleted file]
etc/gnus/gnus-summary-mail-copy-up.xbm [deleted file]
etc/gnus/gnus-summary-mail-copy-up.xpm [deleted file]
etc/gnus/gnus-summary-mail-delete-up.xbm [deleted file]
etc/gnus/gnus-summary-mail-delete-up.xpm [deleted file]
etc/gnus/gnus-summary-mail-forward-up.xbm [deleted file]
etc/gnus/gnus-summary-mail-forward-up.xpm [deleted file]
etc/gnus/gnus-summary-mail-get-up.xbm [deleted file]
etc/gnus/gnus-summary-mail-get-up.xpm [deleted file]
etc/gnus/gnus-summary-mail-originate-up.xbm [deleted file]
etc/gnus/gnus-summary-mail-originate-up.xpm [deleted file]
etc/gnus/gnus-summary-mail-reply-up.xbm [deleted file]
etc/gnus/gnus-summary-mail-reply-up.xpm [deleted file]
etc/gnus/gnus-summary-mail-save-up.xbm [deleted file]
etc/gnus/gnus-summary-mail-save-up.xpm [deleted file]
etc/gnus/gnus-summary-next-unread-up.xbm [deleted file]
etc/gnus/gnus-summary-next-unread-up.xpm [deleted file]
etc/gnus/gnus-summary-post-news-up.xbm [deleted file]
etc/gnus/gnus-summary-post-news-up.xpm [deleted file]
etc/gnus/gnus-summary-prev-unread-up.xbm [deleted file]
etc/gnus/gnus-summary-prev-unread-up.xpm [deleted file]
etc/gnus/gnus-summary-reply-up.xbm [deleted file]
etc/gnus/gnus-summary-reply-up.xpm [deleted file]
etc/gnus/gnus-summary-reply-with-original-up.xbm [deleted file]
etc/gnus/gnus-summary-reply-with-original-up.xpm [deleted file]
etc/gnus/gnus-summary-save-article-file-up.xbm [deleted file]
etc/gnus/gnus-summary-save-article-file-up.xpm [deleted file]
etc/gnus/gnus-summary-save-article-up.xbm [deleted file]
etc/gnus/gnus-summary-save-article-up.xpm [deleted file]
etc/gnus/gnus-uu-decode-uu-up.xbm [deleted file]
etc/gnus/gnus-uu-decode-uu-up.xpm [deleted file]
etc/gnus/gnus-uu-post-news-up.xbm [deleted file]
etc/gnus/gnus-uu-post-news-up.xpm [deleted file]
etc/gnus/gnus.xbm [deleted file]
etc/gnus/gnus.xpm [deleted file]
etc/gnus/x-splash [deleted file]
etc/smilies/frown.pbm [deleted file]
etc/smilies/smile.pbm [deleted file]
etc/smilies/wry.pbm [deleted file]
lisp/Makefile [deleted file]
lisp/base64.el [deleted file]
lisp/date.el [deleted file]
lisp/drums.el [deleted file]
lisp/fill-flowed.el [deleted file]
lisp/gnus-gl.el [deleted file]
lisp/gnus-load.el [deleted file]
lisp/gnus-mailcap.el [deleted file]
lisp/mailheader.el [deleted file]
lisp/md5.el [deleted file]
lisp/message-utils.el [deleted file]
lisp/mm.el [deleted file]
lisp/rfc1522.el [deleted file]
lisp/run-at-time.el [deleted file]
lisp/sha1-el.el [deleted file]
lisp/smiley-ems.el [deleted file]
make-x.bat [deleted file]
readme [deleted file]
texi/Makefile [deleted file]
texi/bk-a4.tex [deleted file]
texi/bk-lt.tex [deleted file]
texi/booklet.tex [deleted file]
texi/custom.texi [deleted file]
texi/gnuslogo-booklet.eps [deleted file]
texi/gnuslogo-refcard.eps [deleted file]
texi/gnuslogo.refcard [deleted file]
texi/gnusmail.texi [deleted file]
texi/gnusref.tex [deleted file]
texi/gnustmp.texi [deleted file]
texi/refcard.tex [deleted file]
texi/widget.texi [deleted file]

diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index 05503f4..0000000
--- a/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-EMACS=emacs
-XEMACS=xemacs
-
-all: lick info
-
-lick:
-       cd lisp; $(MAKE) EMACS=$(EMACS) all
-
-# Rule for Lars and nobody else.
-some:
-       cd lisp; $(MAKE) EMACS=$(EMACS) some
-l:
-       cd lisp; $(MAKE) EMACS=$(EMACS) clever
-
-info:
-       cd texi; $(MAKE) EMACS=$(EMACS) all
-
-clean:
-       rm -f */*.orig */*.rej *.orig *.rej
-
-xsome: 
-       cd lisp; $(MAKE) EMACS=$(XEMACS) some
-
-elclean:
-       rm lisp/*.elc
-
-x:
-       make EMACS=xemacs
-
-distclean:
-       make clean
-       rm -r *~
-       for i in lisp texi; do (cd $$i; make distclean); done
-
-osome:
-       make EMACS=emacs-19.34 some
diff --git a/contrib/base64.el b/contrib/base64.el
deleted file mode 100644 (file)
index 572a5d3..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-;;; base64.el,v --- Base64 encoding functions
-;; Author: Kyle E. Jones
-;; Created: 1997/03/12 14:37:09
-;; Version: 1.6
-;; Keywords: extensions
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Copyright (C) 1997 Kyle E. Jones
-;;;
-;;; This file is not part of GNU Emacs, but the same permissions apply.
-;;;
-;;; GNU Emacs is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 2, or (at your option)
-;;; any later version.
-;;;
-;;; GNU Emacs is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;;; Boston, MA 02111-1307, USA.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(eval-when-compile (require 'cl))
-
-;; For non-MULE
-(if (not (fboundp 'char-int))
-    (defalias 'char-int 'identity))
-
-(defvar base64-alphabet
-  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
-
-(defvar base64-decoder-program nil
-  "*Non-nil value should be a string that names a MIME base64 decoder.
-The program should expect to read base64 data on its standard
-input and write the converted data to its standard output.")
-
-(defvar base64-decoder-switches nil
-  "*List of command line flags passed to the command named by
-base64-decoder-program.")
-
-(defvar base64-encoder-program nil
-  "*Non-nil value should be a string that names a MIME base64 encoder.
-The program should expect arbitrary data on its standard
-input and write base64 data to its standard output.")
-
-(defvar base64-encoder-switches nil
-  "*List of command line flags passed to the command named by
-base64-encoder-program.")
-
-(defconst base64-alphabet-decoding-alist
-  '(
-    ( ?A . 00) ( ?B . 01) ( ?C . 02) ( ?D . 03) ( ?E . 04) ( ?F . 05)
-    ( ?G . 06) ( ?H . 07) ( ?I . 08) ( ?J . 09) ( ?K . 10) ( ?L . 11)
-    ( ?M . 12) ( ?N . 13) ( ?O . 14) ( ?P . 15) ( ?Q . 16) ( ?R . 17)
-    ( ?S . 18) ( ?T . 19) ( ?U . 20) ( ?V . 21) ( ?W . 22) ( ?X . 23)
-    ( ?Y . 24) ( ?Z . 25) ( ?a . 26) ( ?b . 27) ( ?c . 28) ( ?d . 29)
-    ( ?e . 30) ( ?f . 31) ( ?g . 32) ( ?h . 33) ( ?i . 34) ( ?j . 35)
-    ( ?k . 36) ( ?l . 37) ( ?m . 38) ( ?n . 39) ( ?o . 40) ( ?p . 41)
-    ( ?q . 42) ( ?r . 43) ( ?s . 44) ( ?t . 45) ( ?u . 46) ( ?v . 47)
-    ( ?w . 48) ( ?x . 49) ( ?y . 50) ( ?z . 51) ( ?0 . 52) ( ?1 . 53)
-    ( ?2 . 54) ( ?3 . 55) ( ?4 . 56) ( ?5 . 57) ( ?6 . 58) ( ?7 . 59)
-    ( ?8 . 60) ( ?9 . 61) ( ?+ . 62) ( ?/ . 63)
-    ))
-
-(defvar base64-alphabet-decoding-vector
-  (let ((v (make-vector 123 nil))
-       (p base64-alphabet-decoding-alist))
-    (while p
-      (aset v (car (car p)) (cdr (car p)))
-      (setq p (cdr p)))
-    v))
-
-(defvar base64-binary-coding-system 'binary)
-
-(defun base64-run-command-on-region (start end output-buffer command
-                                          &rest arg-list)
-  (let ((tempfile nil) status errstring default-process-coding-system 
-       (coding-system-for-write base64-binary-coding-system)
-       (coding-system-for-read base64-binary-coding-system))
-    (unwind-protect
-       (progn
-         (setq tempfile (make-temp-name "base64"))
-         (setq status
-               (apply 'call-process-region
-                      start end command nil
-                      (list output-buffer tempfile)
-                      nil arg-list))
-         (cond ((equal status 0) t)
-               ((zerop (save-excursion
-                         (set-buffer (find-file-noselect tempfile))
-                         (buffer-size)))
-                t)
-               (t (save-excursion
-                    (set-buffer (find-file-noselect tempfile))
-                    (setq errstring (buffer-string))
-                    (kill-buffer nil)
-                    (cons status errstring)))))
-      (ignore-errors
-       (delete-file tempfile)))))
-
-(if (featurep 'xemacs)
-    (defalias 'base64-insert-char 'insert-char)
-  (defun base64-insert-char (char &optional count ignored buffer)
-    (if (or (null buffer) (eq buffer (current-buffer)))
-       (insert-char char count)
-      (with-current-buffer buffer
-       (insert-char char count))))
-  (setq base64-binary-coding-system 'no-conversion))
-
-(defun base64-decode-region (start end)
-  (interactive "r")
-  ;;(message "Decoding base64...")
-  (let ((work-buffer nil)
-       (done nil)
-       (counter 0)
-       (bits 0)
-       (lim 0) inputpos
-       (non-data-chars (concat "^=" base64-alphabet)))
-    (unwind-protect
-       (save-excursion
-         (setq work-buffer (generate-new-buffer " *base64-work*"))
-         (buffer-disable-undo work-buffer)
-         (if base64-decoder-program
-             (let* ((binary-process-output t) ; any text already has CRLFs
-                    (status (apply 'base64-run-command-on-region
-                                   start end work-buffer
-                                   base64-decoder-program
-                                   base64-decoder-switches)))
-               (if (not (eq status t))
-                   (error "%s" (cdr status))))
-           (goto-char start)
-           (skip-chars-forward non-data-chars end)
-           (while (not done)
-             (setq inputpos (point))
-             (cond
-              ((> (skip-chars-forward base64-alphabet end) 0)
-               (setq lim (point))
-               (while (< inputpos lim)
-                 (setq bits (+ bits
-                               (aref base64-alphabet-decoding-vector
-                                     (char-int (char-after inputpos)))))
-                 (setq counter (1+ counter)
-                       inputpos (1+ inputpos))
-                 (cond ((= counter 4)
-                        (base64-insert-char (lsh bits -16) 1 nil work-buffer)
-                        (base64-insert-char (logand (lsh bits -8) 255) 1 nil
-                                            work-buffer)
-                        (base64-insert-char (logand bits 255) 1 nil
-                                            work-buffer)
-                        (setq bits 0 counter 0))
-                       (t (setq bits (lsh bits 6)))))))
-             (cond
-              ((or (= (point) end)
-                   (eq (char-after (point)) ?=))
-               (if (and (= (point) end) (> counter 1))
-                   (message 
-                    "at least %d bits missing at end of base64 encoding"
-                    (* (- 4 counter) 6)))
-               (setq done t)
-               (cond ((= counter 1)
-                      (error "at least 2 bits missing at end of base64 encoding"))
-                     ((= counter 2)
-                      (base64-insert-char (lsh bits -10) 1 nil work-buffer))
-                     ((= counter 3)
-                      (base64-insert-char (lsh bits -16) 1 nil work-buffer)
-                      (base64-insert-char (logand (lsh bits -8) 255)
-                                          1 nil work-buffer))
-                     ((= counter 0) t)))
-              (t (skip-chars-forward non-data-chars end)))))
-         (or (markerp end) (setq end (set-marker (make-marker) end)))
-         (goto-char start)
-         (insert-buffer-substring work-buffer)
-         (delete-region (point) end))
-      (and work-buffer (kill-buffer work-buffer))))
-  ;;(message "Decoding base64... done")
-  )
-
-(defun base64-encode-region (start end &optional no-line-break)
-  (interactive "r")
-  (message "Encoding base64...")
-  (let ((work-buffer nil)
-       (counter 0)
-       (cols 0)
-       (bits 0)
-       (alphabet base64-alphabet)
-       inputpos)
-    (unwind-protect
-       (save-excursion
-         (setq work-buffer (generate-new-buffer " *base64-work*"))
-         (buffer-disable-undo work-buffer)
-         (if base64-encoder-program
-             (let ((status (apply 'base64-run-command-on-region
-                                  start end work-buffer
-                                  base64-encoder-program
-                                  base64-encoder-switches)))
-               (if (not (eq status t))
-                   (error "%s" (cdr status))))
-           (setq inputpos start)
-           (while (< inputpos end)
-             (setq bits (+ bits (char-int (char-after inputpos))))
-             (setq counter (1+ counter))
-             (cond ((= counter 3)
-                    (base64-insert-char (aref alphabet (lsh bits -18)) 1 nil
-                                        work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand (lsh bits -12) 63))
-                     1 nil work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand (lsh bits -6) 63))
-                     1 nil work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand bits 63))
-                     1 nil work-buffer)
-                    (setq cols (+ cols 4))
-                    (cond ((and (= cols 72)
-                                (not no-line-break))
-                           (base64-insert-char ?\n 1 nil work-buffer)
-                           (setq cols 0)))
-                    (setq bits 0 counter 0))
-                   (t (setq bits (lsh bits 8))))
-             (setq inputpos (1+ inputpos)))
-           ;; write out any remaining bits with appropriate padding
-           (if (= counter 0)
-               nil
-             (setq bits (lsh bits (- 16 (* 8 counter))))
-             (base64-insert-char (aref alphabet (lsh bits -18)) 1 nil
-                                 work-buffer)
-             (base64-insert-char (aref alphabet (logand (lsh bits -12) 63))
-                                 1 nil work-buffer)
-             (if (= counter 1)
-                 (base64-insert-char ?= 2 nil work-buffer)
-               (base64-insert-char (aref alphabet (logand (lsh bits -6) 63))
-                                   1 nil work-buffer)
-               (base64-insert-char ?= 1 nil work-buffer)))
-           (if (and (> cols 0)
-                    (not no-line-break))
-               (base64-insert-char ?\n 1 nil work-buffer)))
-         (or (markerp end) (setq end (set-marker (make-marker) end)))
-         (goto-char start)
-         (insert-buffer-substring work-buffer)
-         (delete-region (point) end))
-      (and work-buffer (kill-buffer work-buffer))))
-  (message "Encoding base64... done"))
-
-(defun base64-encode (string &optional no-line-break)
-  (save-excursion
-    (set-buffer (get-buffer-create " *base64-encode*"))
-    (erase-buffer)
-    (insert string)
-    (base64-encode-region (point-min) (point-max) no-line-break)
-    (skip-chars-backward " \t\r\n")
-    (delete-region (point-max) (point))
-    (prog1
-       (buffer-string)
-      (kill-buffer (current-buffer)))))
-
-(defun base64-decode (string)
-  (save-excursion
-    (set-buffer (get-buffer-create " *base64-decode*"))
-    (erase-buffer)
-    (insert string)
-    (base64-decode-region (point-min) (point-max))
-    (goto-char (point-max))
-    (skip-chars-backward " \t\r\n")
-    (delete-region (point-max) (point))
-    (prog1
-       (buffer-string)
-      (kill-buffer (current-buffer)))))
-
-(defalias 'base64-decode-string 'base64-decode)
-(defalias 'base64-encode-string 'base64-encode)
-
-(provide 'base64)
diff --git a/contrib/canlock.el b/contrib/canlock.el
deleted file mode 100644 (file)
index 474b834..0000000
+++ /dev/null
@@ -1,475 +0,0 @@
-;;; canlock.el --- Functions for Cancel-Lock feature.
-;; Copyright (C) 1998,1999 Katsumi Yamaoka
-
-;; Author: Katsumi Yamaoka   <yamaoka@jpl.org>
-;;         Yuuichi Teranishi <teranisi@gohome.org>
-;;         Hideyuki SHIRAI   <shirai@rdmg.mgcs.mei.co.jp>
-;;         Hidekazu Nakamura <u90121@uis-inf.co.jp>
-;;         Ken'ichi Okada    <kokada@tamaru.kuee.kyoto-u.ac.jp>
-;;         Shuhei KOBAYASHI  <shuhei@aqua.ocn.ne.jp>
-;; Created: 1998-11-24
-;; Revised: 1999-06-14
-;; Keywords: news, cancel-lock, hmac, sha1, rfc2104
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-;; USA.
-
-;;; Commentary:
-
-;; This library is based on draft-ietf-usefor-cancel-lock-01.txt,
-;; released on 1998-11-03.
-
-;;; Code:
-
-(defconst canlock-version "0.6")
-
-(eval-when-compile (require 'cl))
-(require 'custom)
-(require 'mail-utils)
-
-(autoload 'sha1-encode-binary "sha1")
-(autoload 'base64-encode "base64")
-
-(defgroup canlock nil
-  "Cancel-Lock feature."
-  :prefix "canlock-"
-  :group 'applications)
-
-(defcustom canlock-base64-encode-function 'base64-encode-string
-  "*Function called to encode string to base64."
-  :type '(radio (function-item base64-encode-string)
-               (function-item base64-encode)
-               (function-item canlock-base64-encode-string-with-mmencode)
-               (function :tag "Other"))
-  :group 'canlock)
-
-(defcustom canlock-mmencode-program "mmencode"
-  "*Name of mmencode program."
-  :type 'string
-  :group 'canlock)
-
-(defcustom canlock-mmencode-args-for-encoding nil
-  "*Arguments passed to mmencode program for encoding."
-  :type 'sexp
-  :group 'canlock)
-
-(defcustom canlock-sha1-function 'sha1-encode-binary
-  "*Function called to make a SHA1 digest from a message (string)."
-  :type '(radio (function-item sha1-encode-binary)
-               (function-item canlock-sha1-with-ssleay)
-               (function :tag "Other"))
-  :group 'canlock)
-
-(defcustom canlock-sha1-function-for-verify canlock-sha1-function
-  "*Function called to make a SHA1 digest for verifying."
-  :type '(radio (function-item sha1-encode-binary)
-               (function-item canlock-sha1-with-ssleay)
-               (function :tag "Other"))
-  :group 'canlock)
-
-(defcustom canlock-ssleay-program "ssleay"
-  "*Name of SSLeay program."
-  :type 'string
-  :group 'canlock)
-
-(defcustom canlock-ssleay-args '("sha1")
-  "*Arguments passed to SSLeay program."
-  :type 'sexp
-  :group 'canlock)
-
-(defcustom canlock-ignore-errors nil
-  "*If non-nil, ignore any error signals."
-  :type 'boolean
-  :group 'canlock)
-
-(defcustom canlock-load-hook nil
-  "*Hook to be run after the canlock package has been loaded."
-  :type 'hook
-  :group 'canlock)
-
-;;; Internal variables.
-
-(defvar canlock-password nil
-  "*Password to use when signing a Cancel-Lock or a Cancel-Key header.")
-
-(defvar canlock-password-for-verify canlock-password
-  "*Password to use when verifying a Cancel-Lock or a Cancel-Key header.")
-
-(defvar canlock-force-insert-header nil
-  "*If non-nil, insert a Cancel-Lock or a Cancel-Key header even though the
-buffer does not contain a news message.")
-
-;;; Functions.
-
-(defun canlock-base64-encode-string-with-mmencode (string)
-  "Encode string to base64 with mmencode."
-  (with-temp-buffer
-    (let ((coding-system-for-read 'raw-text)
-         (coding-system-for-write 'binary)
-         ;; For Mule 2 with APEL 9.12 or later.
-         (default-process-coding-system '(raw-text . binary))
-         mc-flag program-coding-system-alist)
-      (insert string)
-      (apply 'call-process-region (point-min) (point-max)
-            canlock-mmencode-program t t nil
-            canlock-mmencode-args-for-encoding)
-      (goto-char (point-max))
-      (skip-chars-backward "\n")
-      (buffer-substring (point-min) (point)))))
-
-(defun canlock-hex-string-to-int (string)
-  "Convert hexadecimal string to integer."
-  (let ((integer 0))
-    (mapcar
-     (lambda (hex)
-       (setq integer (+ (* 16 integer)
-                       (logand hex 15)
-                       (* (lsh hex -6) 9))))
-     string)
-    integer))
-
-(defun canlock-sha1-with-ssleay (message)
-  "Make a SHA1 digest from a specified message (string) with SSLeay."
-  (with-temp-buffer
-    (let ((coding-system-for-read 'binary)
-         (coding-system-for-write 'binary)
-         ;; For Mule 2 with APEL 9.12 or later.
-         (default-process-coding-system '(binary . binary))
-         mc-flag program-coding-system-alist
-         (case-fold-search t))
-      (insert message)
-      (apply 'call-process-region (point-min) (point-max)
-            canlock-ssleay-program t t nil canlock-ssleay-args)
-      (goto-char (point-min))
-      (while (re-search-forward "[0-9A-F][0-9A-F]" nil t)
-       (goto-char (match-beginning 0))
-       (insert-char (canlock-hex-string-to-int (match-string 0)) 1)
-       (delete-char 2))
-      (buffer-substring (point-min) (point)))))
-
-(defvar canlock-read-passwd nil)
-(defun canlock-read-passwd (prompt &rest args)
-  "Read a password using PROMPT.
-If ARGS, PROMPT is used as an argument to `format'."
-  (let ((prompt
-        (if args
-            (apply 'format prompt args)
-          prompt)))
-    (unless canlock-read-passwd
-      (if (or (fboundp 'read-passwd) (load "passwd" t))
-         (setq canlock-read-passwd 'read-passwd)
-       (unless (fboundp 'ange-ftp-read-passwd)
-         (autoload 'ange-ftp-read-passwd "ange-ftp"))
-       (setq canlock-read-passwd 'ange-ftp-read-passwd)))
-    (funcall canlock-read-passwd prompt)))
-
-(defun canlock-make-cancel-key (message-id password)
-  "Make a Cancel-Key header."
-  (cond ((> (length password) 20)
-        (setq password (funcall canlock-sha1-function password)))
-       ((< (length password) 20)
-        (setq password (concat
-                        password
-                        (make-string (- 20 (length password)) 0)))))
-  (setq password (concat password (make-string 44 0)))
-  (let ((ipad (mapconcat (lambda (char)
-                          (char-to-string (logxor 54 char)))
-                        password ""))
-       (opad (mapconcat (lambda (char)
-                          (char-to-string (logxor 92 char)))
-                        password "")))
-    (funcall canlock-base64-encode-function
-            (funcall canlock-sha1-function
-                     (concat
-                      opad
-                      (funcall canlock-sha1-function
-                               (concat ipad message-id)))))))
-
-(defun canlock-narrow-to-header ()
-  "Narrow to the message header."
-  (let (case-fold-search)
-    (narrow-to-region
-     (goto-char (point-min))
-     (goto-char (if (re-search-forward
-                    (format "^$\\|^%s$"
-                            (regexp-quote mail-header-separator))
-                    nil t)
-                   (match-beginning 0)
-                 (point-max))))))
-
-(defun canlock-delete-headers ()
-  "Delete Canlock headers if they already exist.
-The buffer is expected to be narrowed to just the headers of the message."
-  (let ((case-fold-search t))
-    (goto-char (point-min))
-    (while (re-search-forward "^Cancel-\\(Key\\|Lock\\):" nil t)
-      (delete-region (match-beginning 0)
-                    (if (re-search-forward "^[^\t ]" nil t)
-                        (goto-char (match-beginning 0))
-                      (point-max))))))
-
-(defun canlock-fetch-fields (&optional key)
-  "Return the list of values of Cancel-Lock field.
-If the optional arg KEY is non-nil, Cancel-Key field will be fetched.
-The buffer is expected to be narrowed to just the headers of the message."
-  (let ((feild (mail-fetch-field (if key "Cancel-Key" "Cancel-Lock")))
-       (case-fold-search t))
-    (when feild
-      (mapcar (lambda (str)
-               (string-match "^sha1:" str)
-               (substring str (match-end 0)))
-             (split-string feild "[\t\n\r ,]+")))))
-
-(defun canlock-fetch-id-for-key ()
-  "Return the Message-ID for Cancel-Key.
-The buffer is expected to be narrowed to just the headers of the message."
-  (let ((cancel (mail-fetch-field "Control")))
-    (if cancel
-       (progn
-         (string-match "^cancel[\t ]+\\(<[^\t\n @<>]+@[^\t\n @<>]+>\\)"
-                       cancel)
-         (match-string 1 cancel))
-      (or (mail-fetch-field "Supersedes")
-         (mail-fetch-field "Replaces")))))
-
-;;;###autoload
-(defun canlock-insert-header (&optional id-for-key id-for-lock password)
-  "Insert a Cancel-Key and/or a Cancel-Lock header if possible."
-  (let (news control key-for-key key-for-lock)
-    (save-excursion
-      (save-restriction
-       (canlock-narrow-to-header)
-       (when (setq news (or canlock-force-insert-header
-                            (mail-fetch-field "Newsgroups")))
-         (unless id-for-key
-           (setq id-for-key (canlock-fetch-id-for-key)))
-         (if (and (setq control (mail-fetch-field "Control"))
-                  (string-match
-                   "^cancel[\t ]+\\(<[^\t\n @<>]+@[^\t\n @<>]+>\\)"
-                   control))
-             (setq id-for-lock nil)
-           (unless id-for-lock
-             (setq id-for-lock (mail-fetch-field "Message-ID"))))
-         (canlock-delete-headers)
-         (goto-char (point-max))))
-      (when news
-       (if (not (or id-for-key id-for-lock))
-           (message "There are no Message-ID(s).")
-         (unless password
-           (setq password (or canlock-password
-                              (canlock-read-passwd
-                               "Password for Canlock: "))))
-         (if (or (not (stringp password)) (zerop (length password)))
-             (message "Password for Canlock is bad.")
-           (setq key-for-key (when id-for-key
-                               (canlock-make-cancel-key
-                                id-for-key password))
-                 key-for-lock (when id-for-lock
-                                (canlock-make-cancel-key
-                                 id-for-lock password)))
-           (if (not (or key-for-key key-for-lock))
-               (message "Couldn't insert Canlock header.")
-             (when key-for-key
-               (insert "Cancel-Key: sha1:" key-for-key "\n"))
-             (when key-for-lock
-               (insert "Cancel-Lock: sha1:"
-                       (funcall canlock-base64-encode-function
-                                (funcall canlock-sha1-function
-                                         key-for-lock))
-                       "\n")))))))))
-
-;;;###autoload
-(defun canlock-verify (&optional buffer)
-  "Verify Cancel-Lock or Cancel-Key. If failed, returns non-nil or signals
-an error if `canlock-ignore-errors' is nil.  If the optional arg BUFFER
-is not specified, it runs in place."
-  (interactive)
-  (let ((canlock-sha1-function (or canlock-sha1-function-for-verify
-                                  canlock-sha1-function))
-       keys locks errmsg id-for-key id-for-lock password
-       key-for-key key-for-lock match)
-    (save-excursion
-      (when buffer
-       (set-buffer buffer))
-      (save-restriction
-       (widen)
-       (canlock-narrow-to-header)
-       (setq keys (canlock-fetch-fields 'key)
-             locks (canlock-fetch-fields))
-       (if (not (or keys locks))
-           (setq errmsg
-                 "There are neither Cancel-Lock nor Cancel-Key fields.")
-         (setq id-for-key (canlock-fetch-id-for-key)
-               id-for-lock (mail-fetch-field "Message-ID"))
-         (or id-for-key id-for-lock
-             (setq errmsg "There are no Message-ID(s).")))))
-
-    (if errmsg
-       (if canlock-ignore-errors
-           errmsg
-         (error "%s" errmsg))
-
-      (setq password (or canlock-password-for-verify
-                        (canlock-read-passwd "Password for Canlock: ")))
-      (if (or (not (stringp password)) (zerop (length password)))
-         (progn
-           (setq errmsg "Password for Canlock is bad.")
-           (if canlock-ignore-errors
-               errmsg
-             (error "%s" errmsg)))
-
-       (when keys
-         (when id-for-key
-           (setq key-for-key (canlock-make-cancel-key id-for-key password))
-           (while (and keys (not match))
-             (setq match (string-equal key-for-key (pop keys)))))
-         (setq keys (if match "good" "bad")))
-       (setq match nil)
-
-       (when locks
-         (when id-for-lock
-           (setq key-for-lock
-                 (funcall canlock-base64-encode-function
-                          (funcall canlock-sha1-function
-                                   (canlock-make-cancel-key
-                                    id-for-lock password))))
-           (when (and locks (not match))
-             (setq match (string-equal key-for-lock (pop locks)))))
-         (setq locks (if match "good" "bad")))
-
-       (prog1
-           (when (member "bad" (list keys locks))
-             "bad")
-         (cond ((and keys locks)
-                (message "Cancel-Key is %s, Cancel-Lock is %s." keys locks))
-               (locks
-                (message "Cancel-Lock is %s." locks))
-               (keys
-                (message "Cancel-Key is %s." keys))))))))
-
-;; Avoid byte compile warnings.
-(defvar gnus-show-all-headers)
-(defvar gnus-original-article-buffer)
-(defvar mh-show-buffer)
-(defvar vm-mail-buffer)
-(defvar vm-message-pointer)
-(defvar cmail-current-folder)
-(defvar rmail-buffer)
-
-;;;###autoload
-(defun gnus-summary-canlock-verify ()
-  "Run `canlock-verify' from gnus summary buffer."
-  (interactive)
-  (gnus-summary-select-article gnus-show-all-headers)
-  (canlock-verify gnus-original-article-buffer))
-
-;;;###autoload
-(defun wl-summary-canlock-verify ()
-  "Run `canlock-verify' from Wanderlust summary buffer."
-  (interactive)
-  (wl-summary-set-message-buffer-or-redisplay)
-  (canlock-verify (wl-message-get-original-buffer)))
-
-(eval-when-compile
-  (if (or (featurep 'use-mew-1.94b20-or-later)
-         (and (fboundp 'function-max-args)
-              (or (fboundp 'mew-summary-display)
-                  (load "mew-summary" t))
-              (eq 2 (function-max-args 'mew-summary-display))))
-      (progn
-       (defmacro canlock-mew-summary-display ()
-         '(mew-summary-display t))
-       (message "Use mew-1.94b20 or later."))
-    (defmacro canlock-mew-summary-display ()
-      '(condition-case nil
-          (mew-summary-display)
-        (wrong-number-of-arguments
-         (mew-summary-display t))))
-    ))
-
-;;;###autoload
-(defun mew-summary-canlock-verify ()
-  "Run `canlock-verify' from Mew summary buffer."
-  (interactive)
-  (canlock-mew-summary-display)
-  (canlock-verify (mew-buffer-message)))
-
-;;;###autoload
-(defun mh-summary-canlock-verify ()
-  "Run `canlock-verify' from MH folder buffer."
-  (interactive)
-  (mh-header-display)
-  (canlock-verify mh-show-buffer))
-
-;;;###autoload
-(defun vm-summary-canlock-verify ()
-  "Run `canlock-verify' from VM summary buffer."
-  (interactive)
-  (vm-follow-summary-cursor)
-  (if (and vm-mail-buffer (buffer-name vm-mail-buffer))
-      (save-excursion
-       (set-buffer vm-mail-buffer)
-       (let* ((mp (car vm-message-pointer))
-              (header (save-restriction
-                        (widen)
-                        (buffer-substring
-                         (aref (aref mp 0) 0) (vm-text-of mp)))))
-         (with-temp-buffer
-           (insert header)
-           (canlock-verify))))
-    (or canlock-ignore-errors
-       (error "Folder buffer has been killed."))))
-
-;;;###autoload
-(defun cmail-summary-canlock-verify ()
-  "Run `canlock-verify' from cmail summary buffer."
-  (interactive)
-  (let* ((page (cmail-get-page-number-from-summary))
-        (header (save-excursion
-                  (set-buffer (cmail-folder-buffer cmail-current-folder))
-                  (cmail-n-page page)
-                  (buffer-substring (point)
-                                    (if (search-forward "\n\n" nil t)
-                                        (1- (point))
-                                      (point-max))))))
-    (with-temp-buffer
-      (insert header)
-      (canlock-verify))))
-
-;;;###autoload
-(defun rmail-summary-canlock-verify ()
-  "Run `canlock-verify' from RMAIL summary buffer."
-  (interactive)
-  (rmail-summary-rmail-update)
-  (let ((header (save-excursion
-                 (set-buffer rmail-buffer)
-                 (goto-char (point-min))
-                 (save-restriction
-                   (widen)
-                   (search-backward "\n\C-_\C-l\n") ;; ^_^L
-                   (re-search-forward "^[^\t\n ]+:")
-                   (buffer-substring
-                    (goto-char (match-beginning 0))
-                    (progn (search-forward "\n\n")
-                           (1- (point))))))))
-    (with-temp-buffer
-      (insert header)
-      (canlock-verify))))
-
-(provide 'canlock)
-
-(run-hooks 'canlock-load-hook)
-
-;;; canlock.el ends here
diff --git a/contrib/gnus-idna.el b/contrib/gnus-idna.el
deleted file mode 100644 (file)
index 15c47b6..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-;;; gnus-idna.el --- Internationalized domain names support for Gnus.
-
-;; Copyright (C) 2003 Free Software Foundation, Inc.
-
-;; Author: Simon Josefsson
-;; Keywords: news, mail
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; This package implement crude support for internationalized domain
-;; names in Gnus.
-
-;; Theory of Operation:
-
-;; RFC 2822 RHS's inside the From:, To:, and CC: headers are encoded
-;; using IDNA ToASCII() when you send mail using Message.  The hook
-;; used is message-send-hook.
-;;
-;; For incoming articles, when QP in headers are decoded (i.e., when
-;; gnus-article-decode-hook is invoked), it searches for "xn--"
-;; prefixes and decode them if they are found inside (heuristically
-;; determined) RHS in From:, To: and Cc:, using IDNA ToUnicode().
-
-;; Usage:
-
-;; You need to install GNU Libidn (0.1.11 or later) and make sure the
-;; idna.el installed by it is found by emacs.
-
-;; If you use an older Gnus, you may need to put the following in your
-;; init scripts too, but keep in mind that most older Gnuses either
-;; doesn't have these hooks or are buggy in other regards so it
-;; doesn't work anyway.  (The window of Gnus versions that this works
-;; on is a few weeks during the Oort CVS in winter 2003.)  Update to a
-;; recent Gnus instead, then you don't have to do anything.
-
-;; (add-hook 'message-send-hook 'message-idna-to-ascii-rhs)
-;; (add-hook 'gnus-article-decode-hook 'gnus-idna-to-unicode-rhs 'append)
-
-;; Revision history:
-
-;; 2003-02-26 Initial release
-;;
-;; 2003-03-19 Cleanup. Fixes a bug that may corrupt outgoing mail if
-;;            it contains From:, To: or Cc: headers in the body.
-
-;;; Code:
-
-(require 'gnus)
-(require 'gnus-util)
-(require 'rfc822)
-(autoload 'idna-to-ascii "idna")
-(autoload 'idna-to-unicode "idna")
-
-(defcustom message-use-idna 'ask
-  "Whether to encode non-ASCII in domain names into ASCII according to IDNA."
-  :type '(choice (const :tag "Ask" ask)
-                (const :tag "Never" nil)
-                (const :tag "Always" t)))
-
-(defun message-idna-inside-rhs-p ()
-  "Return t iff point is inside a RHS (heuristically).
-Only works properly if header contains mailbox-list or address-list.
-I.e., calling it on a Subject: header is useless."
-  (if (re-search-backward
-       "[\\\n\r\t ]" (save-excursion (search-backward "@" nil t)) t)
-      ;; whitespace between @ and point
-      nil
-    (let ((dquote 1) (paren 1))
-      (while (save-excursion (re-search-backward "[^\\]\"" nil t dquote))
-       (incf dquote))
-      (while (save-excursion (re-search-backward "[^\\]\(" nil t paren))
-       (incf paren))
-      (and (= (% dquote 2) 1) (= (% paren 2) 1)))))
-
-(defun message-idna-to-ascii-rhs-1 (header)
-  "Interactively potentially IDNA encode domain names in HEADER."
-  (let (rhs ace start end startpos endpos)
-    (goto-char (point-min))
-    (setq start (re-search-forward (concat "^" header) nil t)
-         end (or (save-excursion (re-search-forward "^[ \t]" nil t))
-                 (point-max)))
-    (when (and start end)
-      (while (re-search-forward "@\\([^ \t\r\n>]+\\)" end t)
-       (setq rhs (match-string-no-properties 1)
-             startpos (match-beginning 1)
-             endpos (match-end 1))
-       (when (save-match-data
-               (and (message-idna-inside-rhs-p)
-                    (setq ace (idna-to-ascii rhs))
-                    (not (string= rhs ace))
-                    (if (eq message-use-idna 'ask)
-                        (unwind-protect
-                            (progn
-                              (replace-highlight startpos endpos)
-                              (y-or-n-p
-                               (format "Replace with `%s'? " ace)))
-                          (message "")
-                          (replace-dehighlight))
-                      message-use-idna)))
-         (replace-match (concat "@" ace)))))))
-
-;;;###autoload
-(defun message-idna-to-ascii-rhs ()
-  "Possibly IDNA encode non-ASCII domain names in From:, To: and Cc: headers.
-See `message-idna-encode'."
-  (interactive)
-  (when (condition-case nil (require 'idna) (file-error))
-    (save-excursion
-      (save-restriction
-       (message-narrow-to-head)
-       (message-idna-to-ascii-rhs-1 "From")
-       (message-idna-to-ascii-rhs-1 "To")
-       (message-idna-to-ascii-rhs-1 "Cc")))))
-
-;;;###autoload
-(defun gnus-idna-to-unicode-rhs ()
-  "Decode IDNA strings in RHS in From:, To: and Cc: headers in current buffer."
-  (when (condition-case nil (require 'idna) (file-error))
-    (let ((inhibit-point-motion-hooks t)
-         buffer-read-only)
-      (article-narrow-to-head)
-      (goto-char (point-min))
-      (while (re-search-forward "\\(xn--.*\\)[ \t\n\r,>]" nil t)
-       (let (ace unicode)
-         (when (save-match-data
-                 (and (setq ace (match-string 1))
-                      (save-excursion (and (re-search-backward "^[^ \t]" nil t)
-                                           (looking-at "From\\|To\\|Cc")))
-                      (save-excursion (backward-char)
-                                      (message-idna-inside-rhs-p))
-                      (setq unicode (idna-to-unicode ace))))
-           (unless (string= ace unicode)
-             (replace-match unicode nil nil nil 1))))))))
-
-(provide 'gnus-idna)
-
-;; gnus-idna.el ends here
diff --git a/contrib/hashcash.el b/contrib/hashcash.el
deleted file mode 100644 (file)
index f526546..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-;;; hashcash.el --- Add hashcash payments to email
-
-;; $Revision: 1.1.1.6 $
-;; Copyright (C) 2003 Free Software Foundation
-;; Copyright (C) 1997--2002 Paul E. Foley
-
-;; Maintainer: Paul Foley <mycroft@actrix.gen.nz>
-;; Keywords: mail, hashcash
-
-;; Released under the GNU General Public License
-;;   (http://www.gnu.org/licenses/gpl.html)
-
-;;; Commentary:
-
-;; The hashcash binary is at http://www.cypherspace.org/hashcash/
-;;
-;; Call mail-add-payment to add a hashcash payment to a mail message
-;; in the current buffer.
-;;
-;; To automatically add payments to all outgoing mail:
-;;    (add-hook 'message-send-hook 'mail-add-payment)
-
-;;; Code:
-
-(eval-and-compile
- (autoload 'executable-find "executable"))
-
-(defcustom hashcash-default-payment 0
-  "*The default number of bits to pay to unknown users.
-If this is zero, no payment header will be generated.
-See `hashcash-payment-alist'."
-  :type 'integer)
-
-(defcustom hashcash-payment-alist '()
-  "*An association list mapping email addresses to payment amounts.
-Elements may consist of (ADDR AMOUNT) or (ADDR STRING AMOUNT), where
-ADDR is the email address of the intended recipient and AMOUNT is
-the value of hashcash payment to be made to that user.  STRING, if
-present, is the string to be hashed; if not present ADDR will be used.")
-
-(defcustom hashcash-default-accept-payment 10
-  "*The default minimum number of bits to accept on incoming payments."
-  :type 'integer)
-
-(defcustom hashcash-accept-resources `((,user-mail-address nil))
-  "*An association list mapping hashcash resources to payment amounts.
-Resources named here are to be accepted in incoming payments.  If the
-corresponding AMOUNT is NIL, the value of `hashcash-default-accept-payment'
-is used instead.")
-
-(defcustom hashcash-path (executable-find "hashcash")
-  "*The path to the hashcash binary.")
-
-(defcustom hashcash-double-spend-database "hashcash.db"
-  "*The path to the double-spending database.")
-
-(defcustom hashcash-in-news nil
-  "*Specifies whether or not hashcash payments should be made to newsgroups."
-  :type 'boolean)
-
-(require 'mail-utils)
-
-(eval-and-compile
- (if (fboundp 'point-at-bol)
-     (defalias 'hashcash-point-at-bol 'point-at-bol)
-   (defalias 'hashcash-point-at-bol 'line-beginning-position))
-
- (if (fboundp 'point-at-eol)
-     (defalias 'hashcash-point-at-eol 'point-at-eol)
-   (defalias 'hashcash-point-at-eol 'line-end-position)))
-
-(defun hashcash-strip-quoted-names (addr)
-  (setq addr (mail-strip-quoted-names addr))
-  (if (and addr (string-match "\\`\\([^+@]+\\)\\+[^@]*\\(@.+\\)" addr))
-      (concat (match-string 1 addr) (match-string 2 addr))
-    addr))
-
-(defun hashcash-payment-required (addr)
-  "Return the hashcash payment value required for the given address."
-  (let ((val (assoc addr hashcash-payment-alist)))
-    (or (nth 2 val) (nth 1 val) hashcash-default-payment)))
-
-(defun hashcash-payment-to (addr)
-  "Return the string with which hashcash payments should collide."
-  (let ((val (assoc addr hashcash-payment-alist)))
-    (or (nth 1 val) (nth 0 val) addr)))
-
-(defun hashcash-generate-payment (str val)
-  "Generate a hashcash payment by finding a VAL-bit collison on STR."
-  (if (> val 0)
-      (save-excursion
-       (set-buffer (get-buffer-create " *hashcash*"))
-       (erase-buffer)
-       (call-process hashcash-path nil t nil
-                     "-m" "-q" "-b" (number-to-string val) str)
-       (goto-char (point-min))
-       (buffer-substring (hashcash-point-at-bol) (hashcash-point-at-eol)))
-    nil))
-
-(defun hashcash-check-payment (token str val)
-  "Check the validity of a hashcash payment."
-  (zerop (call-process hashcash-path nil nil nil "-c"
-                      "-d" "-f" hashcash-double-spend-database
-                      "-b" (number-to-string val)
-                      "-r" str
-                      token)))
-
-(defun hashcash-version (token)
-  "Find the format version of a hashcash token."
-  ;; Version 1.2 looks like n:yymmdd:rrrrr:xxxxxxxxxxxxxxxx
-  ;;   This carries its own version number embedded in the token,
-  ;;   so no further format number changes should be necessary
-  ;;   in the X-Payment header.
-  ;;
-  ;; Version 1.1 looks like yymmdd:rrrrr:xxxxxxxxxxxxxxxx
-  ;;   You need to upgrade your hashcash binary.
-  ;;
-  ;; Version 1.0 looked like nnnnnrrrrrxxxxxxxxxxxxxxxx
-  ;;   This is no longer supported.
-  (cond ((equal (aref token 1) ?:) 1.2)
-       ((equal (aref token 6) ?:) 1.1)
-       (t (error "Unknown hashcash format version"))))
-
-;;;###autoload
-(defun hashcash-insert-payment (arg)
-  "Insert X-Payment and X-Hashcash headers with a payment for ARG"
-  (interactive "sPay to: ")
-  (let ((pay (hashcash-generate-payment (hashcash-payment-to arg)
-                                       (hashcash-payment-required arg))))
-    (when pay
-;      (insert-before-markers "X-Payment: hashcash "
-;                           (number-to-string (hashcash-version pay)) " "
-;                           pay "\n")
-      (insert-before-markers "X-Hashcash: " pay "\n"))))
-
-;;;###autoload
-(defun hashcash-verify-payment (token &optional resource amount)
-  "Verify a hashcash payment"
-  (let ((key (if (< (hashcash-version token) 1.2)
-                (nth 1 (split-string token ":"))
-                (nth 2 (split-string token ":")))))
-    (cond ((null resource)
-          (let ((elt (assoc key hashcash-accept-resources)))
-            (and elt (hashcash-check-payment token (car elt)
-                       (or (cadr elt) hashcash-default-accept-payment)))))
-         ((equal token key)
-          (hashcash-check-payment token resource
-                               (or amount hashcash-default-accept-payment)))
-         (t nil))))
-
-;;;###autoload
-(defun mail-add-payment (&optional arg)
-  "Add X-Payment: and X-Hashcash: headers with a hashcash payment
-for each recipient address.  Prefix arg sets default payment temporarily."
-  (interactive "P")
-  (let ((hashcash-default-payment (if arg (prefix-numeric-value arg)
-                                   hashcash-default-payment))
-       (addrlist nil))
-    (save-excursion
-      (save-restriction
-       (goto-char (point-min))
-       (search-forward mail-header-separator)
-       (beginning-of-line)
-       (narrow-to-region (point-min) (point))
-       (let ((to (hashcash-strip-quoted-names (mail-fetch-field "To" nil t)))
-             (cc (hashcash-strip-quoted-names (mail-fetch-field "Cc" nil t)))
-             (ng (hashcash-strip-quoted-names (mail-fetch-field "Newsgroups"
-                                                                nil t))))
-         (when to
-           (setq addrlist (split-string to ",[ \t\n]*")))
-         (when cc
-           (setq addrlist (nconc addrlist (split-string cc ",[ \t\n]*"))))
-         (when (and hashcash-in-news ng)
-           (setq addrlist (nconc addrlist (split-string ng ",[ \t\n]*")))))
-       (when addrlist
-         (mapcar #'hashcash-insert-payment addrlist))))) ; mapc
-  t)
-
-;;;###autoload
-(defun mail-check-payment (&optional arg)
-  "Look for a valid X-Payment: or X-Hashcash: header.
-Prefix arg sets default accept amount temporarily."
-  (interactive "P")
-  (let ((hashcash-default-accept-payment (if arg (prefix-numeric-value arg)
-                                          hashcash-default-accept-payment))
-       (version (hashcash-version (hashcash-generate-payment "x" 1))))
-    (save-excursion
-      (goto-char (point-min))
-      (search-forward "\n\n")
-      (beginning-of-line)
-      (let ((end (point))
-           (ok nil))
-       (goto-char (point-min))
-       (while (and (not ok) (search-forward "X-Payment: hashcash " end t))
-         (let ((value (split-string
-                         (buffer-substring (point) (hashcash-point-at-eol))
-                         " ")))
-           (when (equal (car value) (number-to-string version))
-             (setq ok (hashcash-verify-payment (cadr value))))))
-       (goto-char (point-min))
-       (while (and (not ok) (search-forward "X-Hashcash: " end t))
-         (setq ok (hashcash-verify-payment
-                   (buffer-substring (point) (hashcash-point-at-eol)))))
-       (when ok
-         (message "Payment valid"))
-       ok))))
-
-(provide 'hashcash)
diff --git a/contrib/md5.el b/contrib/md5.el
deleted file mode 100644 (file)
index a036819..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-;;; md5.el -- MD5 Message Digest Algorithm
-;;; Gareth Rees <gdr11@cl.cam.ac.uk>
-
-;; LCD Archive Entry:
-;; md5|Gareth Rees|gdr11@cl.cam.ac.uk|
-;; MD5 cryptographic message digest algorithm|
-;; 13-Nov-95|1.0|~/misc/md5.el.Z|
-
-;;; Details: ------------------------------------------------------------------
-
-;; This is a direct translation into Emacs LISP of the reference C
-;; implementation of the MD5 Message-Digest Algorithm written by RSA
-;; Data Security, Inc.
-;;
-;; The algorithm takes a message (that is, a string of bytes) and
-;; computes a 16-byte checksum or "digest" for the message.  This digest
-;; is supposed to be cryptographically strong in the sense that if you
-;; are given a 16-byte digest D, then there is no easier way to
-;; construct a message whose digest is D than to exhaustively search the
-;; space of messages.  However, the robustness of the algorithm has not
-;; been proven, and a similar algorithm (MD4) was shown to be unsound,
-;; so treat with caution!
-;;
-;; The C algorithm uses 32-bit integers; because GNU Emacs
-;; implementations provide 28-bit integers (with 24-bit integers on
-;; versions prior to 19.29), the code represents a 32-bit integer as the
-;; cons of two 16-bit integers.  The most significant word is stored in
-;; the car and the least significant in the cdr.  The algorithm requires
-;; at least 17 bits of integer representation in order to represent the
-;; carry from a 16-bit addition.
-
-;;; Usage: --------------------------------------------------------------------
-
-;; To compute the MD5 Message Digest for a message M (represented as a
-;; string or as a vector of bytes), call
-;;
-;;   (md5-encode M)
-;;
-;; which returns the message digest as a vector of 16 bytes.  If you
-;; need to supply the message in pieces M1, M2, ... Mn, then call
-;;
-;;   (md5-init)
-;;   (md5-update M1)
-;;   (md5-update M2)
-;;   ...
-;;   (md5-update Mn)
-;;   (md5-final)
-
-;;; Copyright and licence: ----------------------------------------------------
-
-;; Copyright (C) 1995 by Gareth Rees
-;; Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm
-;;
-;; md5.el is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by the
-;; Free Software Foundation; either version 2, or (at your option) any
-;; later version.
-;;
-;; md5.el is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-;; for more details.
-;;
-;; The original copyright notice is given below, as required by the
-;; licence for the original code.  This code is distributed under *both*
-;; RSA's original licence and the GNU General Public Licence.  (There
-;; should be no problems, as the former is more liberal than the
-;; latter).
-
-;;; Original copyright notice: ------------------------------------------------
-
-;; Copyright (C) 1990, RSA Data Security, Inc. All rights reserved.
-;;
-;; License to copy and use this software is granted provided that it is
-;; identified as the "RSA Data Security, Inc. MD5 Message- Digest
-;; Algorithm" in all material mentioning or referencing this software or
-;; this function.
-;;
-;; License is also granted to make and use derivative works provided
-;; that such works are identified as "derived from the RSA Data
-;; Security, Inc. MD5 Message-Digest Algorithm" in all material
-;; mentioning or referencing the derived work.
-;;
-;; RSA Data Security, Inc. makes no representations concerning either
-;; the merchantability of this software or the suitability of this
-;; software for any particular purpose.  It is provided "as is" without
-;; express or implied warranty of any kind.
-;;
-;; These notices must be retained in any copies of any part of this
-;; documentation and/or software.
-
-;;; Code:
-
-(defvar md5-program "md5sum"
-  "*Program that reads a message on its standard input and writes an
-MD5 digest on its output.")
-
-(defvar md5-maximum-internal-length 4096
-  "*The maximum size of a piece of data that should use the MD5 routines
-written in lisp.  If a message exceeds this, it will be run through an
-external filter for processing.  Also see the `md5-program' variable.
-This variable has no effect if you call the md5-init|update|final
-functions - only used by the `md5' function's simpler interface.")
-
-(defvar md5-bits (make-vector 4 0)
-  "Number of bits handled, modulo 2^64.
-Represented as four 16-bit numbers, least significant first.")
-(defvar md5-buffer (make-vector 4 '(0 . 0))
-  "Scratch buffer (four 32-bit integers).")
-(defvar md5-input (make-vector 64 0)
-  "Input buffer (64 bytes).")
-
-(defun md5-unhex (x)
-  (if (> x ?9)
-      (if (>= x ?a)
-         (+ 10 (- x ?a))
-       (+ 10 (- x ?A)))
-    (- x ?0)))
-
-(defun md5-encode (message)
-  "Encodes MESSAGE using the MD5 message digest algorithm.
-MESSAGE must be a string or an array of bytes.
-Returns a vector of 16 bytes containing the message digest."
-  (if (<= (length message) md5-maximum-internal-length)
-      (progn
-       (md5-init)
-       (md5-update message)
-       (md5-final))
-    (save-excursion
-      (set-buffer (get-buffer-create " *md5-work*"))
-      (erase-buffer)
-      (insert message)
-      (call-process-region (point-min) (point-max)
-                          (or shell-file-name "/bin/sh")
-                          t (current-buffer) nil
-                          "-c" md5-program)
-      ;; MD5 digest is 32 chars long
-      ;; mddriver adds a newline to make neaten output for tty
-      ;; viewing, make sure we leave it behind.
-      (let ((data (buffer-substring (point-min) (+ (point-min) 32)))
-           (vec (make-vector 16 0))
-           (ctr 0))
-       (while (< ctr 16)
-         (aset vec ctr (+ (* 16 (md5-unhex (aref data (* ctr 2))))
-                          (md5-unhex (aref data (1+ (* ctr 2))))))
-         (setq ctr (1+ ctr)))))))
-
-(defsubst md5-add (x y)
-  "Return 32-bit sum of 32-bit integers X and Y."
-  (let ((m (+ (car x) (car y)))
-        (l (+ (cdr x) (cdr y))))
-    (cons (logand 65535 (+ m (lsh l -16))) (logand l 65535))))
-
-;; FF, GG, HH and II are basic MD5 functions, providing transformations
-;; for rounds 1, 2, 3 and 4 respectively.  Each function follows this
-;; pattern of computation (where ROTATE(x,y) means rotate 32-bit value x
-;; by y bits to the left):
-;;
-;;   FF(a,b,c,d,x,s,ac) = ROTATE(a + F(b,c,d) + x + ac,s) + b
-;;
-;; so we use the macro `md5-make-step' to construct each one.  The
-;; helper functions F, G, H and I operate on 16-bit numbers; the full
-;; operation splits its inputs, operates on the halves separately and
-;; then puts the results together.
-
-(defsubst md5-F (x y z) (logior (logand x y) (logand (lognot x) z)))
-(defsubst md5-G (x y z) (logior (logand x z) (logand y (lognot z))))
-(defsubst md5-H (x y z) (logxor x y z))
-(defsubst md5-I (x y z) (logxor y (logior x (logand 65535 (lognot z)))))
-
-(defmacro md5-make-step (name func)
-  (`
-   (defun (, name) (a b c d x s ac)
-     (let*
-         ((m1 (+ (car a) ((, func) (car b) (car c) (car d)) (car x) (car ac)))
-          (l1 (+ (cdr a) ((, func) (cdr b) (cdr c) (cdr d)) (cdr x) (cdr ac)))
-          (m2 (logand 65535 (+ m1 (lsh l1 -16))))
-          (l2 (logand 65535 l1))
-          (m3 (logand 65535 (if (> s 15)
-                                (+ (lsh m2 (- s 32)) (lsh l2 (- s 16)))
-                              (+ (lsh m2 s) (lsh l2 (- s 16))))))
-          (l3 (logand 65535 (if (> s 15)
-                                (+ (lsh l2 (- s 32)) (lsh m2 (- s 16)))
-                              (+ (lsh l2 s) (lsh m2 (- s 16)))))))
-       (md5-add (cons m3 l3) b)))))
-
-(md5-make-step md5-FF md5-F)
-(md5-make-step md5-GG md5-G)
-(md5-make-step md5-HH md5-H)
-(md5-make-step md5-II md5-I)
-
-(defun md5-init ()
-  "Initialise the state of the message-digest routines."
-  (aset md5-bits 0 0)
-  (aset md5-bits 1 0)
-  (aset md5-bits 2 0)
-  (aset md5-bits 3 0)
-  (aset md5-buffer 0 '(26437 .  8961))
-  (aset md5-buffer 1 '(61389 . 43913))
-  (aset md5-buffer 2 '(39098 . 56574))
-  (aset md5-buffer 3 '( 4146 . 21622)))
-
-(defun md5-update (string)
-  "Update the current MD5 state with STRING (an array of bytes)."
-  (let ((len (length string))
-        (i 0)
-        (j 0))
-    (while (< i len)
-      ;; Compute number of bytes modulo 64
-      (setq j (% (/ (aref md5-bits 0) 8) 64))
-
-      ;; Store this byte (truncating to 8 bits to be sure)
-      (aset md5-input j (logand 255 (aref string i)))
-
-      ;; Update number of bits by 8 (modulo 2^64)
-      (let ((c 8) (k 0))
-        (while (and (> c 0) (< k 4))
-          (let ((b (aref md5-bits k)))
-            (aset md5-bits k (logand 65535 (+ b c)))
-            (setq c (if (> b (- 65535 c)) 1 0)
-                  k (1+ k)))))
-
-      ;; Increment number of bytes processed
-      (setq i (1+ i))
-
-      ;; When 64 bytes accumulated, pack them into sixteen 32-bit
-      ;; integers in the array `in' and then tranform them.
-      (if (= j 63)
-          (let ((in (make-vector 16 (cons 0 0)))
-                (k 0)
-                (kk 0))
-            (while (< k 16)
-              (aset in k (md5-pack md5-input kk))
-              (setq k (+ k 1) kk (+ kk 4)))
-            (md5-transform in))))))
-
-(defun md5-pack (array i)
-  "Pack the four bytes at ARRAY reference I to I+3 into a 32-bit integer."
-  (cons (+ (lsh (aref array (+ i 3)) 8) (aref array (+ i 2)))
-        (+ (lsh (aref array (+ i 1)) 8) (aref array (+ i 0)))))
-
-(defun md5-byte (array n b)
-  "Unpack byte B (0 to 3) from Nth member of ARRAY of 32-bit integers."
-  (let ((e (aref array n)))
-    (cond ((eq b 0) (logand 255 (cdr e)))
-          ((eq b 1) (lsh (cdr e) -8))
-          ((eq b 2) (logand 255 (car e)))
-          ((eq b 3) (lsh (car e) -8)))))
-
-(defun md5-final ()
-  (let ((in (make-vector 16 (cons 0 0)))
-        (j 0)
-        (digest (make-vector 16 0))
-        (padding))
-
-    ;; Save the number of bits in the message
-    (aset in 14 (cons (aref md5-bits 1) (aref md5-bits 0)))
-    (aset in 15 (cons (aref md5-bits 3) (aref md5-bits 2)))
-
-    ;; Compute number of bytes modulo 64
-    (setq j (% (/ (aref md5-bits 0) 8) 64))
-
-    ;; Pad out computation to 56 bytes modulo 64
-    (setq padding (make-vector (if (< j 56) (- 56 j) (- 120 j)) 0))
-    (aset padding 0 128)
-    (md5-update padding)
-
-    ;; Append length in bits and transform
-    (let ((k 0) (kk 0))
-      (while (< k 14)
-        (aset in k (md5-pack md5-input kk))
-        (setq k (+ k 1) kk (+ kk 4))))
-    (md5-transform in)
-
-    ;; Store the results in the digest
-    (let ((k 0) (kk 0))
-      (while (< k 4)
-        (aset digest (+ kk 0) (md5-byte md5-buffer k 0))
-        (aset digest (+ kk 1) (md5-byte md5-buffer k 1))
-        (aset digest (+ kk 2) (md5-byte md5-buffer k 2))
-        (aset digest (+ kk 3) (md5-byte md5-buffer k 3))
-        (setq k (+ k 1) kk (+ kk 4))))
-
-    ;; Return digest
-    digest))
-
-;; It says in the RSA source, "Note that if the Mysterious Constants are
-;; arranged backwards in little-endian order and decrypted with the DES
-;; they produce OCCULT MESSAGES!"  Security through obscurity?
-
-(defun md5-transform (in)
-  "Basic MD5 step. Transform md5-buffer based on array IN."
-  (let ((a (aref md5-buffer 0))
-        (b (aref md5-buffer 1))
-        (c (aref md5-buffer 2))
-        (d (aref md5-buffer 3)))
-    (setq
-     a (md5-FF a b c d (aref in  0)  7 '(55146 . 42104))
-     d (md5-FF d a b c (aref in  1) 12 '(59591 . 46934))
-     c (md5-FF c d a b (aref in  2) 17 '( 9248 . 28891))
-     b (md5-FF b c d a (aref in  3) 22 '(49597 . 52974))
-     a (md5-FF a b c d (aref in  4)  7 '(62844 .  4015))
-     d (md5-FF d a b c (aref in  5) 12 '(18311 . 50730))
-     c (md5-FF c d a b (aref in  6) 17 '(43056 . 17939))
-     b (md5-FF b c d a (aref in  7) 22 '(64838 . 38145))
-     a (md5-FF a b c d (aref in  8)  7 '(27008 . 39128))
-     d (md5-FF d a b c (aref in  9) 12 '(35652 . 63407))
-     c (md5-FF c d a b (aref in 10) 17 '(65535 . 23473))
-     b (md5-FF b c d a (aref in 11) 22 '(35164 . 55230))
-     a (md5-FF a b c d (aref in 12)  7 '(27536 .  4386))
-     d (md5-FF d a b c (aref in 13) 12 '(64920 . 29075))
-     c (md5-FF c d a b (aref in 14) 17 '(42617 . 17294))
-     b (md5-FF b c d a (aref in 15) 22 '(18868 .  2081))
-     a (md5-GG a b c d (aref in  1)  5 '(63006 .  9570))
-     d (md5-GG d a b c (aref in  6)  9 '(49216 . 45888))
-     c (md5-GG c d a b (aref in 11) 14 '( 9822 . 23121))
-     b (md5-GG b c d a (aref in  0) 20 '(59830 . 51114))
-     a (md5-GG a b c d (aref in  5)  5 '(54831 .  4189))
-     d (md5-GG d a b c (aref in 10)  9 '(  580 .  5203))
-     c (md5-GG c d a b (aref in 15) 14 '(55457 . 59009))
-     b (md5-GG b c d a (aref in  4) 20 '(59347 . 64456))
-     a (md5-GG a b c d (aref in  9)  5 '( 8673 . 52710))
-     d (md5-GG d a b c (aref in 14)  9 '(49975 .  2006))
-     c (md5-GG c d a b (aref in  3) 14 '(62677 .  3463))
-     b (md5-GG b c d a (aref in  8) 20 '(17754 .  5357))
-     a (md5-GG a b c d (aref in 13)  5 '(43491 . 59653))
-     d (md5-GG d a b c (aref in  2)  9 '(64751 . 41976))
-     c (md5-GG c d a b (aref in  7) 14 '(26479 .   729))
-     b (md5-GG b c d a (aref in 12) 20 '(36138 . 19594))
-     a (md5-HH a b c d (aref in  5)  4 '(65530 . 14658))
-     d (md5-HH d a b c (aref in  8) 11 '(34673 . 63105))
-     c (md5-HH c d a b (aref in 11) 16 '(28061 . 24866))
-     b (md5-HH b c d a (aref in 14) 23 '(64997 . 14348))
-     a (md5-HH a b c d (aref in  1)  4 '(42174 . 59972))
-     d (md5-HH d a b c (aref in  4) 11 '(19422 . 53161))
-     c (md5-HH c d a b (aref in  7) 16 '(63163 . 19296))
-     b (md5-HH b c d a (aref in 10) 23 '(48831 . 48240))
-     a (md5-HH a b c d (aref in 13)  4 '(10395 . 32454))
-     d (md5-HH d a b c (aref in  0) 11 '(60065 . 10234))
-     c (md5-HH c d a b (aref in  3) 16 '(54511 . 12421))
-     b (md5-HH b c d a (aref in  6) 23 '( 1160 .  7429))
-     a (md5-HH a b c d (aref in  9)  4 '(55764 . 53305))
-     d (md5-HH d a b c (aref in 12) 11 '(59099 . 39397))
-     c (md5-HH c d a b (aref in 15) 16 '( 8098 . 31992))
-     b (md5-HH b c d a (aref in  2) 23 '(50348 . 22117))
-     a (md5-II a b c d (aref in  0)  6 '(62505 .  8772))
-     d (md5-II d a b c (aref in  7) 10 '(17194 . 65431))
-     c (md5-II c d a b (aref in 14) 15 '(43924 .  9127))
-     b (md5-II b c d a (aref in  5) 21 '(64659 . 41017))
-     a (md5-II a b c d (aref in 12)  6 '(25947 . 22979))
-     d (md5-II d a b c (aref in  3) 10 '(36620 . 52370))
-     c (md5-II c d a b (aref in 10) 15 '(65519 . 62589))
-     b (md5-II b c d a (aref in  1) 21 '(34180 . 24017))
-     a (md5-II a b c d (aref in  8)  6 '(28584 . 32335))
-     d (md5-II d a b c (aref in 15) 10 '(65068 . 59104))
-     c (md5-II c d a b (aref in  6) 15 '(41729 . 17172))
-     b (md5-II b c d a (aref in 13) 21 '(19976 .  4513))
-     a (md5-II a b c d (aref in  4)  6 '(63315 . 32386))
-     d (md5-II d a b c (aref in 11) 10 '(48442 . 62005))
-     c (md5-II c d a b (aref in  2) 15 '(10967 . 53947))
-     b (md5-II b c d a (aref in  9) 21 '(60294 . 54161)))
-
-    (aset md5-buffer 0 (md5-add (aref md5-buffer 0) a))
-    (aset md5-buffer 1 (md5-add (aref md5-buffer 1) b))
-    (aset md5-buffer 2 (md5-add (aref md5-buffer 2) c))
-    (aset md5-buffer 3 (md5-add (aref md5-buffer 3) d))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Here begins the merger with the XEmacs API and the md5.el from the URL
-;;; package.  Courtesy wmperry@spry.com
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun md5 (object &optional start end)
-  "Return the MD5 (a secure message digest algorithm) of an object.
-OBJECT is either a string or a buffer.
-Optional arguments START and END denote buffer positions for computing the
-hash of a portion of OBJECT."
-  (let ((buffer nil))
-    (unwind-protect
-       (save-excursion
-         (setq buffer (generate-new-buffer " *md5-work*"))
-         (set-buffer buffer)
-         (cond
-          ((bufferp object)
-           (insert-buffer-substring object start end))
-          ((stringp object)
-           (insert (if (or start end)
-                       (substring object start end)
-                     object)))
-          (t nil))
-         (prog1
-             (if (<= (point-max) md5-maximum-internal-length)
-                 (mapconcat
-                  (function (lambda (node) (format "%02x" node)))
-                  (md5-encode (buffer-string))
-                  "")
-               (call-process-region (point-min) (point-max)
-                                    (or shell-file-name "/bin/sh")
-                                    t buffer nil
-                                    "-c" md5-program)
-               ;; MD5 digest is 32 chars long
-               ;; mddriver adds a newline to make neaten output for tty
-               ;; viewing, make sure we leave it behind.
-               (buffer-substring (point-min) (+ (point-min) 32)))
-           (kill-buffer buffer)))
-      (and buffer (kill-buffer buffer) nil))))
-
-(provide 'md5)
-
-;;; md5.el ends here
diff --git a/contrib/mml-smime.el b/contrib/mml-smime.el
deleted file mode 100644 (file)
index a216fe8..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-;;; mml-smime.el --- S/MIME support for MML
-;; Copyright (c) 2000 Free Software Foundation, Inc.
-
-;; Author: Simon Josefsson <simon@josefsson.org>
-;; Keywords: Gnus, MIME, SMIME, MML
-
-;; This file is a part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published
-;; by the Free Software Foundation; either version 2, or (at your
-;; option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; This support creation of S/MIME parts in MML.
-
-;; Usage:
-;;    (mml-smime-setup)
-;; 
-;; Insert an attribute, postprocess=smime-sign (or smime-encrypt), into
-;; the mml tag to be signed (or encrypted).
-;;
-;; It is based on rfc2015.el by Shenghuo Zhu.
-
-;;; Code:
-
-(require 'smime)
-
-(defun mml-smime-sign (cont)
-  ;; FIXME: You have to input the sender.
-  (when (null smime-keys)
-    (error "Please use M-x customize RET smime RET to configure SMIME"))
-  (smime-sign-buffer)
-  (goto-char (point-min))
-  (when (looking-at "^MIME-Version: 1.0")
-    (forward-line 1)
-    (delete-region (point-min) (point)))
-  (goto-char (point-max)))
-  
-(defun mml-smime-encrypt (cont)
-  ;; FIXME: You have to input the receiptant.
-  ;; FIXME: Should encrypt to myself so I can read it??
-  (smime-encrypt-buffer)
-  (goto-char (point-min))
-  (when (looking-at "^MIME-Version: 1.0")
-    (forward-line 1)
-    (delete-region (point-min) (point)))
-  (goto-char (point-max)))
-
-;; The following code might be moved into mml.el or gnus-art.el.
-
-(defvar mml-postprocess-alist
-  '(("smime-sign" . mml-smime-sign)
-    ("smime-encrypt" . mml-smime-encrypt))
-  "Alist of postprocess functions.")
-
-(defun mml-postprocess (cont)
-  (let ((pp (cdr (or (assq 'postprocess cont)
-                    (assq 'pp cont))))
-       item)
-    (if (and pp (setq item (assoc pp mml-postprocess-alist)))
-       (funcall (cdr item) cont))))
-
-(defun mml-smime-setup ()
-  (setq mml-generate-mime-postprocess-function 'mml-postprocess))
-
-(provide 'mml-smime)
-
-;;; mml-smime.el ends here
diff --git a/contrib/rfc2015.el b/contrib/rfc2015.el
deleted file mode 100644 (file)
index d182bbb..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-;;; rfc2015.el --- MIME Security with Pretty Good Privacy (PGP)
-;; Copyright (c) 2000 Shenghuo Zhu
-
-;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Keywords: PGP MIME
-
-;; This file is not (yet) a part of GNU Emacs. Hope it 
-;; will be a part of oGnus distribution, then GNU Emacs.
-
-;; This file is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published
-;; by the Free Software Foundation; either version 2, or (at your
-;; option) any later version.
-
-;; This file is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Installation: put the following statements in ~/.gnus:
-;;    (require 'rfc2015)
-;;    (require 'gnus-art)
-;;    (rfc2015-setup)
-;; You may have to make sure that the directory where this file lives
-;; is mentioned in `load-path'.
-;; 
-;; Insert an attribute, postprocess=pgp-sign (or pgp-encrypt), into
-;; the mml tag to be signed (or encrypted).
-
-;;; Code:
-
-(defvar rfc2015-decrypt-function 'mailcrypt-decrypt)
-(defvar rfc2015-verify-function 'mailcrypt-verify)
-
-(defun rfc2015-decrypt (handle)
-  (let (child)
-    (cond 
-     ((setq child (mm-find-part-by-type (cdr handle) 
-                                       "application/octet-stream"))
-      (let (handles result)
-       (with-temp-buffer
-         (mm-insert-part child)
-         (setq result (funcall rfc2015-decrypt-function))
-         (unless (car result)
-           (error "Decrypting error."))
-         (setq handles (mm-dissect-buffer t)))
-       (setq gnus-article-mime-handles
-             (append (if (listp (car gnus-article-mime-handles))
-                         gnus-article-mime-handles
-                       (list gnus-article-mime-handles))
-                     (if (listp (car handles))
-                         handles
-                       (list handles))))
-       (gnus-mime-display-part handles)))
-     (t
-      (if (y-or-n-p "Corrupted pgp-encrypted part. Abort?" )
-         (error "Corrupted pgp-encrypted part.")
-       (gnus-mime-display-mixed (cdr handle)))))))
-
-;; FIXME: mm-dissect-buffer loses information of micalg and the
-;; original header of signed part.
-
-(defun rfc2015-verify (handle)
-  (if (y-or-n-p "Verify signed part?" )
-      (let (child result hash)
-       (with-temp-buffer
-         (unless (setq child (mm-find-part-by-type 
-                              (cdr handle) "application/pgp-signature" t))
-           (error "Corrupted pgp-signature part."))
-         (insert "-----BEGIN PGP SIGNED MESSAGE-----\n")
-         (insert (format "Hash: %s\n\n" (read-string "Hash: " "SHA1")))
-         (mm-insert-part child)
-         (goto-char (point-max))
-         (unless (bolp)
-           (insert "\n"))
-         (unless (setq child (mm-find-part-by-type 
-                              (cdr handle) "application/pgp-signature"))
-           (error "Corrupted pgp-signature part."))
-         (mm-insert-part child)
-         (setq result (funcall rfc2015-verify-function))
-         (unless result
-           (error "Verify error.")))))
-  (gnus-mime-display-part 
-   (mm-find-part-by-type 
-    (cdr handle) "application/pgp-signature" t)))
-
-(defvar rfc2015-mailcrypt-prefix 0)
-
-(defun rfc2015-mailcrypt-sign (cont)
-  (mailcrypt-sign rfc2015-mailcrypt-prefix)
-  (let ((boundary 
-        (funcall mml-boundary-function (incf mml-multipart-number)))
-       (scheme-alist (funcall (or mc-default-scheme 
-                                  (cdr (car mc-schemes)))))
-       hash)
-    (goto-char (point-min))
-    (unless (re-search-forward (cdr (assq 'signed-begin-line scheme-alist)))
-      (error "Cannot find signed begin line." ))
-    (goto-char (match-beginning 0))
-    (forward-line 1)
-    (unless (looking-at "Hash:[ \t]*\\([a-zA-Z0-9]+\\)")
-      (error "Cannot not find PGP hash." ))
-    (setq hash (match-string 1))
-    (unless (re-search-forward "^$" nil t)
-      (error "Cannot not find PGP message." ))
-    (forward-line 1)
-    (delete-region (point-min) (point))
-    (insert (format "Content-Type: multipart/signed; boundary=\"%s\";\n"
-                   boundary))
-    (insert (format "\tmicalg=pgp-%s; protocol=\"application/pgp-signature\"\n"
-                   hash))
-    (insert "\n")
-    (insert (format "--%s\n" boundary))
-    (unless (re-search-forward (cdr (assq 'signed-end-line scheme-alist)))
-      (error "Cannot find signature part." ))
-    (goto-char (match-beginning 0))
-    (unless (re-search-backward "^-+BEGIN" nil t)
-      (error "Cannot find signature part." ))
-    (goto-char (match-beginning 0))
-    (insert (format "--%s\n" boundary))
-    (insert "Content-Type: application/pgp-signature\n\n")
-    (goto-char (point-max))
-    (insert (format "--%s--\n" boundary))
-    (goto-char (point-max))))
-
-(defun rfc2015-mailcrypt-encrypt (cont)
-  ;; FIXME:
-  ;; You have to input the receiptant.
-  (mailcrypt-encrypt rfc2015-mailcrypt-prefix)
-  (let ((boundary 
-        (funcall mml-boundary-function (incf mml-multipart-number))))
-    (goto-char (point-min))
-    (insert (format "Content-Type: multipart/encrypted; boundary=\"%s\";\n"
-                   boundary))
-    (insert "\tprotocol=\"application/pgp-encrypted\"\n\n")
-    (insert (format "--%s\n" boundary))
-    (insert "Content-Type: application/pgp-encrypted\n\n")
-    (insert "Version: 1\n\n")
-    (insert (format "--%s\n" boundary))
-    (insert "Content-Type: application/octet-stream\n\n")
-    (goto-char (point-max))
-    (insert (format "--%s--\n" boundary))
-    (goto-char (point-max))))
-
-;; The following code might be moved into mml.el or gnus-art.el.
-
-(defvar mml-postprocess-alist
-  '(("pgp-sign" . rfc2015-mailcrypt-sign)
-    ("pgp-encrypt" . rfc2015-mailcrypt-encrypt))
-  "Alist of postprocess functions.")
-
-(defun mml-postprocess (cont)
-  (let ((pp (cdr (or (assq 'postprocess cont)
-                    (assq 'pp cont))))
-       item)
-    (if (and pp (setq item (assoc pp mml-postprocess-alist)))
-       (funcall (cdr item) cont))))
-
-(defun rfc2015-setup ()
-  (setq mml-generate-mime-postprocess-function 'mml-postprocess)
-;  (push '("multipart/signed" . rfc2015-verify)
-;      gnus-mime-multipart-functions)
-  (push '("multipart/encrypted" . rfc2015-decrypt)
-       gnus-mime-multipart-functions))
-
-;; The following code might be moved into mm-decode.el.
-
-(defun mm-find-part-by-type (handles type &optional notp) 
-  (let (handle)
-    (while handles
-      (if (if notp
-             (not (equal (mm-handle-media-type (car handles)) type))
-           (equal (mm-handle-media-type (car handles)) type))
-         (setq handle (car handles)
-               handles nil))
-      (setq handles (cdr handles)))
-    handle))
-
-(provide 'rfc2015)
-
-;;; rfc2015.el ends here
diff --git a/contrib/sha1.el b/contrib/sha1.el
deleted file mode 100644 (file)
index f4706b8..0000000
+++ /dev/null
@@ -1,397 +0,0 @@
-;;; sha1.el --- SHA1 Message Digest Algorithm.
-;; Copyright (C) 1998,1999 Keiichi Suzuki.
-
-;; Author: Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
-;; Author: Katsumi Yamaoka <yamaoka@jpl.org>
-;; Created: 1998-12-25
-;; Revised: 1999-01-13
-;; Keywords: sha1, news, cancel-lock, hmac, rfc2104
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;;; A copy of the GNU General Public License can be obtained from this
-;;; program's author (send electronic mail to kyle@uunet.uu.net) or from
-;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
-;;; 02139, USA.
-
-;;; Commentary:
-
-;; This is a direct translation into Emacs LISP of the reference C
-;; implementation of the SHA1 message digest algorithm.
-
-;;; Usage:
-
-;; To compute the SHA1 message digest for a message M (represented as
-;; a string), call
-;; 
-;;   (sha1-encode M)
-;;
-;; which returns the message digest as a hexadecimal string of 20 bytes.
-;; If you need to supply the message in pieces M1, M2, ... Mn, then call
-;; 
-;;   (sha1-init)
-;;   (sha1-update M1)
-;;   (sha1-update M2)
-;;   ...
-;;   (sha1-update Mn)
-;;   (sha1-final)
-
-;;; Notes:
-
-;; The C algorithm uses 32-bit integers; because GNU Emacs
-;; implementations provide 28-bit integers (with 24-bit integers on
-;; versions prior to 19.29), the code represents a 32-bit integer as the
-;; cons of two 16-bit integers.  The most significant word is stored in
-;; the car and the least significant in the cdr.  The algorithm requires
-;; at least 19 bits of integer representation in order to represent the
-;; carry from a 16-bit addition. (see sha1-add())
-
-;;; Code:
-
-(defmacro sha1-f1 (x y z)
-  `(cons
-    (logior (logand (car ,x) (car ,y)) (logand (lognot (car ,x)) (car ,z)))
-    (logior (logand (cdr ,x) (cdr ,y)) (logand (lognot (cdr ,x)) (cdr ,z)))
-    ))
-
-(defmacro sha1-f2 (x y z)
-  `(cons
-    (logxor (car ,x) (car ,y) (car ,z))
-    (logxor (cdr ,x) (cdr ,y) (cdr ,z))
-    ))
-
-(defmacro sha1-f3 (x y z)
-  `(cons
-    (logior (logand (car ,x) (car ,y)) (logand (car ,x) (car ,z))
-           (logand (car ,y) (car ,z)))
-    (logior (logand (cdr ,x) (cdr ,y)) (logand (cdr ,x) (cdr ,z))
-           (logand (cdr ,y) (cdr ,z)))
-    ))
-
-(defmacro sha1-f4 (x y z)
-  `(cons
-    (logxor (car ,x) (car ,y) (car ,z))
-    (logxor (cdr ,x) (cdr ,y) (cdr ,z))
-    ))
-
-(defconst sha1-const1 '(23170 . 31129)
-  "SHA constants 1 \(0x5a827999\)")
-(defconst sha1-const2 '(28377 . 60321)
-  "SHA constants 2 \(0x6ed9eba1\)")
-(defconst sha1-const3 '(36635 . 48348)
-  "SHA constants 3 \(0x8f1bbcdc\)")
-(defconst sha1-const4 '(51810 . 49622)
-  "SHA constants 4 \(0xca62c1d6\)")
-
-(defvar sha1-digest (make-vector 5 nil))
-(defvar sha1-count-lo nil)
-(defvar sha1-count-hi nil)
-(defvar sha1-data nil)
-(defvar sha1-local nil)
-(defconst SHA1-BLOCKSIZE 64)
-
-(defun sha1-init ()
-  "Initialize the state of the SHA1 message digest routines."
-  (aset sha1-digest 0 (cons 26437 8961))
-  (aset sha1-digest 1 (cons 61389 43913))
-  (aset sha1-digest 2 (cons 39098 56574))
-  (aset sha1-digest 3 (cons  4146 21622))
-  (aset sha1-digest 4 (cons 50130 57840))
-  (setq sha1-count-lo (cons 0 0)
-       sha1-count-hi (cons 0 0)
-       sha1-local 0
-       sha1-data nil)
-  )
-
-(defmacro sha1-32-make (v)
-  "Return 32bits internal value from normal integer."
-  `(cons (lsh ,v -16) (logand 65535 ,v)))
-
-(defun sha1-add (to &rest vals)
-  "Set sum of all the arguments to the first one."
-  (let (val)
-    (while (setq val (car vals))
-      (setcar to (+ (car to) (car val)))
-      (setcdr to (+ (cdr to) (cdr val)))
-      (setq vals (cdr vals))
-      )
-    (setcar to (logand 65535 (+ (car to) (lsh (cdr to) -16))))
-    (setcdr to (logand 65535 (cdr to)))
-    to
-    ))
-
-(defun sha1-xor (to &rest vals)
-  "Set bitwise-exclusive-or of all the arguments to the first one."
-  (let (val)
-    (while (setq val (car vals))
-      (setcar to (logxor (car to) (car val)))
-      (setcdr to (logxor (cdr to) (cdr val)))
-      (setq vals (cdr vals)))
-    ))
-
-(defmacro sha1-rot (val c1 c2)
-  "Internal macro for sha1-rot-*."
-  `(cons
-    (logand 65535 (logior (lsh (car ,val) ,c1) (lsh (cdr ,val) ,c2)))
-    (logand 65535 (logior (lsh (cdr ,val) ,c1) (lsh (car ,val) ,c2)))
-    ))
-
-(defmacro sha1-rot-1 (val)
-  "Return VAL with its bits rotated left by 1."
-  `(sha1-rot ,val 1 -15)
-  )
-
-(defmacro sha1-rot-5 (val)
-  "Return VAL with its bits rotated left by 5."
-  `(sha1-rot ,val 5 -11)
-  )
-
-(defmacro sha1-rot-30 (val)
-  "Return VAL with its bits rotated left by 30."
-  `(sha1-rot ,val -2 14)
-  )
-
-(defun sha1-inc (to)
-  "Set TO pulus one to TO."
-  (setcdr to (1+ (cdr to)))
-  (when (> (cdr to) 65535)
-    (setcdr to (logand 65535 (cdr to)))
-    (setcar to (logand 65535 (1+ (car to))))))
-
-(defun sha1-lsh (to v count)
-  "Set TO with its bits shifted left by COUNT to TO."
-  (setcar to (logand 65535
-                    (logior (lsh (car v) count) (lsh (cdr v) (- count 16)))))
-  (setcdr to (logand 65535 (lsh (cdr v) count)))
-  to
-  )
-
-(defun sha1-rsh (to v count)
-  "Set TO with its bits shifted right by COUNT to TO."
-  (setq count (- 0 count))
-  (setcdr to (logand 65535
-                    (logior (lsh (cdr v) count) (lsh (car v) (- count 16)))))
-  (setcar to (logand 65535 (lsh (car v) count)))
-  to
-  )
-
-(defun sha1-< (v1 v2)
-  "Return t if firast argment is less then second argument."
-  (or (< (car v1) (car v2))
-      (and (eq (car v1) (car v2))
-          (< (cdr v1) (cdr v2))))
-  )
-
-(unless (fboundp 'string-as-unibyte)
-  (defsubst string-as-unibyte (string)
-    string)
-  )
-
-(defun sha1-update (bytes)
-  "Update the current SHA1 state with BYTES (an string of uni-bytes)."
-  (setq bytes (string-as-unibyte bytes))
-  (let* ((len (length bytes))
-        (len32 (sha1-32-make len))
-        (tmp32 (cons 0 0))
-        (top 0)
-        (clo (cons 0 0))
-        i done)
-    (sha1-add clo sha1-count-lo (sha1-lsh tmp32 len32 3))
-    (when (sha1-< clo sha1-count-lo)
-      (sha1-inc sha1-count-hi))
-    (setq sha1-count-lo clo)
-    (sha1-add sha1-count-hi (sha1-rsh tmp32 len32 29))
-    (when (> (length sha1-data) 0)
-      (setq i (- SHA1-BLOCKSIZE (length sha1-data)))
-      (when (> i len)
-       (setq i len))
-      (setq sha1-data (concat sha1-data (substring bytes 0 i)))
-      (setq len (- len i)
-           top i)
-      (if (eq (length sha1-data) SHA1-BLOCKSIZE)
-         (sha1-transform)
-       (setq done t)))
-    (when (not done)
-      (while (and (not done)
-                 (>= len SHA1-BLOCKSIZE))
-       (setq sha1-data (substring bytes top (+ top SHA1-BLOCKSIZE))
-             top (+ top SHA1-BLOCKSIZE)
-             len (- len SHA1-BLOCKSIZE))
-       (sha1-transform))
-      (setq sha1-data (substring bytes top (+ top len))))
-    ))
-
-(defmacro sha1-FA (n)
-  (let ((func (intern (format "sha1-f%d" n)))
-       (const (intern (format "sha1-const%d" n))))
-    `(setq T (sha1-add (cons 0 0) (sha1-rot-5 A) (,func B C D) E (aref W WIDX)
-                      ,const)
-          WIDX (1+ WIDX)
-          B (sha1-rot-30 B))))
-
-(defmacro sha1-FB (n)
-  (let ((func (intern (format "sha1-f%d" n)))
-       (const (intern (format "sha1-const%d" n))))
-    `(setq E (sha1-add (cons 0 0) (sha1-rot-5 T) (,func A B C) D (aref W WIDX)
-                      ,const)
-          WIDX (1+ WIDX)
-          A (sha1-rot-30 A))))
-
-(defmacro sha1-FC (n)
-  (let ((func (intern (format "sha1-f%d" n)))
-       (const (intern (format "sha1-const%d" n))))
-    `(setq D (sha1-add (cons 0 0) (sha1-rot-5 E) (,func T A B) C (aref W WIDX)
-                      ,const)
-          WIDX (1+ WIDX)
-          T (sha1-rot-30 T))))
-
-(defmacro sha1-FD (n)
-  (let ((func (intern (format "sha1-f%d" n)))
-       (const (intern (format "sha1-const%d" n))))
-    `(setq C (sha1-add (cons 0 0) (sha1-rot-5 D) (,func E T A) B (aref W WIDX)
-                      ,const)
-          WIDX (1+ WIDX)
-          E (sha1-rot-30 E))))
-
-(defmacro sha1-FE (n)
-  (let ((func (intern (format "sha1-f%d" n)))
-       (const (intern (format "sha1-const%d" n))))
-    `(setq B (sha1-add (cons 0 0) (sha1-rot-5 C) (,func D E T) A (aref W WIDX)
-                      ,const)
-          WIDX (1+ WIDX)
-          D (sha1-rot-30 D))))
-
-(defmacro sha1-FT (n)
-  (let ((func (intern (format "sha1-f%d" n)))
-       (const (intern (format "sha1-const%d" n))))
-    `(setq A (sha1-add (cons 0 0) (sha1-rot-5 B) (,func C D E) T (aref W WIDX)
-                      ,const)
-          WIDX (1+ WIDX)
-          C (sha1-rot-30 C))))
-
-(defun sha1-transform ()
-  "Basic SHA1 step. Transform sha1-digest based on sha1-data."
-  (let ((W (make-vector 80 nil))
-       (WIDX 0)
-       (bidx 0)
-       T A B C D E)
-    (while (< WIDX 16)
-      (aset W WIDX
-           (cons (logior (lsh (aref sha1-data bidx) 8)
-                         (aref sha1-data (setq bidx (1+ bidx))))
-                 (logior (lsh (aref sha1-data (setq bidx (1+ bidx))) 8)
-                         (aref sha1-data (setq bidx (1+ bidx))))))
-      (setq bidx (1+ bidx)
-           WIDX (1+ WIDX)))
-    (while (< WIDX 80)
-      (aset W WIDX (cons 0 0))
-      (sha1-xor (aref W WIDX)
-                  (aref W (- WIDX 3)) (aref W (- WIDX 8))
-                  (aref W (- WIDX 14)) (aref W (- WIDX 16)))
-      (aset W WIDX (sha1-rot-1 (aref W WIDX)))
-      (setq WIDX (1+ WIDX)))
-    (setq A (cons (car (aref sha1-digest 0)) (cdr (aref sha1-digest 0)))
-         B (cons (car (aref sha1-digest 1)) (cdr (aref sha1-digest 1)))
-         C (cons (car (aref sha1-digest 2)) (cdr (aref sha1-digest 2)))
-         D (cons (car (aref sha1-digest 3)) (cdr (aref sha1-digest 3)))
-         E (cons (car (aref sha1-digest 4)) (cdr (aref sha1-digest 4)))
-         WIDX 0)
-
-    (sha1-FA 1) (sha1-FB 1) (sha1-FC 1) (sha1-FD 1) (sha1-FE 1) (sha1-FT 1)
-    (sha1-FA 1) (sha1-FB 1) (sha1-FC 1) (sha1-FD 1) (sha1-FE 1) (sha1-FT 1)
-    (sha1-FA 1) (sha1-FB 1) (sha1-FC 1) (sha1-FD 1) (sha1-FE 1) (sha1-FT 1)
-    (sha1-FA 1) (sha1-FB 1) (sha1-FC 2) (sha1-FD 2) (sha1-FE 2) (sha1-FT 2)
-    (sha1-FA 2) (sha1-FB 2) (sha1-FC 2) (sha1-FD 2) (sha1-FE 2) (sha1-FT 2)
-    (sha1-FA 2) (sha1-FB 2) (sha1-FC 2) (sha1-FD 2) (sha1-FE 2) (sha1-FT 2)
-    (sha1-FA 2) (sha1-FB 2) (sha1-FC 2) (sha1-FD 2) (sha1-FE 3) (sha1-FT 3)
-    (sha1-FA 3) (sha1-FB 3) (sha1-FC 3) (sha1-FD 3) (sha1-FE 3) (sha1-FT 3)
-    (sha1-FA 3) (sha1-FB 3) (sha1-FC 3) (sha1-FD 3) (sha1-FE 3) (sha1-FT 3)
-    (sha1-FA 3) (sha1-FB 3) (sha1-FC 3) (sha1-FD 3) (sha1-FE 3) (sha1-FT 3)
-    (sha1-FA 4) (sha1-FB 4) (sha1-FC 4) (sha1-FD 4) (sha1-FE 4) (sha1-FT 4)
-    (sha1-FA 4) (sha1-FB 4) (sha1-FC 4) (sha1-FD 4) (sha1-FE 4) (sha1-FT 4)
-    (sha1-FA 4) (sha1-FB 4) (sha1-FC 4) (sha1-FD 4) (sha1-FE 4) (sha1-FT 4)
-    (sha1-FA 4) (sha1-FB 4)
-
-    (sha1-add (aref sha1-digest 0) E)
-    (sha1-add (aref sha1-digest 1) T)
-    (sha1-add (aref sha1-digest 2) A)
-    (sha1-add (aref sha1-digest 3) B)
-    (sha1-add (aref sha1-digest 4) C)
-    ))
-
-(defun sha1-final (&optional binary)
-  "Transform buffered sha1-data and return SHA1 message digest.
-If optional argument BINARY is non-nil, then return binary formed 
-string of message digest."
-  (let ((count (logand (lsh (cdr sha1-count-lo) -3) 63)))
-    (when (< (length sha1-data) SHA1-BLOCKSIZE)
-      (setq sha1-data
-           (concat sha1-data
-                   (make-string (- SHA1-BLOCKSIZE (length sha1-data)) 0))))
-    (aset sha1-data count 128)
-    (setq count (1+ count))
-    (if (> count (- SHA1-BLOCKSIZE 8))
-       (progn
-         (setq sha1-data (concat (substring sha1-data 0 count)
-                                 (make-string (- SHA1-BLOCKSIZE count) 0)))
-         (sha1-transform)
-         (setq sha1-data (concat (make-string (- SHA1-BLOCKSIZE 8) 0)
-                                 (substring sha1-data -8))))
-      (setq sha1-data (concat (substring sha1-data 0 count)
-                             (make-string (- SHA1-BLOCKSIZE 8 count) 0)
-                             (substring sha1-data -8))))
-    (aset sha1-data 56 (lsh (car sha1-count-hi) -8))
-    (aset sha1-data 57 (logand 255 (car sha1-count-hi)))
-    (aset sha1-data 58 (lsh (cdr sha1-count-hi) -8))
-    (aset sha1-data 59 (logand 255 (cdr sha1-count-hi)))
-    (aset sha1-data 60 (lsh (car sha1-count-lo) -8))
-    (aset sha1-data 61 (logand 255 (car sha1-count-lo)))
-    (aset sha1-data 62 (lsh (cdr sha1-count-lo) -8))
-    (aset sha1-data 63 (logand 255 (cdr sha1-count-lo)))
-    (sha1-transform)
-    (if binary
-       (mapconcat
-        (lambda (elem)
-          (concat (char-to-string (/ (car elem) 256))
-                  (char-to-string (% (car elem) 256))
-                  (char-to-string (/ (cdr elem) 256))
-                  (char-to-string (% (cdr elem) 256))))
-        (list (aref sha1-digest 0) (aref sha1-digest 1) (aref sha1-digest 2)
-              (aref sha1-digest 3) (aref sha1-digest 4))
-        "")
-      (format "%04x%04x%04x%04x%04x%04x%04x%04x%04x%04x"
-             (car (aref sha1-digest 0)) (cdr (aref sha1-digest 0))
-             (car (aref sha1-digest 1)) (cdr (aref sha1-digest 1))
-             (car (aref sha1-digest 2)) (cdr (aref sha1-digest 2))
-             (car (aref sha1-digest 3)) (cdr (aref sha1-digest 3))
-             (car (aref sha1-digest 4)) (cdr (aref sha1-digest 4)))
-      )))
-
-(defun sha1-encode (message &optional binary)
-  "Encodes MESSAGE using the SHA1 message digest algorithm.
-MESSAGE must be a unibyte-string.
-By default, return a string which formed hex-decimal charcters
-from message digest.
-If optional argument BINARY is non-nil, then return binary formed
-string of message digest."
-  (sha1-init)
-  (sha1-update message)
-  (sha1-final binary))
-
-(defun sha1-encode-binary (message)
-  "Encodes MESSAGE using the SHA1 message digest algorithm.
-MESSAGE must be a unibyte-string.
-Return binary formed string of message digest."
-  (sha1-encode message 'binary))
-
-(provide 'sha1)
-
-;;; sha1.el ends here
diff --git a/contrib/smime.el b/contrib/smime.el
deleted file mode 100644 (file)
index fb76337..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-;;; smime.el --- S/MIME support library
-;; Copyright (c) 2000 Free Software Foundation, Inc.
-
-;; Author: Simon Josefsson <simon@josefsson.org>
-;; Keywords: SMIME X.509 PEM OpenSSL
-
-;; This file is not a part of GNU Emacs, but the same permissions apply.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published
-;; by the Free Software Foundation; either version 2, or (at your
-;; option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; This library perform S/MIME operations from within Emacs.
-;;
-;; Functions for fetching certificates from public repositories are
-;; NOT provided (yet).
-;;
-;; It uses OpenSSL (tested with version 0.9.5a) for signing,
-;; encryption and decryption.
-;;
-;; Some general knowledge of S/MIME, X.509, PKCS#12, PEM etc is
-;; probably required to use this library in any useful way.
-;; Especially, don't expect this library to buy security for you.  If
-;; you don't understand what you are doing, you're as likely to lose
-;; security than gain any by using this library.
-
-;;; Quick introduction:
-
-;; Get your S/MIME certificate from VeriSign or someplace.  I used
-;; Netscape to generate the key and certificate request and stuff, and
-;; Netscape can export the key into PKCS#12 format.
-;;
-;; Enter OpenSSL.  To be able to use this library, it need to have the
-;; SMIME key readable in PEM format.  OpenSSL is used to convert the
-;; key:
-;;
-;; $ openssl pkcs12 -in mykey.p12 -clcerts -nodes > mykey.pem
-;; ...
-;;
-;; Now, use M-x customize-variable smime-keys and add mykey.pem as
-;; a key.
-;;
-;; Now you should be able to sign messages!  Create a buffer and write
-;; something and run M-x smime-sign-buffer RET RET and you should see
-;; your message MIME armoured and a signature.  Encryption, M-x
-;; smime-encrypt-buffer, should also work.
-;;
-;; To be able to verify messages you need to build up trust with
-;; someone.  Perhaps you trust the CA that issued your certificate, at
-;; least I did, so I export it's certificates from my PKCS#12
-;; certificate with:
-;;
-;; $ openssl pkcs12 -in mykey.p12 -cacerts -nodes > cacert.pem
-;; ...
-;;
-;; Now, use M-x customize-variable smime-CAs and add cacert.pem as a
-;; CA certificate.
-;;
-;; You should now be able to sign messages, and even verify messages
-;; sent by others that use the same CA as you.
-
-;; Bugs:
-;;
-;; Don't complain that this package doesn't do encrypted PEM files,
-;; submit a patch instead.  I store my keys in a safe place, so I
-;; didn't need the encryption.  Also, programming this was made a lot
-;; easier by that decision.  One might think that this even influenced
-;; were I store my keys, and one would probably be right. :-)
-;;
-;; Suggestions and comments are appreciated, mail me at simon@josefsson.org.
-
-;; <rant>
-;;
-;; I would include pointers to introductory text on concepts used in
-;; this library here, but the material I've read are so horrible I
-;; don't want to recomend them.
-;;
-;; Why can't someone write a simple introduction to all this stuff?
-;; Until then, much of this resemble security by obscurity.
-;;
-;; Also, I'm not going to mention anything about the wonders of
-;; cryptopolitics.  Oops, I just did.
-;;
-;; </rant>
-
-;;; Revision history:
-
-;; version 0 not released
-
-;;; Code:
-
-(defgroup smime nil
-  "S/MIME configuration.")
-
-(defcustom smime-keys nil
-  "Map your mail addresses to a file with your certified key.
-The file is assumed to be in PEM format and not encrypted."
-  :type '(repeat (list (string :tag "Mail address")
-                      (file :tag "File name")))
-  :group 'smime)
-
-(defcustom smime-CAs nil
-  "List of directories/files containing certificates for CAs you trust.
-Files should be in PEM format.
-Directories should contain files (in PEM format) named to the X.509
-hash of the certificate."
-  :type '(repeat (radio (directory :tag "Trusted CA directory")
-                       (file :tag "Trusted CA file")))
-  :group 'smime)
-
-(defcustom smime-certificate-directory "~/Mail/certs/"
-  "Directory containing other people's certificates.
-It should contain files named to the X.509 hash of the certificate,
-and the files themself should be in PEM format.
-The S/MIME library provide simple functionality for fetching
-certificates into this directory, so there is no need to populate it
-manually."
-  :type 'directory
-  :group 'smime)
-
-(defcustom smime-openssl-program "openssl"
-  "Name of OpenSSL binary."
-  :type 'string
-  :group 'smime)
-
-;; OpenSSL wrappers.
-
-(defun smime-call-openssl-region (b e buf &rest args)
-  (case (apply 'call-process-region b e smime-openssl-program nil buf nil args)
-    (0 t)
-    (1 (error "OpenSSL: An error occurred parsing the command options."))
-    (2 (error "OpenSSL: One of the input files could not be read."))
-    (3 (error "OpenSSL: an error occurred creating the PKCS#7 file or when reading the MIME message."))
-    (4 (error "OpenSSL: an error occurred decrypting or verifying the message."))
-    (t (error "Unknown OpenSSL exitcode %s" exitcode))))
-
-(defun smime-sign-region (b e keyfile)
-  "Sign region with certified key in KEYFILE.
-If signing fails, the buffer is not modified.  Region is assumed to
-have proper MIME tags.  KEYFILE is expected to contain a PEM encoded
-private key and certificate."
-  (let* ((buffer (generate-new-buffer (generate-new-buffer-name " *smime*"))))
-    (when (smime-call-openssl-region b e buffer "smime" "-sign"
-                                    "-signer" (expand-file-name keyfile))
-      (delete-region b e)
-      (insert-buffer buffer)
-      (kill-buffer buffer)
-      t)))
-
-(defun smime-encrypt-region (b e certfiles)
-  "Encrypt region for recipients specified in CERTFILES.
-If encryption fails, the buffer is not modified.  Region is assumed to
-have proper MIME tags.  CERTFILES is a list of filenames, each file
-is expected to contain of a PEM encoded certificate."
-  (let ((buffer (generate-new-buffer (generate-new-buffer-name " *smime*"))))
-    (when (apply 'smime-call-openssl-region b e buffer "smime" "-encrypt"
-                (mapcar 'expand-file-name certfiles))
-      (delete-region b e)
-      (insert-buffer buffer)
-      (kill-buffer buffer)
-      t)))
-
-(defun smime-sign-buffer (&optional keyfile buffer)
-  "S/MIME sign BUFFER with key in KEYFILE.
-KEYFILE should contain a PEM encoded key and certificate."
-  (interactive)
-  (with-current-buffer (or buffer (current-buffer))
-    (smime-sign-region
-     (point-min) (point-max) 
-     (or keyfile
-        (smime-get-key-by-email
-         (completing-read "Sign using which signature? " smime-keys nil nil
-                          (and (listp (car-safe smime-keys)) (caar smime-keys))))))))
-
-(defun smime-encrypt-buffer (&optional certfiles buffer)
-  "S/MIME encrypt BUFFER for recipients specified in CERTFILES.
-CERTFILES is a list of filenames, each file is expected to consist of
-a PEM encoded key and certificate.  Uses current buffer if BUFFER is
-nil."
-  (interactive)
-  (with-current-buffer (or buffer (current-buffer))
-    (smime-encrypt-region 
-     (point-min) (point-max)
-     (or certfiles
-        (list (read-file-name "Recipient's S/MIME certificate: "
-                              smime-certificate-directory nil))))))
-
-;; User interface.
-
-(defvar smime-buffer "*SMIME*")
-
-(defvar smime-mode-map nil)
-(put 'smime-mode 'mode-class 'special)
-
-(unless smime-mode-map
-  (setq smime-mode-map (make-sparse-keymap))
-  (suppress-keymap smime-mode-map)
-
-  (define-key smime-mode-map "q" 'smime-exit)
-  (define-key smime-mode-map "f" 'smime-certificate-info))
-
-(defun smime-mode ()
-  "Major mode for browsing, viewing and fetching certificates.
-
-All normal editing commands are switched off.
-\\<smime-mode-map>
-
-The following commands are available:
-
-\\{smime-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'smime-mode)
-  (setq mode-name "SMIME")
-  (setq mode-line-process nil)
-  (use-local-map smime-mode-map)
-  (buffer-disable-undo)
-  (setq truncate-lines t)
-  (setq buffer-read-only t))
-
-(defun smime-certificate-info (certfile)
-  (interactive "fCertificate file: ")
-  (let ((buffer (get-buffer-create (format "*certificate %s*" certfile))))
-    (switch-to-buffer buffer)
-    (erase-buffer)
-    (call-process smime-openssl-program nil buffer 'display
-                 "x509" "-in" (expand-file-name certfile) "-text")
-    (fundamental-mode)
-    (set-buffer-modified-p nil)
-    (toggle-read-only t)
-    (goto-char (point-min))))
-
-(defun smime-draw-buffer ()
-  (with-current-buffer smime-buffer
-    (let (buffer-read-only)
-      (erase-buffer)
-      (insert "\nYour keys:\n")
-      (dolist (key smime-keys)
-       (insert 
-        (format "\t\t%s: %s\n" (car key) (cadr key))))
-      (insert "\nTrusted Certificate Authoritys:\n")
-      (insert "\nKnown Certificates:\n"))))
-
-(defun smime ()
-  "Go to the SMIME buffer."
-  (interactive)
-  (unless (get-buffer smime-buffer)
-    (save-excursion
-      (set-buffer (get-buffer-create smime-buffer))
-      (smime-mode)))
-  (smime-draw-buffer)
-  (switch-to-buffer smime-buffer))
-
-(defun smime-exit ()
-  "Quit the S/MIME buffer."
-  (interactive)
-  (kill-buffer (current-buffer)))
-
-;; Other functions
-
-(defun smime-get-key-by-email (email)
-  (cadr (assoc email smime-keys)))
-
-(provide 'smime)
-
-;;; smime.el ends here
diff --git a/contrib/starttls.el b/contrib/starttls.el
deleted file mode 100644 (file)
index e34a671..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-;;; starttls.el --- STARTTLS support via wrapper around GNU TLS
-
-;; Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-;; Author: Simon Josefsson <simon@josefsson.org>
-;; Keywords: comm, tls, gnutls, ssl
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; This package implements a simple wrapper around the GNU TLS command
-;; line application "gnutls-cli" to make Emacs support STARTTLS.  It
-;; is backwards compatible (same API functions) with the "starttls.el"
-;; that is part of Emacs 21 written by Daiki Ueno <ueno@unixuser.org>.
-;; (That version used an external program "starttls" that isn't widely
-;; installed, and was based on OpenSSL.)
-
-;; This package require GNUTLS 0.9.90 (released 2003-10-08) or later.
-
-;; Usage is similar to `open-network-stream'.  Evaluating the following:
-;;
-;; (progn
-;;   (setq tmp (open-starttls-stream "test" (current-buffer) "mail.example.com" 143))
-;;   (process-send-string tmp ". starttls\n")
-;;   (sit-for 4)
-;;   (message "STARTTLS output:\n%s" (negotiate-starttls tmp))
-;;   (process-send-string tmp ". capability\n"))
-;;
-;; in, e.g., the *scratch* buffer, yields the following output:
-;;
-;; * OK imap.example.com Cyrus IMAP4 v2.1.15 server ready\r
-;; . OK Begin TLS negotiation now\r
-;; * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA ...
-;; . OK Completed\r
-;; nil
-;;
-;; And the message buffer contains:
-;;
-;; STARTTLS output:
-;; *** Starting TLS handshake
-;; - Server's trusted authorities:
-;;    [0]: O=Sendmail,OU=Sendmail Server,CN=imap.example.com,EMAIL=admin@imap.example.com
-;; - Certificate type: X.509
-;;  - Got a certificate list of 1 certificates.
-;;
-;;  - Certificate[0] info:
-;;  # The hostname in the certificate matches 'imap.example.com'.
-;;  # valid since: Wed Aug 28 12:47:00 CEST 2002
-;;  # expires at: Thu Aug 28 12:47:00 CEST 2003
-;;  # serial number: 00
-;;  # fingerprint: 06 3f 25 cb 44 aa 5c 1e 79 d7 63 86 f8 b1 9a cf
-;;  # version: #3
-;;  # public key algorithm: RSA
-;;  #   Modulus: 1024 bits
-;;  # Subject's DN: O=Sendmail,OU=Sendmail Server,CN=imap.example.com,EMAIL=admin@imap.example.com
-;;  # Issuer's DN: O=Sendmail,OU=Sendmail Server,CN=imap.example.com,EMAIL=admin@imap.example.com
-;;
-;;
-;; - Peer's certificate issuer is unknown
-;; - Peer's certificate is NOT trusted
-;; - Version: TLS 1.0
-;; - Key Exchange: RSA
-;; - Cipher: ARCFOUR 128
-;; - MAC: SHA
-;; - Compression: NULL
-
-;; Revision history:
-;;
-;; 2003-09-20: Added to Gnus CVS.
-;; 2003-10-02: Minor fixes.
-;; 2003-11-15: Cleanup, and posted to gnu.emacs.sources.
-;; 2003-11-28: Fixes variable name conflicts, various other fixes, posted g.e.s.
-
-;;; Code:
-
-(defgroup starttls nil
-  "Negotiated Transport Layer Security (STARTTLS) parameters."
-  :group 'comm)
-
-(defcustom starttls-file-name "gnutls-cli"
-  "Name of the program to run in a subprocess to open an STARTTLS connection.
-The program should read input on stdin, write output to stdout,
-and initiate TLS negotiation when receiving the SIGALRM signal.
-Also see `starttls-connect', `starttls-failure', and
-`starttls-success' for what the program should output after
-initial connection and successful negotiation respectively."
-  :type 'string
-  :group 'starttls)
-
-(defcustom starttls-extra-arguments nil
-  "List of extra arguments to `starttls-file-name'.
-E.g., (\"--protocols\" \"ssl3\")."
-  :type '(repeat string)
-  :group 'starttls)
-
-(defcustom starttls-process-connection-type nil
-  "*Value for `process-connection-type' to use when starting STARTTLS process."
-  :type 'boolean
-  :group 'starttls)
-
-(defcustom starttls-connect "- Simple Client Mode:\n\n"
-  "*Regular expression indicating successful connection.
-The default is what GNUTLS's \"gnutls-cli\" outputs."
-  ;; GNUTLS cli.c:main() print this string when it is starting to run
-  ;; in the application read/write phase.  If the logic, or the string
-  ;; itself, is modified, this must be updated.
-  :type 'regexp
-  :group 'starttls)
-
-(defcustom starttls-failure "\\*\\*\\* Handshake has failed"
-  "*Regular expression indicating failed TLS handshake.
-The default is what GNUTLS's \"gnutls-cli\" outputs."
-  ;; GNUTLS cli.c:do_handshake() print this string on failure.  If the
-  ;; logic, or the string itself, is modified, this must be updated.
-  :type 'regexp
-  :group 'starttls)
-
-(defcustom starttls-success "- Compression: "
-  "*Regular expression indicating completed TLS handshakes.
-The default is what GNUTLS's \"gnutls-cli\" outputs."
-  ;; GNUTLS cli.c:do_handshake() calls, on success,
-  ;; common.c:print_info(), that unconditionally print this string
-  ;; last.  If that logic, or the string itself, is modified, this
-  ;; must be updated.
-  :type 'regexp
-  :group 'starttls)
-
-(defun negotiate-starttls (process)
-  "Negotiate TLS on process opened by `open-starttls-stream'.
-This should typically only be done once.  It typically return a
-multi-line informational message with information about the
-handshake, or NIL on failure."
-  (let (buffer info old-max done-ok done-bad)
-    (if (null (setq buffer (process-buffer process)))
-       ;; XXX How to remove/extract the TLS negotiation junk?
-       (signal-process (process-id process) 'SIGALRM)
-      (with-current-buffer buffer
-       (save-excursion
-         (setq old-max (goto-char (point-max)))
-         (signal-process (process-id process) 'SIGALRM)
-         (while (and (processp process)
-                     (eq (process-status process) 'run)
-                     (save-excursion
-                       (goto-char old-max)
-                       (not (or (setq done-ok (re-search-forward
-                                               starttls-success nil t))
-                                (setq done-bad (re-search-forward
-                                                starttls-failure nil t))))))
-           (accept-process-output process 1 100)
-           (sit-for 0.1))
-         (setq info (buffer-substring-no-properties old-max (point-max)))
-         (delete-region old-max (point-max))
-         (if (or (and done-ok (not done-bad))
-                 ;; Prevent mitm that fake success msg after failure msg.
-                 (and done-ok done-bad (< done-ok done-bad)))
-             info
-           (message "STARTTLS negotiation failed: %s" info)
-           nil))))))
-
-(defun open-starttls-stream (name buffer host service)
-  "Open a TLS connection for a service to a host.
-Returns a subprocess-object to represent the connection.
-Input and output work as for subprocesses; `delete-process' closes it.
-Args are NAME BUFFER HOST SERVICE.
-NAME is name for process.  It is modified if necessary to make it unique.
-BUFFER is the buffer (or buffer-name) to associate with the process.
- Process output goes at end of that buffer, unless you specify
- an output stream or filter function to handle the output.
-Third arg is name of the host to connect to, or its IP address.
-Fourth arg SERVICE is name of the service desired, or an integer
-specifying a port number to connect to."
-  (message "Opening STARTTLS connection to `%s'..." host)
-  (let* (done
-        (old-max (with-current-buffer buffer (point-max)))
-        (process-connection-type starttls-process-connection-type)
-        (process (apply #'start-process name buffer
-                        starttls-file-name "-s" host
-                        "-p" (if (integerp service)
-                                 (int-to-string service)
-                               service)
-                        starttls-extra-arguments)))
-    (process-kill-without-query process)
-    (while (and (processp process)
-               (eq (process-status process) 'run)
-               (save-excursion
-                 (set-buffer buffer)
-                 (goto-char old-max)
-                 (not (setq done (re-search-forward
-                                  starttls-connect nil t)))))
-      (accept-process-output process 0 100)
-      (sit-for 0.1))
-    (if done
-       (with-current-buffer buffer
-         (delete-region old-max done))
-      (delete-process process)
-      (setq process nil))
-    (message "Opening STARTTLS connection to `%s'...%s"
-            host (if done "done" "failed"))
-    process))
-
-;; Compatibility with starttls.el by Daiki Ueno <ueno@unixuser.org>:
-(defvaralias 'starttls-program 'starttls-file-name)
-(make-obsolete-variable 'starttls-program 'starttls-file-name)
-(defvaralias 'starttls-extra-args 'starttls-extra-arguments)
-(make-obsolete-variable 'starttls-extra-args 'starttls-extra-arguments)
-(defalias 'starttls-open-stream 'open-starttls-stream)
-(defalias 'starttls-negotiate 'negotiate-starttls)
-
-(provide 'starttls)
-
-;;; starttls.el ends here
diff --git a/etc/gnus/bar.xbm b/etc/gnus/bar.xbm
deleted file mode 100644 (file)
index e61300a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#define noname_width 6
-#define noname_height 48
-static char noname_bits[] = {
- 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
- 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
- 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
- 0x0c,0x0c,0x0c};
diff --git a/etc/gnus/bar.xpm b/etc/gnus/bar.xpm
deleted file mode 100644 (file)
index 2985065..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* XPM */
-static char * picon-bar_xpm[] = {
-"6 48 2 1",
-"      c white s background",
-".     c black",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  "};
diff --git a/etc/gnus/gnus-group-catchup-current-up.xbm b/etc/gnus/gnus-group-catchup-current-up.xbm
deleted file mode 100644 (file)
index f801fea..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x20,0x40,0x10,0x20,0x0a,0x15,0x85,0x0a,0x20,0x20,0x28,0x50,0x8a,0x8a,0x02,
- 0x05,0x10,0x5e,0x54,0xa8,0xa5,0x35,0x01,0x7a,0x00,0x33,0x54,0x95,0xaa,0xaa,
- 0x02,0xcc,0xfe,0x17,0xa8,0xd8,0x01,0xac,0xfa,0x4f,0x3d,0xf8,0x05,0x30,0x22,
- 0x80,0xf6,0x60,0x2b,0xfc,0x8f,0x20,0x11,0x82,0xca,0x60,0x1a,0x2a,0x6e,0x28,
- 0x08,0x85,0x42,0x68,0xfa,0x11,0x28,0xc8,0x04,0x8b,0xe2,0xb7,0x06,0x21,0x14,
- 0xd4,0x1a,0x11,0x31,0x04,0x31,0x56,0x6d,0xdc,0x58,0xea,0xc7,0x28,0x64,0x66,
- 0x60,0xa9,0x57,0x72,0x90,0x49,0xc8,0xec,0x5f,0x99,0xa6,0x7f,0x95,0x52,0xaa,
- 0x64,0x22,0xbf,0x49,0x2a,0xa9,0x7e,0x92,0x52,0x55,0x55,0x54,0x49,0x4a,0xa4,
- 0x49,0xaa,0xa4,0x4a,0x2a,0x49,0x2a,0x25};
diff --git a/etc/gnus/gnus-group-catchup-current-up.xpm b/etc/gnus/gnus-group-catchup-current-up.xpm
deleted file mode 100644 (file)
index 0504f9d..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-catchup_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #999999999999",
-"o     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"         ....                   ",
-"        .XXXX.             .... ",
-"        .XXXX.            .XXXX.",
-"         .XXX.            .XXXX.",
-" .........XX.              .XXX.",
-".ooooooooo..       .........XX. ",
-".o....ooooo...... .ooooooooo..  ",
-"X.   .ooooooooo.X..o....ooooo.  ",
-"X.   .oooo........X.   .ooooo.  ",
-".   .oooo.       .X.   .ooooo.  ",
-"    .oooo.       ..   .oooo.o.  ",
-"   .oooo.             .oooo.o.  ",
-"   ......            .ooooo.oo..",
-"  .ooooo.            ...... ..X.",
-"  .ooooo.           .ooooo.   ..",
-" .o..ooo.           ..oooo.     ",
-".ooo..ooo.XXXXXXXXX.o..ooo.XXXXX",
-"ooo.XX.oo.XXX......ooo..ooo.XXXX",
-"oo.XXX.oo.XXX..oooooo.XX.oo.XXXX",
-"..XXXX.oo.XXX..ooooo.XXX.oo.XXXX",
-"XXXXXXX.oo.XX.......XXX .oo.XXXX",
-"XXXXXXX.....X..XXXXXXXXXX.oo.XXX",
-"XXXXXXXXXXXXX.XXXXXXXXXXX.....XX",
-"XXXXXXXXXXXXXXXXXXXXXXXXX......X",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"};
diff --git a/etc/gnus/gnus-group-catchup-current.xbm b/etc/gnus/gnus-group-catchup-current.xbm
deleted file mode 100644 (file)
index 2218640..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x84,0x20,0x00,0x04,0x21,0x88,0x54,0x51,0x84,0x22,0x02,0x04,0x51,0x88,0xa0,
- 0x42,0x04,0x1f,0x0a,0x28,0x51,0x75,0xa1,0x7a,0x04,0x23,0x04,0xcc,0xa1,0x76,
- 0xa9,0xa6,0xfe,0x1b,0x00,0xd8,0x01,0x0c,0xfd,0x5f,0x3d,0xf8,0x05,0x30,0x26,
- 0x80,0xf7,0x60,0x33,0xfc,0xdb,0x20,0x11,0x22,0x8e,0x20,0x14,0x8a,0x66,0x68,
- 0x09,0x45,0x48,0x28,0xfc,0x11,0x21,0xc8,0x04,0x45,0xf4,0xf7,0x06,0x89,0x10,
- 0xc4,0x1a,0x23,0x35,0x2c,0x31,0xaa,0x6c,0x54,0x58,0xea,0xc7,0x48,0x64,0x66,
- 0xa0,0x99,0x57,0x72,0x50,0x59,0xc8,0xec,0x2f,0x49,0xa6,0x7f,0xaa,0x52,0xaa,
- 0x64,0x49,0xbf,0x49,0x2a,0xa5,0x7e,0x92,0xa4,0x14,0x55,0xa9,0x52,0xaa,0x92,
- 0x4a,0xa5,0x24,0x25,0xa5,0x94,0xaa,0xa8};
diff --git a/etc/gnus/gnus-group-catchup-current.xpm b/etc/gnus/gnus-group-catchup-current.xpm
deleted file mode 100644 (file)
index bea4643..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-catchup_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF",
-".     c #000000000000",
-"X     c #999999999999",
-"o     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"         ....                   ",
-"        .XXXX.             .... ",
-"        .XXXX.            .XXXX.",
-"         .XXX.            .XXXX.",
-" .........XX.              .XXX.",
-".ooooooooo..       .........XX. ",
-".o....ooooo...... .ooooooooo..  ",
-"X.   .ooooooooo.X..o....ooooo.  ",
-"X.   .oooo........X.   .ooooo.  ",
-".   .oooo.       .X.   .ooooo.  ",
-"    .oooo.       ..   .oooo.o.  ",
-"   .oooo.             .oooo.o.  ",
-"   ......            .ooooo.oo..",
-"  .ooooo.            ...... ..X.",
-"  .ooooo.           .ooooo.   ..",
-" .o..ooo.           ..oooo.     ",
-".ooo..ooo.XXXXXXXXX.o..ooo.XXXXX",
-"ooo.XX.oo.XXX......ooo..ooo.XXXX",
-"oo.XXX.oo.XXX..oooooo.XX.oo.XXXX",
-"..XXXX.oo.XXX..ooooo.XXX.oo.XXXX",
-"XXXXXXX.oo.XX.......XXX .oo.XXXX",
-"XXXXXXX.....X..XXXXXXXXXX.oo.XXX",
-"XXXXXXXXXXXXX.XXXXXXXXXXX.....XX",
-"XXXXXXXXXXXXXXXXXXXXXXXXX......X",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"};
diff --git a/etc/gnus/gnus-group-describe-group-up.xbm b/etc/gnus/gnus-group-describe-group-up.xbm
deleted file mode 100644 (file)
index 0054d63..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x55,0xb5,0x55,0xb5,0xaa,0x12,0xa9,0x12,0x12,0x55,0x12,0x65,0xa9,0xa4,0x4a,
- 0x10,0x55,0x9b,0x15,0xc1,0x55,0x51,0x09,0x00,0x92,0x4a,0x02,0x00,0xa9,0x24,
- 0x01,0x00,0x55,0x5b,0x11,0x11,0x92,0xa4,0x00,0x00,0x2a,0x49,0x00,0x00,0x49,
- 0x55,0x00,0x00,0x35,0x55,0x11,0x11,0xaa,0xaa,0x00,0x00,0x92,0x44,0x00,0x00,
- 0xa5,0x32,0x00,0x00,0x55,0x55,0x11,0x11,0x29,0x55,0x01,0x00,0xaa,0x24,0x01,
- 0x00,0x92,0x97,0x00,0x00,0x75,0xba,0x13,0x11,0x2a,0x51,0x04,0x00,0xb2,0xaa,
- 0x0a,0x40,0x59,0x75,0x25,0x40,0xb5,0x3d,0x59,0xb5,0xfa,0x77,0xa5,0x2a,0xae,
- 0x9a,0x2a,0x49,0xd6,0x5f,0x49,0xa5,0xf7,0x57,0x35,0x55,0x7d,0x29,0x95,0x2a,
- 0x7e,0x55,0xa9,0x54,0x5f,0x92,0x94,0x92};
diff --git a/etc/gnus/gnus-group-describe-group-up.xpm b/etc/gnus/gnus-group-describe-group-up.xpm
deleted file mode 100644 (file)
index e0ffde7..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-describe-group_xpm[] = {
-"32 32 4 1",
-"      c #000000000000",
-".     c #999999999999 s backgroundToolBarColor",
-"X     c #FFFFFFFFFFFF",
-"o     c #BFBFBFBFBFBF",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................................",
-".......................XXXXX....",
-" ... ... ... ... ... XXX XXXXX..",
-"....................XXXXXXXXXXX.",
-"...................XXXXXXXXXXXXX",
-"..................XXXXXXXXXXXXXX",
-" ... ... ... ... XXX XXX XXX XXX",
-"................XXXXXXXXXXXXXXXX",
-"................XXXXXXXXXXXXXXXX",
-"................XXXXXXXXXXXXXXXX",
-" ... ... ... ... XXX XXX XXX XXX",
-"................XXXXXXXXXXXXXXXX",
-"................XXXXXXXXXXXXXXXX",
-"................XXXXXXXXXXXXXXXX",
-" ... ... ... ... XXX XXX XXX XXX",
-".................XXXXXXXXXXXXXXX",
-".................XXXXXXXXXXXXXXX",
-".......    .......XXXXXXXXXXXXXX",
-" ... . oooo  ... ..X XXX XXX XXX",
-"..... o...oo .......XXXXXXXXXXX.",
-".... .o....o. .......XXXXXXXXX..",
-".... o . ...  .........XXXXX....",
-" ...  o .. .  .. ... ... ... ...",
-"...  o   . .  ..................",
-"..  X . . .  ...................",
-".  o .   .  ....................",
-"   o       . ... ... ... ... ...",
-" o     .........................",
-"o .   ...o......................",
-"     ..........................."};
diff --git a/etc/gnus/gnus-group-exit-up.xbm b/etc/gnus/gnus-group-exit-up.xbm
deleted file mode 100644 (file)
index c03e1fa..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x00,0x40,0x00,0x00,0x30,0x30,0x00,0x00,0x68,0x38,0x00,0x38,0x60,0x48,
- 0x00,0xd4,0x91,0xde,0x07,0x68,0xcf,0xb7,0x1a,0x80,0xb4,0x6e,0x05,0x00,0xe2,
- 0x07,0x00,0x00,0xde,0x1d,0x00,0xe0,0xfd,0x77,0x00,0xb0,0x6a,0xf3,0x00,0x20,
- 0x9c,0xa5,0x03,0x00,0xaa,0x86,0x02,0x00,0x65,0x06,0x02,0xab,0x6f,0xaf,0x59,
- 0x80,0x62,0x0c,0x00,0xaa,0xab,0xba,0x4a,0x40,0x21,0x10,0x10,0xea,0x45,0x4a,
- 0x42,0x40,0x89,0x90,0x28,0xd2,0x21,0x02,0x82,0xa4,0x8a,0x44,0x20,0xf0,0x10,
- 0x10,0x85,0xa4,0x04,0x4a,0x20,0xe2,0x22,0x80,0x80,0xbc,0x4b,0x09,0x2a,0xee,
- 0x8e,0x32,0x80,0xeb,0x73,0x85,0x28,0x56,0xaa,0xb5,0x02,0xff,0xff,0x85,0x48,
- 0x08,0x94,0x11,0x01,0x42,0x02,0x48,0x54};
diff --git a/etc/gnus/gnus-group-exit-up.xpm b/etc/gnus/gnus-group-exit-up.xpm
deleted file mode 100644 (file)
index 1b8982f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-exit-gnus_xpm[] = {
-"32 32 4 1",
-"      c #FFFFFFFFFFFF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #999999999999",
-"o     c #BFBFBFBFBFBF",
-"                      .         ",
-"            ..      ..          ",
-"           . ..    ...          ",
-"   ...       ..    .  .         ",
-"  . . ...   .  . .... .....     ",
-"   . .. ....  ..... .. . . ..   ",
-"       .  . .. . ... .. . .     ",
-"         .   ......             ",
-"         .... ... ...           ",
-"     .... ......... ...         ",
-"    .. . . .X.. ..  ....        ",
-"     .    .X.  .. .  . ...      ",
-"         .X. . . ..    . .      ",
-"        .X.  ..  ..      .      ",
-".. . . ..X.. .. .... . ..  .. . ",
-"ooooooo.X.ooo..ooo..oo ooooooooo",
-"oooo oo.X.ooo.ooooo..oooooooo oo",
-"o oooo.X.ooooooo ooo.ooooooooooo",
-"oooooo.X.ooooooooooooooo ooooooo",
-"ooo oo.X.ooo ooooooooooooooooooo",
-"oooooo.X.oooooooooo  oooooo  ooo",
-"ooooo.X.ooooooooooooooo  ooooooo",
-"o ooo.X.oooooo ooooooooooooooooo",
-"ooooo.X.oooo  o  ooooooooo ooooo",
-"ooooo.X.ooooooooooo oooo  o  ooo",
-"oo....X...ooooooo  o  oooooooooo",
-"o..XX...XX..ooo.o.oo.oo oooooooo",
-".XX.XX..X.XX...ooo.oo  o  oooooo",
-"X.XX.XXXXXXXXXX..oooo.o.oooooo o",
-".................o.o oo.oooo  o ",
-"oooooo ooo.oo oo.o  .  ooooooooo",
-"oooo  o  oo  o  oooooooooooooooo"};
diff --git a/etc/gnus/gnus-group-get-new-news-this-group-up.xbm b/etc/gnus/gnus-group-get-new-news-this-group-up.xbm
deleted file mode 100644 (file)
index 2f354f4..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x20,0x00,0x40,0x88,0xff,0x57,0x15,0x22,0x02,0x0c,0xa0,0x88,0x02,0xa4,0x0a,
- 0x22,0x02,0x04,0xf0,0x84,0x03,0x54,0xdd,0x21,0x02,0x1e,0x14,0x97,0x02,0x66,
- 0xcd,0x02,0x02,0x7c,0x14,0x2b,0x03,0x9c,0xad,0x41,0x02,0x54,0xb1,0x0a,0x02,
- 0x2c,0xff,0x47,0x02,0xe4,0x14,0x2d,0xff,0x4f,0xa5,0x0a,0x48,0xa0,0x4a,0xb4,
- 0x12,0x0a,0x51,0x1b,0x40,0xa1,0x96,0x36,0x2a,0x10,0x4a,0x56,0x80,0x4a,0x57,
- 0x1b,0x55,0x00,0x92,0x52,0x00,0x55,0x26,0x17,0xa9,0x00,0xab,0x5a,0x04,0x2a,
- 0xfe,0x1f,0x41,0x41,0xcb,0x48,0x14,0x14,0x95,0x2f,0x82,0x42,0x53,0x09,0x28,
- 0x08,0xa5,0xaf,0x84,0xa2,0x75,0x06,0x12,0x04,0xd3,0x54,0x40,0x51,0xdf,0x0f,
- 0x0a,0x82,0xae,0x23,0xa0,0x28,0x8a,0x4a};
diff --git a/etc/gnus/gnus-group-get-new-news-this-group-up.xpm b/etc/gnus/gnus-group-get-new-news-this-group-up.xpm
deleted file mode 100644 (file)
index 918fd2e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-get-new-news-this-group_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"                                ",
-" ..........                     ",
-" .XXXXXXXX.                     ",
-" .XXXXXXXX.                     ",
-" .XXXXXXXX.         ....        ",
-" .XXXXXXXX.        .oooo.       ",
-" .XXXXXXX....     .oooooo.      ",
-" .XXXXXXX..  .    .oooooo.      ",
-" .XXXXXXXX...o.   .oooooo.      ",
-" .XXXXXXXX..ooo.   .oooo.       ",
-" .XXXXXXXX. .ooo.   .oo.        ",
-" .XXXXXXXX.  .ooo.....o....     ",
-" .XXXXXXXX.   .oooooooooooo.    ",
-" ..........   .oooooooooooo.    ",
-"               .oooooooooooo.   ",
-"                .oooooooo.oo.   ",
-"                 .ooooooo.oo.   ",
-"                 .ooooooo.oo.   ",
-"                 .ooooooo.oo.   ",
-"                 .ooooooo.oo.   ",
-"                 .ooooooo.oo.   ",
-"                 .ooooooo.oo.   ",
-"                 ............   ",
-"                .oooooo.   .    ",
-"                .ooooooo.. .    ",
-"                .ooooooo.  .    ",
-"                .oooo.oo...     ",
-"                .oooo.oooo.     ",
-"                .ooo. .ooo.     ",
-"                ..... .....     ",
-"                 .o.   .o.      ",
-"                 .o.   .o.      "};
diff --git a/etc/gnus/gnus-group-get-new-news-up.xbm b/etc/gnus/gnus-group-get-new-news-up.xbm
deleted file mode 100644 (file)
index bea7a56..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x81,0x00,0x08,0xff,0x2b,0xa8,0x42,0x01,0x42,0x05,0x14,0x01,0x16,0x50,
- 0x41,0x01,0xa2,0x7a,0x0a,0x01,0x0a,0xcc,0x40,0x01,0xaf,0x92,0x15,0x01,0x13,
- 0x56,0x43,0x01,0xbe,0x2a,0x09,0x01,0x6e,0xcc,0x52,0x01,0xca,0x69,0x80,0x01,
- 0x32,0xdf,0x2b,0x01,0x66,0x55,0x85,0xff,0x33,0xa9,0x2e,0x24,0xc9,0x92,0x88,
- 0x09,0x82,0x4a,0x2e,0xa0,0x28,0xfd,0xf9,0x14,0x42,0x07,0x8d,0x42,0x08,0x85,
- 0x8d,0x20,0x52,0x87,0x85,0x8a,0x80,0x45,0x86,0x20,0x2a,0xc7,0x82,0x8a,0x00,
- 0xe7,0x82,0x41,0xd4,0x15,0x81,0x14,0x81,0xe6,0x81,0x81,0xa8,0x3d,0xff,0x14,
- 0x82,0xfa,0x02,0x42,0xd1,0x52,0x57,0x08,0x8a,0xad,0x82,0xa2,0xa0,0xef,0x2b,
- 0x04,0x05,0x55,0x81,0x51,0x50,0xc7,0x2b};
diff --git a/etc/gnus/gnus-group-get-new-news-up.xpm b/etc/gnus/gnus-group-get-new-news-up.xpm
deleted file mode 100644 (file)
index d324784..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-get-new-news_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"                                ",
-"..........                      ",
-".XXXXXXXX.                      ",
-".XXXXXXXX.                      ",
-".XXXXXXXX.         ....         ",
-".XXXXXXXX.        .oooo.        ",
-".XXXXXXX....     .oooooo.       ",
-".XXXXXXX..  .    .oooooo.       ",
-".XXXXXXXX...o.   .oooooo.       ",
-".XXXXXXXX..ooo.   .oooo.        ",
-".XXXXXXXX. .ooo.   .oo.         ",
-".XXXXXXXX.  .ooo.....o....      ",
-".XXXXXXXX.   .oooooooooooo.     ",
-"..........   .oooooooooooo.     ",
-"              .oooooooooooo.    ",
-"               .ooooooooooo.    ",
-"                .o.......oo.....",
-"                .o.XXXXX.oo.XXX.",
-"                .o.XXXX.ooo.XXX.",
-"                .o.XXXX.oo.XXXX.",
-"                .o.XXX.ooo.XXXX.",
-"                .o.XXX.oo.XXXXX.",
-"                ...XX...o.XXXXX.",
-"               .oo.X.   .XXXXXX.",
-"               .oo.XX.. .XXXXXX.",
-"               .oo....  ........",
-"               .oooo.o..o.      ",
-"               .oooo.oooo.      ",
-"               .ooo. .ooo.      ",
-"               ..... .....      ",
-"                .o.   .o.       ",
-"                .o.   .o.       "};
diff --git a/etc/gnus/gnus-group-kill-group-up.xbm b/etc/gnus/gnus-group-kill-group-up.xbm
deleted file mode 100644 (file)
index 8c3526d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x04,0x20,0x20,0x54,0xa1,0x0a,0x4a,0x02,0x0a,0x50,0x01,0xa0,0x40,0x05,
- 0x54,0xca,0xff,0x7f,0x00,0x50,0x00,0x60,0x55,0x42,0x00,0xa0,0x80,0x68,0xc0,
- 0x21,0x2b,0x42,0xe0,0xe3,0x83,0x50,0xb0,0x06,0x2a,0x4a,0xf0,0x07,0x42,0x60,
- 0x70,0x07,0x16,0x42,0xe0,0x03,0x42,0x68,0x40,0x01,0x2a,0x42,0x40,0x01,0x82,
- 0x50,0xc8,0x05,0x2a,0x4a,0x0c,0x0c,0x82,0x60,0x30,0x03,0x2a,0x4a,0xc0,0x00,
- 0x82,0x40,0xc0,0x00,0x2a,0x6a,0x30,0x03,0x42,0x41,0x0c,0x0c,0x16,0x54,0x08,
- 0x04,0x22,0x41,0x00,0x00,0x4a,0x54,0x00,0x00,0x02,0x41,0x00,0x00,0x56,0x54,
- 0x00,0x00,0x02,0x42,0x00,0x00,0x52,0xe8,0xff,0xff,0x0b,0x04,0x84,0x00,0x42,
- 0x52,0x11,0xaa,0x28,0x00,0xa4,0x04,0x04};
diff --git a/etc/gnus/gnus-group-kill-group-up.xpm b/etc/gnus/gnus-group-kill-group-up.xpm
deleted file mode 100644 (file)
index e728bf5..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-killfile_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"      ................          ",
-"      .XXXXXXXXXXXXXX..         ",
-"      .XXXXXXXXXXXXXX.X.        ",
-"      .XXXXXXX...XXXX.XX.       ",
-"      .XXXXXX.....XXX.....      ",
-"      .XXXXX..X.X..XXXXXX.      ",
-"      .XXXXX.......XXXXXX.      ",
-"      .XXXXX...X...XXXXXX.      ",
-"      .XXXXXX.....XXXXXXX.      ",
-"      .XXXXXXX.X.XXXXXXXX.      ",
-"      .XXXXXXX.X.XXXXXXXX.      ",
-"      .XXXX.XX...X.XXXXXX.      ",
-"      .XXX..XXXXXX..XXXXX.      ",
-"      .XXXXX..XX..XXXXXXX.      ",
-"      .XXXXXXX..XXXXXXXXX.      ",
-"      .XXXXXXX..XXXXXXXXX.      ",
-"      .XXXXX..XX..XXXXXXX.      ",
-"      .XXX..XXXXXX..XXXXX.      ",
-"      .XXXX.XXXXXX.XXXXXX.      ",
-"      .XXXXXXXXXXXXXXXXXX.      ",
-"      .XXXXXXXXXXXXXXXXXX.      ",
-"      .XXXXXXXXXXXXXXXXXX.      ",
-"      .XXXXXXXXXXXXXXXXXX.      ",
-"      .XXXXXXXXXXXXXXXXXX.      ",
-"      ....................      ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-group-subscribe-up.xbm b/etc/gnus/gnus-group-subscribe-up.xbm
deleted file mode 100644 (file)
index 98819e5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x08,0x04,0x00,0x40,0x22,0x51,0x55,0x15,0x88,0x04,0x00,0x20,0x22,0xa0,0xaa,
- 0x4a,0xc4,0xff,0x3f,0x00,0x61,0x80,0x60,0x55,0x54,0x8a,0xa0,0x80,0x42,0x84,
- 0x20,0x2b,0x68,0x8a,0xe0,0x83,0x42,0x80,0x00,0x2a,0xd4,0xff,0x00,0x42,0x41,
- 0x80,0x00,0x16,0x54,0x8a,0x00,0x42,0x41,0x84,0x00,0x2a,0x54,0x8a,0x00,0x82,
- 0x41,0x80,0x00,0x2a,0xd4,0xff,0x00,0x82,0x42,0x80,0x00,0x2a,0x68,0x8a,0x00,
- 0x82,0x44,0x84,0x00,0x2a,0x52,0x8a,0x00,0x42,0x40,0x80,0x00,0x16,0xea,0xff,
- 0x00,0x22,0x40,0x80,0x00,0x4a,0x4a,0x80,0x00,0x02,0x61,0x80,0x00,0x56,0x44,
- 0x80,0x00,0x02,0x51,0x80,0x00,0x52,0xc4,0xff,0xff,0x0b,0xa1,0x04,0x00,0x42,
- 0x14,0xa8,0xaa,0x88,0x82,0x02,0x00,0x22};
diff --git a/etc/gnus/gnus-group-subscribe-up.xpm b/etc/gnus/gnus-group-subscribe-up.xpm
deleted file mode 100644 (file)
index 15f7d43..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-unsubscribe_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"      ................          ",
-"      .XXXXXXXX.XXXXX..         ",
-"      .XX.X.XXX.XXXXX.X.        ",
-"      .XXX.XXXX.XXXXX.XX.       ",
-"      .XX.X.XXX.XXXXX.....      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      ..........XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XX.X.XXX.XXXXXXXXX.      ",
-"      .XXX.XXXX.XXXXXXXXX.      ",
-"      .XX.X.XXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      ..........XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XX.X.XXX.XXXXXXXXX.      ",
-"      .XXX.XXXX.XXXXXXXXX.      ",
-"      .XX.X.XXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      ..........XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      ....................      ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-group-unsubscribe-up.xbm b/etc/gnus/gnus-group-unsubscribe-up.xbm
deleted file mode 100644 (file)
index 9edc6b8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x08,0x04,0x00,0x40,0x22,0x51,0x55,0x15,0x88,0x04,0x00,0x20,0x22,0xa0,0xaa,
- 0x4a,0xc4,0xff,0x3f,0x00,0x61,0x80,0x60,0x55,0x54,0xa0,0xa0,0x80,0x42,0x90,
- 0x20,0x2b,0x68,0x8a,0xe0,0x83,0x42,0x84,0x00,0x2a,0xd4,0xff,0x00,0x42,0x41,
- 0x80,0x00,0x16,0x54,0xa0,0x00,0x42,0x41,0x90,0x00,0x2a,0x54,0x8a,0x00,0x82,
- 0x41,0x84,0x00,0x2a,0xd4,0xff,0x00,0x82,0x42,0x80,0x00,0x2a,0x68,0xa0,0x00,
- 0x82,0x44,0x90,0x00,0x2a,0x52,0x8a,0x00,0x42,0x40,0x84,0x00,0x16,0xea,0xff,
- 0x00,0x22,0x40,0x80,0x00,0x4a,0x4a,0x80,0x00,0x02,0x61,0x80,0x00,0x56,0x44,
- 0x80,0x00,0x02,0x51,0x80,0x00,0x52,0xc4,0xff,0xff,0x0b,0xa1,0x04,0x00,0x42,
- 0x14,0xa8,0xaa,0x88,0x82,0x02,0x00,0x22};
diff --git a/etc/gnus/gnus-group-unsubscribe-up.xpm b/etc/gnus/gnus-group-unsubscribe-up.xpm
deleted file mode 100644 (file)
index 7c7ce5b..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-subscribe_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"      ................          ",
-"      .XXXXXXXX.XXXXX..         ",
-"      .XXXXXX.X.XXXXX.X.        ",
-"      .XXXXX.XX.XXXXX.XX.       ",
-"      .XX.X.XXX.XXXXX.....      ",
-"      .XXX.XXXX.XXXXXXXXX.      ",
-"      ..........XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXX.X.XXXXXXXXX.      ",
-"      .XXXXX.XX.XXXXXXXXX.      ",
-"      .XX.X.XXX.XXXXXXXXX.      ",
-"      .XXX.XXXX.XXXXXXXXX.      ",
-"      ..........XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXX.X.XXXXXXXXX.      ",
-"      .XXXXX.XX.XXXXXXXXX.      ",
-"      .XX.X.XXX.XXXXXXXXX.      ",
-"      .XXX.XXXX.XXXXXXXXX.      ",
-"      ..........XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      .XXXXXXXX.XXXXXXXXX.      ",
-"      ....................      ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-pointer.xbm b/etc/gnus/gnus-pointer.xbm
deleted file mode 100644 (file)
index 94e9154..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#define noname_width 18
-#define noname_height 13
-static char noname_bits[] = {
- 0x00,0x00,0x00,0xc0,0x0c,0x00,0xe0,0x1f,0x00,0x92,0x39,0x00,0x0e,0x71,0x02,
- 0x46,0xe0,0x03,0x20,0xc0,0x01,0x00,0x08,0x00,0x10,0x0d,0x00,0xc4,0x08,0x00,
- 0x78,0x08,0x00,0x18,0x89,0x00,0x00,0x08,0x00};
diff --git a/etc/gnus/gnus-pointer.xpm b/etc/gnus/gnus-pointer.xpm
deleted file mode 100644 (file)
index c47443d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* XPM */
-static char *gnus-pointer[] = {
-/* width height num_colors chars_per_pixel */
-"    18    13        2            1",
-/* colors */
-". c #0000ff",
-"# c None s None",
-/* pixels */
-"##################",
-"######..##..######",
-"#####........#####",
-"#.##.##..##...####",
-"#...####.###...##.",
-"#..###.######.....",
-"#####.########...#",
-"###########.######",
-"####.###.#..######",
-"######..###.######",
-"###....####.######",
-"###..######.######",
-"###########.######"
-};
\ No newline at end of file
diff --git a/etc/gnus/gnus-summary-caesar-message-up.xbm b/etc/gnus/gnus-summary-caesar-message-up.xbm
deleted file mode 100644 (file)
index 0de8759..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x40,0x40,0x10,0x01,0x15,0x15,0x45,0x50,0x40,0x40,0x08,0x05,0x14,0x14,0xa2,
- 0x50,0xe2,0xff,0x3f,0x82,0x48,0x00,0xe0,0x28,0x62,0xe6,0xb8,0x82,0x48,0x29,
- 0x25,0x29,0x62,0xa9,0xe4,0x83,0x48,0x2f,0x05,0x2a,0x42,0xe9,0x38,0x42,0x60,
- 0x00,0x00,0x16,0x4a,0x82,0x10,0x22,0x50,0x00,0x00,0x4a,0x42,0xcb,0x1c,0x02,
- 0x68,0x2b,0x25,0x56,0x42,0x2d,0x1d,0x02,0x50,0x2d,0x05,0x52,0x4a,0xc9,0x04,
- 0x0a,0x40,0x00,0x00,0x42,0x6a,0x18,0x00,0x16,0x41,0x3c,0x00,0x42,0x54,0xe6,
- 0x3f,0x0a,0x41,0xe6,0x3f,0x52,0x54,0x3c,0x2a,0x06,0x42,0x18,0x2a,0x42,0x68,
- 0x00,0x08,0x2a,0x44,0x00,0x00,0x06,0xd2,0xff,0xff,0x53,0x20,0x84,0x20,0x04,
- 0x8a,0x10,0x8a,0xa8,0x20,0x4a,0x21,0x02};
diff --git a/etc/gnus/gnus-summary-caesar-message-up.xpm b/etc/gnus/gnus-summary-caesar-message-up.xpm
deleted file mode 100644 (file)
index 6f56aa9..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-rot13_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"      ................          ",
-"      .XXXXXXXXXXXXXX..         ",
-"      .XX..XX...XXX...X.        ",
-"      .X.XX.X.XX.X.XX.XX.       ",
-"      .X.XX.X.X.XX.XX.....      ",
-"      .X....X.XX.X.XXXXXX.      ",
-"      .X.XX.X...XXX...XXX.      ",
-"      .XXXXXXXXXXXXXXXXXX.      ",
-"      .XX.XXXXX.XXXX.XXXX.      ",
-"      .XXXXXXXXXXXXXXXXXX.      ",
-"      .X..X.XX..XX...XXXX.      ",
-"      .X..X.X.XX.X.XX.XXX.      ",
-"      .X.X..X.XX.X...XXXX.      ",
-"      .X.X..X.XX.X.XXXXXX.      ",
-"      .X.XX.XX..XX.XXXXXX.      ",
-"      .XXXXXXXXXXXXXXXXXX.      ",
-"      .XXXX..XXXXXXXXXXXX.      ",
-"      .XXX....XXXXXXXXXXX.      ",
-"      .XX..XX.........XXX.      ",
-"      .XX..XX.........XXX.      ",
-"      .XXX....XXX.X.X.XXX.      ",
-"      .XXXX..XXXX.X.X.XXX.      ",
-"      .XXXXXXXXXXXX.XXXXX.      ",
-"      .XXXXXXXXXXXXXXXXXX.      ",
-"      ....................      ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-cancel-article-up.xbm b/etc/gnus/gnus-summary-cancel-article-up.xbm
deleted file mode 100644 (file)
index e8d8d68..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x11,0x11,0x01,0x11,0x54,0x4a,0xa9,0x52,0x82,0x10,0x04,0x08,0x28,0x24,0xa1,
- 0x42,0x91,0x91,0x0f,0x19,0x25,0xaa,0xa9,0x44,0x88,0x60,0x18,0x11,0x42,0x1c,
- 0x56,0x44,0x19,0x07,0x97,0x31,0x44,0x01,0x23,0x0a,0x12,0x81,0x60,0x50,0x80,
- 0x02,0x42,0x05,0x3b,0x05,0x78,0x59,0x00,0x0a,0x56,0x12,0xaa,0xf4,0x05,0x41,
- 0x00,0x54,0x51,0x10,0x5b,0x51,0x95,0x55,0x10,0x15,0x00,0x11,0x42,0x40,0x55,
- 0x44,0x10,0x2a,0x00,0x21,0x5b,0x91,0x5b,0x95,0x80,0x24,0x00,0x21,0x12,0x92,
- 0x2a,0x14,0x44,0x01,0x80,0x42,0x11,0xb5,0x35,0x19,0x54,0x11,0x08,0x42,0x02,
- 0x44,0xa1,0x08,0xa8,0x22,0x14,0x52,0x11,0x99,0x51,0x11,0x4a,0x22,0x14,0x4a,
- 0x20,0x89,0x42,0x10,0x15,0x40,0x20,0x45};
diff --git a/etc/gnus/gnus-summary-cancel-article-up.xpm b/etc/gnus/gnus-summary-cancel-article-up.xpm
deleted file mode 100644 (file)
index fa7c639..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-cancel-post_xpm[] = {
-"32 32 4 1",
-"      c #000000000000",
-".     c #BFBFBFBFBFBF s backgroundToolBarColor",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-" ... ... ... ... ....... ... ...",
-"................................",
-"................................",
-"................................",
-" ... ... ... ...    .... ... ...",
-"...............  XX ............",
-".............  XXXX  ...........",
-"...........  XXXX  X ...........",
-" ... ....  XXXXX   X ... ... ...",
-"........ XXXXXXX  XXX ..........",
-"........ XXXXXX oXXXX ..........",
-"........o XXXXXXXoXXXX .........",
-" ... ...oo XXXXXXXX    . ... ...",
-".........oo XXXXX  oooo.........",
-"..........oo     o..............",
-"..........ooooooo...............",
-" ... ... ... oo. ... ... ... ...",
-"................................",
-"................................",
-"................................",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................................",
-"................................",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................................",
-"................................",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................................",
-"................................"};
diff --git a/etc/gnus/gnus-summary-catchup-and-exit-up.xbm b/etc/gnus/gnus-summary-catchup-and-exit-up.xbm
deleted file mode 100644 (file)
index 4adec42..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x08,0x81,0x00,0x04,0x42,0x28,0x52,0x51,0x14,0x85,0x08,0x04,0x81,0x20,0x42,
- 0x49,0x14,0x8a,0x08,0x20,0x41,0x21,0x52,0x15,0x14,0x44,0x00,0x40,0x41,0x91,
- 0xbf,0x2a,0x14,0xda,0x10,0x80,0x81,0x94,0x90,0x2a,0x14,0x73,0xf0,0x80,0xe1,
- 0x60,0x90,0x2b,0xc4,0x60,0x08,0x43,0xa2,0xf0,0x0f,0x15,0x88,0x11,0xfc,0x21,
- 0xd2,0x11,0x8c,0x4a,0x80,0x12,0x84,0x00,0xd5,0x13,0x84,0x55,0x00,0x17,0x74,
- 0x80,0x54,0xfb,0xcf,0x2a,0x02,0x9a,0x24,0x40,0x54,0x9f,0xbc,0x36,0xa9,0xf4,
- 0x77,0x49,0x94,0x96,0x94,0xa4,0x25,0x95,0x35,0x15,0xa9,0xfe,0xbf,0xa4,0x92,
- 0xdc,0x5c,0x29,0x4a,0x9e,0x3d,0x95,0xaa,0xfe,0x4f,0x52,0x24,0xf9,0xaf,0x4a,
- 0xa9,0x52,0x91,0x94,0x25,0x29,0x55,0x52};
diff --git a/etc/gnus/gnus-summary-catchup-and-exit-up.xpm b/etc/gnus/gnus-summary-catchup-and-exit-up.xpm
deleted file mode 100644 (file)
index a5d8ba6..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-catchup_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"               ......           ",
-"           ..  .XXXX.           ",
-"          .X.  .XXXX.           ",
-"        ..XX...XXXXX....        ",
-"      ..XXXXX..XXXXX.XX...      ",
-"      ..XXXXX..XXXX.XXXX..      ",
-"       .XXXX........XXXX.       ",
-"       ..XXX.XXXXX.......       ",
-"       ..XXX.XXXXX..XXX.        ",
-"       .X.XX.XXXXX.XXXX.        ",
-"       ...XX.XXXXX.XXXX.        ",
-"        ...X.XXXXX.X...         ",
-"         .X.........XX.         ",
-"         .  .XX.XX.XX.          ",
-"ooooooooo....XX.XX....oooooooooo",
-"oooooooooo. .......  .oooooooooo",
-"oooooooooo.X.XX.X .X.ooooooooooo",
-"oooooooooo. .X .  . .ooooooooooo",
-"oooooooooo...........ooooooooooo",
-"oooooooooo...X..XX...ooooooooooo",
-"oooooooooo...X ..X...ooooooooooo",
-"oooooooooo..........oooooooooooo",
-"oooooooooooo.......ooooooooooooo",
-"oooooooooooooooooooooooooooooooo",
-"oooooooooooooooooooooooooooooooo"};
diff --git a/etc/gnus/gnus-summary-catchup-up.xbm b/etc/gnus/gnus-summary-catchup-up.xbm
deleted file mode 100644 (file)
index ca093e1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x11,0x91,0x11,0x95,0x54,0x25,0x54,0x21,0x02,0x90,0x00,0x84,0xa0,0x0a,0x54,
- 0x29,0x1b,0xb1,0x11,0x91,0x40,0x0a,0x4a,0x25,0x8a,0xa0,0x20,0x88,0x20,0x14,
- 0x0e,0x22,0x9b,0x51,0xb7,0x99,0x20,0x14,0x0b,0x02,0x42,0xc1,0x22,0x28,0x14,
- 0x92,0x48,0x45,0x51,0x19,0x11,0x11,0x14,0x42,0xaa,0x54,0x42,0x88,0x00,0x02,
- 0x90,0x72,0xaa,0x56,0x15,0x71,0x11,0x17,0x42,0x3a,0x49,0x4b,0x28,0x49,0xa4,
- 0x22,0x04,0x30,0x02,0x09,0xb1,0xdb,0x59,0xb5,0x15,0xa0,0xd3,0xff,0x40,0x05,
- 0xbf,0x02,0x2a,0xd3,0x08,0x54,0x91,0x53,0x77,0x7f,0xc8,0xa9,0xd4,0x8a,0x62,
- 0x22,0x86,0x35,0xc8,0x5b,0x4b,0x67,0x93,0xfd,0x91,0x39,0x24,0x18,0xff,0x7a,
- 0x90,0x46,0xc5,0xcf,0x25,0x94,0x21,0xf1};
diff --git a/etc/gnus/gnus-summary-catchup-up.xpm b/etc/gnus/gnus-summary-catchup-up.xpm
deleted file mode 100644 (file)
index 9de9baf..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* XPM */
-static char * icon-catchup2_xpm[] = {
-"32 32 2 1",
-"      c #000000000000",
-".     c #BFBFBFBFBFBF s backgroundToolBarColor",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................................",
-"................................",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................................",
-".................  .............",
-" ... ... ... ...   . ... ... ...",
-"................  ..............",
-"............... ................",
-"................................",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................................",
-".............  ..........  .....",
-" ... ... ...   . ... ...   . ...",
-"............  ..........  ......",
-"........... ........... ........",
-"............  .......... .......",
-" ... ... ... . . ... ... ... ...",
-"...............  .....          ",
-"................      ... ......",
-"........  ..... ... ...... .....",
-" ... ..   .. . . . .  .. .     .",
-".......  .... .... ... .. . ... ",
-"...... ...... ... .....  ... ...",
-"......    .. .... ......   .. ..",
-" ... ... .       ... ..  ..   ..",
-"........... ....      . ....   .",
-".......... ..... .....      .. .",
-".......... ..... ....... ...    "};
diff --git a/etc/gnus/gnus-summary-exit-up.xbm b/etc/gnus/gnus-summary-exit-up.xbm
deleted file mode 100644 (file)
index 4d55755..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x19,0x51,0x91,0x11,0x82,0x14,0x2a,0x48,0x28,0x42,0x40,0x25,0x82,0x10,0x15,
- 0x00,0x59,0xfa,0xff,0x5b,0x12,0x4b,0xfe,0x21,0x40,0x21,0xf1,0x93,0x2a,0x0b,
- 0xf8,0x05,0x91,0xb5,0xf2,0x31,0x24,0x01,0xf1,0x4b,0x12,0x54,0xfa,0x01,0x80,
- 0x83,0xf0,0x55,0x5b,0x35,0xf2,0x11,0x00,0x8b,0xfe,0x4b,0x2a,0x21,0xf7,0x21,
- 0x80,0x0b,0xf6,0x13,0x5b,0xb5,0xf4,0x59,0x10,0x03,0xf1,0x01,0x42,0x2b,0xf4,
- 0x55,0x90,0x40,0xf3,0x03,0x13,0x1a,0xf8,0x59,0xa8,0x83,0xf2,0x11,0x02,0x2b,
- 0x5c,0x43,0x50,0xe3,0xee,0x10,0x93,0xfc,0x55,0x5b,0x48,0x92,0x92,0x00,0x22,
- 0x49,0x48,0xaa,0x08,0x00,0x84,0x00,0xb5,0xbb,0x31,0x5b,0x01,0x00,0x0a,0x00,
- 0x54,0x25,0x51,0x55,0x01,0x48,0x04,0x00};
diff --git a/etc/gnus/gnus-summary-exit-up.xpm b/etc/gnus/gnus-summary-exit-up.xpm
deleted file mode 100644 (file)
index d1ab26a..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* XPM */
-static char * icon-exit-summary_xpm[] = {
-"32 32 2 1",
-"      c #000000000000",
-".     c #BFBFBFBFBFBF s backgroundToolBarColor",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................................",
-"................................",
-" ... ......              ... ...",
-"........  .......        .......",
-"........ ...........     .......",
-"........  ..........     .......",
-" ... ... ... .......     ... ...",
-"................ ...     .......",
-"....................     .......",
-"........  ..........     .......",
-" ... ... ... .......     ... ...",
-"........  .......  .     .......",
-"........ .......   .     .......",
-"........  .......  .     .......",
-" ... ... ... .......     ... ...",
-"........  ..........     .......",
-"........ ...........     .......",
-"................ ...     .......",
-" ... ....... .......     ... ...",
-"........  ..........     .......",
-"........  ........   . . .......",
-"........ ....   . . . . ........",
-" ... .. ..       . . . . ... ...",
-"................................",
-"................................",
-"................................",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................................",
-"................................"};
diff --git a/etc/gnus/gnus-summary-followup-up.xbm b/etc/gnus/gnus-summary-followup-up.xbm
deleted file mode 100644 (file)
index c6ba686..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x00,0x40,0x08,0xb6,0x76,0x37,0x63,0x20,0x02,0x00,0x04,0x8a,0x48,0x55,
- 0x51,0x10,0x22,0x0e,0x82,0xa6,0xaa,0xa9,0x36,0x12,0x62,0x38,0x20,0xa0,0x18,
- 0x96,0x4a,0x0a,0x07,0x17,0x00,0xa2,0x01,0xa3,0x76,0x6a,0x80,0x60,0x00,0x60,
- 0x00,0x40,0x55,0x52,0x00,0x40,0x00,0xa6,0x00,0x80,0x6b,0x90,0xe1,0x80,0x04,
- 0x24,0x9a,0x00,0x51,0x82,0x86,0x01,0x85,0xaa,0x61,0x01,0x32,0x60,0x70,0x01,
- 0x42,0x1d,0x30,0x02,0x14,0x04,0x08,0x02,0x4c,0x06,0x00,0x02,0x28,0x06,0x00,
- 0x04,0xac,0x08,0x00,0x08,0x0b,0x0a,0x00,0xc8,0x22,0x12,0x00,0x70,0x6a,0x1a,
- 0x00,0x10,0x01,0x20,0x00,0x60,0x52,0x32,0x00,0x20,0x08,0x46,0x00,0x40,0x63,
- 0x50,0x00,0x40,0x04,0x85,0x00,0x80,0x52};
diff --git a/etc/gnus/gnus-summary-followup-up.xpm b/etc/gnus/gnus-summary-followup-up.xpm
deleted file mode 100644 (file)
index 3cee12e..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-followup_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-" .   .   .   .   .   .   .   .  ",
-"                                ",
-"                                ",
-"                 ...            ",
-" .   .   .   . ..XX. .   .   .  ",
-"             ..XXXX..           ",
-"           ..XXXX..X.           ",
-"         ..XXXXX...X.           ",
-" .   . ..XXXXXXX..XXX.   .   .  ",
-"     ..XXXXXXXX.XXXXX.          ",
-"      .XXXXXXXXXXXXXXX.         ",
-"      .XXXXXXXXXXXXXXX.         ",
-" .   . .XXXXXXXXXXXXXXX. .   .  ",
-"        .XXXX...XXXXXXX.        ",
-"         .X..XX.XXXXXXXX.       ",
-"         ..XXXX..XXXXXXX.       ",
-" .     ..XXXX..X.XXXXXXXX.   .  ",
-"     ..XXXXX...X.XXXXXXXX.      ",
-"   ..XXXXXXX..XXX.XXXXXXXX.     ",
-"  .XXXXXXXX.XXXXX.XXXXXXXX.     ",
-" ..XXXXXXXXXXXXXX.XXXXXXXXX. .  ",
-"  .XXXXXXXXXXXXXXX.XXXXXXX..    ",
-"   .XXXXXXXXXXXXXXX.XXXX..      ",
-"   .XXXXXXXXXXXXXXX.XX..        ",
-" .  .XXXXXXXXXXXXXXX..   .   .  ",
-"    .XXXXXXXXXXXXXXX.           ",
-"     .XXXXXXXXXXXXXXX.          ",
-"     .XXXXXXXXXXXXXXX.          ",
-" .    .XXXXXXXXXXXXXXX.  .   .  ",
-"      .XXXXXXXXXXXXXXX.         ",
-"       .XXXXXXXXXXXXXXX.        "};
diff --git a/etc/gnus/gnus-summary-followup-with-original-up.xbm b/etc/gnus/gnus-summary-followup-with-original-up.xbm
deleted file mode 100644 (file)
index a0e6dfe..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x04,0x40,0x10,0x00,0xa3,0x36,0xa6,0x76,0x54,0x40,0x11,0x02,0x01,0x2a,0x88,
- 0x48,0x54,0x81,0x22,0x22,0x22,0x6a,0xaa,0x2a,0x4a,0x02,0x21,0xa0,0x90,0x50,
- 0x8e,0x0a,0x02,0x0a,0x27,0x50,0xb2,0xa2,0xab,0x26,0x42,0xaa,0x00,0x92,0x94,
- 0x00,0xaa,0x20,0x00,0xaa,0x00,0x85,0xb6,0x22,0x76,0x32,0x20,0xea,0x80,0x44,
- 0x8a,0x98,0x2a,0x11,0x10,0x87,0x00,0x44,0xa6,0x71,0x6b,0x33,0x60,0xcc,0x22,
- 0x44,0x1d,0xe3,0x0a,0x11,0xc8,0xe0,0x24,0x44,0x3e,0x90,0x6c,0x2b,0x08,0x00,
- 0x09,0xa0,0x06,0x00,0x49,0x0a,0x04,0x00,0x92,0x50,0x0b,0x00,0x32,0x26,0x0c,
- 0x00,0xa4,0x90,0x11,0x00,0x24,0x24,0x14,0x00,0xc8,0x82,0x22,0x00,0x48,0x32,
- 0x2a,0x00,0x90,0x42,0x50,0x00,0x90,0x28};
diff --git a/etc/gnus/gnus-summary-followup-with-original-up.xpm b/etc/gnus/gnus-summary-followup-with-original-up.xpm
deleted file mode 100644 (file)
index baffb6b..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-followup-w-orig_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-" .   .   .   .   .   .   .   .  ",
-"                                ",
-"                                ",
-"                                ",
-" .   .   .   .   .   .   .   .  ",
-"                                ",
-"                 ..             ",
-"                ...             ",
-" .   .   .   .  ..   .   .   .  ",
-"               .                ",
-"                                ",
-"                                ",
-" .   .   .   .   .   .   .   .  ",
-"             ..                 ",
-"           ..XX.                ",
-"         ..XXXX.                ",
-" .     ..XXX...X.    .   .   .  ",
-"     ..XXX..XX..X.              ",
-"   ..XXX..XXX...X.              ",
-"   .XX..XXXXX...XX.             ",
-" . ...XXXXXX.XX.XX.  .   .   .  ",
-"   .XXXXXXXXXXXX.XX.            ",
-"  .XXXXXXXXXXXXX.XX.            ",
-"  .XXXXXXXXXXXXXX.XX.           ",
-" . .XXXXXXXXXXXXX.XX.    .   .  ",
-"   .XXXXXXXXXXXXXX.XX.          ",
-"    .XXXXXXXXXXXXX.XX.          ",
-"    .XXXXXXXXXXXXXX.XX.         ",
-" .   .XXXXXXXXXXXXX.XX.  .   .  ",
-"     .XXXXXXXXXXXXXX.XX.        ",
-"      .XXXXXXXXXXXXX.XX.        "};
diff --git a/etc/gnus/gnus-summary-mail-copy-up.xbm b/etc/gnus/gnus-summary-mail-copy-up.xbm
deleted file mode 100644 (file)
index a1eea6b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x20,0x20,0x40,0xaa,0x8a,0x0a,0x15,0xfe,0xff,0xff,0x27,0x0e,0x00,0x80,
- 0x4d,0x32,0x00,0x60,0x04,0xc2,0x00,0x18,0x54,0x02,0x03,0x06,0x04,0x03,0x8c,
- 0x01,0x54,0x02,0x74,0x02,0x04,0x02,0x03,0x0c,0x54,0x82,0x00,0x10,0x84,0xf2,
- 0xff,0xff,0x3f,0x52,0x00,0x00,0x6c,0x9b,0x01,0x00,0x23,0x16,0x06,0xc0,0x60,
- 0x1e,0x18,0x30,0x20,0x14,0x60,0x0c,0xa0,0x11,0xa0,0x0b,0x20,0x14,0x10,0x30,
- 0x60,0x11,0x0c,0x40,0x20,0x14,0x02,0x80,0xa0,0x12,0x01,0x00,0x23,0xd8,0x00,
- 0x00,0x64,0x32,0x00,0x00,0x38,0xf8,0xff,0xff,0xbf,0x02,0x00,0x40,0x24,0x54,
- 0x55,0x15,0x11,0x01,0x00,0x40,0x44,0x54,0x55,0x15,0x11,0x01,0x00,0x40,0x44,
- 0x54,0x55,0x05,0x11,0x02,0x00,0x50,0x44};
diff --git a/etc/gnus/gnus-summary-mail-copy-up.xpm b/etc/gnus/gnus-summary-mail-copy-up.xpm
deleted file mode 100644 (file)
index e73e6d5..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-mail-copy_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-" ..........................     ",
-" ...XXXXXXXXXXXXXXXXXXX..X.     ",
-" .XX..XXXXXXXXXXXXXXX..XXX.     ",
-" .XXXX..XXXXXXXXXXX..XXXXX.     ",
-" .XXXXXX..XXXXXXX..XXXXXXX.     ",
-" .XXXXXXXX..XXX..XXXXXXXXX.     ",
-" .XXXXXXXX.X...XX.XXXXXXXX.     ",
-" .XXXXXX..XXXXXXXX..XXXXXX.     ",
-" .XXXXX.XXXXXXXXXXXX.XXXXX.     ",
-" .XX..........................  ",
-" .XX.X.XXXXXXXXXXXXXXXXXXX..X.  ",
-" .X..XX..XXXXXXXXXXXXXXX..XXX.  ",
-" ..X.XXXX..XXXXXXXXXXX..XXXXX.  ",
-" ....XXXXXX..XXXXXXX..XXXXXXX.  ",
-"    .XXXXXXXX..XXX..XXXXXXXXX.  ",
-"    .XXXXXXXX.X...X.XXXXXXXXX.  ",
-"    .XXXXXXX.XXXXXXX..XXXXXXX.  ",
-"    .XXXXX..XXXXXXXXXX.XXXXXX.  ",
-"    .XXXX.XXXXXXXXXXXXX.XXXXX.  ",
-"    .XXX.XXXXXXXXXXXXXXX..XXX.  ",
-"    .X..XXXXXXXXXXXXXXXXXX.XX.  ",
-"    ..XXXXXXXXXXXXXXXXXXXXX...  ",
-"    ..........................  ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-mail-delete-up.xbm b/etc/gnus/gnus-summary-mail-delete-up.xbm
deleted file mode 100644 (file)
index 9d1c637..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x08,0x00,0x80,0x00,0xa2,0xaa,0x2a,0x54,0x08,0x00,0x40,0x81,0xf2,0xab,0x2a,
- 0x28,0x5c,0x03,0x80,0x82,0x2d,0x56,0xf5,0x28,0x84,0x06,0x98,0x8b,0x5d,0x5e,
- 0xe7,0x2c,0x1c,0x1f,0x1f,0xba,0xf1,0xf3,0xa7,0xc9,0x44,0xa8,0x90,0x88,0xf1,
- 0xf3,0x8b,0x08,0x1c,0x5f,0x7f,0x09,0xad,0x1e,0xff,0x08,0x04,0x46,0x08,0x04,
- 0xae,0x26,0x06,0x04,0x18,0x8b,0x02,0x06,0xfa,0x23,0xc1,0x01,0x20,0x88,0x38,
- 0x00,0x95,0x62,0x07,0x80,0x40,0xe4,0x00,0x40,0x14,0xd1,0x00,0x20,0x42,0x44,
- 0x03,0x60,0x10,0x11,0x05,0x10,0x4a,0x44,0x1c,0xa8,0x00,0x11,0x61,0x0c,0x2a,
- 0x42,0xa4,0x25,0x81,0x14,0x09,0x42,0x14,0x20,0x50,0x15,0xa1,0x4a,0x05,0x40,
- 0x04,0x00,0xa8,0x0a,0x51,0x55,0x05,0x50};
diff --git a/etc/gnus/gnus-summary-mail-delete-up.xpm b/etc/gnus/gnus-summary-mail-delete-up.xpm
deleted file mode 100644 (file)
index 932d8f2..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-mail-delete_xpm[] = {
-"32 32 4 1",
-"      c #BEBEBEBEBEBE s backgroundToolBarColor",
-"X     c #000000000000",
-"o     c #E7E7E7E7E7E7",
-"O     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"                                ",
-"    XXXXX                       ",
-"   XX   XX                      ",
-"  XX     XX          XXX        ",
-"  X       X        XXooXX  X    ",
-"  XX     XXX     XXooXX   XX    ",
-"   XX   XXXXX   XXXXX    XOXXX  ",
-"    XXXXX   XXXXXX      XOOXOOXX",
-"             XOX       XOOOXOOOX",
-"    XXXXX   XXXXXX     XOOOXOOOO",
-"   XX   XXXXX   XXXXXX  XOOXOOOO",
-"  XX     XXX     XXXXXXXOOOXOOOO",
-"  X       X        XOOOOOOXOOOOO",
-"  XX     XX       XOOOOOOOXOOOOO",
-"   XX   XX       XOOOOOOOXXOOOOO",
-"    XXXXX       XOOOOOXXXOOOOOOO",
-"               XOOOXXXOOOOOOOOOO",
-"              XOXXXOOOOOOOOOOOOX",
-"             XXXOOOOOOOOOOOOOOX ",
-"              XXOOOOOOOOOOOOOX  ",
-"                XXOOOOOOOOOOOX  ",
-"                  XOOOOOOOOOX   ",
-"                   XXOOOOOOX    ",
-"                     XXOOOX     ",
-"                       XXOX     ",
-"                         X      ",
-"                                ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-mail-forward-up.xbm b/etc/gnus/gnus-summary-mail-forward-up.xbm
deleted file mode 100644 (file)
index 1b66f5b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x10,0x42,0x80,0x20,0x84,0x10,0x2a,0x14,0x3a,0xa5,0x40,0x41,0x64,0x08,0x14,
- 0x28,0xd6,0xa0,0x62,0x85,0x80,0x15,0xe8,0x20,0xca,0x41,0x39,0x8b,0xb0,0x2a,
- 0x24,0x22,0xd2,0x86,0x12,0x86,0x58,0x24,0x11,0x2c,0xd2,0x8c,0x08,0x98,0x34,
- 0x75,0x08,0x10,0x30,0x14,0x08,0x60,0x8a,0x0e,0x04,0x20,0x10,0x05,0xfc,0x7f,
- 0x45,0x02,0x02,0x60,0x10,0x01,0x03,0x18,0xca,0xe0,0x01,0x44,0x20,0x3e,0x00,
- 0x0a,0xf4,0x21,0x00,0x53,0x32,0x20,0x80,0x80,0x10,0x10,0x40,0x2a,0x2a,0x10,
- 0xb0,0x80,0x60,0x10,0x28,0x2a,0xea,0x10,0x84,0x40,0x81,0x10,0x2a,0x14,0x94,
- 0x11,0x41,0x21,0x21,0xca,0x2a,0x48,0x84,0xac,0x80,0x02,0x21,0x3d,0x54,0x50,
- 0x14,0x84,0x00,0x05,0x42,0x21,0xaa,0x50};
diff --git a/etc/gnus/gnus-summary-mail-forward-up.xpm b/etc/gnus/gnus-summary-mail-forward-up.xpm
deleted file mode 100644 (file)
index 19db803..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-mail-forward_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"   ...                          ",
-"  .   .                         ",
-"  .   .               .         ",
-"       .             ...        ",
-"      ...          ...XX.       ",
-"     . . .        .XX.XXX.      ",
-"    .  .  .      .XX.XXXX..     ",
-"    . .   .     .XXX.XXXXX..    ",
-"    . .   .    .XXX.XXXXXXX.    ",
-"    ..    .  ..XXXX.XXXXXXXX.   ",
-"    .     . .XXXXXX.XXXXXXXXX.  ",
-"         . .XXXXXX.XXXXXXXXXX.  ",
-"          .XXXXXXX............. ",
-"         .XXXXXXX.XXXXXXXXXXX.  ",
-"        .XXXXXXX..XXXXXXXXX..   ",
-"      ..XXXXX....XXXXXXXXX.     ",
-"     .XXX.....XXXXXXXXXXX.      ",
-"     ....XXXX.XXXXXXXXXX.       ",
-"    ..XXXXXXX.XXXXXXXXX.        ",
-"    .XXXXXXX.XXXXXXXXX.         ",
-"     .XXXXXX.XXXXXXX..          ",
-"     ..XXXXX.XXXXXX.            ",
-"      ..XXXX.XXXXX.             ",
-"       .XXXX.XXXX.              ",
-"        .XXX.XXX.               ",
-"         .X.XX..                ",
-"          ..X.                  ",
-"          ...                   ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-mail-get-up.xbm b/etc/gnus/gnus-summary-mail-get-up.xbm
deleted file mode 100644 (file)
index 0d0e212..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x48,0x00,0x11,0x02,0x12,0x54,0x84,0x50,0x40,0x81,0x50,0x82,0x2a,0x28,0x0a,
- 0x28,0x80,0x42,0xa0,0x82,0xaa,0x13,0x3d,0x28,0x40,0x46,0xd4,0x42,0xb5,0x28,
- 0x86,0x10,0x50,0xda,0x51,0x47,0x99,0xb0,0x09,0x13,0x14,0x50,0x01,0x45,0x21,
- 0x18,0x82,0x21,0x74,0x4c,0xc7,0x94,0x81,0x13,0x78,0x02,0x94,0x44,0x05,0x29,
- 0xf1,0xff,0xff,0x7f,0x74,0x00,0x00,0x2c,0x91,0x01,0x00,0x23,0x14,0x06,0xc0,
- 0xa0,0x11,0x18,0x30,0x20,0x14,0x60,0x0c,0x60,0x12,0x90,0x0b,0x20,0x18,0x0c,
- 0x30,0xa0,0x12,0x02,0x40,0x20,0x18,0x01,0x80,0xa0,0xd2,0x00,0x00,0x23,0x38,
- 0x00,0x00,0x64,0x12,0x00,0x00,0x38,0xf8,0xff,0xff,0xbf,0x02,0x00,0x00,0x20,
- 0xa8,0xaa,0xaa,0x8a,0x05,0x00,0x40,0x20};
diff --git a/etc/gnus/gnus-summary-mail-get-up.xpm b/etc/gnus/gnus-summary-mail-get-up.xpm
deleted file mode 100644 (file)
index ffdb84c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-mail-get_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"       ...         ...          ",
-"      .   .       .   .         ",
-"     .     .     .     .        ",
-"    .       . . .       ..      ",
-"    .       .. ..       ..      ",
-"    .XXXXXXX.   .XXXXXXX.       ",
-"     .XXXXX.     .XXXXX.        ",
-"     ..XXX..     ..XXX..        ",
-"       ...         ...          ",
-"                                ",
-"    ..........................  ",
-"    ...XXXXXXXXXXXXXXXXXXX..X.  ",
-"    .XX..XXXXXXXXXXXXXXX..XXX.  ",
-"    .XXXX..XXXXXXXXXXX..XXXXX.  ",
-"    .XXXXXX..XXXXXXX..XXXXXXX.  ",
-"    .XXXXXXXX..XXX..XXXXXXXXX.  ",
-"    .XXXXXXX.XX...X.XXXXXXXXX.  ",
-"    .XXXXX..XXXXXXXX..XXXXXXX.  ",
-"    .XXXX.XXXXXXXXXXXX.XXXXXX.  ",
-"    .XXX.XXXXXXXXXXXXXX.XXXXX.  ",
-"    .X..XXXXXXXXXXXXXXXX..XXX.  ",
-"    ..XXXXXXXXXXXXXXXXXXXX.XX.  ",
-"    .XXXXXXXXXXXXXXXXXXXXXX...  ",
-"    ..........................  ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-mail-originate-up.xbm b/etc/gnus/gnus-summary-mail-originate-up.xbm
deleted file mode 100644 (file)
index 6d25e12..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x04,0x42,0x08,0x10,0xa1,0x10,0x42,0x05,0x14,0xa2,0xff,0xaf,0x01,0x89,0x00,
- 0x14,0x54,0xa4,0x00,0x64,0x02,0xc1,0x00,0x3c,0xf8,0xff,0x1f,0xa0,0x6d,0x10,
- 0x68,0x20,0xf8,0xff,0x1f,0x60,0x12,0x84,0x00,0x20,0x48,0xd1,0x00,0xa0,0x02,
- 0x88,0xfc,0x21,0xfc,0xff,0x00,0x60,0x1e,0x80,0x6c,0x21,0x64,0x80,0x00,0xa0,
- 0x86,0x81,0x00,0x20,0x04,0x86,0x00,0x60,0x05,0x98,0x00,0x20,0x04,0xe4,0x00,
- 0xa0,0x06,0x83,0x80,0x25,0x84,0x80,0x00,0x60,0x46,0x80,0x00,0x20,0x34,0x80,
- 0x00,0xa0,0x0d,0x80,0xff,0x3f,0x04,0x00,0x00,0x2e,0xfe,0xff,0xff,0x4f,0x48,
- 0x92,0x44,0x12,0x92,0x08,0x11,0x44,0x00,0x21,0x44,0x11,0x55,0x48,0x21,0x44,
- 0x80,0x02,0x8a,0x10,0x2a,0xa8,0x40,0x44};
diff --git a/etc/gnus/gnus-summary-mail-originate-up.xpm b/etc/gnus/gnus-summary-mail-originate-up.xpm
deleted file mode 100644 (file)
index 8ba8bc2..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-mail-originate_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"               .............    ",
-"               .XXXXXXXXXX.X.   ",
-"               .XXXXXXXXXX.XX.  ",
-"               .XXXXXXXXXX....  ",
-"   ..................XXXXXXXX.  ",
-"   .X. X X X X X X .X..XXXXXX.  ",
-"   ..................XXXXXXXX.  ",
-"               .XXXXXXXXXXXXX.  ",
-"               .XXXXXXXXXXXXX.  ",
-"               .XX.......XXXX.  ",
-"  ..............XXXXXXXXXXXXX.  ",
-"  ...XXXXXXXXXX.XX..X..X.XXXX.  ",
-"  .XX..XXXXXXXX.XXXXXXXXXXXXX.  ",
-"  .XXXX..XXXXXX.XXXXXXXXXXXXX.  ",
-"  .XXXXXX..XXXX.XXXXXXXXXXXXX.  ",
-"  .XXXXXXXX..XX.XXXXXXXXXXXXX.  ",
-"  .XXXXXXX.XX...XXXXXXXXXXXXX.  ",
-"  .XXXXX..XXXXX.XXXXXXX..X.XX.  ",
-"  .XXXX.XXXXXXX.XXXXXXXXXXXXX.  ",
-"  .XXX.XXXXXXXX.XXXXXXXXXXXXX.  ",
-"  .X..XXXXXXXXX.XXXXXXXXXXXXX.  ",
-"  ..XXXXXXXXXXX...............  ",
-"  .XXXXXXXXXXXXXXXXXXXXXX...    ",
-"  ..........................    ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-mail-reply-up.xbm b/etc/gnus/gnus-summary-mail-reply-up.xbm
deleted file mode 100644 (file)
index e16ec66..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x40,0x40,0x20,0xaa,0x2a,0x7a,0x0a,0x00,0x80,0x88,0x51,0xaa,0x2a,0x06,
- 0x06,0x00,0xc0,0x05,0x58,0xaa,0x3a,0x12,0x08,0x00,0x0c,0x11,0x2c,0xaa,0x03,
- 0x09,0x42,0xc0,0x80,0x04,0x06,0x35,0x40,0x04,0x57,0x98,0x49,0x80,0x18,0x3a,
- 0x20,0x41,0x56,0xc8,0x10,0xc1,0x11,0x0c,0x93,0x60,0x50,0x0a,0x1c,0x18,0x90,
- 0x08,0x30,0x06,0x30,0x0a,0xc8,0x05,0x90,0x08,0x06,0x18,0x30,0x0a,0x01,0x20,
- 0x10,0x88,0x00,0x40,0x50,0x6a,0x00,0x80,0x11,0x19,0x00,0x00,0x52,0x0c,0x00,
- 0x00,0x1c,0xf9,0xff,0xff,0x5f,0x44,0x44,0x44,0x24,0x11,0x11,0x11,0x09,0x44,
- 0x44,0x44,0xa0,0x11,0x11,0x11,0x15,0x44,0x44,0x44,0x40,0x11,0x11,0x91,0x14,
- 0x44,0x44,0x04,0xa2,0x11,0x22,0xa2,0x08};
diff --git a/etc/gnus/gnus-summary-mail-reply-up.xpm b/etc/gnus/gnus-summary-mail-reply-up.xpm
deleted file mode 100644 (file)
index 20fe672..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-mail-reply_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-"                    ...         ",
-"                   .XXX..       ",
-"                  .XXXXXX..     ",
-"              ... .XXXXXXXX.    ",
-"            ..XXX.XX.XXXXXX.    ",
-"          ..XXXX.XXX.XXXXX.     ",
-"        ..XXXXXX.XX.XXXXX.      ",
-"      ..XXXXXXX.XX.XXXXXX.      ",
-"     .XXXXXXXX.XXX.XXXXX...     ",
-"   ..XX..XX.XX.XXXXXXXX.XXX..   ",
-"   ...XXXXXXX.XX.XXXXX.XX..X.   ",
-"   .XX..XXXX.XXX.XXXXX...XXX.   ",
-"   .XXXX..XX.XX.XXXXX..XXXXX.   ",
-"   .XXXXXX...XXXXXX..XXXXXXX.   ",
-"   .XXXXXXXX..XXX..XXXXXXXXX.   ",
-"   .XXXXXXX.XX...X.XXXXXXXXX.   ",
-"   .XXXXX..XXXXXXXX..XXXXXXX.   ",
-"   .XXXX.XXXXXXXXXXXX.XXXXXX.   ",
-"   .XXX.XXXXXXXXXXXXXX.XXXXX.   ",
-"   .X..XXXXXXXXXXXXXXXX..XXX.   ",
-"   ..XXXXXXXXXXXXXXXXXXXX.XX.   ",
-"   .XXXXXXXXXXXXXXXXXXXXXX...   ",
-"   ..........................   ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-mail-save-up.xbm b/etc/gnus/gnus-summary-mail-save-up.xbm
deleted file mode 100644 (file)
index 0601dfb..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x10,0x10,0x00,0x55,0x45,0x45,0x55,0x00,0x10,0x08,0x00,0xd4,0xff,0xff,
- 0x7f,0x82,0x03,0x00,0xf0,0xd0,0x0c,0x00,0x4c,0x82,0x30,0x00,0x43,0xd4,0xc0,
- 0xc0,0x40,0x80,0x80,0x33,0xc0,0xaa,0x60,0xcc,0x40,0xc0,0x10,0x00,0x41,0x95,
- 0x08,0x00,0x46,0xc0,0x06,0x00,0xd8,0xfe,0xff,0x0f,0x60,0x2c,0x00,0x0b,0x40,
- 0x35,0x10,0xfd,0x7f,0x2c,0x02,0x2b,0x49,0x35,0x40,0x4d,0x12,0xac,0x00,0x0b,
- 0xa0,0x35,0x00,0xad,0x0a,0x2c,0x24,0x09,0x90,0x2d,0x00,0x5d,0x25,0xf4,0xff,
- 0x0b,0x80,0xa6,0x55,0xad,0x2a,0x4c,0xaa,0x08,0x40,0xf5,0xff,0x5d,0x15,0x6c,
- 0x35,0x0b,0x20,0x66,0x37,0xab,0x4a,0x6c,0x2d,0x0d,0x00,0xb9,0x35,0x4b,0x55,
- 0xf4,0xff,0x1f,0x80,0x01,0x40,0x80,0x2a};
diff --git a/etc/gnus/gnus-summary-mail-save-up.xpm b/etc/gnus/gnus-summary-mail-save-up.xpm
deleted file mode 100644 (file)
index fd4824b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* XPM */
-static char * icon-save-mail_xpm[] = {
-"32 32 6 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"O     c #E5E5E5E5E5E5",
-"+     c #666666666666",
-"                                ",
-"                                ",
-"                                ",
-"       ........................ ",
-"       ...XXXXXXXXXXXXXXXXXX... ",
-"       .XX..XXXXXXXXXXXXXX..XX. ",
-"       .XXXX..XXXXXXXXXX..XXXX. ",
-"       .XXXXXX..XXXXXX..XXXXXX. ",
-"       .XXXXXXX...XX..XXXXXXXX. ",
-"       .XXXXX..XXX..XX..XXXXXX. ",
-"       .XXXX.XXXXXXXXXXX.XXXXX. ",
-"       .XXX.XXXXXXXXXXXXX..XXX. ",
-"       .X..XXXXXXXXXXXXXXXX..X. ",
-"  ..................XXXXXXXXX.. ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXXXX. ",
-"  .oo.OOOOOOOOOO.oo............ ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo............oo.            ",
-"  .oooooooooooooooo.            ",
-"  .oooooooooooooooo.            ",
-"  .oo............oo.            ",
-"  .oo.+++++++.OO.oo.            ",
-"  .oo.+++++++.OO.oo.            ",
-"  .oo.+++++++.OO.oo.            ",
-"   .o.+++++++.OO.oo.            ",
-"    ................            ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-next-unread-up.xbm b/etc/gnus/gnus-summary-next-unread-up.xbm
deleted file mode 100644 (file)
index a6c17a9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x08,0x10,0x20,0x00,0xa3,0x66,0xab,0x76,0x14,0x11,0x04,0x02,0x41,0x04,0xa1,
- 0x48,0x14,0x51,0x1e,0x22,0x62,0xa6,0xa9,0x2a,0x0a,0x71,0x18,0xa0,0x40,0x18,
- 0xb6,0x0a,0x8a,0x06,0x17,0x50,0xb2,0x01,0x63,0x27,0x62,0x80,0x20,0x90,0x50,
- 0x00,0x40,0x25,0x4a,0x00,0x40,0x80,0xe2,0x00,0x80,0x36,0x12,0xe1,0x80,0x41,
- 0x84,0x9a,0x00,0x29,0x10,0x87,0x01,0x85,0xa6,0x61,0x01,0x32,0x62,0x70,0x01,
- 0x42,0x18,0x30,0x02,0x14,0x06,0x08,0x02,0x4c,0x06,0x00,0x02,0x28,0x04,0x00,
- 0x04,0xac,0xca,0x07,0x7c,0x0b,0x68,0x0d,0xea,0x20,0x1b,0x12,0x93,0x6b,0xb4,
- 0x54,0x29,0x03,0x91,0xba,0x95,0x51,0x74,0x19,0x53,0x0b,0x6a,0x0a,0xd6,0x62,
- 0xe0,0x07,0x7c,0x09,0x8a,0x00,0x80,0x42};
diff --git a/etc/gnus/gnus-summary-next-unread-up.xpm b/etc/gnus/gnus-summary-next-unread-up.xpm
deleted file mode 100644 (file)
index e525816..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-next-unread_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"                                ",
-" .   .   .   .   .   .   .   .  ",
-"                                ",
-"                                ",
-"                 ...            ",
-" .   .   .   . ..XX. .   .   .  ",
-"             ..XXXX..           ",
-"           ..XXXX..X.           ",
-"         ..XXXXX...X.           ",
-" .   . ..XXXXXXX..XXX.   .   .  ",
-"     ..XXXXXXXX.XXXXX.          ",
-"      .XXXXXXXXXXXXXXX.         ",
-"      .XXXXXXXXXXXXXXX.         ",
-" .   . .XXXXXXXXXXXXXXX. .   .  ",
-"        .XXXX...XXXXXXX.        ",
-"         .X..XX.XXXXXXXX.       ",
-"         ..XXXX..XXXXXXX.       ",
-" .     ..XXXX..X.XXXXXXXX.   .  ",
-"     ..XXXXX...X.XXXXXXXX.      ",
-"   ..XXXXXXX..XXX.XXXXXXXX.     ",
-"  .XXXXXXXX.XXXXX.XXXXXXXX.     ",
-" ..XXXXXXXXXXXXXX.XXXXXXXXX. .  ",
-"  .XXXXXXXXXXXXXXX.XXXXXXX..    ",
-"   .XX.....XXXXXXX.....X..      ",
-"   .X.ooooo.XXXXX.oooo..        ",
-" .  .oXooooo.XXX.oXooooo..   .  ",
-"    .ooooooo.X.X.ooooooo.       ",
-"    .ooooooo..X..ooooooo.       ",
-"    ..oooooo.XXX.ooooooo.       ",
-" .   ..oooo.XXXXX.oooo.. .   .  ",
-"      .....XXXXXXX.....         ",
-"       .XXXXXXXXXXXXXXX.        "};
diff --git a/etc/gnus/gnus-summary-post-news-up.xbm b/etc/gnus/gnus-summary-post-news-up.xbm
deleted file mode 100644 (file)
index 8eb4c33..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x10,0x10,0x01,0x6b,0xa7,0x66,0x72,0x04,0x10,0x02,0x05,0xa1,0x8a,0x50,
- 0x48,0x04,0x20,0x8f,0x20,0x72,0xab,0x39,0x2b,0x02,0x64,0x58,0xa4,0x50,0x19,
- 0x16,0x01,0x0a,0x06,0x57,0x54,0xe2,0x01,0x23,0x23,0x72,0x80,0x20,0x94,0x44,
- 0x00,0x40,0x01,0x50,0x00,0xc0,0x54,0xa6,0x00,0x80,0x22,0x92,0x00,0x80,0x4a,
- 0x40,0x01,0x00,0x11,0x8a,0x01,0x00,0x45,0x32,0x02,0x00,0x2a,0x42,0x02,0x00,
- 0xa2,0x10,0x05,0x00,0x0c,0x4a,0x06,0x00,0x24,0x22,0x0a,0x00,0x68,0xaa,0x0c,
- 0x00,0x0c,0x00,0x11,0x80,0x53,0x2a,0x14,0x40,0x05,0x22,0x23,0x70,0x62,0x92,
- 0x34,0x0e,0x09,0x24,0xc0,0x4b,0x52,0x80,0x0a,0x21,0x80,0x6b,0x62,0xaa,0x36,
- 0x04,0x15,0x01,0x42,0x51,0x80,0xa8,0x28};
diff --git a/etc/gnus/gnus-summary-post-news-up.xpm b/etc/gnus/gnus-summary-post-news-up.xpm
deleted file mode 100644 (file)
index 46be7c1..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * icon-post_xpm[] = {
-"32 32 3 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"                                ",
-" .   .   .   .   .   .   .   .  ",
-"                                ",
-"                                ",
-"                 ...            ",
-" .   .   .   . ..XX. .   .   .  ",
-"             ..XXXX..           ",
-"           ..XXXX..X.           ",
-"         ..XXXXX...X.           ",
-" .   . ..XXXXXXX..XXX.   .   .  ",
-"     ..XXXXXXXX.XXXXX.          ",
-"      .XXXXXXXXXXXXXXX.         ",
-"      .XXXXXXXXXXXXXXX.         ",
-" .   . .XXXXXXXXXXXXXXX. .   .  ",
-"       .XXXXXXXXXXXXXXX.        ",
-"        .XXXXXXXXXXXXXXX.       ",
-"        .XXXXXXXXXXXXXXX.       ",
-" .   .   .XXXXXXXXXXXXXXX.   .  ",
-"         .XXXXXXXXXXXXXXX.      ",
-"          .XXXXXXXXXXXXXXX.     ",
-"          .XXXXXXXXXXXXXXX.     ",
-" .   .   . .XXXXXXXXXXXXXXX. .  ",
-"           .XXXXXXXXXXXXXX..    ",
-"            .XXXXXXXXXX...      ",
-"            .XXXXXXXXX.         ",
-" .   .   .   .XXXXXX..   .   .  ",
-"             .XXX...            ",
-"              ....              ",
-"                                ",
-" .   .   .   .   .   .   .   .  ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-prev-unread-up.xbm b/etc/gnus/gnus-summary-prev-unread-up.xbm
deleted file mode 100644 (file)
index 6cf240e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x08,0x08,0x40,0x20,0x23,0x63,0x2b,0x2b,0x54,0x14,0x24,0xa4,0x01,0x02,0x09,
- 0x01,0x54,0xa9,0x2e,0x2a,0x22,0xa2,0xa9,0x62,0x4a,0x6a,0x18,0x12,0x90,0x18,
- 0xb6,0x04,0x02,0x06,0x17,0x50,0xea,0x01,0x63,0x2b,0x64,0x80,0x20,0x44,0x51,
- 0x00,0x40,0x21,0x44,0x00,0x40,0x8a,0xe2,0x00,0xc0,0x22,0x0a,0xe1,0xc0,0x2f,
- 0xd0,0x9f,0x20,0x4d,0x42,0x87,0xb1,0x1a,0xea,0x61,0x15,0x72,0x60,0x70,0xbb,
- 0x14,0x1d,0x30,0xb1,0x5a,0x04,0x08,0x22,0x0d,0x06,0x00,0xc2,0x6f,0x06,0x00,
- 0x84,0x20,0x08,0x00,0x64,0x0a,0x0a,0x00,0x58,0x50,0x12,0x00,0x10,0x27,0x1a,
- 0x00,0x50,0x90,0x20,0x00,0xa0,0x24,0x32,0x00,0x20,0x82,0x26,0x00,0xc0,0x32,
- 0x40,0x00,0x40,0x44,0xaa,0x00,0x80,0x11};
diff --git a/etc/gnus/gnus-summary-prev-unread-up.xpm b/etc/gnus/gnus-summary-prev-unread-up.xpm
deleted file mode 100644 (file)
index b2088fb..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-prev-unread_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"                                ",
-" .   .   .   .   .   .   .   .  ",
-"                                ",
-"                                ",
-"                 ...            ",
-" .   .   .   . ..XX. .   .   .  ",
-"             ..XXXX..           ",
-"           ..XXXX..X.           ",
-"         ..XXXXX...X.           ",
-" .   . ..XXXXXXX..XXX.   .   .  ",
-"     ..XXXXXXXX.XXXXX.          ",
-"      .XXXXXXXXXXXXXXX.         ",
-"      .XXXXXXXXXXXXXXX.         ",
-" .   . .XXXXXXXXXXXXXX.  .   .  ",
-"        .XXXX...XXXXXX.....     ",
-"       ...o..XX.XXXXX.oooo..    ",
-"      .oo..XXXX..XXX.oXooooo.   ",
-" .   .o..XXXX..X.X.X.ooooooo..  ",
-"     ..XXXXX...X..X..ooooooo.   ",
-"   ..XXXXXXX..XX.XXX.ooooooo.   ",
-"  .XXXXXXXX.XXXXX.XXX.oooo..    ",
-" ..XXXXXXXXXXXXXX.XXXX.....  .  ",
-"  .XXXXXXXXXXXXXXX.XXXX.        ",
-"   .XXXXXXXXXXXXXX.XX..         ",
-"   .XXXXXXXXXXXXXXX..           ",
-" .  .XXXXXXXXXXXXXXX.    .   .  ",
-"    .XXXXXXXXXXXXXXX.           ",
-"     .XXXXXXXXXXXXXXX.          ",
-"     .XXXXXXXXXXXXXXX.          ",
-" .   .XXXXXXXXXXXXXXXX.  .   .  ",
-"      .XXXXXXXXXXXXXXX.         ",
-"       .XXXXXXXXXXXXXXX.        "};
diff --git a/etc/gnus/gnus-summary-reply-up.xbm b/etc/gnus/gnus-summary-reply-up.xbm
deleted file mode 100644 (file)
index 61dad9a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x10,0x00,0x11,0x88,0x45,0x55,0x84,0x22,0x08,0x80,0x10,0x88,0x42,0x55,0xa4,
- 0x22,0x28,0x00,0x01,0x84,0x05,0x55,0x5a,0x21,0x50,0x00,0x35,0x8a,0x09,0xf5,
- 0xc2,0x20,0x24,0x18,0x81,0x85,0x01,0x87,0x00,0x2a,0xd4,0x41,0x00,0x43,0x61,
- 0x40,0x80,0x17,0x1c,0x20,0x80,0x58,0xb5,0x1a,0xc0,0x3f,0x0c,0x08,0x60,0xb0,
- 0x75,0x08,0xb0,0x2e,0x84,0x04,0xb8,0xa1,0x06,0x03,0x4c,0x20,0x04,0x0c,0x36,
- 0x60,0x06,0x10,0x0f,0x20,0x06,0x70,0x07,0x60,0x05,0xc8,0x09,0xa0,0x04,0x04,
- 0x10,0xa0,0x06,0x02,0x20,0x60,0x85,0x01,0xc0,0xa0,0x44,0x00,0x00,0x61,0x25,
- 0x00,0x00,0x22,0x1e,0x00,0x00,0xbc,0x0e,0x00,0x00,0x70,0xfd,0xff,0xff,0x3f,
- 0x94,0x52,0x55,0x55,0x4a,0x29,0x22,0xa2};
diff --git a/etc/gnus/gnus-summary-reply-up.xpm b/etc/gnus/gnus-summary-reply-up.xpm
deleted file mode 100644 (file)
index 255f7a1..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-follow-up_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                   .            ",
-"                  .X..          ",
-"             ... .XXXX.         ",
-"           ..XXX.XXXXXX..       ",
-"         ..XXXX.XXXXXXXXX.      ",
-"       ..XXXXX.XXXXXXXXX..      ",
-"     ..XXXXXXX.XXXXXXXX....     ",
-"   ..XXXXXXXX.XXXXXXXXX.oXX..   ",
-"  .X..X.X.X..XXXXXXXXX..o...o.  ",
-"  ..XXXXXXX.XXXXXXXXX..ooXXX..  ",
-"  .X...XXXX.XXXXXXXX..ooX...X.  ",
-"  .XXXX.XX.XXXXXXXX..oX..XXXX.  ",
-"  .XXXXX..XXXXXXXX..oX.XXXXXX.  ",
-"  .XXXXXXX..XXXXX..X..XXXXXXX.  ",
-"oo.XXXXXXXXX.XXX....XXXXXXXXX.oo",
-"oo.XXXXXXXXX...X...XXXXXXXXXX.oo",
-"oo.XXXXXXXX.XX...XX.XXXXXXXXX.oo",
-"oo.XXXXXXX.XXXXXXXXX.XXXXXXXX.oo",
-"oo.XXXXXX.XXXXXXXXXXX.XXXXXXX.oo",
-"oo.XXXX..XXXXXXXXXXXXX..XXXXX.oo",
-"oo.XXX.XXXXXXXXXXXXXXXXX.XXXX.oo",
-"oo.XX.XXXXXXXXXXXXXXXXXXX.XXX.oo",
-"oo...XXXXXXXXXXXXXXXXXXXXX....oo",
-"oo..XXXXXXXXXXXXXXXXXXXXXXXX..oo",
-"oo............................oo",
-"oooooooooooooooooooooooooooooooo",
-"oooooooooooooooooooooooooooooooo"};
diff --git a/etc/gnus/gnus-summary-reply-with-original-up.xbm b/etc/gnus/gnus-summary-reply-with-original-up.xbm
deleted file mode 100644 (file)
index 37b0d73..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x08,0x00,0x20,0xaa,0x82,0xaa,0x4a,0x00,0x54,0x00,0x00,0xaa,0x02,0x54,
- 0x55,0x00,0xa8,0x07,0x00,0x54,0x85,0x5a,0x55,0x02,0x50,0x32,0x80,0x50,0x25,
- 0xc2,0x2a,0x02,0x18,0x81,0x41,0x54,0x17,0x01,0x17,0x80,0x09,0xc1,0x23,0x75,
- 0x04,0x3d,0x4f,0x18,0xc3,0x83,0x18,0x85,0x40,0xc0,0x61,0x4c,0x7c,0x60,0x30,
- 0xf6,0x23,0xb0,0x6e,0x84,0x20,0x98,0x21,0x05,0x13,0x5c,0x20,0x04,0x1c,0x36,
- 0x60,0x06,0x30,0x0f,0x60,0x06,0x70,0x07,0xa0,0x05,0xc8,0x09,0x20,0x06,0x04,
- 0x10,0x60,0x04,0x02,0x20,0xa0,0x85,0x01,0xc0,0x20,0x46,0x00,0x00,0xa1,0x24,
- 0x00,0x00,0x62,0x1e,0x00,0x00,0x7c,0x0d,0x00,0x00,0xb0,0xfc,0xff,0xff,0x3f,
- 0x55,0x55,0x4a,0x55,0x24,0x89,0x52,0xa2};
diff --git a/etc/gnus/gnus-summary-reply-with-original-up.xpm b/etc/gnus/gnus-summary-reply-with-original-up.xpm
deleted file mode 100644 (file)
index 1135bfa..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-follow-up-incl_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                ...             ",
-"               .X.X.            ",
-"              .XX.XX..          ",
-"             .XXX.XXXX.         ",
-"           ..XXX.XXXXXX..       ",
-"         ..X.XXX.XXXXXXX..      ",
-"       ..XX.XXXX.XXXXX....      ",
-"     ..XXX.XXXXX.X....XX...     ",
-"   ..XXX..XXXX....XXXXX.oXX..   ",
-"  .XXXX.XXXXXX.XXXXXXX..oXXXo.  ",
-"  ..XX.XXX.....XXXXXX..ooXXX..  ",
-"  .X......XXX.XXXXXX..ooX...X.  ",
-"  .XXXX.XXXXX.XXXXX..oX..XXXX.  ",
-"  .XXXXX..XX.XXXXX..oX.XXXXXX.  ",
-"  .XXXXXXX...XXXX..X..XXXXXXX.  ",
-"oo.XXXXXXXXX..XX....XXXXXXXXX.oo",
-"oo.XXXXXXXXX...X...XXXXXXXXXX.oo",
-"oo.XXXXXXXX.XX...XX.XXXXXXXXX.oo",
-"oo.XXXXXXX.XXXXXXXXX.XXXXXXXX.oo",
-"oo.XXXXXX.XXXXXXXXXXX.XXXXXXX.oo",
-"oo.XXXX..XXXXXXXXXXXXX..XXXXX.oo",
-"oo.XXX.XXXXXXXXXXXXXXXXX.XXXX.oo",
-"oo.XX.XXXXXXXXXXXXXXXXXXX.XXX.oo",
-"oo...XXXXXXXXXXXXXXXXXXXXX....oo",
-"oo..XXXXXXXXXXXXXXXXXXXXXXXX..oo",
-"oo............................oo",
-"oooooooooooooooooooooooooooooooo",
-"oooooooooooooooooooooooooooooooo"};
diff --git a/etc/gnus/gnus-summary-save-article-file-up.xbm b/etc/gnus/gnus-summary-save-article-file-up.xbm
deleted file mode 100644 (file)
index a14e003..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x20,0x08,0x08,0x82,0x8a,0x82,0xa2,0x20,0x20,0x14,0x04,0x15,0x14,0xfd,0xff,
- 0x43,0x42,0x04,0x00,0x0d,0x10,0x05,0x00,0x49,0x22,0x06,0x00,0x31,0x88,0x04,
- 0x00,0x1f,0x22,0x06,0x00,0x50,0x88,0x04,0x00,0x10,0x22,0x04,0x00,0xb0,0x88,
- 0x06,0x00,0x10,0x22,0x04,0x00,0x50,0xfc,0xff,0x0f,0x10,0x36,0x00,0x0b,0xb0,
- 0x2c,0x02,0x0d,0x10,0x34,0x10,0x0b,0x50,0x2d,0x00,0x0b,0x10,0x34,0x41,0x0d,
- 0xb0,0x2d,0x08,0x09,0x10,0x34,0x00,0x0b,0x50,0x2d,0x01,0x0d,0x10,0xf4,0xff,
- 0x0b,0xb0,0xad,0xda,0x0a,0x10,0x44,0x22,0x0d,0x50,0xf6,0xff,0xf9,0x1f,0x6c,
- 0x3b,0x4b,0x52,0xb5,0x2d,0x1d,0x08,0x6c,0x35,0x4b,0xa1,0x6a,0x3b,0x29,0x14,
- 0xf8,0xff,0x8f,0x40,0x02,0x40,0x2a,0x15};
diff --git a/etc/gnus/gnus-summary-save-article-file-up.xpm b/etc/gnus/gnus-summary-save-article-file-up.xpm
deleted file mode 100644 (file)
index ea30122..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* XPM */
-static char * icon-save-text_xpm[] = {
-"32 32 6 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"O     c #E5E5E5E5E5E5",
-"+     c #666666666666",
-"                                ",
-"                                ",
-"                                ",
-"          ................      ",
-"          .XXXXXXXXXXXXX.X.     ",
-"          .XXXXXXXXXXXXX.XX.    ",
-"          .XXXXXXXXXXXXX.XXX.   ",
-"          .XXXXXXXXXXXXX.....   ",
-"          .XXXXXXXXXXXXXXXXX.   ",
-"          .XXXXXXXXXXXXXXXXX.   ",
-"          .XXXXXXXXXXXXXXXXX.   ",
-"          .XXXXXXXXXXXXXXXXX.   ",
-"          .XXXXXXXXXXXXXXXXX.   ",
-"  ..................XXXXXXXX.   ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
-"  .oo............oo.XXXXXXXX.   ",
-"  .oooooooooooooooo.XXXXXXXX.   ",
-"  .oooooooooooooooo.XXXXXXXX.   ",
-"  .oo............oo..........   ",
-"  .oo.+++++++.OO.oo.            ",
-"  .oo.+++++++.OO.oo.            ",
-"  .oo.+++++++.OO.oo.            ",
-"   .o.+++++++.OO.oo.            ",
-"    ................            ",
-"                                "};
diff --git a/etc/gnus/gnus-summary-save-article-up.xbm b/etc/gnus/gnus-summary-save-article-up.xbm
deleted file mode 100644 (file)
index 94e51d1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x10,0x81,0x04,0x01,0x45,0x28,0x40,0x50,0x88,0x42,0x15,0x05,0xa2,0xff,0xff,
- 0x7f,0x88,0x03,0x00,0xf0,0xa2,0x0c,0x00,0x4c,0x88,0x30,0x00,0x43,0xc5,0xc0,
- 0xc0,0x40,0x90,0x80,0x33,0xc0,0xa4,0x60,0xcc,0x40,0x82,0x10,0x00,0x41,0xd0,
- 0x08,0x00,0x46,0x82,0x06,0x00,0xd8,0xfc,0xff,0x0f,0x60,0x2e,0x00,0x0d,0x40,
- 0x34,0x02,0xfb,0x7f,0x36,0x10,0x0d,0x91,0xac,0x00,0x4b,0x24,0x34,0x00,0x2d,
- 0x81,0x2d,0x48,0x4b,0x28,0x34,0x02,0x0d,0x85,0x2d,0x00,0xab,0x20,0xf4,0xff,
- 0x0d,0x8a,0xa6,0xaa,0xaa,0x20,0x4c,0x55,0x0a,0x85,0xf5,0xff,0x5b,0x20,0x6c,
- 0x35,0x8d,0x8a,0xad,0x36,0x2b,0x20,0xf4,0x2a,0x89,0x8a,0x6a,0x3b,0x5d,0x20,
- 0xf8,0xff,0x0f,0x85,0x02,0x40,0xa2,0x20};
diff --git a/etc/gnus/gnus-summary-save-article-up.xpm b/etc/gnus/gnus-summary-save-article-up.xpm
deleted file mode 100644 (file)
index fd4824b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* XPM */
-static char * icon-save-mail_xpm[] = {
-"32 32 6 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #FFFFFFFFFFFF",
-"o     c #999999999999",
-"O     c #E5E5E5E5E5E5",
-"+     c #666666666666",
-"                                ",
-"                                ",
-"                                ",
-"       ........................ ",
-"       ...XXXXXXXXXXXXXXXXXX... ",
-"       .XX..XXXXXXXXXXXXXX..XX. ",
-"       .XXXX..XXXXXXXXXX..XXXX. ",
-"       .XXXXXX..XXXXXX..XXXXXX. ",
-"       .XXXXXXX...XX..XXXXXXXX. ",
-"       .XXXXX..XXX..XX..XXXXXX. ",
-"       .XXXX.XXXXXXXXXXX.XXXXX. ",
-"       .XXX.XXXXXXXXXXXXX..XXX. ",
-"       .X..XXXXXXXXXXXXXXXX..X. ",
-"  ..................XXXXXXXXX.. ",
-"  .oo.OOOOOOOOOO.oo.XXXXXXXXXX. ",
-"  .oo.OOOOOOOOOO.oo............ ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo.OOOOOOOOOO.oo.            ",
-"  .oo............oo.            ",
-"  .oooooooooooooooo.            ",
-"  .oooooooooooooooo.            ",
-"  .oo............oo.            ",
-"  .oo.+++++++.OO.oo.            ",
-"  .oo.+++++++.OO.oo.            ",
-"  .oo.+++++++.OO.oo.            ",
-"   .o.+++++++.OO.oo.            ",
-"    ................            ",
-"                                "};
diff --git a/etc/gnus/gnus-uu-decode-uu-up.xbm b/etc/gnus/gnus-uu-decode-uu-up.xbm
deleted file mode 100644 (file)
index 705eb76..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x00,0x08,0x10,0x01,0xaa,0x42,0x45,0x54,0x00,0x14,0x10,0x01,0x55,0x41,0x45,
- 0x50,0x00,0x0a,0x88,0x0a,0xaa,0xa0,0x22,0x40,0x80,0xff,0xff,0x17,0xaa,0x95,
- 0x54,0x43,0x80,0x2a,0xa5,0x0a,0xaa,0xfd,0x7f,0x53,0xc0,0x06,0x40,0x06,0x94,
- 0x04,0x40,0x43,0xc2,0x05,0xc0,0x2a,0x90,0x86,0xc0,0x06,0xa2,0x64,0x4b,0x53,
- 0x88,0x96,0x44,0x06,0xd2,0x45,0xc0,0x52,0x84,0x25,0xc1,0x06,0x90,0xe6,0x41,
- 0x53,0x8a,0x05,0x42,0x06,0xa0,0x06,0xc4,0x52,0x95,0x04,0xc0,0x06,0xc0,0x05,
- 0x40,0x53,0x94,0x06,0x40,0x06,0xa2,0x05,0xc0,0x52,0x88,0xfc,0xff,0x06,0xa2,
- 0x95,0x12,0x53,0x88,0x4a,0xa9,0x06,0xa2,0xff,0xff,0x53,0x90,0x10,0x00,0x04,
- 0x42,0x42,0x55,0x50,0x14,0x28,0x80,0x0a};
diff --git a/etc/gnus/gnus-uu-decode-uu-up.xpm b/etc/gnus/gnus-uu-decode-uu-up.xpm
deleted file mode 100644 (file)
index 568315c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-decode-view_xpm[] = {
-"32 32 4 1",
-"      c #BFBFBFBFBFBF s backgroundToolBarColor",
-".     c #000000000000",
-"X     c #999999999999",
-"o     c #FFFFFFFFFFFF",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"                                ",
-"       ...................      ",
-"       .XXXXXXXXXXXXXXXXX.      ",
-"       .XXXXXXXXXXXXXXXXX.      ",
-"       .XX.............XX.      ",
-"       .XX.ooooooooooo.XX.      ",
-"       .XX.ooooooooooo.XX.      ",
-"       .XX.ooooooooooo.XX.      ",
-"       .XX.oooo.oooooo.XX.      ",
-"       .XX.oo..o..o.oo.XX.      ",
-"       .XX.o.oo.oo.ooo.XX.      ",
-"       .XX.ooo.ooooooo.XX.      ",
-"       .XX.oo.oo.ooooo.XX.      ",
-"       .XX.oo....ooooo.XX.      ",
-"       .XX.oooooo.oooo.XX.      ",
-"       .XX.ooooooo.ooo.XX.      ",
-"       .XX.ooooooooooo.XX.      ",
-"       .XX.ooooooooooo.XX.      ",
-"       .XX.ooooooooooo.XX.      ",
-"       .XX.ooooooooooo.XX.      ",
-"       .XX.............XX.      ",
-"       .XXXXXXXXXXXXXXXXX.      ",
-"       .XXXXXXXXXXXXXXXXX.      ",
-"       ...................      ",
-"                                ",
-"                                ",
-"                                "};
diff --git a/etc/gnus/gnus-uu-post-news-up.xbm b/etc/gnus/gnus-uu-post-news-up.xbm
deleted file mode 100644 (file)
index e0528e9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#define noname_width 32
-#define noname_height 32
-static char noname_bits[] = {
- 0x11,0x11,0x19,0x51,0x4a,0x95,0x82,0x14,0x20,0x40,0x29,0x42,0x0a,0xd5,0x86,
- 0x10,0x31,0x31,0x3b,0x53,0x08,0x9d,0xe8,0x10,0xa2,0x43,0x82,0x4b,0x88,0xff,
- 0xff,0x03,0xb3,0xaa,0x54,0xbb,0x88,0x55,0xaa,0x02,0xa2,0xfc,0x7f,0x4b,0x88,
- 0x06,0xc0,0x12,0xb1,0x05,0x40,0x56,0x8a,0x05,0x40,0x03,0xd0,0x86,0xc0,0xaa,
- 0x85,0x64,0x4b,0x06,0xb1,0x95,0xc4,0x32,0x8a,0x46,0x40,0x4b,0xd0,0x24,0x41,
- 0x03,0x84,0xe6,0xc1,0x56,0xd9,0x05,0x42,0x12,0x82,0x04,0x44,0x4b,0x94,0x07,
- 0xc0,0x22,0xc1,0x04,0x40,0x16,0x95,0x05,0xc0,0x52,0xa0,0x06,0x40,0x13,0x8a,
- 0xfd,0xff,0x46,0xd0,0x94,0x52,0x12,0x93,0x29,0xa5,0x5a,0xa4,0xff,0xff,0x03,
- 0x10,0x02,0x08,0x55,0x85,0xa8,0xa2,0x00};
diff --git a/etc/gnus/gnus-uu-post-news-up.xpm b/etc/gnus/gnus-uu-post-news-up.xpm
deleted file mode 100644 (file)
index f4a7e3a..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * icon-post-pic_xpm[] = {
-"32 32 4 1",
-"      c #000000000000",
-".     c #BFBFBFBFBFBF s backgroundToolBarColor",
-"X     c #999999999999",
-"o     c #FFFFFFFFFFFF",
-" ... ... ... ... ... ... ... ...",
-"................................",
-"................ ...............",
-"..............  .  .............",
-" ... ... ...  .. ..  ... ... ...",
-"..........  .........  .........",
-"........  .............  .......",
-".......                   ......",
-" ... .. XXXXXXXXXXXXXXXXX .. ...",
-"....... XXXXXXXXXXXXXXXXX ......",
-"....... XX             XX ......",
-"....... XX ooooooooooo XX ......",
-" ... .. XX ooooooooooo XX .. ...",
-"....... XX ooooooooooo XX ......",
-"....... XX oooo oooooo XX ......",
-"....... XX oo  o  o oo XX ......",
-" ... .. XX o oo oo ooo XX .. ...",
-"....... XX ooo ooooooo XX ......",
-"....... XX oo oo ooooo XX ......",
-"....... XX oo    ooooo XX ......",
-" ... .. XX oooooo oooo XX .. ...",
-"....... XX ooooooo ooo XX ......",
-"....... XX ooooooooooo XX ......",
-"....... XX ooooooooooo XX ......",
-" ... .. XX ooooooooooo XX .. ...",
-"....... XX ooooooooooo XX ......",
-"....... XX             XX ......",
-"....... XXXXXXXXXXXXXXXXX ......",
-" ... .. XXXXXXXXXXXXXXXXX .. ...",
-".......                   ......",
-"................................",
-"................................"};
diff --git a/etc/gnus/gnus.xbm b/etc/gnus/gnus.xbm
deleted file mode 100644 (file)
index 58d1ac8..0000000
+++ /dev/null
@@ -1,622 +0,0 @@
-#define noname_width 271
-#define noname_height 273
-static char noname_bits[] = {
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x49,0xe0,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x97,0xaa,0x8a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x57,0x2a,0x41,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0x52,0x16,0xfe,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0x49,0x05,
- 0xf9,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x7f,0x95,0xaa,0x58,0xf4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xa5,0x54,0x26,0xe1,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x54,0x49,0x49,0xe4,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x2a,0xa5,
- 0x2a,0xd1,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xaf,0x52,0x95,0x54,0xc4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,
- 0x24,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x57,0x29,0xa9,0x92,0x11,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x57,0xd5,0xfa,0xff,0xff,0xab,0xea,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x4a,0x55,0x2a,0x41,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x25,0x29,0xe5,0xff,0xff,0x95,0xa4,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0xa4,
- 0x24,0xa5,0x14,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0xa5,0xd4,0xff,
- 0x3f,0x52,0xa9,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x29,0x55,0x55,0x55,0x41,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xa9,0x54,0xea,0xff,0xdf,0x2a,0x55,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x4a,0x49,0x12,0x7e,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0x55,0xa5,0x92,0xff,0x23,0xa5,0x4a,0xd6,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,0xa4,0x94,0xaa,0x42,
- 0x7d,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0x2a,0xa9,0xff,0xad,0x92,0x24,
- 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,
- 0x95,0x52,0x52,0x29,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x52,0x49,0x55,
- 0xfe,0x91,0x54,0x55,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0x49,0x29,0x55,0x25,0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x4f,0x95,0xaa,0x92,0x7e,0x55,0x55,0xa9,0x4a,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,0x50,0x95,0xaa,0x24,0x7e,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x57,0x2a,0x95,0x54,0x79,0x95,0x92,0x92,0x94,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb9,0x62,0x29,0x49,
- 0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x49,0x49,0x95,0xba,0xa4,0x54,
- 0xaa,0x52,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,
- 0x1a,0xf8,0xa7,0xaa,0x22,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x52,
- 0x2a,0x75,0x55,0xa5,0x24,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xbf,0x5a,0xfd,0x57,0x92,0x94,0x7e,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x4a,0x4a,0x55,0x49,0x89,0x92,0x94,0xaa,0x94,0xf4,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xfc,0x2f,0x55,0x05,0x7c,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x55,0xa9,0x4a,0x55,0x2a,0x55,0x55,0x55,0x55,0xe5,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x4e,0xfd,0x5f,
- 0x29,0xa5,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0xa4,0x54,0x52,0x4a,0x55,0xa9,
- 0xa4,0x24,0xa5,0x94,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x2f,0x1d,0xfe,0x3f,0x95,0x04,0x7c,0xff,0xfd,0xff,0xff,0xff,0x3f,0x49,0xa5,
- 0x54,0xa9,0xa4,0x92,0x4a,0x49,0x4a,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0x44,0xfe,0x5f,0xa9,0x52,0x7d,0xff,0xe5,0xff,0xff,
- 0xff,0x5f,0x55,0x92,0x2a,0x95,0x52,0x4a,0x52,0xaa,0x52,0x4a,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x16,0xff,0xbf,0x4a,0x05,0x7c,
- 0xff,0xd9,0xff,0xff,0xff,0x5f,0x95,0x42,0xa5,0x52,0x95,0xaa,0xaa,0xaa,0x94,
- 0x54,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x43,0xfe,
- 0xbf,0x54,0x52,0x7d,0x7f,0x25,0xff,0xff,0xff,0xa7,0xa4,0x28,0x92,0x54,0x4a,
- 0xa5,0x4a,0x92,0xaa,0x4a,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xab,0x12,0xfe,0x7f,0xa5,0x02,0x7c,0x7f,0x55,0xfd,0xff,0xff,0x95,0x2a,
- 0x82,0x54,0xa5,0x54,0x2a,0xa9,0x2a,0xa5,0x52,0xf5,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x27,0x4b,0xff,0xff,0x4a,0x29,0x7d,0xff,0x92,0xfe,
- 0xff,0xff,0x55,0x92,0x20,0xa8,0x94,0x2a,0xa5,0x94,0x52,0x29,0xa9,0xf4,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x01,0xff,0x7f,0x52,0x42,
- 0x7c,0xff,0x25,0xf9,0xff,0x7f,0xaa,0x02,0x8a,0x40,0x29,0x49,0x09,0x41,0x4a,
- 0x55,0x25,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,
- 0xff,0xff,0x95,0x12,0x7d,0xff,0xa9,0xfa,0xff,0x7f,0x25,0xa9,0x20,0x2a,0xa5,
- 0xaa,0x42,0x92,0x54,0x92,0x54,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xaf,0x83,0xff,0xff,0xa9,0x42,0x7e,0xff,0xaa,0xf4,0xff,0xaf,0x54,
- 0x01,0x82,0x80,0xaa,0x54,0x14,0x08,0xa2,0xaa,0x4a,0xd2,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xef,0xcf,0xd7,0xff,0xff,0x52,0x12,0x7f,0xff,0x4a,
- 0xea,0xff,0x57,0x92,0xaa,0x28,0x24,0x29,0x25,0x81,0x82,0x08,0x49,0x52,0x55,
- 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xdf,0xef,0xe7,0xff,0xff,0x2a,
- 0x05,0x7e,0xff,0x55,0xd5,0xff,0xa5,0x2a,0x00,0x8e,0x10,0x4a,0x89,0x24,0x28,
- 0xa0,0xaa,0x2a,0x49,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xe7,0xff,
- 0xef,0xff,0xff,0xa5,0x50,0x7e,0xff,0x25,0xe5,0xff,0x2a,0xa5,0x52,0x7f,0x85,
- 0x54,0x35,0x08,0x82,0x0a,0x55,0x95,0xaa,0xfc,0xff,0xff,0xff,0xcf,0xff,0xff,
- 0xff,0xff,0xd7,0xff,0xff,0xff,0x7f,0x52,0x85,0x7e,0xff,0xab,0x94,0x1e,0x55,
- 0x2a,0xc8,0xff,0x10,0x90,0x92,0xa0,0x08,0x20,0x24,0x52,0x25,0xfd,0xff,0xff,
- 0xff,0xef,0xff,0xff,0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0x94,0x10,0x7e,0xff,
- 0x93,0xaa,0x6a,0x49,0x49,0xf2,0xff,0x85,0x52,0x09,0x0a,0xa2,0x4a,0x92,0x29,
- 0xa9,0xf2,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0x7f,
- 0x55,0x25,0x7f,0xff,0x55,0x49,0x49,0x95,0x0a,0xf9,0xff,0x17,0x48,0x26,0x50,
- 0x08,0x00,0xa9,0x4a,0x95,0xfa,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xf2,
- 0xff,0xff,0xff,0xff,0x92,0x80,0x7e,0xff,0xa7,0x54,0xaa,0xa4,0x52,0xfc,0xff,
- 0xaf,0x42,0x89,0xfa,0xbf,0x54,0x20,0xa9,0xa4,0xd4,0xff,0xff,0xff,0xcb,0xff,
- 0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,0x54,0x29,0x7f,0xff,0x4b,0xa5,0x92,
- 0x2a,0x01,0xff,0xff,0x1f,0xa8,0x22,0xff,0xff,0x01,0xa5,0x2a,0x55,0xa9,0xff,
- 0xff,0xff,0xd4,0xff,0xff,0xff,0x7f,0xfa,0xff,0xff,0xff,0x7f,0xa5,0x04,0x7f,
- 0xff,0x57,0x2a,0x55,0xa9,0x54,0xfe,0xff,0x3f,0x05,0x89,0xff,0xff,0x5f,0x48,
- 0x92,0x2a,0x95,0xff,0xff,0xff,0xea,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,
- 0x7f,0x2a,0x91,0x7f,0xff,0xa9,0x54,0x4a,0x52,0x02,0xff,0xff,0xff,0x50,0xd1,
- 0xff,0xff,0x1f,0x81,0xaa,0xa4,0x52,0xfe,0xff,0x3f,0xe9,0xff,0xff,0xff,0x7f,
- 0x1d,0xff,0xff,0xff,0xff,0x54,0x41,0x7f,0xff,0x93,0x92,0x52,0x95,0xc8,0xff,
- 0xff,0xff,0x8b,0xc4,0xff,0xff,0x7f,0x24,0xa5,0x2a,0x49,0xf9,0xff,0x7f,0xd5,
- 0xff,0xff,0xff,0xbf,0x4a,0xff,0xff,0xff,0xff,0x4a,0x14,0x7f,0xff,0x28,0xa5,
- 0x94,0x2a,0xa0,0xff,0xff,0x7f,0x22,0xf0,0xff,0xff,0x7f,0x12,0x94,0xa4,0xaa,
- 0xea,0xff,0xaf,0xea,0xff,0xff,0xff,0x5f,0x8e,0xff,0xff,0xff,0x7f,0xa9,0x40,
- 0x7f,0xff,0x48,0x55,0x55,0x12,0xca,0xff,0xff,0xff,0x0a,0xf5,0xff,0xff,0xff,
- 0x80,0x52,0x95,0x54,0xaa,0xfe,0x55,0xc4,0xff,0xff,0xff,0x5f,0xa5,0xff,0xff,
- 0xff,0xff,0x94,0x14,0x7f,0xff,0x52,0x2a,0xa9,0x4a,0xe1,0xff,0xff,0xbf,0x24,
- 0xf0,0xff,0xff,0xff,0x0b,0x28,0xa9,0x92,0x24,0x55,0x49,0xe5,0xd7,0xff,0xff,
- 0xa7,0x8a,0xff,0xff,0xff,0x7f,0xa5,0xc0,0x7f,0xff,0x50,0x49,0x95,0x04,0xf8,
- 0xff,0xff,0x5f,0x1f,0xfd,0xff,0xff,0xff,0x47,0x45,0x55,0xaa,0xaa,0x4a,0xaa,
- 0xea,0xaf,0xff,0xff,0x2b,0xc3,0xff,0xff,0xff,0x7f,0x55,0x94,0x7f,0x7f,0x4a,
- 0x55,0x52,0x51,0xfe,0xff,0xff,0x5f,0x4e,0xf8,0xff,0xff,0xff,0x1f,0x50,0x92,
- 0x52,0x49,0xa9,0x92,0xe4,0xd3,0xff,0xff,0x4b,0xd5,0xff,0xff,0xff,0xff,0x94,
- 0xc0,0x7f,0x3f,0xa0,0xa4,0xaa,0x04,0xfe,0xff,0xff,0xa7,0x1d,0xfd,0xff,0xff,
- 0xff,0x9f,0x84,0xaa,0x4a,0xaa,0x24,0x55,0xf2,0x2b,0xff,0x7f,0xa9,0xc1,0xff,
- 0xff,0xff,0x7f,0x4a,0x95,0x7f,0xbf,0x2a,0x95,0x24,0x50,0xff,0xff,0xff,0x97,
- 0x5e,0xfe,0xff,0xff,0xff,0x3f,0x92,0x24,0x95,0x92,0xaa,0xa4,0xf2,0xcb,0xff,
- 0x5f,0xd5,0xe5,0xff,0xff,0xff,0xff,0x52,0x80,0x7f,0x3f,0xa0,0x52,0x15,0x85,
- 0xff,0xff,0xff,0xd7,0x38,0xfe,0xff,0xff,0xff,0xff,0x20,0xaa,0x52,0x55,0x55,
- 0x55,0xf9,0x29,0xfd,0xab,0xa4,0xf0,0xff,0xff,0xff,0x7f,0x29,0xa9,0x7f,0xff,
- 0x42,0x25,0x49,0xe8,0xff,0xff,0xff,0x69,0x7a,0xff,0xff,0xff,0xff,0xff,0x82,
- 0x52,0xaa,0x24,0x89,0x4a,0xf8,0x55,0x2a,0x49,0x95,0xf5,0xff,0xff,0xff,0xbf,
- 0x2a,0xc4,0x7f,0x7f,0x90,0x54,0x15,0xe2,0xff,0xff,0xff,0x25,0xbc,0xff,0xff,
- 0xff,0xff,0xff,0x29,0x48,0x49,0xaa,0xaa,0xa4,0xfa,0x95,0x92,0x54,0x52,0xf0,
- 0xff,0xff,0xff,0xbf,0x4a,0xd1,0x7f,0xff,0x05,0xaa,0x40,0xf8,0xff,0xff,0x7f,
- 0xaa,0xfc,0xff,0xff,0xff,0xff,0xff,0x43,0xa9,0xaa,0x4a,0x52,0xa9,0xf8,0xa4,
- 0xaa,0x52,0x95,0xfc,0xff,0xff,0xff,0x7f,0x52,0xc0,0x7f,0xff,0xa1,0x00,0x24,
- 0xfa,0xff,0xff,0xff,0x0a,0xfe,0xff,0xff,0xff,0xff,0xff,0x17,0x92,0x24,0xa5,
- 0x2a,0x55,0xfe,0xaa,0xa4,0x2a,0x29,0xf9,0xff,0xff,0xff,0xbf,0x2a,0xea,0x7f,
- 0xff,0x05,0x92,0x90,0xfc,0xff,0xff,0xbf,0xa4,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x4f,0xa0,0xaa,0x54,0x49,0x25,0x7c,0x49,0x95,0xa4,0x12,0xfc,0xff,0xff,0xff,
- 0x7f,0x8a,0xe0,0x7f,0xff,0xa3,0x04,0x05,0xfe,0xff,0xff,0xbf,0x06,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x1f,0x49,0x95,0x52,0xaa,0x12,0x7f,0x55,0x52,0x55,0x0a,
- 0xfd,0xff,0xff,0xff,0x3f,0x29,0xe8,0x7f,0xff,0x0f,0x50,0x50,0xff,0xff,0xff,
- 0x5f,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x04,0xa9,0x4a,0x25,0x45,0x3e,
- 0xa9,0x2a,0xa9,0xa2,0xfc,0xff,0xff,0xff,0x7f,0x55,0xe1,0x7f,0xff,0x27,0x05,
- 0xc4,0xff,0xff,0xff,0x9f,0x91,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x41,0x4a,
- 0x29,0xa9,0x12,0x5e,0x95,0x94,0x4a,0x0a,0xfe,0xff,0xff,0xff,0xbf,0x12,0xf4,
- 0x7f,0xff,0x8f,0x50,0xf1,0xff,0xff,0xff,0xa7,0xc2,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x14,0x92,0xaa,0x4a,0xa2,0xbf,0xa4,0x52,0x95,0x22,0xff,0xff,0xff,
- 0xff,0x3f,0x45,0xf2,0x7f,0xff,0x3f,0x04,0xf4,0xff,0xff,0xff,0xd7,0xe8,0xff,
- 0xff,0xff,0xff,0x5f,0xff,0xff,0x83,0xa8,0x94,0x54,0x09,0x2f,0x55,0x4a,0x52,
- 0x49,0xff,0xff,0xff,0xff,0x5f,0x99,0xf0,0x7f,0xff,0x7f,0x51,0xfc,0xff,0xff,
- 0xff,0x6b,0xf1,0xff,0xff,0xff,0xff,0x5f,0xfd,0xff,0x2b,0x2a,0xa9,0x12,0x20,
- 0x5f,0xa9,0xaa,0x54,0x00,0xff,0xff,0xff,0xff,0x5f,0x15,0xf2,0x7f,0xff,0xff,
- 0x8f,0xff,0xff,0xff,0xff,0x2b,0xfc,0xff,0xff,0xff,0xff,0x2f,0xfd,0xff,0x87,
- 0xa0,0x4a,0xaa,0x8a,0x9f,0x4a,0x52,0x15,0xa9,0xff,0xff,0xff,0xff,0x5f,0x8a,
- 0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xf8,0xff,0xff,0xff,0xff,
- 0x57,0xf2,0xff,0x2f,0x82,0x52,0x05,0xd0,0x2f,0x95,0x4a,0x49,0x84,0xff,0xff,
- 0xff,0xff,0xbf,0x24,0xf8,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,0xfd,
- 0xff,0xff,0xff,0xff,0x4b,0xd5,0xff,0x9f,0x28,0x54,0x48,0xc5,0xbf,0x52,0x55,
- 0x0a,0xe1,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfa,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x1a,0xfe,0xff,0xff,0xff,0xff,0x57,0xa9,0xff,0x3f,0x82,0x00,0x21,
- 0xf0,0x5f,0x2a,0x49,0x21,0xc4,0xff,0xff,0xff,0xff,0xaf,0x1a,0xfd,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x3f,0x85,0xff,0xff,0xff,0xff,0xff,0x29,0xa5,0xff,
- 0xff,0x24,0x52,0x88,0xfc,0xbf,0x92,0x2a,0x09,0xf1,0xff,0xff,0xff,0xff,0x9f,
- 0x4c,0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x15,0xff,0xff,0xff,0x7f,
- 0xff,0xa5,0x4a,0xff,0xff,0x90,0x08,0x01,0xfe,0x3f,0x55,0x52,0x24,0xf4,0xff,
- 0xff,0xff,0xff,0xaf,0x02,0xfd,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xc6,
- 0xff,0xff,0xff,0xbf,0xfe,0x95,0x54,0xff,0xff,0x05,0x42,0xa8,0xfe,0xbf,0xa4,
- 0x2a,0x41,0xf9,0xff,0xff,0xff,0xff,0x5f,0x55,0xfc,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x4f,0xd0,0xff,0xff,0xff,0xbf,0x7c,0xaa,0x92,0xfc,0xff,0x53,0x08,
- 0x01,0xff,0x1f,0x4a,0x01,0x04,0xfc,0xff,0xff,0xff,0xff,0x27,0x05,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xc5,0xff,0xff,0xff,0x4f,0xbf,0x52,0xaa,
- 0xfe,0xff,0x07,0x42,0xea,0xff,0xbf,0x50,0x54,0x51,0xff,0xff,0xff,0xff,0xff,
- 0x97,0x56,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xf0,0xff,0xff,0xff,
- 0x2f,0x7f,0xa5,0x54,0xfd,0xff,0x3f,0x09,0xe0,0xff,0x1f,0x02,0x01,0x04,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0x02,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,
- 0xf5,0xff,0xff,0xff,0xab,0x9f,0x94,0x92,0xfc,0xff,0xff,0x40,0xfd,0xff,0x9f,
- 0x48,0x48,0xa1,0xff,0xff,0xff,0xff,0xff,0xa7,0x56,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x6b,0xf8,0xff,0xff,0xff,0xa4,0x5f,0xa9,0x2a,0xfd,0xff,0xff,
- 0xff,0xff,0xff,0x3f,0x22,0x21,0xc4,0xff,0xff,0xff,0xff,0xff,0x2f,0x03,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0xfa,0xff,0xff,0x7f,0xd5,0x2f,0xa5,
- 0xa4,0xfa,0xff,0xff,0xff,0xff,0xff,0xbf,0x08,0x08,0xf9,0xff,0xff,0xff,0xff,
- 0xff,0x97,0x4a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xfc,0xff,0xff,
- 0x7f,0x69,0xac,0x2a,0x55,0xf9,0xff,0xff,0xff,0xff,0xff,0x7f,0xa2,0x22,0xf8,
- 0xff,0xff,0xff,0xff,0xff,0x53,0x21,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x15,0xfe,0xff,0xff,0x9f,0x2a,0x95,0x94,0x92,0xf4,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x08,0x88,0xfe,0xff,0xff,0xff,0xff,0xff,0x57,0x8b,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0xa9,0xfe,0xff,0xff,0x5f,0x52,0xbc,0x52,0x55,0xf5,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x21,0x21,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xa1,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x7f,0x0d,0xff,0xff,0xff,0x57,0x15,0x3f,
- 0x55,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xc8,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xd7,0x89,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xbf,0xd6,0xff,0xff,
- 0xff,0x4b,0x45,0x3f,0x49,0xaa,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf9,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xc9,0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0x3f,0x81,0xff,0xff,0xff,0x29,0x11,0x5f,0x28,0x55,0xf5,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xc8,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0x5f,0xd6,0xff,0xff,0x7f,0xaa,0xc2,0x0f,0x55,0x49,0xea,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,
- 0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x9f,0xe1,0xff,0xff,0xbf,0x4a,0xd1,
- 0x5f,0x48,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xe9,0xe0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x27,0xf4,0xff,
- 0xff,0xbf,0x94,0xc4,0x07,0x91,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xea,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xaf,0xf1,0xff,0xff,0x9f,0x52,0xe0,0x4b,0x44,0x52,0xe9,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6a,0xe0,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xab,0x2a,0xf5,0x0f,0x51,0xa5,
- 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0x69,0xe5,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x55,0xf8,0xff,0xff,0x95,0x14,
- 0xf0,0x5f,0x84,0x54,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0x75,0xf0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x13,0xfd,
- 0xff,0xff,0xa5,0x42,0xf9,0x7f,0x91,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb2,0xfa,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0x54,0xfe,0xff,0x7f,0x52,0x12,0xfa,0xff,0x20,0xa5,0xe4,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x34,0xf8,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0x25,0xff,0xff,0xaf,0xaa,0x48,0xfc,0xff,0x0b,
- 0x29,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x7f,0xb5,0xf8,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x52,0xff,0xff,0x2f,0x49,
- 0x02,0xfe,0xff,0x43,0xaa,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x3f,0x3a,0xfa,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x4a,
- 0xff,0xff,0xa5,0x2a,0xa9,0xff,0xff,0x17,0x25,0xe9,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x9a,0xfc,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0x2a,0xff,0x7f,0x95,0x54,0x80,0xff,0xff,0x07,0xa9,0xea,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1d,0xfc,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0x3f,0xa9,0xfe,0x7f,0xa9,0x12,0xe5,0xff,0xff,
- 0x5f,0x4a,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x5f,0xad,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x95,0xea,0x97,0x54,
- 0x4a,0xf0,0xff,0xff,0x1f,0xa8,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x5f,0x0e,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,
- 0x52,0x55,0xa9,0x92,0x02,0xfd,0xff,0xff,0x5f,0x53,0xf5,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x5e,0xfe,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xbf,0x2a,0x49,0x4a,0x55,0x49,0xfc,0xff,0xff,0x3f,0x94,0xf8,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x0f,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,0xa5,0xaa,0x92,0xa4,0x20,0xff,0xff,
- 0xff,0xbf,0xa4,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x5f,0x57,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x52,0x52,0xaa,
- 0x2a,0x0a,0xff,0xff,0xff,0x7f,0x54,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x07,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xa7,0x94,0x4a,0x55,0x4a,0xa0,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0x2f,0x55,0xa9,0x92,0x12,0xe9,0xff,0xff,0xff,0x7f,0x24,
- 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0x87,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0xa5,0x4a,0xaa,0x44,0xf4,0xff,
- 0xff,0xff,0xff,0x55,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xa7,0xab,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xab,0x94,0xa4,
- 0x92,0x12,0xf9,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xab,0x83,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0x47,0xa9,0x2a,0x55,0x40,0xfc,0xff,0xff,0xff,0xff,0x25,0xf5,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xd7,0x97,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0x33,0x55,0xa9,0x24,0x15,0xfe,0xff,0xff,0xff,0xff,
- 0x95,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,
- 0x93,0xc3,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x25,0xa5,0x2a,0x40,0xff,
- 0xff,0xff,0xff,0xff,0xa9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xff,
- 0xff,0xff,0xff,0xff,0xe7,0xd5,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4b,0x92,
- 0x54,0x92,0xd4,0xff,0xff,0xff,0xff,0xff,0x55,0xf5,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0xff,0xd5,0xc1,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0x97,0xaa,0x4a,0x05,0xe2,0xff,0xff,0xff,0xff,0xff,0x25,0xf1,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xfd,0xff,0xff,0xff,0xff,0xd5,0xea,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x55,0x25,0xa1,0xf0,0xff,0xff,0xff,0xff,
- 0xff,0x95,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe8,0xfa,0xff,0xff,0xff,
- 0xff,0xea,0xe0,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xa7,0x24,0x59,0x04,0xfa,
- 0xff,0xff,0xff,0xff,0xff,0xa9,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe2,
- 0xfd,0xff,0xff,0xff,0xff,0xc9,0xe9,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,
- 0x52,0x05,0xa1,0xfc,0xff,0xff,0xff,0xff,0xff,0xa5,0xfa,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x70,0xf9,0xff,0xff,0xff,0xff,0x74,0xe2,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0x47,0x95,0x92,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0xf8,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xe2,0xfa,0xff,0xff,0xff,0xff,0x72,0xe8,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x97,0xaa,0x20,0xd0,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb8,0xfc,0xff,0xff,
- 0xff,0xff,0xea,0xe2,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x07,0x04,0x82,0xc2,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x29,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0x71,0xfd,0xff,0xff,0xff,0x7f,0x2a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0x4f,0x91,0x28,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x1f,0x54,0xfe,0xff,0xff,0xff,0x7f,0x75,0xf2,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0x27,0x44,0x82,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x29,
- 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xb8,0xfc,0xff,0xff,0xff,0xbf,0x14,
- 0xf1,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x0f,0x11,0x20,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x9a,0xfe,0xff,
- 0xff,0xff,0x7f,0x5a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x40,0x85,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x4f,0x2d,0xfd,0xff,0xff,0xff,0x9f,0x12,0xf9,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0x3f,0x14,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfe,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x07,0xa6,0xfe,0xff,0xff,0xff,0x5f,0x4d,0xfa,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0x40,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x4b,0xfe,0xff,0xff,0xff,0xbf,
- 0x2c,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x43,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x57,0xff,
- 0xff,0xff,0xff,0x5f,0x0a,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xd5,0xa9,0xff,0xff,0xff,0xff,0xaf,0x5a,0xfc,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa3,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x81,0x95,0xff,0xff,0xff,0xff,0x9f,0x06,0xfd,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xa5,0xff,0xff,0xff,0xff,
- 0x2f,0x95,0xfc,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xea,
- 0xff,0xff,0xff,0xff,0xaf,0x26,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x7f,0xf5,0xf4,0xff,0xff,0xff,0xff,0xaf,0x86,0xfe,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0x70,0xe5,0xff,0xff,0xff,0xff,0x4f,0x2e,0xfe,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xb2,0xfa,0xff,0xff,0xff,
- 0xff,0x57,0x83,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x78,
- 0xf2,0xff,0xff,0xff,0xff,0xa7,0x22,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x5f,0x5d,0xfd,0xff,0xff,0xff,0xff,0x97,0x87,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x3c,0xfd,0xff,0xff,0xff,0xff,0x53,0xa3,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xac,0xfe,0xff,0xff,
- 0xff,0xff,0x57,0x95,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
- 0x9e,0xfe,0xff,0xff,0xff,0xff,0x97,0x81,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xa7,0x57,0xfe,0xff,0xff,0xff,0xff,0xa9,0xa5,0xff,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xaf,0xff,0xff,0xff,0xff,0xff,0x4b,
- 0x89,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0x93,0xff,0xff,
- 0xff,0xff,0xff,0x95,0xa2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x83,0xab,0xff,0xff,0xff,0xff,0xff,0xd3,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,
- 0xff,0xff,0xff,0xff,0xe9,0xa5,0xff,0xff,0xff,0xff,0xff,0xa5,0xe1,0xff,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xd5,0xff,0xff,0xff,0xff,0xff,
- 0xd5,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xea,0xea,0xff,
- 0xff,0xff,0xff,0xff,0x14,0xc1,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,
- 0xff,0xe0,0xe4,0xff,0xff,0xff,0xff,0xff,0x65,0xe8,0xff,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,
- 0xff,0xff,0xff,0xff,0x3f,0x72,0xe9,0xff,0xff,0xff,0xff,0xff,0x6a,0xe1,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xbf,0xb8,0xfa,0xff,0xff,0xff,0xff,
- 0xff,0x52,0xea,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0x1f,0x7a,0xf5,
- 0xff,0xff,0xff,0xff,0x7f,0x2a,0xe0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,
- 0xff,0x8f,0x58,0xfa,0xff,0xff,0xff,0xff,0x7f,0x25,0xf5,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xb5,0xff,0xff,0xdf,0xff,0x57,0x5e,0xfd,0xff,0xff,0xff,0xff,0xff,0x34,0xe0,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xca,0xff,0xff,0x8f,0xff,0x07,0xac,0xfc,0xff,0xff,0xff,
- 0xff,0x7f,0x2a,0xf5,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd4,0xff,0xff,0x57,0xff,0x2b,0x2d,
- 0xfd,0xff,0xff,0xff,0xff,0xff,0xb2,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,
- 0x07,0xff,0x43,0x4a,0xff,0xff,0xff,0xff,0xff,0xbf,0x2a,0xf8,0xff,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x3f,0xc5,0xff,0xff,0x2b,0xfe,0x08,0xab,0xfe,0xff,0xff,0xff,0xff,0x7f,0xaa,
- 0xf2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xea,0xff,0xff,0x83,0x36,0x20,0x55,0xff,0xff,0xff,
- 0xff,0xff,0x3f,0x15,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xc2,0xff,0xff,0x48,0x4a,0x85,
- 0x49,0xff,0xff,0xff,0xff,0xff,0x7f,0x59,0xfa,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xf5,0xff,
- 0x7f,0x10,0x29,0x50,0xa5,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xf9,0xff,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x97,0xe4,0xff,0x7f,0x05,0x95,0x42,0xd5,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0x35,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xab,0xea,0xff,0xbf,0xa0,0x24,0xa8,0xd4,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0x19,0xf9,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x27,0xe5,0xff,0x3f,0x92,0xaa,
- 0x50,0xe9,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0xe2,
- 0xff,0x9f,0xa0,0xaa,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xf9,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x95,0xf8,0xff,0x5f,0x4a,0x92,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,
- 0xbf,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xf2,0xff,0x1f,0x20,0x49,0xa5,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0x5f,0x1a,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xf8,0xff,0x47,0xa9,
- 0x2a,0x29,0xf9,0xff,0xff,0xff,0xff,0xff,0xbf,0x0a,0xfc,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49,
- 0xf2,0xff,0x17,0x92,0xaa,0xaa,0xfe,0xff,0xff,0xff,0xff,0xff,0x9f,0xac,0xfe,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x9f,0x2a,0xf8,0xff,0x43,0xa8,0x24,0x25,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xaf,0x0a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xfa,0xff,0x91,0x54,0xaa,0x52,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x2f,0x4d,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x45,0xfc,0xff,0x03,
- 0x92,0x52,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x06,0xfc,0xff,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0x12,0xfe,0xff,0x50,0xaa,0x2a,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xa5,
- 0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xa7,0x44,0xff,0xff,0x0a,0x25,0xa5,0xa4,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x97,0x06,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x15,0xff,0xff,0x40,0xa9,0x92,0xea,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x55,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xa1,0xff,0x7f,
- 0x92,0x4a,0xaa,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x06,0xfc,0xff,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x95,0x8a,0xff,0x3f,0x84,0x54,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,
- 0x25,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x52,0xe0,0xff,0xbf,0x50,0xa9,0x4a,0xf2,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xa7,0x8e,0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa9,0xea,0xff,0x3f,0x24,0x95,0x54,
- 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x23,0xfe,0xff,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x4a,0xf0,0xff,
- 0x9f,0x50,0x69,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x8b,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x7f,0xa5,0xf4,0xff,0x0f,0x2d,0x75,0xaa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xaf,0x03,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x9f,0x14,0xfa,0xff,0x2f,0xa8,0xfa,0x25,0xfd,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x97,0xd7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xaa,0xfc,0xff,0x0f,0x4d,0xfd,
- 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0x83,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x12,0xfc,
- 0xff,0x27,0x92,0xfe,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xd7,0xff,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x97,0x0a,0xff,0xff,0x83,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xef,0xc7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xab,0x24,0xff,0xff,0x2b,0xaa,0xfe,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xe7,0xef,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0x05,0x95,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x82,
- 0xff,0xff,0x51,0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,
- 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xa9,0xe8,0xff,0xff,0x85,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xc1,0xff,0xff,0x90,0xd5,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x4d,0xe8,0xff,0xff,0xa5,
- 0xe4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x51,
- 0xf2,0xff,0x7f,0x40,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x3f,0x95,0xf8,0xff,0x7f,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x15,0xfa,0xff,0x3f,0xa4,0xf4,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xa4,0xfc,0xff,0x7f,
- 0x71,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,
- 0x15,0xfe,0xff,0x3f,0x94,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xa7,0x0a,0xff,0xff,0x1f,0x79,0xf2,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xa4,0xff,0xff,0x5f,0x8c,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x82,0xff,0xff,
- 0x1f,0x5c,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xa4,0x92,0xff,0xff,0xbf,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x9a,0xc4,0xff,0xff,0x0f,0x2e,0xfd,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa2,0xf0,0xff,0xff,0xaf,0xa7,0xfe,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x55,0xe4,0xff,
- 0xff,0x0f,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xbf,0x54,0xf2,0xff,0xff,0x9f,0x4b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x9f,0x92,0xf8,0xff,0xff,0xc7,0xab,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x15,0xfe,0xff,0xff,0x97,0xd7,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0x94,0xfc,
- 0xff,0xff,0xc7,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x2f,0x05,0xfe,0xff,0xff,0xcf,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x53,0xa9,0xff,0xff,0xff,0xd3,0xeb,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x05,0xff,0xff,0xff,0xe3,
- 0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0xc2,
- 0xff,0xff,0xff,0xeb,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x95,0xc8,0xff,0xff,0xff,0xf3,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xd2,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xaa,0xe0,0xff,0xff,0xff,
- 0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49,
- 0xf8,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x9f,0x2a,0xf5,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x4a,0xf8,0xff,0xff,0xff,0xff,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x14,0xfd,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,
- 0x4a,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xab,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x52,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x85,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x54,0xa2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x4a,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xe0,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xe4,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x5f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0x12,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x54,0xfa,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x0a,0xfc,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x53,0x45,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x97,0x14,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0x82,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x4a,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x52,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0xe8,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,
- 0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xfe,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,
- 0x49,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x2f,0x95,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x01,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x57,0x81,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x97,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xe0,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x93,0xf4,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x57,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x2b,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xfc,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfc,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x49,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x22,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x89,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xe9,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x9f,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x6f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f};
diff --git a/etc/gnus/gnus.xpm b/etc/gnus/gnus.xpm
deleted file mode 100644 (file)
index 8783781..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-/* XPM */
-static char *gnus[] = {
-/* width height num_colors chars_per_pixel */
-"   271   273        3            1",
-/* colors */
-". s thing c #bf9900",
-"# s shadow c #ffcc00",
-"a s background c None",
-/* pixels */
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........######aaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............#######aaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................######aaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................######aaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................#######aaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......................#######aaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........................#######aaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........................######aaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........................######aaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa............................#######aaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..............................#######aaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................aaaaaaaaaaaaaaaaaaaaaa...........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............................#######aaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaaaaaaaaaaaaaaaaa...............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............................#######aaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......................aaaaaaaaaaaaaaaa....................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................########aaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......................aaaaaaaaaaaaaa........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.................................#######aaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........................aaaaaaaaaaa............................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................................########aaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........................aaaaaaaaa..............................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...................................#######aaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............................aaaaaaa................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................................#######aaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............................aaaaa..................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......######.......................#######aaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................aaaa...................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#######aa....................#######aaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................................aa.....................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaa.................#######aaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................................a......................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaa................#######aaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaa...............#######aaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..............................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaa...............#######aaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaa..............#######aaaaa",
-"aaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaa..............#######aaaaa",
-"aaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaa.............#######aaaaa",
-"aaaaaaaa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaa..............####....................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaa............########aaaaa",
-"aaaaaaa.........aaaaaaaaaaaaaaaaaaaaaaaaaaa.............########...................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaa...........########aaaaa",
-"aaaaaaa...........aaaaaaaaaaaaaaaaaaaaaaa.............############..................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaa...........########aaaaa",
-"aaaaaaaa..........aaaaaaaaaaaaaaaaaaaaaa.............##############..................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaa...........########aaaaa",
-"aaaaaaaa...........aaaaaaaaaaaaaaaaaaaa............##################.......................##########................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaa..........########aaaaa",
-"aaaaaaaa............aaaaaaaaaaaaaaaaaa............####################....................###############..............................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaa..........#######aaaaaa",
-"aaaaaaaa............aaaaaaaaaaaaaaaa..............#####################.................#####################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaa..aaaaa###aaaaaaaaaaaaaaaaaa..........#######aaaaaa",
-"aaaaaaaa.............aaaaaaaaaaaaaa..............#######################...............#######################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaa..aaaaa##aaaaaaaaaaaaaaaaaaa..........#######aaaaaa",
-"aaaaaaaaa.............aaaaaaaaaaa...............##########aa#############.............#########################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaa..........#######aaaaaa",
-"aaaaaaaaa.............aaaaaaaaa................#########aaaaaaa###########............##########################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........########aaaaaa",
-"aaaaaaaaa................aaaa..................#######aaaaaaaaaa###########..........############################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........########aaaaaa",
-"aaaaaaaaa.....................................######aaaaaaaaaaaaa###########.........#############################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........########aaaaaa",
-"aaaaaaaaa....................................######aaaaaaaaaaaaaaaa#########........###############################.........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........########aaaaaa",
-"aaaaaaaaaa.................................#######aaaaaaaaaaaaaaaaaa#########.......#######aaaaaaaaaaa##############..........................aaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#######aaaaaaa",
-"aaaaaaaaaa................................#######aaaaaaaaaaaaaaaaaaaa########......#####aaaaaaaaaaaaaaaaa############..........................aaaaaaaaaaaaaaaaaaaaaaaaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#######aaaaaaa",
-"aaaaaaaaaa...............................########aaaaaaaaaaaaaaaaaaaaa########....#####aaaaaaaaaaaaaaaaaaaaa##########..........................aaaaaaaaaaaaaaaaaaaaaaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#######aaaaaaa",
-"aaaaaaaaa#..............................########aaaaaaaaaaaaaaaaaaaaaaaa#.####...#####aaaaaaaaaaaaaaaaaaaaaaa##########...........................aaaaaaaaaaaaaaaaaaaa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#######aaaaaaa",
-"aaaaaaaaa#.............................########aaaaaaaaaaaaaaaaaaaaaaaaa...###..######aaaaaaaaaaaaaaaaaaaaaaaa##########...........................aaaaaaaaaaaaaaaaaaa......a#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........########aaaaaaa",
-"aaaaaaaa###...........................#########aaaaaaaaaaaaaaaaaaaaaaaa....##########aaaaaaaaaaaaaaaaaaaaaaaaaa##########............................aaaaaaaaaaaaaaa........##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........########aaaaaaa",
-"aaaaaaaa###..........................#########aaaaaaaaaaaaaaaaaaaaaaaaa....#########aaaaaaaaaaaaaaaaaaaaaaaaaaaa##########...............................aaaaaaaa...........##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........########aaaaaaa",
-"aaaaaaaa###.........................#########aaaaaaaaaaaaaaaaaaaaaaaaa....a#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##########................................................##aaaaaa...aaaaaaaaaaaaaaaaaaaaa......a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
-"aaaaaaa####........................#########aaaaaaaaaaaaaaaaaaaaaaaaa....aaa#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########...............................................##aaaaaa....aaaaaaaaaaaaaaaaaaa.......a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
-"aaaaaaa####.......................########aaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########..............................................##aaaaa.....aaaaaaaaaaaaaaaaaa.......a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
-"aaaaaa######....................#########aaaaaaaaaaaaaaaaaaaaaaaaaa.....a#aaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########............................................##aaaaaa......aaaaaaaaaaaaaaa.........a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
-"aaaaaa######...................#########aaaaaaaaaaaaaaaaaaaaaaaaaa......##aaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########...........................................##aaaaa.......aaaaaaaaaaaaa..........aa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
-"aaaaaa#######.................#########aaaaaaaaaaaaaaaaaaaaaaaaaaa.....a###aaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.........................................###aaaaa.........aaaaaaa..............a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........########aaaaaaaa",
-"aaaaaaa#######...............#########aaaaaaaaaaaaaaaaaaaaaaaaaaa.....a####aaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########........................................##aaaaa...............................a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaaa",
-"aaaaaaa########............##########aaaaaaaaaaaaaaaaaaaaaaaaaaa.....a####aaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.......................................##aaaaa...............................#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaaa",
-"aaaaaaaa##########.......###########aaaaaaaaaaaaaaaaaaaaaaaaaaa......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.....................................###aaaaa..............................#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaaa",
-"aaaaaaaaa##########################aaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########....................................##aaaaa...............................#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........########aaaaaaaaa",
-"aaaaaaaaa#########################aaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########..................................###aaaaa..............................#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaa",
-"aaaaaaaaaa#######################aaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########...............................####aaaaa..............................######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaa",
-"aaaaaaaaaaa#####################aaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.............................#####aaaaa.............................#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaa",
-"aaaaaaaaaaa###################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########...........................######aaaa..............................######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......########aaaaaaaaaa",
-"aaaaaaaaaaaa#################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.........................######aaaaa.............................#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaaa",
-"aaaaaaaaaaaaa###############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaa#########.......................#######aaaa.............................#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaaa",
-"aaaaaaaaaaaaaaa###########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aaaaaaaaaaaaaaaa#########....................#########aaaa............................########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......aaaaaaaaaaaaaaaa#########..................#########aaaaa..........................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........aaaaaaaaaaaaaaa###########.............###########aaaaa.........................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa............aaaaaaaaaaaaaaa##############....###############aaaaaaa.......................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............aaaaaaaaaaaaaaa##############################aaaaaaaaa.....................############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............aaaaaaaaaaaaaaa############################aaaaaaaaaaa...................############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaa................aaaaaaaaaaaaaaaa##########################aaaaaaaaaaaa#................#############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaa.................aaaaaaaaaaaaaaaa########################aaaaaaaaaaaaa##..............#############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaa...................aaaaaaaaaaaaaaaa######################aaaaaaaaaaaaa#####.........###############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaa....................aaaaaaaaaaaaaaaaa###################aaaaaaaaaaaaaaa########..##################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaa....................aaaaaaaaaaaaaaaaaaa################aaaaaaaaaaaaaaaa###########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......aaaaa......................aaaaaaaaaaaaaaaaaaaaa###########aaaaaaaaaaaaaaaaaa##########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......aaaaa.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaa.......aaaaaa.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaa........a###a.........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a####aaaaaaaaaaaaaaaaaaaaaaaaaaaa........a####a.........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaa........a#####aaa.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a####aaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaa#.....................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a####aaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaa##....................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaa..........######aaaaa#####..................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a####aaaaaaaaaaaaaaaaaaaaaaaaa...........#####aaaaa#######..................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaaaaa...........#####aaaaaa#######..................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaaaaa...........######aaaaa#########.................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaaaa...........######aaaaa###########................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaaa............#######aaaaaaa##########...............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......####aaaaaaaaaaaaaaaaaaaaaa............#######aaaaaaaaa#########...............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaa............#######aaaaaaaaaaaa########..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......###aaaaaaaaaaaaaaaaaaaaa............#########aaaaaaaaaaaaa#######..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......###aaaaaaaaaaaaaaaaaaa.............#########aaaaaaaaaaaaaaa#######.............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#aaaaaaaaaaaaaaaaaaa.............#########aaaaaaaaaaaaaaaaa######.............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#aaaaaaaaaaaaaaaaa..............#########aaaaaaaaaaaaaaaaaaa#####.............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#aaaaaaaaaaaaaaa...............#########aaaaaaaaaaaaaaaaaaaa#####.............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........aaaaaaaaaaaaa...............#########aaaaaaaaaaaaaaaaaaaaaa#####............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............aaaaa..................########aaaaaaaaaaaaaaaaaaaaaaaaa####............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......................................########aaaaaaaaaaaaaaaaaaaaaaaaaa####...........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....................................########aaaaaaaaaaaaaaaaaaaaaaaaaaaa###...........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa####aaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaa####..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa####aaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..............................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.........#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa####aaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa............................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.........#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.........#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#........##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......................###########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#........##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#...................############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#........#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##................#############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.......##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###............##############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#......###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........###############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#......###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######..###################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.....###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.....###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######a.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.....###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######a......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#...####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##..####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#aaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaa#######aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#aaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaa#######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......#aaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaa########a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......#aaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaa########a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#aaaaaaaaaaaaaaaaaaaa#######aaaaaaa#########a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......##aaaaaaaaaaaaaaaaaaa########a..aa##########a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........##aaaaaaaaaaaaaaaaaa#########....##########a........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#aaaaaaaaaaaaaaaaaa#########......#########........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#aaaaaaaaaaaaaaaaaa#########......########a........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........##aaaaaaaaaaaaaaaaa#########.......#######.........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........##aaaaaaaaaaaaaaaaa########.........#####.........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........###aaaaaaaaaaaaaaaa########........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........###aaaaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........###aaaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........####aaaaaaaaaaaaaaa#########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaa#########......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaa#########......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa#########......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaa#######........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaa#######.........a..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaa#######a........aaa............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaa#######........aaaaa..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaa#######a.......aaaaaaa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaa######a........aaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaa#######........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaa#######.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaa######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaa#######a......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaa#######.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaa#######.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaa######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaa######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaa#####aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaa####aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaa#####aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaa####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaa####aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaa###aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaa####aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaa####aaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaa###aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaa###aaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaa####aaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaa###aaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaa###aaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-};
-SIMPLE  =                    T                                                  BITPIX  =                    8                                                  NAXIS   =                    2                                                  NAXIS1  =                  271                                                  NAXIS2  =                  273                                                  HISTORY Written by XV 3.10a                                                     END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Â½Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Â½Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Â½Â½Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Â½Â½Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Â½Â½Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Â½Â½Â½Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«Ã«\8eëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½ëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëë½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8e\8eëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8eë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e½½½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëë½½½½½½½½ë\8e\8eëë½½½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëë½½½½½½½ëëëëëëë½½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëë½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëë½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëë½½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½ëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëë½½½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½\8e\8e½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëë½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8eë½½½½ë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8eë½½½ë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë½½½½½½½½½½½½½½\8e\8e\8e\8e½½½½½½½½½½½½½½½ëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½ëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½ëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½ëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëë½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½ëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½ëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½\8e½½½½\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëë½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëë½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëë½½ëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëë\8e\8eëëëëë½½ëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëë\8e\8eëëëëë½½½ëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½½ëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\ No newline at end of file
diff --git a/etc/gnus/x-splash b/etc/gnus/x-splash
deleted file mode 100644 (file)
index cbd1c2c..0000000
Binary files a/etc/gnus/x-splash and /dev/null differ
diff --git a/etc/smilies/frown.pbm b/etc/smilies/frown.pbm
deleted file mode 100644 (file)
index f51ea4f..0000000
Binary files a/etc/smilies/frown.pbm and /dev/null differ
diff --git a/etc/smilies/smile.pbm b/etc/smilies/smile.pbm
deleted file mode 100644 (file)
index f64e883..0000000
Binary files a/etc/smilies/smile.pbm and /dev/null differ
diff --git a/etc/smilies/wry.pbm b/etc/smilies/wry.pbm
deleted file mode 100644 (file)
index 5fa5e9f..0000000
Binary files a/etc/smilies/wry.pbm and /dev/null differ
diff --git a/lisp/Makefile b/lisp/Makefile
deleted file mode 100644 (file)
index b949400..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-SHELL = /bin/sh
-EMACS=emacs
-FLAGS=-batch -q -no-site-file -l ./dgnushack.el
-
-total:
-       rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
-
-all:
-       rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
-
-clever:
-       $(EMACS) $(FLAGS) -f dgnushack-compile
-
-some:
-       $(EMACS) $(FLAGS) -f dgnushack-compile
-
-tags:
-       etags *.el
-
-separately:
-       rm -f *.elc ; for i in *.el; do $(EMACS) $(FLAGS) -f batch-byte-compile $$i; done
-
-pot:
-       xpot -drgnus -r`cat ./version` *.el > rgnus.pot
-
-gnus-load.el: 
-       echo ";;; gnus-load.el --- automatically extracted custom dependencies" > gnus-load.el
-       echo ";;" >> gnus-load.el
-       echo ";;; Code:" >> gnus-load.el
-       echo >> gnus-load.el
-       $(EMACS)  $(FLAGS) -l ./dgnushack.el -l cus-edit.el *.el \
-               -f custom-make-dependencies >> gnus-load.el
-       echo >> gnus-load.el
-       echo "(provide 'gnus-load)" >> gnus-load.el
-       echo >> gnus-load.el
-       echo ";;; gnus-load.el ends here" >> gnus-load.el
-
-distclean:
-       rm -f *.orig *.rej *.elc *~
-
diff --git a/lisp/base64.el b/lisp/base64.el
deleted file mode 100644 (file)
index 572a5d3..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-;;; base64.el,v --- Base64 encoding functions
-;; Author: Kyle E. Jones
-;; Created: 1997/03/12 14:37:09
-;; Version: 1.6
-;; Keywords: extensions
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Copyright (C) 1997 Kyle E. Jones
-;;;
-;;; This file is not part of GNU Emacs, but the same permissions apply.
-;;;
-;;; GNU Emacs is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 2, or (at your option)
-;;; any later version.
-;;;
-;;; GNU Emacs is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;;; Boston, MA 02111-1307, USA.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(eval-when-compile (require 'cl))
-
-;; For non-MULE
-(if (not (fboundp 'char-int))
-    (defalias 'char-int 'identity))
-
-(defvar base64-alphabet
-  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
-
-(defvar base64-decoder-program nil
-  "*Non-nil value should be a string that names a MIME base64 decoder.
-The program should expect to read base64 data on its standard
-input and write the converted data to its standard output.")
-
-(defvar base64-decoder-switches nil
-  "*List of command line flags passed to the command named by
-base64-decoder-program.")
-
-(defvar base64-encoder-program nil
-  "*Non-nil value should be a string that names a MIME base64 encoder.
-The program should expect arbitrary data on its standard
-input and write base64 data to its standard output.")
-
-(defvar base64-encoder-switches nil
-  "*List of command line flags passed to the command named by
-base64-encoder-program.")
-
-(defconst base64-alphabet-decoding-alist
-  '(
-    ( ?A . 00) ( ?B . 01) ( ?C . 02) ( ?D . 03) ( ?E . 04) ( ?F . 05)
-    ( ?G . 06) ( ?H . 07) ( ?I . 08) ( ?J . 09) ( ?K . 10) ( ?L . 11)
-    ( ?M . 12) ( ?N . 13) ( ?O . 14) ( ?P . 15) ( ?Q . 16) ( ?R . 17)
-    ( ?S . 18) ( ?T . 19) ( ?U . 20) ( ?V . 21) ( ?W . 22) ( ?X . 23)
-    ( ?Y . 24) ( ?Z . 25) ( ?a . 26) ( ?b . 27) ( ?c . 28) ( ?d . 29)
-    ( ?e . 30) ( ?f . 31) ( ?g . 32) ( ?h . 33) ( ?i . 34) ( ?j . 35)
-    ( ?k . 36) ( ?l . 37) ( ?m . 38) ( ?n . 39) ( ?o . 40) ( ?p . 41)
-    ( ?q . 42) ( ?r . 43) ( ?s . 44) ( ?t . 45) ( ?u . 46) ( ?v . 47)
-    ( ?w . 48) ( ?x . 49) ( ?y . 50) ( ?z . 51) ( ?0 . 52) ( ?1 . 53)
-    ( ?2 . 54) ( ?3 . 55) ( ?4 . 56) ( ?5 . 57) ( ?6 . 58) ( ?7 . 59)
-    ( ?8 . 60) ( ?9 . 61) ( ?+ . 62) ( ?/ . 63)
-    ))
-
-(defvar base64-alphabet-decoding-vector
-  (let ((v (make-vector 123 nil))
-       (p base64-alphabet-decoding-alist))
-    (while p
-      (aset v (car (car p)) (cdr (car p)))
-      (setq p (cdr p)))
-    v))
-
-(defvar base64-binary-coding-system 'binary)
-
-(defun base64-run-command-on-region (start end output-buffer command
-                                          &rest arg-list)
-  (let ((tempfile nil) status errstring default-process-coding-system 
-       (coding-system-for-write base64-binary-coding-system)
-       (coding-system-for-read base64-binary-coding-system))
-    (unwind-protect
-       (progn
-         (setq tempfile (make-temp-name "base64"))
-         (setq status
-               (apply 'call-process-region
-                      start end command nil
-                      (list output-buffer tempfile)
-                      nil arg-list))
-         (cond ((equal status 0) t)
-               ((zerop (save-excursion
-                         (set-buffer (find-file-noselect tempfile))
-                         (buffer-size)))
-                t)
-               (t (save-excursion
-                    (set-buffer (find-file-noselect tempfile))
-                    (setq errstring (buffer-string))
-                    (kill-buffer nil)
-                    (cons status errstring)))))
-      (ignore-errors
-       (delete-file tempfile)))))
-
-(if (featurep 'xemacs)
-    (defalias 'base64-insert-char 'insert-char)
-  (defun base64-insert-char (char &optional count ignored buffer)
-    (if (or (null buffer) (eq buffer (current-buffer)))
-       (insert-char char count)
-      (with-current-buffer buffer
-       (insert-char char count))))
-  (setq base64-binary-coding-system 'no-conversion))
-
-(defun base64-decode-region (start end)
-  (interactive "r")
-  ;;(message "Decoding base64...")
-  (let ((work-buffer nil)
-       (done nil)
-       (counter 0)
-       (bits 0)
-       (lim 0) inputpos
-       (non-data-chars (concat "^=" base64-alphabet)))
-    (unwind-protect
-       (save-excursion
-         (setq work-buffer (generate-new-buffer " *base64-work*"))
-         (buffer-disable-undo work-buffer)
-         (if base64-decoder-program
-             (let* ((binary-process-output t) ; any text already has CRLFs
-                    (status (apply 'base64-run-command-on-region
-                                   start end work-buffer
-                                   base64-decoder-program
-                                   base64-decoder-switches)))
-               (if (not (eq status t))
-                   (error "%s" (cdr status))))
-           (goto-char start)
-           (skip-chars-forward non-data-chars end)
-           (while (not done)
-             (setq inputpos (point))
-             (cond
-              ((> (skip-chars-forward base64-alphabet end) 0)
-               (setq lim (point))
-               (while (< inputpos lim)
-                 (setq bits (+ bits
-                               (aref base64-alphabet-decoding-vector
-                                     (char-int (char-after inputpos)))))
-                 (setq counter (1+ counter)
-                       inputpos (1+ inputpos))
-                 (cond ((= counter 4)
-                        (base64-insert-char (lsh bits -16) 1 nil work-buffer)
-                        (base64-insert-char (logand (lsh bits -8) 255) 1 nil
-                                            work-buffer)
-                        (base64-insert-char (logand bits 255) 1 nil
-                                            work-buffer)
-                        (setq bits 0 counter 0))
-                       (t (setq bits (lsh bits 6)))))))
-             (cond
-              ((or (= (point) end)
-                   (eq (char-after (point)) ?=))
-               (if (and (= (point) end) (> counter 1))
-                   (message 
-                    "at least %d bits missing at end of base64 encoding"
-                    (* (- 4 counter) 6)))
-               (setq done t)
-               (cond ((= counter 1)
-                      (error "at least 2 bits missing at end of base64 encoding"))
-                     ((= counter 2)
-                      (base64-insert-char (lsh bits -10) 1 nil work-buffer))
-                     ((= counter 3)
-                      (base64-insert-char (lsh bits -16) 1 nil work-buffer)
-                      (base64-insert-char (logand (lsh bits -8) 255)
-                                          1 nil work-buffer))
-                     ((= counter 0) t)))
-              (t (skip-chars-forward non-data-chars end)))))
-         (or (markerp end) (setq end (set-marker (make-marker) end)))
-         (goto-char start)
-         (insert-buffer-substring work-buffer)
-         (delete-region (point) end))
-      (and work-buffer (kill-buffer work-buffer))))
-  ;;(message "Decoding base64... done")
-  )
-
-(defun base64-encode-region (start end &optional no-line-break)
-  (interactive "r")
-  (message "Encoding base64...")
-  (let ((work-buffer nil)
-       (counter 0)
-       (cols 0)
-       (bits 0)
-       (alphabet base64-alphabet)
-       inputpos)
-    (unwind-protect
-       (save-excursion
-         (setq work-buffer (generate-new-buffer " *base64-work*"))
-         (buffer-disable-undo work-buffer)
-         (if base64-encoder-program
-             (let ((status (apply 'base64-run-command-on-region
-                                  start end work-buffer
-                                  base64-encoder-program
-                                  base64-encoder-switches)))
-               (if (not (eq status t))
-                   (error "%s" (cdr status))))
-           (setq inputpos start)
-           (while (< inputpos end)
-             (setq bits (+ bits (char-int (char-after inputpos))))
-             (setq counter (1+ counter))
-             (cond ((= counter 3)
-                    (base64-insert-char (aref alphabet (lsh bits -18)) 1 nil
-                                        work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand (lsh bits -12) 63))
-                     1 nil work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand (lsh bits -6) 63))
-                     1 nil work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand bits 63))
-                     1 nil work-buffer)
-                    (setq cols (+ cols 4))
-                    (cond ((and (= cols 72)
-                                (not no-line-break))
-                           (base64-insert-char ?\n 1 nil work-buffer)
-                           (setq cols 0)))
-                    (setq bits 0 counter 0))
-                   (t (setq bits (lsh bits 8))))
-             (setq inputpos (1+ inputpos)))
-           ;; write out any remaining bits with appropriate padding
-           (if (= counter 0)
-               nil
-             (setq bits (lsh bits (- 16 (* 8 counter))))
-             (base64-insert-char (aref alphabet (lsh bits -18)) 1 nil
-                                 work-buffer)
-             (base64-insert-char (aref alphabet (logand (lsh bits -12) 63))
-                                 1 nil work-buffer)
-             (if (= counter 1)
-                 (base64-insert-char ?= 2 nil work-buffer)
-               (base64-insert-char (aref alphabet (logand (lsh bits -6) 63))
-                                   1 nil work-buffer)
-               (base64-insert-char ?= 1 nil work-buffer)))
-           (if (and (> cols 0)
-                    (not no-line-break))
-               (base64-insert-char ?\n 1 nil work-buffer)))
-         (or (markerp end) (setq end (set-marker (make-marker) end)))
-         (goto-char start)
-         (insert-buffer-substring work-buffer)
-         (delete-region (point) end))
-      (and work-buffer (kill-buffer work-buffer))))
-  (message "Encoding base64... done"))
-
-(defun base64-encode (string &optional no-line-break)
-  (save-excursion
-    (set-buffer (get-buffer-create " *base64-encode*"))
-    (erase-buffer)
-    (insert string)
-    (base64-encode-region (point-min) (point-max) no-line-break)
-    (skip-chars-backward " \t\r\n")
-    (delete-region (point-max) (point))
-    (prog1
-       (buffer-string)
-      (kill-buffer (current-buffer)))))
-
-(defun base64-decode (string)
-  (save-excursion
-    (set-buffer (get-buffer-create " *base64-decode*"))
-    (erase-buffer)
-    (insert string)
-    (base64-decode-region (point-min) (point-max))
-    (goto-char (point-max))
-    (skip-chars-backward " \t\r\n")
-    (delete-region (point-max) (point))
-    (prog1
-       (buffer-string)
-      (kill-buffer (current-buffer)))))
-
-(defalias 'base64-decode-string 'base64-decode)
-(defalias 'base64-encode-string 'base64-encode)
-
-(provide 'base64)
diff --git a/lisp/date.el b/lisp/date.el
deleted file mode 100644 (file)
index b593e1c..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-;;; date.el --- Date and time handling functions
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;;     Masanobu Umeda <umerin@mse.kyutech.ac.jp>
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'timezone)
-
-(defun parse-time-string (date)
-  "Convert DATE into time."
-  (decode-time
-   (condition-case ()
-       (let* ((d1 (timezone-parse-date date))
-             (t1 (timezone-parse-time (aref d1 3))))
-        (apply 'encode-time
-               (mapcar (lambda (el)
-                         (and el (string-to-number el)))
-                       (list
-                        (aref t1 2) (aref t1 1) (aref t1 0)
-                        (aref d1 2) (aref d1 1) (aref d1 0)
-                        (number-to-string
-                         (* 60 (timezone-zone-to-minute (aref d1 4))))))))
-     ;; If we get an error, then we just return a 0 time.
-     (error (list 0 0)))))
-
-(defun date-to-time (date)
-  "Convert DATE into time."
-  (apply 'encode-time (parse-time-string date)))
-
-(defun time-less-p (t1 t2)
-  "Say whether time T1 is less than time T2."
-  (or (< (car t1) (car t2))
-      (and (= (car t1) (car t2))
-          (< (nth 1 t1) (nth 1 t2)))))
-
-(defun days-to-time (days)
-  "Convert DAYS into time."
-  (let* ((seconds (* 1.0 days 60 60 24))
-        (rest (expt 2 16))
-        (ms (condition-case nil (floor (/ seconds rest))
-              (range-error (expt 2 16)))))
-    (list ms (condition-case nil (round (- seconds (* ms rest)))
-              (range-error (expt 2 16))))))
-
-(defun time-since (time)
-  "Return the time since TIME, which is either an internal time or a date."
-  (when (stringp time)
-    ;; Convert date strings to internal time.
-    (setq time (date-to-time time)))
-  (let* ((current (current-time))
-        (rest (when (< (nth 1 current) (nth 1 time))
-                (expt 2 16))))
-    (list (- (+ (car current) (if rest -1 0)) (car time))
-         (- (+ (or rest 0) (nth 1 current)) (nth 1 time)))))
-
-(defun subtract-time (t1 t2)
-  "Subtract two internal times."
-  (let ((borrow (< (cadr t1) (cadr t2))))
-    (list (- (car t1) (car t2) (if borrow 1 0))
-         (- (+ (if borrow 65536 0) (cadr t1)) (cadr t2)))))
-
-(defun date-to-day (date)
-  "Return the number of days between year 1 and DATE."
-  (time-to-day (date-to-time date)))
-  
-(defun days-between (date1 date2)
-  "Return the number of days between DATE1 and DATE2."
-  (- (date-to-day date1) (date-to-day date2)))
-
-(defun date-leap-year-p (year)
-  "Return t if YEAR is a leap year."
-  (or (and (zerop (% year 4))
-          (not (zerop (% year 100))))
-      (zerop (% year 400))))
-
-(defun time-to-day-in-year (time)
-  "Return the day number within the year of the date month/day/year."
-  (let* ((tim (decode-time time))
-        (month (nth 4 tim))
-        (day (nth 3 tim))
-        (year (nth 5 tim))
-        (day-of-year (+ day (* 31 (1- month)))))
-    (when (> month 2)
-      (setq day-of-year (- day-of-year (/ (+ 23 (* 4 month)) 10)))
-      (when (date-leap-year-p year)
-       (setq day-of-year (1+ day-of-year))))
-    day-of-year))
-
-(defun time-to-day (time)
-  "The number of days between the Gregorian date 0001-12-31bce and TIME.
-The Gregorian date Sunday, December 31, 1bce is imaginary."
-  (let* ((tim (decode-time time))
-        (month (nth 4 tim))
-        (day (nth 3 tim))
-        (year (nth 5 tim)))
-    (+ (time-to-day-in-year time)      ;       Days this year
-       (* 365 (1- year))               ;       + Days in prior years
-       (/ (1- year) 4)                 ;       + Julian leap years
-       (- (/ (1- year) 100))           ;       - century years
-       (/ (1- year) 400))))            ;       + Gregorian leap years
-
-(provide 'date)
-
-;;; date.el ends here
diff --git a/lisp/drums.el b/lisp/drums.el
deleted file mode 100644 (file)
index 6b4a0d8..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-;;; drums.el --- Functions for parsing RFC822bis headers
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; DRUMS is an IETF Working Group that works (or worked) on the
-;; successor to RFC822, "Standard For The Format Of Arpa Internet Text
-;; Messages".  This library is based on
-;; draft-ietf-drums-msg-fmt-05.txt, released on 1998-08-05.
-
-;;; Code:
-
-(require 'time-date)
-(require 'mm-util)
-
-(defvar drums-no-ws-ctl-token "\001-\010\013\014\016-\037\177"
-  "US-ASCII control characters excluding CR, LF and white space.")
-(defvar drums-text-token "\001-\011\013\014\016-\177"
-  "US-ASCII characters exlcuding CR and LF.")
-(defvar drums-specials-token "()<>[]:;@\\,.\""
-  "Special characters.")
-(defvar drums-quote-token "\\"
-  "Quote character.")
-(defvar drums-wsp-token " \t"
-  "White space.")
-(defvar drums-fws-regexp
-  (concat "[" drums-wsp-token "]*\n[" drums-wsp-token "]+")
-  "Folding white space.")
-(defvar drums-atext-token "-^a-zA-Z0-9!#$%&'*+/=?_`{|}~"
-  "Textual token.")
-(defvar drums-dot-atext-token "-^a-zA-Z0-9!#$%&'*+/=?_`{|}~."
-  "Textual token including full stop.")
-(defvar drums-qtext-token
-  (concat drums-no-ws-ctl-token "\041\043-\133\135-\177")
-  "Non-white-space control characaters, plus the rest of ASCII excluding backslash and doublequote.")
-(defvar drums-tspecials "][()<>@,;:\\\"/?="
-  "Tspecials.")
-
-(defvar drums-syntax-table
-  (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
-    (modify-syntax-entry ?\\ "/" table)
-    (modify-syntax-entry ?< "(" table)
-    (modify-syntax-entry ?> ")" table)
-    (modify-syntax-entry ?@ "w" table)
-    (modify-syntax-entry ?/ "w" table)
-    (modify-syntax-entry ?= " " table)
-    (modify-syntax-entry ?* " " table)
-    (modify-syntax-entry ?\; " " table)
-    (modify-syntax-entry ?\' " " table)
-    table))
-
-(defun drums-token-to-list (token)
-  "Translate TOKEN into a list of characters."
-  (let ((i 0)
-       b e c out range)
-    (while (< i (length token))
-      (setq c (mm-char-int (aref token i)))
-      (incf i)
-      (cond
-       ((eq c (mm-char-int ?-))
-       (if b
-           (setq range t)
-         (push c out)))
-       (range
-       (while (<= b c)
-         (push (mm-make-char 'ascii b) out)
-         (incf b))
-       (setq range nil))
-       ((= i (length token))
-       (push (mm-make-char 'ascii c) out))
-       (t
-       (setq b c))))
-    (nreverse out)))
-
-(defsubst drums-init (string)
-  (set-syntax-table drums-syntax-table)
-  (insert string)
-  (drums-unfold-fws)
-  (goto-char (point-min)))
-
-(defun drums-remove-comments (string)
-  "Remove comments from STRING."
-  (with-temp-buffer
-    (let (c)
-      (drums-init string)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((eq c ?\")
-         (forward-sexp 1))
-        ((eq c ?\()
-         (delete-region (point) (progn (forward-sexp 1) (point))))
-        (t
-         (forward-char 1))))
-      (buffer-string))))
-
-(defun drums-remove-whitespace (string)
-  "Remove comments from STRING."
-  (with-temp-buffer
-    (drums-init string)
-    (let (c)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((eq c ?\")
-         (forward-sexp 1))
-        ((eq c ?\()
-         (forward-sexp 1))
-        ((memq c '(? ?\t ?\n))
-         (delete-char 1))
-        (t
-         (forward-char 1))))
-      (buffer-string))))
-
-(defun drums-get-comment (string)
-  "Return the first comment in STRING."
-  (with-temp-buffer
-    (drums-init string)
-    (let (result c)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((eq c ?\")
-         (forward-sexp 1))
-        ((eq c ?\()
-         (setq result
-               (buffer-substring
-                (1+ (point))
-                (progn (forward-sexp 1) (1- (point))))))
-        (t
-         (forward-char 1))))
-      result)))
-
-(defun drums-parse-address (string)
-  "Parse STRING and return a MAILBOX / DISPLAY-NAME pair."
-  (with-temp-buffer
-    (let (display-name mailbox c display-string)
-      (drums-init string)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((or (eq c ? )
-             (eq c ?\t))
-         (forward-char 1))
-        ((eq c ?\()
-         (forward-sexp 1))
-        ((eq c ?\")
-         (push (buffer-substring
-                (1+ (point)) (progn (forward-sexp 1) (1- (point))))
-               display-name))
-        ((looking-at (concat "[" drums-atext-token "@" "]"))
-         (push (buffer-substring (point) (progn (forward-sexp 1) (point)))
-               display-name))
-        ((eq c ?<)
-         (setq mailbox
-               (drums-remove-whitespace
-                (drums-remove-comments
-                 (buffer-substring
-                  (1+ (point))
-                  (progn (forward-sexp 1) (1- (point))))))))
-        (t (error "Unknown symbol: %c" c))))
-      ;; If we found no display-name, then we look for comments.
-      (if display-name
-         (setq display-string
-               (mapconcat 'identity (reverse display-name) " "))
-       (setq display-string (drums-get-comment string)))
-      (if (not mailbox)
-         (when (string-match "@" display-string)
-           (cons
-            (mapconcat 'identity (nreverse display-name) "")
-            (drums-get-comment string)))
-       (cons mailbox display-string)))))
-
-(defun drums-parse-addresses (string)
-  "Parse STRING and return a list of MAILBOX / DISPLAY-NAME pairs."
-  (with-temp-buffer
-    (drums-init string)
-    (let ((beg (point))
-         pairs c)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((memq c '(?\" ?< ?\())
-         (forward-sexp 1))
-        ((eq c ?,)
-         (push (drums-parse-address (buffer-substring beg (point)))
-               pairs)
-         (forward-char 1)
-         (setq beg (point)))
-        (t
-         (forward-char 1))))
-      (push (drums-parse-address (buffer-substring beg (point)))
-           pairs)
-      (nreverse pairs))))
-
-(defun drums-unfold-fws ()
-  "Unfold folding white space in the current buffer."
-  (goto-char (point-min))
-  (while (re-search-forward drums-fws-regexp nil t)
-    (replace-match " " t t))
-  (goto-char (point-min)))
-
-(defun drums-parse-date (string)
-  "Return an Emacs time spec from STRING."
-  (apply 'encode-time (parse-time-string string)))
-
-(defun drums-narrow-to-header ()
-  "Narrow to the header section in the current buffer."
-  (narrow-to-region
-   (goto-char (point-min))
-   (if (search-forward "\n\n" nil 1)
-       (1- (point))
-     (point-max)))
-  (goto-char (point-min)))
-
-(defun drums-quote-string (string)
-  "Quote string if it needs quoting to be displayed in a header."
-  (if (not (string-match (concat "[^" drums-atext-token "]") string))
-      (concat "\"" string "\"")
-    string))
-
-(provide 'drums)
-
-;;; drums.el ends here
diff --git a/lisp/fill-flowed.el b/lisp/fill-flowed.el
deleted file mode 100644 (file)
index b0883de..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-;;; fill-flowed.el --- interprete RFC2646 "flowed" text
-;; Copyright (C) 2000 Free Software Foundation, Inc.
-
-;; Author: Simon Josefsson <jas@pdc.kth.se>
-;; Keywords: mail
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2 of the License, or
-;; (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-;;; Commentary:
-
-;; This implement decoding of RFC2646 formatted text, including the
-;; quoted-depth wins rules.
-
-;; Theory of operation: search for lines ending with SPC, save quote
-;; length of line, remove SPC and concatenate line with the following
-;; line if quote length of following line matches current line.
-
-;; When no further concatenations are possible, we've found a
-;; paragraph and we let `fill-region' fill the long line into several
-;; lines with the quote prefix as `fill-prefix'.
-
-;; Todo: encoding
-
-;; History:
-
-;; 2000-02-17  posted on ding mailing list
-;; 2000-02-19  use `point-at-{b,e}ol' in XEmacs
-;; 2000-03-11  no compile warnings for point-at-bol stuff
-;; 2000-03-26  commited to gnus cvs
-
-;;; Code:
-
-(eval-and-compile
-  (fset 'fill-flowed-point-at-bol
-       (if (fboundp 'point-at-bol)
-           'point-at-bol
-         'line-beginning-position))
-  
-  (fset 'fill-flowed-point-at-eol
-       (if (fboundp 'point-at-eol)
-           'point-at-eol
-         'line-end-position)))
-
-(defun fill-flowed (&optional buffer)
-  (save-excursion
-    (set-buffer (or (current-buffer) buffer))
-    (goto-char (point-min))
-    (while (re-search-forward " $" nil t)
-      (when (save-excursion
-             (beginning-of-line)
-             (looking-at "^\\(>*\\)\\( ?\\)"))
-       (let ((quote (match-string 1)))
-         (if (string= quote "")
-             (setq quote nil))
-         (when (and quote (string= (match-string 2) ""))
-           (save-excursion
-             ;; insert SP after quote for pleasant reading of quoted lines
-             (beginning-of-line)
-             (when (> (skip-chars-forward ">") 0)
-               (insert " "))))
-         (while (and (save-excursion
-                       (backward-char 3)
-                       (looking-at "[^-][^-] "))
-                     (save-excursion
-                       (unless (eobp)
-                         (forward-char 1)
-                         (if quote
-                             (looking-at (format "^\\(%s\\)\\([^>]\\)" quote))
-                           (looking-at "^ ?")))))
-           (save-excursion
-             (replace-match (if (string= (match-string 2) " ")
-                                "" "\\2")))
-           (backward-delete-char -1)
-           (end-of-line))
-         (let ((fill-prefix (when quote (concat quote " "))))
-           (fill-region (fill-flowed-point-at-bol)
-                        (fill-flowed-point-at-eol)
-                        'left 'nosqueeze)))))))
-
-(provide 'fill-flowed)
-
-;;; fill-flowed.el ends here
diff --git a/lisp/gnus-gl.el b/lisp/gnus-gl.el
deleted file mode 100644 (file)
index 08ce4d4..0000000
+++ /dev/null
@@ -1,859 +0,0 @@
-;;; gnus-gl.el --- an interface to GroupLens for Gnus
-
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;;     Free Software Foundation, Inc.
-
-;; Author: Brad Miller <bmiller@cs.umn.edu>
-;; Keywords: news, score
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; GroupLens software and documentation is copyright (c) 1995 by Paul
-;; Resnick (Massachusetts Institute of Technology); Brad Miller, John
-;; Riedl, Jon Herlocker, and Joseph Konstan (University of Minnesota),
-;; and David Maltz (Carnegie-Mellon University).
-;;
-;; Permission to use, copy, modify, and distribute this documentation
-;; for non-commercial and commercial purposes without fee is hereby
-;; granted provided that this copyright notice and permission notice
-;; appears in all copies and that the names of the individuals and
-;; institutions holding this copyright are not used in advertising or
-;; publicity pertaining to this software without specific, written
-;; prior permission.  The copyright holders make no representations
-;; about the suitability of this software and documentation for any
-;; purpose.  It is provided ``as is'' without express or implied
-;; warranty.
-;;
-;; The copyright holders request that they be notified of
-;; modifications of this code.  Please send electronic mail to
-;; grouplens@cs.umn.edu for more information or to announce derived
-;; works.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Author: Brad Miller
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;; User Documentation:
-;; To use GroupLens you must load this file.
-;; You must also register a pseudonym with the Better Bit Bureau.
-;; http://www.cs.umn.edu/Research/GroupLens
-;;
-;;    ---------------- For your .emacs or .gnus file ----------------
-;;
-;; As of version 2.5, grouplens now works as a minor mode of
-;; gnus-summary-mode.  To get make that work you just need a couple of
-;; hooks.
-;; (setq gnus-use-grouplens t)
-;; (setq grouplens-pseudonym "")
-;; (setq grouplens-bbb-host "grouplens.cs.umn.edu")
-;;
-;; (setq gnus-summary-default-score 0)
-;;
-;;                              USING GROUPLENS
-;; How do I Rate an article??
-;;   Before you type n to go to the next article, hit a number from 1-5
-;;   Type r in the summary buffer and you will be prompted.
-;;   Note that when you're in grouplens-minor-mode 'r' masks the
-;;   usual reply binding for 'r'
-;;
-;; What if, Gasp, I find a bug???
-;; Please type M-x gnus-gl-submit-bug-report.  This will set up a
-;; mail buffer with the  state of variables and buffers that will help
-;; me debug the problem.  A short description up front would help too!
-;;
-;; How do I display the prediction for an article:
-;;  If you set the gnus-summary-line-format as shown above, the score
-;;  (prediction) will be shown automatically.
-;;
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Programmer  Notes
-;; 10/9/95
-;; gnus-scores-articles contains the articles
-;; When scoring is done, the call tree looks something like:
-;; gnus-possibly-score-headers
-;;  ==> gnus-score-headers
-;;      ==> gnus-score-load-file
-;;          ==> get-all-mids  (from the eval form)
-;;
-;; it would be nice to have one that gets called after all the other
-;; headers have been scored.
-;; we may want a variable gnus-grouplens-scale-factor
-;; and gnus-grouplens-offset  this would probably be either -3 or 0
-;; to make the scores centered around zero or not.
-;; Notes 10/12/95
-;; According to Lars, Norse god of gnus, the simple way to insert a
-;; call to an external function is to have a function added to the
-;; variable gnus-score-find-files-function  This new function
-;; gnus-grouplens-score-alist will return a core alist that
-;; has (("message-id" ("<message-id-xxxx>" score) ("<message-id-xxxy>" score))
-;; This seems like it would be pretty inefficient, though workable.
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;  TODO
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;; 3. Add some more ways to rate messages
-;; 4. Better error handling for token timeouts.
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; bugs
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-
-;;; Code:
-
-(eval-when-compile (require 'cl))
-
-(require 'gnus-score)
-(require 'gnus)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;; User variables
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar gnus-summary-grouplens-line-format
-  "%U\%R\%z%l%I\%(%[%4L: %-23,23n%]%) %s\n"
-  "*The line format spec in summary GroupLens mode buffers.")
-
-(defvar grouplens-pseudonym ""
-  "User's pseudonym.
-This pseudonym is obtained during the registration process")
-
-(defvar grouplens-bbb-host "grouplens.cs.umn.edu"
-  "Host where the bbbd is running.")
-
-(defvar grouplens-bbb-port 9000
-  "Port where the bbbd is listening.")
-
-(defvar grouplens-newsgroups
-  '("comp.groupware" "comp.human-factors" "comp.lang.c++"
-    "comp.lang.java" "comp.os.linux.admin" "comp.os.linux.advocacy"
-    "comp.os.linux.announce" "comp.os.linux.answers"
-    "comp.os.linux.development" "comp.os.linux.development.apps"
-    "comp.os.linux.development.system" "comp.os.linux.hardware"
-    "comp.os.linux.help" "comp.os.linux.m68k" "comp.os.linux.misc"
-    "comp.os.linux.networking" "comp.os.linux.setup" "comp.os.linux.x"
-    "mn.general" "rec.arts.movies" "rec.arts.movies.current-films"
-    "rec.food.recipes" "rec.humor")
-  "*Groups that are part of the GroupLens experiment.")
-
-(defvar grouplens-prediction-display 'prediction-spot
-  "valid values are:
-      prediction-spot -- an * corresponding to the prediction between 1 and 5,
-      confidence-interval -- a numeric confidence interval
-      prediction-bar --  |#####     | the longer the bar, the better the article,
-      confidence-bar --  |  -----   } the prediction is in the middle of the bar,
-      confidence-spot -- )  *       | the spot gets bigger with more confidence,
-      prediction-num  --   plain-old numeric value,
-      confidence-plus-minus  -- prediction +/i confidence")
-
-(defvar grouplens-score-offset 0
-  "Offset the prediction by this value.
-Setting this variable to -2 would have the following effect on
-GroupLens scores:
-
-   1   -->   -2
-   2   -->   -1
-   3   -->    0
-   4   -->    1
-   5   -->    2
-
-The reason is that a user might want to do this is to combine
-GroupLens predictions with scores calculated by other score methods.")
-
-(defvar grouplens-score-scale-factor 1
-  "This variable allows the user to magnify the effect of GroupLens scores.
-The scale factor is applied after the offset.")
-
-(defvar gnus-grouplens-override-scoring 'override
-  "Tell GroupLens to override the normal Gnus scoring mechanism.
-GroupLens scores can be combined with gnus scores in one of three ways.
-'override -- just use grouplens predictions for grouplens groups
-'combine  -- combine grouplens scores with gnus scores
-'separate -- treat grouplens scores completely separate from gnus")
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;; Program global variables
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defvar grouplens-bbb-token nil
-  "Current session token number.")
-
-(defvar grouplens-bbb-process nil
-  "Process Id of current bbbd network stream process.")
-
-(defvar grouplens-bbb-buffer nil
-  "Buffer associated with the BBBD process.")
-
-(defvar grouplens-rating-alist nil
-  "Current set of  message-id rating pairs.")
-
-(defvar grouplens-current-hashtable nil
-  "A hashtable to hold predictions from the BBB.")
-
-(defvar grouplens-current-group nil)
-
-;;(defvar bbb-alist nil)
-
-(defvar bbb-timeout-secs 10
-  "Number of seconds to wait for some response from the BBB.
-If this times out we give up and assume that something has died..." )
-
-(defvar grouplens-previous-article nil
-  "Message-ID of the last article read.")
-
-(defvar bbb-read-point)
-(defvar bbb-response-point)
-
-(defun bbb-renew-hash-table ()
-  (setq grouplens-current-hashtable (make-vector 100 0)))
-
-(bbb-renew-hash-table)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;  Utility Functions
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun bbb-connect-to-bbbd (host port)
-  (unless grouplens-bbb-buffer
-    (setq grouplens-bbb-buffer
-         (gnus-get-buffer-create (format " *BBBD trace: %s*" host)))
-    (save-excursion
-      (set-buffer grouplens-bbb-buffer)
-      (make-local-variable 'bbb-read-point)
-      (make-local-variable 'bbb-response-point)
-      (setq bbb-read-point (point-min))))
-
-  ;; if an old process is still running for some reason, kill it
-  (when grouplens-bbb-process
-    (ignore-errors
-      (when (eq 'open (process-status grouplens-bbb-process))
-       (set-process-buffer grouplens-bbb-process nil)
-       (delete-process grouplens-bbb-process))))
-
-  ;; clear the trace buffer of old output
-  (save-excursion
-    (set-buffer grouplens-bbb-buffer)
-    (erase-buffer))
-
-  ;; open the connection to the server
-  (catch 'done
-    (condition-case error
-       (setq grouplens-bbb-process
-             (open-network-stream "BBBD" grouplens-bbb-buffer host port))
-      (error (gnus-message 3 "Error: Failed to connect to BBB")
-            nil))
-    (and (null grouplens-bbb-process)
-        (throw 'done nil))
-    (save-excursion
-      (set-buffer grouplens-bbb-buffer)
-      (setq bbb-read-point (point-min))
-      (or (bbb-read-response grouplens-bbb-process)
-         (throw 'done nil))))
-
-  ;; return the process
-  grouplens-bbb-process)
-
-(defun bbb-send-command (process command)
-  (goto-char (point-max))
-  (insert command)
-  (insert "\r\n")
-  (setq bbb-read-point (point))
-  (setq bbb-response-point (point))
-  (set-marker (process-mark process) (point)) ; process output also comes here
-  (process-send-string process command)
-  (process-send-string process "\r\n")
-  (process-send-eof process))
-
-(defun bbb-read-response (process)
-  "This function eats the initial response of OK or ERROR from the BBB."
-  (let ((case-fold-search nil)
-       match-end)
-    (goto-char bbb-read-point)
-    (while (and (not (search-forward "\r\n" nil t))
-               (accept-process-output process bbb-timeout-secs))
-      (goto-char bbb-read-point))
-    (setq match-end (point))
-    (goto-char bbb-read-point)
-    (setq bbb-read-point match-end)
-    (looking-at "OK")))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;       Login Functions
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun bbb-login ()
-  "return the token number if login is successful, otherwise return nil."
-  (interactive)
-  (setq grouplens-bbb-token nil)
-  (if (not (equal grouplens-pseudonym ""))
-      (let ((bbb-process
-            (bbb-connect-to-bbbd grouplens-bbb-host grouplens-bbb-port)))
-       (if bbb-process
-           (save-excursion
-             (set-buffer (process-buffer bbb-process))
-             (bbb-send-command bbb-process
-                               (concat "login " grouplens-pseudonym))
-             (if (bbb-read-response bbb-process)
-                 (setq grouplens-bbb-token (bbb-extract-token-number))
-               (gnus-message 3 "Error: GroupLens login failed")))))
-    (gnus-message 3 "Error: you must set a pseudonym"))
-  grouplens-bbb-token)
-
-(defun bbb-extract-token-number ()
-  (let ((token-pos (search-forward "token=" nil t)))
-    (when (looking-at "[0-9]+")
-      (buffer-substring token-pos (match-end 0)))))
-
-(gnus-add-shutdown 'bbb-logout 'gnus)
-
-(defun bbb-logout ()
-  "logout of bbb session."
-  (when grouplens-bbb-token
-    (let ((bbb-process
-          (bbb-connect-to-bbbd grouplens-bbb-host grouplens-bbb-port)))
-      (when bbb-process
-       (save-excursion
-         (set-buffer (process-buffer bbb-process))
-         (bbb-send-command bbb-process (concat "logout " grouplens-bbb-token))
-         (bbb-read-response bbb-process))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;       Get Predictions
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun bbb-build-mid-scores-alist (groupname)
-  "this function can be called as part of the function to return the list of score files to use.
-See the gnus variable `gnus-score-find-score-files-function'.
-
-*Note:*  If you want to use grouplens scores along with calculated scores,
-you should see the offset and scale variables.  At this point, I don't
-recommend using both scores and grouplens predictions together."
-  (setq grouplens-current-group groupname)
-  (when (member groupname grouplens-newsgroups)
-    (setq grouplens-previous-article nil)
-    ;; scores-alist should be a list of lists:
-    ;;  ((("message-id" ("<mid1>" score1 nil s) ("<mid2> score2 nil s))))
-    ;;`((("message-id" . ,predict-list))) ; Yes, this is the return value
-    (list
-     (list
-      (list (append (list "message-id")
-                   (bbb-get-predictions (bbb-get-all-mids) groupname)))))))
-
-(defun bbb-get-predictions (midlist groupname)
-  "Ask the bbb for predictions, and build up the score alist."
-  (gnus-message 5 "Fetching Predictions...")
-  (if grouplens-bbb-token
-      (let ((bbb-process (bbb-connect-to-bbbd grouplens-bbb-host
-                                             grouplens-bbb-port)))
-       (when bbb-process
-         (save-excursion
-           (set-buffer (process-buffer bbb-process))
-           (bbb-send-command bbb-process
-                             (bbb-build-predict-command midlist groupname
-                                                        grouplens-bbb-token))
-           (if (bbb-read-response bbb-process)
-               (bbb-get-prediction-response bbb-process)
-             (gnus-message 1 "Invalid Token, login and try again")
-             (ding)))))
-    (gnus-message 3 "Error: You are not logged in to a BBB")
-    (ding)))
-
-(defun bbb-get-all-mids ()
-  (mapcar (function (lambda (x) (mail-header-id x))) gnus-newsgroup-headers))
-
-(defun bbb-build-predict-command (mlist grpname token)
-  (concat "getpredictions " token " " grpname "\r\n"
-         (mapconcat 'identity mlist "\r\n") "\r\n.\r\n"))
-
-(defun bbb-get-prediction-response (process)
-  (let ((case-fold-search nil))
-    (goto-char bbb-read-point)
-    (while (and (not (search-forward ".\r\n" nil t))
-               (accept-process-output process bbb-timeout-secs))
-      (goto-char bbb-read-point))
-    (goto-char (+ bbb-response-point 4));; we ought to be right before OK
-    (bbb-build-response-alist)))
-
-;; build-response-alist assumes that the cursor has been positioned at
-;; the first line of the list of mid/rating pairs.
-(defun bbb-build-response-alist ()
-  (let (resp mid pred)
-    (while
-       (cond
-        ((looking-at "\\(<.*>\\) :nopred=")
-         ;;(push `(,(bbb-get-mid) ,gnus-summary-default-score nil s) resp)
-         (forward-line 1)
-         t)
-        ((looking-at "\\(<.*>\\) :pred=\\([0-9]\.[0-9][0-9]\\) :conflow=\\([0-9]\.[0-9][0-9]\\) :confhigh=\\([0-9]\.[0-9][0-9]\\)")
-         (setq mid (bbb-get-mid)
-               pred (bbb-get-pred))
-         (push `(,mid ,pred nil s) resp)
-         (gnus-sethash mid (list pred (bbb-get-confl) (bbb-get-confh))
-                       grouplens-current-hashtable)
-         (forward-line 1)
-         t)
-        ((looking-at "\\(<.*>\\) :pred=\\([0-9]\.[0-9][0-9]\\)")
-         (setq mid (bbb-get-mid)
-               pred (bbb-get-pred))
-         (push `(,mid ,pred nil s) resp)
-         (gnus-sethash mid (list pred 0 0) grouplens-current-hashtable)
-         (forward-line 1)
-         t)
-        (t nil)))
-    resp))
-
-;; these "get" functions assume that there is an active match lying
-;; around.  Where the first parenthesized expression is the
-;; message-id, and the second is the prediction, the third and fourth
-;; are the confidence interval
-;;
-;; Since gnus assumes that scores are integer values?? we round the
-;; prediction.
-(defun bbb-get-mid ()
-  (buffer-substring (match-beginning 1) (match-end 1)))
-
-(defun bbb-get-pred ()
-  (let ((tpred (string-to-number (buffer-substring (match-beginning 2)
-                                                  (match-end 2)))))
-    (if (> tpred 0)
-       (round (* grouplens-score-scale-factor
-                 (+ grouplens-score-offset tpred)))
-      1)))
-
-(defun bbb-get-confl ()
-  (string-to-number (buffer-substring (match-beginning 4) (match-end 4))))
-
-(defun bbb-get-confh ()
-  (string-to-number (buffer-substring (match-beginning 4) (match-end 4))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;      Prediction Display
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defconst grplens-rating-range 4.0)
-(defconst grplens-maxrating 5)
-(defconst grplens-minrating 1)
-(defconst grplens-predstringsize 12)
-
-(defvar gnus-tmp-score)
-(defun bbb-grouplens-score (header)
-  (if (eq gnus-grouplens-override-scoring 'separate)
-      (bbb-grouplens-other-score header)
-    (let* ((rate-string (make-string 12 ?\ ))
-          (mid (mail-header-id header))
-          (hashent (gnus-gethash mid grouplens-current-hashtable))
-          (iscore gnus-tmp-score)
-          (low (car (cdr hashent)))
-          (high (car (cdr (cdr hashent)))))
-      (aset rate-string 0 ?|)
-      (aset rate-string 11 ?|)
-      (unless (member grouplens-current-group grouplens-newsgroups)
-       (unless (equal grouplens-prediction-display 'prediction-num)
-         (cond ((< iscore 0)
-                (setq iscore 1))
-               ((> iscore 5)
-                (setq iscore 5))))
-       (setq low 0)
-       (setq high 0))
-      (if (and (bbb-valid-score iscore)
-              (not (null mid)))
-         (cond
-          ;; prediction-spot
-          ((equal grouplens-prediction-display 'prediction-spot)
-           (setq rate-string (bbb-fmt-prediction-spot rate-string iscore)))
-          ;; confidence-interval
-          ((equal grouplens-prediction-display 'confidence-interval)
-           (setq rate-string (bbb-fmt-confidence-interval iscore low high)))
-          ;; prediction-bar
-          ((equal grouplens-prediction-display 'prediction-bar)
-           (setq rate-string (bbb-fmt-prediction-bar rate-string iscore)))
-          ;; confidence-bar
-          ((equal grouplens-prediction-display 'confidence-bar)
-           (setq rate-string (format "|   %4.2f   |" iscore)))
-          ;; confidence-spot
-          ((equal grouplens-prediction-display 'confidence-spot)
-           (setq rate-string (format "|   %4.2f   |" iscore)))
-          ;; prediction-num
-          ((equal grouplens-prediction-display 'prediction-num)
-           (setq rate-string (bbb-fmt-prediction-num iscore)))
-          ;; confidence-plus-minus
-          ((equal grouplens-prediction-display 'confidence-plus-minus)
-           (setq rate-string (bbb-fmt-confidence-plus-minus iscore low high))
-           )
-          (t (gnus-message 3 "Invalid prediction display type")))
-       (aset rate-string 5 ?N) (aset rate-string 6 ?A))
-      rate-string)))
-
-;; Gnus user format function that doesn't depend on
-;; bbb-build-mid-scores-alist being used as the score function, but is
-;; instead called from gnus-select-group-hook. -- LAB
-(defun bbb-grouplens-other-score (header)
-  (if (not (member grouplens-current-group grouplens-newsgroups))
-      ;; Return an empty string
-      ""
-    (let* ((rate-string (make-string 12 ?\ ))
-          (mid (mail-header-id header))
-          (hashent (gnus-gethash mid grouplens-current-hashtable))
-          (pred (or (nth 0 hashent) 0))
-          (low (nth 1 hashent))
-          (high (nth 2 hashent)))
-      ;; Init rate-string
-      (aset rate-string 0 ?|)
-      (aset rate-string 11 ?|)
-      (unless (equal grouplens-prediction-display 'prediction-num)
-       (cond ((< pred 0)
-              (setq pred 1))
-             ((> pred 5)
-              (setq pred 5))))
-      ;; If no entry in BBB hash mark rate string as NA and return
-      (cond
-       ((null hashent)
-       (aset rate-string 5 ?N)
-       (aset rate-string 6 ?A)
-       rate-string)
-
-       ((equal grouplens-prediction-display 'prediction-spot)
-       (bbb-fmt-prediction-spot rate-string pred))
-
-       ((equal grouplens-prediction-display 'confidence-interval)
-       (bbb-fmt-confidence-interval pred low high))
-
-       ((equal grouplens-prediction-display 'prediction-bar)
-       (bbb-fmt-prediction-bar rate-string pred))
-
-       ((equal grouplens-prediction-display 'confidence-bar)
-       (format "|   %4.2f   |" pred))
-
-       ((equal grouplens-prediction-display 'confidence-spot)
-       (format "|   %4.2f   |" pred))
-
-       ((equal grouplens-prediction-display 'prediction-num)
-       (bbb-fmt-prediction-num pred))
-
-       ((equal grouplens-prediction-display 'confidence-plus-minus)
-       (bbb-fmt-confidence-plus-minus pred low high))
-
-       (t
-       (gnus-message 3 "Invalid prediction display type")
-       (aset rate-string 0 ?|)
-       (aset rate-string 11 ?|)
-       rate-string)))))
-
-(defun bbb-valid-score (score)
-  (or (equal grouplens-prediction-display 'prediction-num)
-      (and (>= score grplens-minrating)
-          (<= score grplens-maxrating))))
-
-(defun bbb-requires-confidence (format-type)
-  (or (equal format-type 'confidence-plus-minus)
-      (equal format-type 'confidence-spot)
-      (equal format-type 'confidence-interval)))
-
-(defun bbb-have-confidence (clow chigh)
-  (not (or (null clow)
-          (null chigh))))
-
-(defun bbb-fmt-prediction-spot (rate-string score)
-  (aset rate-string
-       (round (* (/ (- score grplens-minrating) grplens-rating-range)
-                 (+ (- grplens-predstringsize 4) 1.49)))
-       ?*)
-  rate-string)
-
-(defun bbb-fmt-confidence-interval (score low high)
-  (if (bbb-have-confidence low high)
-      (format "|%4.2f-%4.2f |" low high)
-    (bbb-fmt-prediction-num score)))
-
-(defun bbb-fmt-confidence-plus-minus (score low high)
-  (if (bbb-have-confidence low high)
-      (format "|%3.1f+/-%4.2f|" score (/ (- high low) 2.0))
-    (bbb-fmt-prediction-num score)))
-
-(defun bbb-fmt-prediction-bar (rate-string score)
-  (let* ((i 1)
-        (step (/ grplens-rating-range (- grplens-predstringsize 4)))
-        (half-step (/ step 2))
-        (loc (- grplens-minrating half-step)))
-    (while (< i (- grplens-predstringsize 2))
-      (if (> score loc)
-         (aset rate-string i ?#)
-       (aset rate-string i ?\ ))
-      (setq i (+ i 1))
-      (setq loc (+ loc step)))
-    )
-  rate-string)
-
-(defun bbb-fmt-prediction-num (score)
-  (format "|   %4.2f   |" score))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;       Put Ratings
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun bbb-put-ratings ()
-  (if (and grouplens-bbb-token
-          grouplens-rating-alist
-          (member gnus-newsgroup-name grouplens-newsgroups))
-      (let ((bbb-process (bbb-connect-to-bbbd grouplens-bbb-host
-                                             grouplens-bbb-port))
-           (rate-command (bbb-build-rate-command grouplens-rating-alist)))
-       (if bbb-process
-           (save-excursion
-             (set-buffer (process-buffer bbb-process))
-             (gnus-message 5 "Sending Ratings...")
-             (bbb-send-command bbb-process rate-command)
-             (if (bbb-read-response bbb-process)
-                 (setq grouplens-rating-alist nil)
-               (gnus-message 1
-                             "Token timed out: call bbb-login and quit again")
-               (ding))
-             (gnus-message 5 "Sending Ratings...Done"))
-         (gnus-message 3 "No BBB connection")))
-    (setq grouplens-rating-alist nil)))
-
-(defun bbb-build-rate-command (rate-alist)
-  (concat "putratings " grouplens-bbb-token " " grouplens-current-group " \r\n"
-         (mapconcat (lambda (this)     ; form (mid . (score . time))
-                      (concat (car this)
-                              " :rating=" (cadr this) ".00"
-                              " :time=" (cddr this)))
-                    rate-alist "\r\n")
-         "\r\n.\r\n"))
-
-;; Interactive rating functions.
-(defun bbb-summary-rate-article (rating &optional midin)
-  (interactive "nRating: ")
-  (when (member gnus-newsgroup-name grouplens-newsgroups)
-    (let ((mid (or midin (bbb-get-current-id))))
-      (if (and rating
-              (>= rating grplens-minrating)
-              (<= rating grplens-maxrating)
-              mid)
-         (let ((oldrating (assoc mid grouplens-rating-alist)))
-           (if oldrating
-               (setcdr oldrating (cons rating 0))
-             (push `(,mid . (,rating . 0)) grouplens-rating-alist))
-           (gnus-summary-mark-article nil (int-to-string rating)))
-       (gnus-message 3 "Invalid rating")))))
-
-(defun grouplens-next-unread-article (rating)
-  "Select unread article after current one."
-  (interactive "P")
-  (when rating
-    (bbb-summary-rate-article rating))
-  (gnus-summary-next-unread-article))
-
-(defun grouplens-best-unread-article (rating)
-  "Select unread article after current one."
-  (interactive "P")
-  (when rating
-    (bbb-summary-rate-article rating))
-  (gnus-summary-best-unread-article))
-
-(defun grouplens-summary-catchup-and-exit (rating)
-  "Mark all articles not marked as unread in this newsgroup as read, then exit.
-If prefix argument ALL is non-nil, all articles are marked as read."
-  (interactive "P")
-  (when rating
-    (bbb-summary-rate-article rating))
-  (if (numberp rating)
-      (gnus-summary-catchup-and-exit)
-    (gnus-summary-catchup-and-exit rating)))
-
-(defun grouplens-score-thread (score)
-  "Raise the score of the articles in the current thread with SCORE."
-  (interactive "nRating: ")
-  (let (e)
-    (save-excursion
-      (let ((articles (gnus-summary-articles-in-thread))
-           article)
-       (while (setq article (pop articles))
-         (gnus-summary-goto-subject article)
-         (bbb-summary-rate-article score
-                                   (mail-header-id
-                                    (gnus-summary-article-header article)))))
-      (setq e (point)))
-    (let ((gnus-summary-check-current t))
-      (or (zerop (gnus-summary-next-subject 1 t))
-         (goto-char e))))
-  (gnus-summary-recenter)
-  (gnus-summary-position-point)
-  (gnus-set-mode-line 'summary))
-
-(defun bbb-exit-group ()
-  (bbb-put-ratings)
-  (bbb-renew-hash-table))
-
-(defun bbb-get-current-id ()
-  (if gnus-current-headers
-      (mail-header-id gnus-current-headers)
-    (gnus-message 3 "You must select an article before you rate it")))
-
-(defun bbb-grouplens-group-p (group)
-  "Say whether GROUP is a GroupLens group."
-  (if (member group grouplens-newsgroups) " (GroupLens Enhanced)" ""))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;          TIME SPENT READING
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defvar grouplens-current-starting-time nil)
-
-(defun grouplens-start-timer ()
-  (setq grouplens-current-starting-time (current-time)))
-
-(defun grouplens-elapsed-time ()
-  (let ((et (bbb-time-float (current-time))))
-    (- et (bbb-time-float grouplens-current-starting-time))))
-
-(defun bbb-time-float (timeval)
-  (+ (* (car timeval) 65536)
-     (cadr timeval)))
-
-(defun grouplens-do-time ()
-  (when (member gnus-newsgroup-name grouplens-newsgroups)
-    (when grouplens-previous-article
-      (let ((elapsed-time (grouplens-elapsed-time))
-           (oldrating (assoc grouplens-previous-article
-                             grouplens-rating-alist)))
-       (if (not oldrating)
-           (push `(,grouplens-previous-article . (0 . ,elapsed-time))
-                 grouplens-rating-alist)
-         (setcdr oldrating (cons (cadr oldrating) elapsed-time)))))
-    (grouplens-start-timer)
-    (setq grouplens-previous-article (bbb-get-current-id))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;          BUG REPORTING
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defconst gnus-gl-version "gnus-gl.el 2.50")
-(defconst gnus-gl-maintainer-address "grouplens-bug@cs.umn.edu")
-(defun gnus-gl-submit-bug-report ()
-  "Submit via mail a bug report on gnus-gl."
-  (interactive)
-  (require 'reporter)
-  (reporter-submit-bug-report gnus-gl-maintainer-address
-                             (concat "gnus-gl.el " gnus-gl-version)
-                             (list 'grouplens-pseudonym
-                                   'grouplens-bbb-host
-                                   'grouplens-bbb-port
-                                   'grouplens-newsgroups
-                                   'grouplens-bbb-token
-                                   'grouplens-bbb-process
-                                   'grouplens-current-group
-                                   'grouplens-previous-article)
-                             nil
-                             'gnus-gl-get-trace))
-
-(defun gnus-gl-get-trace ()
-  "Insert the contents of the BBBD trace buffer."
-  (when grouplens-bbb-buffer
-    (insert-buffer-substring grouplens-bbb-buffer)))
-
-;;
-;; GroupLens minor mode
-;;
-
-(defvar gnus-grouplens-mode nil
-  "Minor mode for providing a GroupLens interface in Gnus summary buffers.")
-
-(defvar gnus-grouplens-mode-map nil)
-
-(unless gnus-grouplens-mode-map
-  (setq gnus-grouplens-mode-map (make-keymap))
-  (gnus-define-keys
-      gnus-grouplens-mode-map
-    "n" grouplens-next-unread-article
-    "r" bbb-summary-rate-article
-    "k" grouplens-score-thread
-    "c" grouplens-summary-catchup-and-exit
-    "," grouplens-best-unread-article))
-
-(defun gnus-grouplens-make-menu-bar ()
-  (unless (boundp 'gnus-grouplens-menu)
-    (easy-menu-define
-     gnus-grouplens-menu gnus-grouplens-mode-map ""
-     '("GroupLens"
-       ["Login" bbb-login t]
-       ["Rate" bbb-summary-rate-article t]
-       ["Next article" grouplens-next-unread-article t]
-       ["Best article" grouplens-best-unread-article t]
-       ["Raise thread" grouplens-score-thread t]
-       ["Report bugs" gnus-gl-submit-bug-report t]))))
-
-(defun gnus-grouplens-mode (&optional arg)
-  "Minor mode for providing a GroupLens interface in Gnus summary buffers."
-  (interactive "P")
-  (when (and (eq major-mode 'gnus-summary-mode)
-            (member gnus-newsgroup-name grouplens-newsgroups))
-    (make-local-variable 'gnus-grouplens-mode)
-    (setq gnus-grouplens-mode
-         (if (null arg) (not gnus-grouplens-mode)
-           (> (prefix-numeric-value arg) 0)))
-    (when gnus-grouplens-mode
-      (gnus-make-local-hook 'gnus-select-article-hook)
-      (add-hook 'gnus-select-article-hook 'grouplens-do-time nil 'local)
-      (gnus-make-local-hook 'gnus-exit-group-hook)
-      (add-hook 'gnus-exit-group-hook 'bbb-exit-group nil 'local)
-      (make-local-variable 'gnus-score-find-score-files-function)
-
-      (cond
-       ((eq gnus-grouplens-override-scoring 'combine)
-       ;; either add bbb-buld-mid-scores-alist to a list
-       ;; or make a list
-       (if (listp gnus-score-find-score-files-function)
-           (setq gnus-score-find-score-files-function
-                 (append 'bbb-build-mid-scores-alist
-                         gnus-score-find-score-files-function))
-         (setq gnus-score-find-score-files-function
-               (list gnus-score-find-score-files-function
-                     'bbb-build-mid-scores-alist))))
-       ;; leave the gnus-score-find-score-files variable alone
-       ((eq gnus-grouplens-override-scoring 'separate)
-       (add-hook 'gnus-select-group-hook
-                 (lambda ()
-                   (bbb-get-predictions (bbb-get-all-mids)
-                                        gnus-newsgroup-name))))
-       ;; default is to override
-       (t
-       (setq gnus-score-find-score-files-function
-             'bbb-build-mid-scores-alist)))
-
-      ;; Change how summary lines look
-      (make-local-variable 'gnus-summary-line-format)
-      (make-local-variable 'gnus-summary-line-format-spec)
-      (setq gnus-summary-line-format gnus-summary-grouplens-line-format)
-      (setq gnus-summary-line-format-spec nil)
-      (gnus-update-format-specifications nil 'summary)
-      (gnus-update-summary-mark-positions)
-
-      ;; Set up the menu.
-      (when (and menu-bar-mode
-                (gnus-visual-p 'grouplens-menu 'menu))
-       (gnus-grouplens-make-menu-bar))
-      (gnus-add-minor-mode
-       'gnus-grouplens-mode " GroupLens" gnus-grouplens-mode-map)
-      (gnus-run-hooks 'gnus-grouplens-mode-hook))))
-
-(provide 'gnus-gl)
-
-;;; gnus-gl.el ends here
diff --git a/lisp/gnus-load.el b/lisp/gnus-load.el
deleted file mode 100644 (file)
index 53784fb..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-;;; gnus-load.el --- automatically extracted custom dependencies
-;;
-;;; Code:
-
-(put 'nnmail 'custom-loads '("nnmail"))
-(put 'gnus-article-emphasis 'custom-loads '("gnus-art"))
-(put 'gnus-article-headers 'custom-loads '("gnus-sum" "gnus-art"))
-(put 'nnmail-procmail 'custom-loads '("nnmail"))
-(put 'gnus-score-kill 'custom-loads '("gnus-kill"))
-(put 'gnus-visual 'custom-loads '("smiley" "gnus" "gnus-picon" "gnus-art" "earcon"))
-(put 'gnus-score-expire 'custom-loads '("gnus-score" "gnus-kill"))
-(put 'gnus-summary-maneuvering 'custom-loads '("gnus-sum"))
-(put 'gnus-start 'custom-loads '("gnus" "gnus-util" "gnus-start" "gnus-int" "gnus-group"))
-(put 'gnus-extract-view 'custom-loads '("gnus-uu" "gnus-sum"))
-(put 'gnus-various 'custom-loads '("gnus-sum"))
-(put 'gnus-article-washing 'custom-loads '("gnus-art"))
-(put 'gnus-score-files 'custom-loads '("gnus-score"))
-(put 'message-news 'custom-loads '("message"))
-(put 'gnus-thread 'custom-loads '("gnus-sum"))
-(put 'languages 'custom-loads '("cus-edit"))
-(put 'development 'custom-loads '("cus-edit"))
-(put 'nnmail-various 'custom-loads '("nnmail"))
-(put 'extensions 'custom-loads '("wid-edit"))
-(put 'message-various 'custom-loads '("message"))
-(put 'gnus-summary-exit 'custom-loads '("gnus-sum"))
-(put 'news 'custom-loads '("message" "gnus"))
-(put 'gnus 'custom-loads '("nnmail" "gnus" "gnus-win" "gnus-uu" "gnus-eform" "gnus-dup" "gnus-demon" "gnus-cache" "gnus-async" "gnus-art"))
-(put 'gnus-summary-visual 'custom-loads '("gnus-sum"))
-(put 'gnus-group-listing 'custom-loads '("gnus-group"))
-(put 'gnus-score 'custom-loads '("gnus" "gnus-nocem"))
-(put 'gnus-group-select 'custom-loads '("gnus-sum"))
-(put 'message-buffers 'custom-loads '("message"))
-(put 'gnus-threading 'custom-loads '("gnus-sum"))
-(put 'gnus-score-decay 'custom-loads '("gnus-score"))
-(put 'help 'custom-loads '("cus-edit"))
-(put 'gnus-nocem 'custom-loads '("gnus-nocem"))
-(put 'gnus-cite 'custom-loads '("gnus-cite"))
-(put 'gnus-demon 'custom-loads '("gnus-demon"))
-(put 'gnus-message 'custom-loads '("message"))
-(put 'gnus-score-delta-default 'custom-loads '("gnus-sum" "gnus-score"))
-(put 'nnmail-duplicate 'custom-loads '("nnmail"))
-(put 'message-interface 'custom-loads '("message"))
-(put 'nnmail-files 'custom-loads '("nnmail"))
-(put 'gnus-edit-form 'custom-loads '("gnus-eform"))
-(put 'emacs 'custom-loads '("cus-edit"))
-(put 'gnus-summary-mail 'custom-loads '("gnus-sum"))
-(put 'gnus-topic 'custom-loads '("gnus-topic"))
-(put 'wp 'custom-loads '("cus-edit"))
-(put 'gnus-summary-choose 'custom-loads '("gnus-sum"))
-(put 'widget-browse 'custom-loads '("wid-browse"))
-(put 'external 'custom-loads '("cus-edit"))
-(put 'message-headers 'custom-loads '("message"))
-(put 'message-forwarding 'custom-loads '("message"))
-(put 'message-faces 'custom-loads '("message"))
-(put 'environment 'custom-loads '("cus-edit"))
-(put 'gnus-article-mime 'custom-loads '("gnus-sum" "gnus-art"))
-(put 'gnus-duplicate 'custom-loads '("gnus-dup"))
-(put 'nnmail-retrieve 'custom-loads '("nnmail"))
-(put 'widgets 'custom-loads '("wid-edit" "wid-browse"))
-(put 'earcon 'custom-loads '("earcon"))
-(put 'hypermedia 'custom-loads '("wid-edit"))
-(put 'gnus-group-levels 'custom-loads '("gnus-group"))
-(put 'gnus-summary-format 'custom-loads '("gnus-sum"))
-(put 'gnus-files 'custom-loads '("nnmail" "gnus"))
-(put 'gnus-windows 'custom-loads '("gnus-win"))
-(put 'gnus-article-buttons 'custom-loads '("gnus-art"))
-(put 'gnus-summary 'custom-loads '("gnus" "gnus-sum"))
-(put 'gnus-article-hiding 'custom-loads '("gnus-sum" "gnus-art"))
-(put 'gnus-group 'custom-loads '("gnus" "gnus-topic"))
-(put 'gnus-article-various 'custom-loads '("gnus-sum" "gnus-art"))
-(put 'gnus-summary-marks 'custom-loads '("gnus-sum"))
-(put 'gnus-article-saving 'custom-loads '("gnus-art"))
-(put 'nnmail-expire 'custom-loads '("nnmail"))
-(put 'message-mail 'custom-loads '("message"))
-(put 'faces 'custom-loads '("wid-edit" "cus-edit" "message" "gnus"))
-(put 'gnus-summary-various 'custom-loads '("gnus-sum"))
-(put 'applications 'custom-loads '("cus-edit"))
-(put 'gnus-extract-archive 'custom-loads '("gnus-uu"))
-(put 'message 'custom-loads '("message"))
-(put 'message-sending 'custom-loads '("message"))
-(put 'editing 'custom-loads '("cus-edit"))
-(put 'gnus-score-adapt 'custom-loads '("gnus-score"))
-(put 'message-insertion 'custom-loads '("message"))
-(put 'gnus-extract-post 'custom-loads '("gnus-uu"))
-(put 'mail 'custom-loads '("message" "gnus"))
-(put 'gnus-summary-sort 'custom-loads '("gnus-sum"))
-(put 'customize 'custom-loads '("wid-edit" "custom" "cus-face" "cus-edit"))
-(put 'nnmail-split 'custom-loads '("nnmail"))
-(put 'gnus-asynchronous 'custom-loads '("gnus-async"))
-(put 'gnus-article-highlight 'custom-loads '("gnus-art"))
-(put 'gnus-extract 'custom-loads '("gnus-uu"))
-(put 'gnus-article 'custom-loads '("gnus-cite" "gnus-art"))
-(put 'gnus-group-foreign 'custom-loads '("gnus-group"))
-(put 'programming 'custom-loads '("cus-edit"))
-(put 'nnmail-prepare 'custom-loads '("nnmail"))
-(put 'picons 'custom-loads '("gnus-picon"))
-(put 'gnus-article-signature 'custom-loads '("gnus-art"))
-(put 'gnus-group-various 'custom-loads '("gnus-group"))
-
-(provide 'gnus-load)
-
-;;; gnus-load.el ends here
diff --git a/lisp/gnus-mailcap.el b/lisp/gnus-mailcap.el
deleted file mode 100644 (file)
index a352f5b..0000000
+++ /dev/null
@@ -1,850 +0,0 @@
-;;; mailcap.el --- Functions for displaying MIME parts
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: William M. Perry <wmperry@aventail.com>
-;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news, mail
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;;; Code:
-
-(eval-and-compile
-  (require 'cl))
-(require 'mail-parse)
-
-(defvar mailcap-parse-args-syntax-table
-  (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
-    (modify-syntax-entry ?' "\"" table)
-    (modify-syntax-entry ?` "\"" table)
-    (modify-syntax-entry ?{ "(" table)
-    (modify-syntax-entry ?} ")" table)
-    table)
-  "A syntax table for parsing sgml attributes.")
-
-(defvar mailcap-mime-data
-  '(("application"
-     ("x-x509-ca-cert"
-      (viewer . ssl-view-site-cert)
-      (test . (fboundp 'ssl-view-site-cert))
-      (type . "application/x-x509-ca-cert"))
-     ("x-x509-user-cert"
-      (viewer . ssl-view-user-cert)
-      (test . (fboundp 'ssl-view-user-cert))
-      (type . "application/x-x509-user-cert"))
-     ("octet-stream"
-      (viewer . mailcap-save-binary-file)
-      (type ."application/octet-stream"))
-     ("dvi"
-      (viewer . "open %s")
-      (type   . "application/dvi")
-      (test   . (eq (mm-device-type) 'ns)))
-     ("dvi"
-      (viewer . "xdvi %s")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11")
-      (type   . "application/dvi"))
-     ("dvi"
-      (viewer . "dvitty %s")
-      (test   . (not (getenv "DISPLAY")))
-      (type   . "application/dvi"))
-     ("emacs-lisp"
-      (viewer . mailcap-maybe-eval)
-      (type   . "application/emacs-lisp"))
-     ("x-tar"
-      (viewer . mailcap-save-binary-file)
-      (type   . "application/x-tar"))
-     ("x-latex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/x-latex"))
-     ("x-tex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/x-tex"))
-     ("latex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/latex"))
-     ("tex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/tex"))
-     ("texinfo"
-      (viewer . texinfo-mode)
-      (test   . (fboundp 'texinfo-mode))
-      (type   . "application/tex"))
-     ("zip"
-      (viewer . mailcap-save-binary-file)
-      (type   . "application/zip")
-      ("copiousoutput"))
-     ("pdf"
-      (viewer . "acroread %s")
-      (type   . "application/pdf"))
-     ("postscript"
-      (viewer . "open %s")
-      (type   . "application/postscript")
-      (test   . (eq (mm-device-type) 'ns)))
-     ("postscript"
-      (viewer . "ghostview %s")
-      (type . "application/postscript")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("postscript"
-      (viewer . "ps2ascii %s")
-      (type . "application/postscript")
-      (test . (not (getenv "DISPLAY")))
-      ("copiousoutput")))
-    ("audio"
-     ("x-mpeg"
-      (viewer . "maplay %s")
-      (type   . "audio/x-mpeg"))
-     (".*"
-      (viewer . mailcap-save-binary-file)
-      (test   . (or (featurep 'nas-sound)
-                     (featurep 'native-sound)))
-      (type   . "audio/*"))
-     (".*"
-      (viewer . "showaudio")
-      (type   . "audio/*")))
-    ("message"
-     ("rfc-*822"
-      (viewer . gnus-article-prepare-display)
-      (test   . (and (featurep 'gnus)
-                    (gnus-alive-p)))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . vm-mode)
-      (test   . (fboundp 'vm-mode))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . w3-mode)
-      (test   . (fboundp 'w3-mode))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . view-mode)
-      (test   . (fboundp 'view-mode))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . fundamental-mode)
-      (type   . "message/rfc-822")))
-    ("image"
-     ("x-xwd"
-      (viewer  . "xwud -in %s")
-      (type    . "image/x-xwd")
-      ("compose" . "xwd -frame > %s")
-      (test    . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("x11-dump"
-      (viewer . "xwud -in %s")
-      (type . "image/x-xwd")
-      ("compose" . "xwd -frame > %s")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("windowdump"
-      (viewer . "xwud -in %s")
-      (type . "image/x-xwd")
-      ("compose" . "xwd -frame > %s")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     (".*"
-      (viewer . "aopen %s")
-      (type   . "image/*")
-      (test   . (eq (mm-device-type) 'ns)))
-     (".*"
-      (viewer . "xv -perfect %s")
-      (type . "image/*")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11")))
-    ("text"
-     ("plain"
-      (viewer  . w3-mode)
-      (test    . (fboundp 'w3-mode))
-      (type    . "text/plain"))
-     ("plain"
-      (viewer  . view-mode)
-      (test    . (fboundp 'view-mode))
-      (type    . "text/plain"))
-     ("plain"
-      (viewer  . fundamental-mode)
-      (type    . "text/plain"))
-     ("enriched"
-      (viewer . enriched-decode-region)
-      (test   . (fboundp 'enriched-decode))
-      (type   . "text/enriched"))
-     ("html"
-      (viewer . mm-w3-prepare-buffer)
-      (test   . (fboundp 'w3-prepare-buffer))
-      (type   . "text/html")))
-    ("video"
-     ("mpeg"
-      (viewer . "mpeg_play %s")
-      (type   . "video/mpeg")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11")))
-    ("x-world"
-     ("x-vrml"
-      (viewer  . "webspace -remote %s -URL %u")
-      (type    . "x-world/x-vrml")
-      ("description"
-       "VRML document")))
-    ("archive"
-     ("tar"
-      (viewer . tar-mode)
-      (type . "archive/tar")
-      (test . (fboundp 'tar-mode)))))
-     "The mailcap structure is an assoc list of assoc lists.
-1st assoc list is keyed on the major content-type
-2nd assoc list is keyed on the minor content-type (which can be a regexp)
-
-Which looks like:
------------------
- ((\"application\"
-   (\"postscript\" . <info>))
-  (\"text\"
-   (\"plain\" . <info>)))
-
-Where <info> is another assoc list of the various information
-related to the mailcap RFC.  This is keyed on the lowercase
-attribute name (viewer, test, etc).  This looks like:
- ((viewer . viewerinfo)
-  (test   . testinfo)
-  (xxxx   . \"string\"))
-
-Where viewerinfo specifies how the content-type is viewed.  Can be
-a string, in which case it is run through a shell, with
-appropriate parameters, or a symbol, in which case the symbol is
-funcall'd, with the buffer as an argument.
-
-testinfo is a list of strings, or nil.  If nil, it means the
-viewer specified is always valid.  If it is a list of strings,
-these are used to determine whether a viewer passes the 'test' or
-not.")
-
-(defvar mailcap-download-directory nil
-  "*Where downloaded files should go by default.")
-
-(defvar mailcap-temporary-directory (or (getenv "TMPDIR") "/tmp")
-  "*Where temporary files go.")
-
-;;;
-;;; Utility functions
-;;;
-
-(defun mailcap-generate-unique-filename (&optional fmt)
-  "Generate a unique filename in mailcap-temporary-directory"
-  (if (not fmt)
-      (let ((base (format "mailcap-tmp.%d" (user-real-uid)))
-           (fname "")
-           (x 0))
-       (setq fname (format "%s%d" base x))
-       (while (file-exists-p
-               (expand-file-name fname mailcap-temporary-directory))
-         (setq x (1+ x)
-               fname (concat base (int-to-string x))))
-       (expand-file-name fname mailcap-temporary-directory))
-    (let ((base (concat "mm" (int-to-string (user-real-uid))))
-         (fname "")
-         (x 0))
-      (setq fname (format fmt (concat base (int-to-string x))))
-      (while (file-exists-p
-             (expand-file-name fname mailcap-temporary-directory))
-       (setq x (1+ x)
-             fname (format fmt (concat base (int-to-string x)))))
-      (expand-file-name fname mailcap-temporary-directory))))
-
-(defun mailcap-save-binary-file ()
-  (goto-char (point-min))
-  (unwind-protect
-      (let ((file (read-file-name
-                  "Filename to save as: "
-                  (or mailcap-download-directory "~/")))
-           (require-final-newline nil))
-       (write-region (point-min) (point-max) file))
-    (kill-buffer (current-buffer))))
-
-(defun mailcap-maybe-eval ()
-  "Maybe evaluate a buffer of emacs lisp code"
-  (if (yes-or-no-p "This is emacs-lisp code, evaluate it? ")
-      (eval-buffer (current-buffer))
-    (emacs-lisp-mode)))
-
-;;;
-;;; The mailcap parser
-;;;
-
-(defun mailcap-replace-regexp (regexp to-string)
-  ;; Quiet replace-regexp.
-  (goto-char (point-min))
-  (while (re-search-forward regexp nil t)
-    (replace-match to-string t nil)))
-
-(defvar mailcap-parsed-p nil)
-
-(defun mailcap-parse-mailcaps (&optional path force)
-  "Parse out all the mailcaps specified in a unix-style path string PATH.
-If FORCE, re-parse even if already parsed."
-  (interactive (list nil t))
-  (when (or (not mailcap-parsed-p)
-           force)
-    (cond
-     (path nil)
-     ((getenv "MAILCAPS") (setq path (getenv "MAILCAPS")))
-     ((memq system-type '(ms-dos ms-windows windows-nt))
-      (setq path (mapconcat 'expand-file-name '("~/mail.cap" "~/etc/mail.cap")
-                           ";")))
-     (t (setq path (mapconcat 'expand-file-name
-                             '("~/.mailcap"
-                               "/etc/mailcap:/usr/etc/mailcap"
-                               "/usr/local/etc/mailcap") ":"))))
-    (let ((fnames (reverse
-                  (split-string
-                   path (if (memq system-type
-                                  '(ms-dos ms-windows windows-nt))
-                            ";"
-                          ":"))))
-         fname)
-      (while fnames
-       (setq fname (car fnames))
-       (if (and (file-exists-p fname) (file-readable-p fname)
-                (file-regular-p fname))
-           (mailcap-parse-mailcap (car fnames)))
-       (setq fnames (cdr fnames))))
-    (setq mailcap-parsed-p t)))
-
-(defun mailcap-parse-mailcap (fname)
-  ;; Parse out the mailcap file specified by FNAME
-  (let (major                          ; The major mime type (image/audio/etc)
-       minor                           ; The minor mime type (gif, basic, etc)
-       save-pos                        ; Misc saved positions used in parsing
-       viewer                          ; How to view this mime type
-       info                            ; Misc info about this mime type
-       )
-    (with-temp-buffer
-      (insert-file-contents fname)
-      (set-syntax-table mailcap-parse-args-syntax-table)
-      (mailcap-replace-regexp "#.*" "")        ; Remove all comments
-      (mailcap-replace-regexp "\n+" "\n") ; And blank lines
-      (mailcap-replace-regexp "\\\\[ \t\n]+" " ") ; And collapse spaces
-      (mailcap-replace-regexp (concat (regexp-quote "\\") "[ \t]*\n") "")
-      (goto-char (point-max))
-      (skip-chars-backward " \t\n")
-      (delete-region (point) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (skip-chars-forward " \t\n")
-       (setq save-pos (point)
-             info nil)
-       (skip-chars-forward "^/;")
-       (downcase-region save-pos (point))
-       (setq major (buffer-substring save-pos (point)))
-       (skip-chars-forward "/ \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;")
-       (downcase-region save-pos (point))
-       (setq minor
-             (cond
-              ((eq ?* (or (char-after save-pos) 0)) ".*")
-              ((= (point) save-pos) ".*")
-              (t (buffer-substring save-pos (point)))))
-       (skip-chars-forward "; \t\n")
-       ;;; Got the major/minor chunks, now for the viewers/etc
-       ;;; The first item _must_ be a viewer, according to the
-       ;;; RFC for mailcap files (#1343)
-       (skip-chars-forward "; \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;\n")
-       (if (eq (or (char-after save-pos) 0) ?')
-           (setq viewer (progn
-                          (narrow-to-region (1+ save-pos) (point))
-                          (goto-char (point-min))
-                          (prog1
-                              (read (current-buffer))
-                            (goto-char (point-max))
-                            (widen))))
-         (setq viewer (buffer-substring save-pos (point))))
-       (setq save-pos (point))
-       (end-of-line)
-       (setq info (nconc (list (cons 'viewer viewer)
-                               (cons 'type (concat major "/"
-                                                   (if (string= minor ".*")
-                                                       "*" minor))))
-                         (mailcap-parse-mailcap-extras save-pos (point))))
-       (mailcap-mailcap-entry-passes-test info)
-       (mailcap-add-mailcap-entry major minor info)))))
-
-(defun mailcap-parse-mailcap-extras (st nd)
-  ;; Grab all the extra stuff from a mailcap entry
-  (let (
-       name                            ; From name=
-       value                           ; its value
-       results                         ; Assoc list of results
-       name-pos                        ; Start of XXXX= position
-       val-pos                         ; Start of value position
-       done                            ; Found end of \'d ;s?
-       )
-    (save-restriction
-      (narrow-to-region st nd)
-      (goto-char (point-min))
-      (skip-chars-forward " \n\t;")
-      (while (not (eobp))
-       (setq done nil)
-       (skip-chars-forward " \";\n\t")
-       (setq name-pos (point))
-       (skip-chars-forward "^ \n\t=")
-       (downcase-region name-pos (point))
-       (setq name (buffer-substring name-pos (point)))
-       (skip-chars-forward " \t\n")
-       (if (not (eq (char-after (point)) ?=)) ; There is no value
-           (setq value nil)
-         (skip-chars-forward " \t\n=")
-         (setq val-pos (point))
-         (if (memq (char-after val-pos) '(?\" ?'))
-             (progn
-               (setq val-pos (1+ val-pos))
-               (condition-case nil
-                   (progn
-                     (forward-sexp 1)
-                     (backward-char 1))
-                 (error (goto-char (point-max)))))
-           (while (not done)
-             (skip-chars-forward "^;")
-             (if (eq (char-after (1- (point))) ?\\ )
-                 (progn
-                   (subst-char-in-region (1- (point)) (point) ?\\ ? )
-                   (skip-chars-forward ";"))
-               (setq done t))))
-         (setq value (buffer-substring val-pos (point))))
-       (setq results (cons (cons name value) results)))
-      results)))
-
-(defun mailcap-mailcap-entry-passes-test (info)
-  ;; Return t iff a mailcap entry passes its test clause or no test
-  ;; clause is present.
-  (let (status                         ; Call-process-regions return value
-       (test (assq 'test info))        ; The test clause
-       )
-    (setq status (and test (split-string (cdr test) " ")))
-    (if (and (or (assoc "needsterm" info)
-                (assoc "needsx11" info))
-            (not (getenv "DISPLAY")))
-       (setq status nil)
-      (cond
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-n")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") t nil)))
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-z")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") nil t)))
-       (test nil)
-       (t nil)))
-    (and test (listp test) (setcdr test status))))
-
-;;;
-;;; The action routines.
-;;;
-
-(defun mailcap-possible-viewers (major minor)
-  ;; Return a list of possible viewers from MAJOR for minor type MINOR
-  (let ((exact '())
-       (wildcard '()))
-    (while major
-      (cond
-       ((equal (car (car major)) minor)
-       (setq exact (cons (cdr (car major)) exact)))
-       ((and minor (string-match (car (car major)) minor))
-       (setq wildcard (cons (cdr (car major)) wildcard))))
-      (setq major (cdr major)))
-    (nconc (nreverse exact) (nreverse wildcard))))
-
-(defun mailcap-unescape-mime-test (test type-info)
-  (let (save-pos save-chr subst)
-    (cond
-     ((symbolp test) test)
-     ((and (listp test) (symbolp (car test))) test)
-     ((or (stringp test)
-         (and (listp test) (stringp (car test))
-              (setq test (mapconcat 'identity test " "))))
-      (with-temp-buffer
-       (insert test)
-       (goto-char (point-min))
-       (while (not (eobp))
-         (skip-chars-forward "^%")
-         (if (/= (- (point)
-                    (progn (skip-chars-backward "\\\\")
-                           (point)))
-                 0)                    ; It is an escaped %
-             (progn
-               (delete-char 1)
-               (skip-chars-forward "%."))
-           (setq save-pos (point))
-           (skip-chars-forward "%")
-           (setq save-chr (char-after (point)))
-           (cond
-            ((null save-chr) nil)
-            ((= save-chr ?t)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert (or (cdr (assq 'type type-info)) "\"\"")))
-            ((= save-chr ?M)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?n)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?F)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?{)
-             (forward-char 1)
-             (skip-chars-forward "^}")
-             (downcase-region (+ 2 save-pos) (point))
-             (setq subst (buffer-substring (+ 2 save-pos) (point)))
-             (delete-region save-pos (1+ (point)))
-             (insert (or (cdr (assoc subst type-info)) "\"\"")))
-            (t nil))))
-       (buffer-string)))
-     (t (error "Bad value to mailcap-unescape-mime-test. %s" test)))))
-
-(defvar mailcap-viewer-test-cache nil)
-
-(defun mailcap-viewer-passes-test (viewer-info type-info)
-  ;; Return non-nil iff the viewer specified by VIEWER-INFO passes its
-  ;; test clause (if any).
-  (let* ((test-info (assq 'test viewer-info))
-        (test (cdr test-info))
-        (otest test)
-        (viewer (cdr (assoc 'viewer viewer-info)))
-        (default-directory (expand-file-name "~/"))
-        status parsed-test cache result)
-    (if (setq cache (assoc test mailcap-viewer-test-cache))
-       (cadr cache)
-      (setq
-       result
-       (cond
-       ((not test-info) t)             ; No test clause
-       ((not test) nil)                ; Already failed test
-       ((eq test t) t)                 ; Already passed test
-       ((and (symbolp test)            ; Lisp function as test
-             (fboundp test))
-        (funcall test type-info))
-       ((and (symbolp test)            ; Lisp variable as test
-             (boundp test))
-        (symbol-value test))
-       ((and (listp test)              ; List to be eval'd
-             (symbolp (car test)))
-        (eval test))
-       (t
-        (setq test (mailcap-unescape-mime-test test type-info)
-              test (list shell-file-name nil nil nil
-                         shell-command-switch test)
-              status (apply 'call-process test))
-        (= 0 status))))
-      (push (list otest result) mailcap-viewer-test-cache)
-      result)))
-
-(defun mailcap-add-mailcap-entry (major minor info)
-  (let ((old-major (assoc major mailcap-mime-data)))
-    (if (null old-major)               ; New major area
-       (setq mailcap-mime-data
-             (cons (cons major (list (cons minor info)))
-                   mailcap-mime-data))
-      (let ((cur-minor (assoc minor old-major)))
-       (cond
-        ((or (null cur-minor)          ; New minor area, or
-             (assq 'test info))        ; Has a test, insert at beginning
-         (setcdr old-major (cons (cons minor info) (cdr old-major))))
-        ((and (not (assq 'test info)) ; No test info, replace completely
-              (not (assq 'test cur-minor)))
-         (setcdr cur-minor info))
-        (t
-         (setcdr old-major (cons (cons minor info) (cdr old-major)))))))))
-
-;;;
-;;; The main whabbo
-;;;
-
-(defun mailcap-viewer-lessp (x y)
-  ;; Return t iff viewer X is more desirable than viewer Y
-  (let ((x-wild (string-match "[*?]" (or (cdr-safe (assq 'type x)) "")))
-       (y-wild (string-match "[*?]" (or (cdr-safe (assq 'type y)) "")))
-       (x-lisp (not (stringp (or (cdr-safe (assq 'viewer x)) ""))))
-       (y-lisp (not (stringp (or (cdr-safe (assq 'viewer y)) "")))))
-    (cond
-     ((and x-lisp (not y-lisp))
-      t)
-     ((and (not y-lisp) x-wild (not y-wild))
-      t)
-     ((and (not x-wild) y-wild)
-      t)
-     (t nil))))
-
-(defun mailcap-mime-info (string &optional request)
-  "Get the MIME viewer command for STRING, return nil if none found.
-Expects a complete content-type header line as its argument.
-
-Second argument REQUEST specifies what information to return.  If it is
-nil or the empty string, the viewer (second field of the mailcap
-entry) will be returned.  If it is a string, then the mailcap field
-corresponding to that string will be returned (print, description,
-whatever).  If a number, then all the information for this specific
-viewer is returned.  If `all', then all possible viewers for
-this type is returned."
-  (let (
-       major                           ; Major encoding (text, etc)
-       minor                           ; Minor encoding (html, etc)
-       info                            ; Other info
-       save-pos                        ; Misc. position during parse
-       major-info                      ; (assoc major mailcap-mime-data)
-       minor-info                      ; (assoc minor major-info)
-       test                            ; current test proc.
-       viewers                         ; Possible viewers
-       passed                          ; Viewers that passed the test
-       viewer                          ; The one and only viewer
-       ctl)
-    (save-excursion
-      (setq ctl (mail-header-parse-content-type (or string "text/plain")))
-      (setq major (split-string (car ctl) "/"))
-      (setq minor (cadr major)
-           major (car major))
-      (when (setq major-info (cdr (assoc major mailcap-mime-data)))
-       (when (setq viewers (mailcap-possible-viewers major-info minor))
-         (setq info (mapcar (lambda (a) (cons (symbol-name (car a))
-                                              (cdr a)))
-                            (cdr ctl)))
-         (while viewers
-           (if (mailcap-viewer-passes-test (car viewers) info)
-               (setq passed (cons (car viewers) passed)))
-           (setq viewers (cdr viewers)))
-         (setq passed (sort (nreverse passed) 'mailcap-viewer-lessp))
-         (setq viewer (car passed))))
-      (when (and (stringp (cdr (assq 'viewer viewer)))
-                passed)
-       (setq viewer (car passed)))
-      (cond
-       ((and (null viewer) (not (equal major "default")) request)
-       (mailcap-mime-info "default" request))
-       ((or (null request) (equal request ""))
-       (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info))
-       ((stringp request)
-       (if (or (eq request 'test) (eq request 'viewer))
-           (mailcap-unescape-mime-test
-            (cdr-safe (assoc request viewer)) info)))
-       ((eq request 'all)
-       passed)
-       (t
-       ;; MUST make a copy *sigh*, else we modify mailcap-mime-data
-       (setq viewer (copy-tree viewer))
-       (let ((view (assq 'viewer viewer))
-             (test (assq 'test viewer)))
-         (if view (setcdr view (mailcap-unescape-mime-test (cdr view) info)))
-         (if test (setcdr test (mailcap-unescape-mime-test (cdr test) info))))
-       viewer)))))
-
-;;;
-;;; Experimental MIME-types parsing
-;;;
-
-(defvar mailcap-mime-extensions
-  '((""          . "text/plain")
-    (".abs"      . "audio/x-mpeg")
-    (".aif"      . "audio/aiff")
-    (".aifc"     . "audio/aiff")
-    (".aiff"     . "audio/aiff")
-    (".ano"      . "application/x-annotator")
-    (".au"       . "audio/ulaw")
-    (".avi"      . "video/x-msvideo")
-    (".bcpio"    . "application/x-bcpio")
-    (".bin"      . "application/octet-stream")
-    (".cdf"      . "application/x-netcdr")
-    (".cpio"     . "application/x-cpio")
-    (".csh"      . "application/x-csh")
-    (".dvi"      . "application/x-dvi")
-    (".el"       . "application/emacs-lisp")
-    (".eps"      . "application/postscript")
-    (".etx"      . "text/x-setext")
-    (".exe"      . "application/octet-stream")
-    (".fax"      . "image/x-fax")
-    (".gif"      . "image/gif")
-    (".hdf"      . "application/x-hdf")
-    (".hqx"      . "application/mac-binhex40")
-    (".htm"      . "text/html")
-    (".html"     . "text/html")
-    (".icon"     . "image/x-icon")
-    (".ief"      . "image/ief")
-    (".jpg"      . "image/jpeg")
-    (".macp"     . "image/x-macpaint")
-    (".man"      . "application/x-troff-man")
-    (".me"       . "application/x-troff-me")
-    (".mif"      . "application/mif")
-    (".mov"      . "video/quicktime")
-    (".movie"    . "video/x-sgi-movie")
-    (".mp2"      . "audio/x-mpeg")
-    (".mp3"      . "audio/x-mpeg")
-    (".mp2a"     . "audio/x-mpeg2")
-    (".mpa"      . "audio/x-mpeg")
-    (".mpa2"     . "audio/x-mpeg2")
-    (".mpe"      . "video/mpeg")
-    (".mpeg"     . "video/mpeg")
-    (".mpega"    . "audio/x-mpeg")
-    (".mpegv"    . "video/mpeg")
-    (".mpg"      . "video/mpeg")
-    (".mpv"      . "video/mpeg")
-    (".ms"       . "application/x-troff-ms")
-    (".nc"       . "application/x-netcdf")
-    (".nc"       . "application/x-netcdf")
-    (".oda"      . "application/oda")
-    (".pbm"      . "image/x-portable-bitmap")
-    (".pdf"      . "application/pdf")
-    (".pgm"      . "image/portable-graymap")
-    (".pict"     . "image/pict")
-    (".png"      . "image/png")
-    (".pnm"      . "image/x-portable-anymap")
-    (".ppm"      . "image/portable-pixmap")
-    (".ps"       . "application/postscript")
-    (".qt"       . "video/quicktime")
-    (".ras"      . "image/x-raster")
-    (".rgb"      . "image/x-rgb")
-    (".rtf"      . "application/rtf")
-    (".rtx"      . "text/richtext")
-    (".sh"       . "application/x-sh")
-    (".sit"      . "application/x-stuffit")
-    (".snd"      . "audio/basic")
-    (".src"      . "application/x-wais-source")
-    (".tar"      . "archive/tar")
-    (".tcl"      . "application/x-tcl")
-    (".tcl"      . "application/x-tcl")
-    (".tex"      . "application/x-tex")
-    (".texi"     . "application/texinfo")
-    (".tga"      . "image/x-targa")
-    (".tif"      . "image/tiff")
-    (".tiff"     . "image/tiff")
-    (".tr"       . "application/x-troff")
-    (".troff"    . "application/x-troff")
-    (".tsv"      . "text/tab-separated-values")
-    (".txt"      . "text/plain")
-    (".vbs"      . "video/mpeg")
-    (".vox"      . "audio/basic")
-    (".vrml"     . "x-world/x-vrml")
-    (".wav"      . "audio/x-wav")
-    (".wrl"      . "x-world/x-vrml")
-    (".xbm"      . "image/xbm")
-    (".xpm"      . "image/xpm")
-    (".xwd"      . "image/windowdump")
-    (".zip"      . "application/zip")
-    (".ai"       . "application/postscript")
-    (".jpe"      . "image/jpeg")
-    (".jpeg"     . "image/jpeg"))
-  "An assoc list of file extensions and corresponding MIME content-types.")
-
-(defun mailcap-parse-mimetypes (&optional path)
-  ;; Parse out all the mimetypes specified in a unix-style path string PATH
-  (cond
-   (path nil)
-   ((getenv "MIMETYPES") (setq path (getenv "MIMETYPES")))
-   ((memq system-type '(ms-dos ms-windows windows-nt))
-    (setq path (mapconcat 'expand-file-name
-                         '("~/mime.typ" "~/etc/mime.typ") ";")))
-   (t (setq path (mapconcat 'expand-file-name
-                           '("~/.mime-types"
-                             "/etc/mime-types:/usr/etc/mime-types"
-                             "/usr/local/etc/mime-types"
-                             "/usr/local/www/conf/mime-types") ":"))))
-  (let ((fnames (reverse
-                (split-string path
-                              (if (memq system-type
-                                        '(ms-dos ms-windows windows-nt))
-                                  ";" ":"))))
-       fname)
-    (while fnames
-      (setq fname (car fnames))
-      (if (and (file-exists-p fname) (file-readable-p fname))
-         (mailcap-parse-mimetype-file (car fnames)))
-      (setq fnames (cdr fnames)))))
-
-(defun mailcap-parse-mimetype-file (fname)
-  ;; Parse out a mime-types file
-  (let (type                           ; The MIME type for this line
-       extns                           ; The extensions for this line
-       save-pos                        ; Misc. saved buffer positions
-       )
-    (with-temp-buffer
-      (insert-file-contents fname)
-      (mailcap-replace-regexp "#.*" "")
-      (mailcap-replace-regexp "\n+" "\n")
-      (mailcap-replace-regexp "[ \t]+$" "")
-      (goto-char (point-max))
-      (skip-chars-backward " \t\n")
-      (delete-region (point) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (skip-chars-forward " \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^ \t")
-       (downcase-region save-pos (point))
-       (setq type (buffer-substring save-pos (point)))
-       (while (not (eolp))
-         (skip-chars-forward " \t")
-         (setq save-pos (point))
-         (skip-chars-forward "^ \t\n")
-         (setq extns (cons (buffer-substring save-pos (point)) extns)))
-       (while extns
-         (setq mailcap-mime-extensions
-               (cons
-                (cons (if (= (string-to-char (car extns)) ?.)
-                          (car extns)
-                        (concat "." (car extns))) type)
-                mailcap-mime-extensions)
-               extns (cdr extns)))))))
-
-(defun mailcap-extension-to-mime (extn)
-  "Return the MIME content type of the file extensions EXTN."
-  (if (and (stringp extn)
-          (not (eq (string-to-char extn) ?.)))
-      (setq extn (concat "." extn)))
-  (cdr (assoc (downcase extn) mailcap-mime-extensions)))
-
-(defvar mailcap-binary-suffixes
-  (if (memq system-type '(ms-dos windows-nt))
-      '(".exe" ".com" ".bat" ".cmd" ".btm" "")
-    '("")))
-
-(defun mailcap-command-p (command)
-  "Say whether COMMAND is in the exec path.
-The path of COMMAND will be returned iff COMMAND is a command."
-  (let ((path (if (file-name-absolute-p command) '(nil) exec-path))
-       file dir)
-    (catch 'found
-      (while (setq dir (pop path))
-       (let ((suffixes mailcap-binary-suffixes))
-         (while suffixes
-           (when (and (file-executable-p
-                       (setq file (expand-file-name
-                                   (concat command (pop suffixes))
-                                   dir)))
-                      (not (file-directory-p file)))
-             (throw 'found file))))))))
-
-(provide 'mailcap)
-
-;;; mailcap.el ends here
diff --git a/lisp/mailheader.el b/lisp/mailheader.el
deleted file mode 100644 (file)
index 6eb5669..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-;;; mail-header.el --- Mail header parsing, merging, formatting
-
-;; Copyright (C) 1996 by Free Software Foundation, Inc.
-
-;; Author: Erik Naggum <erik@arcana.naggum.no>
-;; Keywords: tools, mail, news
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; This package provides an abstraction to RFC822-style messages, used in
-;; mail news, and some other systems.  The simple syntactic rules for such
-;; headers, such as quoting and line folding, are routinely reimplemented
-;; in many individual packages.  This package removes the need for this
-;; redundancy by representing message headers as association lists,
-;; offering functions to extract the set of headers from a message, to
-;; parse individual headers, to merge sets of headers, and to format a set
-;; of headers.
-
-;; The car of each element in the message-header alist is a symbol whose
-;; print name is the name of the header, in all lower-case.  The cdr of an
-;; element depends on the operation.  After extracting headers from a
-;; message, it is a string, the value of the header.  An extracted set of
-;; headers may be parsed further, which may turn it into a list, whose car
-;; is the original value and whose subsequent elements depend on the
-;; header.  For formatting, it is evaluated to obtain the strings to be
-;; inserted.  For merging, one set of headers consists of strings, while
-;; the other set will be evaluated with the symbols in the first set of
-;; headers bound to their respective values.
-
-;;; Code:
-
-(require 'cl)
-
-;; Make the byte-compiler shut up.
-(defvar headers)
-
-(defun mail-header-extract ()
-  "Extract headers from current buffer after point.
-Returns a header alist, where each element is a cons cell (name . value),
-where NAME is a symbol, and VALUE is the string value of the header having
-that name."
-  (let ((message-headers ()) (top (point))
-       start end)
-    (while (and (setq start (point))
-               (> (skip-chars-forward "^\0- :") 0)
-               (eq (char-after) ?:)
-               (setq end (point))
-               (progn (forward-char)
-                      (> (skip-chars-forward " \t") 0)))
-      (let ((header (intern (downcase (buffer-substring start end))))
-           (value (list (buffer-substring
-                         (point) (progn (end-of-line) (point))))))
-       (while (progn (forward-char) (> (skip-chars-forward " \t") 0))
-         (push (buffer-substring (point) (progn (end-of-line) (point)))
-               value))
-       (push (if (cdr value)
-                 (cons header (mapconcat #'identity (nreverse value) " "))
-               (cons header (car value)))
-             message-headers)))
-    (goto-char top)
-    (nreverse message-headers)))
-
-(defun mail-header-extract-no-properties ()
-  "Extract headers from current buffer after point, without properties.
-Returns a header alist, where each element is a cons cell (name . value),
-where NAME is a symbol, and VALUE is the string value of the header having
-that name."
-  (mapcar
-   (lambda (elt)
-     (set-text-properties 0 (length (cdr elt)) nil (cdr elt))
-     elt)
-   (mail-header-extract)))
-
-(defun mail-header-parse (parsing-rules headers)
-  "Apply PARSING-RULES to HEADERS.
-PARSING-RULES is an alist whose keys are header names (symbols) and whose
-value is a parsing function.  The function takes one argument, a string,
-and return a list of values, which will destructively replace the value
-associated with the key in HEADERS, after being prepended with the original
-value."
-  (dolist (rule parsing-rules)
-    (let ((header (assq (car rule) headers)))
-      (when header
-       (if (consp (cdr header))
-           (setf (cddr header) (funcall (cdr rule) (cadr header)))
-         (setf (cdr header)
-               (cons (cdr header) (funcall (cdr rule) (cdr header))))))))
-  headers)
-
-(defsubst mail-header (header &optional header-alist)
-  "Return the value associated with header HEADER in HEADER-ALIST.
-If the value is a string, it is the original value of the header.  If the
-value is a list, its first element is the original value of the header,
-with any subsequent elements being the result of parsing the value.
-If HEADER-ALIST is nil, the dynamically bound variable `headers' is used."
-  (cdr (assq header (or header-alist headers))))
-
-(defun mail-header-set (header value &optional header-alist)
-  "Set the value associated with header HEADER to VALUE in HEADER-ALIST.
-HEADER-ALIST defaults to the dynamically bound variable `headers' if nil.
-See `mail-header' for the semantics of VALUE."
-  (let* ((alist (or header-alist headers))
-        (entry (assq header alist)))
-    (if entry
-       (setf (cdr entry) value)
-      (nconc alist (list (cons header value)))))
-  value)
-
-(defsetf mail-header (header &optional header-alist) (value)
-  `(mail-header-set ,header ,value ,header-alist))
-
-(defun mail-header-merge (merge-rules headers)
-  "Return a new header alist with MERGE-RULES applied to HEADERS.
-MERGE-RULES is an alist whose keys are header names (symbols) and whose
-values are forms to evaluate, the results of which are the new headers.  It
-should be a string or a list of string.  The first element may be nil to
-denote that the formatting functions must use the remaining elements, or
-skip the header altogether if there are no other elements.
-  The macro `mail-header' can be used to access headers in HEADERS."
-  (mapcar
-   (lambda (rule)
-     (cons (car rule) (eval (cdr rule))))
-   merge-rules))
-
-(defvar mail-header-format-function
-  (lambda (header value)
-    "Function to format headers without a specified formatting function."
-    (insert (capitalize (symbol-name header))
-           ": "
-           (if (consp value) (car value) value)
-           "\n")))
-
-(defun mail-header-format (format-rules headers)
-  "Use FORMAT-RULES to format HEADERS and insert into current buffer.
-FORMAT-RULES is an alist whose keys are header names (symbols), and whose
-values are functions that format the header, the results of which are
-inserted, unless it is nil.  The function takes two arguments, the header
-symbol, and the value of that header.  If the function itself is nil, the
-default action is to insert the value of the header, unless it is nil.
-The headers are inserted in the order of the FORMAT-RULES.
-A key of t represents any otherwise unmentioned headers.
-A key of nil has as its value a list of defaulted headers to ignore."
-  (let ((ignore (append (cdr (assq nil format-rules))
-                       (mapcar #'car format-rules))))
-    (dolist (rule format-rules)
-      (let* ((header (car rule))
-            (value (mail-header header)))
-       (cond ((null header) 'ignore)
-             ((eq header t)
-              (dolist (defaulted headers)
-                (unless (memq (car defaulted) ignore)
-                  (let* ((header (car defaulted))
-                         (value (cdr defaulted)))
-                    (if (cdr rule)
-                        (funcall (cdr rule) header value)
-                      (funcall mail-header-format-function header value))))))
-             (value
-              (if (cdr rule)
-                  (funcall (cdr rule) header value)
-                (funcall mail-header-format-function header value))))))
-    (insert "\n")))
-
-(provide 'mailheader)
-
-;;; mail-header.el ends here
diff --git a/lisp/md5.el b/lisp/md5.el
deleted file mode 100644 (file)
index 94d65de..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-;;; md5.el -- MD5 Message Digest Algorithm
-;;; Gareth Rees <gdr11@cl.cam.ac.uk>
-
-;; LCD Archive Entry:
-;; md5|Gareth Rees|gdr11@cl.cam.ac.uk|
-;; MD5 cryptographic message digest algorithm|
-;; 13-Nov-95|1.0|~/misc/md5.el.Z|
-
-;;; Details: ------------------------------------------------------------------
-
-;; This is a direct translation into Emacs LISP of the reference C
-;; implementation of the MD5 Message-Digest Algorithm written by RSA
-;; Data Security, Inc.
-;;
-;; The algorithm takes a message (that is, a string of bytes) and
-;; computes a 16-byte checksum or "digest" for the message.  This digest
-;; is supposed to be cryptographically strong in the sense that if you
-;; are given a 16-byte digest D, then there is no easier way to
-;; construct a message whose digest is D than to exhaustively search the
-;; space of messages.  However, the robustness of the algorithm has not
-;; been proven, and a similar algorithm (MD4) was shown to be unsound,
-;; so treat with caution!
-;;
-;; The C algorithm uses 32-bit integers; because GNU Emacs
-;; implementations provide 28-bit integers (with 24-bit integers on
-;; versions prior to 19.29), the code represents a 32-bit integer as the
-;; cons of two 16-bit integers.  The most significant word is stored in
-;; the car and the least significant in the cdr.  The algorithm requires
-;; at least 17 bits of integer representation in order to represent the
-;; carry from a 16-bit addition.
-
-;;; Usage: --------------------------------------------------------------------
-
-;; To compute the MD5 Message Digest for a message M (represented as a
-;; string or as a vector of bytes), call
-;;
-;;   (md5-encode M)
-;;
-;; which returns the message digest as a vector of 16 bytes.  If you
-;; need to supply the message in pieces M1, M2, ... Mn, then call
-;;
-;;   (md5-init)
-;;   (md5-update M1)
-;;   (md5-update M2)
-;;   ...
-;;   (md5-update Mn)
-;;   (md5-final)
-
-;;; Copyright and licence: ----------------------------------------------------
-
-;; Copyright (C) 1995 by Gareth Rees
-;; Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm
-;;
-;; md5.el is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by the
-;; Free Software Foundation; either version 2, or (at your option) any
-;; later version.
-;;
-;; md5.el is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-;; for more details.
-;;
-;; The original copyright notice is given below, as required by the
-;; licence for the original code.  This code is distributed under *both*
-;; RSA's original licence and the GNU General Public Licence.  (There
-;; should be no problems, as the former is more liberal than the
-;; latter).
-
-;;; Original copyright notice: ------------------------------------------------
-
-;; Copyright (C) 1990, RSA Data Security, Inc. All rights reserved.
-;;
-;; License to copy and use this software is granted provided that it is
-;; identified as the "RSA Data Security, Inc. MD5 Message- Digest
-;; Algorithm" in all material mentioning or referencing this software or
-;; this function.
-;;
-;; License is also granted to make and use derivative works provided
-;; that such works are identified as "derived from the RSA Data
-;; Security, Inc. MD5 Message-Digest Algorithm" in all material
-;; mentioning or referencing the derived work.
-;;
-;; RSA Data Security, Inc. makes no representations concerning either
-;; the merchantability of this software or the suitability of this
-;; software for any particular purpose.  It is provided "as is" without
-;; express or implied warranty of any kind.
-;;
-;; These notices must be retained in any copies of any part of this
-;; documentation and/or software.
-
-;;; Code: ---------------------------------------------------------------------
-
-(defvar md5-program "md5sum"
-  "*Program that reads a message on its standard input and writes an
-MD5 digest on its output.")
-
-(defvar md5-maximum-internal-length 4096
-  "*The maximum size of a piece of data that should use the MD5 routines
-written in lisp.  If a message exceeds this, it will be run through an
-external filter for processing.  Also see the `md5-program' variable.
-This variable has no effect if you call the md5-init|update|final
-functions - only used by the `md5' function's simpler interface.")
-
-(defvar md5-bits (make-vector 4 0)
-  "Number of bits handled, modulo 2^64.
-Represented as four 16-bit numbers, least significant first.")
-(defvar md5-buffer (make-vector 4 '(0 . 0))
-  "Scratch buffer (four 32-bit integers).")
-(defvar md5-input (make-vector 64 0)
-  "Input buffer (64 bytes).")
-
-(defun md5-unhex (x)
-  (if (> x ?9)
-      (if (>= x ?a)
-         (+ 10 (- x ?a))
-       (+ 10 (- x ?A)))
-    (- x ?0)))
-
-(defun md5-encode (message)
-  "Encodes MESSAGE using the MD5 message digest algorithm.
-MESSAGE must be a string or an array of bytes.
-Returns a vector of 16 bytes containing the message digest."
-  (if (<= (length message) md5-maximum-internal-length)
-      (progn
-       (md5-init)
-       (md5-update message)
-       (md5-final))
-    (save-excursion
-      (set-buffer (get-buffer-create " *md5-work*"))
-      (erase-buffer)
-      (insert message)
-      (call-process-region (point-min) (point-max)
-                          (or shell-file-name "/bin/sh")
-                          t (current-buffer) nil
-                          "-c" md5-program)
-      ;; MD5 digest is 32 chars long
-      ;; mddriver adds a newline to make neaten output for tty
-      ;; viewing, make sure we leave it behind.
-      (let ((data (buffer-substring (point-min) (+ (point-min) 32)))
-           (vec (make-vector 16 0))
-           (ctr 0))
-       (while (< ctr 16)
-         (aset vec ctr (+ (* 16 (md5-unhex (aref data (* ctr 2))))
-                          (md5-unhex (aref data (1+ (* ctr 2))))))
-         (setq ctr (1+ ctr)))))))
-
-(defsubst md5-add (x y)
-  "Return 32-bit sum of 32-bit integers X and Y."
-  (let ((m (+ (car x) (car y)))
-        (l (+ (cdr x) (cdr y))))
-    (cons (logand 65535 (+ m (lsh l -16))) (logand l 65535))))
-
-;; FF, GG, HH and II are basic MD5 functions, providing transformations
-;; for rounds 1, 2, 3 and 4 respectively.  Each function follows this
-;; pattern of computation (where ROTATE(x,y) means rotate 32-bit value x
-;; by y bits to the left):
-;;
-;;   FF(a,b,c,d,x,s,ac) = ROTATE(a + F(b,c,d) + x + ac,s) + b
-;;
-;; so we use the macro `md5-make-step' to construct each one.  The
-;; helper functions F, G, H and I operate on 16-bit numbers; the full
-;; operation splits its inputs, operates on the halves separately and
-;; then puts the results together.
-
-(defsubst md5-F (x y z) (logior (logand x y) (logand (lognot x) z)))
-(defsubst md5-G (x y z) (logior (logand x z) (logand y (lognot z))))
-(defsubst md5-H (x y z) (logxor x y z))
-(defsubst md5-I (x y z) (logxor y (logior x (logand 65535 (lognot z)))))
-
-(defmacro md5-make-step (name func)
-  (`
-   (defun (, name) (a b c d x s ac)
-     (let*
-         ((m1 (+ (car a) ((, func) (car b) (car c) (car d)) (car x) (car ac)))
-          (l1 (+ (cdr a) ((, func) (cdr b) (cdr c) (cdr d)) (cdr x) (cdr ac)))
-          (m2 (logand 65535 (+ m1 (lsh l1 -16))))
-          (l2 (logand 65535 l1))
-          (m3 (logand 65535 (if (> s 15)
-                                (+ (lsh m2 (- s 32)) (lsh l2 (- s 16)))
-                              (+ (lsh m2 s) (lsh l2 (- s 16))))))
-          (l3 (logand 65535 (if (> s 15)
-                                (+ (lsh l2 (- s 32)) (lsh m2 (- s 16)))
-                              (+ (lsh l2 s) (lsh m2 (- s 16)))))))
-       (md5-add (cons m3 l3) b)))))
-
-(md5-make-step md5-FF md5-F)
-(md5-make-step md5-GG md5-G)
-(md5-make-step md5-HH md5-H)
-(md5-make-step md5-II md5-I)
-
-(defun md5-init ()
-  "Initialise the state of the message-digest routines."
-  (aset md5-bits 0 0)
-  (aset md5-bits 1 0)
-  (aset md5-bits 2 0)
-  (aset md5-bits 3 0)
-  (aset md5-buffer 0 '(26437 .  8961))
-  (aset md5-buffer 1 '(61389 . 43913))
-  (aset md5-buffer 2 '(39098 . 56574))
-  (aset md5-buffer 3 '( 4146 . 21622)))
-
-(defun md5-update (string)
-  "Update the current MD5 state with STRING (an array of bytes)."
-  (let ((len (length string))
-        (i 0)
-        (j 0))
-    (while (< i len)
-      ;; Compute number of bytes modulo 64
-      (setq j (% (/ (aref md5-bits 0) 8) 64))
-
-      ;; Store this byte (truncating to 8 bits to be sure)
-      (aset md5-input j (logand 255 (aref string i)))
-
-      ;; Update number of bits by 8 (modulo 2^64)
-      (let ((c 8) (k 0))
-        (while (and (> c 0) (< k 4))
-          (let ((b (aref md5-bits k)))
-            (aset md5-bits k (logand 65535 (+ b c)))
-            (setq c (if (> b (- 65535 c)) 1 0)
-                  k (1+ k)))))
-
-      ;; Increment number of bytes processed
-      (setq i (1+ i))
-
-      ;; When 64 bytes accumulated, pack them into sixteen 32-bit
-      ;; integers in the array `in' and then tranform them.
-      (if (= j 63)
-          (let ((in (make-vector 16 (cons 0 0)))
-                (k 0)
-                (kk 0))
-            (while (< k 16)
-              (aset in k (md5-pack md5-input kk))
-              (setq k (+ k 1) kk (+ kk 4)))
-            (md5-transform in))))))
-
-(defun md5-pack (array i)
-  "Pack the four bytes at ARRAY reference I to I+3 into a 32-bit integer."
-  (cons (+ (lsh (aref array (+ i 3)) 8) (aref array (+ i 2)))
-        (+ (lsh (aref array (+ i 1)) 8) (aref array (+ i 0)))))
-
-(defun md5-byte (array n b)
-  "Unpack byte B (0 to 3) from Nth member of ARRAY of 32-bit integers."
-  (let ((e (aref array n)))
-    (cond ((eq b 0) (logand 255 (cdr e)))
-          ((eq b 1) (lsh (cdr e) -8))
-          ((eq b 2) (logand 255 (car e)))
-          ((eq b 3) (lsh (car e) -8)))))
-
-(defun md5-final ()
-  (let ((in (make-vector 16 (cons 0 0)))
-        (j 0)
-        (digest (make-vector 16 0))
-        (padding))
-
-    ;; Save the number of bits in the message
-    (aset in 14 (cons (aref md5-bits 1) (aref md5-bits 0)))
-    (aset in 15 (cons (aref md5-bits 3) (aref md5-bits 2)))
-
-    ;; Compute number of bytes modulo 64
-    (setq j (% (/ (aref md5-bits 0) 8) 64))
-
-    ;; Pad out computation to 56 bytes modulo 64
-    (setq padding (make-vector (if (< j 56) (- 56 j) (- 120 j)) 0))
-    (aset padding 0 128)
-    (md5-update padding)
-
-    ;; Append length in bits and transform
-    (let ((k 0) (kk 0))
-      (while (< k 14)
-        (aset in k (md5-pack md5-input kk))
-        (setq k (+ k 1) kk (+ kk 4))))
-    (md5-transform in)
-
-    ;; Store the results in the digest
-    (let ((k 0) (kk 0))
-      (while (< k 4)
-        (aset digest (+ kk 0) (md5-byte md5-buffer k 0))
-        (aset digest (+ kk 1) (md5-byte md5-buffer k 1))
-        (aset digest (+ kk 2) (md5-byte md5-buffer k 2))
-        (aset digest (+ kk 3) (md5-byte md5-buffer k 3))
-        (setq k (+ k 1) kk (+ kk 4))))
-
-    ;; Return digest
-    digest))
-
-;; It says in the RSA source, "Note that if the Mysterious Constants are
-;; arranged backwards in little-endian order and decrypted with the DES
-;; they produce OCCULT MESSAGES!"  Security through obscurity?
-
-(defun md5-transform (in)
-  "Basic MD5 step. Transform md5-buffer based on array IN."
-  (let ((a (aref md5-buffer 0))
-        (b (aref md5-buffer 1))
-        (c (aref md5-buffer 2))
-        (d (aref md5-buffer 3)))
-    (setq
-     a (md5-FF a b c d (aref in  0)  7 '(55146 . 42104))
-     d (md5-FF d a b c (aref in  1) 12 '(59591 . 46934))
-     c (md5-FF c d a b (aref in  2) 17 '( 9248 . 28891))
-     b (md5-FF b c d a (aref in  3) 22 '(49597 . 52974))
-     a (md5-FF a b c d (aref in  4)  7 '(62844 .  4015))
-     d (md5-FF d a b c (aref in  5) 12 '(18311 . 50730))
-     c (md5-FF c d a b (aref in  6) 17 '(43056 . 17939))
-     b (md5-FF b c d a (aref in  7) 22 '(64838 . 38145))
-     a (md5-FF a b c d (aref in  8)  7 '(27008 . 39128))
-     d (md5-FF d a b c (aref in  9) 12 '(35652 . 63407))
-     c (md5-FF c d a b (aref in 10) 17 '(65535 . 23473))
-     b (md5-FF b c d a (aref in 11) 22 '(35164 . 55230))
-     a (md5-FF a b c d (aref in 12)  7 '(27536 .  4386))
-     d (md5-FF d a b c (aref in 13) 12 '(64920 . 29075))
-     c (md5-FF c d a b (aref in 14) 17 '(42617 . 17294))
-     b (md5-FF b c d a (aref in 15) 22 '(18868 .  2081))
-     a (md5-GG a b c d (aref in  1)  5 '(63006 .  9570))
-     d (md5-GG d a b c (aref in  6)  9 '(49216 . 45888))
-     c (md5-GG c d a b (aref in 11) 14 '( 9822 . 23121))
-     b (md5-GG b c d a (aref in  0) 20 '(59830 . 51114))
-     a (md5-GG a b c d (aref in  5)  5 '(54831 .  4189))
-     d (md5-GG d a b c (aref in 10)  9 '(  580 .  5203))
-     c (md5-GG c d a b (aref in 15) 14 '(55457 . 59009))
-     b (md5-GG b c d a (aref in  4) 20 '(59347 . 64456))
-     a (md5-GG a b c d (aref in  9)  5 '( 8673 . 52710))
-     d (md5-GG d a b c (aref in 14)  9 '(49975 .  2006))
-     c (md5-GG c d a b (aref in  3) 14 '(62677 .  3463))
-     b (md5-GG b c d a (aref in  8) 20 '(17754 .  5357))
-     a (md5-GG a b c d (aref in 13)  5 '(43491 . 59653))
-     d (md5-GG d a b c (aref in  2)  9 '(64751 . 41976))
-     c (md5-GG c d a b (aref in  7) 14 '(26479 .   729))
-     b (md5-GG b c d a (aref in 12) 20 '(36138 . 19594))
-     a (md5-HH a b c d (aref in  5)  4 '(65530 . 14658))
-     d (md5-HH d a b c (aref in  8) 11 '(34673 . 63105))
-     c (md5-HH c d a b (aref in 11) 16 '(28061 . 24866))
-     b (md5-HH b c d a (aref in 14) 23 '(64997 . 14348))
-     a (md5-HH a b c d (aref in  1)  4 '(42174 . 59972))
-     d (md5-HH d a b c (aref in  4) 11 '(19422 . 53161))
-     c (md5-HH c d a b (aref in  7) 16 '(63163 . 19296))
-     b (md5-HH b c d a (aref in 10) 23 '(48831 . 48240))
-     a (md5-HH a b c d (aref in 13)  4 '(10395 . 32454))
-     d (md5-HH d a b c (aref in  0) 11 '(60065 . 10234))
-     c (md5-HH c d a b (aref in  3) 16 '(54511 . 12421))
-     b (md5-HH b c d a (aref in  6) 23 '( 1160 .  7429))
-     a (md5-HH a b c d (aref in  9)  4 '(55764 . 53305))
-     d (md5-HH d a b c (aref in 12) 11 '(59099 . 39397))
-     c (md5-HH c d a b (aref in 15) 16 '( 8098 . 31992))
-     b (md5-HH b c d a (aref in  2) 23 '(50348 . 22117))
-     a (md5-II a b c d (aref in  0)  6 '(62505 .  8772))
-     d (md5-II d a b c (aref in  7) 10 '(17194 . 65431))
-     c (md5-II c d a b (aref in 14) 15 '(43924 .  9127))
-     b (md5-II b c d a (aref in  5) 21 '(64659 . 41017))
-     a (md5-II a b c d (aref in 12)  6 '(25947 . 22979))
-     d (md5-II d a b c (aref in  3) 10 '(36620 . 52370))
-     c (md5-II c d a b (aref in 10) 15 '(65519 . 62589))
-     b (md5-II b c d a (aref in  1) 21 '(34180 . 24017))
-     a (md5-II a b c d (aref in  8)  6 '(28584 . 32335))
-     d (md5-II d a b c (aref in 15) 10 '(65068 . 59104))
-     c (md5-II c d a b (aref in  6) 15 '(41729 . 17172))
-     b (md5-II b c d a (aref in 13) 21 '(19976 .  4513))
-     a (md5-II a b c d (aref in  4)  6 '(63315 . 32386))
-     d (md5-II d a b c (aref in 11) 10 '(48442 . 62005))
-     c (md5-II c d a b (aref in  2) 15 '(10967 . 53947))
-     b (md5-II b c d a (aref in  9) 21 '(60294 . 54161)))
-
-    (aset md5-buffer 0 (md5-add (aref md5-buffer 0) a))
-    (aset md5-buffer 1 (md5-add (aref md5-buffer 1) b))
-    (aset md5-buffer 2 (md5-add (aref md5-buffer 2) c))
-    (aset md5-buffer 3 (md5-add (aref md5-buffer 3) d))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Here begins the merger with the XEmacs API and the md5.el from the URL
-;;; package.  Courtesy wmperry@spry.com
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun md5 (object &optional start end)
-  "Return the MD5 (a secure message digest algorithm) of an object.
-OBJECT is either a string or a buffer.
-Optional arguments START and END denote buffer positions for computing the
-hash of a portion of OBJECT."
-  (let ((buffer nil))
-    (unwind-protect
-       (save-excursion
-         (setq buffer (generate-new-buffer " *md5-work*"))
-         (set-buffer buffer)
-         (cond
-          ((bufferp object)
-           (insert-buffer-substring object start end))
-          ((stringp object)
-           (insert (if (or start end)
-                       (substring object start end)
-                     object)))
-          (t nil))
-         (prog1
-             (if (<= (point-max) md5-maximum-internal-length)
-                 (mapconcat
-                  (function (lambda (node) (format "%02x" node)))
-                  (md5-encode (buffer-string))
-                  "")
-               (call-process-region (point-min) (point-max)
-                                    (or shell-file-name "/bin/sh")
-                                    t buffer nil
-                                    "-c" md5-program)
-               ;; MD5 digest is 32 chars long
-               ;; mddriver adds a newline to make neaten output for tty
-               ;; viewing, make sure we leave it behind.
-               (buffer-substring (point-min) (+ (point-min) 32)))
-           (kill-buffer buffer)))
-      (and buffer (kill-buffer buffer) nil))))
-
-(provide 'md5)
-
-;;; md5.el ends here ----------------------------------------------------------
diff --git a/lisp/message-utils.el b/lisp/message-utils.el
deleted file mode 100644 (file)
index 8b8d455..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-;;; message-utils.el -- utils for message-mode
-
-;; Copyright (C) 2002 Free Software Foundation, Inc.
-
-;; Author: Holger Schauer <Holger.Schauer@gmx.de>
-;; Keywords: utils message
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2 of the License, or
-;; (at your option) any later version.
-;;
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; This file contains some small additions to message mode:
-;;    * inserting files in a message and explicit marking it
-;;      as something somebody else has created,
-;;    * change Subject: header and add (was: <old subject>)
-;;    * strip (was: <old subject>) from Subject: headers
-;;    * add a X-No-Archieve: Yes header and a note in the body
-;;    * a function for cross-post and followup-to messages
-;;    * replace To: header with contents of Cc: or Bcc: header.
-;;
-
-;; This file is adopt from the link below when the revision is 0.8.
-;;  http://www.coling.uni-freiburg.de/~schauer/resources/emacs/message-utils.el.gz
-
-;;; Installation: (TODO: merge into message.el)
-
-;; .. is easy as in most cases. Add
-;; (autoload 'message-mark-inserted-region "message-utils" nil t)
-;; (autoload 'message-mark-insert-file "message-utils" nil t)
-;; (autoload 'message-strip-subject-was "message-utils" nil t)
-;; (autoload 'message-change-subject "message-utils" nil t)
-;; (autoload 'message-xpost-fup2 "message-utils" nil t)
-;; (autoload 'message-add-archive-header "message-utils" nil t)
-;; (autoload 'message-reduce-to-to-cc "message-utils" nil t)
-;; as well as some keybindings like
-;; (define-key message-mode-map '[(control c) m] 'message-mark-inserted-region)
-;; (define-key message-mode-map '[(control c) f] 'message-mark-insert-file)
-;; (define-key message-mode-map '[(control c) x] 'message-xpost-fup2)
-;; (define-key message-mode-map '[(control c) s] 'message-change-subject)
-;; (define-key message-mode-map '[(control c) a] 'message-add-archive-header)
-;; (define-key message-mode-map '[(control c) t] 'message-reduce-to-to-cc)
-;; (add-hook 'message-header-setup-hook 'message-strip-subject-was)
-;; to your .gnus or to your .emacs.
-;; You might also want to add something along the following lines:
-;; (defun message-utils-setup ()
-;;  "Add menu-entries for message-utils."
-;;  (easy-menu-add-item nil '("Message")
-;;   ["Insert Region Marked" message-mark-inserted-region t] "Spellcheck")
-;;  (easy-menu-add-item nil '("Message")
-;;   ["Insert File Marked" message-mark-insert-file t] "Spellcheck")
-;;  (easy-menu-add-item nil '("Field")
-;;   ["Crosspost / Followup" message-xpost-fup2 t] "----")
-;;  (easy-menu-add-item nil '("Field")
-;;   ["New Subject" message-change-subject t] "----")
-;;  (easy-menu-add-item nil '("Field")
-;;   ["Reduce To: to Cc:" message-reduce-to-to-cc t] "----")
-;;  (easy-menu-add-item nil '("Field")
-;;   [ "X-No-Archive:" message-add-archive-header t ]))
-;; (add-hook 'message-mode-hook 'message-utils-setup)
-
-;;; Code:
-
-(require 'message)
-
-;;; **************
-;;; Inserting and marking ...
-
-; We try to hook the vars into the message customize group
-
-(defcustom message-begin-inserted-text-mark
-"--8<------------------------schnipp------------------------->8---\n"
-"How to mark the beginning of some inserted text."
- :type 'string
- :group 'message-various)
-
-(defcustom message-end-inserted-text-mark
-"--8<------------------------schnapp------------------------->8---\n"
-"How to mark the end of some inserted text."
- :type 'string
- :group 'message-various)
-
-;;;###autoload
-(defun message-mark-inserted-region (beg end)
-  "Mark some region in the current article with enclosing tags.
-See `message-begin-inserted-text-mark' and `message-end-inserted-text-mark'."
-  (interactive "r")
-  (save-excursion
-    ; add to the end of the region first, otherwise end would be invalid
-    (goto-char end)
-    (insert message-end-inserted-text-mark)
-    (goto-char beg)
-    (insert message-begin-inserted-text-mark)))
-
-;;;###autoload
-(defun message-mark-insert-file (file)
-  "Inserts FILE at point, marking it with enclosing tags.
-See `message-begin-inserted-text-mark' and `message-end-inserted-text-mark'."
-  (interactive "fFile to insert: ")
-    ;; reverse insertion to get correct result.
-  (let ((p (point)))
-    (insert message-end-inserted-text-mark)
-    (goto-char p)
-    (insert-file-contents file)
-    (goto-char p)
-    (insert message-begin-inserted-text-mark)))
-
-;;; **************
-;;; Subject mangling
-
-(defcustom message-subject-was-regexp
-  "[ \t]*\\((*[Ww][Aa][SsRr]:[ \t]*.*)\\)"
-  "*Regexp matching \"(was: <old subject>)\" in the subject line."
-  :group 'message-various
-  :type 'regexp)
-
-;;;###autoload
-(defun message-strip-subject-was ()
-  "Remove trailing \"(Was: <old subject>)\" from subject lines."
-  (message-narrow-to-head)
-  (let* ((subject (message-fetch-field "Subject"))
-        (pos))
-    (cond (subject
-          (setq pos (or (string-match message-subject-was-regexp subject) 0))
-          (cond ((> pos 0)
-                 (message-goto-subject)
-                 (message-delete-line)
-                 (insert (concat "Subject: "
-                                 (substring subject 0 pos) "\n")))))))
-    (widen))
-
-;;; Suggested by Jonas Steverud  @  www.dtek.chalmers.se/~d4jonas/
-;;;###autoload
-(defun message-change-subject (new-subject)
-  "Ask for new Subject: header, append (was: <Old Subject>)."
-  (interactive
-   (list
-    (read-from-minibuffer "New subject: ")))
-  (cond ((and (not (or (null new-subject) ; new subject not empty
-                      (zerop (string-width new-subject))
-                      (string-match "^[ \t]*$" new-subject))))
-        (save-excursion
-          (let ((old-subject (message-fetch-field "Subject")))
-            (cond ((not (string-match
-                         (concat "^[ \t]*"
-                                 (regexp-quote new-subject)
-                                 " \t]*$")
-                         old-subject))  ; yes, it really is a new subject
-                   ;; delete eventual Re: prefix
-                   (setq old-subject
-                         (message-strip-subject-re old-subject))
-                   (message-goto-subject)
-                   (message-delete-line)
-                   (insert (concat "Subject: "
-                                   new-subject
-                                   " (was: "
-                                   old-subject ")\n")))))))))
-
-
-;;; **************
-;;; X-Archive-Header: No
-
-(defcustom message-archive-header
-  "X-No-Archive: Yes\n"
-  "Header to insert when you don't want your article to be archived by deja.com."
-  :type 'string
-  :group 'message-various)
-
-(defcustom message-archive-note
-  "X-No-Archive: Yes - save http://deja.com/"
-  "Note to insert why you wouldn't want this posting archived."
-  :type 'string
-  :group 'message-various)
-
-(defun message-add-archive-header ()
-  "Insert \"X-No-Archive: Yes\" in the header and a note in the body.
-When called with a prefix argument, ask for a text to insert."
-  (interactive)
-  (if current-prefix-arg
-      (setq message-archive-note
-           (read-from-minibuffer "Reason for No-Archive: "
-                                 (cons message-archive-note 0))))
-  (save-excursion
-    (insert message-archive-note)
-    (newline)
-    (message-add-header message-archive-header)
-    (message-sort-headers)))
-
-;;; **************
-;;; Crossposts and Followups
-
-; inspired by JoH-followup-to by Jochem Huhman <joh  at gmx.de>
-; new suggestions by R. Weikusat <rw at another.de>
-
-(defvar message-xpost-old-target nil
-  "Old target for cross-posts or follow-ups.")
-(make-variable-buffer-local 'message-xpost-old-target)
-
-(defcustom message-xpost-default t
-  "When non-nil `mesage-xpost-fup2' will normally perform a crosspost.
-If nil, `message-xpost-fup2' will only do a followup. Note that you
-can explicitly override this setting by calling `message-xpost-fup2'
-with a prefix."
-  :type 'boolean
-  :group 'message-various)
-
-(defun message-xpost-fup2-header (target-group)
-  "Mangles FollowUp-To and Newsgroups header to point to TARGET-GROUP.
-With prefix-argument just set Follow-Up, don't cross-post."
-  (interactive
-   (list ; Completion based on Gnus
-    (completing-read "Follwup To: "
-                    (if (boundp 'gnus-newsrc-alist)
-                        gnus-newsrc-alist)
-                    nil nil '("poster" . 0)
-                    (if (boundp 'gnus-group-history)
-                        'gnus-group-history))))
-  (message-remove-header "Follow[Uu]p-[Tt]o" t)
-  (message-goto-newsgroups)
-  (beginning-of-line)
-  ;; if we already did a crosspost before, kill old target
-  (if (and message-xpost-old-target
-          (re-search-forward
-           (regexp-quote (concat "," message-xpost-old-target))
-           nil t))
-      (replace-match ""))
-  ;; unless (followup is to poster or user explicitly asked not
-  ;; to cross-post, or target-group is already in Newsgroups)
-  ;; add target-group to Newsgroups line.
-  (cond ((and (or (and message-xpost-default (not current-prefix-arg))  ; def: xpost, req:no
-                 (and (not message-xpost-default) current-prefix-arg)) ; def: no-xpost, req:yes
-             (not (string-match "poster" target-group))
-             (not (string-match (regexp-quote target-group)
-                                (message-fetch-field "Newsgroups"))))
-        (end-of-line)
-        (insert-string (concat "," target-group))))
-  (end-of-line) ; ensure Followup: comes after Newsgroups:
-  ;; unless new followup would be identical to Newsgroups line
-  ;; make a new Followup-To line
-  (if (not (string-match (concat "^[ \t]*"
-                                target-group
-                                "[ \t]*$")
-                        (message-fetch-field "Newsgroups")))
-      (insert (concat "\nFollowup-To: " target-group)))
-  (setq message-xpost-old-target target-group))
-
-
-(defcustom message-xpost-note
-  "Crosspost & Followup-To: "
-  "Note to insert before signature to notify of xpost and follow-up."
- :type 'string
- :group 'message-various)
-
-(defcustom message-fup2-note
-  "Followup-To: "
-  "Note to insert before signature to notify of follow-up only."
- :type 'string
- :group 'message-various)
-
-(defun message-xpost-insert-note (target-group xpost in-old old-groups)
-  "Insert a in message body note about a set Followup or Crosspost.
-If there have been previous notes, delete them. TARGET-GROUP specifies the
-group to Followup-To. When XPOST is t, insert note about
-crossposting. IN-OLD specifies whether TARGET-GROUP is a member of
-OLD-GROUPS. OLD-GROUPS lists the old-groups the posting would have
-been made to before the user asked for a Crosspost."
-  ;; start scanning body for previous uses
-  (message-goto-signature)
-  (let ((head (re-search-backward
-              (concat "^" mail-header-separator)
-              nil t))) ; just search in body
-    (message-goto-signature)
-    (while (re-search-backward
-           (concat "^" (regexp-quote message-xpost-note) ".*")
-           head t)
-      (message-delete-line))
-    (message-goto-signature)
-    (while (re-search-backward
-           (concat "^" (regexp-quote message-fup2-note) ".*")
-           head t)
-      (message-delete-line))
-  ;; insert new note
-  (message-goto-signature)
-  (previous-line 2)
-  (open-line 1)
-  (if (or in-old
-         (not xpost)
-         (string-match "^[ \t]*poster[ \t]*$" target-group))
-      (insert (concat message-fup2-note target-group "\n"))
-    (insert (concat message-xpost-note target-group "\n")))))
-
-(defcustom message-xpost-note-function
-  'message-xpost-insert-note
-  "Function to use to insert note about Crosspost or Followup-To.
-The function will be called with four arguments. The function should not
-only insert a note, but also ensure old notes are deleted. See the
-documentation for `message-xpost-insert-note'. "
-  :type 'function
-  :group 'message-various)
-
-;;;###autoload
-(defun message-xpost-fup2 (target-group)
-  "Crossposts message and sets Followup-To to TARGET-GROUP.
-With prefix-argument just set Follow-Up, don't cross-post."
-  (interactive
-   (list ; Completion based on Gnus
-    (completing-read "Follwup To: "
-                    (if (boundp 'gnus-newsrc-alist)
-                        gnus-newsrc-alist)
-                    nil nil '("poster" . 0)
-                    (if (boundp 'gnus-group-history)
-                        'gnus-group-history))))
-  (cond ((not (or (null target-group) ; new subject not empty
-                 (zerop (string-width target-group))
-                 (string-match "^[ \t]*$" target-group)))
-        (save-excursion
-          (let* ((old-groups (message-fetch-field "Newsgroups"))
-                 (in-old (string-match
-                          (regexp-quote target-group) old-groups)))
-            ;; check whether target exactly matches old Newsgroups
-            (cond ((or (not in-old)
-                       (not (string-match
-                             (concat "^[ \t]*"
-                                     (regexp-quote target-group)
-                                     "[ \t]*$")
-                             old-groups)))
-                   ;; yes, Newsgroups line must change
-                   (message-xpost-fup2-header target-group)
-                   ;; insert note whether we do xpost or fup2
-                   (funcall message-xpost-note-function
-                            target-group
-                            (if (or (and message-xpost-default (not current-prefix-arg))
-                                    (and (not message-xpost-default) current-prefix-arg))
-                                t)
-                            in-old old-groups))))))))
-
-
-;;; **************
-;;; Reduce To: to Cc: or Bcc: header
-
-(defun message-reduce-to-to-cc ()
- "Replace contents of To: header with contents of Cc: or Bcc: header."
- (interactive)
- (let ((cc-content (message-fetch-field "cc"))
-       (bcc nil))
-   (if (and (not cc-content)
-           (setq cc-content (message-fetch-field "bcc")))
-       (setq bcc t))
-   (cond (cc-content
-         (save-excursion
-           (message-goto-to)
-           (message-delete-line)
-           (insert (concat "To: " cc-content "\n"))
-           (message-remove-header (if bcc
-                                      "bcc"
-                                    "cc")))))))
-
-;;; provide ourself
-(provide 'message-utils)
-
-;;; message-utils.el ends here
diff --git a/lisp/mm.el b/lisp/mm.el
deleted file mode 100644 (file)
index 1b57cb1..0000000
+++ /dev/null
@@ -1,1283 +0,0 @@
-;;; mm.el,v --- Mailcap parsing routines, and MIME handling
-;; Author: wmperry
-;; Created: 1996/05/28 02:46:51
-;; Version: 1.96
-;; Keywords: mail, news, hypermedia
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Copyright (c) 1994, 1995, 1996 by William M. Perry <wmperry@cs.indiana.edu>
-;;; Copyright (c) 1996 - 1998 Free Software Foundation, Inc.
-;;;
-;;; This file is not part of GNU Emacs, but the same permissions apply.
-;;;
-;;; GNU Emacs is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 2, or (at your option)
-;;; any later version.
-;;;
-;;; GNU Emacs is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;;; Boston, MA 02111-1307, USA.
-;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Generalized mailcap parsing and access routines
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Data structures
-;;; ---------------
-;;; The mailcap structure is an assoc list of assoc lists.
-;;; 1st assoc list is keyed on the major content-type
-;;; 2nd assoc list is keyed on the minor content-type (which can be a regexp)
-;;;
-;;; Which looks like:
-;;; -----------------
-;;; (
-;;;  ("application"
-;;;   ("postscript" . <info>)
-;;;  )
-;;;  ("text"
-;;;   ("plain" . <info>)
-;;;  )
-;;; )
-;;;
-;;; Where <info> is another assoc list of the various information
-;;; related to the mailcap RFC.  This is keyed on the lowercase
-;;; attribute name (viewer, test, etc).  This looks like:
-;;; (("viewer" . viewerinfo)
-;;;  ("test"   . testinfo)
-;;;  ("xxxx"   . "string")
-;;; )
-;;;
-;;; Where viewerinfo specifies how the content-type is viewed.  Can be
-;;; a string, in which case it is run through a shell, with
-;;; appropriate parameters, or a symbol, in which case the symbol is
-;;; funcall'd, with the buffer as an argument.
-;;;
-;;; testinfo is a list of strings, or nil.  If nil, it means the
-;;; viewer specified is always valid.  If it is a list of strings,
-;;; these are used to determine whether a viewer passes the 'test' or
-;;; not.
-;;;
-;;; The main interface to this code is:
-;;;
-;;; To set everything up:
-;;;
-;;;  (mm-parse-mailcaps [path])
-;;;
-;;;  Where PATH is a unix-style path specification (: separated list
-;;;  of strings).  If PATH is nil, the environment variable MAILCAPS
-;;;  will be consulted.  If there is no environment variable, then a
-;;;  default list of paths is used.
-;;;
-;;; To retrieve the information:
-;;;  (mm-mime-info st [nd] [request])
-;;;
-;;;  Where st and nd are positions in a buffer that contain the
-;;;  content-type header information of a mail/news/whatever message.
-;;;  st can optionally be a string that contains the content-type
-;;;  information.
-;;;
-;;;  Third argument REQUEST specifies what information to return.  If
-;;;  it is nil or the empty string, the viewer (second field of the
-;;;  mailcap entry) will be returned.  If it is a string, then the
-;;;  mailcap field corresponding to that string will be returned
-;;;  (print, description, whatever).  If a number, then all the
-;;;  information for this specific viewer is returned.
-;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Variables, etc
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(eval-and-compile
-  (require 'cl)
-;LMI was here
-  ;;(require 'devices)
-  )
-
-(defconst mm-version (let ((x "1.96"))
-                      (if (string-match "Revision: \\([^ \t\n]+\\)" x)
-                          (substring x (match-beginning 1) (match-end 1))
-                        x))
-  "Version # of MM package")
-
-(defvar mm-parse-args-syntax-table
-  (copy-syntax-table emacs-lisp-mode-syntax-table)
-  "A syntax table for parsing sgml attributes.")
-
-(modify-syntax-entry ?' "\"" mm-parse-args-syntax-table)
-(modify-syntax-entry ?` "\"" mm-parse-args-syntax-table)
-(modify-syntax-entry ?{ "(" mm-parse-args-syntax-table)
-(modify-syntax-entry ?} ")" mm-parse-args-syntax-table)
-
-(defvar mm-mime-data
-  '(
-    ("multipart"   . (
-                     ("alternative". (("viewer" . mm-multipart-viewer)
-                                      ("type"   . "multipart/alternative")))
-                     ("mixed"      . (("viewer" . mm-multipart-viewer)
-                                      ("type"   . "multipart/mixed")))
-                     (".*"         . (("viewer" . mm-save-binary-file)
-                                      ("type"   . "multipart/*")))
-                     )
-     )
-    ("application" . (
-                     ("x-x509-ca-cert" . (("viewer" . ssl-view-site-cert)
-                                          ("test" . (fboundp 'ssl-view-site-cert))
-                                          ("type" . "application/x-x509-ca-cert")))
-                     ("x-x509-user-cert" . (("viewer" . ssl-view-user-cert)
-                                            ("test" . (fboundp 'ssl-view-user-cert))
-                                            ("type" . "application/x-x509-user-cert")))
-                     ("octet-stream" . (("viewer" . mm-save-binary-file)
-                                        ("type" ."application/octet-stream")))
-                     ("dvi"        . (("viewer" . "open %s")
-                                      ("type"   . "application/dvi")
-                                      ("test"   . (eq (device-type) 'ns))))
-                     ("dvi"        . (("viewer" . "xdvi %s")
-                                      ("test"   . (eq (device-type) 'x))
-                                      ("needsx11")
-                                      ("type"   . "application/dvi")))
-                     ("dvi"        . (("viewer" . "dvitty %s")
-                                      ("test"   . (not (getenv "DISPLAY")))
-                                      ("type"   . "application/dvi")))
-                     ("emacs-lisp" . (("viewer" . mm-maybe-eval)
-                                      ("type"   . "application/emacs-lisp")))
-;                    ("x-tar"      . (("viewer" . tar-mode)
-;                                     ("test"   . (fboundp 'tar-mode))
-;                                     ("type"   . "application/x-tar")))
-                     ("x-tar"      . (("viewer" . mm-save-binary-file)
-                                      ("type"   . "application/x-tar")))
-                     ("x-latex"    . (("viewer" . tex-mode)
-                                      ("test"   . (fboundp 'tex-mode))
-                                      ("type"   . "application/x-latex")))
-                     ("x-tex"      . (("viewer" . tex-mode)
-                                      ("test"   . (fboundp 'tex-mode))
-                                      ("type"   . "application/x-tex")))
-                     ("latex"      . (("viewer" . tex-mode)
-                                      ("test"   . (fboundp 'tex-mode))
-                                      ("type"   . "application/latex")))
-                     ("tex"        . (("viewer" . tex-mode)
-                                      ("test"   . (fboundp 'tex-mode))
-                                      ("type"   . "application/tex")))
-                     ("texinfo"    . (("viewer" . texinfo-mode)
-                                      ("test"   . (fboundp 'texinfo-mode))
-                                      ("type"   . "application/tex")))
-                     ("zip"        . (("viewer" . mm-save-binary-file)
-                                      ("type"   . "application/zip")
-                                      ("copiousoutput")))
-                     ("pdf"        . (("viewer" . "acroread %s")
-                                      ("type"   . "application/pdf")))
-                     ("postscript" . (("viewer" . "open %s")
-                                      ("type"   . "application/postscript")
-                                      ("test"   . (eq (device-type) 'ns))))
-                     ("postscript" . (("viewer" . "ghostview %s")
-                                      ("type" . "application/postscript")
-                                      ("test"   . (eq (device-type) 'x))
-                                      ("needsx11")))
-                     ("postscript" . (("viewer" . "ps2ascii %s")
-                                      ("type" . "application/postscript")
-                                      ("test" . (not (getenv "DISPLAY")))
-                                      ("copiousoutput")))
-                     ))
-    ("audio"       . (
-                     ("x-mpeg" . (("viewer" . "maplay %s")
-                                  ("type"   . "audio/x-mpeg")))
-                     (".*" . (("viewer" . mm-play-sound-file)
-                              ("test"   . (or (featurep 'nas-sound)
-                                              (featurep 'native-sound)))
-                              ("type"   . "audio/*")))
-                     (".*" . (("viewer" . "showaudio")
-                              ("type"   . "audio/*")))
-                     ))
-    ("message"     . (
-                     ("rfc-*822" . (("viewer" . vm-mode)
-                                    ("test"   . (fboundp 'vm-mode))
-                                    ("type"   . "message/rfc-822")))
-                     ("rfc-*822" . (("viewer" . w3-mode)
-                                    ("test"   . (fboundp 'w3-mode))
-                                    ("type"   . "message/rfc-822")))
-                     ("rfc-*822" . (("viewer" . view-mode)
-                                    ("test"   . (fboundp 'view-mode))
-                                    ("type"   . "message/rfc-822")))
-                     ("rfc-*822" . (("viewer" . fundamental-mode)
-                                    ("type"   . "message/rfc-822")))
-                     ))
-    ("image"       . (
-                     ("x-xwd" . (("viewer"  . "xwud -in %s")
-                                 ("type"    . "image/x-xwd")
-                                 ("compose" . "xwd -frame > %s")
-                                 ("test"    . (eq (device-type) 'x))
-                                 ("needsx11")))
-                     ("x11-dump" . (("viewer" . "xwud -in %s")
-                                    ("type" . "image/x-xwd")
-                                    ("compose" . "xwd -frame > %s")
-                                    ("test"   . (eq (device-type) 'x))
-                                    ("needsx11")))
-                     ("windowdump" . (("viewer" . "xwud -in %s")
-                                      ("type" . "image/x-xwd")
-                                      ("compose" . "xwd -frame > %s")
-                                      ("test"   . (eq (device-type) 'x))
-                                      ("needsx11")))
-                     (".*" . (("viewer" . "open %s")
-                              ("type"   . "image/*")
-                              ("test"   . (eq (device-type) 'ns))))
-                     (".*" . (("viewer" . "xv -perfect %s")
-                              ("type" . "image/*")
-                              ("test"   . (eq (device-type) 'x))
-                              ("needsx11")))
-                     ))
-    ("text"        . (
-                     ("plain" . (("viewer"  . w3-mode)
-                                 ("test"    . (fboundp 'w3-mode))
-                                 ("type"    . "text/plain")))
-                     ("plain" . (("viewer"  . view-mode)
-                                 ("test"    . (fboundp 'view-mode))
-                                 ("type"    . "text/plain")))
-                     ("plain" . (("viewer"  . fundamental-mode)
-                                 ("type"    . "text/plain")))
-                     ("enriched" . (("viewer" . enriched-decode-region)
-                                    ("test"   . (fboundp
-                                                 'enriched-decode-region))
-                                    ("type"   . "text/enriched")))
-                     ("html"  . (("viewer" . w3-prepare-buffer)
-                                 ("test"   . (fboundp 'w3-prepare-buffer))
-                                 ("type"   . "text/html")))
-                     ))
-    ("video"       . (
-                     ("mpeg" . (("viewer" . "mpeg_play %s")
-                                ("type"   . "video/mpeg")
-                                ("test"   . (eq (device-type) 'x))
-                                ("needsx11")))
-                     ))
-    ("x-world"     . (
-                     ("x-vrml" . (("viewer"  . "webspace -remote %s -URL %u")
-                                  ("type"    . "x-world/x-vrml")
-                                  ("description"
-                                   "VRML document")))))
-    ("archive"     . (
-                     ("tar"  . (("viewer" . tar-mode)
-                                ("type" . "archive/tar")
-                                ("test" . (fboundp 'tar-mode))))
-                     ))
-    )
-  "*The mailcap structure is an assoc list of assoc lists.
-1st assoc list is keyed on the major content-type
-2nd assoc list is keyed on the minor content-type (which can be a regexp)
-
-Which looks like:
------------------
-(
- (\"application\"
-  (\"postscript\" . <info>)
- )
- (\"text\"
-  (\"plain\" . <info>)
- )
-)
-
-Where <info> is another assoc list of the various information
-related to the mailcap RFC.  This is keyed on the lowercase
-attribute name (viewer, test, etc).  This looks like:
-((\"viewer\" . viewerinfo)
- (\"test\"   . testinfo)
- (\"xxxx\"   . \"string\")
-)
-
-Where viewerinfo specifies how the content-type is viewed.  Can be
-a string, in which case it is run through a shell, with
-appropriate parameters, or a symbol, in which case the symbol is
-funcall'd, with the buffer as an argument.
-
-testinfo is a list of strings, or nil.  If nil, it means the
-viewer specified is always valid.  If it is a list of strings,
-these are used to determine whether a viewer passes the 'test' or
-not.")
-
-(defvar mm-content-transfer-encodings
-  '(("base64"     . base64-decode-region)
-    ("7bit"       . ignore)
-    ("8bit"       . ignore)
-    ("binary"     . ignore)
-    ("x-compress" . ("uncompress" "-c"))
-    ("x-gzip"     . ("gzip" "-dc"))
-    ("compress"   . ("uncompress" "-c"))
-    ("gzip"       . ("gzip" "-dc"))
-    ("x-hqx"      . ("mcvert" "-P" "-s" "-S"))
-    ("quoted-printable" . mm-decode-quoted-printable)
-    )
-  "*An assoc list of content-transfer-encodings and how to decode them.")
-
-(defvar mm-download-directory nil
-  "*Where downloaded files should go by default.")
-
-(defvar mm-temporary-directory (or (getenv "TMPDIR") "/tmp")
-  "*Where temporary files go.")
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; A few things from w3 and url, just in case this is used without them
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun mm-generate-unique-filename (&optional fmt)
-  "Generate a unique filename in mm-temporary-directory"
-  (if (not fmt)
-      (let ((base (format "mm-tmp.%d" (user-real-uid)))
-           (fname "")
-           (x 0))
-       (setq fname (format "%s%d" base x))
-       (while (file-exists-p
-               (expand-file-name fname mm-temporary-directory))
-         (setq x (1+ x)
-               fname (concat base (int-to-string x))))
-       (expand-file-name fname mm-temporary-directory))
-    (let ((base (concat "mm" (int-to-string (user-real-uid))))
-         (fname "")
-         (x 0))
-      (setq fname (format fmt (concat base (int-to-string x))))
-      (while (file-exists-p
-             (expand-file-name fname mm-temporary-directory))
-       (setq x (1+ x)
-             fname (format fmt (concat base (int-to-string x)))))
-      (expand-file-name fname mm-temporary-directory))))
-
-(if (and (fboundp 'copy-tree)
-        (subrp (symbol-function 'copy-tree)))
-    (fset 'mm-copy-tree 'copy-tree)
-  (defun mm-copy-tree (tree)
-    (if (consp tree)
-       (cons (mm-copy-tree (car tree))
-             (mm-copy-tree (cdr tree)))
-      (if (vectorp tree)
-         (let* ((new (copy-sequence tree))
-                (i (1- (length new))))
-           (while (>= i 0)
-             (aset new i (mm-copy-tree (aref new i)))
-             (setq i (1- i)))
-           new)
-       tree))))
-
-;LMI was here
-;(require 'mule-sysdp)
-
-(if (not (fboundp 'w3-save-binary-file))
-    (defun mm-save-binary-file ()
-      ;; Ok, this is truly fucked.  In XEmacs, if you use the mouse to select
-      ;; a URL that gets saved via this function, read-file-name will pop up a
-      ;; dialog box for file selection.  For some reason which buffer we are in
-      ;; gets royally screwed (even with save-excursions and the whole nine
-      ;; yards).  SO, we just keep the old buffer name around and away we go.
-      (let ((old-buff (current-buffer))
-           (file (read-file-name "Filename to save as: "
-                                 (or mm-download-directory "~/")
-                                 (file-name-nondirectory (url-view-url t))
-                                 nil
-                                 (file-name-nondirectory (url-view-url t))))
-           (require-final-newline nil))
-       (set-buffer old-buff)
-       (mule-write-region-no-coding-system (point-min) (point-max) file)
-       (kill-buffer (current-buffer))))
-  (fset 'mm-save-binary-file 'w3-save-binary-file))
-
-(defun mm-maybe-eval ()
-  "Maybe evaluate a buffer of emacs lisp code"
-  (if (yes-or-no-p "This is emacs-lisp code, evaluate it? ")
-      (eval-buffer (current-buffer))
-    (emacs-lisp-mode)))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; The mailcap parser
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-viewer-unescape (format &optional filename url)
-  (save-excursion
-    (set-buffer (get-buffer-create " *mm-parse*"))
-    (erase-buffer)
-    (insert format)
-    (goto-char (point-min))
-    (while (re-search-forward "%\\(.\\)" nil t)
-       (let ((escape (aref (match-string 1) 0)))
-        (replace-match "" t t)
-        (case escape
-          (?% (insert "%"))
-          (?s (insert (or filename "\"\"")))
-          (?u (insert (or url "\"\""))))))
-    (buffer-string)))
-
-(defun mm-in-assoc (elt list)
-  ;; Check to see if ELT matches any of the regexps in the car elements of LIST
-  (let (rslt)
-    (while (and list (not rslt))
-      (and (car (car list))
-          (string-match (car (car list)) elt)
-          (setq rslt (car list)))
-      (setq list (cdr list)))
-    rslt))
-
-(defun mm-replace-regexp (regexp to-string)
-  ;; Quiet replace-regexp.
-  (goto-char (point-min))
-  (while (re-search-forward regexp nil t)
-    (replace-match to-string t nil)))
-
-(defun mm-parse-mailcaps (&optional path)
-  ;; Parse out all the mailcaps specified in a unix-style path string PATH
-  (cond
-   (path nil)
-   ((getenv "MAILCAPS") (setq path (getenv "MAILCAPS")))
-   ((memq system-type '(ms-dos ms-windows windows-nt))
-    (setq path (mapconcat 'expand-file-name '("~/mail.cap" "~/etc/mail.cap")
-                         ";")))
-   (t (setq path (mapconcat 'expand-file-name
-                           '("~/.mailcap"
-                             "/etc/mailcap:/usr/etc/mailcap"
-                             "/usr/local/etc/mailcap") ":"))))
-  (let ((fnames (reverse
-                (mm-string-to-tokens path
-                                     (if (memq system-type
-                                               '(ms-dos ms-windows windows-nt))
-                                         ?;
-                                       ?:))))
-       fname)
-    (while fnames
-      (setq fname (car fnames))
-      (if (and (file-exists-p fname) (file-readable-p fname))
-         (mm-parse-mailcap (car fnames)))
-      (setq fnames (cdr fnames)))))
-
-(defun mm-parse-mailcap (fname)
-  ;; Parse out the mailcap file specified by FNAME
-  (let (major                          ; The major mime type (image/audio/etc)
-       minor                           ; The minor mime type (gif, basic, etc)
-       save-pos                        ; Misc saved positions used in parsing
-       viewer                          ; How to view this mime type
-       info                            ; Misc info about this mime type
-       )
-    (save-excursion
-      (set-buffer (get-buffer-create " *mailcap*"))
-      (erase-buffer)
-      (insert-file-contents fname)
-      (set-syntax-table mm-parse-args-syntax-table)
-      (mm-replace-regexp "#.*" "")              ; Remove all comments
-      (mm-replace-regexp "\n+" "\n")         ; And blank lines
-      (mm-replace-regexp "\\\\[ \t\n]+" " ") ; And collapse spaces
-      (mm-replace-regexp (concat (regexp-quote "\\") "[ \t]*\n") "")
-      (goto-char (point-max))
-      (skip-chars-backward " \t\n")
-      (delete-region (point) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (skip-chars-forward " \t\n")
-       (setq save-pos (point)
-             info nil)
-       (skip-chars-forward "^/;")
-       (downcase-region save-pos (point))
-       (setq major (buffer-substring save-pos (point)))
-       (skip-chars-forward "/ \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;")
-       (downcase-region save-pos (point))
-       (setq minor
-             (cond
-              ((= ?* (or (char-after save-pos) 0)) ".*")
-              ((= (point) save-pos) ".*")
-              (t (buffer-substring save-pos (point)))))
-       (skip-chars-forward "; \t\n")
-       ;;; Got the major/minor chunks, now for the viewers/etc
-       ;;; The first item _must_ be a viewer, according to the
-       ;;; RFC for mailcap files (#1343)
-       (skip-chars-forward "; \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;\n")
-       (if (= (or (char-after save-pos) 0) ?')
-           (setq viewer (progn
-                          (narrow-to-region (1+ save-pos) (point))
-                          (goto-char (point-min))
-                          (prog1
-                              (read (current-buffer))
-                            (goto-char (point-max))
-                            (widen))))
-         (setq viewer (buffer-substring save-pos (point))))
-       (setq save-pos (point))
-       (end-of-line)
-       (setq info (nconc (list (cons "viewer" viewer)
-                               (cons "type" (concat major "/"
-                                                    (if (string= minor ".*")
-                                                        "*" minor))))
-                         (mm-parse-mailcap-extras save-pos (point))))
-       (mm-mailcap-entry-passes-test info)
-       (mm-add-mailcap-entry major minor info)))))
-
-(defun mm-parse-mailcap-extras (st nd)
-  ;; Grab all the extra stuff from a mailcap entry
-  (let (
-       name                            ; From name=
-       value                           ; its value
-       results                         ; Assoc list of results
-       name-pos                        ; Start of XXXX= position
-       val-pos                         ; Start of value position
-       done                            ; Found end of \'d ;s?
-       )
-    (save-restriction
-      (narrow-to-region st nd)
-      (goto-char (point-min))
-      (skip-chars-forward " \n\t;")
-      (while (not (eobp))
-       (setq done nil)
-       (skip-chars-forward " \";\n\t")
-       (setq name-pos (point))
-       (skip-chars-forward "^ \n\t=")
-       (downcase-region name-pos (point))
-       (setq name (buffer-substring name-pos (point)))
-       (skip-chars-forward " \t\n")
-       (if (/= (or (char-after (point)) 0)  ?=) ; There is no value
-           (setq value nil)
-         (skip-chars-forward " \t\n=")
-         (setq val-pos (point))
-         (if (memq (char-after val-pos) '(?\" ?'))
-             (progn
-               (setq val-pos (1+ val-pos))
-               (condition-case nil
-                   (progn
-                     (forward-sexp 1)
-                     (backward-char 1))
-                 (error (goto-char (point-max)))))
-           (while (not done)
-             (skip-chars-forward "^;")
-             (if (= (or (char-after (1- (point))) 0) ?\\ )
-                 (progn
-                   (subst-char-in-region (1- (point)) (point) ?\\ ? )
-                   (skip-chars-forward ";"))
-               (setq done t))))
-         (setq value (buffer-substring val-pos (point))))
-       (setq results (cons (cons name value) results)))
-      results)))  
-
-(defun mm-string-to-tokens (str &optional delim)
-  "Return a list of words from the string STR"
-  (setq delim (or delim ? ))
-  (let (results y)
-    (mapcar
-     (function
-      (lambda (x)
-       (cond
-        ((and (= x delim) y) (setq results (cons y results) y nil))
-        ((/= x delim) (setq y (concat y (char-to-string x))))
-        (t nil)))) str)
-    (nreverse (cons y results))))
-
-(defun mm-mailcap-entry-passes-test (info)
-  ;; Return t iff a mailcap entry passes its test clause or no test
-  ;; clause is present.
-  (let (status                         ; Call-process-regions return value
-       (test (assoc "test" info)); The test clause
-       )
-    (setq status (and test (mm-string-to-tokens (cdr test))))
-    (if (and (assoc "needsx11" info) (not (getenv "DISPLAY")))
-       (setq status nil)
-      (cond
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-n")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") t nil)))
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-z")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") nil t)))
-       (test nil)
-       (t nil)))
-    (and test (listp test) (setcdr test status))))
-
-(defun mm-parse-args (st &optional nd nodowncase)
-  ;; Return an assoc list of attribute/value pairs from an RFC822-type string
-  (let (
-       name                            ; From name=
-       value                           ; its value
-       results                         ; Assoc list of results
-       name-pos                        ; Start of XXXX= position
-       val-pos                         ; Start of value position
-       )
-    (save-excursion
-      (if (stringp st)
-         (progn
-           (set-buffer (get-buffer-create " *mm-temp*"))
-           (set-syntax-table mm-parse-args-syntax-table)
-           (erase-buffer)
-           (insert st)
-           (setq st (point-min)
-                 nd (point-max)))
-       (set-syntax-table mm-parse-args-syntax-table))
-      (save-restriction
-       (narrow-to-region st nd)
-       (goto-char (point-min))
-       (while (not (eobp))
-         (skip-chars-forward "; \n\t")
-         (setq name-pos (point))
-         (skip-chars-forward "^ \n\t=;")
-         (if (not nodowncase)
-             (downcase-region name-pos (point)))
-         (setq name (buffer-substring name-pos (point)))
-         (skip-chars-forward " \t\n")
-         (if (/= (or (char-after (point)) 0)  ?=) ; There is no value
-             (setq value nil)
-           (skip-chars-forward " \t\n=")
-           (setq val-pos (point)
-                 value
-                 (cond
-                  ((or (= (or (char-after val-pos) 0) ?\")
-                       (= (or (char-after val-pos) 0) ?'))
-                   (buffer-substring (1+ val-pos)
-                                     (condition-case ()
-                                         (prog2
-                                             (forward-sexp 1)
-                                             (1- (point))
-                                           (skip-chars-forward "\""))
-                                       (error
-                                        (skip-chars-forward "^ \t\n")
-                                        (point)))))
-                  (t
-                   (buffer-substring val-pos
-                                     (progn
-                                       (skip-chars-forward "^;")
-                                       (skip-chars-backward " \t")
-                                       (point)))))))
-         (setq results (cons (cons name value) results))
-         (skip-chars-forward "; \n\t"))
-       results))))
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; The action routines.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-possible-viewers (major minor)
-  ;; Return a list of possible viewers from MAJOR for minor type MINOR
-  (let ((exact '())
-       (wildcard '()))
-    (while major
-      (cond
-       ((equal (car (car major)) minor)
-       (setq exact (cons (cdr (car major)) exact)))
-       ((string-match (car (car major)) minor)
-       (setq wildcard (cons (cdr (car major)) wildcard))))
-      (setq major (cdr major)))
-    (nconc (nreverse exact) (nreverse wildcard))))
-
-(defun mm-unescape-mime-test (test type-info)
-  (let ((buff (get-buffer-create " *unescape*"))
-       save-pos save-chr subst)
-    (cond
-     ((symbolp test) test)
-     ((and (listp test) (symbolp (car test))) test)
-     ((or (stringp test)
-         (and (listp test) (stringp (car test))
-              (setq test (mapconcat 'identity test " "))))
-      (save-excursion
-       (set-buffer buff)
-       (erase-buffer)
-       (insert test)
-       (goto-char (point-min))
-       (while (not (eobp))
-         (skip-chars-forward "^%")
-         (if (/= (- (point)
-                    (progn (skip-chars-backward "\\\\")
-                           (point)))
-                 0) ; It is an escaped %
-             (progn
-               (delete-char 1)
-               (skip-chars-forward "%."))
-           (setq save-pos (point))
-           (skip-chars-forward "%")
-           (setq save-chr (char-after (point)))
-           (cond
-            ((null save-chr) nil)
-            ((= save-chr ?t)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert (or (cdr (assoc "type" type-info)) "\"\"")))
-            ((= save-chr ?M)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?n)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?F)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?{)
-             (forward-char 1)
-             (skip-chars-forward "^}")
-             (downcase-region (+ 2 save-pos) (point))
-             (setq subst (buffer-substring (+ 2 save-pos) (point)))
-             (delete-region save-pos (1+ (point)))
-             (insert (or (cdr (assoc subst type-info)) "\"\"")))
-            (t nil))))
-       (buffer-string)))
-     (t (error "Bad value to mm-unescape-mime-test. %s" test)))))
-
-(defun mm-viewer-passes-test (viewer-info type-info)
-  ;; Return non-nil iff the viewer specified by VIEWER-INFO passes its
-  ;; test clause (if any).
-  (let* ((test-info   (assoc "test"   viewer-info))
-        (test (cdr test-info))
-        (viewer (cdr (assoc "viewer" viewer-info)))
-        (default-directory (expand-file-name "~/"))
-        status
-        parsed-test
-       )
-    (cond
-     ((not test-info) t)               ; No test clause
-     ((not test) nil)                  ; Already failed test
-     ((eq test t) t)                   ; Already passed test
-     ((and (symbolp test)              ; Lisp function as test
-          (fboundp test))
-      (funcall test type-info))
-     ((and (symbolp test)              ; Lisp variable as test
-          (boundp test))
-      (symbol-value test))
-     ((and (listp test)                        ; List to be eval'd
-          (symbolp (car test)))
-      (eval test))
-     (t
-      (setq test (mm-unescape-mime-test test type-info)
-           test (list shell-file-name nil nil nil shell-command-switch test)
-           status (apply 'call-process test))
-      (= 0 status)))))
-
-(defun mm-add-mailcap-entry (major minor info)
-  (let ((old-major (assoc major mm-mime-data)))
-    (if (null old-major)               ; New major area
-       (setq mm-mime-data
-             (cons (cons major (list (cons minor info)))
-                   mm-mime-data))
-      (let ((cur-minor (assoc minor old-major)))
-       (cond
-        ((or (null cur-minor)          ; New minor area, or
-             (assoc "test" info))      ; Has a test, insert at beginning
-         (setcdr old-major (cons (cons minor info) (cdr old-major))))
-        ((and (not (assoc "test" info)); No test info, replace completely
-              (not (assoc "test" cur-minor)))
-         (setcdr cur-minor info))
-        (t
-         (setcdr old-major (cons (cons minor info) (cdr old-major)))))))))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; The main whabbo
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-viewer-lessp (x y)
-  ;; Return t iff viewer X is more desirable than viewer Y
-  (let ((x-wild (string-match "[*?]" (or (cdr-safe (assoc "type" x)) "")))
-       (y-wild (string-match "[*?]" (or (cdr-safe (assoc "type" y)) "")))
-       (x-lisp (not (stringp (or (cdr-safe (assoc "viewer" x)) ""))))
-       (y-lisp (not (stringp (or (cdr-safe (assoc "viewer" y)) "")))))
-    (cond
-     ((and x-lisp (not y-lisp))
-      t)
-     ((and (not y-lisp) x-wild (not y-wild))
-      t)
-     ((and (not x-wild) y-wild)
-      t)
-     (t nil))))
-
-(defun mm-mime-info (st &optional nd request)
-  "Get the mime viewer command for HEADERLINE, return nil if none found.
-Expects a complete content-type header line as its argument.  This can
-be simple like text/html, or complex like text/plain; charset=blah; foo=bar
-
-Third argument REQUEST specifies what information to return.  If it is
-nil or the empty string, the viewer (second field of the mailcap
-entry) will be returned.  If it is a string, then the mailcap field
-corresponding to that string will be returned (print, description,
-whatever).  If a number, then all the information for this specific
-viewer is returned."
-  (let (
-       major                           ; Major encoding (text, etc)
-       minor                           ; Minor encoding (html, etc)
-       info                            ; Other info
-       save-pos                        ; Misc. position during parse
-       major-info                      ; (assoc major mm-mime-data)
-       minor-info                      ; (assoc minor major-info)
-       test                            ; current test proc.
-       viewers                         ; Possible viewers
-       passed                          ; Viewers that passed the test
-       viewer                          ; The one and only viewer
-       )
-    (save-excursion
-      (cond
-       ((null st)
-       (set-buffer (get-buffer-create " *mimeparse*"))
-       (erase-buffer)
-       (insert "text/plain")
-       (setq st (point-min)))
-       ((stringp st)
-       (set-buffer (get-buffer-create " *mimeparse*"))
-       (erase-buffer)
-       (insert st)
-       (setq st (point-min)))
-       ((null nd)
-       (narrow-to-region st (progn (goto-char st) (end-of-line) (point))))
-       (t (narrow-to-region st nd)))
-      (goto-char st)
-      (skip-chars-forward ": \t\n")
-      (buffer-enable-undo)
-      (setq viewer
-           (catch 'mm-exit
-             (setq save-pos (point))
-             (skip-chars-forward "^/")
-             (downcase-region save-pos (point))
-             (setq major (buffer-substring save-pos (point)))
-             (if (not (setq major-info (cdr (assoc major mm-mime-data))))
-                 (throw 'mm-exit nil))
-             (skip-chars-forward "/ \t\n")
-             (setq save-pos (point))
-             (skip-chars-forward "^ \t\n;")
-             (downcase-region save-pos (point))
-             (setq minor (buffer-substring save-pos (point)))
-             (if (not
-                  (setq viewers (mm-possible-viewers major-info minor)))
-                 (throw 'mm-exit nil))
-             (skip-chars-forward "; \t")
-             (if (eolp)
-                 nil                           ; No qualifiers
-               (setq save-pos (point))
-               (end-of-line)
-               (setq info (mm-parse-args save-pos (point)))
-               )
-             (while viewers
-               (if (mm-viewer-passes-test (car viewers) info)
-                   (setq passed (cons (car viewers) passed)))
-               (setq viewers (cdr viewers)))
-             (setq passed (sort (nreverse passed) 'mm-viewer-lessp))
-             (car passed)))
-      (if (and (stringp (cdr (assoc "viewer" viewer)))
-              passed)
-         (setq viewer (car passed)))
-      (widen)
-      (cond
-       ((and (null viewer) (not (equal major "default")))
-       (mm-mime-info "default" nil request))
-       ((or (null request) (equal request ""))
-       (mm-unescape-mime-test (cdr (assoc "viewer" viewer)) info))
-       ((stringp request)
-       (if (or (string= request "test") (string= request "viewer"))
-           (mm-unescape-mime-test (cdr-safe (assoc request viewer)) info)))
-       (t
-       ;; MUST make a copy *sigh*, else we modify mm-mime-data
-       (setq viewer (mm-copy-tree viewer))
-       (let ((view (assoc "viewer" viewer))
-             (test (assoc "test" viewer)))
-         (if view (setcdr view (mm-unescape-mime-test (cdr view) info)))
-         (if test (setcdr test (mm-unescape-mime-test (cdr test) info))))
-       viewer)))))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Experimental MIME-types parsing
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defvar mm-mime-extensions
-  '(
-    (""          . "text/plain")
-    (".abs"      . "audio/x-mpeg")
-    (".aif"      . "audio/aiff")
-    (".aifc"     . "audio/aiff")
-    (".aiff"     . "audio/aiff")
-    (".ano"      . "application/x-annotator")
-    (".au"       . "audio/ulaw")
-    (".avi"      . "video/x-msvideo")
-    (".bcpio"    . "application/x-bcpio")
-    (".bin"      . "application/octet-stream")
-    (".cdf"      . "application/x-netcdr")
-    (".cpio"     . "application/x-cpio")
-    (".csh"      . "application/x-csh")
-    (".dvi"      . "application/x-dvi")
-    (".el"       . "application/emacs-lisp")
-    (".eps"      . "application/postscript")
-    (".etx"      . "text/x-setext")
-    (".exe"      . "application/octet-stream")
-    (".fax"      . "image/x-fax")
-    (".gif"      . "image/gif")
-    (".hdf"      . "application/x-hdf")
-    (".hqx"      . "application/mac-binhex40")
-    (".htm"      . "text/html")
-    (".html"     . "text/html")
-    (".icon"     . "image/x-icon")
-    (".ief"      . "image/ief")
-    (".jpg"      . "image/jpeg")
-    (".macp"     . "image/x-macpaint")
-    (".man"      . "application/x-troff-man")
-    (".me"       . "application/x-troff-me")
-    (".mif"      . "application/mif")
-    (".mov"      . "video/quicktime")
-    (".movie"    . "video/x-sgi-movie")
-    (".mp2"      . "audio/x-mpeg")
-    (".mp2a"     . "audio/x-mpeg2")
-    (".mpa"      . "audio/x-mpeg")
-    (".mpa2"     . "audio/x-mpeg2")
-    (".mpe"      . "video/mpeg")
-    (".mpeg"     . "video/mpeg")
-    (".mpega"    . "audio/x-mpeg")
-    (".mpegv"    . "video/mpeg")
-    (".mpg"      . "video/mpeg")
-    (".mpv"      . "video/mpeg")
-    (".ms"       . "application/x-troff-ms")
-    (".nc"       . "application/x-netcdf")
-    (".nc"       . "application/x-netcdf")
-    (".oda"      . "application/oda")
-    (".pbm"      . "image/x-portable-bitmap")
-    (".pdf"      . "application/pdf")
-    (".pgm"      . "image/portable-graymap")
-    (".pict"     . "image/pict")
-    (".png"      . "image/png")
-    (".pnm"      . "image/x-portable-anymap")
-    (".ppm"      . "image/portable-pixmap")
-    (".ps"       . "application/postscript")
-    (".qt"       . "video/quicktime")
-    (".ras"      . "image/x-raster")
-    (".rgb"      . "image/x-rgb")
-    (".rtf"      . "application/rtf")
-    (".rtx"      . "text/richtext")
-    (".sh"       . "application/x-sh")
-    (".sit"      . "application/x-stuffit")
-    (".snd"      . "audio/basic")
-    (".src"      . "application/x-wais-source")
-    (".tar"      . "archive/tar")
-    (".tcl"      . "application/x-tcl")
-    (".tcl"      . "application/x-tcl")
-    (".tex"      . "application/x-tex")
-    (".texi"     . "application/texinfo")
-    (".tga"      . "image/x-targa")
-    (".tif"      . "image/tiff")
-    (".tiff"     . "image/tiff")
-    (".tr"       . "application/x-troff")
-    (".troff"    . "application/x-troff")
-    (".tsv"      . "text/tab-separated-values")
-    (".txt"      . "text/plain")
-    (".vbs"      . "video/mpeg")
-    (".vox"      . "audio/basic")
-    (".vrml"     . "x-world/x-vrml")
-    (".wav"      . "audio/x-wav")
-    (".wrl"      . "x-world/x-vrml")
-    (".xbm"      . "image/xbm")
-    (".xpm"      . "image/x-pixmap")
-    (".xwd"      . "image/windowdump")
-    (".zip"      . "application/zip")
-    (".ai"       . "application/postscript")
-    (".jpe"      . "image/jpeg")
-    (".jpeg"     . "image/jpeg")
-    )
-  "*An assoc list of file extensions and the MIME content-types they
-correspond to.")
-
-(defun mm-parse-mimetypes (&optional path)
-  ;; Parse out all the mimetypes specified in a unix-style path string PATH
-  (cond
-   (path nil)
-   ((getenv "MIMETYPES") (setq path (getenv "MIMETYPES")))
-   ((memq system-type '(ms-dos ms-windows windows-nt))
-    (setq path (mapconcat 'expand-file-name
-                         '("~/mime.typ" "~/etc/mime.typ") ";")))
-   (t (setq path (mapconcat 'expand-file-name
-                           '("~/.mime-types"
-                             "/etc/mime-types:/usr/etc/mime-types"
-                             "/usr/local/etc/mime-types"
-                             "/usr/local/www/conf/mime-types") ":"))))
-  (let ((fnames (reverse
-                (mm-string-to-tokens path
-                                     (if (memq system-type
-                                               '(ms-dos ms-windows windows-nt))
-                                         ?;
-                                       ?:))))
-       fname)
-    (while fnames
-      (setq fname (car fnames))
-      (if (and (file-exists-p fname) (file-readable-p fname))
-         (mm-parse-mimetype-file (car fnames)))
-      (setq fnames (cdr fnames)))))
-
-(defun mm-parse-mimetype-file (fname)
-  ;; Parse out a mime-types file
-  (let (type                           ; The MIME type for this line
-       extns                           ; The extensions for this line
-       save-pos                        ; Misc. saved buffer positions
-       )
-    (save-excursion
-      (set-buffer (get-buffer-create " *mime-types*"))
-      (erase-buffer)
-      (insert-file-contents fname)
-      (mm-replace-regexp "#.*" "")
-      (mm-replace-regexp "\n+" "\n")
-      (mm-replace-regexp "[ \t]+$" "")
-      (goto-char (point-max))
-      (skip-chars-backward " \t\n")
-      (delete-region (point) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (skip-chars-forward " \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^ \t")
-       (downcase-region save-pos (point))
-       (setq type (buffer-substring save-pos (point)))
-       (while (not (eolp))
-         (skip-chars-forward " \t")
-         (setq save-pos (point))
-         (skip-chars-forward "^ \t\n")
-         (setq extns (cons (buffer-substring save-pos (point)) extns)))
-       (while extns
-         (setq mm-mime-extensions
-               (cons
-                (cons (if (= (string-to-char (car extns)) ?.)
-                          (car extns)
-                        (concat "." (car extns))) type) mm-mime-extensions)
-               extns (cdr extns)))))))
-
-(defun mm-extension-to-mime (extn)
-  "Return the MIME content type of the file extensions EXTN"
-  (if (and (stringp extn)
-          (not (eq (string-to-char extn) ?.)))
-      (setq extn (concat "." extn)))
-  (cdr (assoc (downcase extn) mm-mime-extensions)))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Editing/Composition of body parts
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-compose-type (type)
-  ;; Compose a body section of MIME-type TYPE.
-  (let* ((info (mm-mime-info type nil 5))
-        (fnam (mm-generate-unique-filename))
-        (comp (or (cdr (assoc "compose" info))))
-        (ctyp (cdr (assoc "composetyped" info)))
-        (buff (get-buffer-create " *mimecompose*"))
-        (typeit (not ctyp))
-        (retval "")
-        (usef nil))
-    (setq comp (mm-unescape-mime-test (or comp ctyp) info))
-    (while (string-match "\\([^\\\\]\\)%s" comp)
-      (setq comp (concat (substring comp 0 (match-end 1)) fnam
-                        (substring comp (match-end 0) nil))
-           usef t))
-    (call-process shell-file-name nil
-                 (if usef nil buff)
-                 nil shell-command-switch comp)
-    (setq retval
-         (concat
-          (if typeit (concat "Content-type: " type "\r\n\r\n") "")
-          (if usef
-              (save-excursion
-                (set-buffer buff)
-                (erase-buffer)
-                (insert-file-contents fnam)
-                (buffer-string))
-            (save-excursion
-              (set-buffer buff)
-              (buffer-string)))
-          "\r\n"))
-    retval))   
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Misc.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-type-to-file (type)
-  "Return the file extension for content-type TYPE"
-  (rassoc type mm-mime-extensions))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Miscellaneous MIME viewers written in elisp
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-play-sound-file (&optional buff)
-  "Play a sound file in buffer BUFF (defaults to current buffer)"
-  (setq buff (or buff (current-buffer)))
-  (let ((fname (mm-generate-unique-filename "%s.au"))
-       (synchronous-sounds t))         ; Play synchronously
-    (mule-write-region-no-coding-system (point-min) (point-max) fname)
-    (kill-buffer (current-buffer))
-    (play-sound-file fname)
-    (condition-case ()
-       (delete-file fname)
-      (error nil))))
-    
-(defun mm-parse-mime-headers (&optional no-delete)
-  "Return a list of the MIME headers at the top of this buffer.  If
-optional argument NO-DELETE is non-nil, don't delete the headers."
-  (let* ((st (point-min))
-        (nd (progn
-              (goto-char (point-min))
-              (skip-chars-forward " \t\n")
-              (if (re-search-forward "^\r*$" nil t)
-                  (1+ (point))
-                (point-max))))
-        save-pos
-        status
-        hname
-        hvalu
-        result
-        search
-        )
-    (narrow-to-region st (min nd (point-max)))
-    (goto-char (point-min))
-    (while (not (eobp))
-      (skip-chars-forward " \t\n\r")
-      (setq save-pos (point))
-      (skip-chars-forward "^:\n\r")
-      (downcase-region save-pos (point))
-      (setq hname (buffer-substring save-pos (point)))
-      (skip-chars-forward ": \t ")
-      (setq save-pos (point))
-      (skip-chars-forward "^\n\r")
-      (setq search t)
-      (while search
-       (skip-chars-forward "^\n\r")
-       (save-excursion
-         (skip-chars-forward "\n\r")
-         
-         (setq search
-               (string-match "[ \t]"
-                             (char-to-string
-                              (or (char-after (point)) ?a)))))
-       (if search
-           (skip-chars-forward "\n\r")))
-      (setq hvalu (buffer-substring save-pos (point))
-           result (cons (cons hname hvalu) result)))
-    (or no-delete (delete-region st nd))
-    result))
-
-(defun mm-find-available-multiparts (separator &optional buf)
-  "Return a list of mime-headers for the various body parts of a 
-multipart message in buffer BUF with separator SEPARATOR.
-The different multipart specs are put in `mm-temporary-directory'."
-  (let ((sep (concat "^--" separator "\r*$"))
-       headers
-       fname
-       results)
-    (save-excursion
-      (and buf (set-buffer buf))
-      (goto-char (point-min))
-      (while (re-search-forward sep nil t)
-       (let ((st (set-marker (make-marker)
-                             (progn
-                               (forward-line 1)
-                               (beginning-of-line)
-                               (point))))
-             (nd (set-marker (make-marker)
-                             (if (re-search-forward sep nil t)
-                                 (1- (match-beginning 0))
-                               (point-max)))))
-         (narrow-to-region st nd)
-         (goto-char st)
-         (if (looking-at "^\r*$")
-             (insert "Content-type: text/plain\n"
-                     "Content-length: " (int-to-string (- nd st)) "\n"))
-         (setq headers (mm-parse-mime-headers)
-               fname (mm-generate-unique-filename))
-         (let ((x (or (cdr (assoc "content-type" headers)) "text/plain")))
-           (if (string-match "name=\"*\\([^ \"]+\\)\"*" x)
-               (setq fname (expand-file-name
-                            (substring x (match-beginning 1)
-                                       (match-end 1))
-                            mm-temporary-directory))))
-         (widen)
-         (if (assoc "content-transfer-encoding" headers)
-             (let ((coding (cdr
-                            (assoc "content-transfer-encoding" headers)))
-                   (cmd nil))
-               (setq coding (and coding (downcase coding))
-                     cmd (or (cdr (assoc coding
-                                         mm-content-transfer-encodings))
-                             (read-string
-                              (concat "How shall I decode " coding "? ")
-                              "cat")))
-               (if (string= cmd "") (setq cmd "cat"))
-               (if (stringp cmd)
-                   (shell-command-on-region st nd cmd t)
-                 (funcall cmd st nd))
-               (or (eq cmd 'ignore) (set-marker nd (point)))))
-         (write-region st nd fname nil 5)
-         (delete-region st nd)
-         (setq results (cons
-                        (cons
-                         (cons "mm-filename" fname) headers) results)))))
-    results))
-
-(defun mm-format-multipart-as-html (&optional buf type)
-  (if buf (set-buffer buf))
-  (let* ((boundary (if (string-match
-                       "boundary[ \t]*=[ \t\"]*\\([^ \"\t\n]+\\)"
-                       type)
-                      (regexp-quote
-                       (substring type (match-beginning 1) (match-end 1)))))
-        (parts    (mm-find-available-multiparts boundary)))
-    (erase-buffer)
-    (insert "<html>\n"
-           " <head>\n"
-           "  <title>Multipart Message</title>\n"
-           " </head>\n"
-           " <body>\n"
-           "   <h1> Multipart message encountered </h1>\n"
-           "   <p> I have encountered a multipart MIME message.\n"
-           "       The following parts have been detected.  Please\n"
-           "       select which one you want to view.\n"
-           "   </p>\n"
-           "   <ul>\n"
-           (mapconcat 
-            (function (lambda (x)
-                        (concat "    <li> <a href=\"file:"
-                                (cdr (assoc "mm-filename" x))
-                                "\">"
-                                (or (cdr (assoc "content-description" x)) "")
-                                "--"
-                                (or (cdr (assoc "content-type" x))
-                                    "unknown type")
-                                "</a> </li>")))
-            parts "\n")
-           "   </ul>\n"
-           " </body>\n"
-           "</html>\n"
-           "<!-- Automatically generated by MM v" mm-version "-->\n")))
-
-(defun mm-multipart-viewer ()
-  (mm-format-multipart-as-html
-   (current-buffer)
-   (cdr (assoc "content-type" url-current-mime-headers)))
-  (let ((w3-working-buffer (current-buffer)))
-    (w3-prepare-buffer)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Transfer encodings we can decrypt automatically
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-decode-quoted-printable (&optional st nd)
-  (interactive)
-  (setq st (or st (point-min))
-       nd (or nd (point-max)))
-  (save-restriction
-    (narrow-to-region st nd)
-    (save-excursion
-      (let ((buffer-read-only nil))
-       (goto-char (point-min))
-       (while (re-search-forward "=[0-9A-F][0-9A-F]" nil t)
-         (replace-match 
-          (char-to-string 
-           (+
-            (* 16 (mm-hex-char-to-integer 
-                   (char-after (1+ (match-beginning 0)))))
-            (mm-hex-char-to-integer
-             (char-after (1- (match-end 0))))))))))
-    (goto-char (point-max))))
-
-;; Taken from hexl.el.
-(defun mm-hex-char-to-integer (character)
-  "Take a char and return its value as if it was a hex digit."
-  (if (and (>= character ?0) (<= character ?9))
-      (- character ?0)
-    (let ((ch (logior character 32)))
-      (if (and (>= ch ?a) (<= ch ?f))
-         (- ch (- ?a 10))
-       (error (format "Invalid hex digit `%c'." ch))))))
-
-
-\f
-(require 'base64)
-(provide 'mm)
diff --git a/lisp/rfc1522.el b/lisp/rfc1522.el
deleted file mode 100644 (file)
index 98c8ea8..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-;;; rfc1522.el --- Functions for encoding and decoding rfc1522 messages
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'base64)
-(require 'qp)
-(require 'mm-util)
-
-(defvar rfc1522-header-encoding-alist
-  '(("Newsgroups" . nil)
-    ("Message-ID" . nil)
-    (t . mime))
-  "*Header/encoding method alist.
-The list is traversed sequentially.  The keys can either be
-header regexps or `t'.
-
-The values can be:
-
-1) nil, in which case no encoding is done;
-2) `mime', in which case the header will be encoded according to RFC1522;
-3) a charset, in which case it will be encoded as that charse;
-4) `default', in which case the field will be encoded as the rest
-   of the article.")
-
-(defvar rfc1522-charset-encoding-alist
-  '((us-ascii . nil)
-    (iso-8859-1 . Q)
-    (iso-8859-2 . Q)
-    (iso-8859-3 . Q)
-    (iso-8859-4 . Q)
-    (iso-8859-5 . Q)
-    (koi8-r . Q)
-    (iso-8859-7 . Q)
-    (iso-8859-8 . Q)
-    (iso-8859-9 . Q)
-    (iso-2022-jp . B)
-    (iso-2022-kr . B)
-    (gb2312 . B)
-    (cn-gb . B)
-    (cn-gb-2312 . B)
-    (euc-kr . B)
-    (iso-2022-jp-2 . B)
-    (iso-2022-int-1 . B))
-  "Alist of MIME charsets to RFC1522 encodings.
-Valid encodings are nil, `Q' and `B'.")
-
-(defvar rfc1522-encoding-function-alist
-  '((Q . rfc1522-q-encode-region)
-    (B . base64-encode-region)
-    (nil . ignore))
-  "Alist of RFC1522 encodings to encoding functions.")
-
-(defvar rfc1522-q-encoding-alist
-  '(("\\(From\\|Cc\\|To\\|Bcc\||Reply-To\\):" . "[^-A-Za-z0-9!*+/=_]")
-    ("." . "[\000-\007\013\015-\037\200-\377=_?]"))
-  "Alist of header regexps and valid Q characters.")
-
-;;;
-;;; Functions for encoding RFC1522 messages
-;;;
-
-(defun rfc1522-narrow-to-field ()
-  "Narrow the buffer to the header on the current line."
-  (beginning-of-line)
-  (narrow-to-region
-   (point)
-   (progn
-     (forward-line 1)
-     (if (re-search-forward "^[^ \n\t]" nil t)
-        (progn
-          (beginning-of-line)
-          (point))
-       (point-max))))
-  (goto-char (point-min)))
-
-;;;###autoload
-(defun rfc1522-encode-message-header ()
-  "Encode the message header according to `rfc1522-header-encoding-alist'.
-Should be called narrowed to the head of the message."
-  (interactive "*")
-  (when (featurep 'mule)
-    (save-excursion
-      (let ((alist rfc1522-header-encoding-alist)
-           elem method)
-       (while (not (eobp))
-         (save-restriction
-           (rfc1522-narrow-to-field)
-           (when (find-non-ascii-charset-region (point-min) (point-max))
-             ;; We found something that may perhaps be encoded.
-             (while (setq elem (pop alist))
-               (when (or (and (stringp (car elem))
-                              (looking-at (car elem)))
-                         (eq (car elem) t))
-                 (setq alist nil
-                       method (cdr elem))))
-             (when method
-               (cond
-                ((eq method 'mime)
-                 (rfc1522-encode-region (point-min) (point-max)))
-                ;; Hm.
-                (t))))
-           (goto-char (point-max))))))))
-
-(defun rfc1522-encode-region (b e)
-  "Encode all encodable words in REGION."
-  (let (prev c start qstart qprev qend)
-    (save-excursion
-      (goto-char b)
-      (while (re-search-forward "[^ \t\n]+" nil t)
-       (save-restriction
-         (narrow-to-region (match-beginning 0) (match-end 0))
-         (goto-char (setq start (point-min)))
-         (setq prev nil)
-         (while (not (eobp))
-           (unless (eq (setq c (char-charset (following-char))) 'ascii)
-             (cond
-              ((eq c prev)
-               )
-              ((null prev)
-               (setq qstart (or qstart start)
-                     qend (point-max)
-                     qprev c)
-               (setq prev c))
-              (t
-               ;(rfc1522-encode start (setq start (point)) prev)
-               (setq prev c))))
-           (forward-char 1)))
-       (when (and (not prev) qstart)
-         (rfc1522-encode qstart qend qprev)
-         (setq qstart nil)))
-      (when qstart
-       (rfc1522-encode qstart qend qprev)
-       (setq qstart nil)))))
-
-(defun rfc1522-encode-string (string)
-  "Encode words in STRING."
-  (with-temp-buffer
-    (insert string)
-    (rfc1522-encode-region (point-min) (point-max))
-    (buffer-string)))
-
-(defun rfc1522-encode (b e charset)
-  "Encode the word in the region with CHARSET."
-  (let* ((mime-charset (mm-mule-charset-to-mime-charset charset))
-        (encoding (cdr (assq mime-charset
-                             rfc1522-charset-encoding-alist)))
-        (start (concat
-                "=?" (downcase (symbol-name mime-charset)) "?"
-                (downcase (symbol-name encoding)) "?")))
-    (save-restriction
-      (narrow-to-region b e)
-      (insert
-       (prog1
-          (mm-encode-coding-string (buffer-string) mime-charset)
-        (delete-region (point-min) (point-max))))
-      (funcall (cdr (assq encoding rfc1522-encoding-function-alist))
-              (point-min) (point-max))
-      (goto-char (point-min))
-      (insert start)
-      (goto-char (point-max))
-      (insert "?=")
-      ;; Encoded words can't be more than 75 chars long, so we have to
-      ;; split the long ones up.
-      (end-of-line)
-      (while (> (current-column) 74)
-       (beginning-of-line)
-       (forward-char 73)
-       (insert "?=\n " start)
-       (end-of-line)))))
-
-(defun rfc1522-q-encode-region (b e)
-  "Encode the header contained in REGION with the Q encoding."
-  (save-excursion
-    (save-restriction
-      (narrow-to-region (goto-char b) e)
-      (let ((alist rfc1522-q-encoding-alist))
-       (while alist
-         (when (looking-at (caar alist))
-           (quoted-printable-encode-region b e nil (cdar alist))
-           (subst-char-in-region (point-min) (point-max) ?  ?_))
-         (pop alist))))))
-
-;;;
-;;; Functions for decoding RFC1522 messages
-;;;
-
-(defvar rfc1522-encoded-word-regexp
-  "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\\?\\([!->@-~]+\\)\\?=")
-
-;;;###autoload
-(defun rfc1522-decode-region (start end)
-  "Decode MIME-encoded words in region between START and END."
-  (interactive "r")
-  (save-excursion
-    (save-restriction
-      (narrow-to-region start end)
-      (goto-char (point-min))
-      ;; Remove whitespace between encoded words.
-      (while (re-search-forward
-             (concat "\\(" rfc1522-encoded-word-regexp "\\)"
-                     "\\(\n?[ \t]\\)+"
-                     "\\(" rfc1522-encoded-word-regexp "\\)")
-             nil t)
-       (delete-region (goto-char (match-end 1)) (match-beginning 6)))
-      ;; Decode the encoded words.
-      (goto-char (point-min))
-      (while (re-search-forward rfc1522-encoded-word-regexp nil t)
-       (insert (rfc1522-parse-and-decode
-                (prog1
-                    (match-string 0)
-                  (delete-region (match-beginning 0) (match-end 0)))))))))
-
-;;;###autoload
-(defun rfc1522-decode-string (string)
- "Decode the quoted-printable-encoded STRING and return the results."
- (with-temp-buffer
-   (insert string)
-   (inline
-     (rfc1522-decode-region (point-min) (point-max)))
-   (buffer-string)))
-
-(defun rfc1522-parse-and-decode (word)
-  "Decode WORD and return it if it is an encoded word.
-Return WORD if not."
-  (if (not (string-match rfc1522-encoded-word-regexp word))
-      word
-    (or
-     (condition-case nil
-        (rfc1522-decode
-         (match-string 1 word)
-         (upcase (match-string 2 word))
-         (match-string 3 word))
-       (error word))
-     word)))
-
-(defun rfc1522-decode (charset encoding string)
-  "Decode STRING as an encoded text.
-Valid ENCODINGs are \"B\" and \"Q\".
-If your Emacs implementation can't decode CHARSET, it returns nil."
-  (let ((cs (mm-charset-to-coding-system charset)))
-    (when cs
-      (mm-decode-coding-string
-       (cond
-       ((equal "B" encoding)
-        (base64-decode string))
-       ((equal "Q" encoding)
-        (quoted-printable-decode-string
-         (mm-replace-chars-in-string string ?_ ? )))
-       (t (error "Invalid encoding: %s" encoding)))
-       cs))))
-
-(provide 'rfc1522)
-
-;;; rfc1522.el ends here
diff --git a/lisp/run-at-time.el b/lisp/run-at-time.el
deleted file mode 100644 (file)
index 47298e9..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-;;; run-at-time.el --- A non-buggy version of the run-at-time function
-
-;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
-
-;; Author: Katsumi Yamaoka  <yamaoka@jpl.org>
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; XEmacs has a buggy version of run-at-time.  This file defines a
-;; non-buggy version of the same.
-
-(defalias
-  'run-at-time
-  (if (condition-case nil
-         (progn
-           (unless (or itimer-process itimer-timer)
-             (itimer-driver-start))
-           ;; Check whether there is a bug to which the difference of
-           ;; the present time and the time when the itimer driver was
-           ;; woken up is subtracted from the initial itimer value.
-           (let* ((inhibit-quit t)
-                  (ctime (current-time))
-                  (itimer-timer-last-wakeup
-                   (prog1
-                       ctime
-                     (setcar ctime (1- (car ctime)))))
-                  (itimer-list nil)
-                  (itimer (start-itimer "run-at-time" 'ignore 5)))
-             (sleep-for 0.1) ;; Accept the timeout interrupt.
-             (prog1
-                 (> (itimer-value itimer) 0)
-               (delete-itimer itimer))))
-       (error nil))
-      (lambda (time repeat function &rest args)
-       "Function emulating the function of the same name of Emacs.
-TIME should be nil meaning now, or a number of seconds from now.
-Return an itimer object which can be used in either `delete-itimer'
-or `cancel-timer'."
-       (apply #'start-itimer "run-at-time"
-              function (if time (max time 1e-9) 1e-9)
-              repeat nil t args))
-    (lambda (time repeat function &rest args)
-      "Function emulating the function of the same name of Emacs.
-It works correctly for TIME even if there is a bug in the XEmacs core.
-TIME should be nil meaning now, or a number of seconds from now.
-Return an itimer object which can be used in either `delete-itimer'
-or `cancel-timer'."
-      (let ((itimers (list nil)))
-       (setcar
-        itimers
-        (apply #'start-itimer "fixed-run-at-time"
-               (lambda (itimers repeat function &rest args)
-                 (let ((itimer (car itimers)))
-                   (if repeat
-                       (progn
-                         (set-itimer-function
-                          itimer
-                          (lambda (itimer repeat function &rest args)
-                            (set-itimer-restart itimer repeat)
-                            (set-itimer-function itimer function)
-                            (set-itimer-function-arguments itimer args)
-                            (apply function args)))
-                         (set-itimer-function-arguments
-                          itimer
-                          (append (list itimer repeat function) args)))
-                     (set-itimer-function
-                      itimer
-                      (lambda (itimer function &rest args)
-                        (delete-itimer itimer)
-                        (apply function args)))
-                     (set-itimer-function-arguments
-                      itimer
-                      (append (list itimer function) args)))))
-               1e-9 (if time (max time 1e-9) 1e-9)
-               nil t itimers repeat function args))))))
-
-(provide 'run-at-time)
-
-;;; run-at-time.el ends here
diff --git a/lisp/sha1-el.el b/lisp/sha1-el.el
deleted file mode 100644 (file)
index 44f3f5b..0000000
+++ /dev/null
@@ -1,440 +0,0 @@
-;;; sha1-el.el --- SHA1 Secure Hash Algorithm in Emacs-Lisp
-
-;; Copyright (C) 1999, 2001, 2003, 2004 Free Software Foundation, Inc.
-
-;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
-;; Keywords: SHA1, FIPS 180-1
-
-;; This file is part of FLIM (Faithful Library about Internet Message).
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 2, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING.  If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; This program is implemented from the definition of SHA-1 in FIPS PUB
-;; 180-1 (Federal Information Processing Standards Publication 180-1),
-;; "Announcing the Standard for SECURE HASH STANDARD".
-;; <URL:http://www.itl.nist.gov/div897/pubs/fip180-1.htm>
-;; (EXCEPTION; two optimizations taken from GnuPG/cipher/sha1.c)
-;;
-;; Test cases from FIPS PUB 180-1.
-;;
-;; (sha1 "abc")
-;; => a9993e364706816aba3e25717850c26c9cd0d89d
-;;
-;; (sha1 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")
-;; => 84983e441c3bd26ebaae4aa1f95129e5e54670f1
-;;
-;; (sha1 (make-string 1000000 ?a))
-;; => 34aa973cd4c4daa4f61eeb2bdbad27316534016f
-;;
-;; BUGS:
-;;  * It is assumed that length of input string is less than 2^29 bytes.
-;;  * It is caller's responsibility to make string (or region) unibyte.
-;;
-;; TODO:
-;;  * Rewrite from scratch!
-;;    This version is much faster than Keiichi Suzuki's another sha1.el,
-;;    but it is too dirty.
-
-;;; Code:
-
-(require 'hex-util)
-
-;;;
-;;; external SHA1 function.
-;;;
-
-(defgroup sha1 nil
-  "Elisp interface for SHA1 hash computation."
-  :group 'extensions)
-
-(defcustom sha1-maximum-internal-length 500
-  "*Maximum length of message to use Lisp version of SHA1 function.
-If message is longer than this, `sha1-program' is used instead.
-
-If this variable is set to 0, use external program only.
-If this variable is set to nil, use internal function only."
-  :type 'integer
-  :group 'sha1)
-
-(defcustom sha1-program '("sha1sum")
-  "*Name of program to compute SHA1.
-It must be a string \(program name\) or list of strings \(name and its args\)."
-  :type '(repeat string)
-  :group 'sha1)
-
-(defcustom sha1-use-external (condition-case ()
-                                (executable-find (car sha1-program))
-                              (error))
-  "*Use external SHA1 program.
-If this variable is set to nil, use internal function only."
-  :type 'boolean
-  :group 'sha1)
-
-(defun sha1-string-external (string &optional binary)
-  (let (prog args digest default-enable-multibyte-characters)
-    (if (consp sha1-program)
-       (setq prog (car sha1-program)
-             args (cdr sha1-program))
-      (setq prog sha1-program
-           args nil))
-    (with-temp-buffer
-      (insert string)
-      (apply (function call-process-region)
-            (point-min)(point-max)
-            prog t t nil args)
-      ;; SHA1 is 40 bytes long in hexadecimal form.
-      (setq digest (buffer-substring (point-min)(+ (point-min) 40))))
-    (if binary
-       (decode-hex-string digest)
-      digest)))
-
-(defun sha1-region-external (beg end &optional binary)
-  (sha1-string-external (buffer-substring-no-properties beg end) binary))
-
-;;;
-;;; internal SHA1 function.
-;;;
-
-(eval-when-compile
-  ;; optional second arg of string-to-number is new in v20.
-  (defconst sha1-K0-high 23170)                ; (string-to-number "5A82" 16)
-  (defconst sha1-K0-low  31129)                ; (string-to-number "7999" 16)
-  (defconst sha1-K1-high 28377)                ; (string-to-number "6ED9" 16)
-  (defconst sha1-K1-low  60321)                ; (string-to-number "EBA1" 16)
-  (defconst sha1-K2-high 36635)                ; (string-to-number "8F1B" 16)
-  (defconst sha1-K2-low  48348)                ; (string-to-number "BCDC" 16)
-  (defconst sha1-K3-high 51810)                ; (string-to-number "CA62" 16)
-  (defconst sha1-K3-low  49622)                ; (string-to-number "C1D6" 16)
-
-;;; original definition of sha1-F0.
-;;; (defmacro sha1-F0 (B C D)
-;;;   (` (logior (logand (, B) (, C))
-;;;         (logand (lognot (, B)) (, D)))))
-;;; a little optimization from GnuPG/cipher/sha1.c.
-  (defmacro sha1-F0 (B C D)
-    (` (logxor (, D) (logand (, B) (logxor (, C) (, D))))))
-  (defmacro sha1-F1 (B C D)
-    (` (logxor (, B) (, C) (, D))))
-;;; original definition of sha1-F2.
-;;; (defmacro sha1-F2 (B C D)
-;;;   (` (logior (logand (, B) (, C))
-;;;         (logand (, B) (, D))
-;;;         (logand (, C) (, D)))))
-;;; a little optimization from GnuPG/cipher/sha1.c.
-  (defmacro sha1-F2 (B C D)
-    (` (logior (logand (, B) (, C))
-              (logand (, D) (logior (, B) (, C))))))
-  (defmacro sha1-F3 (B C D)
-    (` (logxor (, B) (, C) (, D))))
-
-  (defmacro sha1-S1  (W-high W-low)
-    (` (let ((W-high (, W-high))
-            (W-low  (, W-low)))
-        (setq S1W-high (+ (% (* W-high 2) 65536)
-                          (/ W-low (, (/ 65536 2)))))
-        (setq S1W-low (+ (/ W-high (, (/ 65536 2)))
-                         (% (* W-low 2) 65536))))))
-  (defmacro sha1-S5  (A-high A-low)
-    (` (progn
-        (setq S5A-high (+ (% (* (, A-high) 32) 65536)
-                          (/ (, A-low) (, (/ 65536 32)))))
-        (setq S5A-low  (+ (/ (, A-high) (, (/ 65536 32)))
-                          (% (* (, A-low) 32) 65536))))))
-  (defmacro sha1-S30 (B-high B-low)
-    (` (progn
-        (setq S30B-high (+ (/ (, B-high) 4)
-                           (* (% (, B-low) 4) (, (/ 65536 4)))))
-        (setq S30B-low  (+ (/ (, B-low) 4)
-                           (* (% (, B-high) 4) (, (/ 65536 4))))))))
-
-  (defmacro sha1-OP (round)
-    (` (progn
-        (sha1-S5 sha1-A-high sha1-A-low)
-        (sha1-S30 sha1-B-high sha1-B-low)
-        (setq sha1-A-low (+ ((, (intern (format "sha1-F%d" round)))
-                             sha1-B-low sha1-C-low sha1-D-low)
-                            sha1-E-low
-                            (, (symbol-value
-                                (intern (format "sha1-K%d-low" round))))
-                            (aref block-low idx)
-                            (progn
-                              (setq sha1-E-low sha1-D-low)
-                              (setq sha1-D-low sha1-C-low)
-                              (setq sha1-C-low S30B-low)
-                              (setq sha1-B-low sha1-A-low)
-                              S5A-low)))
-        (setq carry (/ sha1-A-low 65536))
-        (setq sha1-A-low (% sha1-A-low 65536))
-        (setq sha1-A-high (% (+ ((, (intern (format "sha1-F%d" round)))
-                                 sha1-B-high sha1-C-high sha1-D-high)
-                                sha1-E-high
-                                (, (symbol-value
-                                    (intern (format "sha1-K%d-high" round))))
-                                (aref block-high idx)
-                                (progn
-                                  (setq sha1-E-high sha1-D-high)
-                                  (setq sha1-D-high sha1-C-high)
-                                  (setq sha1-C-high S30B-high)
-                                  (setq sha1-B-high sha1-A-high)
-                                  S5A-high)
-                                carry)
-                             65536)))))
-
-  (defmacro sha1-add-to-H (H X)
-    (` (progn
-        (setq (, (intern (format "sha1-%s-low" H)))
-              (+ (, (intern (format "sha1-%s-low" H)))
-                 (, (intern (format "sha1-%s-low" X)))))
-        (setq carry (/ (, (intern (format "sha1-%s-low" H))) 65536))
-        (setq (, (intern (format "sha1-%s-low" H)))
-              (% (, (intern (format "sha1-%s-low" H))) 65536))
-        (setq (, (intern (format "sha1-%s-high" H)))
-              (% (+ (, (intern (format "sha1-%s-high" H)))
-                    (, (intern (format "sha1-%s-high" X)))
-                    carry)
-                 65536)))))
-  )
-
-;;; buffers (H0 H1 H2 H3 H4).
-(defvar sha1-H0-high)
-(defvar sha1-H0-low)
-(defvar sha1-H1-high)
-(defvar sha1-H1-low)
-(defvar sha1-H2-high)
-(defvar sha1-H2-low)
-(defvar sha1-H3-high)
-(defvar sha1-H3-low)
-(defvar sha1-H4-high)
-(defvar sha1-H4-low)
-
-(defun sha1-block (block-high block-low)
-  (let (;; step (c) --- initialize buffers (A B C D E).
-       (sha1-A-high sha1-H0-high) (sha1-A-low sha1-H0-low)
-       (sha1-B-high sha1-H1-high) (sha1-B-low sha1-H1-low)
-       (sha1-C-high sha1-H2-high) (sha1-C-low sha1-H2-low)
-       (sha1-D-high sha1-H3-high) (sha1-D-low sha1-H3-low)
-       (sha1-E-high sha1-H4-high) (sha1-E-low sha1-H4-low)
-       (idx 16))
-    ;; step (b).
-    (let (;; temporary variables used in sha1-S1 macro.
-         S1W-high S1W-low)
-      (while (< idx 80)
-       (sha1-S1 (logxor (aref block-high (- idx 3))
-                        (aref block-high (- idx 8))
-                        (aref block-high (- idx 14))
-                        (aref block-high (- idx 16)))
-                (logxor (aref block-low  (- idx 3))
-                        (aref block-low  (- idx 8))
-                        (aref block-low  (- idx 14))
-                        (aref block-low  (- idx 16))))
-       (aset block-high idx S1W-high)
-       (aset block-low  idx S1W-low)
-       (setq idx (1+ idx))))
-    ;; step (d).
-    (setq idx 0)
-    (let (;; temporary variables used in sha1-OP macro.
-         S5A-high S5A-low S30B-high S30B-low carry)
-      (while (< idx 20) (sha1-OP 0) (setq idx (1+ idx)))
-      (while (< idx 40) (sha1-OP 1) (setq idx (1+ idx)))
-      (while (< idx 60) (sha1-OP 2) (setq idx (1+ idx)))
-      (while (< idx 80) (sha1-OP 3) (setq idx (1+ idx))))
-    ;; step (e).
-    (let (;; temporary variables used in sha1-add-to-H macro.
-         carry)
-      (sha1-add-to-H H0 A)
-      (sha1-add-to-H H1 B)
-      (sha1-add-to-H H2 C)
-      (sha1-add-to-H H3 D)
-      (sha1-add-to-H H4 E))))
-
-(defun sha1-binary (string)
-  "Return the SHA1 of STRING in binary form."
-  (let (;; prepare buffers for a block. byte-length of block is 64.
-       ;; input block is split into two vectors.
-       ;;
-       ;; input block: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ...
-       ;; block-high:  +-0-+       +-1-+       +-2-+       +-3-+
-       ;; block-low:         +-0-+       +-1-+       +-2-+       +-3-+
-       ;;
-       ;; length of each vector is 80, and elements of each vector are
-       ;; 16bit integers.  elements 0x10-0x4F of each vector are
-       ;; assigned later in `sha1-block'.
-       (block-high (eval-when-compile (make-vector 80 nil)))
-       (block-low  (eval-when-compile (make-vector 80 nil))))
-    (unwind-protect
-       (let* (;; byte-length of input string.
-              (len (length string))
-              (lim (* (/ len 64) 64))
-              (rem (% len 4))
-              (idx 0)(pos 0))
-         ;; initialize buffers (H0 H1 H2 H3 H4).
-         (setq sha1-H0-high 26437      ; (string-to-number "6745" 16)
-               sha1-H0-low  8961       ; (string-to-number "2301" 16)
-               sha1-H1-high 61389      ; (string-to-number "EFCD" 16)
-               sha1-H1-low  43913      ; (string-to-number "AB89" 16)
-               sha1-H2-high 39098      ; (string-to-number "98BA" 16)
-               sha1-H2-low  56574      ; (string-to-number "DCFE" 16)
-               sha1-H3-high 4146       ; (string-to-number "1032" 16)
-               sha1-H3-low  21622      ; (string-to-number "5476" 16)
-               sha1-H4-high 50130      ; (string-to-number "C3D2" 16)
-               sha1-H4-low  57840)     ; (string-to-number "E1F0" 16)
-         ;; loop for each 64 bytes block.
-         (while (< pos lim)
-           ;; step (a).
-           (setq idx 0)
-           (while (< idx 16)
-             (aset block-high idx (+ (* (aref string pos) 256)
-                                     (aref string (1+ pos))))
-             (setq pos (+ pos 2))
-             (aset block-low  idx (+ (* (aref string pos) 256)
-                                     (aref string (1+ pos))))
-             (setq pos (+ pos 2))
-             (setq idx (1+ idx)))
-           (sha1-block block-high block-low))
-         ;; last block.
-         (if (prog1
-                 (< (- len lim) 56)
-               (setq lim (- len rem))
-               (setq idx 0)
-               (while (< pos lim)
-                 (aset block-high idx (+ (* (aref string pos) 256)
-                                         (aref string (1+ pos))))
-                 (setq pos (+ pos 2))
-                 (aset block-low  idx (+ (* (aref string pos) 256)
-                                         (aref string (1+ pos))))
-                 (setq pos (+ pos 2))
-                 (setq idx (1+ idx)))
-               ;; this is the last (at most) 32bit word.
-               (cond
-                ((= rem 3)
-                 (aset block-high idx (+ (* (aref string pos) 256)
-                                         (aref string (1+ pos))))
-                 (setq pos (+ pos 2))
-                 (aset block-low  idx (+ (* (aref string pos) 256)
-                                         128)))
-                ((= rem 2)
-                 (aset block-high idx (+ (* (aref string pos) 256)
-                                         (aref string (1+ pos))))
-                 (aset block-low  idx 32768))
-                ((= rem 1)
-                 (aset block-high idx (+ (* (aref string pos) 256)
-                                         128))
-                 (aset block-low  idx 0))
-                (t ;; (= rem 0)
-                 (aset block-high idx 32768)
-                 (aset block-low  idx 0)))
-               (setq idx (1+ idx))
-               (while (< idx 16)
-                 (aset block-high idx 0)
-                 (aset block-low  idx 0)
-                 (setq idx (1+ idx))))
-             ;; last block has enough room to write the length of string.
-             (progn
-               ;; write bit length of string to last 4 bytes of the block.
-               (aset block-low  15 (* (% len 8192) 8))
-               (setq len (/ len 8192))
-               (aset block-high 15 (% len 65536))
-               ;; XXX: It is not practical to compute SHA1 of
-               ;;      such a huge message on emacs.
-               ;; (setq len (/ len 65536))     ; for 64bit emacs.
-               ;; (aset block-low  14 (% len 65536))
-               ;; (aset block-high 14 (/ len 65536))
-               (sha1-block block-high block-low))
-           ;; need one more block.
-           (sha1-block block-high block-low)
-           (fillarray block-high 0)
-           (fillarray block-low  0)
-           ;; write bit length of string to last 4 bytes of the block.
-           (aset block-low  15 (* (% len 8192) 8))
-           (setq len (/ len 8192))
-           (aset block-high 15 (% len 65536))
-           ;; XXX: It is not practical to compute SHA1 of
-           ;;      such a huge message on emacs.
-           ;; (setq len (/ len 65536))         ; for 64bit emacs.
-           ;; (aset block-low  14 (% len 65536))
-           ;; (aset block-high 14 (/ len 65536))
-           (sha1-block block-high block-low))
-         ;; make output string (in binary form).
-         (let ((result (make-string 20 0)))
-           (aset result  0 (/ sha1-H0-high 256))
-           (aset result  1 (% sha1-H0-high 256))
-           (aset result  2 (/ sha1-H0-low  256))
-           (aset result  3 (% sha1-H0-low  256))
-           (aset result  4 (/ sha1-H1-high 256))
-           (aset result  5 (% sha1-H1-high 256))
-           (aset result  6 (/ sha1-H1-low  256))
-           (aset result  7 (% sha1-H1-low  256))
-           (aset result  8 (/ sha1-H2-high 256))
-           (aset result  9 (% sha1-H2-high 256))
-           (aset result 10 (/ sha1-H2-low  256))
-           (aset result 11 (% sha1-H2-low  256))
-           (aset result 12 (/ sha1-H3-high 256))
-           (aset result 13 (% sha1-H3-high 256))
-           (aset result 14 (/ sha1-H3-low  256))
-           (aset result 15 (% sha1-H3-low  256))
-           (aset result 16 (/ sha1-H4-high 256))
-           (aset result 17 (% sha1-H4-high 256))
-           (aset result 18 (/ sha1-H4-low  256))
-           (aset result 19 (% sha1-H4-low  256))
-           result))
-      ;; do not leave a copy of input string.
-      (fillarray block-high nil)
-      (fillarray block-low  nil))))
-
-(defun sha1-string-internal (string &optional binary)
-  (if binary
-      (sha1-binary string)
-    (encode-hex-string (sha1-binary string))))
-
-(defun sha1-region-internal (beg end &optional binary)
-  (sha1-string-internal (buffer-substring-no-properties beg end) binary))
-
-;;;
-;;; application interface.
-;;;
-
-(defun sha1-region (beg end &optional binary)
-  (if (and sha1-use-external
-          sha1-maximum-internal-length
-          (> (abs (- end beg)) sha1-maximum-internal-length))
-      (sha1-region-external beg end binary)
-    (sha1-region-internal beg end binary)))
-
-(defun sha1-string (string &optional binary)
-  (if (and sha1-use-external
-          sha1-maximum-internal-length
-          (> (length string) sha1-maximum-internal-length))
-      (sha1-string-external string binary)
-    (sha1-string-internal string binary)))
-
-;;;###autoload
-(defun sha1 (object &optional beg end binary)
-  "Return the SHA1 (Secure Hash Algorithm) of an object.
-OBJECT is either a string or a buffer.
-Optional arguments BEG and END denote buffer positions for computing the
-hash of a portion of OBJECT.
-If BINARY is non-nil, return a string in binary form."
-  (if (stringp object)
-      (sha1-string object binary)
-    (save-excursion
-      (set-buffer object)
-      (sha1-region (or beg (point-min)) (or end (point-max)) binary))))
-
-(provide 'sha1-el)
-
-;;; sha1-el.el ends here
diff --git a/lisp/smiley-ems.el b/lisp/smiley-ems.el
deleted file mode 100644 (file)
index 1cb263d..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-;;; smiley-ems.el --- displaying smiley faces
-
-;; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
-
-;; Author: Dave Love <fx@gnu.org>
-;; Keywords: news mail multimedia
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; A re-written, simplified version of Wes Hardaker's XEmacs smiley.el
-;; which might be merged back to smiley.el if we get an assignment for
-;; that.  We don't have assignments for the images smiley.el uses, but
-;; I'm not sure we need that degree of rococoness and defaults like a
-;; yellow background.  Also, using PBM means we can display the images
-;; more generally.  -- fx
-
-;;; Test smileys:  :-) :-\ :-( :-/
-
-;;; Code:
-
-(eval-when-compile (require 'cl))
-(require 'nnheader)
-(require 'gnus-art)
-
-(defgroup smiley nil
-  "Turn :-)'s into real images."
-  :group 'gnus-visual)
-
-;; Maybe this should go.
-(defcustom smiley-data-directory (nnheader-find-etc-directory "smilies")
-  "*Location of the smiley faces files."
-  :type 'directory
-  :group 'smiley)
-
-;; The XEmacs version has a baroque, if not rococo, set of these.
-(defcustom smiley-regexp-alist
-  '(("\\(:-?)\\)\\W" 1 "smile")
-    ("\\(;-?)\\)\\W" 1 "blink")
-    ("\\(:-]\\)\\W" 1 "forced")
-    ("\\(8-)\\)\\W" 1 "braindamaged")
-    ("\\(:-|\\)\\W" 1 "indifferent")
-    ("\\(:-[/\\]\\)\\W" 1 "wry")
-    ("\\(:-(\\)\\W" 1 "sad")
-    ("\\(:-{\\)\\W" 1 "frown"))
-  "*A list of regexps to map smilies to images.
-The elements are (REGEXP MATCH FILE), where MATCH is the submatch in
-regexp to replace with IMAGE.  IMAGE is the name of a PBM file in
-`smiley-data-directory'."
-  :type '(repeat (list regexp
-                      (integer :tag "Regexp match number")
-                      (string :tag "Image name")))
-  :set (lambda (symbol value)
-        (set-default symbol value)
-        (smiley-update-cache))
-  :initialize 'custom-initialize-default
-  :group 'smiley)
-
-(defcustom gnus-smiley-file-types
-  (let ((types (list "pbm")))
-    (when (gnus-image-type-available-p 'xpm)
-      (push "xpm" types))
-    types)
-  "*List of suffixes on picon file names to try."
-  :type '(repeat string)
-  :group 'smiley)
-
-(defvar smiley-cached-regexp-alist nil)
-
-(defun smiley-update-cache ()
-  (dolist (elt (if (symbolp smiley-regexp-alist)
-                  (symbol-value smiley-regexp-alist)
-                smiley-regexp-alist))
-    (let ((types gnus-smiley-file-types)
-         file type)
-      (while (and (not file)
-                 (setq type (pop types)))
-       (unless (file-exists-p
-                (setq file (expand-file-name (concat (nth 2 elt) "." type)
-                                             smiley-data-directory)))
-         (setq file nil)))
-      (when type
-       (let ((image (find-image (list (list :type (intern type) 
-                                            :file file
-                                            :ascent 'center)))))
-         (when image
-           (push (list (car elt) (cadr elt) image)
-                 smiley-cached-regexp-alist)))))))
-
-(defvar smiley-mouse-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [down-mouse-2] 'ignore) ; override widget
-    (define-key map [mouse-2]
-      'smiley-mouse-toggle-buffer)
-    map))
-
-;;;###autoload
-(defun smiley-region (start end)
-  "Replace in the region `smiley-regexp-alist' matches with corresponding images.
-A list of images is returned."
-  (interactive "r")
-  (when (and (fboundp 'display-graphic-p)
-            (display-graphic-p))
-    (mapcar (lambda (o)
-             (if (eq 'smiley (overlay-get o 'smiley))
-                 (delete-overlay o)))
-           (overlays-in start end))
-    (unless smiley-cached-regexp-alist
-      (smiley-update-cache))
-    (save-excursion
-      (let ((beg (or start (point-min)))
-           group overlay image images)
-       (dolist (entry smiley-cached-regexp-alist)
-         (setq group (nth 1 entry)
-               image (nth 2 entry))
-         (goto-char beg)
-         (while (re-search-forward (car entry) end t)
-           (when image
-             (push image images)
-             (gnus-add-wash-type 'smiley)
-             (gnus-add-image 'smiley image)
-             (add-text-properties
-              (match-beginning group) (match-end group)
-              `(display ,image
-                        mouse-face highlight
-                        smiley t
-                        help-echo "mouse-2: toggle smilies in buffer"
-                        keymap smiley-mouse-map)))))
-       images))))
-
-(defun smiley-toggle-buffer (&optional arg)
-  "Toggle displaying smiley faces in article buffer.
-With arg, turn displaying on if and only if arg is positive."
-  (interactive "P")
-  (gnus-with-article-buffer
-    (if (if (numberp arg) 
-           (> arg 0)
-         (not (memq 'smiley gnus-article-wash-types)))
-       (smiley-region (point-min) (point-max))
-      (gnus-delete-images 'smiley))))
-
-(defun smiley-mouse-toggle-buffer (event)
-  "Toggle displaying smiley faces.
-With arg, turn displaying on if and only if arg is positive."
-  (interactive "e")
-  (save-excursion
-    (save-window-excursion
-      (mouse-set-point event)
-      (smiley-toggle-buffer))))
-
-(provide 'smiley)
-
-;;; smiley-ems.el ends here
diff --git a/make-x.bat b/make-x.bat
deleted file mode 100644 (file)
index f741794..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-@echo off\r
-\r
-rem Modified once more by Frank Schmitt (ich@Frank-Schmitt.net)\r
-rem Modified by ShengHuo Zhu (zsh@cs.rochester.edu)\r
-rem Originally from make.bat by David Charlap (shamino@writeme.com)\r
-\r
-rem Clear PWD so emacs doesn't get confused\r
-set GNUS_PWD_SAVE=%PWD%\r
-set PWD=\r
-\r
-if "%1" == "" goto usage\r
-\r
-rem Directory where the info files are installed\r
-set GNUS_INFO_DIR=%1\..\..\xemacs-packages\info\r
-\r
-set emacs=xemacs.exe\r
-if "%2" == "" set copy="false"\r
-if "%2" == "copy" set copy=true\r
-if "%2" == "/copy" set copy=true\r
-\r
-set EMACSBATCH=call %1\%emacs% -batch -q -no-site-file\r
-\r
-cd lisp\r
-%EMACSBATCH% -l ./dgnushack.el -f dgnushack-compile\r
-if not %copy%==true goto info\r
-attrib -r %1\..\..\xemacs-packages\lisp\gnus\*.*\r
-copy *.el? %1\..\..\xemacs-packages\lisp\gnus\r
-\r
-:info\r
-set EMACSINFO=%EMACSBATCH% -l infohack.el -f batch-makeinfo\r
-cd ..\texi\r
-%EMACSINFO% message.texi\r
-%EMACSINFO% emacs-mime.texi\r
-%EMACSINFO% gnus.texi\r
-if not %copy%==true goto done\r
-copy gnus       %GNUS_INFO_DIR%\r
-copy gnus-?     %GNUS_INFO_DIR%\r
-copy gnus-??    %GNUS_INFO_DIR%\r
-copy message    %GNUS_INFO_DIR%\r
-copy message-?  %GNUS_INFO_DIR%\r
-copy emacs-mime %GNUS_INFO_DIR%\r
-copy sieve      %GNUS_INFO_DIR%\r
-copy pgg        %GNUS_INFO_DIR%\r
-echo Maybe you should add the following line to %GNUS_INFO_DIR%\dir:\r
-echo.\r
-echo * PGG: (pgg).             Emacs interface to various PGP implementations.\r
-echo * Sieve: (sieve). Managing Sieve scripts in Emacs.\r
-echo.\r
-\r
-:etc\r
-cd ..\etc\r
-copy gnus-tut.txt %1\..\..\xemacs-packages\etc\r
-\r
-:done\r
-cd ..\r
-goto end\r
-\r
-:usage\r
-echo Usage: make-x.bat :xemacs-dir: [/copy]\r
-echo.\r
-echo where: :xemacs-dir: is the directory you installed xemacs in \r
-echo                     (the directory where xemacs.exe is situated)\r
-echo                    eg. C:\Programme\XEmacs\XEmacs-21.4.3\i586-pc-win32\r
-echo        /copy indicates that the compiled files should be copied to your\r
-echo             emacs lisp, info, and etc directories\r
-echo.\r
-echo Note: If you have Emacs/w3 you should set the environment variable \r
-echo       W3DIR to the directory where w3 is installed eg.\r
-echo                 set W3DIR=C:\Progra~1\XEmacs\xemacs-packages\lisp\w3\r
-\r
-rem Restore PWD so whoever called this batch file doesn't get confused\r
-set PWD=%GNUS_PWD_SAVE%\r
-set GNUS_PWD_SAVE=\r
-set EMACSBATCH=\r
-set GNUS_INFO_DIR=\r
-:end\r
diff --git a/readme b/readme
deleted file mode 100644 (file)
index e3064ef..0000000
--- a/readme
+++ /dev/null
@@ -1,52 +0,0 @@
-This package contains a beta version of Gnus.  The lisp directory
-contains the source lisp files, and the texi directory contains a
-draft of the Gnus info pages.
-
-To use Gnus you first have to unpack the files, which you've obviously
-done, because you are reading this.
-
-You should definitely byte-compile the source files. To do that, you
-can simply say "./configure; make" in this directory.  If you are
-using XEmacs, you *must* say "make EMACS=xemacs".  In that case you
-may also want to pull down the package of nice glyphs from
-<URL:http://www.gnus.org/etc.tar.gz>.  It should be installed
-into the "gnus-5.4.53/etc" directory.
-
-Then you have to tell Emacs where Gnus is. You might put something
-like
-
-   (setq load-path (cons (expand-file-name "~/gnus-5.4.53/lisp") load-path))
-
-in your .emacs file, or wherever you keep such things.  
-
-To enable reading the Gnus manual, you could say something like:
-
-  (setq Info-default-directory-list 
-        (cons "~/gnus-5.4.53/texi" Info-default-directory-list))
-
-Note that Gnus and GNUS can't coexist in a single Emacs. They both use
-the same function and variable names.  If you have been running GNUS
-in your Emacs, you should probably exit that Emacs and start a new one
-to fire up Gnus.
-
-Gnus does absolutely not work with anything older than Emacs 19.33 or
-XEmacs 19.14.  So you definitely need a new Emacs.
-
-Then you do a `M-x gnus', and everything should... uhm... it should
-work, but it might not. Set `debug-on-error' to t, and mail me the
-backtraces, or, better yet, find out why Gnus does something wrong,
-fix it, and send me the diffs. :-)
-
-There are four main things I want your help and input on:
-
-1) Startup. Does everything go smoothly, and why not?
-
-2) Any errors while you read news normally?
-
-3) Any errors if you do anything abnormal?
-
-4) Features you do not like, or do like, but would like to tweak a
-   bit, and features you would like to see.
-
-Send any comments and all your bug fixes/complaints to
-`bugs@gnus.org'. 
diff --git a/texi/Makefile b/texi/Makefile
deleted file mode 100644 (file)
index ea5ef8f..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-TEXI2DVI=texi2dvi
-EMACS=emacs
-MAKEINFO=$(EMACS) -batch -q -no-site-file
-INFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
-XINFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
-LATEX=latex
-DVIPS=dvips
-PERL=perl
-INFODIR=/usr/local/info
-
-all: gnus message
-
-most: texi2latex.elc latex latexps
-
-.SUFFIXES: .texi .dvi .ps
-
-.texi:
-       $(MAKEINFO) -eval '(find-file "$<")' $(XINFOSWI)
-
-dvi: gnus.dvi message.dvi
-
-.texi.dvi :
-       $(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi
-       $(TEXI2DVI) gnustmp.texi
-       cp gnustmp.dvi $*.dvi
-       rm gnustmp.*
-
-refcard.dvi: refcard.tex gnuslogo.refcard gnusref.tex
-       $(LATEX) refcard.tex
-
-clean:
-       rm -f gnus.*.bak *.ky *.cp *.fn *.cps *.kys *.log *.aux *.dvi *.vr \
-       *.tp *.toc *.pg gnus.latexi *.aux *.[cgk]idx \
-       gnus.ilg gnus.ind gnus.[cgk]ind gnus.idx \
-       gnus.tmptexi *.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \
-       gnus.latexi*~* tmp/*.ps xface.tex picons.tex smiley.tex *.latexi
-
-makeinfo: 
-       makeinfo -o gnus gnus.texi      
-       makeinfo -o message message.texi        
-
-texi2latex.elc: texi2latex.el
-       $(EMACS) -batch -l bytecomp --eval '(byte-compile-file "texi2latex.el")'
-
-latex: gnus.texi texi2latex.elc
-       $(EMACS) -batch -q -no-site-file gnus.texi -l ./texi2latex.elc -f latexi-translate
-
-latexps: 
-       make texi2latex.elc
-       rm -f gnus.aux
-       egrep -v "label.*Index|chapter.*Index" gnus.latexi > gnus.tmplatexi1
-       $(LATEX) gnus.tmplatexi1
-       ./splitindex
-       makeindex -o gnus.kind gnus.kidx
-       makeindex -o gnus.cind gnus.cidx
-       makeindex -o gnus.gind gnus.gidx
-       sed 's/\\char 5E\\relax {}/\\symbol{"5E}/' < gnus.kind > gnus.tmpkind
-       mv gnus.tmpkind gnus.kind
-       egrep -v "end{document}" gnus.tmplatexi1 > gnus.tmplatexi
-       cat postamble.tex >> gnus.tmplatexi
-       $(LATEX) gnus.tmplatexi 
-       $(LATEX) gnus.tmplatexi 
-       $(DVIPS) -f gnus.dvi > gnus.ps
-
-pss:   
-       make latex
-       make latexps
-
-psout:
-       make latex
-       make latexboth
-       make out
-
-latexboth: 
-       rm -f gnus-manual-a4.ps.gz gnus-manual-standard.ps.gz 
-       make latexps
-       mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-a4.ps
-       gzip /local/tmp/larsi/gnus-manual-a4.ps 
-       sed 's/,a4paper//' gnus.latexi > gnus-standard.latexi 
-       mv gnus-standard.latexi gnus.latexi
-       make latexps
-       mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-standard.ps 
-       gzip /local/tmp/larsi/gnus-manual-standard.ps 
-
-out:
-       cp /local/tmp/larsi/gnus-manual-standard.ps.gz \
-       /local/tmp/larsi/gnus-manual-a4.ps.gz \
-       /local/ftp/pub/emacs/gnus/manual
-       mv /local/tmp/larsi/gnus-manual-standard.ps.gz \
-       /local/tmp/larsi/gnus-manual-a4.ps.gz \
-       /hom/larsi/www_docs/www.gnus.org/documents
-
-veryclean:
-       make clean
-       rm -f gnus.dvi gnus.ps
-
-distclean:
-       make clean
-       rm -f *.orig *.rej *.elc *~ gnus gnus-[0-9] gnus-[0-9][0-9]
-       rm -f message message-[0-9]
-
-install:
-       cp gnus gnus-[0-9] gnus-[0-9][0-9] $(INFODIR)
-       cp message $(INFODIR)
-
-
-tmps:
-       if [ ! -e tmp ]; then mkdir tmp; fi
-       make screens
-       make herdss
-       make etcs
-       make piconss
-       make xfaces
-       make smiley
-       make miscs
-
-herdss:
-       cd herds ; for i in new-herd-[0-9]*.gif; do echo $$i; giftopnm $$i | pnmcrop -white | pnmmargin -white 9 | pnmscale 2 | pnmconvol convol5.pnm  | ppmtopgm | pnmdepth 255 | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done
-       cd herds ; giftopnm new-herd-section.gif | pnmscale 4 | pnmconvol convol11.pnm | ppmtopgm | pnmdepth 255 | pnmtops -noturn -width 100 -height 100 > ../tmp/new-herd-section.ps
-
-
-screens:
-       cd screen ; for i in *.gif; do echo $$i; giftopnm $$i | pnmmargin -black 1 | ppmtopgm | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done    
-
-miscs:
-       giftopnm misc/larsi.gif | ppmtopgm | pnmtops -noturn > tmp/larsi.ps
-       tifftopnm misc/eseptember.tif | pnmscale 4 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/september.ps
-       tifftopnm misc/fseptember.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/fseptember.ps
-       tifftopnm misc/fred.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/fred.ps
-       tifftopnm misc/ered.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/red.ps
-
-etcs:
-       cd etc; for i in gnus-*.xpm; do echo $$i; xpmtoppm $$i | ppmtopgm | pnmdepth 255 | pnmtops -noturn > ../tmp/`basename $$i .xpm`.ps; done
-
-piconss:
-       cd picons; for i in *.xbm; do echo $$i; xbmtopbm $$i | pnmtops -noturn > ../tmp/picons-`basename $$i .xbm`.ps; done
-       cd picons; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/picons-`basename $$i .gif`.ps; done
-       for i in tmp/picons-*.ps; do echo "\\gnuspicon{$$i}"; done > picons.tex
-
-xfaces:
-       cd xface; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/xface-`basename $$i .gif`.ps; done
-       for i in tmp/xface-*.ps; do \
-               if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
-               a="h"; echo -n "\\gnusxface{$$i}"; fi done > xface.tex; \
-               if [ -n "$$a" ]; then echo "{$$i}" >> xface.tex; fi
-
-smiley:
-       cd smilies; tifftopnm BigFace.tif | ppmtopgm | pnmtops > ../tmp/BigFace.ps
-       cd smilies; for i in *.xpm; do echo $$i; sed "s/none/#FFFFFF/" $$i | xpmtoppm | ppmtopgm | pnmdepth 255 | pnmtops > ../tmp/smiley-`basename $$i .xpm`.ps; done
-       for i in tmp/smiley-*.ps; do \
-               if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
-               a="h"; echo -n "\\gnussmiley{$$i}"; fi done > smiley.tex; \
-               if [ -n "$$a" ]; then echo "{$$i}" >> smiley.tex; fi
-
-pspackage:
-       tar czvf pspackage.tar.gz gnus-faq.texi gnus.texi herds misc pagestyle.sty picons pixidx.sty postamble.tex ps screen smilies splitindex texi2latex.el xface Makefile README etc
-
-complete:
-       make texi2latex.elc
-       make tmps
-       make pss
diff --git a/texi/bk-a4.tex b/texi/bk-a4.tex
deleted file mode 100644 (file)
index 20d13ab..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-% Reference Booklet for (ding) Gnus, A4 format.
-% To be processed with latex 2e
-\documentclass{article}
-
-\usepackage{supertabular}
-
-\newlength{\logowidth} \setlength{\logowidth}{6.861in}
-\newlength{\logoheight} \setlength{\logoheight}{7.013in}
-
-\def\Guide{Card}\def\guide{card}
-\def\logoscale{0.25}
-
-\usepackage{epsfig}
-
-\textwidth 4.9in \textheight 7.35in \topmargin -1.0in
-\oddsidemargin -0.5in \evensidemargin -0.5in
-\begin{document}
-\small%\footnotesize
-\input{booklet}
-\end{document}
diff --git a/texi/bk-lt.tex b/texi/bk-lt.tex
deleted file mode 100644 (file)
index 0329059..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-% Reference Booklet for (ding) Gnus, Letter format.
-% To be processed with latex 2e
-\documentclass{article}
-
-\usepackage{supertabular}
-
-\newlength{\logowidth} \setlength{\logowidth}{6.861in}
-\newlength{\logoheight} \setlength{\logoheight}{7.013in}
-
-\def\Guide{Card}\def\guide{card}
-\def\logoscale{0.25}
-
-\usepackage{epsfig}
-
-\textwidth 4.5in \textheight 7.5in \topmargin -1.0in
-\oddsidemargin -0.5in \evensidemargin -0.5in
-\begin{document}
-\small%\footnotesize
-\input{booklet}
-\end{document}
diff --git a/texi/booklet.tex b/texi/booklet.tex
deleted file mode 100644 (file)
index b6ee207..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-% include file for the Reference Booklet (16 pages).
-\def\Guide{Booklet}\def\guide{booklet}
-\def\logoscale{0.5}
-\def\sec{\section}
-\def\subsec{\subsection}
-\def\subsubsec{\subsubsection}
-\def\blankpage{\vspace*{\fill}\par
-%\centerline{(This page intentionally left blank.)}
-\par\vspace*{\fill}\pagebreak}
-
-\input{gnusref}
-
-\setcounter{page}{0}
-\thispagestyle{empty}
-\vspace*{\fill}
-\Title
-\vspace{0.4in}
-\Logo{booklet}
-\vspace*{\fill}
-\pagebreak
-
-% TODO: how does this work ?
-%\tableofcontents
-
-\Notes
-%
-\section*{Group-Mode}
-\GroupModeGeneral
-    \subsection*{Group Subscribedness-Levels}
-    \GroupLevels
-    \subsection*{List Groups}
-    \ListGroups
-    \subsection*{Create/Edit Foreign Groups}
-    \CreateEditGroups
-    \subsection*{Unsubscribe, Kill and Yank Groups}
-    \SubscribeKillYankGroups
-    \subsection*{Mark Groups}
-    \MarkGroups
-    \subsection*{Group-Unplugged}
-    \GroupUnplugged
-% topics in group-mode
-    \subsection*{Group Topics}
-    \GroupTopicsGeneral
-    \subsubsection*{Topic Sorting}
-    \TopicSorting
-\pagebreak
-% summary-mode
-\section*{Summary-Mode}
-\SummaryModeGeneral
-    \subsection*{Select Articles}
-    \SelectArticles
-%
-    \subsection*{Threading}
-    \Threading
-%
-    \subsection*{Limiting}
-    \Limiting
-    \subsection*{Sort the Summary-Buffer}
-    \SortSummary
-    \subsection*{Score (Value) Commands}
-    \Scoring
-% 
-    \subsection*{MIME operations from the Summary-Buffer}
-    \MIMESummary
-    \subsection*{Extract Series (Uudecode etc)}
-    \ExtractSeries
-    \subsection*{Output Articles}
-    \OutputArticles
-%
-    \subsection*{Post, Followup, Reply, Forward, Cancel}
-    \PostReplyetc
-    \subsection*{Message-Composition}
-    \MsgCompositionGeneral
-        \subsubsection*{Jumping in message-buffer}
-        \MsgCompositionMovementArticle
-        \subsubsection*{Attachments/MML}
-        \MsgCompositionMML
-% marking articles
-    \subsection*{Mark Articles}
-    \MarkArticlesGeneral
-        \subsubsection*{Mark Based on Score}
-        \MarkByScore
-        \subsubsection*{The Process Mark}
-        \ProcessMark
-        \subsubsection*{Mark Indication-Characters}
-        \MarkCharacters
-%
-    \subsection*{Summary-Unplugged}
-    \SummaryUnplugged
-    \subsection*{Mail-Group Commands}
-    \MailGroups
-    \subsection*{Draft-Group Commands}
-    \DraftGroup
-% exiting
-    \subsection*{Exit the Summary-Buffer}
-    \ExitSummary
-%
-%
-\section*{Article Mode (reading)}
-\ArticleModeGeneral
-    \subsection*{Wash the Article-Buffer}
-    \WashArticle
-    \subsubsection*{Blank Lines and Whitespace}
-    \BlankAndWhitespace
-    \subsubsection*{Picons, X-faces, Smileys}
-    \Picons
-    \subsubsection*{Time and Date}
-    \TimeAndDate
-    \subsection*{Hide/Highlight Parts of the Article}
-    \HideHighlightArticle
-    \subsection*{MIME operations from the Article-Buffer (reading)}
-    \MIMEArticleMode
-%
-%
-\section*{Server Mode}
-\ServerMode
-    \subsection*{Unplugged-Server}
-    \ServerUnplugged
-%
-%
-\section*{Browse Server Mode}
-\BrowseServer
-
-%\pagebreak
-\vspace*{\fill}
-\Copyright
-
-%% \pagebreak
-%% \Notes
-%% \GroupLevels
-%% \Marks
-%% \General
-%% \ServerMode
-%% \BrowseServer
-%% \ArticleMode
-%% \pagebreak
-
-%% \GroupMode
-%% \ListGroups     
-%% \CreateGroups   
-%% \SortGroups     
-%% \SOUP           
-%% \MarkGroups     
-%% \Unsubscribe    
-%% \GroupTopics    
-%% \SummaryMode    
-%% \SortSummary    
-%% \Article        
-%% \MailGroup      
-%% \Limit          
-%% \GotoArticle    
-%% \MarkArticles   
-%% \MarkScore      
-%% \ProcessMark    
-%% \OutputArticles 
-%% \Send           
-%% \Exit           
-%% \Thread         
-%% \Score          
-%% \Wash           
-%% \Hide           
-%% \Highlight      
-%% \Extract        
-%% \PickAndRead    
-
-%% %\pagebreak
-%% %\sec{Personal Notes}
-%% %\blankpage
-
-%% \thispagestyle{empty}
-%% \vspace*{\fill}
-%% \CopyRight
diff --git a/texi/custom.texi b/texi/custom.texi
deleted file mode 100644 (file)
index 5b6fe4a..0000000
+++ /dev/null
@@ -1,695 +0,0 @@
-\input texinfo.tex
-
-@c %**start of header
-@setfilename custom
-@settitle The Customization Library
-@iftex
-@afourpaper
-@headings double
-@end iftex
-@c %**end of header
-
-@node Top, Introduction, (dir), (dir)
-@comment  node-name,  next,  previous,  up
-@top The Customization Library
-
-Version: 1.82
-
-@menu
-* Introduction::                
-* User Commands::               
-* The Customization Buffer::    
-* Declarations::                
-* Utilities::                   
-* The Init File::               
-* Wishlist::                    
-@end menu
-
-@node   Introduction, User Commands, Top, Top
-@comment  node-name,  next,  previous,  up
-@section Introduction
-
-This library allows customization of @dfn{user options}.  Currently two
-types of user options are supported, namely @dfn{variables} and
-@dfn{faces}.  Each user option can have four different values
-simultaneously:
-@table @dfn
-@item factory setting
-The value specified by the programmer.
-@item saved value
-The value saved by the user as the default for this variable.  This
-overwrites the factory setting when starting a new emacs.
-@item current value
-The value used by Emacs.  This will not be remembered next time you
-run Emacs.
-@item widget value
-The value entered by the user in a customization buffer, but not yet
-applied.
-@end table
-
-Variables also have a @dfn{type}, which specifies what kind of values
-the variable can hold, and how the value is presented in a customization
-buffer.  By default a variable can hold any valid expression, but the
-programmer can specify a more limited type when declaring the variable.
-
-The user options are organized in a number of @dfn{groups}.  Each group
-can contain a number user options, as well as other groups.  The groups
-allows the user to concentrate on a specific part of emacs.
-
-@node  User Commands, The Customization Buffer, Introduction, Top
-@comment  node-name,  next,  previous,  up
-@section User Commands
-
-The following commands will create a customization buffer:
-
-@table @code
-@item customize
-Create a customization buffer containing a specific group, by default
-the @code{emacs} group.
-
-@item customize-variable
-Create a customization buffer containing a single variable.  
-
-@item customize-face
-Create a customization buffer containing a single face.
-
-@item customize-apropos
-Create a customization buffer containing all variables, faces, and
-groups that match a user specified regular expression.
-@end table
-
-@node The Customization Buffer, Declarations, User Commands, Top
-@comment  node-name,  next,  previous,  up
-@section The Customization Buffer.
-
-The customization buffer allows the user to make temporary or permanent
-changes to how specific aspects of emacs works, by setting and editing
-user options.  
-
-The customization buffer contains three types of text:
-
-@table @dfn
-@item informative text
-where the normal editing commands are disabled.
-
-@item editable fields
-where you can edit with the usual emacs commands.  Editable fields are
-usually displayed with a grey background if your terminal supports
-colors, or an italic font otherwise.
-
-@item buttons
-which can be activated by either pressing the @kbd{@key{ret}} while
-point is located on the text, or pushing @kbd{mouse-2} while the mouse
-pointer is above the tex.  Buttons are usually displayed in a bold
-font. 
-@end table
-
-You can move to the next the next editable field or button by pressing
-@kbd{@key{tab}} or the previous with @kbd{M-@key{tab}}.  Some buttons
-have a small helpful message about their purpose, which will be
-displayed when you move to it with the @key{tab} key.  
-
-The buffer is divided into three part, an introductory text, a list of
-customization options, and a line of customization buttons.  Each part
-will be described in the following. 
-
-@menu
-* The Introductory Text::       
-* The Customization Options::   
-* The Variable Options::        
-* The Face Options::            
-* The Group Options::           
-* The State Button::            
-* The Customization Buttons::   
-@end menu
-
-@node  The Introductory Text, The Customization Options, The Customization Buffer, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection  The Introductory Text
-
-The start of the buffer contains a short explanation of what it is, and
-how to get help.  It will typically look like this:
-
-@example
-This is a customization buffer.
-Push RET or click mouse-2 on the word _help_ for more information.
-@end example
-
-Rather boring.  It is mostly just informative text, but the word
-@samp{help} is a button that will bring up this document when
-activated.  
-
-@node  The Customization Options, The Variable Options, The Introductory Text, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Customization Options
-
-Each customization option looks similar to the following text:
-
-@example
- *** custom-background-mode: default 
- State: this item is unchanged from its factory setting.
- [ ] [?] The brightness of the background.
-@end example
-
-The option contains the parts described below.
-
-@table @samp
-@item ***
-The Level Button.  The customization options in the buffer are organized
-in a hierarchy, which is indicated by the number of stars in the level
-button.  The top level options will be shown as @samp{*}.  When they are
-expanded, the suboptions will be shown as @samp{**}.  The example option
-is thus a subsuboption.
-
-Activating the level buttons will toggle between hiding and exposing the
-content of that option.  The content can either be the value of the
-option, as in this example, or a list of suboptions.
-
-@item custom-background-mode
-This is the tag of the the option.  The tag is a name of a variable, a
-face, or customization group.  Activating the tag has an effect that
-depends on the exact type of the option.  In this particular case,
-activating the tag will bring up a menu that will allow you to choose
-from the three possible values of the `custom-background-mode'
-variable. 
-
-@item default
-After the tag, the options value is shown.  Depending on its type, you
-may be able to edit the value directly.  If an option should contain a
-file name, it is displayed in an editable field, i.e. you can edit it
-using the standard emacs editing commands.
-
-@item State: this item is unchanged from its factory setting.
-The state line.  This line will explain the state of the option,
-e.g. whether it is currently hidden, or whether it has been modified or
-not.  Activating the button will allow you to change the state, e.g. set
-or reset the changes you have made.  This is explained in detail in the
-following sections.
-
-@item [ ]
-The magic button.  This is an abbreviated version of the state line. 
-
-@item [?] 
-The documentation button.  If the documentation is more than one line,
-this button will be present.  Activating the button will toggle whether
-the complete documentation is shown, or only the first line.
-
-@item The brightness of the background.
-This is a documentation string explaining the purpose of this particular
-customization option.
-
-@end table
-
-@node  The Variable Options, The Face Options, The Customization Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Variable Options
-
-The most common customization options are emacs lisp variables.  The
-actual editing of these variables depend on what type values the
-variable is expected to contain.  For example, a lisp variable whose
-value should be a string will typically be represented with an editable
-text field in the buffer, where you can change the string directly.  If
-the value is a list, each item in the list will be presented in the
-buffer buffer on a separate line, with buttons to insert new items in
-the list, or delete existing items from the list.  You may want to see 
-@ref{User Interface,,, widget, The Widget Library}, where some examples
-of editing are discussed.  
-
-You can either choose to edit the value directly, or edit the lisp
-value for that variable.  The lisp value is a lisp expression that
-will be evaluated when you start emacs.  The result of the evaluation
-will be used as the initial value for that variable.  Editing the
-lisp value is for experts only, but if the current value of the
-variable is of a wrong type (i.e. a symbol where a string is expected),
-the `edit lisp' mode will always be selected.
-
-You can see what mode is currently selected by looking at the state
-button.  If it uses parenthesises (like @samp{( )}) it is in edit lisp
-mode, with square brackets (like @samp{[ ]}) it is normal edit mode.
-You can switch mode by activating the state button, and select either
-@samp{Edit} or @samp{Edit lisp} from the menu.
-
-You can change the state of the variable with the other menu items:
-
-@table @samp
-@item Set
-When you have made your modifications in the buffer, you need to
-activate this item to make the modifications take effect.  The
-modifications will be forgotten next time you run emacs.
-
-@item Save
-Unless you activate this item instead!  This will mark the modification
-as permanent, i.e. the changes will be remembered in the next emacs
-session.
-
-@item Reset
-If you have made some modifications and not yet applied them, you can
-undo the modification by activating this item.
-
-@item Reset to Saved
-Activating this item will reset the value of the variable to the last
-value you marked as permanent with `Save'.
-
-@item Reset to Factory Settings
-Activating this item will undo all modifications you have made, and
-reset the value to the initial value specified by the program itself. 
-@end table
-
-By default, the value of large or complicated variables are hidden.   You
-can show the value by clicking on the level button.
-
-@node  The Face Options, The Group Options, The Variable Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Face Options
-
-A face is an object that controls the appearance of some buffer text.
-The face has a number of possible attributes, such as boldness,
-foreground color, and more.  For each attribute you can specify whether
-this attribute is controlled by the face, and if so, what the value is.
-For example, if the attribute bold is not controlled by a face, using
-that face on some buffer text will not affect its boldness.  If the bold
-attribute is controlled by the face, it can be turned either on or of.
-
-It is possible to specify that a face should have different attributes
-on different device types.  For example, a face may make text red on a
-color device, and bold on a monochrome device.  You do this by
-activating `Edit All' in the state menu.
-
-The way this is presented in the customization buffer is to have a list
-of display specifications, and for each display specification a list of
-face attributes.  For each face attribute, there is a checkbox
-specifying whether this attribute has effect and what the value is.
-Here is an example:
-
-@example
- *** custom-invalid-face: (sample)
- State: this item is unchanged from its factory setting.
- [ ] Face used when the customize item is invalid.
- [INS] [DEL] Display: [ ] Type: [ ] X [ ] PM [ ] Win32 [ ] DOS [ ] TTY
-                      [X] Class: [X] Color [ ] Grayscale [ ] Monochrome
-                      [ ] Background: [ ] Light [ ] Dark
-             Attributes: [ ] Bold: off 
-                         [ ] Italic: off 
-                         [ ] Underline: off 
-                         [X] Foreground: yellow (sample)
-                         [X] Background: red (sample)
-                         [ ] Stipple:  
- [INS] [DEL] Display: all
-             Attributes: [X] Bold: on 
-                         [X] Italic: on 
-                         [X] Underline: on 
-                         [ ] Foreground: default (sample)
-                         [ ] Background: default (sample)
-                         [ ] Stipple:  
- [INS]
-@end example
-
-This has two display specifications.  The first will match all color
-displays, independently on what window system the device belongs to, and
-whether background color is dark or light.  For devices matching this
-specification, @samp{custom-invalid-face} will force text to be
-displayed in yellow on red, but leave all other attributes alone.
-
-The second display will simply match everything.  Since the list is
-prioritised, this means that it will match all non-color displays.  For
-these, the face will not affect the foreground or background color, but
-force the font to be both bold, italic, and underline.
-
-You can add or delete display specifications by activating the
-@samp{[INS]} and @samp{[DEL]} buttons, and modify them by clicking on
-the check boxes.  The first checkbox in each line in the display
-specification is special.  It specify whether this particular property
-will even be relevant.  By not checking the box in the first display, we
-match all device types, also device types other than those listed.
-
-After modifying the face, you can activate the state button to make the
-changes take effect.  The menu items in the state button menu is similar
-to the state menu items for variables described in the previous section.
-
-@node  The Group Options, The State Button, The Face Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Group Options
-
-Since Emacs has approximately a zillion configuration options, they have
-been organized in groups.  Each group can contain other groups, thus
-creating a customization hierarchy.  The nesting of the customization
-within the visible part of this hierarchy is indicated by the number of
-stars in the level button.
-
-Since there is really no customization needed for the group itself, the
-menu items in the groups state button will affect all modified group
-members recursively.  Thus, if you activate the @samp{Set} menu item,
-all variables and faces that have been modified and belong to that group
-will be applied.  For those members that themselves are groups, it will
-work as if you had activated the @samp{Set} menu item on them as well.
-
-@node  The State Button, The Customization Buttons, The Group Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The State Line and The Magic Button
-
-The state line has two purposes.  The first is to hold the state menu,
-as described in the previous sections.  The second is to indicate the
-state of each customization item.  
-
-For the magic button, this is done by the character inside the brackets.
-The following states have been defined, the first that applies to the
-current item will be used:
-
-@table @samp
-@item -
-The option is currently hidden.  For group options that means the
-members are not shown, for variables and faces that the value is not
-shown.  You cannot perform any of the state change operations on a
-hidden customization option.
-
-@item *
-The value if this option has been modified in the buffer, but not yet
-applied.  
-
-@item +
-The item has has been set by the user.
-
-@item :
-The current value of this option is different from the saved value.   
-
-@item !
-The saved value of this option is different from the factory setting.
-
-@item @@
-The factory setting of this option is not known.  This occurs when you
-try to customize variables or faces that have not been explicitly
-declared as customizable.
-
-@item SPC
-The factory setting is still in effect.
-
-@end table
-
-For non-hidden group options, the state shown is the most severe state
-of its members, where more severe means that it appears earlier in the
-list above (except hidden members, which are ignored).
-
-@node  The Customization Buttons,  , The State Button, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Customization Buttons
-
-The last part of the customization buffer looks like this:
-
-@example
-[Set] [Save] [Reset] [Done]
-@end example
-
-Activating the @samp{[Set]}, @samp{[Save]}, or @samp{[Reset]}
-button will affect all modified customization items that are visible in
-the buffer.  @samp{[Done]} will bury the buffer.
-
-@node   Declarations, Utilities, The Customization Buffer, Top
-@comment  node-name,  next,  previous,  up
-@section Declarations
-
-This section describes how to declare customization groups, variables,
-and faces.  It doesn't contain any examples, but please look at the file
-@file{cus-edit.el} which contains many declarations you can learn from.
-
-@menu
-* Declaring Groups::            
-* Declaring Variables::         
-* Declaring Faces::             
-* Usage for Package Authors::   
-@end menu
-
-All the customization declarations can be changes by keyword arguments.
-Groups, variables, and faces all share these common keywords:
-
-@table @code
-@item :group
-@var{value} should be a customization group. 
-Add @var{symbol} to that group. 
-@item :link
-@var{value} should be a widget type. 
-Add @var{value} to the extrenal links for this customization option.
-Useful widget types include @code{custom-manual}, @code{info-link}, and
-@code{url-link}. 
-@item :load
-Add @var{value} to the files that should be loaded nefore displaying
-this customization option.  The value should be iether a string, which
-should be a string which will be loaded with @code{load-library} unless
-present in @code{load-history}, or a symbol which will be loaded with
-@code{require}. 
-@item :tag
-@var{Value} should be a short string used for identifying the option in
-customization menus and buffers.  By default the tag will be
-automatically created from the options name.
-@end table
-
-@node  Declaring Groups, Declaring Variables, Declarations, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Declaring Groups
-
-Use @code{defgroup} to declare new customization groups. 
-
-@defun defgroup symbol members doc [keyword value]...
-Declare @var{symbol} as a customization group containing @var{members}. 
-@var{symbol} does not need to be quoted.
-
-@var{doc} is the group documentation.
-
-@var{members} should be an alist of the form ((@var{name}
-@var{widget})...) where @var{name} is a symbol and @var{widget} is a
-widget for editing that symbol.  Useful widgets are
-@code{custom-variable} for editing variables, @code{custom-face} for
-editing faces, and @code{custom-group} for editing groups.@refill
-
-Internally, custom uses the symbol property @code{custom-group} to keep
-track of the group members, and @code{group-documentation} for the
-documentation string. 
-
-The following additional @var{keyword}'s are defined:
-
-@table @code
-@item :prefix
-@var{value} should be a string.  If the string is a prefix for the name
-of a member of the group, that prefix will be ignored when creating a
-tag for that member.
-@end table
-@end defun
-
-@node  Declaring Variables, Declaring Faces, Declaring Groups, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Declaring Variables
-
-Use @code{defcustom} to declare user editable variables.
-
-@defun defcustom symbol value doc [keyword value]...
-Declare @var{symbol} as a customizable variable that defaults to @var{value}.
-Neither @var{symbol} nor @var{value} needs to be quoted.
-If @var{symbol} is not already bound, initialize it to @var{value}.
-
-@var{doc} is the variable documentation.
-
-The following additional @var{keyword}'s are defined:
-
-@table @code
-@item :type    
-@var{value} should be a widget type.
-@item :options
-@var{value} should be a list of possible members of the specified type.
-For hooks, this is a list of function names.
-@end table
-
-@xref{Sexp Types,,,widget,The Widget Library}, for information about
-widgets to use together with the @code{:type} keyword.
-@end defun
-
-Internally, custom uses the symbol property @code{custom-type} to keep
-track of the variables type, @code{factory-value} for the program
-specified default value, @code{saved-value} for a value saved by the
-user, and @code{variable-documentation} for the documentation string.
-
-Use @code{custom-add-option} to specify that a specific function is
-useful as an meber of a hook.
-
-@defun custom-add-option symbol option
-To the variable @var{symbol} add @var{option}.
-
-If @var{symbol} is a hook variable, @var{option} should be a hook
-member.  For other types variables, the effect is undefined."
-@end defun
-
-@node  Declaring Faces, Usage for Package Authors, Declaring Variables, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Declaring Faces
-
-Faces are declared with @code{defface}.
-
-@defun defface face spec doc [keyword value]... 
-
-Declare @var{face} as a customizable face that defaults to @var{spec}.
-@var{face} does not need to be quoted.
-
-If @var{face} has been set with `custom-set-face', set the face attributes
-as specified by that function, otherwise set the face attributes
-according to @var{spec}.
-
-@var{doc} is the face documentation.
-
-@var{spec} should be an alist of the form @samp{((@var{display} @var{atts})...)}.
-
-@var{atts} is a list of face attributes and their values.  The possible
-attributes are defined in the variable `custom-face-attributes'.
-Alternatively, @var{atts} can be a face in which case the attributes of
-that face is used.
-
-The @var{atts} of the first entry in @var{spec} where the @var{display}
-matches the frame should take effect in that frame.  @var{display} can
-either be the symbol `t', which will match all frames, or an alist of
-the form @samp{((@var{req} @var{item}...)...)}@refill
-
-For the @var{display} to match a FRAME, the @var{req} property of the
-frame must match one of the @var{item}.  The following @var{req} are
-defined:@refill
-
-@table @code
-@item type
-(the value of (window-system))@*
-Should be one of @code{x} or @code{tty}.
-
-@item class
-(the frame's color support)@*
-Should be one of @code{color}, @code{grayscale}, or @code{mono}.
-
-@item background
-(what color is used for the background text)@*
-Should be one of @code{light} or @code{dark}.
-@end table
-  
-Internally, custom uses the symbol property @code{factory-face} for the
-program specified default face properties, @code{saved-face} for
-properties saved by the user, and @code{face-doc-string} for the
-documentation string.@refill
-
-@end defun
-
-@node Usage for Package Authors,  , Declaring Faces, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Usage for Package Authors
-
-The recommended usage for the author of a typical emacs lisp package is
-to create one group identifying the package, and make all user options
-and faces members of that group.  If the package has more than around 20
-such options, they should be divided into a number of subgroups, with
-each subgroup being member of the top level group.
-
-The top level group for the package should itself be member of one or
-more of the standard customization groups.  There exists a group for
-each @emph{finder} keyword.  Press @kbd{C-c p} to see a list of finder
-keywords, and add you group to each of them, using the @code{:group}
-keyword. 
-
-@node  Utilities, The Init File, Declarations, Top
-@comment  node-name,  next,  previous,  up
-@section Utilities
-
-These utilities can come in handy when adding customization support. 
-
-@deffn Widget custom-manual
-Widget type for specifying the info manual entry for a customization
-option.  It takes one argument, an info address.
-@end deffn
-
-@defun custom-add-to-group group member widget
-To existing @var{group} add a new @var{member} of type @var{widget},
-If there already is an entry for that member, overwrite it.
-@end defun
-
-@defun custom-add-link symbol widget
-To the custom option @var{symbol} add the link @var{widget}.
-@end defun
-
-@defun custom-add-load symbol load
-To the custom option @var{symbol} add the dependency @var{load}.
-@var{load} should be either a library file name, or a feature name.
-@end defun
-
-@defun custom-menu-create symbol &optional name
-Create menu for customization group @var{symbol}.
-If optional @var{name} is given, use that as the name of the menu. 
-Otherwise make up a name from @var{symbol}.
-The menu is in a format applicable to @code{easy-menu-define}.
-@end defun
-
-@node  The Init File, Wishlist, Utilities, Top
-@comment  node-name,  next,  previous,  up
-@section The Init File
-
-When you save the customizations, call to @code{custom-set-variables},
-@code{custom-set-faces} are inserted into the file specified by
-@code{custom-file}.  By default @code{custom-file} is your @file{.emacs}
-file.  If you use another file, you must explicitly load it yourself.
-The two functions will initialize variables and faces as you have
-specified.
-
-@node  Wishlist,  , The Init File, Top
-@comment  node-name,  next,  previous,  up
-@section Wishlist
-
-@itemize @bullet
-@item
-The menu items should be grayed out when the information is
-missing.  I.e. if a variable doesn't have a factory setting, the user
-should not be allowed to select the @samp{Factory} menu item.
-
-@item 
-Better support for keyboard operations in the customize buffer.
-
-@item
-Integrate with @file{w3} so you can customization buffers with much
-better formatting.  I'm thinking about adding a <custom>name</custom>
-tag.  The latest w3 have some support for this, so come up with a
-convincing example.
-
-@item
-Add an `examples' section, with explained examples of custom type
-definitions. 
-
-@item
-Support selectable color themes.  I.e., change many faces by setting one
-variable.
-
-@item
-Support undo using lmi's @file{gnus-undo.el}.
-
-@item
-Make it possible to append to `choice', `radio', and `set' options.
-
-@item
-Make it possible to customize code, for example to enable or disable a
-global minor mode.
-
-@item
-Ask whether set or modified variables should be saved in
-@code{kill-buffer-hook}. 
-
-Ditto for @code{kill-emacs-query-functions}.
-
-@item
-Command to check if there are any customization options that
-does not belong to an existing group. 
-
-@item
-Optionally disable the point-cursor and instead highlight the selected
-item in XEmacs.  This is like the *Completions* buffer in XEmacs.
-Suggested by Jens Lautenbacher
-@samp{<jens@@lemming0.lem.uni-karlsruhe.de>}.@refill
-
-@item
-Empty customization groups should start open (harder than it looks).
-
-@item
-Make it possible to include a comment/remark/annotation when saving an
-option.
-
-@end itemize
-
-@contents
-@bye
diff --git a/texi/gnuslogo-booklet.eps b/texi/gnuslogo-booklet.eps
deleted file mode 100644 (file)
index 95408ba..0000000
+++ /dev/null
@@ -1,1055 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: gnuslogo1.ps
-%%Creator: XV Version 3.00  Rev: 3/30/93  -  by John Bradley
-%%BoundingBox: 0 0 493 505
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define string to hold a scanline's worth of data
-/pix 62 string def
-
-% lower left corner
-0 0 translate
-
-% size of image (on paper, in 1/72inch coords)
-493.0 505.0 scale
-
-% dimensions of data
-493 505 1
-
-% mapping matrix
-[493 0 0 -505 0 505]
-
-{currentfile pix readhexstring pop}
-image
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff01fffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff8003ffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff0000ffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff8000007ffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff0000003ffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe0000000ffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff000000003fff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff000000000fff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffc0000000007ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffff80000000003ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffff00000000001ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffe00000000000ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffc00000000000ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffff8000000000007f8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffff0000000000003f8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffff0000000000003f8
-fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffe0000000000001f8
-fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffc0000000000000f8
-ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffc0000000000000f8
-ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffff8000000000000078
-fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffff0000000000000038
-fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffe0000000000000038
-fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffe0000000000000038
-fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffc0000000000000018
-ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffc0000000000000018
-ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff
-fffffffffffffffffffffffffffffffffff80000000000000018
-ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff
-fffffffffffffffffffffffffffffffffff80000000000000008
-ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff
-fffffffffffffffffffffffffffffffffff00000000000000008
-fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff
-fffffffffffffffffffffffffffffffffff00000000000000008
-fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffe00000000000000008
-fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffe00000000000000008
-fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffc00000000000000000
-ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff
-ffffffffffffffffffffffffffffffffffc00000000000000000
-ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff
-ffffffffffffffffffffffffffffffffff800000000000000000
-ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffff800000000000000000
-ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffff000040000000000000
-fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff
-ffffffffffffffffffffffffffffffffff0007ffc00000000000
-fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffe001ffffc0000000000
-fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff
-fffffffffffffffffffffffffffffffffc003ffffe0000000000
-fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff
-fffffffffffffffffffffffffffffffffc007fffffc000000000
-fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff
-fffffffffffffffffffffffffffffffff800fffffff000000000
-ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff
-fffffffffffffffffffffffffffffffff801fffffff800000000
-ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff
-fffffffffffffffffffffffffffffffff003ffffffff00000000
-ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff
-fffffffffffffffffffffffffffffffff007ffffffff00000000
-ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff
-ffffffffffffffffffffffffffffffffe00fffffffff80000000
-fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff
-ffffffffffffffffffffffffffffffffe01fffffffffc0000008
-fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff
-ffffffffffffffffffffffffffffffffc03fffffffffc0000008
-fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff
-ffffffffffffffffffffffffffffffffc07ffffffffff0000000
-fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff
-ffffffffffffffffffffffffffffffff807ffffffffff0000000
-fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff
-ffffffffffffffffffffffffffffffff80fffffffffff0000008
-fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff
-ffffffffffffffffffffffffffffffff81fffffffffff8000008
-fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff
-ffffffffffffffffffffffffffffffff01fffffffffff8000008
-ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff
-ffffffffffffffffffffffffffffffff03fffffffffffc000008
-ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff
-fffffffffffffffffffffffffffffffe03fffffffffffc000008
-ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff
-fffffffffffffffffffffffffffffffe07fffffffffffe000008
-ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff
-fffffffffffffffffffffffffffffffe07fffffffffffe000008
-ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff
-fffffffffffffffffffffffffffffffe0ffffffffffffe000008
-ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff
-fffffffffffffffffffffffffffffffc0ffffffffffffe000008
-ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff
-fffffffffffffffffffffffffffffffc1fffffffffffff000008
-ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff
-fffffffffffffffffffffffffffffffc3fffffffffffff000008
-ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff
-fffffffffffffffffffffffffffffff87fffffffffffff000008
-ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff
-fffffffffffffffffffffffffffffff87fffffffffffff000008
-ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff
-fffffffffffffffffffffffffffffff87fffffffffffff000008
-ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff
-fffffffffffffffffffffffffffffff8ffffffffffffff000008
-ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff
-fffffffffffffffffffffffffffffffcffffffffffffff000008
-fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff
-ffffffffffffffffffffffffffffe7fdffffffffffffff000008
-fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff
-ffffffffffffffffffffffffffffe7fdffffffffffffff000008
-fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff
-ffffffffffffffffffffffffffffc7ffffffffffffffff000008
-fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff
-fffffffffeffffffffffffffffff87ffffffffffffffff000008
-f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff
-fffffffffcffffffffffffffffff87ffffffffffffffff000008
-f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff
-fffffffff8ffffffffffffffffff07ffffffffffffffff000008
-f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff
-fffffffff8fffffffffffffffffe0fffffffffffffffff000008
-f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff
-fffffffff0fffffffffffffffffe0fffffffffffffffff000018
-e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff
-fffffffff0fffffffffffffffffc0fffffffffffffffff000018
-e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff
-ffffffffe0fffffffffffffffffc1fffffffffffffffff000018
-c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff
-ffffffffe0fffffffffffffffff81fffffffffffffffff000018
-c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff
-ffffffffc0fffffffffffffffff83fffffffffffffffff000018
-800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff
-ffffffff01fffffffffffffffff03fffffffffffffffff000038
-800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff
-ffffffff01fffffffffffffffff03fffffffffffffffff800038
-00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff
-fffffffe03ffffffffffffffffe07fffffffffffffffff800038
-00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff
-fffffffc03ffffffffffffffffe07fffffffffffffffff800038
-00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff
-fffffff803ffffffffffffffffc07fffffffffffffffff800038
-00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff
-fffffff007ffffffffffffffffc0ffffffffffffffffff800038
-0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff
-fffffff007ffffffffffffffff80ffffffffffffffffff800078
-0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff
-ffffffc00fffffffffffffffff81ffffffffffffffffff800078
-8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff
-ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8
-8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff
-ffffff801fffffffffffffffff03ffffffffffffffffff8000f8
-c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff
-fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8
-e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff
-fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8
-f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff
-fffff0003ffffffffffffffff80fffffffffffffffffff8000f8
-f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff
-ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8
-f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f
-ffff00007fffffffffffffffe01fffffffffffffffffff0001f8
-fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007
-fffc00007fffffffffffffffc01fffffffffffffffffff0001f8
-fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000
-ffe000007ffffbffffffffff801fffffffffffffffffff0001f8
-fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000
-00000000fffff3ffffffffff003fffffffffffffffffff0001f8
-fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000
-00000001fffff1fffffffffe003fffffffffffffffffff0003f8
-ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000
-00000001ffffe1fffffffffc007fffffffffffffffffff0003f8
-ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000
-00000003ffffe0fffffffff0007fffffffffffffffffff0003f8
-ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000
-00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8
-ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000
-00000007ffffc07fffffff8000ffffffffffffffffffff0003f8
-fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000
-00000007ffff803fffffff0000fffffffffffffffffffe0007f8
-fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000
-00000007ffff801ffffffc0001fffffffffffffffffffe0007f8
-fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000
-0000000fffff000ffffff80003fffffffffffffffffffe0007f8
-fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000
-0000000fffff0007ffffe00003fffffffffffffffffffe0007f8
-ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000
-0000001ffffe0001ffff800007fffffffffffffffffffe000ff8
-ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000
-0000001ffffe0000fffc000007fffffffffffffffffffe000ff8
-ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000
-0000003ffffe0000000000000ffffffffffffffffffffe000ff8
-fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000
-0000003ffffc0000000000000ffffffffffffffffffffe000ff8
-fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000
-0000007ffff80000000000001ffffffffffffffffffffe001ff8
-fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000
-0000007ffff80000000000001ffffffffffffffffffffe001ff8
-fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000
-000000fffff80000000000003ffffffffffffffffffffc001ff8
-fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000
-000003fffff00000000000007ffffffffffffffffffffc001ff8
-fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000
-000007ffffe00000000000007ffffffffffffffffffffe003ff8
-fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000
-000007ffffe0000000000000fffffffffffffffffffffc003ff8
-ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000
-00001fffffc0000000000001fffffffffffffffffffffc003ff8
-ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000
-00001fffffc0000000000003fffffffffffffffffffffc003ff8
-ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000
-00003fffff80000000000003fffffffffffffffffffffc007ff8
-ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000
-00007fffff80000000000007fffffffffffffffffffffc007ff8
-ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000
-0000ffffff0000000000000ffffffffffffffffffffffc007ff8
-fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000
-0001ffffff0000000000001ffffffffffffffffffffffc007ff8
-fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000
-0003fffffe0000000000001ffffffffffffffffffffff800fff8
-fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000
-0007fffffe0000000000003ffffffffffffffffffffff800fff8
-fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000
-001ffffffc0000000000007ffffffffffffffffffffff800fff8
-fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000
-003ffffffc000000000000fffffffffffffffffffffff800fff8
-ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000
-00fffffff8000000000003fffffffffffffffffffffff001fff8
-ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000
-03fffffff8000000000003fffffffffffffffffffffff001fff8
-ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000
-07fffffff0000000000007fffffffffffffffffffffff001fff8
-ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000
-3ffffffff000000000000ffffffffffffffffffffffff003fff8
-ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f
-fffffffff000000000003ffffffffffffffffffffffff003fff8
-ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffff800000000007ffffffffffffffffffffffff003fff8
-fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffff80000000000ffffffffffffffffffffffffe003fff8
-fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffc0000000003ffffffffffffffffffffffffe007fff8
-fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffe0000000007ffffffffffffffffffffffffe007fff8
-fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffe000000000fffffffffffffffffffffffffe00ffff8
-fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffff000000001fffffffffffffffffffffffffe00ffff8
-ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff
-ffffffffff800000007fffffffffffffffffffffffffc00ffff8
-ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff
-ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8
-ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff
-ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8
-ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff
-fffffffffff800001fffffffffffffffffffffffffffc01ffff8
-ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff
-fffffffffffe00007fffffffffffffffffffffffffffc01ffff8
-ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff
-ffffffffffff8003ffffffffffffffffffffffffffff801ffff8
-ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff803ffff8
-fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff803ffff8
-fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff803ffff8
-fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff007ffff8
-fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff007ffff8
-fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff007ffff8
-fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe01fffff8
-ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc01fffff8
-ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc01fffff8
-ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc01fffff8
-fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc03fffff8
-fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff803fffff8
-fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff803fffff8
-fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff007fffff8
-fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff007fffff8
-fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff007fffff8
-ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
-ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
-ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
-ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe01ffffff8
-ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
-ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
-ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffc03ffffff8
-fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff803ffffff8
-fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff803ffffff8
-fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff807ffffff8
-fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff807ffffff8
-fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff007ffffff8
-fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff00fffffff8
-fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff00fffffff8
-ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe01fffffff8
-ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe01fffffff8
-ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe01fffffff8
-ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe03fffffff8
-ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe03fffffff8
-ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffc07fffffff8
-ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffc07fffffff8
-fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff807fffffff8
-fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff807fffffff8
-fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff80ffffffff8
-fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff80ffffffff8
-fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff01ffffffff8
-fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff01ffffffff8
-fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff01ffffffff8
-fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffe01ffffffff8
-fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
-ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
-ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
-ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
-ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
-ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
-ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
-ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff80fffffffff8
-ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff81fffffffff8
-ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff81fffffffff8
-ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff01fffffffff8
-ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff03fffffffff8
-ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe03fffffffff8
-fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe03fffffffff8
-fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe03fffffffff8
-fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe07fffffffff8
-fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc07fffffffff8
-fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc07fffffffff8
-fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
-fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
-fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff80ffffffffff8
-fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff80ffffffffff8
-fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff00ffffffffff8
-fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff01ffffffffff8
-fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff01ffffffffff8
-fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffe01ffffffffff8
-ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffe03ffffffffff8
-ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffffdffffffffffffffffffe03ffffffffff8
-ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8
-ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
-fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff
-fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
-fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff
-fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
-fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff
-ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8
-ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff03ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff03ffffffffffffffffff01fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
-ffffffffffffffffff07ffffffffffffffffff01fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
-fffffffffffffffffe07fffffffffffffffffe01fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
-fffffffffffffffffc07fffffffffffffffffe03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
-fffffffffffffffffc07fffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
-fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
-fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
-fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
-fffffffffffffffff03ffffffffffffffffff807fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
-ffffffffffffffffe01ffffffffffffffffff807fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
-ffffffffffffffffe03ffffffffffffffffff807fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
-ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
-ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
-ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff
-ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
-ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
-fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
-fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
-fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff
-fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff
-fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff
-fffffffffffffff807ffffffffffffffffffc03ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffff807ffffffffffffffffff803ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffff00fffffffffffffffffff803ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffff00fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffe01fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffe03fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffc03fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff807fffffffffffffffffff00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff807fffffffffffffffffff00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff00ffffffffffffffffffff00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff00fffffffffffffffffffe00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffe01fffffffffffffffffffe01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffe03fffffffffffffffffffe01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffc03fffffffffffffffffffc01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffc07fffffffffffffffffffc01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffff807fffffffffffffffffffc03fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffff00ffffffffffffffffffffc03fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffff00ffffffffffffffffffff803fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffc03ffffffffffffffffffff807fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffc03ffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffff807ffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffff807ffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffff00fffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff
-fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
-fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
-fffffffffff803ffffffffffffffffffffc00ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff
-fffffffffff807ffffffffffffffffffffc00ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff
-fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff
-fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff
-ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
-ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
-ffffffffff801fffffffffffffffffffff801ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
-ffffffffff803fffffffffffffffffffff801ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff
-ffffffffff003fffffffffffffffffffff803ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff
-fffffffffe007fffffffffffffffffffff803ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff
-fffffffffc007fffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff
-fffffffffc00ffffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
-fffffffff800ffffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
-fffffffff801ffffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff
-fffffffff803ffffffffffffffffffffff007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff
-fffffffff003fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff
-ffffffffe007fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff
-ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff
-ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
-ffffffff800ffffffffffffffffffffffe00fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
-ffffffff000ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff
-fffffffe001ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
-fffffffc003ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
-9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff
-0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
-07fffff0007ffffffffffffffffffffffc01fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
-07ffffe000fffffffffffffffffffffffc01fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8
-03ffffc000fffffffffffffffffffffffc01fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0
-03ffff8001fffffffffffffffffffffff801fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0
-01ffff0003fffffffffffffffffffffff803fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
-00fffe0003fffffffffffffffffffffff803fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
-00fffe0003fffffffffffffffffffffff803fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0
-003ffc0007fffffffffffffffffffffff003fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80
-001fe0001ffffffffffffffffffffffff003fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00
-000fc0001ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00
-000000001ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00
-000000003ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00
-000000003ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800
-000000007fffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800
-000000007fffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000
-00000001ffffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000
-00000001ffffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000
-00000001ffffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000
-00000003ffffffffffffffffffffffffc00ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000
-00000003ffffffffffffffffffffffffc00ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000
-00000007ffffffffffffffffffffffffc00ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000
-0000000fffffffffffffffffffffffffc01ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000
-0000001fffffffffffffffffffffffffc01ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000
-0000001fffffffffffffffffffffffffc01ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000
-0000003fffffffffffffffffffffffffc01ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000
-0000007fffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000
-0000007fffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000
-000000ffffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000
-000001ffffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
-000001ffffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
-000003ffffffffffffffffffffffffff801ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000
-000003ffffffffffffffffffffffffff801ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000
-000007ffffffffffffffffffffffffff803ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000
-00000fffffffffffffffffffffffffff003ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000
-00000fffffffffffffffffffffffffff803ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000
-00001fffffffffffffffffffffffffff803ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200
-00003fffffffffffffffffffffffffff007ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700
-00007fffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80
-0000ffffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80
-0001ffffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0
-0001ffffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0
-0003ffffffffffffffffffffffffffff01fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0
-0007ffffffffffffffffffffffffffff01fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0
-0007ffffffffffffffffffffffffffff01fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8
-001fffffffffffffffffffffffffffff07fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc
-007fffffffffffffffffffffffffffff07fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe
-00ffffffffffffffffffffffffffffff07fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff
-dfffffffffffffffffffffffffffffff0ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff
-fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff
-fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff
-fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff
-fffffffffffffffffffffffffffffffe3ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff
-ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff
-ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
diff --git a/texi/gnuslogo-refcard.eps b/texi/gnuslogo-refcard.eps
deleted file mode 100644 (file)
index 41f1979..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-%!PS-Adobe-2.0 EPSF-1.2
-%%Creator: Adobe Illustrator 88(TM) format generated by CorelTRACE Version 2.0C
-%%Title:  /home/menja/c/larsi/gnus.eps
-%%BoundingBox: 17 11 127 122
-%%CreationDate: Tue Feb 20 01:51:37 1996
-%%DocumentFonts:
-%%ColorUsage: B & W
-%%TileBox: 17 11 127 122
-%%EndComments
-% Copyright 1992 Corel Corporation.
-
-% All rights reserved.
-.15 .15 scale
-
-/wPSMDict 150 dict def
-wPSMDict begin
-/bd {bind def} bind def
-/ld {load def} bd
-/xd {exch def} bd
-/_ null def
-/$c 0 def
-/$m 0 def
-/$y 0 def
-/$k 0 def
-/$t 1 def
-/$n _ def
-/$o 0 def
-/$C 0 def
-/$M 0 def
-/$Y 0 def
-/$K 0 def
-/$T 1 def
-/$N _ def
-/$O 0 def
-/$h false def
-/$al 0 def
-/$tr 0 def
-/$le 0 def
-/$lx 0 def
-/$ly 0 def
-/$ctm matrix currentmatrix def
-/@cp /closepath ld
-/@gs /gsave ld
-/@gr /grestore ld
-/@MN {2 copy le{pop}{exch pop}ifelse}bd
-/setcmykcolor where {pop}{/setcmykcolor{4 1 roll
-3 {3 index add 1 @MN 1 exch sub 3 1 roll} repeat
-setrgbcolor
-pop}bd}ifelse
-/@tc{dup 1 ge{pop}{4 {dup
-6 -1 roll
-mul
-exch}repeat
-pop}ifelse}bd
-/@scc{$c $m $y $k $t @tc setcmykcolor true}bd
-/@SCC{$C $M $Y $K $T @tc setcmykcolor true}bd
-/@sm{/$ctm $ctm currentmatrix def}bd
-/x {/$t xd /$n xd
-/$k xd /$y xd /$m xd /$c xd}bd
-/X {/$T xd /$N xd
-/$K xd /$Y xd /$M xd /$C xd}bd
-/g {1 exch sub 0 0 0
-4 -1 roll
-_ 1 x}bd
-/G {1 exch sub 0 0 0
-4 -1 roll
-_ 1 X}bd
-/k {_ 1 x}bd
-/K {_ 1 X}bd
-/d /setdash ld
-/i {dup 0 ne {setflat} {pop} ifelse}bd
-/j /setlinejoin ld
-/J /setlinecap ld
-/M /setmiterlimit ld
-/w /setlinewidth ld
-/O {/$o xd}bd
-/R {/$O xd}bd
-/c /curveto ld
-/C /c ld
-/l /lineto ld
-/L /l ld
-/m /moveto ld
-/n /newpath ld
-/N /newpath ld
-/F {@scc{eofill}if n} bd
-/f {@cp F}bd
-/S {@SCC{stroke}if n} bd
-/s {@cp
-S}bd
-/B {@gs F @gr
-S}bd
-/b {@cp B }bd
-/u {}bd
-/U {}bd
-%%EndProlog
-%%BeginSetup
-%%EndSetup
-1 i
-2 J
-0 j
-4 M
-[]0 d
-
-%%Note: traced as Normal_Outline
-0 g
-259.2 78.2 m
-327.3 178.5 L
-327.8 179.0 328.3 180.0 329.7 180.4 C
-373.4 241.9 L
-388.8 263.5 L
-389.2 264.0 390.7 264.4 391.6 265.4 C
-413.7 298.0 453.6 351.8 468.0 404.6 C
-467.5 405.6 467.5 407.0 467.5 407.0 C
-442.0 367.6 411.3 319.2 379.2 279.3 C
-372.0 267.3 366.7 265.9 361.9 254.8 C
-333.1 216.0 L
-323.5 207.3 311.0 185.2 302.8 175.6 C
-298.0 165.6 293.2 164.1 288.9 154.0 C
-282.2 147.8 282.2 139.6 276.4 132.4 C
-258.2 77.7 L
-258.2 77.7 259.2 78.2 259.2 78.2 C
-f
-0 g
-470.8 211.6 m
-470.8 211.6 472.3 212.1 472.3 212.1 C
-518.8 305.2 L
-531.3 317.2 L
-537.6 314.8 539.0 300.9 548.6 301.9 C
-555.8 301.9 554.8 302.8 561.6 306.2 C
-595.2 357.1 L
-595.6 358.0 597.6 358.5 598.5 360.0 C
-615.8 398.4 650.8 450.7 657.6 483.8 C
-658.0 486.2 658.0 488.1 658.0 489.6 C
-654.2 489.1 656.1 485.2 650.4 479.5 C
-634.5 446.8 611.5 402.2 592.8 377.2 C
-588.0 370.0 581.7 365.7 577.4 358.5 C
-570.2 355.6 568.3 351.3 560.1 356.6 C
-554.8 360.0 553.9 364.8 550.0 370.0 C
-548.1 371.5 550.0 370.5 547.2 371.0 C
-541.4 365.2 L
-511.2 319.6 484.3 276.0 471.8 220.3 C
-470.8 215.5 471.3 215.5 469.4 212.1 C
-469.4 212.1 470.8 211.6 470.8 211.6 C
-f
-0 g
-731.0 292.8 m
-756.0 351.3 751.6 407.0 771.3 468.0 C
-783.3 520.8 809.7 582.2 822.2 635.0 C
-829.4 684.4 855.8 732.0 825.1 789.1 C
-811.6 797.7 799.6 805.4 784.8 802.0 C
-757.9 792.0 732.9 743.0 726.2 712.8 C
-727.6 708.4 727.2 707.0 730.0 704.6 C
-731.0 704.1 732.9 704.1 734.4 704.6 C
-737.2 709.9 L
-754.0 747.3 L
-758.8 755.0 771.8 754.0 781.9 751.2 C
-788.1 748.3 791.5 745.9 797.7 744.0 C
-831.8 680.1 800.6 611.0 784.3 542.8 C
-765.6 478.5 748.3 431.5 739.2 370.5 C
-733.9 347.5 729.1 318.7 730.0 292.8 C
-730.0 292.8 731.0 292.8 731.0 292.8 C
-f
-0 g
-434.4 462.7 m
-460.3 496.8 462.2 532.8 458.4 575.5 C
-456.4 588.0 451.2 599.0 445.4 609.1 C
-435.3 620.1 435.3 622.5 421.9 630.7 C
-411.8 619.6 398.4 604.8 391.6 586.0 C
-393.6 581.7 396.4 584.1 401.7 577.9 C
-403.2 577.4 404.6 576.9 404.6 576.9 C
-407.0 574.5 406.0 573.6 410.4 571.2 C
-414.2 564.0 418.5 558.2 424.3 545.7 C
-437.2 526.5 428.1 489.6 433.9 462.2 C
-433.9 462.2 434.4 462.7 434.4 462.7 C
-f
-0 g
-226.0 482.4 m
-281.7 485.7 311.0 531.3 357.1 565.9 C
-362.8 572.1 364.8 574.0 368.6 580.3 C
-368.6 581.7 369.1 582.7 369.6 584.6 C
-370.0 585.6 371.5 587.0 372.9 588.0 C
-381.6 606.2 L
-377.2 605.2 374.8 602.8 371.0 597.6 C
-346.0 576.4 316.8 552.0 289.9 536.1 C
-288.9 535.2 288.0 534.2 288.0 534.2 C
-273.6 528.0 263.5 527.5 247.6 530.8 C
-242.4 535.2 239.0 536.1 238.0 544.3 C
-239.5 572.1 266.8 600.0 281.2 624.9 C
-293.7 637.9 300.4 650.4 311.5 668.1 C
-312.0 669.1 313.9 669.6 314.8 671.0 C
-319.6 679.6 L
-319.6 680.1 319.6 681.6 319.2 682.0 C
-285.6 649.4 258.7 601.4 229.9 555.8 C
-216.4 529.9 205.4 511.2 210.2 491.0 C
-212.6 483.8 218.8 484.8 226.0 482.4 C
-f
-0 g
-624.9 600.4 m
-645.1 606.2 L
-676.3 622.5 694.5 658.0 710.8 698.4 C
-710.4 704.1 711.3 704.6 712.3 709.4 C
-696.9 685.9 693.6 667.6 662.4 653.7 C
-654.7 651.3 649.4 650.4 639.3 650.8 C
-633.1 654.2 625.4 659.0 621.6 670.5 C
-597.6 620.6 L
-600.9 612.4 604.3 607.2 613.4 603.8 C
-617.2 603.3 621.1 601.4 624.9 600.4 C
-f
-0 g
-528.4 619.2 m
-548.6 617.2 564.9 629.2 578.8 645.6 C
-584.1 651.8 586.5 662.8 591.8 671.0 C
-593.2 681.6 603.8 690.2 601.9 704.1 C
-598.5 705.1 599.0 698.8 594.7 694.0 C
-581.7 679.6 L
-569.7 668.6 545.7 663.8 532.8 673.9 C
-487.2 697.9 467.5 754.5 413.2 772.8 C
-393.1 778.0 387.3 771.8 367.2 760.3 C
-360.9 755.5 357.6 744.9 351.3 740.6 C
-347.0 740.6 349.9 743.5 344.6 747.3 C
-344.1 748.8 343.6 750.2 343.6 750.2 C
-322.5 770.8 L
-312.9 775.2 300.9 784.3 287.0 779.0 C
-283.6 777.1 281.7 776.1 279.3 775.2 C
-250.0 750.7 229.4 705.6 181.4 697.4 C
-165.6 705.1 160.3 715.2 150.7 733.9 C
-130.5 685.4 L
-142.5 663.3 L
-147.3 661.9 147.3 660.4 151.2 655.6 C
-160.8 650.4 169.9 649.4 182.8 655.2 C
-212.1 676.8 L
-213.1 677.7 214.0 678.7 216.0 679.2 C
-238.5 695.5 250.5 727.6 279.3 735.3 C
-296.1 727.2 312.4 715.6 326.8 695.5 C
-330.2 688.3 331.6 684.9 335.5 681.1 C
-345.1 694.5 352.8 717.6 372.9 721.9 C
-423.3 726.7 453.6 670.5 498.2 631.6 C
-510.7 624.4 517.4 621.1 528.4 619.2 C
-f
-%%Trailer
-end
-showpage
diff --git a/texi/gnuslogo.refcard b/texi/gnuslogo.refcard
deleted file mode 100644 (file)
index aacf40e..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-%!PS-Adobe-2.0 EPSF-1.2
-%%Creator: Adobe Illustrator 88(TM) format generated by CorelTRACE Version 2.0C
-%%Title:  /home/menja/c/larsi/gnus.eps
-%%BoundingBox: 0 0 924.5 907.2
-%%CreationDate: Tue Feb 20 01:51:37 1996
-%%DocumentFonts:
-%%ColorUsage: B & W
-%%TileBox: 0 0 924.5 907.2
-%%EndComments
-%%BeginProcSet:Adobe_Illustrator_1.1 0 0
-% Copyright 1992 Corel Corporation.
-
-% All rights reserved.
-.15 .15 scale
-
-/wPSMDict 150 dict def
-wPSMDict begin
-/bd {bind def} bind def
-/ld {load def} bd
-/xd {exch def} bd
-/_ null def
-/$c 0 def
-/$m 0 def
-/$y 0 def
-/$k 0 def
-/$t 1 def
-/$n _ def
-/$o 0 def
-/$C 0 def
-/$M 0 def
-/$Y 0 def
-/$K 0 def
-/$T 1 def
-/$N _ def
-/$O 0 def
-/$h false def
-/$al 0 def
-/$tr 0 def
-/$le 0 def
-/$lx 0 def
-/$ly 0 def
-/$ctm matrix currentmatrix def
-/@cp /closepath ld
-/@gs /gsave ld
-/@gr /grestore ld
-/@MN {2 copy le{pop}{exch pop}ifelse}bd
-/setcmykcolor where {pop}{/setcmykcolor{4 1 roll
-3 {3 index add 1 @MN 1 exch sub 3 1 roll} repeat
-setrgbcolor
-pop}bd}ifelse
-/@tc{dup 1 ge{pop}{4 {dup
-6 -1 roll
-mul
-exch}repeat
-pop}ifelse}bd
-/@scc{$c $m $y $k $t @tc setcmykcolor true}bd
-/@SCC{$C $M $Y $K $T @tc setcmykcolor true}bd
-/@sm{/$ctm $ctm currentmatrix def}bd
-/x {/$t xd /$n xd
-/$k xd /$y xd /$m xd /$c xd}bd
-/X {/$T xd /$N xd
-/$K xd /$Y xd /$M xd /$C xd}bd
-/g {1 exch sub 0 0 0
-4 -1 roll
-_ 1 x}bd
-/G {1 exch sub 0 0 0
-4 -1 roll
-_ 1 X}bd
-/k {_ 1 x}bd
-/K {_ 1 X}bd
-/d /setdash ld
-/i {dup 0 ne {setflat} {pop} ifelse}bd
-/j /setlinejoin ld
-/J /setlinecap ld
-/M /setmiterlimit ld
-/w /setlinewidth ld
-/O {/$o xd}bd
-/R {/$O xd}bd
-/c /curveto ld
-/C /c ld
-/l /lineto ld
-/L /l ld
-/m /moveto ld
-/n /newpath ld
-/N /newpath ld
-/F {@scc{eofill}if n} bd
-/f {@cp F}bd
-/S {@SCC{stroke}if n} bd
-/s {@cp
-S}bd
-/B {@gs F @gr
-S}bd
-/b {@cp B }bd
-/u {}bd
-/U {}bd
-%%EndProlog
-%%BeginSetup
-%%EndSetup
-1 i
-2 J
-0 j
-4 M
-[]0 d
-
-%%Note: traced as Normal_Outline
-0 g
-259.2 78.2 m
-327.3 178.5 L
-327.8 179.0 328.3 180.0 329.7 180.4 C
-373.4 241.9 L
-388.8 263.5 L
-389.2 264.0 390.7 264.4 391.6 265.4 C
-413.7 298.0 453.6 351.8 468.0 404.6 C
-467.5 405.6 467.5 407.0 467.5 407.0 C
-442.0 367.6 411.3 319.2 379.2 279.3 C
-372.0 267.3 366.7 265.9 361.9 254.8 C
-333.1 216.0 L
-323.5 207.3 311.0 185.2 302.8 175.6 C
-298.0 165.6 293.2 164.1 288.9 154.0 C
-282.2 147.8 282.2 139.6 276.4 132.4 C
-258.2 77.7 L
-258.2 77.7 259.2 78.2 259.2 78.2 C
-f
-0 g
-470.8 211.6 m
-470.8 211.6 472.3 212.1 472.3 212.1 C
-518.8 305.2 L
-531.3 317.2 L
-537.6 314.8 539.0 300.9 548.6 301.9 C
-555.8 301.9 554.8 302.8 561.6 306.2 C
-595.2 357.1 L
-595.6 358.0 597.6 358.5 598.5 360.0 C
-615.8 398.4 650.8 450.7 657.6 483.8 C
-658.0 486.2 658.0 488.1 658.0 489.6 C
-654.2 489.1 656.1 485.2 650.4 479.5 C
-634.5 446.8 611.5 402.2 592.8 377.2 C
-588.0 370.0 581.7 365.7 577.4 358.5 C
-570.2 355.6 568.3 351.3 560.1 356.6 C
-554.8 360.0 553.9 364.8 550.0 370.0 C
-548.1 371.5 550.0 370.5 547.2 371.0 C
-541.4 365.2 L
-511.2 319.6 484.3 276.0 471.8 220.3 C
-470.8 215.5 471.3 215.5 469.4 212.1 C
-469.4 212.1 470.8 211.6 470.8 211.6 C
-f
-0 g
-731.0 292.8 m
-756.0 351.3 751.6 407.0 771.3 468.0 C
-783.3 520.8 809.7 582.2 822.2 635.0 C
-829.4 684.4 855.8 732.0 825.1 789.1 C
-811.6 797.7 799.6 805.4 784.8 802.0 C
-757.9 792.0 732.9 743.0 726.2 712.8 C
-727.6 708.4 727.2 707.0 730.0 704.6 C
-731.0 704.1 732.9 704.1 734.4 704.6 C
-737.2 709.9 L
-754.0 747.3 L
-758.8 755.0 771.8 754.0 781.9 751.2 C
-788.1 748.3 791.5 745.9 797.7 744.0 C
-831.8 680.1 800.6 611.0 784.3 542.8 C
-765.6 478.5 748.3 431.5 739.2 370.5 C
-733.9 347.5 729.1 318.7 730.0 292.8 C
-730.0 292.8 731.0 292.8 731.0 292.8 C
-f
-0 g
-434.4 462.7 m
-460.3 496.8 462.2 532.8 458.4 575.5 C
-456.4 588.0 451.2 599.0 445.4 609.1 C
-435.3 620.1 435.3 622.5 421.9 630.7 C
-411.8 619.6 398.4 604.8 391.6 586.0 C
-393.6 581.7 396.4 584.1 401.7 577.9 C
-403.2 577.4 404.6 576.9 404.6 576.9 C
-407.0 574.5 406.0 573.6 410.4 571.2 C
-414.2 564.0 418.5 558.2 424.3 545.7 C
-437.2 526.5 428.1 489.6 433.9 462.2 C
-433.9 462.2 434.4 462.7 434.4 462.7 C
-f
-0 g
-226.0 482.4 m
-281.7 485.7 311.0 531.3 357.1 565.9 C
-362.8 572.1 364.8 574.0 368.6 580.3 C
-368.6 581.7 369.1 582.7 369.6 584.6 C
-370.0 585.6 371.5 587.0 372.9 588.0 C
-381.6 606.2 L
-377.2 605.2 374.8 602.8 371.0 597.6 C
-346.0 576.4 316.8 552.0 289.9 536.1 C
-288.9 535.2 288.0 534.2 288.0 534.2 C
-273.6 528.0 263.5 527.5 247.6 530.8 C
-242.4 535.2 239.0 536.1 238.0 544.3 C
-239.5 572.1 266.8 600.0 281.2 624.9 C
-293.7 637.9 300.4 650.4 311.5 668.1 C
-312.0 669.1 313.9 669.6 314.8 671.0 C
-319.6 679.6 L
-319.6 680.1 319.6 681.6 319.2 682.0 C
-285.6 649.4 258.7 601.4 229.9 555.8 C
-216.4 529.9 205.4 511.2 210.2 491.0 C
-212.6 483.8 218.8 484.8 226.0 482.4 C
-f
-0 g
-624.9 600.4 m
-645.1 606.2 L
-676.3 622.5 694.5 658.0 710.8 698.4 C
-710.4 704.1 711.3 704.6 712.3 709.4 C
-696.9 685.9 693.6 667.6 662.4 653.7 C
-654.7 651.3 649.4 650.4 639.3 650.8 C
-633.1 654.2 625.4 659.0 621.6 670.5 C
-597.6 620.6 L
-600.9 612.4 604.3 607.2 613.4 603.8 C
-617.2 603.3 621.1 601.4 624.9 600.4 C
-f
-0 g
-528.4 619.2 m
-548.6 617.2 564.9 629.2 578.8 645.6 C
-584.1 651.8 586.5 662.8 591.8 671.0 C
-593.2 681.6 603.8 690.2 601.9 704.1 C
-598.5 705.1 599.0 698.8 594.7 694.0 C
-581.7 679.6 L
-569.7 668.6 545.7 663.8 532.8 673.9 C
-487.2 697.9 467.5 754.5 413.2 772.8 C
-393.1 778.0 387.3 771.8 367.2 760.3 C
-360.9 755.5 357.6 744.9 351.3 740.6 C
-347.0 740.6 349.9 743.5 344.6 747.3 C
-344.1 748.8 343.6 750.2 343.6 750.2 C
-322.5 770.8 L
-312.9 775.2 300.9 784.3 287.0 779.0 C
-283.6 777.1 281.7 776.1 279.3 775.2 C
-250.0 750.7 229.4 705.6 181.4 697.4 C
-165.6 705.1 160.3 715.2 150.7 733.9 C
-130.5 685.4 L
-142.5 663.3 L
-147.3 661.9 147.3 660.4 151.2 655.6 C
-160.8 650.4 169.9 649.4 182.8 655.2 C
-212.1 676.8 L
-213.1 677.7 214.0 678.7 216.0 679.2 C
-238.5 695.5 250.5 727.6 279.3 735.3 C
-296.1 727.2 312.4 715.6 326.8 695.5 C
-330.2 688.3 331.6 684.9 335.5 681.1 C
-345.1 694.5 352.8 717.6 372.9 721.9 C
-423.3 726.7 453.6 670.5 498.2 631.6 C
-510.7 624.4 517.4 621.1 528.4 619.2 C
-f
-%%Trailer
-end
-showpage
diff --git a/texi/gnusmail.texi b/texi/gnusmail.texi
deleted file mode 100644 (file)
index 7c8c66b..0000000
+++ /dev/null
@@ -1,708 +0,0 @@
-@node Mail with Gnus, , Key bindings, Top
-@comment  node-name,  next,  previous,  up
-@chapter Mail with Gnus
-
-Quite a few people wish to read mail with Gnus but stumble across a few
-issues which make this a bit difficult.  This comes from the fact that
-Gnus is really a newsreader, and thus it treats mail in a newsreaderly
-fashion.  It is not desirable to change this, because it is a wonderful
-thing and this is what distinguishes Gnus from other mail readers.  In
-this little tutorial, I'll try to explain what ``newsreaderly fashion''
-means and how exactly Gnus treats mail.
-
-Specific pieces of behavior can always be changed, but if you desire to
-make Gnus behave like a conventional mail reader, think again.  It will
-be an uphill battle.  Maybe a different mail reader is for you?  But
-also, read on.  Maybe you'll find the right behavior in the description
-below.
-
-@c ------------------------------------------------------------ 
-@section Gnus Terminology
-@c ------------------------------------------------------------ 
-
-First, let's talk about a few terms which I'm going to use which might
-be unfamiliar to you.
-
-@table @dfn
-@item Posting, Article, Message, Mail
-These are all related terms.  A news message might also be called a
-posting or an article, whereas a mail message is known as a mail.  Since
-Gnus treats both news and mail, the distinction isn't as clear.  In the
-following, I'll use the term ``message'' for the generic case and ``news
-message'' and ``mail message'' for the specific cases.  But sometimes, I
-might use ``posting'' or ``article'', too, both synonymous with
-``message''.
-
-@item Backend
-Gnus can read messages from various sources.  On the one hand, there is
-news, and on the other hand, there is mail.  News can be read from a
-news server (an NNTP server), or from a so-called spool directory.  Mail
-can be read in various formats.
-
-Generally speaking, a backend describes the way Gnus accesses a set of
-messages.  For a news server, this is the Network News Transfer
-Protocol, NNTP, and thus there is a backend ``nntp''.  For mail stored
-in the same format that the MH message handling system used, there is
-the backend ``nnmh''.  And so on.  See below for a list of backends.
-
-@item Server
-Whereas a backend describes the mechanism used by Gnus to access the
-messages, a server is a specific instance of that mechanism.  You might
-create a specific server for accessing the host @file{news.frob.org}
-using NNTP, say.  Or you might create a server for accessing the
-MH-style directory @file{~/OldMail}.
-
-If you are a programmer, think of a backend as the class and of a server
-as an object (instance) of that class.  If you are a cook, think of a
-backend as an apple pie recipe (say), and think of a server as an actual
-apple pie.  (Yummy!)  If you live in a huge city, think of a backend as
-a bus (or tram, or underground) line (the Circle Line comes to mind),
-and think of a server as a specific bus (or tram train, or underground
-train).  The one at 8:15 last Monday morning, for example.  If you drive
-a car, think of a backend as the model and make and of a server as a
-specific car.
-
-Obviously, there can be two servers using the same backend.  (Two
-instances of the same class, two apple pies baked according to the same
-recipe, two busses going the same route, two cars of the same model.)
-
-@item (Select) method
-Just another term for server.
-
-@item Native server
-This is the primary server, so to speak.  Most people let their news
-server be the native server, hence:
-@lisp
-(setq gnus-select-method '(nntp "news.frob.org"))
-@end lisp
-Groups from the native server are also known as native groups.
-
-@item Secondary select methods
-This is a list of other servers which one also wishes to use.  Many
-people are only going to have two servers, one native (for news) and one
-secondary (for mail).  Thus:
-@lisp
-(setq gnus-secondary-select-methods '((nnml "")))
-@end lisp
-Note that there is one more pair of parentheses in order to be able to
-mention more than one seconary select method.
-
-Groups from a secondary server are also known as secondary groups.
-
-In order to be able to distinguish native groups from secondary groups,
-each server is identified with a (unique) name and that name is used as
-a prefix for the secondary groups.  Thus, you might have a group
-@file{gnu.emacs.help} (which is native) and another group
-@file{nnml:mail.misc} (which is secondary).  A plus character is used if
-the name of a server is not the empty string.  For example, given the
-following in your @file{.gnus} file
-@lisp
-(setq gnus-secondary-select-methods
-      '((nnml "work" (nnml-directory "~/Mail.work/"))
-        (nnml "play" (nnml-directory "~/Mail.play/"))))
-@end lisp
-you might have the groups @file{nnml+work:boss} and
-@file{nnml+play:so}@footnote{``SO'' standing for ``significant other'',
-i.e.@ girlfriend or boyfriend}.
-
-@item Group
-Well, if you've read news before, you know about different news groups.
-One of my favorites is @file{gnu.emacs.gnus}, and I wish I would read
-@file{alt.fan.pratchett}.  Since Gnus treats mail in a newsreaderly
-fashion, it is obvious that it uses groups rather than ``folders'' like
-other mail readers do.  So with Gnus there are news groups and mail
-groups, where mail groups are known as mail folders to other programs.
-
-Each group belongs to a certain server, and each server uses a certain
-backend.
-
-@item Expiry
-News servers offer news groups which contain news postings.  New news
-postings come in, so the news postings accumulate, and pretty soon the
-new hard disk is full.  This is not good news at all.
-
-Thus, a news server does what is known as @dfn{expiry}: it deletes old
-messages.  Of course, on a news server, expiry happens with no regard of
-whether people have already seen the message in question; instead, the
-news server admin chooses expiry times based on available disk space and
-maybe on the normal amount of traffic in a news group.
-
-But mail messages should be under the users' control, so there better be
-no server which deletes messages regardless of users having seen them!
-Instead, Gnus adopts a scheme where users say which messages may be
-deleted, and Gnus takes care of deleting them after a while.  (They are
-not deleted immediately in case you made a mistake, or in case you wish
-to refer back to an old article.)
-
-@item Article marks
-Gnus distinguishes between a number of article marks, which indicate
-whether they have been looked at, or are considered important, or the
-like.  Marks are represented by a character.
-
-If that character is a space, it looks as if the message isn't marked at
-all.  These messages are called @dfn{unmarked}, the mark character used
-is a space, and marking a message with space is considered to be the
-same as removing all marks---after all, such messages are unmarked.  You
-can type @kbd{M-u} to remove all marks and make an article unmarked.
-
-Articles that are considered important or where you wish to indicate
-that you have to deal with them later can be @dfn{ticked}.  The mark
-character used for ticked messages is the exclamation mark, and you can
-use @kbd{u} or @kbd{!} to tick messages.  Ticked messages are always
-shown when you enter a group.
-
-There is the @dfn{dormant} mark which is similar to the ticked mark but
-does not imply importance or urgency; thus, dormant messages aren't
-shown by default.  The mark character used is the question mark, and you
-can mark messages as dormant using the @kbd{?} key.
-
-So far, each kind of mark was associated with one character (as was the
-absence of any mark).  But articles which you have read are a bit
-different, since lots of different characters are used here.  The
-important thing to realize is that these messages are treated in the
-same way by Gnus; the different characters are only used as an
-information for the user.
-
-Articles which are marked as read because you have actually read them
-(the normal case, one would think) are marked with the `R' character.
-(Type @kbd{@key{SPC}} or @kbd{g} to read a message, or click on it using
-the middle mouse button, @kbd{@key{mouse-2}}.)  You can also mark a
-message as read without actually reading it, this is indicated with the
-`r' character and can be achieved with @kbd{d} or @kbd{M r}.
-
-After exiting a group and then entering it again (some time later), the
-messages that had been marked as read before appear with the `O'
-character.
-
-To reiterate: the difference between `r', `R' and `O' is only an
-information for the user.
-
-@end table
-
-
-
-@c ------------------------------------------------------------
-@section Choosing a mail backend
-@c ------------------------------------------------------------
-
-The Gnus manual lists quite a few backends.  Of these, the news backends
-pose no problem: you use the @code{nntp} backend if you access a news
-server and the @code{nnspool} backend if you have a local news spool
-directory.  (Leafnode users should use @code{nntp} so that the leafnode
-program can see what you are doing and choose the groups to download
-accordingly.)  But the mail backends are more difficult.  There are many
-of them, and it is not obvious which is the best choice.  In quite a few
-cases, this is because there is no single best choice; or maybe what's
-the best choice depends on the group or changes over time.
-
-Below, I'll give a list of mail backends.  While I say something about
-how messages are stored, I'll try to emphasize what that means for you
-as a user.
-
-Let's try to structure the discussion a bit.  We have servers, which
-contain groups, which in turn contain messages.  How could we store this
-on disk?  After some thought, you'll quickly come up with the following
-alternatives:  You could store all messages from a server in one file.
-The second alternative is to store all messages from one group in one
-file, different groups are stored in different files.  A third
-alternative is to store each message in one file; in this case, one
-could use a directory per group.  A very interesting fourth alternative
-is not to store the messages at all but instead to use the Oracle of
-Delphi (say) to predict what the messages will be; this saves a lot of
-disk space.  I won't talk about the fourth alternative in the following.
-
-
-@subsection Backends with one file per server
-
-Many people use just two servers, the native server for news and a
-secondary server for mail.  Thus, this alternative would mean that you
-store all your mail in one file.  Since Emacs has no fancy mechanisms to
-access parts of files, this means that Gnus loads that file into main
-memory at startup, and all your mails are kept in main memory all the
-time.  (Of course, copies are written to disk every now and then, for
-safekeeping!)
-
-I think you can pretty much figure out the consequences on your own,
-now:
-@itemize @bullet
-@item
-Handling large amounts of mail will be a problem.  (Emacs has a maximum
-file size of 128 MB.)
-
-@item
-Some operations on mails will be fast, since they are in-memory
-operations.  (Saving everything to disk will be slow, though.)
-
-@item
-Some operations on mails will be slow, since they have to search through
-the whole file.
-
-@item
-It is convenient to have all mail stored in one file: you can easily
-transfer it to another computer using FTP, say, or store it on a floppy
-or Zip disk or a tape.
-
-@end itemize
-
-Conclusion: If you don't have a lot of mail to deal with and like the
-convenience of storing it all in one file, one of these backends might
-be for you.  However, since Gnus really shines when dealing with lots of
-mails, most Gnus users can be expected to deal with quite a large volume
-of mail.  Thus, I don't think many Gnus users choose one of these
-backends.
-
-@table @code
-@item nnmbox
-This backend uses the well-known ``mbox'' format for storing mails.  In
-this format, a message begins with the five characters @code{From_} (the
-last character is a space) at the beginning of a line, and ends with an
-empty line.
-
-@item nnbabyl
-This backend uses the lesser known ``babyl'' format for storing mails.
-This uses delimiters for the beginning and the end of a message which
-are less likely to occur in a message.
-
-@quotation
-CCC Are they guaranteed to never occur?
-@end quotation
-
-One advantage of a babyl file over an mbox file is that it is possible
-to insert information about a message in the babyl file, without having
-to change the message itself.  In an mbox file, the only place to put
-such information is the message header, which is part of the message.
-Thus, adding information about a message to an mbox file means that one
-has to change the message.
-
-I think Gnus doesn't make use of this advantage, though.  Gnus stores
-information about messages in an extra file, @file{~/.newsrc.eld}.
-
-@end table
-
-@quotation
-CCC Can somebody provide me with some more arguments in favor of one of
-the formats?
-
-CCC Is it possible to just use an existing babyl file for Gnus, by
-creating a new nnmbox server and pointing it at the file?  What about
-mbox?
-@end quotation
-
-
-@subsection Backends with one file per group
-
-Storing all messages in a group in one file provides a nice middle
-ground between the one file per server type of backend and the one file
-per message type of backend.  Using lots of little files wastes disk
-space; since this approach uses a moderate number of files, less disk
-space is wasted.
-
-@quotation
-CCC Which operations are fast using this kind of backend?  Which are
-slow? 
-@end quotation
-
-@table @code
-@item nnfolder
-This backend uses the same file format as @code{nnmbox}, but uses the
-one file per group approach.
-
-@end table
-
-There is no ``nnbabylfolder'' backend which uses babyl format.
-
-
-@subsection Backends with one file per message
-
-If the number of messages grows so large that even the size of a single
-group exceeds the limit which can be handled by the file-per-group
-backends, you need to think about using one of the backends mentioned
-here.
-
-This category also includes @code{nnml}, the backend which is fastest if
-you have lots of messages.
-
-@table @code
-@item nnmh
-This backend uses the same file format (and directory structure) as MH,
-i.e.@ a group is a directory, and each message is stored in a file, and
-the file names are numbers.
-
-Since @code{nnml} is so similar to @code{nnmh} but a lot faster, only
-unusual situations could warrant using this backend.  You may want to
-use @code{nnmh} if you wish to use Gnus in parallel to your old MH based
-reader.
-
-Normally, you should not let two programs write the same Gnus directory
-(not even two instances of Gnus!), but if you really must, you may wish
-to use @code{nnmh}, since there the probability of things breaking is
-smaller than with the other backends.
-
-@item nnml
-This backend is like @code{nnmh} but also includes an extra file
-@file{.overview} in each directory (group) which contains some headers
-from each message.  Thus, where @code{nnmh} needs to open every file in
-a group to examine its headers, @code{nnml} (normally) needs to only
-read the @file{.overview} file, which is a lot faster.
-@end table
-
-
-@subsection Other mail backends
-
-There is one other mail backend, for keeping messages on an IMAP server.
-
-@table @code
-@item nnimap
-This backend transforms Gnus into an IMAP client.  The general idea of
-IMAP is to store and manipulate the mails on a server (similar to NNTP
-for news).
-
-@code{nnimap} only works with the current development version of Gnus,
-though.  See @url{http://www.extundo.com/nnimap/} for @code{nnimap} and
-see @url{http://www.gnus.org/} for Gnus.  Don't forget to subscribe to
-both the Gnus and the nnimap mailing lists since you are using alpha
-grade software which can be exptected to have bugs.  Be prepared to
-submit meaningful bug reports if you encounter bugs.
-
-Rumor has it that @code{nnimap} will be integrated with the next version
-of Gnus (version 5.8, presumably), when that comes out.
-
-@end table
-
-
-@subsection Summary
-
-If you must talk to an IMAP server, the choice is clear.  But if you
-keep mails on your local disk, the choice isn't as clear-cut.  I think
-that @code{nnml} is generally the best choice unless you have real great
-disk space trouble.  Then, you should be thinking about @code{nnfolder}.
-
-I'm not sure if there is a situation where @code{nnmbox} or
-@code{nnbabyl} is desirable.
-
-@quotation
-CCC Tell me about it if you know more!
-@end quotation
-
-
-@c ------------------------------------------------------------
-@section Auto-expire versus total-expire
-@c ------------------------------------------------------------
-
-Every now and then, people ask about auto-expire and total-expire.
-Since both of these features are means to the same end, and since they
-are similar and dissimilar at the same time, great confusion can result
-in the unsuspecting new Gnus user.  I'll try to explain how each works
-and which one to use.  However, be prepared that there will be no clear
-recommendation: both work well, so for many situations both are
-appropriate.  So it is more a matter of taste which one to choose.  And
-I can't help you with that!
-
-
-@subsection What is expiry?
-
-Gnus treats mail in a newsreaderly fashion, so it is useful to examine
-the situation for news.  Your news server periodically contacts other
-news servers and exchanges messages with the other server.  The two news
-servers exchange lists of messages, and messages present in one server
-but not in the other are sent to the other server.  This works in both
-directions.  Many connections between news servers exist, and this is
-the way how postings travel from you into the world: when you post a
-message, your news server stores it and offers it to the other servers
-in the message list exchanging phase.  Since the other servers aren't
-going to have the posting you just wrote, it gets transferred and
-finally can be seen all over the world.
-
-You can quickly see that new messages will be arriving at your news
-server, which stores them on disk.  So something has got to happen else
-the disk will fill up real fast.  That ``something'' is expiry: the
-oldest messages are deleted to make room for the new ones.  Normally, a
-news server can be configured on a per-group basis which messages should
-be deleted.  In some groups, messages might be deleted which are older
-than a day, in other groups, messages might be kept for a month.
-
-This means if you go on vacation then come back later to read news, you
-are likely to miss some postings if the expiration time for the groups
-you read is shorter than the time you were on vacation.
-
-How does that apply to mail?
-
-Well, mail should stay more under the control of the user than news is.
-When you come back from a vacation, you expect to see all messages
-arrived during that time, not only the recent ones!
-
-Because of this, Gnus offers you the @kbd{E} key.  This marks a message
-as expirable.  No mail is ever deleted from disk, unless it is
-expirable.  Every once in a while (by default, whenever you quit a group
-by hitting @kbd{q} in the Summary buffer), the expiry process is run,
-which goes through all expirable messages (of a group) and expires it if
-old enough.  By default, messages older than seven days are ``old
-enough''.  Seven days, that is, since it was marked as expirable.
-
-@quotation
-CCC Last sentence correct?
-@end quotation
-
-``But when I read a message, exit the group, then enter it again, the
-message is gone!''
-
-Right.  By default, Gnus hides messages which have already been read.
-If you are the keyboard type, you can hit @kbd{C-u @key{RET}} or
-@kbd{C-u @key{SPC}} to enter the group or @kbd{C-u M-g} when in the
-group to look at the read messages.  If you are the mousey type, you may
-wish to use the ``See old articles'' entry in the ``Group'' menu.
-
-@quotation
-CCC How does one code menu entries in TeXinfo?
-@end quotation
-
-
-@subsection Why auto-expire and total-expire?
-
-When reading mail, by default Gnus marks as read each message that you
-read.  If you want to mark it as expirable, you have to hit @kbd{E}.
-Many people are subscribed to mailing lists and they configure Gnus to
-put mails from a mailing list into their own group.  Most messages in
-such groups should be expirable, once read.  But hitting @kbd{E} all the
-gets old real quick.  Hence, auto-expire and total-expire were invented.
-
-
-@subsection Auto-expire vs.@ total-expire
-
-Auto-expire and total-expire both aim at the same goal: articles which
-are read should normally be expired, only if one does something special
-should these articles be saved on disk.  But what happens when a message
-is being read by you, the user?  Well, the message is marked as read
-(with the `R' mark).  So, what can be done to make these messages
-expire?  Well, two approaches come to mind: one idea is to change the
-mark that is attached to messages that you read, and the other idea is
-to make the `R' articles expirable.  These are @emph{exactly} the things
-that are done in Gnus: auto-expire means to change the mark that is
-attached to a message that is being read, and total-expire means to
-change the meaning of the `R' mark to mean expirable.
-
-A more precise description of auto-expire might be the following: If an
-article is unmarked and then selected for reading,@footnote{Using
-@kbd{g}, or @kbd{@key{mouse-2}}, or by moving to it with @kbd{n} or
-@kbd{p}, or by one of the many other methods provided by Gnus.} it is
-marked with `E', as if the user had hit @kbd{E}.
-
-It is important to realize that auto-expire has @emph{no other}
-consequences.  Selecting a message for reading which wasn't unmarked
-doesn't do anything special, and hitting @kbd{d} on a message also
-doesn't do anything special.  (It therefore marks the message as read,
-not as expirable!)
-
-Now, forget about auto-expire, empty your mind and prepare to learn
-about total-expire.  Like I said, total-expire changes what it means for
-an article to be marked as read.
-
-A more precise description of total-expire might be the following: When
-the expire process is run (for example, when you leave a group with
-@kbd{q}), all messages marked as read are considered to be expirable, as
-if they had been marked with `E'.  Recall that there are several ways to
-mark a message as read: by reading it, by hitting @kbd{d} on it, and in
-a few other ways which I haven't mentioned so far.  Recall that, in
-addition to the messages marked with `R', also those marked with `r' or
-`O' are considered to be marked as read.
-
-Can auto-expire and total-expire be used together?  Well, in principle
-they can, but that doesn't make sense.  Just using total-expire alone
-achieves the same effect.
-
-So, how do auto-expire and total-expire compare?  Well, for once thing,
-hitting @kbd{d} on a message means it is expirable if total-expire is
-on (since it is marked as read and all messages marked as read are
-considered expirable when total-expire is on), but it is not expirable
-if auto-expire is on (since it is marked as read and only articles
-marked expirable (`E') are considered to be expirable).  If you want to
-mark a message as expirable when total-expire is off, use @kbd{E}.
-
-One way of comparing auto-expire and total-expire is to compare the
-message marks that are available, and what they mean.  Since auto-expire
-does not change the meaning of marks, its behavior is the same as in the
-default case.  It's only important whether total-expire is on or off.
-Thus, there are only two cases: the default case and the total-expire
-case.
-
-@subsubsection Article marks with and without total-expire
-
-The following are the default article marks and behavior:
-
-@table @dfn
-@item unmarked
-All new messages are unmarked.  This means you haven't seen them.  They
-are always shown and won't be deleted.
-
-@item read
-Messages marked as read are not shown by default but kept on disk till
-hell freezes over.  You can show them with @kbd{C-u M-g} from the
-summary buffer, or with @kbd{C-u @key{SPC}} or with the `Group' menu
-item `See old articles' from the group buffer.
-
-Depending on the setting of @var{gnus-fetch-old-headers}, a message
-marked as read might be shown if there is a followup or reply to it.
-
-@item dormant
-Dormant messages aren't shown by default but kept on disk till hell
-freezes over.  You can show them with @kbd{/ D} from the summary buffer.
-If there is a reply or followup to a dormant message, the dormant
-message is also shown.
-
-@item ticked
-Ticked messages are always shown and kept on disk till hell freezes
-over.
-
-@item expirable
-Expirable messages will be deleted in due time.  They are not shown by
-default, but you can make them appear with @kbd{C-u M-g} and so on,
-similar to the read ones.
-
-@end table
-
-Please note that the behavior for ticked messages is similar to the
-unread ones, and that the behavior of dormant messages is similar to the
-read ones.  Especially the second fact will become important when we
-look at
-
-The behavior of the article marks with total-expire:
-
-@table @dfn
-@item unmarked
-Same as in the default case.
-
-@item expirable
-Same as in the default case.
-
-@item read
-Same as expirable.
-
-@item dormant
-Same as in the default case.
-
-@item ticked
-Same as in the default case.
-
-@end table
-
-As you can see, only the behavior of the read messages is different, and
-you can use the dormant mark if you want to achieve behavior similar to
-the behavior of read messages in the default case.
-
-
-@subsubsection Speed issues
-
-Total-expire may be slow when expiry happens.  Why is that?  Well, Gnus
-keeps an explicit list of all expirable messages (the ones marked `E'
-without taking total-expire into account), as well as a list of dormant
-messages, and a list of ticked messages.  Normally, when expiration time
-comes, Gnus goes through all articles in the expire list and looks if
-they are old enough to be expired.
-
-However, for read messages the situation is different.  Here, Gnus just
-keeps a list of ranges of article numbers to be able to distinguish read
-messages from unmarked ones.  The assumption is that a message is to be
-considered marked as read if it falls in one of the ranges and isn't
-mentioned in any of the expirable, dormant or ticked lists.
-
-When total-expire is turned on, Gnus needs to go through all messages in
-the read range in order to look if it's in one of the lists.  If the
-message is not in the ticked or dormant list, it is expirable and thus
-Gnus looks to see if it is old enough.
-
-Obviously, going through all the articles in the read ranges takes more
-time than going through just the list of expirable articles.
-
-Something can be done about the speed issue, though.  Normally, the
-expiry process is started whenever you leave a group.  I suggest that
-you disable this and instead run expiry just once per day, for example
-while you are going for lunch.  This means that expiry still takes a
-long time, but you don't see it and thus it doesn't bother you.
-
-Here's how to do that: You disable the expire-on-group-exit thing with
-the following line in your @file{~/.gnus} file:
-@lisp
-(remove-hook 'gnus-summary-prepare-exit-hook
-             'gnus-summary-expire-articles)
-@end lisp
-And before you leave for lunch, you hit @kbd{C-M-x}, or @kbd{M-x
-gnus-group-expire-all-groups @key{RET}}.
-
-
-@subsubsection Functionality
-
-Adaptive scoring doesn't work with auto-expire.  (But normal scoring
-still works fine.)  Adaptive scoring works fine with total-expire.
-
-
-@subsubsection A summary
-
-Well, it is difficult to sum up the whole discussion.  I used to use
-total-expire but have switched to auto-expire a long time ago.  I liked
-the fact that I could use one more kind of article mark.  I also liked
-the fact that marking a message as read works the same in auto-expirable
-groups and in normal mail groups: you hit @kbd{E}.  (With total-expire,
-you normally hit @kbd{d} but must remember to use @kbd{E} for those
-groups where total-expire is off.)  And I liked that auto-expire is
-faster.
-
-On the other hand, adaptive scoring is surely a very useful feature (I'm
-just beginning to use it), so many people might prefer total-expire.
-
-And on a third hand, maybe the key binding issue isn't so important
-after all.  You see, in mail groups the @kbd{d} key means `keep this
-message for archival purposes', whereas in many other modes (dired, CCC
-others?) it stands for `delete'.  I propose to make it mean delete in
-mail groups, too, with the following line in
-@file{~/.gnus}:@footnote{See the chapter on key bindings; maybe you need
-a `require' statement.}
-@lisp
-(define-key gnus-summary-mode-map "d" 'gnus-summary-mark-as-expirable)
-@end lisp
-Marking messages as expirable (rather than read) in news groups does no
-harm, nor does it harm to do so in total-expirable mail groups.  The old
-`keep this message' semantics can still be had by marking a message as
-dormant or by using @kbd{M r} (in non-total-expirable groups only).
-
-
-@c ------------------------------------------------------------ 
-@section Migrating old mail
-@c ------------------------------------------------------------ 
-
-Probably, you've been reading mail in pre-Gnus times, right?  And surely
-you wish to carry this over to Gnus.  Well, I haven't found a real good
-way to do it, but I can offer a few suggestions for doing it at least
-semi-automatically.
-
-One way of getting at your old mail is to type @kbd{G f}, and to then
-enter the name of your old mail file.  This provides read-only access to
-your mails.  For some people, this might be sufficient.  (With @kbd{G
-f}, you have created an @code{nndoc} group.)
-
-Some people might want to have their mails available in their normal
-mail groups hierarchy.  That's simple, just create an @code{nndoc} group
-for your mail file, then mark all messages in it with @kbd{M P a}, then
-copy all of them over to a normal mail group, with @kbd{B c}.
-
-This is good for people who wish to keep their old arrangement of
-folders, and who have a one-to-one correspondence between old mail files
-and new Gnus groups.  But some people might wish to split up their mails
-differently.  For them, it might be useful to set up
-@var{nnmail-split-methods} correctly and to use @kbd{B r} instead of
-@kbd{B c}.  This goes through all process-marked messages and subjects
-them to the same splitting process that newly arriving messages go
-through.  (Whee!  What a run-on sentence!)
-
-
-@section TODO
-
-@table @bullet
-@item
-Say something about the cache.  Though this belongs in the news reading
-tips, right?  Hm.
-@end table
-
-
-@c Local Variables:
-@c TeX-master: "tutorials.texi"
-@c End:
diff --git a/texi/gnusref.tex b/texi/gnusref.tex
deleted file mode 100644 (file)
index 955e240..0000000
+++ /dev/null
@@ -1,1183 +0,0 @@
-%% include file for the Gnus refcard and booklet
-
-\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions
-\def\date{Jan, 2004}
-\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$}
-
-%%
-\newlength{\keycolwidth}
-\newenvironment{keys}[1]% #1 is the widest key
-{\nopagebreak%\noindent%
-  \settowidth{\keycolwidth}{#1}%
-  \addtolength{\keycolwidth}{\tabcolsep}%
-  \addtolength{\keycolwidth}{-\columnwidth}%
-  \begin{supertabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}%
-  {\end{supertabular}\\}
-
-%% uncomment the first definition if you do not want pagebreaks in maps
-%%\newcommand{\esamepage}{\samepage}
-\newcommand{\esamepage}{}
-
-\newcommand*{\B}[1]{{\bf#1})}    % bold l)etter
-
-\newcommand{\Title}{%
-  \begin{center}
-    {\bf\LARGE Gnus \progver\ Reference \Guide\\}
-                                %{\normalsize \Guide\ version \refver}
-  \end{center}
-  }
-
-\newcommand*{\Logo}[1]{\centerline{%
-    \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight
-      {\vfill\epsfig{figure=gnuslogo-#1}}\vspace{-\baselineskip}}}}
-
-\newcommand{\Copyright}{%
-  \begin{center}
-    Copyright \copyright\ 1995 Free Software Foundation, Inc.\\*
-    Copyright \copyright\ 1995 Vladimir Alexiev
-    $<$vladimir@cs.ualberta.ca$>$.\\*
-    Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\*
-    Copyright \copyright\ 2001, 2002, 2003, 2004 \author.\\*
-    Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
-    Ingebrigtsen.\\*
-    and the Emacs Help Bindings feature (C-h b).\\*
-    Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\*
-  \end{center}
-
-  Permission is granted to make and distribute copies of this reference
-  \guide{} provided the copyright notice and this permission are preserved on
-  all copies.  Please send corrections, additions and suggestions to the
-  current maintainer's email address. \Guide{} last edited on \date.
-  }
-
-\newcommand{\Notes}{%
-  \subsection*{Notes}
-  {\esamepage
-    Gnus is complex. Currently it has some 876 interactive (user-callable)
-    functions. Of these 618 are in the two major modes (Group and
-    Summary/Article). Many of these functions have more than one binding, some
-    have 3 or even 4 bindings. The total number of keybindings is 677. So in
-    order to save 40\% space, every function is listed only once on this
-    \guide, under the ``more logical'' binding. Alternative bindings are given
-    in parentheses in the beginning of the description.
-
-    Many Gnus commands are affected by the numeric prefix. Normally you enter a
-    prefix by holding the Meta key and typing a number, but in most Gnus modes
-    you don't need to use Meta since the digits are not self-inserting. The
-    prefixed behavior of commands is given in [brackets]. Often the prefix is
-    used to specify:
-
-    \quad [distance] How many objects to move the point over.
-
-    \quad [scope] How many objects to operate on (including the current one).
-
-    \quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it
-    determines how many objects to operate on. Else if there are some objects
-    marked with the process mark \#, these are operated on. Else only the
-    current object is affected.
-
-    \quad [level] A group subscribedness level. Only groups with a lower or
-    equal level will be affected by the operation. If no prefix is given,
-    `gnus-group-default-list-level' is used.  If
-    `gnus-group-use-permanent-levels', then a prefix to the `g' and `l'
-    commands will also set the default level.
-
-    \quad [score] An article score. If no prefix is given,
-    `gnus-summary-default-score' is used. \\*[\baselineskip]
-                                % some keys
-    Gnus startup-commands:
-    \begin{keys}{M-x gnus-unplugged}
-      M-x gnus           & start Gnus. \\
-      M-x gnus-no-server & start Gnus without connecting to server
-      (i.e. to read mail). \\
-    \end{keys}
-    Additionally, there are the two commands \texttt{gnus-plugged} and
-    \texttt{gnus-unplugged}, which are only used if you want to download
-    news and/or read previously downloaded news offline (see C-c C-i g Gnus
-    Unplugged RET). Note: \texttt{gnus-no-server} ignores the stuff in
-    \texttt{gnus-agent-directory}, and thus does not allow you to use Gnus
-    Unplugged.
-                                %
-    \begin{keys}{C-c C-i}
-      C-c C-i & Go to the Gnus online {\bf info}.\\
-      C-c C-b & Send a Gnus {\bf bug} report.\\
-    \end{keys}
-    }}
-
-\newcommand{\GroupLevels}{%
-  The table below assumes that you use the default Gnus levels.
-  Fill your user-specific levels in the blank cells.\\[1\baselineskip]
-  \begin{tabular}{|c|l|l|}
-    \hline
-    Level & Groups & Status \\
-    \hline
-    1 & draft/mail groups   &              \\
-    2 & mail groups         &              \\
-    3 &                     & subscribed   \\
-    4 &                     &              \\
-    5 & default list level  &              \\
-    \hline
-    6 &                     & unsubscribed \\
-    7 &                     &              \\
-    \hline
-    8 &                     & zombies      \\
-    \hline
-    9 &                     & killed       \\
-    \hline
-  \end{tabular}}
-
-\newcommand{\MarkCharacters}{%
-  {\esamepage If a command directly sets a mark, it is shown in parentheses.\\*
-    \newlength{\markcolwidth}
-    \settowidth{\markcolwidth}{` '}% widest character
-    \addtolength{\markcolwidth}{4\tabcolsep}
-    \addtolength{\markcolwidth}{-\columnwidth}
-    \newlength{\markdblcolwidth}
-    \setlength{\markdblcolwidth}{\columnwidth}
-    \addtolength{\markdblcolwidth}{-2\tabcolsep}
-    \begin{tabular}{|c|p{-\markcolwidth}|}
-      \hline
-      \multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.}
-        All these marks appear in the first column of the summary line, and so
-        are mutually exclusive.}\\ 
-      \hline
-      ` ' & (M-u, M SPC, M c) Not read.\\
-      !   & (!, M !, M t) Ticked (interesting).\\
-      ?   & (?, M ?) Dormant (only followups are interesting).\\
-      E   & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\
-      G   & (C, B DEL) Canceled article (or deleted in mailgroups).\\
-      \$  & (M-d, M s x, S x).  Marked as spam.\\
-      \hline\hline
-      \multicolumn{2}{|p{\markdblcolwidth}|}
-      {The marks below mean that the article
-        is read (killed, uninteresting), and have more or less the same effect.
-        Some commands however explicitly differentiate between them (e.g.\ M
-        M-C-r, adaptive scoring).}\\
-      \hline
-      r   & (d, M d, M r) Deleted (marked as {\bf read}).\\
-      C   & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\
-      F   & SOUPed article. See the manual.\\
-      O   & {\bf Old} (read in a previous session).\\
-      K   & (k, M k; C-k, M K) {\bf Killed}.\\
-      M   & Article marked as read by duplicate suppression.\\
-      Q   & Article is part of a sparse thread (see ``Threading''
-      in the manual).\\
-      R   & {\bf Read} (viewed in actuality).\\
-      X   & Killed by a kill file.\\
-      Y   & Killed due to low score.\\
-      \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline
-      \multicolumn{2}{|p{\markdblcolwidth}|}
-      {{\bf Marks not affecting visibility}}\\
-      \hline
-      \#  & (\#, M \#, M P p) Processable (will be affected by the next operation).
-      [2]\\
-      A   & {\bf Answered} (followed-up or replied). [2]\\
-      F   & Forwarded. [2]\\
-      $\ast$  & Cached. [2]\\
-      S   & Saved. [2]\\
-      N   & Recently arrived. [2]\\
-      .   & Unseen. [2]\\
-      +   & Over default score. [3]\\
-      $-$ & Under default score. [3]\\
-      $=$ & Has children (thread underneath it). Add `\%e' to
-      `gnus-summary-line-format'. [3]\\
-      \hline
-    \end{tabular}
-    }}
-
-\newcommand{\GroupModeGeneral}{%
-  \begin{keys}{C-c M-C-x}
-    RET     & (=) Enter this group. [Prefix: how many (read) articles to fetch.
-    Positive: newest articles, negative: oldest ones; non-numerical:
-    view all articles, not just unread]\\
-    M-RET   & Enter group quickly.\\
-    M-SPC   & Same as RET but does not expunge and hide dormants.\\
-    M-C-RET & Enter group without any processing, changes will not be permanent.\\
-    SPC     & Select this group and display the first (unread) article. [Same
-    prefix as above.]\\
-    ?       & Give a very short help message.\\
-    $<$     & Go to the beginning of the Group buffer.\\
-    $>$     & Go to the end of the Group buffer.\\
-    ,       & Jump to the lowest-level group with unread articles.\\
-    .       & Jump to the first group with unread articles.\\
-    \^{}      & Enter the Server buffer mode.\\
-    a       & Post an {\bf article} to a group
-              [Prefix: use group under point to find posting-style].\\
-    b       & Find {\bf bogus} groups and delete them.\\
-    c       & Mark all unticked articles in this group as read ({\bf catch-up}).
-    [p/p]\\ 
-    g       & Check the server for new articles ({\bf get}). [level]\\
-    M-g     & Check the server for new articles in this group ({\bf get}). [p/p]\\
-    j       & {\bf Jump} to a group.\\
-    m       & {\bf Mail} a message to someone
-              [Prefix: use group under point to find posting-style].\\
-    n       & Go to the {\bf next} group with unread articles. [distance]\\
-    M-n     & Go to the {\bf next} group on the same or lower level.
-    [distance]\\ 
-    p       & (DEL) Go to the {\bf previous} group with unread articles.
-    [distance]\\ 
-    M-p     & Go to the {\bf previous} group on the same or lower level. [distance]\\ 
-    q       & {\bf Quit} Gnus.\\
-    r       & Re-read the init file ({\bf reset}).\\
-    s       & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if
-    `gnus-save-newsrc-file').\\ 
-    z       & Suspend (kill all buffers of) Gnus.\\
-    B       & {\bf Browse} a foreign server.\\
-    C       & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\
-    F       & {\bf Find} new groups and process them.\\
-    N       & Go to the {\bf next} group. [distance]\\
-    P       & Go to the {\bf previous} group. [distance]\\
-    Q       & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\
-    R       & {\bf Restart} Gnus.\\
-    Z       & Clear the dribble buffer.\\
-    M-c     & Clear data from group (marks and list of read articles). \\
-    C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level
-    (depending on `gnus-group-sort-function').\\
-    C-c C-x & Run all expirable articles in this group through the {\bf expiry} 
-    process.\\
-    C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\
-    C-c M-g & Activate all {\bf groups}.\\
-    C-c C-i & Gnus online-manual ({\bf info}).\\
-    C-x C-t & {\bf Transpose} two groups.\\
-    H f     & Fetch this group's {\bf FAQ} (using ange-ftp).\\
-    H c     & Display this group's {\bf charter}. [Prefix: query for group]\\
-    H C     & Display this group's {\bf control message} (using
-    ange-ftp). [Prefix: query for group]\\
-    H v     & (V) Display the Gnus {\bf version} number.\\
-    H d     & (C-c C-d) Show the {\bf description} of this group
-    [Prefix: re-read from server].\\ 
-    M-d     & {\bf Describe} all groups. [Prefix: re-read from server]\\
-    D g     & Regenerate a Sieve script from group parameters.\\
-    D u     & Regenerate Sieve script and {\bf upload} to server.\\
-  \end{keys}
-  }
-
-\newcommand{\ListGroups}{%
-  {\esamepage
-    \begin{keys}{A M}
-      A d     & (C-c C-M-a) List all groups whose names or {\bf descriptions} match a regexp.\\ 
-      A k     & (C-c C-l) List all {\bf killed} groups.
-      [Prefix: look at active-file from server]\\
-      A l     & List all groups on a specific level.
-      [Prefix: also list groups with no unread articles]\\
-      A a     & (C-c C-a) List all groups whose names match a regexp
-      ({\bf apropos}).\\ 
-      A A     & List the server's active-file.\\
-      A M     & List groups that {\bf match} a regexp.\\
-      A m     & List groups that {\bf match} a regexp and have unread articles. 
-      [level]\\ 
-      A s     & (l) List all {\bf subscribed} groups with unread articles.
-      [level; 5 and lower is the default]\\
-      A u     & (L) List all groups (including read and {\bf unsubscribed}).
-      [level; 7 and lower is the default]\\
-      A z     & List all {\bf zombie} groups.\\
-      A c     & List all groups with cached articles. [level]\\
-      A ?     & List all groups with dormant articles. [level]\\
-    \end{keys}
-    }
-
-  \newcommand{\CreateEditGroups}{%
-    {\esamepage
-      The select methods are indicated in parentheses.\\*
-      \begin{keys}{G DEL}
-        G a     & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\
-        G c     & {\bf Customize} this group's parameters.\\
-        G d     & Make a {\bf directory} group (every file must be a posting and files
-        must have numeric names). (nndir)\\
-        G D     & Enter a {\bf directory} as a (temporary) group.
-        (nneething without recording articles read)\\
-        G e     & (M-e) {\bf Edit} this group's select method.\\
-        G E     & {\bf Edit} this group's info (select method, articles read, etc).\\
-        G f     & Make a group based on a {\bf file}. (nndoc)\\
-        G h     & Make the Gnus {\bf help} (documentation) group. (nndoc)\\
-        G k     & Make a {\bf kiboze} group. (nnkiboze)\\
-        G m     & {\bf Make} a new group.\\
-        G p     & Edit this group's {\bf parameters}.\\
-        G r     & Rename this group (does not work with read-only groups!).\\
-        G u     & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\
-        G v     & Add this group to a {\bf virtual} group. [p/p]\\
-        G V     & Make a new empty {\bf virtual} group. (nnvirtual)\\
-        G w     & Create ephemeral group based on web-search. [Prefix: make solid group
-        instead]\\
-        G R     & Make an {\bf RSS} group.\\
-        G DEL   & {\bf Delete} group [Prefix: delete all articles as well].\\
-        G x     & Expunge all deleted articles in an nnimap mailbox.\\
-        G l     & Edit ACL (Access Control {\bf List}) for an nnimap mailbox.\\
-      \end{keys}
-      You can also create mail-groups and read your mail with Gnus (very useful
-      if you are subscribed to mailing lists), using one of the methods
-      nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info
-      (C-c C-i g Reading Mail RET).
-      }}
-
-                                % TODO:
-  \newcommand{\SoupCommands}{%
-    \begin{keys}{G s w}
-      G s b   & gnus-group-brew-soup: not documented.\\
-      G s p   & gnus-soup-pack-packet: not documented.\\
-      G s r   & nnsoup-pack-replies: not documented.\\
-      G s s   & gnus-soup-send-replies: not documented.\\
-      G s w   & gnus-soup-save-areas: not documented.\\
-    \end{keys}}
-
-  \newcommand{\MarkGroups}{%
-    \begin{keys}{M m}
-      M m     & (\#) Set the process {\bf mark} on this group. [scope]\\
-      M r     & Mark all groups matching regular expression.\\
-      M u     & (M-\#) Remove the process mark from this group ({\bf unmark}).
-      [scope]\\ 
-      M U     & Remove the process mark from all groups (\textbf{umark all}).\\
-      M w     & Mark all groups in the current region. [prefix: unmark]\\
-      M b     & Mark all groups in the {\bf buffer}. [prefix: unmark]\\
-    \end{keys}}
-
-  \newcommand{\GroupTopicsGeneral}{%
-    {\esamepage
-      Topics are ``categories'' for groups. Press t in the group-buffer to
-      toggle gnus-topic-mode (C-c C-i g Group Topics RET).\\*
-      \begin{keys}{C-c C-x}
-        T n     & Prompt for topic {\bf name} and create it.\\
-        T m     & {\bf Move} the current group to some other topic [p/p].\\
-        T j     & {\bf Jump} to a topic.\\
-        T c     & {\bf Copy} the current group to some other topic [p/p].\\
-        T D     & Remove (not delete) the current group [p/p].\\
-        T M     & {\bf Move} all groups matching a regexp to a topic.\\
-        T C     & {\bf Copy} all groups matching a regexp to a topic.\\
-        T H     & Toggle {\bf hiding} of empty topics.\\
-        T r     & {\bf Rename} a topic.\\
-        T DEL   & Delete an empty topic.\\
-        T \#    & Mark all groups in the current topic with the process-mark.\\
-        T M-\#  & Remove the process-mark from all groups in the current topic.\\
-        T TAB   & (TAB) Indent current topic [Prefix: unindent].\\ 
-        M-TAB   & Unindent the current topic.\\
-        RET     & (SPC) Either unfold topic or enter group [level].\\
-        T s     & {\bf Show} the current topic. [Prefix: show permanently]\\
-        T h     & {\bf Hide} the current topic. [Prefix: hide permanently]\\
-        C-c C-x & Expire all articles in current group or topic.\\
-        C-k     & {\bf Kill} a group or topic.\\
-        C-y     & {\bf Yank} a group or topic.\\
-        A T     & List active-file using {\bf topics}.\\
-        G p     & Edit topic-{\bf parameters}.\\
-        T M-n   & Go to {\bf next} topic. [distance]\\
-        T M-p   & Go to {\bf previous} topic. [distance]\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\TopicSorting}{%
-    {\esamepage
-      \begin{keys}{T S m}
-        T S a  & Sort {\bf alphabetically}.\\
-        T S u  & Sort by number of {\bf unread} articles.\\
-        T S l  & Sort by group {\bf level}.\\
-        T S v  & Sort by group score ({\bf value}).\\
-        T S r  & Sort by group {\bf rank}.\\
-        T S m  & Sort by {\bf method}.\\
-        T S e  & Sort by {\bf server} name.\\
-        T S s  & Sort according to `gnus-group-sort-function'.\\
-      \end{keys}
-      With a prefix these commands will sort in reverse order.
-      }
-    }
-
-  \newcommand{\SubscribeKillYankGroups}{%
-    {\esamepage
-      \begin{keys}{S C-k}
-        S k     & (C-k) {\bf Kill} this group.\\
-        S l     & Set the {\bf level} of this group. [p/p]\\
-        S s     & (U) Prompt for a group and toggle its {\bf subscription}.\\
-        S t     & (u) {\bf Toggle} subscription to this group. [p/p]\\
-        S w     & (C-w) Kill all groups in the region.\\
-        S y     & (C-y) {\bf Yank} the last killed group.\\
-        S z     & Kill all {\bf zombie} groups.\\
-        S C-k   & Kill all groups on a certain level.\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\SummaryModeGeneral}{%
-    {\esamepage
-      \begin{keys}{M-RET}
-        SPC     & (A SPC, A n) Select an article, scroll it one page, move to the
-        next one.\\ 
-        DEL     & (A DEL, A p, b) Scroll this article one page back. [distance]\\
-        RET     & (A RET) Scroll this article one line forward. [distance]\\
-        M-RET   & (A M-RET) Scroll this article one line backward. [distance]\\
-        =       & Expand the Summary window (fullsize).
-        [Prefix: shrink to display article window]\\
-                                %
-        \&      & Execute a command on all articles whose header matches a regexp.
-        [Prefix: move backwards]\\
-        M-\&    & Execute a command on all articles having the process mark.\\
-                                %
-        M-n     & (G M-n) Go to the {\bf next} summary line of an unread article.
-        [distance]\\ 
-        M-p     & (G M-p) Go to the {\bf previous} summary line of an unread article. 
-        [distance]\\ 
-        M-s     & {\bf Search} through all subsequent articles for a regexp.\\
-        M-r     & Search through all previous articles for a regexp.\\
-                                %
-        A P     & {\bf Postscript}-print current buffer.\\
-                                %
-        M-k     & Edit this group's {\bf kill} file.\\
-        M-K     & Edit the general {\bf kill} file.\\
-                                %
-        C-t     & Toggle {\bf truncation} of summary lines.\\
-        Y g     & Regenerate the summary-buffer.\\
-        Y c     & Insert all cached articles into the summary-buffer.\\
-                                %
-        M-C-e   & {\bf Edit} the group-parameters.\\
-        M-C-a   & Customize the group-parameters.\\
-                                %
-                                % article handling
-                                %
-        A $<$   & ($<$, A b) Scroll to the beginning of this article.\\
-        A $>$   & ($>$, A e) Scroll to the end of this article.\\
-        A s     & (s) Perform an i{\bf search} in the article buffer.\\
-                                %
-        A D     & (C-d) Un{\bf digestify} this article into a separate group.
-        [Prefix: force digest]\\
-        M-C-d   & Like C-d, but open several documents in nndoc-groups, wrapped
-        in an nnvirtual group [p/p]\\
-                                %
-        A g     & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ 
-        A r     & (\^{}, A \^{}) Fetch the parent(s) of this article.
-        [Prefix: if positive fetch \textit{n} ancestors;
-        negative: fetch only the \textit{n}th ancestor]\\
-        A t     & {\bf Translate} this article.\\
-        A R     & Fetch all articles mentioned in the {\bf References}-header.\\
-        A T     & Fetch full \textbf{thread} in which the current article appears.\\
-        M-\^{}  & Fetch the article with a given Message-ID.\\
-        S y     & {\bf Yank} the current article into an existing message-buffer.
-        [p/p]\\
-        A M     & Setup group parameters for {\bf mailing} lists from
-        headers. [Prefix: replace old settings]\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\MIMESummary}{%
-    {\esamepage
-      For the commands operating on one MIME part (a subset of gnus-article-*), a
-      prefix selects which part to operate on. If the point is placed over a
-      MIME button in the article buffer, use the corresponding bindings for the
-      article buffer instead.
-      \begin{keys}{W M w}
-        K v      & (b, W M b) {\bf View} the MIME-part.\\
-        K o      & {\bf Save} the MIME part.\\
-        K c      & {\bf Copy} the MIME part.\\
-        K e      & View the MIME part {\bf externally}.\\
-        K i      & View the MIME part {\bf internally}.\\
-        K $\mid$ & Pipe the MIME part to an external command.\\
-        K b      & Make all the MIME parts have buttons in front of them.\\
-        K m      & Try to repair {\bf multipart-headers}.\\
-        K C      & View the MIME part using a different {\bf charset}.\\
-        X m      & Save all parts matching a MIME type to a directory. [p/p]\\
-        M-t      & Toggle the buttonized display of the article buffer.\\
-        W M w    & Decode RFC2047-encoded words in the article headers.\\
-        W M c    & Decode encoded article bodies. [Prefix: prompt for charset]\\
-        W M v    & View all MIME parts in the current article.\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\SortSummary}{%
-    {\esamepage
-      \begin{keys}{C-c C-s C-a}
-        C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\
-        C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\
-        C-c C-s C-i & Sort the summary-buffer by article score.\\
-        C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\
-        C-c C-s C-c & Sort the summary-buffer by length.\\
-        C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\
-        C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\
-        C-c C-s C-r & Sort the summary-buffer {\bf randomly}.\\
-        C-c C-s C-o & Sort the summary-buffer using the default method.\\
-      \end{keys}
-      With a prefix these functions sort in reverse order.
-      }
-    }
-
-  \newcommand{\MailGroups}{% formerly \Bsubmap
-    {\esamepage
-      These commands (except `B c') are only valid in a mail group.\\*
-      \begin{keys}{B M-C-e}
-        B DEL   & (B backspace, B delete) {\bf Delete} the mail article from disk (!).
-        [p/p]\\
-        B B     & Crosspost this article to another group.\\
-        B c     & {\bf Copy} this article from any group to a mail group. [p/p]\\
-        B e     & {\bf Expire} all expirable articles in this group. [p/p]\\
-        B i     & {\bf Import} a random file into this group.\\
-        B I     & Create an empty article in this group.\\
-        B m     & {\bf Move} the article from one mail group to another. [p/p]\\
-        B p     & Query whether the article was {\bf posted} as well.\\
-        B q     & {\bf Query} where the article will end up after fancy splitting\\
-        B r     & {\bf Respool} this mail article. [p/p]\\
-        B t     & {\bf Trace} the fancy splitting patterns applied to this article.\\
-        B w     & (e) Edit this article.\\
-        B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group
-        (!). [p/p]\\ 
-        K E     & {\bf Encrypt} article body. [p/p]\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\DraftGroup}{% formerly \Dsubmap
-    {\esamepage
-      The ``drafts''-group contains messages that have been saved but not sent
-      and rejected articles. \\*
-      \begin{keys}{B DEL}
-        D e      & \textbf{edit} message.\\
-        D s      & \textbf{Send} message. [p/p]\\
-        D S      & \textbf{Send} all messages.\\
-        D t      & \textbf{Toggle} sending (mark as unsendable).\\
-        B DEL    & \textbf{Delete} message (like in mailgroup).\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\SelectArticles}{% formerly \Gsubmap
-    {\esamepage
-      These commands select the target article. They do not understand the prefix.\\*
-      \begin{keys}{G C-n}
-        h       & Enter article-buffer.\\
-        G b     & (,) Go to the {\bf best} article (the one with highest score).\\
-        G f     & (.) Go to the {\bf first} unread article.\\
-        G n     & (n) Go to the {\bf next} unread article.\\
-        G p     & (p) Go to the {\bf previous} unread article.\\
-                                %
-        G N     & (N) Go to {\bf the} next article.\\
-        G P     & (P) Go to the {\bf previous} article.\\
-                                %
-        G C-n   & (M-C-n) Go to the {\bf next} article with the same subject.\\
-        G C-p   & (M-C-p) Go to the {\bf previous} article with the same subject.\\
-                                %
-        G l     & (l) Go to the previously read article ({\bf last-read-article}).\\
-        G o     & Pop an article off the summary history and go to it.\\
-                                %
-        G g     & Search an article via subject.\\
-        G j     & (j) Search an article via Message-Id or subject.\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\ArticleModeGeneral}{%
-    {\esamepage
-      The normal navigation keys work in Article mode. Some additional keys are:\\
-      \begin{keys}{C-c RET}
-        C-c \^{} & Get the article with the Message-ID near point.\\
-        C-c RET & Send reply to address near point.\\
-        h       & Go to the \textbf{header}-line of the article in the
-        summary-buffer.\\
-        s       & Go to \textbf{summary}-buffer.\\
-        RET     & (middle mouse button) Activate the button at point to follow
-        an URL or Message-ID.\\
-        TAB     & Move the point to the next button.\\
-        M-TAB   & Move point to previous button.\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\WashArticle}{% formerly \Wsubmap
-    {\esamepage
-      \begin{keys}{W W H}
-        W 6     & Translate a base64 article.\\
-        W a     & Strip certain {\bf headers} from body.\\
-        W b     & Make Message-IDs and URLs in the article mouse-clickable
-        {\bf buttons}.\\  
-        W c     & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\
-        W d     & Treat {\bf dumbquotes}.\\
-        W e     & Treat {\bf emphasized} text.\\
-        W h     & Treat {\bf HTML}.\\
-        W l     & (w) Remove page breaks ({\bf\^{}L}) from the article.\\
-        W m     & {\bf Morse} decode article.\\
-        W o     & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\
-        W p     & Verify X-{\bf PGP}-Sig header.\\
-        W q     & Treat {\bf quoted}-printable in the article.\\
-        W r     & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\
-        W s     & Verify (and decrypt) a {\bf signed} message.\\
-        W t     & (t) {\bf Toggle} display of all headers.\\
-        W u     & {\bf Unsplit} broken URLs.\\
-        W v     & (v) Toggle permanent {\bf verbose} displaying of all headers.\\
-        W w     & Do word {\bf wrap} in the article.\\
-        W B     & Add clickable {\bf buttons} to the article headers.\\
-        W C     & {\bf Capitalize} first word in each sentence.\\
-        W Q     & Fill long lines.\\
-        W Z     & Translate a HZ-encoded article.\\
-                                %
-        W G u   & {\bf Unfold} folded header lines.\\
-        W G f   & {\bf Fold} all header lines.\\
-        W G n   & Unfold {\bf Newsgroups:} and Follow-Up-To:.\\
-                                %
-        W Y c   & Repair broken {\bf citations}.\\
-        W Y a   & Repair broken {\bf attribution} lines.\\
-        W Y u   & {\bf Unwrap} broken citation lines.\\
-        W Y f   & Do a {\bf full} deuglification (W Y c, W Y a, W Y u).\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\BlankAndWhitespace}{% 
-    {\esamepage
-      \begin{keys}{W E w}
-        W E l   & Strip blank {\bf lines} from the beginning of the article.\\
-        W E m   & Replace blank lines with empty lines and remove {\bf multiple}
-        blank lines.\\
-        W E t   & Remove {\bf trailing} blank lines.\\
-        W E a   & Strip blank lines at the beginning and the end
-        (W E l, W E m and W E t).\\
-        W E A   & Strip {\bf all} blank lines.\\
-        W E s   & Strip leading blank lines from the article body.\\
-        W E e   & Strip trailing blank lines from the article body.\\
-        W E w   & Remove leading {\bf whitespace} from all headers.\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\Picons}{% 
-    {\esamepage
-      \begin{keys}{W D D}
-        W D s   & (W g) Display {\bf smilies}.\\
-        W D x   & (W f) Look for and display any X-{\bf Face} headers.\\
-        W D d   & Display any Face headers.\\
-        W D n   & Toggle picons in {\bf Newsgroups} and Followup-To.\\
-        W D m   & Toggle picons in {\bf mail} headers (To and Cc).\\
-        W D f   & Toggle picons in {\bf From}.\\
-        W D D   & Remove all images from the article buffer.\\
-      \end{keys}
-      }
-    }
-
-  \newcommand{\TimeAndDate}{% 
-    {\esamepage
-      \begin{keys}{W T u}
-        W T u   & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\
-        W T i   & Display the article timestamp in {\bf ISO} 8601.\\
-        W T l   & Display the article timestamp in the {\bf local} timezone.\\
-        W T s   & Display according to `gnus-article-time-format'.\\
-        W T e   & Display the time {\bf elapsed} since it was sent.\\
-        W T o   & Display the {\bf original} timestamp.\\
-        W T p   & Display the date in format that's {\bf
-          pronounceable} in English.\\        
-      \end{keys}
-      }
-    }
-
-  \newcommand{\HideHighlightArticle}{%
-    {\esamepage
-      \begin{keys}{W W C-c}
-        W W a   & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\
-        W W h   & Hide article {\bf headers}.\\
-        W W b   & Hide {\bf boring} headers.\\
-        W W s   & Hide {\bf signature}.\\
-        W W l   & Hide {\bf list} identifiers in subject-header.\\
-        W W P   & Hide {\bf PEM} (privacy enhanced messages).\\
-        W W B   & Hide banner specified by group parameter.\\
-        W W c   & Hide {\bf citation}.\\
-        W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\
-        W W C   & Hide cited text in articles that aren't roots.\\
-        W H a   & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\
-        W H c   & Highlight article {\bf citations}.\\
-        W H h   & Highlight article {\bf headers}.\\
-        W H s   & Highlight article {\bf signature}.\\
-      \end{keys}
-      For all hiding-commands: A positive prefix always hides, and a negative
-      prefix will show what was previously hidden.
-      }}
-
-  \newcommand{\MIMEArticleMode}{%
-    {\esamepage
-      \begin{keys}{RET}
-        RET     & (BUTTON-2) Toggle display of the MIME object.\\
-        v       & Prompt for a method and then view object using this method.\\
-        o       & Prompt for a filename and save the MIME object.\\
-        C-o     & Prompt for a filename to save the MIME object to and remove it.\\
-        d       & {\bf Delete} the MIME object.\\
-        c       & {\bf Copy} the MIME object to a new buffer and display this buffer.\\
-        i       & Display the MIME object in this buffer.\\
-        C       & Copy the MIME object to a new buffer and display this buffer using {\bf Charset} \\
-        E       & View internally. \\
-        e       & View {\bf externally}. \\
-        t       & View the MIME object as a different {\bf type}.\\
-        p       & {\bf Print} the MIME object.\\
-        $\mid$  & Pipe the MIME object to a process.\\
-        .       & Take action on the MIME object.\\
-      \end{keys}
-      }
-    }
-
-  %% end of article mode for reading ..........................................
-
-  \newcommand{\MarkArticlesGeneral}{% formerly \Msubmap
-    {\esamepage
-      \begin{keys}{M M-C-r}
-        d       & (M d, M r) Mark this article as read and move to the next one.
-        [scope]\\ 
-        D       & Mark this article as read and move to the previous one. [scope]\\
-        !       & (u, M !, M t) Tick this article (mark it as interesting) and move
-        to the next one. [scope]\\
-        U       & Tick this article and move to the previous one. [scope]\\ 
-        M ?     & (?) Mark this article as dormant (only followups are
-        interesting). [scope]\\ 
-        M D     & Show all {\bf dormant} articles (normally they are hidden unless they
-        have any followups).\\
-        M M-D   & Hide all {\bf dormant} articles.\\
-        C-w     & Mark all articles between point and mark as read.\\
-        M-u     & (M SPC, M c) Clear all marks from this article and move to the next
-        one. [scope]\\ 
-        M-U     & Clear all marks from this article and move to the previous one.
-        [scope]\\
-                                %
-        M e     & (E, M x) Mark this article as {\bf expirable}. [scope]\\
-                                %
-        M k     & (k) {\bf Kill} all articles with the same subject then select the
-        next unread one.\\ 
-        M K     & (C-k) {\bf Kill} all articles with the same subject as this one.\\
-                                %
-        M C     & {\bf Catch-up} the articles that are not ticked and not dormant.\\
-        M C-c   & {\bf Catch-up} all articles in this group.\\
-        M H     & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\
-                                %
-        M b     & Set a {\bf bookmark} in this article.\\
-        M B     & Remove the {\bf bookmark} from this article.\\
-                                %
-        M M-r   & (x) Expunge all {\bf read} articles from this group.\\
-        M M-C-r & Expunge all articles having a given mark.\\
-        M S     & (C-c M-C-s) {\bf Show} all expunged articles.\\
-        M M C-h & Displays some more keys doing ticking slightly differently.\\
-      \end{keys}
-      The variable `gnus-summary-goto-unread' controls what happens after a mark
-      has been set (C-x C-i g Setting Marks RET)
-      }}
-
-  \newcommand{\MarkByScore}{%
-    \begin{keys}{M V m}
-      M V c   & {\bf Clear} all marks from all high-scored articles. [score]\\
-      M V k   & {\bf Kill} all low-scored articles. [score]\\
-      M V m   & Mark all high-scored articles with a given {\bf mark}. [score]\\
-      M V u   & Mark all high-scored articles as interesting (tick them). [score]\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\ProcessMark}{%
-  {\esamepage 
-    These commands set and remove the process mark (\#). You only need to use
-    it if the set of articles you want to operate on is non-contiguous. Else
-    use a numeric prefix.\\*
-    \begin{keys}{M P R}
-      M P p   & (\#, M \#) Mark this article.\\
-      M P u   & (M-\#, M M-\#) \textbf{unmark} this article.\\
-      M P b   & Mark all articles in {\bf buffer}.\\
-      M P r   & Mark all articles in the {\bf region}.\\
-      M P g   & Unmark all articles in the region.\\
-      M P R   & Mark all articles matching a {\bf regexp}.\\
-      M P G   & Unmark all articles matching a regexp.\\
-      M P t   & Mark all articles in this (sub){\bf thread}.\\
-      M P T   & Unmark all articles in this (sub){\bf thread}.\\
-      M P s   & Mark all articles in the current {\bf series}.\\
-      M P S   & Mark all {\bf series} that already contain a marked article.\\
-      M P a   & Mark {\bf all} articles (in series order).\\
-      M P U   & \textbf{unmark} all articles.\\
-      M P i   & {\bf Invert} the list of process-marked articles.\\
-      M P k   & Push the current process-mark set onto stack and unmark
-      all articles.\\
-      M P y   & Pop process-mark set from stack and restore it.\\
-      M P w   & Push process-mark set on the stack.\\
-      M P v   & Mark all articles with score over the default score. [Prefix: score]\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\Limiting}{%
-  {\esamepage
-    \begin{keys}{/M}
-      //   & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
-      /a   & Limit the summary-buffer to articles matching {\bf author}.\\
-      /x   & Limit depending on ``extra'' headers.\\
-      /u   & (x) Limit to {\bf unread} articles.
-      [Prefix: also exclude ticked and dormant articles]\\
-      /.   & Limit to unseen articles.\\
-      /m   & Limit to articles marked with specified {\bf mark}.\\
-      /t   & Ask for a number and exclude articles younger than that many days.
-      [Prefix: exclude older articles]\\
-      /n   & Limit to current article. [p/p]\\
-      /w   & Pop the previous limit off the stack and restore it.
-      [Prefix: pop all limits]\\
-      /v   & Limit to score. [score]\\
-      /E   & (M S) Include all expunged articles in the limit.\\
-      /D   & Include all dormant articles in the limit.\\
-      /*   & Limit to cached articles.\\
-      Y C  & Include all cached articles in the limit.\\
-      /d   & Exclude all dormant articles from the limit.\\
-      /M   & Exclude all marked articles.\\
-      /T   & Include all articles from the current thread in the limit.\\
-      /c   & Exclude all dormant articles that have no children from the limit.\\
-      /C   & Mark all excluded unread articles as read.
-      [Prefix: also mark ticked and dormant articles]\\
-      /o   & Insert all {\bf old} articles. [Prefix: how many]\\
-      /N   & Insert all {\bf new} articles.\\
-      /p   & Limit to articles {\bf predicated} in the `display' group parameter.\\
-      /r   & Limit to {\bf replied} articles. [Prefix: unreplied]\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\OutputArticles}{% formerly \Osubmap
-  {\esamepage
-    \begin{keys}{O m}
-      O o     & (o, C-o) Save this article using the default article saver. [p/p]\\
-      O b     & Save this article's {\bf body} in plain file format [p/p]\\
-      O f     & Save this article in plain {\bf file} format. [p/p]\\
-      O F     & like O f, but overwrite file's contents. [p/p]\\
-      O h     & Save this article in {\bf mh} folder format. [p/p]\\
-      O m     & Save this article in {\bf mail} format. [p/p]\\
-      O r     & Save this article in {\bf rmail} format. [p/p]\\
-      O v     & Save this article in {\bf vm} format. [p/p]\\
-      O p     & ($\mid$) {\bf Pipe} this article to a shell command. [p/p]\\
-      O P     & \textbf{Print} this article using Muttprint. [p/p]\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\PostReplyetc}{% formerly \Ssubmap
-  {\esamepage
-    These commands put you in a separate news or mail buffer. See the section
-    about composing messages for more information.\\*
-                                %After
-                                %editing the article, send it by pressing C-c C-c.  If you are in a
-                                %foreign group and want to post the article using the foreign server, give
-                                %a prefix to C-c C-c.\\* 
-    \begin{keys}{S O m}
-      S p     & (a) {\bf Post} an article to this group.\\
-      S f     & (f) Post a {\bf followup} to this article.\\
-      S F     & (F) Post a {\bf followup} and include the original. [p/p]\\
-      S o p   & Forward this article as a {\bf post} to a newsgroup.\\
-      S M-c   & Send a complaint about excessive crossposting to the author of this
-      article. [p/p]\\
-                                %
-      S m     & (m) Send a {\bf mail} to some other person.\\
-      S r     & (r) Mail a {\bf reply} to the author of this article.\\
-      S R     & (R) Mail a {\bf reply} and include the original. [p/p]\\
-      S B r   & Like S r but ignore the Reply-To: header.\\
-      S B R   & Like S R but ignore the Reply-To: header.\\
-      S w     & Mail a {\bf wide} reply to this article.\\
-      S W     & Mail a {\bf wide} reply to this article and include
-      the original.\\
-      S v     & Mail a {\bf very} wide reply to this article.\\
-      S V     & Mail a {\bf very} wide reply to this article and include the original.\\
-      S o m   & (C-c C-f) Forward this article by {\bf mail} to a person.\\
-      S D b   & Resend {\bf bounced} mail.\\
-      S D r   & {\bf Resend} mail to a different person.\\
-      S D e   & {\bf Edit} and resend.\\
-                                %
-      S n     & Post a followup via {\bf news} even if you got the message
-      through mail.\\
-      S N     & Post a followup via {\bf news} and include the original mail.
-      [p/p]\\
-                                %
-      S c     & (C) {\bf Cancel} this article (only works if it is
-      your own). [p/p]\\
-      S s     & {\bf Supersede} this article with a new one (only for own
-      articles).\\
-                                %
-      S O m   & Digest these series and forward by {\bf mail}. [p/p]\\
-      S O p   & Digest these series and forward as a {\bf post} to a newsgroup.
-      [p/p]\\ 
-                                %
-      S u     & {\bf Uuencode} a file and post it as a series.\\
-    \end{keys}
-    If you want to cancel or supersede an article you just posted (before it
-    has appeared on the server), go to the *post-news* buffer, change
-    `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c.
-    }}
-
-\newcommand{\Threading}{% formerly \Tsubmap
-  {\esamepage
-    \begin{keys}{T M-\#}
-      T \#    & Mark this thread with the process mark.\\
-      T M-\#  & Remove process-marks from this thread.\\
-                                %
-      T t     & Re-{\bf thread} the current article's thread.\\
-      T \^{}  & Make the current article child of the marked (or previous) article.\\
-                                % movement
-      T n     & (M-C-f, M-down) Go to the {\bf next} thread. [distance]\\
-      T p     & (M-C-b, M-up) Go to the {\bf previous} thread. [distance]\\
-      T d     & {\bf Descend} this thread. [distance]\\
-      T u     & Ascend this thread ({\bf up}-thread). [distance]\\
-      T o     & Go to the top of this thread.\\
-                                %
-      T s     & {\bf Show} the thread hidden under this article.\\
-      T h     & {\bf Hide} this (sub)thread.\\
-                                %
-      T i     & {\bf Increase} the score of this thread.\\
-      T l     & (M-C-l) {\bf Lower} the score of this thread.\\
-                                %
-      T k     & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix:
-      tick it, positive prefix: unmark it.]\\
-                                %
-      T H     & {\bf Hide} all threads.\\
-      T S     & {\bf Show} all hidden threads.\\
-      T T     & (M-C-t) {\bf Toggle} threading.\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\Scoring}{% formerly \Vsubmap
-  {\esamepage
-    Read about Adaptive Scoring in the online info.\\*
-    \begin{keys}{\bf A p m l}
-      V a     & {\bf Add} a new score entry, specifying all elements.\\
-      V c     & Specify a new score file as {\bf current}.\\
-      V e     & {\bf Edit} the current score alist.\\
-      V f     & Edit a score {\bf file} and make it the current one.\\
-      V m     & {\bf Mark} all articles below a given score as read.\\
-      V s     & Set the {\bf score} of this article.\\
-      V t     & Display all score rules applied to this article ({\bf track}).\\
-      W w     & List {\bf words} used in scoring.\\
-      V x     & {\bf Expunge} all low-scored articles. [score]\\
-      V C     & {\bf Customize} the current score file through a user-friendly
-      interface.\\
-      V F     & {\bf Flush} the cache of score files.\\
-      V R     & {\bf Re-score} the summary buffer.\\
-      V S     & Display the {\bf score} of this article.\\
-      \bf A p m l& Make a scoring entry based on this article.\\
-    \end{keys}
-    The four letters stand for:\\*
-    \quad \B{A}ction: I)ncrease, L)ower;\\*
-    \quad \B{p}art: a)uthor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines,
-    message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\*
-    \quad \B{m}atch type:\\*
-    \qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\*
-    \qquad date: b)efore, a)t, n)this,\\*
-    \qquad number: $<$, =, $>$;\\*
-    \quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate.
-
-    If you type the second letter in uppercase, the remaining two are assumed
-    to be s)ubstring and t)emporary. 
-    If you type the third letter in uppercase, the last one is assumed to be 
-    t)emporary.
-
-    \quad Extra keys for manual editing of a score file:\\*
-    \begin{keys}{C-c C-c}
-      C-c C-c & Finish editing the score file.\\
-      C-c C-d & Insert the current {\bf date} as number of days.\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\ExtractSeries}{% formerly \Xsubmap
-  {\esamepage
-    Gnus recognizes if the current article is part of a series (multipart
-    posting whose parts are identified by numbers in their subjects, e.g.{}
-    1/10\dots10/10) and processes the series accordingly. You can mark and
-    process more than one series at a time. If the posting contains any
-    archives, they are expanded and gathered in a new group.\\*
-    \begin{keys}{X p}
-      X b     & Un-{\bf binhex} these series. [p/p]\\
-      X o     & Simply {\bf output} these series (no decoding). [p/p]\\ 
-      X p     & Unpack these {\bf postscript} series. [p/p]\\
-      X s     & Un-{\bf shar} these series. [p/p]\\
-      X u     & {\bf Uudecode} these series. [p/p]\\
-    \end{keys}
-
-    Each one of these commands has four variants:\\*
-    \begin{keys}{X v \bf Z}
-      X   \bf z & Decode these series. [p/p]\\
-      X   \bf Z & Decode and save these series. [p/p]\\
-      X v \bf z & Decode and view these series. [p/p]\\
-      X v \bf Z & Decode, save and view these series. [p/p]\\
-    \end{keys}
-    where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u).
-
-    An alternative binding for the most-often used of these commands is\\*
-    \begin{keys}{C-c C-v C-v}
-      C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\
-    \end{keys}
-    }}
-
-\newcommand{\ExitSummary}{% formerly \Zsubmap
-  {\esamepage
-    \begin{keys}{Z G}
-      Z Z     & (q, Z Q) Exit this group.\\
-      Z E     & (Q) {\bf Exit} without updating the group information.\\
-                                %
-      Z c     & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\
-      Z C     & Mark all articles as read ({\bf catch-up}) and exit.\\
-                                %
-      Z n     & Mark all articles as read and go to the {\bf next} group.\\
-      Z N     & Exit and go to {\bf the} next group.\\
-      Z P     & Exit and go to the {\bf previous} group.\\
-                                %
-      Z G     & (M-g) Check for new articles in this group ({\bf get}).\\
-      Z R     & (C-x C-s) Exit this group, and then enter it again ({\bf reenter}).
-      [Prefix: select all articles, read and unread.]\\
-      Z s     & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\MsgCompositionGeneral}{%
-  Press C-c ? in the composition-buffer to get this information.\\*
-  {\esamepage
-    \begin{keys}{C-c C-m}
-                                % sending
-      C-c C-c & Send message and exit. [Prefix: send via foreign server]\\
-      C-c C-s & Send message. [Prefix: send via foreign server]\\
-      C-c C-d & Don't send message (save as \textbf{draft}).\\
-      C-c C-k & \textbf{Kill} message-buffer.\\
-      C-c C-m & {\bf Mail} reply to the address near point.
-      [Prefix: include the original]\\
-                                % modify headers/body
-      C-c C-o & Sort headers.\\
-      C-c C-e & \textbf{Elide} region.\\
-      C-c C-v & Kill everything outside region.\\
-      C-c C-r & Do a \textbf{Rot-13} on the body.\\
-      C-c C-w & Insert signature (from `message-signature-file').\\
-      C-c C-z & Kill everything up to signature.\\
-      C-c C-y & \textbf{Yank} original message.\\
-      C-c C-q & Fill the yanked message.\\
-      C-c M-C-y & \textbf{Yank} a buffer and quote it.\\
-      M-RET   & Insert four newlines and format quoted text. [Prefix:
-      justify as well]\\
-      C-c M-r & \textbf{Rename} message buffer. [Prefix: ask for new name]\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\MsgCompositionMovementArticle}{%
-  The following functions create the header-field if necessary.\\*
-  {\esamepage
-    \begin{keys}{C-c C-f C-u}
-      C-c TAB & Move to \textbf{signature}.\\
-      C-c C-b & Move to \textbf{body}.\\
-      C-c C-f C-t & (C-c C-t) Move to \textbf{To:}.\\
-      C-c C-f C-c & Move to \textbf{Cc:}.\\
-      C-c C-f C-b & Move to \textbf{Bcc:}.\\
-      C-c C-f C-w & Move to \textbf{Fcc:}.\\
-      C-c C-f C-s & Move to \textbf{Subject:}.\\
-      C-c C-f C-r & Move to \textbf{Reply-To:}.\\
-      C-c C-f C-f & Move to \textbf{Followup-To:}.\\
-      C-c C-f C-n & (C-c C-n) Move to \textbf{Newsgroups:}.\\
-      C-c C-f C-u & Move to \textbf{Summary:}.\\
-      C-c C-f C-k & Move to \textbf{Keywords:}.\\
-      C-c C-f C-d & Move to \textbf{Distribution:}.\\
-      C-c C-f C-m & Move to \textbf{Mail-Followup-To:}.\\
-      C-c C-f C-o & Move to \textbf{From:}.\\
-      C-c C-f C-a & Insert a reasonable \textbf{Mail-Followup-To:} for
-      an unsubscribed list. [Prefix: include addresses in \textbf{Cc:}]\\
-      C-c C-f TAB & (C-c C-u) Move to \textbf{Importance:}.\\
-      C-c M-n     & Insert \textbf{Disposition-Notification-To:}
-      (request receipt).\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\MsgCompositionMML}{%
-  {\esamepage
-    \begin{keys}{C-c C-m P}
-      C-c C-m f   & (C-c C-a) Attach \textbf{file}.\\
-      C-c C-m b   & Attach contents of \textbf{buffer}.\\
-      C-c C-m e   & Attach \textbf{external} file (ftp..).\\
-      C-c C-m P   & Create MIME-\textbf{preview} (new
-      buffer). [Prefix: show raw MIME preview]\\
-      C-c C-m v   & \textbf{Validate} article.\\
-      C-c C-m p   & Insert \textbf{part}.\\
-      C-c C-m m   & Insert \textbf{multi}-part.\\
-      C-c C-m q   & \textbf{Quote} region.\\
-      C-c C-m c s & Encrypt message using \textbf{S/MIME}.\\
-      C-c C-m c o & Encrypt message using PGP.\\
-      C-c C-m c p & Encrypt message using \textbf{PGP/MIME}.\\
-      C-c C-m s s & Sign message using \textbf{S/MIME}.\\
-      C-c C-m s o & Sign message using PGP.\\
-      C-c C-m s p & Sign message using \textbf{PGP/MIME}.\\
-      C-c C-m C-n & Remove security related MML tags from message.\\
-                                % TODO: narrow headers (C-c C-m n) ?
-    \end{keys}
-    }
-  }
-
-%% TODO:
-\newcommand{\ServerMode}{%
-  {\esamepage
-    To enter this mode, press \^{} while in Group mode.\\*
-    \begin{keys}{SPC}
-      SPC     & (RET) Browse this server.\\
-      a       & {\bf Add} a new server.\\
-      c       & {\bf Copy} this server.\\
-      e       & {\bf Edit} a server.\\
-      k       & {\bf Kill} this server. [scope]\\
-      l       & {\bf List} all servers.\\
-      q       & Return to the group buffer ({\bf quit}).\\
-      s       & Request that the server scan its sources for new articles.\\
-      g       & Request that the server regenerate its data.\\
-      y       & {\bf Yank} the previously killed server.\\
-      O       & Try to {\bf open} a connection to this server.\\
-      C       & {\bf Close} connection to this server.\\
-      D       & Mark this server as unreachable ({\bf deny}).\\
-      M-o     & {\bf Open} the connection to all servers.\\
-      M-c     & {\bf Close} the connection to all servers.\\
-      R       & Make all denied servers into closed servers.\\
-      L       & Set server status to offline.\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\BrowseServer}{%
-  {\esamepage
-    To enter this mode, press `B' while in Group mode.\\*
-    \begin{keys}{RET}
-      RET     & Enter the current group.\\
-      SPC     & Enter the current group and display the first article.\\
-      ?       & Give a very short help message.\\
-      n       & Go to the {\bf next} group. [distance]\\
-      p       & Go to the {\bf previous} group. [distance]\\
-      q       & (l) {\bf Quit} browse mode.\\
-      u       & Subscribe to the current group. [scope]\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\GroupUnplugged}{%
-  {\esamepage
-    \begin{keys}{J S}
-      J j & Toggle plugged-state.\\
-      J s & Fetch articles from all groups for offline-reading.\\
-      J u & Fetch all eligible articles from this group.\\
-      J S & \textbf{Send} all sendable messages in the drafts group.\\
-                                %
-      J c & Enter \textbf{category} buffer.\\
-      J a & \textbf{Add} this group to an Agent category [p/p].\\
-      J r & \textbf{Remove} this group from its Agent category [p/p].\\
-      J Y & Synchronize flags changed while unplugged with remote server.\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\SummaryUnplugged}{%
-  {\esamepage
-    \begin{keys}{J M-\#}
-      J \#   & \textbf{Mark} the article for downloading.\\
-      J M-\# & \textbf{Unmark} the article for downloading.\\
-      @      & \textbf{Toggle} whether to download the article.\\
-      J c    & Mark all undownloaded articles as read (\textbf{catch-up}).\\
-      J u    & Download all downloadable articles from group.\\
-    \end{keys}
-    }
-  }
-
-\newcommand{\ServerUnplugged}{%
-  {\esamepage
-    \begin{keys}{J a}
-      J a & \textbf{Add} the current server to the list of servers covered
-      by the agent.\\
-      J r & \textbf{Remove} the current server from the list of servers covered
-      by the agent.\\
-    \end{keys}
-    }
-  }
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "refcard.tex"
-%%% End:
diff --git a/texi/gnustmp.texi b/texi/gnustmp.texi
deleted file mode 100644 (file)
index 68d3e85..0000000
+++ /dev/null
@@ -1,21554 +0,0 @@
-\input texinfo                  @c -*-texinfo-*-  -*- coding: iso-latin-1 -*-
-
-@setfilename gnus
-@settitle Pterodactyl Gnus  Manual
-@synindex fn cp
-@synindex vr cp
-@synindex pg cp
-@c @direntry
-@c * Gnus: (gnus).         The newsreader Gnus.
-@c @end direntry
-@iftex
-@finalout
-@end iftex
-@setchapternewpage odd
-
-@iftex
-@end iftex
-
-@iftex
-@end iftex
-
-@ifinfo
-
-This file documents Gnus, the GNU Emacs newsreader.
-
-Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ifinfo
-
-@tex
-
-@titlepage
-@title Pterodactyl Gnus  Manual
-
-@author by Lars Magne Ingebrigtsen
-@page
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1995,96,97,98,99 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-
-@end titlepage
-@page
-
-@end tex
-
-
-@node Top
-@top The Gnus Newsreader
-
-@ifinfo
-
-You can read news (and mail) from within Emacs by using Gnus.  The news
-can be gotten by any nefarious means you can think of---@sc{nntp}, local
-spool or your mbox file.  All at the same time, if you want to push your
-luck.
-
-This manual corresponds to Pterodactyl Gnus .
-
-@end ifinfo
-
-@iftex
-
-
-Gnus is the advanced, self-documenting, customizable, extensible
-unreal-time newsreader for GNU Emacs.
-
-Oops.  That sounds oddly familiar, so let's start over again to avoid
-being accused of plagiarism:
-
-Gnus is a message-reading laboratory.  It will let you look at just
-about anything as if it were a newsgroup.  You can read mail with it,
-you can browse directories with it, you can @code{ftp} with it---you can
-even read news with it!
-
-Gnus tries to empower people who read news the same way Emacs empowers
-people who edit text.  Gnus sets no limits to what the user should be
-allowed to do.  Users are encouraged to extend Gnus to make it behave
-like they want it to behave.  A program should not control people;
-people should be empowered to do what they want by using (or abusing)
-the program.
-
-@end iftex
-
-
-@menu
-* Starting Up::           Finding news can be a pain.
-* The Group Buffer::      Selecting, subscribing and killing groups.
-* The Summary Buffer::    Reading, saving and posting articles.
-* The Article Buffer::    Displaying and handling articles.
-* Composing Messages::    Information on sending mail and news.
-* Select Methods::        Gnus reads all messages from various select methods.
-* Scoring::               Assigning values to articles.
-* Various::               General purpose settings.
-* The End::               Farewell and goodbye.
-* Appendices::            Terminology, Emacs intro, FAQ, History, Internals.
-* Index::                 Variable, function and concept index.
-* Key Index::             Key Index.
-@end menu
-
-@node Starting Up
-@chapter Starting Gnus
-@cindex starting up
-
-@kindex M-x gnus
-@findex gnus
-If your system administrator has set things up properly, starting Gnus
-and reading news is extremely easy---you just type @kbd{M-x gnus} in
-your Emacs.
-
-@findex gnus-other-frame
-@kindex M-x gnus-other-frame
-If you want to start Gnus in a different frame, you can use the command
-@kbd{M-x gnus-other-frame} instead.
-
-If things do not go smoothly at startup, you have to twiddle some
-variables in your @file{~/.gnus} file.  This file is similar to
-@file{~/.emacs}, but is read when gnus starts.
-
-If you puzzle at any terms used in this manual, please refer to the
-terminology section (@pxref{Terminology}).
-
-@menu
-* Finding the News::    Choosing a method for getting news.
-* The First Time::      What does Gnus do the first time you start it?
-* The Server is Down::  How can I read my mail then?
-* Slave Gnusae::        You can have more than one Gnus active at a time.
-* Fetching a Group::    Starting Gnus just to read a group.
-* New Groups::          What is Gnus supposed to do with new groups?
-* Startup Files::       Those pesky startup files---@file{.newsrc}.
-* Auto Save::           Recovering from a crash.
-* The Active File::     Reading the active file over a slow line Takes Time.
-* Changing Servers::    You may want to move from one server to another.
-* Startup Variables::   Other variables you might change.
-@end menu
-
-
-@node Finding the News
-@section Finding the News
-@cindex finding news
-
-@vindex gnus-select-method
-@c @head
-The @code{gnus-select-method} variable says where Gnus should look for
-news.  This variable should be a list where the first element says
-@dfn{how} and the second element says @dfn{where}.  This method is your
-native method.  All groups not fetched with this method are
-foreign groups.
-
-For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where
-you want to get your daily dosage of news from, you'd say:
-
-@lisp
-(setq gnus-select-method '(nntp "news.somewhere.edu"))
-@end lisp
-
-If you want to read directly from the local spool, say:
-
-@lisp
-(setq gnus-select-method '(nnspool ""))
-@end lisp
-
-If you can use a local spool, you probably should, as it will almost
-certainly be much faster.
-
-@vindex gnus-nntpserver-file
-@cindex NNTPSERVER
-@cindex @sc{nntp} server
-If this variable is not set, Gnus will take a look at the
-@code{NNTPSERVER} environment variable.  If that variable isn't set,
-Gnus will see whether @code{gnus-nntpserver-file}
-(@file{/etc/nntpserver} by default) has any opinions on the matter.  If
-that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server.  That's a long shot, though.
-
-@vindex gnus-nntp-server
-If @code{gnus-nntp-server} is set, this variable will override
-@code{gnus-select-method}.  You should therefore set
-@code{gnus-nntp-server} to @code{nil}, which is what it is by default.
-
-@vindex gnus-secondary-servers
-@vindex gnus-nntp-server
-You can also make Gnus prompt you interactively for the name of an
-@sc{nntp} server.  If you give a non-numerical prefix to @code{gnus}
-(i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
-in the @code{gnus-secondary-servers} list (if any).  You can also just
-type in the name of any server you feel like visiting.  (Note that this
-will set @code{gnus-nntp-server}, which means that if you then @kbd{M-x
-gnus} later in the same Emacs session, Gnus will contact the same
-server.)
-
-@findex gnus-group-browse-foreign-server
-@kindex B (Group)
-However, if you use one @sc{nntp} server regularly and are just
-interested in a couple of groups from a different server, you would be
-better served by using the @kbd{B} command in the group buffer.  It will
-let you have a look at what groups are available, and you can subscribe
-to any of the groups you want to.  This also makes @file{.newsrc}
-maintenance much tidier.  @xref{Foreign Groups}.
-
-@vindex gnus-secondary-select-methods
-@c @head
-A slightly different approach to foreign groups is to set the
-@code{gnus-secondary-select-methods} variable.  The select methods
-listed in this variable are in many ways just as native as the
-@code{gnus-select-method} server.  They will also be queried for active
-files during startup (if that's required), and new newsgroups that
-appear on these servers will be subscribed (or not) just as native
-groups are.
-
-For instance, if you use the @code{nnmbox} backend to read your mail, you
-would typically set this variable to
-
-@lisp
-(setq gnus-secondary-select-methods '((nnmbox "")))
-@end lisp
-
-
-@node The First Time
-@section The First Time
-@cindex first time usage
-
-If no startup files exist, Gnus will try to determine what groups should
-be subscribed by default.
-
-@vindex gnus-default-subscribed-newsgroups
-If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
-will subscribe you to just those groups in that list, leaving the rest
-killed.  Your system administrator should have set this variable to
-something useful.
-
-Since she hasn't, Gnus will just subscribe you to a few arbitrarily
-picked groups (i.e., @samp{*.newusers}).  (@dfn{Arbitrary} is defined
-here as @dfn{whatever Lars thinks you should read}.)
-
-You'll also be subscribed to the Gnus documentation group, which should
-help you with most common problems.
-
-If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
-use the normal functions for handling new groups, and not do anything
-special.
-
-
-@node The Server is Down
-@section The Server is Down
-@cindex server errors
-
-If the default server is down, Gnus will understandably have some
-problems starting.  However, if you have some mail groups in addition to
-the news groups, you may want to start Gnus anyway.
-
-Gnus, being the trusting sort of program, will ask whether to proceed
-without a native select method if that server can't be contacted.  This
-will happen whether the server doesn't actually exist (i.e., you have
-given the wrong address) or the server has just momentarily taken ill
-for some reason or other.  If you decide to continue and have no foreign
-groups, you'll find it difficult to actually do anything in the group
-buffer.  But, hey, that's your problem.  Blllrph!
-
-@findex gnus-no-server
-@kindex M-x gnus-no-server
-@c @head
-If you know that the server is definitely down, or you just want to read
-your mail without bothering with the server at all, you can use the
-@code{gnus-no-server} command to start Gnus.  That might come in handy
-if you're in a hurry as well.  This command will not attempt to contact
-your primary server---instead, it will just activate all groups on level
-1 and 2.  (You should preferably keep no native groups on those two
-levels.)
-
-
-@node Slave Gnusae
-@section Slave Gnusae
-@cindex slave
-
-You might want to run more than one Emacs with more than one Gnus at the
-same time.  If you are using different @file{.newsrc} files (e.g., if you
-are using the two different Gnusae to read from two different servers),
-that is no problem whatsoever.  You just do it.
-
-The problem appears when you want to run two Gnusae that use the same
-@code{.newsrc} file.
-
-To work around that problem some, we here at the Think-Tank at the Gnus
-Towers have come up with a new concept: @dfn{Masters} and
-@dfn{slaves}.  (We have applied for a patent on this concept, and have
-taken out a copyright on those words.  If you wish to use those words in
-conjunction with each other, you have to send $1 per usage instance to
-me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
-Applications}) will be much more expensive, of course.)
-
-Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
-however you do it).  Each subsequent slave Gnusae should be started with
-@kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
-files, but instead save @dfn{slave files} that contain information only
-on what groups have been read in the slave session.  When a master Gnus
-starts, it will read (and delete) these slave files, incorporating all
-information from them.  (The slave files will be read in the sequence
-they were created, so the latest changes will have precedence.)
-
-Information from the slave files has, of course, precedence over the
-information in the normal (i.e., master) @code{.newsrc} file.
-
-
-@node Fetching a Group
-@section Fetching a Group
-@cindex fetching a group
-
-@findex gnus-fetch-group
-It is sometimes convenient to be able to just say ``I want to read this
-group and I don't care whether Gnus has been started or not''.  This is
-perhaps more useful for people who write code than for users, but the
-command @code{gnus-fetch-group} provides this functionality in any case.
-It takes the group name as a parameter.
-
-
-@node New Groups
-@section New Groups
-@cindex new groups
-@cindex subscription
-
-@vindex gnus-check-new-newsgroups
-If you are satisfied that you really never want to see any new groups,
-you can set @code{gnus-check-new-newsgroups} to @code{nil}.  This will
-also save you some time at startup.  Even if this variable is
-@code{nil}, you can always subscribe to the new groups just by pressing
-@kbd{U} in the group buffer (@pxref{Group Maintenance}).  This variable
-is @code{ask-server} by default.  If you set this variable to
-@code{always}, then Gnus will query the backends for new groups even
-when you do the @kbd{g} command (@pxref{Scanning New Messages}).
-
-@menu
-* Checking New Groups::      Determining what groups are new.
-* Subscription Methods::     What Gnus should do with new groups.
-* Filtering New Groups::     Making Gnus ignore certain new groups.
-@end menu
-
-
-@node Checking New Groups
-@subsection Checking New Groups
-
-Gnus normally determines whether a group is new or not by comparing the
-list of groups from the active file(s) with the lists of subscribed and
-dead groups.  This isn't a particularly fast method.  If
-@code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
-server for new groups since the last time.  This is both faster and
-cheaper.  This also means that you can get rid of the list of killed
-groups altogether, so you may set @code{gnus-save-killed-list} to
-@code{nil}, which will save time both at startup, at exit, and all over.
-Saves disk space, too.  Why isn't this the default, then?
-Unfortunately, not all servers support this command.
-
-I bet I know what you're thinking now: How do I find out whether my
-server supports @code{ask-server}?  No?  Good, because I don't have a
-fail-safe answer.  I would suggest just setting this variable to
-@code{ask-server} and see whether any new groups appear within the next
-few days.  If any do, then it works.  If none do, then it doesn't
-work.  I could write a function to make Gnus guess whether the server
-supports @code{ask-server}, but it would just be a guess.  So I won't.
-You could @code{telnet} to the server and say @code{HELP} and see
-whether it lists @samp{NEWGROUPS} among the commands it understands.  If
-it does, then it might work.  (But there are servers that lists
-@samp{NEWGROUPS} without supporting the function properly.)
-
-This variable can also be a list of select methods.  If so, Gnus will
-issue an @code{ask-server} command to each of the select methods, and
-subscribe them (or not) using the normal methods.  This might be handy
-if you are monitoring a few servers for new groups.  A side effect is
-that startup will take much longer, so you can meditate while waiting.
-Use the mantra ``dingnusdingnusdingnus'' to achieve permanent bliss.
-
-
-@node Subscription Methods
-@subsection Subscription Methods
-
-@vindex gnus-subscribe-newsgroup-method
-What Gnus does when it encounters a new group is determined by the
-@code{gnus-subscribe-newsgroup-method} variable.
-
-This variable should contain a function.  This function will be called
-with the name of the new group as the only parameter.
-
-Some handy pre-fab functions are:
-
-@table @code
-
-@item gnus-subscribe-zombies
-@vindex gnus-subscribe-zombies
-Make all new groups zombies.  This is the default.  You can browse the
-zombies later (with @kbd{A z}) and either kill them all off properly
-(with @kbd{S z}), or subscribe to them (with @kbd{u}).
-
-@item gnus-subscribe-randomly
-@vindex gnus-subscribe-randomly
-Subscribe all new groups in arbitrary order.  This really means that all
-new groups will be added at ``the top'' of the group buffer.
-
-@item gnus-subscribe-alphabetically
-@vindex gnus-subscribe-alphabetically
-Subscribe all new groups in alphabetical order.
-
-@item gnus-subscribe-hierarchically
-@vindex gnus-subscribe-hierarchically
-Subscribe all new groups hierarchically.  The difference between this
-function and @code{gnus-subscribe-alphabetically} is slight.
-@code{gnus-subscribe-alphabetically} will subscribe new groups in a strictly
-alphabetical fashion, while this function will enter groups into its
-hierarchy.  So if you want to have the @samp{rec} hierarchy before the
-@samp{comp} hierarchy, this function will not mess that configuration
-up.  Or something like that.
-
-@item gnus-subscribe-interactively
-@vindex gnus-subscribe-interactively
-Subscribe new groups interactively.  This means that Gnus will ask
-you about @strong{all} new groups.  The groups you choose to subscribe
-to will be subscribed hierarchically.
-
-@item gnus-subscribe-killed
-@vindex gnus-subscribe-killed
-Kill all new groups.
-
-@item gnus-subscribe-topics
-@vindex gnus-subscribe-topics
-Put the groups into the topic that has a matching @code{subscribe} topic 
-parameter (@pxref{Topic Parameters}).  For instance, a @code{subscribe}
-topic parameter that looks like
-
-@example
-"nnslashdot"
-@end example
-
-will mean that all groups that match that regex will be subscribed under 
-that topic.
-
-@end table
-
-@vindex gnus-subscribe-hierarchical-interactive
-A closely related variable is
-@code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
-mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
-hierarchical fashion whether to subscribe to new groups or not.  Gnus
-will ask you for each sub-hierarchy whether you want to descend the
-hierarchy or not.
-
-One common mistake is to set the variable a few paragraphs above
-(@code{gnus-subscribe-newsgroup-method}) to
-@code{gnus-subscribe-hierarchical-interactive}.  This is an error.  This
-will not work.  This is ga-ga.  So don't do it.
-
-
-@node Filtering New Groups
-@subsection Filtering New Groups
-
-A nice and portable way to control which new newsgroups should be
-subscribed (or ignored) is to put an @dfn{options} line at the start of
-the @file{.newsrc} file.  Here's an example:
-
-@example
-options -n !alt.all !rec.all sci.all
-@end example
-
-@vindex gnus-subscribe-options-newsgroup-method
-This line obviously belongs to a serious-minded intellectual scientific
-person (or she may just be plain old boring), because it says that all
-groups that have names beginning with @samp{alt} and @samp{rec} should
-be ignored, and all groups with names beginning with @samp{sci} should
-be subscribed.  Gnus will not use the normal subscription method for
-subscribing these groups.
-@code{gnus-subscribe-options-newsgroup-method} is used instead.  This
-variable defaults to @code{gnus-subscribe-alphabetically}.
-
-@vindex gnus-options-not-subscribe
-@vindex gnus-options-subscribe
-If you don't want to mess with your @file{.newsrc} file, you can just
-set the two variables @code{gnus-options-subscribe} and
-@code{gnus-options-not-subscribe}.  These two variables do exactly the
-same as the @file{.newsrc} @samp{options -n} trick.  Both are regexps,
-and if the new group matches the former, it will be unconditionally
-subscribed, and if it matches the latter, it will be ignored.
-
-@vindex gnus-auto-subscribed-groups
-Yet another variable that meddles here is
-@code{gnus-auto-subscribed-groups}.  It works exactly like
-@code{gnus-options-subscribe}, and is therefore really superfluous, but I
-thought it would be nice to have two of these.  This variable is more
-meant for setting some ground rules, while the other variable is used
-more for user fiddling.  By default this variable makes all new groups
-that come from mail backends (@code{nnml}, @code{nnbabyl},
-@code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed.  If you
-don't like that, just set this variable to @code{nil}.
-
-New groups that match this regexp are subscribed using
-@code{gnus-subscribe-options-newsgroup-method}.
-
-
-@node Changing Servers
-@section Changing Servers
-@cindex changing servers
-
-Sometimes it is necessary to move from one @sc{nntp} server to another.
-This happens very rarely, but perhaps you change jobs, or one server is
-very flaky and you want to use another.
-
-Changing the server is pretty easy, right?  You just change
-@code{gnus-select-method} to point to the new server?
-
-@emph{Wrong!}
-
-Article numbers are not (in any way) kept synchronized between different
-@sc{nntp} servers, and the only way Gnus keeps track of what articles
-you have read is by keeping track of article numbers.  So when you
-change @code{gnus-select-method}, your @file{.newsrc} file becomes
-worthless.
-
-Gnus provides a few functions to attempt to translate a @file{.newsrc}
-file from one server to another.  They all have one thing in
-common---they take a looong time to run.  You don't want to use these
-functions more than absolutely necessary.
-
-@kindex M-x gnus-change-server
-@findex gnus-change-server
-If you have access to both servers, Gnus can request the headers for all
-the articles you have read and compare @code{Message-ID}s and map the
-article numbers of the read articles and article marks.  The @kbd{M-x
-gnus-change-server} command will do this for all your native groups.  It
-will prompt for the method you want to move to.
-
-@kindex M-x gnus-group-move-group-to-server
-@findex gnus-group-move-group-to-server
-You can also move individual groups with the @kbd{M-x
-gnus-group-move-group-to-server} command.  This is useful if you want to
-move a (foreign) group from one server to another.
-
-@kindex M-x gnus-group-clear-data-on-native-groups
-@findex gnus-group-clear-data-on-native-groups
-If you don't have access to both the old and new server, all your marks
-and read ranges have become worthless.  You can use the @kbd{M-x
-gnus-group-clear-data-on-native-groups} command to clear out all data
-that you have on your native groups.  Use with caution.
-
-After changing servers, you @strong{must} move the cache hierarchy away,
-since the cached articles will have wrong article numbers, which will
-affect which articles Gnus thinks are read.
-
-
-@node Startup Files
-@section Startup Files
-@cindex startup files
-@cindex .newsrc
-@cindex .newsrc.el
-@cindex .newsrc.eld
-
-Now, you all know about the @file{.newsrc} file.  All subscription
-information is traditionally stored in this file.
-
-Things got a bit more complicated with @sc{gnus}.  In addition to
-keeping the @file{.newsrc} file updated, it also used a file called
-@file{.newsrc.el} for storing all the information that didn't fit into
-the @file{.newsrc} file.  (Actually, it also duplicated everything in
-the @file{.newsrc} file.)  @sc{gnus} would read whichever one of these
-files was the most recently saved, which enabled people to swap between
-@sc{gnus} and other newsreaders.
-
-That was kinda silly, so Gnus went one better: In addition to the
-@file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
-@file{.newsrc.eld}.  It will read whichever of these files that are most
-recent, but it will never write a @file{.newsrc.el} file.  You should
-never delete the @file{.newsrc.eld} file---it contains much information
-not stored in the @file{.newsrc} file.
-
-@vindex gnus-save-newsrc-file
-@vindex gnus-read-newsrc-file
-You can turn off writing the @file{.newsrc} file by setting
-@code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
-the file and save some space, as well as exiting from Gnus faster.
-However, this will make it impossible to use other newsreaders than
-Gnus.  But hey, who would want to, right?  Similarly, setting
-@code{gnus-read-newsrc-file} to @code{nil} makes Gnus ignore the
-@file{.newsrc} file and any @file{.newsrc-SERVER} files, which is
-convenient if you have a tendency to use Netscape once in a while.
-
-@vindex gnus-save-killed-list
-If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus
-will not save the list of killed groups to the startup file.  This will
-save both time (when starting and quitting) and space (on disk).  It
-will also mean that Gnus has no record of what groups are new or old,
-so the automatic new groups subscription methods become meaningless.
-You should always set @code{gnus-check-new-newsgroups} to @code{nil} or
-@code{ask-server} if you set this variable to @code{nil} (@pxref{New
-Groups}).  This variable can also be a regular expression.  If that's
-the case, remove all groups that do not match this regexp before
-saving.  This can be useful in certain obscure situations that involve
-several servers where not all servers support @code{ask-server}.
-
-@vindex gnus-startup-file
-The @code{gnus-startup-file} variable says where the startup files are.
-The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
-file being whatever that one is, with a @samp{.eld} appended.
-
-@vindex gnus-save-newsrc-hook
-@vindex gnus-save-quick-newsrc-hook
-@vindex gnus-save-standard-newsrc-hook
-@code{gnus-save-newsrc-hook} is called before saving any of the newsrc
-files, while @code{gnus-save-quick-newsrc-hook} is called just before
-saving the @file{.newsrc.eld} file, and
-@code{gnus-save-standard-newsrc-hook} is called just before saving the
-@file{.newsrc} file.  The latter two are commonly used to turn version
-control on or off.  Version control is on by default when saving the
-startup files.  If you want to turn backup creation off, say something like:
-
-@lisp
-(defun turn-off-backup ()
-  (set (make-local-variable 'backup-inhibited) t))
-
-(add-hook 'gnus-save-quick-newsrc-hook 'turn-off-backup)
-(add-hook 'gnus-save-standard-newsrc-hook 'turn-off-backup)
-@end lisp
-
-@vindex gnus-init-file
-When Gnus starts, it will read the @code{gnus-site-init-file}
-(@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
-(@file{~/.gnus} by default) files.  These are normal Emacs Lisp files
-and can be used to avoid cluttering your @file{~/.emacs} and
-@file{site-init} files with Gnus stuff.  Gnus will also check for files
-with the same names as these, but with @file{.elc} and @file{.el}
-suffixes.  In other words, if you have set @code{gnus-init-file} to
-@file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
-and finally @file{~/.gnus} (in this order).
-
-
-
-@node Auto Save
-@section Auto Save
-@cindex dribble file
-@cindex auto-save
-
-Whenever you do something that changes the Gnus data (reading articles,
-catching up, killing/subscribing groups), the change is added to a
-special @dfn{dribble buffer}.  This buffer is auto-saved the normal
-Emacs way.  If your Emacs should crash before you have saved the
-@file{.newsrc} files, all changes you have made can be recovered from
-this file.
-
-If Gnus detects this file at startup, it will ask the user whether to
-read it.  The auto save file is deleted whenever the real startup file is
-saved.
-
-@vindex gnus-use-dribble-file
-If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
-maintain a dribble buffer.  The default is @code{t}.
-
-@vindex gnus-dribble-directory
-Gnus will put the dribble file(s) in @code{gnus-dribble-directory}.  If
-this variable is @code{nil}, which it is by default, Gnus will dribble
-into the directory where the @file{.newsrc} file is located.  (This is
-normally the user's home directory.)  The dribble file will get the same
-file permissions as the @code{.newsrc} file.
-
-@vindex gnus-always-read-dribble-file
-If @code{gnus-always-read-dribble-file} is non-@code{nil}, Gnus will
-read the dribble file on startup without querying the user.
-
-
-@node The Active File
-@section The Active File
-@cindex active file
-@cindex ignored groups
-
-When Gnus starts, or indeed whenever it tries to determine whether new
-articles have arrived, it reads the active file.  This is a very large
-file that lists all the active groups and articles on the server.
-
-@vindex gnus-ignored-newsgroups
-Before examining the active file, Gnus deletes all lines that match the
-regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
-any groups with bogus names, but you can use this variable to make Gnus
-ignore hierarchies you aren't ever interested in.  However, this is not
-recommended.  In fact, it's highly discouraged.  Instead, @pxref{New
-Groups} for an overview of other variables that can be used instead.
-
-@c This variable is
-@c @code{nil} by default, and will slow down active file handling somewhat
-@c if you set it to anything else.
-
-@vindex gnus-read-active-file
-@c @head
-The active file can be rather Huge, so if you have a slow network, you
-can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
-reading the active file.  This variable is @code{some} by default.
-
-Gnus will try to make do by getting information just on the groups that
-you actually subscribe to.
-
-Note that if you subscribe to lots and lots of groups, setting this
-variable to @code{nil} will probably make Gnus slower, not faster.  At
-present, having this variable @code{nil} will slow Gnus down
-considerably, unless you read news over a 2400 baud modem.
-
-This variable can also have the value @code{some}.  Gnus will then
-attempt to read active info only on the subscribed groups.  On some
-servers this is quite fast (on sparkling, brand new INN servers that
-support the @code{LIST ACTIVE group} command), on others this isn't fast
-at all.  In any case, @code{some} should be faster than @code{nil}, and
-is certainly faster than @code{t} over slow lines.
-
-Some news servers (Leafnode and old versions of INN, for instance) do
-not support the @code{LIST ACTIVE group}.  For these servers, @code{nil}
-is probably the most efficient value for this variable.
-
-If this variable is @code{nil}, Gnus will ask for group info in total
-lock-step, which isn't very fast.  If it is @code{some} and you use an
-@sc{nntp} server, Gnus will pump out commands as fast as it can, and
-read all the replies in one swoop.  This will normally result in better
-performance, but if the server does not support the aforementioned
-@code{LIST ACTIVE group} command, this isn't very nice to the server.
-
-If you think that starting up Gnus takes too long, try all the three
-different values for this variable and see what works best for you. 
-
-In any case, if you use @code{some} or @code{nil}, you should definitely
-kill all groups that you aren't interested in to speed things up.
-
-Note that this variable also affects active file retrieval from
-secondary select methods.
-
-
-@node Startup Variables
-@section Startup Variables
-
-@table @code
-
-@item gnus-load-hook
-@vindex gnus-load-hook
-A hook run while Gnus is being loaded.  Note that this hook will
-normally be run just once in each Emacs session, no matter how many
-times you start Gnus.
-
-@item gnus-before-startup-hook
-@vindex gnus-before-startup-hook
-A hook run after starting up Gnus successfully.
-
-@item gnus-startup-hook
-@vindex gnus-startup-hook
-A hook run as the very last thing after starting up Gnus
-
-@item gnus-started-hook
-@vindex gnus-started-hook
-A hook that is run as the very last thing after starting up Gnus
-successfully.
-
-@item gnus-setup-news-hook
-@vindex gnus-setup-news-hook
-A hook that is run after reading the @file{.newsrc} file(s), but before
-generating the group buffer.
-
-@item gnus-check-bogus-newsgroups
-@vindex gnus-check-bogus-newsgroups
-If non-@code{nil}, Gnus will check for and delete all bogus groups at
-startup.  A @dfn{bogus group} is a group that you have in your
-@file{.newsrc} file, but doesn't exist on the news server.  Checking for
-bogus groups can take quite a while, so to save time and resources it's
-best to leave this option off, and do the checking for bogus groups once
-in a while from the group buffer instead (@pxref{Group Maintenance}).
-
-@item gnus-inhibit-startup-message
-@vindex gnus-inhibit-startup-message
-If non-@code{nil}, the startup message won't be displayed.  That way,
-your boss might not notice as easily that you are reading news instead
-of doing your job.  Note that this variable is used before
-@file{.gnus.el} is loaded, so it should be set in @code{.emacs} instead.
-
-@item gnus-no-groups-message
-@vindex gnus-no-groups-message
-Message displayed by Gnus when no groups are available.
-
-@item gnus-play-startup-jingle
-@vindex gnus-play-startup-jingle
-If non-@code{nil}, play the Gnus jingle at startup.
-
-@item gnus-startup-jingle
-@vindex gnus-startup-jingle
-Jingle to be played if the above variable is non-@code{nil}.  The
-default is @samp{Tuxedomoon.Jingle4.au}.
-
-@end table
-
-
-@node The Group Buffer
-@chapter The Group Buffer
-@cindex group buffer
-
-The @dfn{group buffer} lists all (or parts) of the available groups.  It
-is the first buffer shown when Gnus starts, and will never be killed as
-long as Gnus is active.
-
-@iftex
-@end iftex
-
-@menu
-* Group Buffer Format::    Information listed and how you can change it.
-* Group Maneuvering::      Commands for moving in the group buffer.
-* Selecting a Group::      Actually reading news.
-* Group Data::             Changing the info for a group.
-* Subscription Commands::  Unsubscribing, killing, subscribing.
-* Group Levels::           Levels? What are those, then?
-* Group Score::            A mechanism for finding out what groups you like.
-* Marking Groups::         You can mark groups for later processing.
-* Foreign Groups::         Creating and editing groups.
-* Group Parameters::       Each group may have different parameters set.
-* Listing Groups::         Gnus can list various subsets of the groups.
-* Sorting Groups::         Re-arrange the group order.
-* Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
-* Browse Foreign Server::  You can browse a server.  See what it has to offer.
-* Exiting Gnus::           Stop reading news and get some work done.
-* Group Topics::           A folding group mode divided into topics.
-* Misc Group Stuff::       Other stuff that you can to do.
-@end menu
-
-
-@node Group Buffer Format
-@section Group Buffer Format
-
-@menu
-* Group Line Specification::       Deciding how the group buffer is to look.
-* Group Modeline Specification::   The group buffer modeline.
-* Group Highlighting::             Having nice colors in the group buffer.
-@end menu
-
-
-@node Group Line Specification
-@subsection Group Line Specification
-@cindex group buffer format
-
-The default format of the group buffer is nice and dull, but you can
-make it as exciting and ugly as you feel like.
-
-Here's a couple of example group lines:
-
-@example
-     25: news.announce.newusers
- *    0: alt.fan.andrea-dworkin
-@end example
-
-Quite simple, huh?
-
-You can see that there are 25 unread articles in
-@samp{news.announce.newusers}.  There are no unread articles, but some
-ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
-asterisk at the beginning of the line?).
-
-@vindex gnus-group-line-format
-You can change that format to whatever you want by fiddling with the
-@code{gnus-group-line-format} variable.  This variable works along the
-lines of a @code{format} specification, which is pretty much the same as
-a @code{printf} specifications, for those of you who use (feh!) C.
-@xref{Formatting Variables}.
-
-@samp{%M%S%5y: %(%g%)\n} is the value that produced those lines above.
-
-There should always be a colon on the line; the cursor always moves to
-the colon after performing an operation.  Nothing else is required---not
-even the group name.  All displayed text is just window dressing, and is
-never examined by Gnus.  Gnus stores all real information it needs using
-text properties.
-
-(Note that if you make a really strange, wonderful, spreadsheet-like
-layout, everybody will believe you are hard at work with the accounting
-instead of wasting time reading news.)
-
-Here's a list of all available format characters:
-
-@table @samp
-
-@item M
-An asterisk if the group only has marked articles.
-
-@item S
-Whether the group is subscribed.
-
-@item L
-Level of subscribedness.
-
-@item N
-Number of unread articles.
-
-@item I
-Number of dormant articles.
-
-@item T
-Number of ticked articles.
-
-@item R
-Number of read articles.
-
-@item t
-Estimated total number of articles.  (This is really @var{max-number}
-minus @var{min-number} plus 1.)
-
-@item y
-Number of unread, unticked, non-dormant articles.
-
-@item i
-Number of ticked and dormant articles.
-
-@item g
-Full group name.
-
-@item G
-Group name.
-
-@item D
-Newsgroup description.
-
-@item o
-@samp{m} if moderated.
-
-@item O
-@samp{(m)} if moderated.
-
-@item s
-Select method.
-
-@item n
-Select from where.
-
-@item z
-A string that looks like @samp{<%s:%n>} if a foreign select method is
-used.
-
-@item P
-Indentation based on the level of the topic (@pxref{Group Topics}).
-
-@item c
-@vindex gnus-group-uncollapsed-levels
-Short (collapsed) group name.  The @code{gnus-group-uncollapsed-levels}
-variable says how many levels to leave at the end of the group name.
-The default is 1---this will mean that group names like
-@samp{gnu.emacs.gnus} will be shortened to @samp{g.e.gnus}.
-
-@item m
-@vindex gnus-new-mail-mark
-@cindex %
-@samp{%} (@code{gnus-new-mail-mark}) if there has arrived new mail to
-the group lately.
-
-@item d
-A string that says when you last read the group (@pxref{Group
-Timestamp}).
-
-@item u
-User defined specifier.  The next character in the format string should
-be a letter.  Gnus will call the function
-@code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
-following @samp{%u}.  The function will be passed a single dummy
-parameter as argument.  The function should return a string, which will
-be inserted into the buffer just like information from any other
-specifier.
-@end table
-
-@cindex *
-All the ``number-of'' specs will be filled with an asterisk (@samp{*})
-if no info is available---for instance, if it is a non-activated foreign
-group, or a bogus native group.
-
-
-@node Group Modeline Specification
-@subsection Group Modeline Specification
-@cindex group modeline
-
-@vindex gnus-group-mode-line-format
-The mode line can be changed by setting
-@code{gnus-group-mode-line-format} (@pxref{Mode Line Formatting}).  It
-doesn't understand that many format specifiers:
-
-@table @samp
-@item S
-The native news server.
-@item M
-The native select method.
-@end table
-
-
-@node Group Highlighting
-@subsection Group Highlighting
-@cindex highlighting
-@cindex group highlighting
-
-@vindex gnus-group-highlight
-Highlighting in the group buffer is controlled by the
-@code{gnus-group-highlight} variable.  This is an alist with elements
-that look like @code{(@var{form} . @var{face})}.  If @var{form} evaluates to
-something non-@code{nil}, the @var{face} will be used on the line.
-
-Here's an example value for this variable that might look nice if the
-background is dark:
-
-@lisp
-(face-spec-set 'my-group-face-1
-               '((t (:foreground "Red" :bold t))))
-(face-spec-set 'my-group-face-2
-               '((t (:foreground "SeaGreen" :bold t))))
-(face-spec-set 'my-group-face-3
-               '((t (:foreground "SpringGreen" :bold t))))
-(face-spec-set 'my-group-face-4
-               '((t (:foreground "SteelBlue" :bold t))))
-(face-spec-set 'my-group-face-5
-               '((t (:foreground "SkyBlue" :bold t))))
-
-(setq gnus-group-highlight
-      '(((> unread 200) . my-group-face-1)
-        ((and (< level 3) (zerop unread)) . my-group-face-2)
-        ((< level 3) . my-group-face-3)
-        ((zerop unread) . my-group-face-4)
-        (t . my-group-face-5)))
-@end lisp
-
-Also @pxref{Faces and Fonts}.
-
-Variables that are dynamically bound when the forms are evaluated
-include:
-
-@table @code
-@item group
-The group name.
-@item unread
-The number of unread articles in the group.
-@item method
-The select method.
-@item mailp
-Whether the group is a mail group.
-@item level
-The level of the group.
-@item score
-The score of the group.
-@item ticked
-The number of ticked articles in the group.
-@item total
-The total number of articles in the group.  Or rather, MAX-NUMBER minus
-MIN-NUMBER plus one.
-@item topic
-When using the topic minor mode, this variable is bound to the current
-topic being inserted.
-@end table
-
-When the forms are @code{eval}ed, point is at the beginning of the line
-of the group in question, so you can use many of the normal Gnus
-functions for snarfing info on the group.
-
-@vindex gnus-group-update-hook
-@findex gnus-group-highlight-line
-@code{gnus-group-update-hook} is called when a group line is changed.
-It will not be called when @code{gnus-visual} is @code{nil}.  This hook
-calls @code{gnus-group-highlight-line} by default.
-
-
-@node Group Maneuvering
-@section Group Maneuvering
-@cindex group movement
-
-All movement commands understand the numeric prefix and will behave as
-expected, hopefully.
-
-@table @kbd
-
-@item n
-@kindex n (Group)
-@findex gnus-group-next-unread-group
-Go to the next group that has unread articles
-(@code{gnus-group-next-unread-group}).
-
-@item p
-@itemx DEL
-@kindex DEL (Group)
-@kindex p (Group)
-@findex gnus-group-prev-unread-group
-Go to the previous group that has unread articles
-(@code{gnus-group-prev-unread-group}).
-
-@item N
-@kindex N (Group)
-@findex gnus-group-next-group
-Go to the next group (@code{gnus-group-next-group}).
-
-@item P
-@kindex P (Group)
-@findex gnus-group-prev-group
-Go to the previous group (@code{gnus-group-prev-group}).
-
-@item M-n
-@kindex M-n (Group)
-@findex gnus-group-next-unread-group-same-level
-Go to the next unread group on the same (or lower) level
-(@code{gnus-group-next-unread-group-same-level}).
-
-@item M-p
-@kindex M-p (Group)
-@findex gnus-group-prev-unread-group-same-level
-Go to the previous unread group on the same (or lower) level
-(@code{gnus-group-prev-unread-group-same-level}).
-@end table
-
-Three commands for jumping to groups:
-
-@table @kbd
-
-@item j
-@kindex j (Group)
-@findex gnus-group-jump-to-group
-Jump to a group (and make it visible if it isn't already)
-(@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
-like living groups.
-
-@item ,
-@kindex , (Group)
-@findex gnus-group-best-unread-group
-Jump to the unread group with the lowest level
-(@code{gnus-group-best-unread-group}).
-
-@item .
-@kindex . (Group)
-@findex gnus-group-first-unread-group
-Jump to the first group with unread articles
-(@code{gnus-group-first-unread-group}).
-@end table
-
-@vindex gnus-group-goto-unread
-If @code{gnus-group-goto-unread} is @code{nil}, all the movement
-commands will move to the next group, not the next unread group.  Even
-the commands that say they move to the next unread group.  The default
-is @code{t}.
-
-
-@node Selecting a Group
-@section Selecting a Group
-@cindex group selection
-
-@table @kbd
-
-@item SPACE
-@kindex SPACE (Group)
-@findex gnus-group-read-group
-Select the current group, switch to the summary buffer and display the
-first unread article (@code{gnus-group-read-group}).  If there are no
-unread articles in the group, or if you give a non-numerical prefix to
-this command, Gnus will offer to fetch all the old articles in this
-group from the server.  If you give a numerical prefix @var{N}, @var{N}
-determines the number of articles Gnus will fetch.  If @var{N} is
-positive, Gnus fetches the @var{N} newest articles, if @var{N} is
-negative, Gnus fetches the @code{abs(@var{N})} oldest articles.
-
-@item RET
-@kindex RET (Group)
-@findex gnus-group-select-group
-Select the current group and switch to the summary buffer
-(@code{gnus-group-select-group}).  Takes the same arguments as
-@code{gnus-group-read-group}---the only difference is that this command
-does not display the first unread article automatically upon group
-entry.
-
-@item M-RET
-@kindex M-RET (Group)
-@findex gnus-group-quick-select-group
-This does the same as the command above, but tries to do it with the
-minimum amount of fuzz (@code{gnus-group-quick-select-group}).  No
-scoring/killing will be performed, there will be no highlights and no
-expunging.  This might be useful if you're in a real hurry and have to
-enter some humongous group.  If you give a 0 prefix to this command
-(i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer,
-which is useful if you want to toggle threading before generating the
-summary buffer (@pxref{Summary Generation Commands}).
-
-@item M-SPACE
-@kindex M-SPACE (Group)
-@findex gnus-group-visible-select-group
-This is yet one more command that does the same as the @kbd{RET}
-command, but this one does it without expunging and hiding dormants
-(@code{gnus-group-visible-select-group}).
-
-@item M-C-RET
-@kindex M-C-RET (Group)
-@findex gnus-group-select-group-ephemerally
-Finally, this command selects the current group ephemerally without
-doing any processing of its contents
-(@code{gnus-group-select-group-ephemerally}).  Even threading has been
-turned off.  Everything you do in the group after selecting it in this
-manner will have no permanent effects.
-
-@end table
-
-@vindex gnus-large-newsgroup
-The @code{gnus-large-newsgroup} variable says what Gnus should consider
-to be a big group.  This is 200 by default.  If the group has more
-(unread and/or ticked) articles than this, Gnus will query the user
-before entering the group.  The user can then specify how many articles
-should be fetched from the server.  If the user specifies a negative
-number (@code{-n}), the @code{n} oldest articles will be fetched.  If it
-is positive, the @code{n} articles that have arrived most recently will
-be fetched.
-
-@vindex gnus-select-group-hook
-@vindex gnus-auto-select-first
-@code{gnus-auto-select-first} control whether any articles are selected
-automatically when entering a group with the @kbd{SPACE} command.
-
-@table @code
-
-@item nil
-Don't select any articles when entering the group.  Just display the
-full summary buffer.
-
-@item t
-Select the first unread article when entering the group.
-
-@item best
-Select the highest scored article in the group when entering the
-group.
-
-@end table
-
-This variable can also be a function.  In that case, that function will
-be called to place point on a subject line, and/or select some article.
-Useful functions include:
-
-@table @code
-@item gnus-summary-first-unread-subject
-Place point on the subject line of the first unread article, but
-don't select the article.
-
-@item gnus-summary-first-unread-article
-Select the first unread article.
-
-@item gnus-summary-best-unread-article
-Select the highest-scored unread article.
-@end table
-
-
-If you want to prevent automatic selection in some group (say, in a
-binary group with Huge articles) you can set this variable to @code{nil}
-in @code{gnus-select-group-hook}, which is called when a group is
-selected.
-
-
-@node Subscription Commands
-@section Subscription Commands
-@cindex subscription
-
-@table @kbd
-
-@item S t
-@itemx u
-@kindex S t (Group)
-@kindex u (Group)
-@findex gnus-group-unsubscribe-current-group
-@c @icon{gnus-group-unsubscribe}
-Toggle subscription to the current group
-(@code{gnus-group-unsubscribe-current-group}).
-
-@item S s
-@itemx U
-@kindex S s (Group)
-@kindex U (Group)
-@findex gnus-group-unsubscribe-group
-Prompt for a group to subscribe, and then subscribe it.  If it was
-subscribed already, unsubscribe it instead
-(@code{gnus-group-unsubscribe-group}).
-
-@item S k
-@itemx C-k
-@kindex S k (Group)
-@kindex C-k (Group)
-@findex gnus-group-kill-group
-@c @icon{gnus-group-kill-group}
-Kill the current group (@code{gnus-group-kill-group}).
-
-@item S y
-@itemx C-y
-@kindex S y (Group)
-@kindex C-y (Group)
-@findex gnus-group-yank-group
-Yank the last killed group (@code{gnus-group-yank-group}).
-
-@item C-x C-t
-@kindex C-x C-t (Group)
-@findex gnus-group-transpose-groups
-Transpose two groups (@code{gnus-group-transpose-groups}).  This isn't
-really a subscription command, but you can use it instead of a
-kill-and-yank sequence sometimes.
-
-@item S w
-@itemx C-w
-@kindex S w (Group)
-@kindex C-w (Group)
-@findex gnus-group-kill-region
-Kill all groups in the region (@code{gnus-group-kill-region}).
-
-@item S z
-@kindex S z (Group)
-@findex gnus-group-kill-all-zombies
-Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
-
-@item S C-k
-@kindex S C-k (Group)
-@findex gnus-group-kill-level
-Kill all groups on a certain level (@code{gnus-group-kill-level}).
-These groups can't be yanked back after killing, so this command should
-be used with some caution.  The only time where this command comes in
-really handy is when you have a @file{.newsrc} with lots of unsubscribed
-groups that you want to get rid off.  @kbd{S C-k} on level 7 will
-kill off all unsubscribed groups that do not have message numbers in the
-@file{.newsrc} file.
-
-@end table
-
-Also @pxref{Group Levels}.
-
-
-@node Group Data
-@section Group Data
-
-@table @kbd
-
-@item c
-@kindex c (Group)
-@findex gnus-group-catchup-current
-@vindex gnus-group-catchup-group-hook
-@c @icon{gnus-group-catchup-current}
-Mark all unticked articles in this group as read
-(@code{gnus-group-catchup-current}).
-@code{gnus-group-catchup-group-hook} is called when catching up a group from
-the group buffer.
-
-@item C
-@kindex C (Group)
-@findex gnus-group-catchup-current-all
-Mark all articles in this group, even the ticked ones, as read
-(@code{gnus-group-catchup-current-all}).
-
-@item M-c
-@kindex M-c (Group)
-@findex gnus-group-clear-data
-Clear the data from the current group---nix out marks and the list of
-read articles (@code{gnus-group-clear-data}).
-
-@item M-x gnus-group-clear-data-on-native-groups
-@kindex M-x gnus-group-clear-data-on-native-groups
-@findex gnus-group-clear-data-on-native-groups
-If you have switched from one @sc{nntp} server to another, all your marks
-and read ranges have become worthless.  You can use this command to
-clear out all data that you have on your native groups.  Use with
-caution.
-
-@end table
-
-
-@node Group Levels
-@section Group Levels
-@cindex group level
-@cindex level
-
-All groups have a level of @dfn{subscribedness}.  For instance, if a
-group is on level 2, it is more subscribed than a group on level 5.  You
-can ask Gnus to just list groups on a given level or lower
-(@pxref{Listing Groups}), or to just check for new articles in groups on
-a given level or lower (@pxref{Scanning New Messages}).
-
-Remember:  The higher the level of the group, the less important it is.
-
-@table @kbd
-
-@item S l
-@kindex S l (Group)
-@findex gnus-group-set-current-level
-Set the level of the current group.  If a numeric prefix is given, the
-next @var{n} groups will have their levels set.  The user will be
-prompted for a level.
-@end table
-
-@vindex gnus-level-killed
-@vindex gnus-level-zombie
-@vindex gnus-level-unsubscribed
-@vindex gnus-level-subscribed
-Gnus considers groups from levels 1 to
-@code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
-@code{gnus-level-subscribed} (exclusive) and
-@code{gnus-level-unsubscribed} (inclusive) (default 7) to be
-unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
-(default 8) and @code{gnus-level-killed} to be killed (completely dead)
-(default 9).  Gnus treats subscribed and unsubscribed groups exactly the
-same, but zombie and killed groups have no information on what articles
-you have read, etc, stored.  This distinction between dead and living
-groups isn't done because it is nice or clever, it is done purely for
-reasons of efficiency.
-
-It is recommended that you keep all your mail groups (if any) on quite
-low levels (e.g. 1 or 2).
-
-If you want to play with the level variables, you should show some care.
-Set them once, and don't touch them ever again.  Better yet, don't touch
-them at all unless you know exactly what you're doing.
-
-@vindex gnus-level-default-unsubscribed
-@vindex gnus-level-default-subscribed
-Two closely related variables are @code{gnus-level-default-subscribed}
-(default 3) and @code{gnus-level-default-unsubscribed} (default 6),
-which are the levels that new groups will be put on if they are
-(un)subscribed.  These two variables should, of course, be inside the
-relevant valid ranges.
-
-@vindex gnus-keep-same-level
-If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
-will only move to groups of the same level (or lower).  In
-particular, going from the last article in one group to the next group
-will go to the next group of the same level (or lower).  This might be
-handy if you want to read the most important groups before you read the
-rest.
-
-@vindex gnus-group-default-list-level
-All groups with a level less than or equal to
-@code{gnus-group-default-list-level} will be listed in the group buffer
-by default.
-
-@vindex gnus-group-list-inactive-groups
-If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
-groups will be listed along with the unread groups.  This variable is
-@code{t} by default.  If it is @code{nil}, inactive groups won't be
-listed.
-
-@vindex gnus-group-use-permanent-levels
-If @code{gnus-group-use-permanent-levels} is non-@code{nil}, once you
-give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
-use this level as the ``work'' level.
-
-@vindex gnus-activate-level
-Gnus will normally just activate (i. e., query the server about) groups
-on level @code{gnus-activate-level} or less.  If you don't want to
-activate unsubscribed groups, for instance, you might set this variable
-to 5.  The default is 6.
-
-
-@node Group Score
-@section Group Score
-@cindex group score
-@cindex group rank
-@cindex rank
-
-You would normally keep important groups on high levels, but that scheme
-is somewhat restrictive.  Don't you wish you could have Gnus sort the
-group buffer according to how often you read groups, perhaps?  Within
-reason?
-
-This is what @dfn{group score} is for.  You can have Gnus assign a score
-to each group through the mechanism described below.  You can then sort
-the group buffer based on this score.  Alternatively, you can sort on
-score and then level.  (Taken together, the level and the score is
-called the @dfn{rank} of the group.  A group that is on level 4 and has
-a score of 1 has a higher rank than a group on level 5 that has a score
-of 300.  (The level is the most significant part and the score is the
-least significant part.))
-
-@findex gnus-summary-bubble-group
-If you want groups you read often to get higher scores than groups you
-read seldom you can add the @code{gnus-summary-bubble-group} function to
-the @code{gnus-summary-exit-hook} hook.  This will result (after
-sorting) in a bubbling sort of action.  If you want to see that in
-action after each summary exit, you can add
-@code{gnus-group-sort-groups-by-rank} or
-@code{gnus-group-sort-groups-by-score} to the same hook, but that will
-slow things down somewhat.
-
-
-@node Marking Groups
-@section Marking Groups
-@cindex marking groups
-
-If you want to perform some command on several groups, and they appear
-subsequently in the group buffer, you would normally just give a
-numerical prefix to the command.  Most group commands will then do your
-bidding on those groups.
-
-However, if the groups are not in sequential order, you can still
-perform a command on several groups.  You simply mark the groups first
-with the process mark and then execute the command.
-
-@table @kbd
-
-@item #
-@kindex # (Group)
-@itemx M m
-@kindex M m (Group)
-@findex gnus-group-mark-group
-Set the mark on the current group (@code{gnus-group-mark-group}).
-
-@item M-#
-@kindex M-# (Group)
-@itemx M u
-@kindex M u (Group)
-@findex gnus-group-unmark-group
-Remove the mark from the current group
-(@code{gnus-group-unmark-group}).
-
-@item M U
-@kindex M U (Group)
-@findex gnus-group-unmark-all-groups
-Remove the mark from all groups (@code{gnus-group-unmark-all-groups}).
-
-@item M w
-@kindex M w (Group)
-@findex gnus-group-mark-region
-Mark all groups between point and mark (@code{gnus-group-mark-region}).
-
-@item M b
-@kindex M b (Group)
-@findex gnus-group-mark-buffer
-Mark all groups in the buffer (@code{gnus-group-mark-buffer}).
-
-@item M r
-@kindex M r (Group)
-@findex gnus-group-mark-regexp
-Mark all groups that match some regular expression
-(@code{gnus-group-mark-regexp}).
-@end table
-
-Also @pxref{Process/Prefix}.
-
-@findex gnus-group-universal-argument
-If you want to execute some command on all groups that have been marked
-with the process mark, you can use the @kbd{M-&}
-(@code{gnus-group-universal-argument}) command.  It will prompt you for
-the command to be executed.
-
-
-@node Foreign Groups
-@section Foreign Groups
-@cindex foreign groups
-
-Below are some group mode commands for making and editing general foreign
-groups, as well as commands to ease the creation of a few
-special-purpose groups.  All these commands insert the newly created
-groups under point---@code{gnus-subscribe-newsgroup-method} is not
-consulted.
-
-@table @kbd
-
-@item G m
-@kindex G m (Group)
-@findex gnus-group-make-group
-@cindex making groups
-Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you
-for a name, a method and possibly an @dfn{address}.  For an easier way
-to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}.
-
-@item G r
-@kindex G r (Group)
-@findex gnus-group-rename-group
-@cindex renaming groups
-Rename the current group to something else
-(@code{gnus-group-rename-group}).  This is valid only on some
-groups---mail groups mostly.  This command might very well be quite slow
-on some backends.
-
-@item G c
-@kindex G c (Group)
-@cindex customizing
-@findex gnus-group-customize
-Customize the group parameters (@code{gnus-group-customize}).
-
-@item G e
-@kindex G e (Group)
-@findex gnus-group-edit-group-method
-@cindex renaming groups
-Enter a buffer where you can edit the select method of the current
-group (@code{gnus-group-edit-group-method}).
-
-@item G p
-@kindex G p (Group)
-@findex gnus-group-edit-group-parameters
-Enter a buffer where you can edit the group parameters
-(@code{gnus-group-edit-group-parameters}).
-
-@item G E
-@kindex G E (Group)
-@findex gnus-group-edit-group
-Enter a buffer where you can edit the group info
-(@code{gnus-group-edit-group}).
-
-@item G d
-@kindex G d (Group)
-@findex gnus-group-make-directory-group
-@cindex nndir
-Make a directory group (@pxref{Directory Groups}).  You will be prompted
-for a directory name (@code{gnus-group-make-directory-group}).
-
-@item G h
-@kindex G h (Group)
-@cindex help group
-@findex gnus-group-make-help-group
-Make the Gnus help group (@code{gnus-group-make-help-group}).
-
-@item G a
-@kindex G a (Group)
-@cindex (ding) archive
-@cindex archive group
-@findex gnus-group-make-archive-group
-@vindex gnus-group-archive-directory
-@vindex gnus-group-recent-archive-directory
-Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
-default a group pointing to the most recent articles will be created
-(@code{gnus-group-recent-archive-directory}), but given a prefix, a full
-group will be created from @code{gnus-group-archive-directory}.
-
-@item G k
-@kindex G k (Group)
-@findex gnus-group-make-kiboze-group
-@cindex nnkiboze
-Make a kiboze group.  You will be prompted for a name, for a regexp to
-match groups to be ``included'' in the kiboze group, and a series of
-strings to match on headers (@code{gnus-group-make-kiboze-group}).
-@xref{Kibozed Groups}.
-
-@item G D
-@kindex G D (Group)
-@findex gnus-group-enter-directory
-@cindex nneething
-Read an arbitrary directory as if it were a newsgroup with the
-@code{nneething} backend (@code{gnus-group-enter-directory}).
-@xref{Anything Groups}.
-
-@item G f
-@kindex G f (Group)
-@findex gnus-group-make-doc-group
-@cindex ClariNet Briefs
-@cindex nndoc
-Make a group based on some file or other
-(@code{gnus-group-make-doc-group}).  If you give a prefix to this
-command, you will be prompted for a file name and a file type.
-Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
-@code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs},
-@code{rfc934}, @code{rfc822-forward}, @code{nsmail} and @code{forward}.
-If you run this command without a prefix, Gnus will guess at the file
-type.  @xref{Document Groups}.
-
-@item G u
-@kindex G u (Group)
-@vindex gnus-useful-groups
-@findex gnus-group-make-useful-group
-Create one of the groups mentioned in @code{gnus-useful-groups}
-(@code{gnus-group-make-useful-group}).
-
-@item G w
-@kindex G w (Group)
-@findex gnus-group-make-web-group
-@cindex DejaNews
-@cindex Alta Vista
-@cindex InReference
-@cindex nnweb
-Make an ephemeral group based on a web search
-(@code{gnus-group-make-web-group}).  If you give a prefix to this
-command, make a solid group instead.  You will be prompted for the
-search engine type and the search string.  Valid search engine types
-include @code{dejanews}, @code{altavista} and @code{reference}.
-@xref{Web Searches}.
-
-If you use the @code{dejanews} search engine, you can limit the search
-to a particular group by using a match string like
-@samp{~g alt.sysadmin.recovery shaving}.
-
-@item G DEL
-@kindex G DEL (Group)
-@findex gnus-group-delete-group
-This function will delete the current group
-(@code{gnus-group-delete-group}).  If given a prefix, this function will
-actually delete all the articles in the group, and forcibly remove the
-group itself from the face of the Earth.  Use a prefix only if you are
-absolutely sure of what you are doing.  This command can't be used on
-read-only groups (like @code{nntp} group), though.
-
-@item G V
-@kindex G V (Group)
-@findex gnus-group-make-empty-virtual
-Make a new, fresh, empty @code{nnvirtual} group
-(@code{gnus-group-make-empty-virtual}).  @xref{Virtual Groups}.
-
-@item G v
-@kindex G v (Group)
-@findex gnus-group-add-to-virtual
-Add the current group to an @code{nnvirtual} group
-(@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
-@end table
-
-@xref{Select Methods}, for more information on the various select
-methods.
-
-@vindex gnus-activate-foreign-newsgroups
-If @code{gnus-activate-foreign-newsgroups} is a positive number,
-Gnus will check all foreign groups with this level or lower at startup.
-This might take quite a while, especially if you subscribe to lots of
-groups from different @sc{nntp} servers.  Also @pxref{Group Levels};
-@code{gnus-activate-level} also affects activation of foreign
-newsgroups.
-
-
-@node Group Parameters
-@section Group Parameters
-@cindex group parameters
-
-The group parameters store information local to a particular group.
-Here's an example group parameter list:
-
-@example
-((to-address . "ding@@gnus.org")
- (auto-expire . t))
-@end example
-
-We see that each element consists of a "dotted pair"---the thing before
-the dot is the key, while the thing after the dot is the value.  All the
-parameters have this form @emph{except} local variable specs, which are
-not dotted pairs, but proper lists.
-
-The following group parameters can be used:
-
-@table @code
-@item to-address
-@cindex to-address
-Address used by when doing followups and new posts.
-
-@example
-(to-address .  "some@@where.com")
-@end example
-
-This is primarily useful in mail groups that represent closed mailing
-lists---mailing lists where it's expected that everybody that writes to
-the mailing list is subscribed to it.  Since using this parameter
-ensures that the mail only goes to the mailing list itself, it means
-that members won't receive two copies of your followups.
-
-Using @code{to-address} will actually work whether the group is foreign
-or not.  Let's say there's a group on the server that is called
-@samp{fa.4ad-l}.  This is a real newsgroup, but the server has gotten
-the articles from a mail-to-news gateway.  Posting directly to this
-group is therefore impossible---you have to send mail to the mailing
-list address instead.
-
-@item to-list
-@cindex to-list
-Address used when doing a @kbd{a} in that group.
-
-@example
-(to-list . "some@@where.com")
-@end example
-
-It is totally ignored
-when doing a followup---except that if it is present in a news group,
-you'll get mail group semantics when doing @kbd{f}.
-
-If you do an @kbd{a} command in a mail group and you have neither a
-@code{to-list} group parameter nor a @code{to-address} group parameter,
-then a @code{to-list} group parameter will be added automatically upon
-sending the message if @code{gnus-add-to-list} is set to @code{t}.
-@vindex gnus-add-to-list
-
-If you do an @kbd{a} command in a mail group and you don't have a
-@code{to-list} group parameter, one will be added automatically upon
-sending the message.
-
-@item visible
-@cindex visible
-If the group parameter list has the element @code{(visible . t)},
-that group will always be visible in the Group buffer, regardless
-of whether it has any unread articles.
-
-@item broken-reply-to
-@cindex broken-reply-to
-Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
-headers in this group are to be ignored.  This can be useful if you're
-reading a mailing list group where the listserv has inserted
-@code{Reply-To} headers that point back to the listserv itself.  This is
-broken behavior.  So there!
-
-@item to-group
-@cindex to-group
-Elements like @code{(to-group . "some.group.name")} means that all
-posts in that group will be sent to @code{some.group.name}.
-
-@item newsgroup
-@cindex newsgroup
-If you have @code{(newsgroup . t)} in the group parameter list, Gnus
-will treat all responses as if they were responses to news articles.
-This can be useful if you have a mail group that's really a mirror of a
-news group.
-
-@item gcc-self
-@cindex gcc-self
-If @code{(gcc-self . t)} is present in the group parameter list, newly
-composed messages will be @code{Gcc}'d to the current group. If
-@code{(gcc-self . none)} is present, no @code{Gcc:} header will be
-generated, if @code{(gcc-self . "string")} is present, this string will
-be inserted literally as a @code{gcc} header.  This parameter takes
-precedence over any default @code{Gcc} rules as described later
-(@pxref{Archived Messages}).
-
-@item auto-expire
-@cindex auto-expire
-If the group parameter has an element that looks like @code{(auto-expire
-. t)}, all articles read will be marked as expirable.  For an
-alternative approach, @pxref{Expiring Mail}.
-
-@item total-expire
-@cindex total-expire
-If the group parameter has an element that looks like
-@code{(total-expire . t)}, all read articles will be put through the
-expiry process, even if they are not marked as expirable.  Use with
-caution.  Unread, ticked and dormant articles are not eligible for
-expiry.
-
-@item expiry-wait
-@cindex expiry-wait
-@vindex nnmail-expiry-wait-function
-If the group parameter has an element that looks like @code{(expiry-wait
-. 10)}, this value will override any @code{nnmail-expiry-wait} and
-@code{nnmail-expiry-wait-function} when expiring expirable messages.
-The value can either be a number of days (not necessarily an integer) or
-the symbols @code{never} or @code{immediate}.
-
-@item score-file
-@cindex score file group parameter
-Elements that look like @code{(score-file . "file")} will make
-@file{file} into the current score file for the group in question.  All
-interactive score entries will be put into this file.
-
-@item adapt-file
-@cindex adapt file group parameter
-Elements that look like @code{(adapt-file . "file")} will make
-@file{file} into the current adaptive file for the group in question.
-All adaptive score entries will be put into this file.
-
-@item admin-address
-When unsubscribing from a mailing list you should never send the
-unsubscription notice to the mailing list itself.  Instead, you'd send
-messages to the administrative address.  This parameter allows you to
-put the admin address somewhere convenient.
-
-@item display
-Elements that look like @code{(display . MODE)} say which articles to
-display on entering the group.  Valid values are:
-
-@table @code
-@item all
-Display all articles, both read and unread.
-
-@item default
-Display the default visible articles, which normally includes unread and
-ticked articles.
-@end table
-
-@item comment
-Elements that look like @code{(comment . "This is a comment")}
-are arbitrary comments on the group.  They are currently ignored by
-Gnus, but provide a place for you to store information on particular
-groups.
-
-@item charset
-Elements that look like @code{(charset . iso-8859-1)} will make
-@code{iso-8859-1} the default charset; that is, the charset that will be
-used for all articles that do not specify a charset.
-
-@item (@var{variable} @var{form})
-You can use the group parameters to set variables local to the group you
-are entering.  If you want to turn threading off in @samp{news.answers},
-you could put @code{(gnus-show-threads nil)} in the group parameters of
-that group.  @code{gnus-show-threads} will be made into a local variable
-in the summary buffer you enter, and the form @code{nil} will be
-@code{eval}ed there.
-
-This can also be used as a group-specific hook function, if you'd like.
-If you want to hear a beep when you enter a group, you could put
-something like @code{(dummy-variable (ding))} in the parameters of that
-group.  @code{dummy-variable} will be set to the result of the
-@code{(ding)} form, but who cares?
-
-@item posting-style
-You can store additional posting style information for this group only
-here (@pxref{Posting Styles}). The format is that of an entry in the
-@code{gnus-posting-styles} alist, except that there's no regexp matching
-the group name (of course). Style elements in this group parameter will
-take precedence over the ones found in @code{gnus-posting-styles}.
-
-For instance, if you want a funky name and signature in this group only,
-instead of hacking @code{gnus-posting-styles}, you could put something
-like this in the group parameters:
-
-@example
-(posting-style
-  (name "Funky Name")
-  (signature "Funky Signature"))
-@end example
-
-@end table
-
-Use the @kbd{G p} command to edit group parameters of a group.  You
-might also be interested in reading about topic parameters (@pxref{Topic
-Parameters}).
-
-
-@node Listing Groups
-@section Listing Groups
-@cindex group listing
-
-These commands all list various slices of the groups available.
-
-@table @kbd
-
-@item l
-@itemx A s
-@kindex A s (Group)
-@kindex l (Group)
-@findex gnus-group-list-groups
-List all groups that have unread articles
-(@code{gnus-group-list-groups}).  If the numeric prefix is used, this
-command will list only groups of level ARG and lower.  By default, it
-only lists groups of level five (i. e.,
-@code{gnus-group-default-list-level}) or lower (i.e., just subscribed
-groups).
-
-@item L
-@itemx A u
-@kindex A u (Group)
-@kindex L (Group)
-@findex gnus-group-list-all-groups
-List all groups, whether they have unread articles or not
-(@code{gnus-group-list-all-groups}).  If the numeric prefix is used,
-this command will list only groups of level ARG and lower.  By default,
-it lists groups of level seven or lower (i.e., just subscribed and
-unsubscribed groups).
-
-@item A l
-@kindex A l (Group)
-@findex gnus-group-list-level
-List all unread groups on a specific level
-(@code{gnus-group-list-level}).  If given a prefix, also list the groups
-with no unread articles.
-
-@item A k
-@kindex A k (Group)
-@findex gnus-group-list-killed
-List all killed groups (@code{gnus-group-list-killed}).  If given a
-prefix argument, really list all groups that are available, but aren't
-currently (un)subscribed.  This could entail reading the active file
-from the server.
-
-@item A z
-@kindex A z (Group)
-@findex gnus-group-list-zombies
-List all zombie groups (@code{gnus-group-list-zombies}).
-
-@item A m
-@kindex A m (Group)
-@findex gnus-group-list-matching
-List all unread, subscribed groups with names that match a regexp
-(@code{gnus-group-list-matching}).
-
-@item A M
-@kindex A M (Group)
-@findex gnus-group-list-all-matching
-List groups that match a regexp (@code{gnus-group-list-all-matching}).
-
-@item A A
-@kindex A A (Group)
-@findex gnus-group-list-active
-List absolutely all groups in the active file(s) of the
-server(s) you are connected to (@code{gnus-group-list-active}).  This
-might very well take quite a while.  It might actually be a better idea
-to do a @kbd{A M} to list all matching, and just give @samp{.} as the
-thing to match on.  Also note that this command may list groups that
-don't exist (yet)---these will be listed as if they were killed groups.
-Take the output with some grains of salt.
-
-@item A a
-@kindex A a (Group)
-@findex gnus-group-apropos
-List all groups that have names that match a regexp
-(@code{gnus-group-apropos}).
-
-@item A d
-@kindex A d (Group)
-@findex gnus-group-description-apropos
-List all groups that have names or descriptions that match a regexp
-(@code{gnus-group-description-apropos}).
-
-@end table
-
-@vindex gnus-permanently-visible-groups
-@cindex visible group parameter
-Groups that match the @code{gnus-permanently-visible-groups} regexp will
-always be shown, whether they have unread articles or not.  You can also
-add the @code{visible} element to the group parameters in question to
-get the same effect.
-
-@vindex gnus-list-groups-with-ticked-articles
-Groups that have just ticked articles in it are normally listed in the
-group buffer.  If @code{gnus-list-groups-with-ticked-articles} is
-@code{nil}, these groups will be treated just like totally empty
-groups.  It is @code{t} by default.
-
-
-@node Sorting Groups
-@section Sorting Groups
-@cindex sorting groups
-
-@kindex C-c C-s (Group)
-@findex gnus-group-sort-groups
-@vindex gnus-group-sort-function
-The @kbd{C-c C-s} (@code{gnus-group-sort-groups}) command sorts the
-group buffer according to the function(s) given by the
-@code{gnus-group-sort-function} variable.  Available sorting functions
-include:
-
-@table @code
-
-@item gnus-group-sort-by-alphabet
-@findex gnus-group-sort-by-alphabet
-Sort the group names alphabetically.  This is the default.
-
-@item gnus-group-sort-by-real-name
-@findex gnus-group-sort-by-real-name
-Sort the group alphabetically on the real (unprefixed) group names.
-
-@item gnus-group-sort-by-level
-@findex gnus-group-sort-by-level
-Sort by group level.
-
-@item gnus-group-sort-by-score
-@findex gnus-group-sort-by-score
-Sort by group score.  @xref{Group Score}.
-
-@item gnus-group-sort-by-rank
-@findex gnus-group-sort-by-rank
-Sort by group score and then the group level.  The level and the score
-are, when taken together, the group's @dfn{rank}.  @xref{Group Score}.
-
-@item gnus-group-sort-by-unread
-@findex gnus-group-sort-by-unread
-Sort by number of unread articles.
-
-@item gnus-group-sort-by-method
-@findex gnus-group-sort-by-method
-Sort alphabetically on the select method.
-
-
-@end table
-
-@code{gnus-group-sort-function} can also be a list of sorting
-functions.  In that case, the most significant sort key function must be
-the last one.
-
-
-There are also a number of commands for sorting directly according to
-some sorting criteria:
-
-@table @kbd
-@item G S a
-@kindex G S a (Group)
-@findex gnus-group-sort-groups-by-alphabet
-Sort the group buffer alphabetically by group name
-(@code{gnus-group-sort-groups-by-alphabet}).
-
-@item G S u
-@kindex G S u (Group)
-@findex gnus-group-sort-groups-by-unread
-Sort the group buffer by the number of unread articles
-(@code{gnus-group-sort-groups-by-unread}).
-
-@item G S l
-@kindex G S l (Group)
-@findex gnus-group-sort-groups-by-level
-Sort the group buffer by group level
-(@code{gnus-group-sort-groups-by-level}).
-
-@item G S v
-@kindex G S v (Group)
-@findex gnus-group-sort-groups-by-score
-Sort the group buffer by group score
-(@code{gnus-group-sort-groups-by-score}).  @xref{Group Score}.
-
-@item G S r
-@kindex G S r (Group)
-@findex gnus-group-sort-groups-by-rank
-Sort the group buffer by group rank
-(@code{gnus-group-sort-groups-by-rank}).  @xref{Group Score}.
-
-@item G S m
-@kindex G S m (Group)
-@findex gnus-group-sort-groups-by-method
-Sort the group buffer alphabetically by backend name
-(@code{gnus-group-sort-groups-by-method}).
-
-@end table
-
-All the commands below obey the process/prefix convention
-(@pxref{Process/Prefix}).
-
-When given a symbolic prefix (@pxref{Symbolic Prefixes}), all these
-commands will sort in reverse order.
-
-You can also sort a subset of the groups:
-
-@table @kbd
-@item G P a
-@kindex G P a (Group)
-@findex gnus-group-sort-selected-groups-by-alphabet
-Sort the groups alphabetically by group name
-(@code{gnus-group-sort-selected-groups-by-alphabet}).
-
-@item G P u
-@kindex G P u (Group)
-@findex gnus-group-sort-selected-groups-by-unread
-Sort the groups by the number of unread articles
-(@code{gnus-group-sort-selected-groups-by-unread}).
-
-@item G P l
-@kindex G P l (Group)
-@findex gnus-group-sort-selected-groups-by-level
-Sort the groups by group level
-(@code{gnus-group-sort-selected-groups-by-level}).
-
-@item G P v
-@kindex G P v (Group)
-@findex gnus-group-sort-selected-groups-by-score
-Sort the groups by group score
-(@code{gnus-group-sort-selected-groups-by-score}).  @xref{Group Score}.
-
-@item G P r
-@kindex G P r (Group)
-@findex gnus-group-sort-selected-groups-by-rank
-Sort the groups by group rank
-(@code{gnus-group-sort-selected-groups-by-rank}).  @xref{Group Score}.
-
-@item G P m
-@kindex G P m (Group)
-@findex gnus-group-sort-selected-groups-by-method
-Sort the groups alphabetically by backend name
-(@code{gnus-group-sort-selected-groups-by-method}).
-
-@end table
-
-
-
-@node Group Maintenance
-@section Group Maintenance
-@cindex bogus groups
-
-@table @kbd
-@item b
-@kindex b (Group)
-@findex gnus-group-check-bogus-groups
-Find bogus groups and delete them
-(@code{gnus-group-check-bogus-groups}).
-
-@item F
-@kindex F (Group)
-@findex gnus-group-find-new-groups
-Find new groups and process them (@code{gnus-group-find-new-groups}).
-With 1 @kbd{C-u}, use the @code{ask-server} method to query the server
-for new groups.  With 2 @kbd{C-u}'s, use most complete method possible
-to query the server for new groups, and subscribe the new groups as
-zombies.
-
-@item C-c C-x
-@kindex C-c C-x (Group)
-@findex gnus-group-expire-articles
-Run all expirable articles in the current group through the expiry
-process (if any) (@code{gnus-group-expire-articles}).
-
-@item C-c M-C-x
-@kindex C-c M-C-x (Group)
-@findex gnus-group-expire-all-groups
-Run all articles in all groups through the expiry process
-(@code{gnus-group-expire-all-groups}).
-
-@end table
-
-
-@node Browse Foreign Server
-@section Browse Foreign Server
-@cindex foreign servers
-@cindex browsing servers
-
-@table @kbd
-@item B
-@kindex B (Group)
-@findex gnus-group-browse-foreign-server
-You will be queried for a select method and a server name.  Gnus will
-then attempt to contact this server and let you browse the groups there
-(@code{gnus-group-browse-foreign-server}).
-@end table
-
-@findex gnus-browse-mode
-A new buffer with a list of available groups will appear.  This buffer
-will use the @code{gnus-browse-mode}.  This buffer looks a bit (well,
-a lot) like a normal group buffer.
-
-Here's a list of keystrokes available in the browse mode:
-
-@table @kbd
-@item n
-@kindex n (Browse)
-@findex gnus-group-next-group
-Go to the next group (@code{gnus-group-next-group}).
-
-@item p
-@kindex p (Browse)
-@findex gnus-group-prev-group
-Go to the previous group (@code{gnus-group-prev-group}).
-
-@item SPACE
-@kindex SPACE (Browse)
-@findex gnus-browse-read-group
-Enter the current group and display the first article
-(@code{gnus-browse-read-group}).
-
-@item RET
-@kindex RET (Browse)
-@findex gnus-browse-select-group
-Enter the current group (@code{gnus-browse-select-group}).
-
-@item u
-@kindex u (Browse)
-@findex gnus-browse-unsubscribe-current-group
-Unsubscribe to the current group, or, as will be the case here,
-subscribe to it (@code{gnus-browse-unsubscribe-current-group}).
-
-@item l
-@itemx q
-@kindex q (Browse)
-@kindex l (Browse)
-@findex gnus-browse-exit
-Exit browse mode (@code{gnus-browse-exit}).
-
-@item ?
-@kindex ? (Browse)
-@findex gnus-browse-describe-briefly
-Describe browse mode briefly (well, there's not much to describe, is
-there) (@code{gnus-browse-describe-briefly}).
-@end table
-
-
-@node Exiting Gnus
-@section Exiting Gnus
-@cindex exiting Gnus
-
-Yes, Gnus is ex(c)iting.
-
-@table @kbd
-@item z
-@kindex z (Group)
-@findex gnus-group-suspend
-Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
-but it kills all buffers except the Group buffer.  I'm not sure why this
-is a gain, but then who am I to judge?
-
-@item q
-@kindex q (Group)
-@findex gnus-group-exit
-@c @icon{gnus-group-exit}
-Quit Gnus (@code{gnus-group-exit}).
-
-@item Q
-@kindex Q (Group)
-@findex gnus-group-quit
-Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}).
-The dribble file will be saved, though (@pxref{Auto Save}).
-@end table
-
-@vindex gnus-exit-gnus-hook
-@vindex gnus-suspend-gnus-hook
-@code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
-@code{gnus-exit-gnus-hook} is called when you quit Gnus, while
-@code{gnus-after-exiting-gnus-hook} is called as the final item when
-exiting Gnus.
-
-@findex gnus-unload
-@cindex unloading
-If you wish to completely unload Gnus and all its adherents, you can use
-the @code{gnus-unload} command.  This command is also very handy when
-trying to customize meta-variables.
-
-Note:
-
-@quotation
-Miss Lisa Cannifax, while sitting in English class, felt her feet go
-numbly heavy and herself fall into a hazy trance as the boy sitting
-behind her drew repeated lines with his pencil across the back of her
-plastic chair.
-@end quotation
-
-
-@node Group Topics
-@section Group Topics
-@cindex topics
-
-If you read lots and lots of groups, it might be convenient to group
-them hierarchically according to topics.  You put your Emacs groups over
-here, your sex groups over there, and the rest (what, two groups or so?)
-you put in some misc section that you never bother with anyway.  You can
-even group the Emacs sex groups as a sub-topic to either the Emacs
-groups or the sex groups---or both!  Go wild!
-
-@iftex
-@end iftex
-
-Here's an example:
-
-@example
-Gnus
-  Emacs -- I wuw it!
-     3: comp.emacs
-     2: alt.religion.emacs
-    Naughty Emacs
-     452: alt.sex.emacs
-       0: comp.talk.emacs.recovery
-  Misc
-     8: comp.binaries.fractals
-    13: comp.sources.unix
-@end example
-
-@findex gnus-topic-mode
-@kindex t (Group)
-To get this @emph{fab} functionality you simply turn on (ooh!) the
-@code{gnus-topic} minor mode---type @kbd{t} in the group buffer.  (This
-is a toggling command.)
-
-Go ahead, just try it.  I'll still be here when you get back.  La de
-dum...  Nice tune, that...  la la la...  What, you're back? Yes, and now
-press @kbd{l}.  There.  All your groups are now listed under
-@samp{misc}.  Doesn't that make you feel all warm and fuzzy?  Hot and
-bothered?
-
-If you want this permanently enabled, you should add that minor mode to
-the hook for the group mode:
-
-@lisp
-(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
-@end lisp
-
-@menu
-* Topic Variables::    How to customize the topics the Lisp Way.
-* Topic Commands::     Interactive E-Z commands.
-* Topic Sorting::      Sorting each topic individually.
-* Topic Topology::     A map of the world.
-* Topic Parameters::   Parameters that apply to all groups in a topic.
-@end menu
-
-
-@node Topic Variables
-@subsection Topic Variables
-@cindex topic variables
-
-Now, if you select a topic, it will fold/unfold that topic, which is
-really neat, I think.
-
-@vindex gnus-topic-line-format
-The topic lines themselves are created according to the
-@code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
-Valid elements are:
-
-@table @samp
-@item i
-Indentation.
-@item n
-Topic name.
-@item v
-Visibility.
-@item l
-Level.
-@item g
-Number of groups in the topic.
-@item a
-Number of unread articles in the topic.
-@item A
-Number of unread articles in the topic and all its subtopics.
-@end table
-
-@vindex gnus-topic-indent-level
-Each sub-topic (and the groups in the sub-topics) will be indented with
-@code{gnus-topic-indent-level} times the topic level number of spaces.
-The default is 2.
-
-@vindex gnus-topic-mode-hook
-@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
-
-@vindex gnus-topic-display-empty-topics
-The @code{gnus-topic-display-empty-topics} says whether to display even
-topics that have no unread articles in them.  The default is @code{t}.
-
-
-@node Topic Commands
-@subsection Topic Commands
-@cindex topic commands
-
-When the topic minor mode is turned on, a new @kbd{T} submap will be
-available.  In addition, a few of the standard keys change their
-definitions slightly.
-
-@table @kbd
-
-@item T n
-@kindex T n (Topic)
-@findex gnus-topic-create-topic
-Prompt for a new topic name and create it
-(@code{gnus-topic-create-topic}).
-
-@item T m
-@kindex T m (Topic)
-@findex gnus-topic-move-group
-Move the current group to some other topic
-(@code{gnus-topic-move-group}).  This command uses the process/prefix
-convention (@pxref{Process/Prefix}).
-
-@item T j
-@kindex T j (Topic)
-@findex gnus-topic-jump-to-topic
-Go to a topic (@code{gnus-topic-jump-to-topic}).  
-
-@item T c
-@kindex T c (Topic)
-@findex gnus-topic-copy-group
-Copy the current group to some other topic
-(@code{gnus-topic-copy-group}).  This command uses the process/prefix
-convention (@pxref{Process/Prefix}).
-
-@item T D
-@kindex T D (Topic)
-@findex gnus-topic-remove-group
-Remove a group from the current topic (@code{gnus-topic-remove-group}).
-This command is mainly useful if you have the same group in several
-topics and wish to remove it from one of the topics.  You may also
-remove a group from all topics, but in that case, Gnus will add it to
-the root topic the next time you start Gnus.  In fact, all new groups
-(which, naturally, don't belong to any topic) will show up in the root
-topic.
-
-This command uses the process/prefix convention
-(@pxref{Process/Prefix}).
-
-@item T M
-@kindex T M (Topic)
-@findex gnus-topic-move-matching
-Move all groups that match some regular expression to a topic
-(@code{gnus-topic-move-matching}).
-
-@item T C
-@kindex T C (Topic)
-@findex gnus-topic-copy-matching
-Copy all groups that match some regular expression to a topic
-(@code{gnus-topic-copy-matching}).
-
-@item T H
-@kindex T H (Topic)
-@findex gnus-topic-toggle-display-empty-topics
-Toggle hiding empty topics
-(@code{gnus-topic-toggle-display-empty-topics}).
-
-@item T #
-@kindex T # (Topic)
-@findex gnus-topic-mark-topic
-Mark all groups in the current topic with the process mark
-(@code{gnus-topic-mark-topic}).
-
-@item T M-#
-@kindex T M-# (Topic)
-@findex gnus-topic-unmark-topic
-Remove the process mark from all groups in the current topic
-(@code{gnus-topic-unmark-topic}).
-
-@item T TAB
-@itemx TAB
-@kindex T TAB (Topic)
-@kindex TAB (Topic)
-@findex gnus-topic-indent
-``Indent'' the current topic so that it becomes a sub-topic of the
-previous topic (@code{gnus-topic-indent}).  If given a prefix,
-``un-indent'' the topic instead.
-
-@item M-TAB
-@kindex M-TAB (Topic)
-@findex gnus-topic-unindent
-``Un-indent'' the current topic so that it becomes a sub-topic of the
-parent of its current parent (@code{gnus-topic-unindent}).
-
-@item RET
-@kindex RET (Topic)
-@findex gnus-topic-select-group
-@itemx SPACE
-Either select a group or fold a topic (@code{gnus-topic-select-group}).
-When you perform this command on a group, you'll enter the group, as
-usual.  When done on a topic line, the topic will be folded (if it was
-visible) or unfolded (if it was folded already).  So it's basically a
-toggling command on topics.  In addition, if you give a numerical
-prefix, group on that level (and lower) will be displayed.
-
-@item C-c C-x
-@kindex C-c C-x (Topic)
-@findex gnus-topic-expire-articles
-Run all expirable articles in the current group or topic through the expiry
-process (if any) (@code{gnus-topic-expire-articles}).
-
-@item C-k
-@kindex C-k (Topic)
-@findex gnus-topic-kill-group
-Kill a group or topic (@code{gnus-topic-kill-group}).  All groups in the
-topic will be removed along with the topic.
-
-@item C-y
-@kindex C-y (Topic)
-@findex gnus-topic-yank-group
-Yank the previously killed group or topic
-(@code{gnus-topic-yank-group}).  Note that all topics will be yanked
-before all groups.
-
-@item T r
-@kindex T r (Topic)
-@findex gnus-topic-rename
-Rename a topic (@code{gnus-topic-rename}).
-
-@item T DEL
-@kindex T DEL (Topic)
-@findex gnus-topic-delete
-Delete an empty topic (@code{gnus-topic-delete}).
-
-@item A T
-@kindex A T (Topic)
-@findex gnus-topic-list-active
-List all groups that Gnus knows about in a topics-ified way
-(@code{gnus-topic-list-active}).
-
-@item G p
-@kindex G p (Topic)
-@findex gnus-topic-edit-parameters
-@cindex group parameters
-@cindex topic parameters
-@cindex parameters
-Edit the topic parameters (@code{gnus-topic-edit-parameters}).
-@xref{Topic Parameters}.
-
-@end table
-
-
-@node Topic Sorting
-@subsection Topic Sorting
-@cindex topic sorting
-
-You can sort the groups in each topic individually with the following
-commands:
-
-
-@table @kbd
-@item T S a
-@kindex T S a (Topic)
-@findex gnus-topic-sort-groups-by-alphabet
-Sort the current topic alphabetically by group name
-(@code{gnus-topic-sort-groups-by-alphabet}).
-
-@item T S u
-@kindex T S u (Topic)
-@findex gnus-topic-sort-groups-by-unread
-Sort the current topic by the number of unread articles
-(@code{gnus-topic-sort-groups-by-unread}).
-
-@item T S l
-@kindex T S l (Topic)
-@findex gnus-topic-sort-groups-by-level
-Sort the current topic by group level
-(@code{gnus-topic-sort-groups-by-level}).
-
-@item T S v
-@kindex T S v (Topic)
-@findex gnus-topic-sort-groups-by-score
-Sort the current topic by group score
-(@code{gnus-topic-sort-groups-by-score}).  @xref{Group Score}.
-
-@item T S r
-@kindex T S r (Topic)
-@findex gnus-topic-sort-groups-by-rank
-Sort the current topic by group rank
-(@code{gnus-topic-sort-groups-by-rank}).  @xref{Group Score}.
-
-@item T S m
-@kindex T S m (Topic)
-@findex gnus-topic-sort-groups-by-method
-Sort the current topic alphabetically by backend name
-(@code{gnus-topic-sort-groups-by-method}).
-
-@end table
-
-@xref{Sorting Groups}, for more information about group sorting.
-
-
-@node Topic Topology
-@subsection Topic Topology
-@cindex topic topology
-@cindex topology
-
-So, let's have a look at an example group buffer:
-
-@example
-Gnus
-  Emacs -- I wuw it!
-     3: comp.emacs
-     2: alt.religion.emacs
-    Naughty Emacs
-     452: alt.sex.emacs
-       0: comp.talk.emacs.recovery
-  Misc
-     8: comp.binaries.fractals
-    13: comp.sources.unix
-@end example
-
-So, here we have one top-level topic (@samp{Gnus}), two topics under
-that, and one sub-topic under one of the sub-topics.  (There is always
-just one (1) top-level topic).  This topology can be expressed as
-follows:
-
-@lisp
-(("Gnus" visible)
- (("Emacs -- I wuw it!" visible)
-  (("Naughty Emacs" visible)))
- (("Misc" visible)))
-@end lisp
-
-@vindex gnus-topic-topology
-This is in fact how the variable @code{gnus-topic-topology} would look
-for the display above.  That variable is saved in the @file{.newsrc.eld}
-file, and shouldn't be messed with manually---unless you really want
-to.  Since this variable is read from the @file{.newsrc.eld} file,
-setting it in any other startup files will have no effect.
-
-This topology shows what topics are sub-topics of what topics (right),
-and which topics are visible.  Two settings are currently
-allowed---@code{visible} and @code{invisible}.
-
-
-@node Topic Parameters
-@subsection Topic Parameters
-@cindex topic parameters
-
-All groups in a topic will inherit group parameters from the parent (and
-ancestor) topic parameters.  All valid group parameters are valid topic
-parameters (@pxref{Group Parameters}).
-
-Group parameters (of course) override topic parameters, and topic
-parameters in sub-topics override topic parameters in super-topics.  You
-know.  Normal inheritance rules.  (@dfn{Rules} is here a noun, not a
-verb, although you may feel free to disagree with me here.)
-
-@example
-Gnus
-  Emacs
-     3: comp.emacs
-     2: alt.religion.emacs
-   452: alt.sex.emacs
-    Relief
-     452: alt.sex.emacs
-       0: comp.talk.emacs.recovery
-  Misc
-     8: comp.binaries.fractals
-    13: comp.sources.unix
-   452: alt.sex.emacs
-@end example
-
-The @samp{Emacs} topic has the topic parameter @code{(score-file
-. "emacs.SCORE")}; the @samp{Relief} topic has the topic parameter
-@code{(score-file . "relief.SCORE")}; and the @samp{Misc} topic has the
-topic parameter @code{(score-file . "emacs.SCORE")}.  In addition,
-@* @samp{alt.religion.emacs} has the group parameter @code{(score-file
-. "religion.SCORE")}.
-
-Now, when you enter @samp{alt.sex.emacs} in the @samp{Relief} topic, you
-will get the @file{relief.SCORE} home score file.  If you enter the same
-group in the @samp{Emacs} topic, you'll get the @file{emacs.SCORE} home
-score file.  If you enter the group @samp{alt.religion.emacs}, you'll
-get the @file{religion.SCORE} home score file.
-
-This seems rather simple and self-evident, doesn't it?  Well, yes.  But
-there are some problems, especially with the @code{total-expiry}
-parameter.  Say you have a mail group in two topics; one with
-@code{total-expiry} and one without.  What happens when you do @kbd{M-x
-gnus-expire-all-expirable-groups}?  Gnus has no way of telling which one
-of these topics you mean to expire articles from, so anything may
-happen.  In fact, I hereby declare that it is @dfn{undefined} what
-happens.  You just have to be careful if you do stuff like that.
-
-
-@node Misc Group Stuff
-@section Misc Group Stuff
-
-@menu
-* Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
-* Group Information::     Information and help on groups and Gnus.
-* Group Timestamp::       Making Gnus keep track of when you last read a group.
-* File Commands::         Reading and writing the Gnus files.
-@end menu
-
-@table @kbd
-
-@item ^
-@kindex ^ (Group)
-@findex gnus-group-enter-server-mode
-Enter the server buffer (@code{gnus-group-enter-server-mode}).
-@xref{The Server Buffer}.
-
-@item a
-@kindex a (Group)
-@findex gnus-group-post-news
-Post an article to a group (@code{gnus-group-post-news}).  If given a
-prefix, the current group name will be used as the default.
-
-@item m
-@kindex m (Group)
-@findex gnus-group-mail
-Mail a message somewhere (@code{gnus-group-mail}).
-
-@end table
-
-Variables for the group buffer:
-
-@table @code
-
-@item gnus-group-mode-hook
-@vindex gnus-group-mode-hook
-is called after the group buffer has been
-created.
-
-@item gnus-group-prepare-hook
-@vindex gnus-group-prepare-hook
-is called after the group buffer is
-generated.  It may be used to modify the buffer in some strange,
-unnatural way.
-
-@item gnus-group-prepared-hook
-@vindex gnus-group-prepare-hook
-is called as the very last thing after the group buffer has been
-generated.  It may be used to move point around, for instance.
-
-@item gnus-permanently-visible-groups
-@vindex gnus-permanently-visible-groups
-Groups matching this regexp will always be listed in the group buffer,
-whether they are empty or not.
-
-@end table
-
-
-@node Scanning New Messages
-@subsection Scanning New Messages
-@cindex new messages
-@cindex scanning new news
-
-@table @kbd
-
-@item g
-@kindex g (Group)
-@findex gnus-group-get-new-news
-@c @icon{gnus-group-get-new-news}
-Check the server(s) for new articles.  If the numerical prefix is used,
-this command will check only groups of level @var{arg} and lower
-(@code{gnus-group-get-new-news}).  If given a non-numerical prefix, this
-command will force a total re-reading of the active file(s) from the
-backend(s).
-
-@item M-g
-@kindex M-g (Group)
-@findex gnus-group-get-new-news-this-group
-@vindex gnus-goto-next-group-when-activating
-@c @icon{gnus-group-get-new-news-this-group}
-Check whether new articles have arrived in the current group
-(@code{gnus-group-get-new-news-this-group}).
-@code{gnus-goto-next-group-when-activating} says whether this command is
-to move point to the next group or not.  It is @code{t} by default.
-
-@findex gnus-activate-all-groups
-@cindex activating groups
-@item C-c M-g
-@kindex C-c M-g (Group)
-Activate absolutely all groups (@code{gnus-activate-all-groups}).
-
-@item R
-@kindex R (Group)
-@cindex restarting
-@findex gnus-group-restart
-Restart Gnus (@code{gnus-group-restart}).  This saves the @file{.newsrc}
-file(s), closes the connection to all servers, clears up all run-time
-Gnus variables, and then starts Gnus all over again.
-
-@end table
-
-@vindex gnus-get-new-news-hook
-@code{gnus-get-new-news-hook} is run just before checking for new news.
-
-@vindex gnus-after-getting-new-news-hook
-@code{gnus-after-getting-new-news-hook} is run after checking for new
-news.
-
-
-@node Group Information
-@subsection Group Information
-@cindex group information
-@cindex information on groups
-
-@table @kbd
-
-
-@item H f
-@kindex H f (Group)
-@findex gnus-group-fetch-faq
-@vindex gnus-group-faq-directory
-@cindex FAQ
-@cindex ange-ftp
-Try to fetch the FAQ for the current group
-(@code{gnus-group-fetch-faq}).  Gnus will try to get the FAQ from
-@code{gnus-group-faq-directory}, which is usually a directory on a
-remote machine.  This variable can also be a list of directories.  In
-that case, giving a prefix to this command will allow you to choose
-between the various sites.  @code{ange-ftp} (or @code{efs}) will be used
-for fetching the file.
-
-If fetching from the first site is unsuccessful, Gnus will attempt to go
-through @code{gnus-group-faq-directory} and try to open them one by one.
-
-@item H d
-@itemx C-c C-d
-@c @icon{gnus-group-describe-group}
-@kindex H d (Group)
-@kindex C-c C-d (Group)
-@cindex describing groups
-@cindex group description
-@findex gnus-group-describe-group
-Describe the current group (@code{gnus-group-describe-group}).  If given
-a prefix, force Gnus to re-read the description from the server.
-
-@item M-d
-@kindex M-d (Group)
-@findex gnus-group-describe-all-groups
-Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
-prefix, force Gnus to re-read the description file from the server.
-
-@item H v
-@itemx V
-@kindex V (Group)
-@kindex H v (Group)
-@cindex version
-@findex gnus-version
-Display current Gnus version numbers (@code{gnus-version}).
-
-@item ?
-@kindex ? (Group)
-@findex gnus-group-describe-briefly
-Give a very short help message (@code{gnus-group-describe-briefly}).
-
-@item C-c C-i
-@kindex C-c C-i (Group)
-@cindex info
-@cindex manual
-@findex gnus-info-find-node
-Go to the Gnus info node (@code{gnus-info-find-node}).
-@end table
-
-
-@node Group Timestamp
-@subsection Group Timestamp
-@cindex timestamps
-@cindex group timestamps
-
-It can be convenient to let Gnus keep track of when you last read a
-group.  To set the ball rolling, you should add
-@code{gnus-group-set-timestamp} to @code{gnus-select-group-hook}:
-
-@lisp
-(add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
-@end lisp
-
-After doing this, each time you enter a group, it'll be recorded.
-
-This information can be displayed in various ways---the easiest is to
-use the @samp{%d} spec in the group line format:
-
-@lisp
-(setq gnus-group-line-format
-      "%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")
-@end lisp
-
-This will result in lines looking like:
-
-@example
-*        0: mail.ding                                19961002T012943
-         0: custom                                   19961002T012713
-@end example
-
-As you can see, the date is displayed in compact ISO 8601 format.  This
-may be a bit too much, so to just display the date, you could say
-something like:
-
-@lisp
-(setq gnus-group-line-format
-      "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
-@end lisp
-
-
-@node File Commands
-@subsection File Commands
-@cindex file commands
-
-@table @kbd
-
-@item r
-@kindex r (Group)
-@findex gnus-group-read-init-file
-@vindex gnus-init-file
-@cindex reading init file
-Re-read the init file (@code{gnus-init-file}, which defaults to
-@file{~/.gnus}) (@code{gnus-group-read-init-file}).
-
-@item s
-@kindex s (Group)
-@findex gnus-group-save-newsrc
-@cindex saving .newsrc
-Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
-(@code{gnus-group-save-newsrc}).  If given a prefix, force saving the
-file(s) whether Gnus thinks it is necessary or not.
-
-@c @item Z
-@c @kindex Z (Group)
-@c @findex gnus-group-clear-dribble
-@c Clear the dribble buffer (@code{gnus-group-clear-dribble}).
-
-@end table
-
-
-@node The Summary Buffer
-@chapter The Summary Buffer
-@cindex summary buffer
-
-A line for each article is displayed in the summary buffer.  You can
-move around, read articles, post articles and reply to articles.
-
-The most common way to a summary buffer is to select a group from the
-group buffer (@pxref{Selecting a Group}).
-
-You can have as many summary buffers open as you wish.
-
-@menu
-* Summary Buffer Format::       Deciding how the summary buffer is to look.
-* Summary Maneuvering::         Moving around the summary buffer.
-* Choosing Articles::           Reading articles.
-* Paging the Article::          Scrolling the current article.
-* Reply Followup and Post::     Posting articles.
-* Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''
-* Marking Articles::            Marking articles as read, expirable, etc.
-* Limiting::                    You can limit the summary buffer.
-* Threading::                   How threads are made.
-* Sorting::                     How articles and threads are sorted.
-* Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
-* Article Caching::             You may store articles in a cache.
-* Persistent Articles::         Making articles expiry-resistant.
-* Article Backlog::             Having already read articles hang around.
-* Saving Articles::             Ways of customizing article saving.
-* Decoding Articles::           Gnus can treat series of (uu)encoded articles.
-* Article Treatment::           The article buffer can be mangled at will.
-* MIME Commands::               Doing MIMEy things with the articles.
-* Charsets::                    Character set issues.
-* Article Commands::            Doing various things with the article buffer.
-* Summary Sorting::             Sorting the summary buffer in various ways.
-* Finding the Parent::          No child support? Get the parent.
-* Alternative Approaches::      Reading using non-default summaries.
-* Tree Display::                A more visual display of threads.
-* Mail Group Commands::         Some commands can only be used in mail groups.
-* Various Summary Stuff::       What didn't fit anywhere else.
-* Exiting the Summary Buffer::  Returning to the Group buffer.
-* Crosspost Handling::          How crossposted articles are dealt with.
-* Duplicate Suppression::       An alternative when crosspost handling fails.
-@end menu
-
-
-@node Summary Buffer Format
-@section Summary Buffer Format
-@cindex summary buffer format
-
-@iftex
-@end iftex
-
-@menu
-* Summary Buffer Lines::     You can specify how summary lines should look.
-* To From Newsgroups::       How to not display your own name.
-* Summary Buffer Mode Line:: You can say how the mode line should look.
-* Summary Highlighting::     Making the summary buffer all pretty and nice.
-@end menu
-
-@findex mail-extract-address-components
-@findex gnus-extract-address-components
-@vindex gnus-extract-address-components
-Gnus will use the value of the @code{gnus-extract-address-components}
-variable as a function for getting the name and address parts of a
-@code{From} header.  Two pre-defined functions exist:
-@code{gnus-extract-address-components}, which is the default, quite
-fast, and too simplistic solution; and
-@code{mail-extract-address-components}, which works very nicely, but is
-slower.  The default function will return the wrong answer in 5% of the
-cases.  If this is unacceptable to you, use the other function instead:
-
-@lisp
-(setq gnus-extract-address-components
-      'mail-extract-address-components)
-@end lisp
-
-@vindex gnus-summary-same-subject
-@code{gnus-summary-same-subject} is a string indicating that the current
-article has the same subject as the previous.  This string will be used
-with those specs that require it.  The default is @code{""}.
-
-
-@node Summary Buffer Lines
-@subsection Summary Buffer Lines
-
-@vindex gnus-summary-line-format
-You can change the format of the lines in the summary buffer by changing
-the @code{gnus-summary-line-format} variable.  It works along the same
-lines as a normal @code{format} string, with some extensions
-(@pxref{Formatting Variables}).
-
-The default string is @samp{%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n}.
-
-The following format specification characters are understood:
-
-@table @samp
-@item N
-Article number.
-@item S
-Subject string. List identifiers stripped, @code{gnus-list-identifies}. @xref{Article Hiding}.
-@item s
-Subject if the article is the root of the thread or the previous article
-had a different subject, @code{gnus-summary-same-subject} otherwise.
-(@code{gnus-summary-same-subject} defaults to @code{""}.)
-@item F
-Full @code{From} header.
-@item n
-The name (from the @code{From} header).
-@item f
-The name, code @code{To} header or the @code{Newsgroups} header
-(@pxref{To From Newsgroups}).
-@item a
-The name (from the @code{From} header).  This differs from the @code{n}
-spec in that it uses the function designated by the
-@code{gnus-extract-address-components} variable, which is slower, but
-may be more thorough.
-@item A
-The address (from the @code{From} header).  This works the same way as
-the @code{a} spec.
-@item L
-Number of lines in the article.
-@item c
-Number of characters in the article.
-@item I
-Indentation based on thread level (@pxref{Customizing Threading}).
-@item T
-Nothing if the article is a root and lots of spaces if it isn't (it
-pushes everything after it off the screen).
-@item [
-Opening bracket, which is normally @samp{[}, but can also be @samp{<}
-for adopted articles (@pxref{Customizing Threading}).
-@item ]
-Closing bracket, which is normally @samp{]}, but can also be @samp{>}
-for adopted articles.
-@item >
-One space for each thread level.
-@item <
-Twenty minus thread level spaces.
-@item U
-Unread.
-
-@item R
-This misleadingly named specifier is the @dfn{secondary mark}.  This
-mark will say whether the article has been replied to, has been cached,
-or has been saved.
-
-@item i
-Score as a number (@pxref{Scoring}).
-@item z
-@vindex gnus-summary-zcore-fuzz
-Zcore, @samp{+} if above the default level and @samp{-} if below the
-default level.  If the difference between
-@code{gnus-summary-default-score} and the score is less than
-@code{gnus-summary-zcore-fuzz}, this spec will not be used.
-@item V
-Total thread score.
-@item x
-@code{Xref}.
-@item D
-@code{Date}.
-@item d
-The @code{Date} in @code{DD-MMM} format.
-@item o
-The @code{Date} in @var{YYYYMMDD}@code{T}@var{HHMMSS} format.
-@item M
-@code{Message-ID}.
-@item r
-@code{References}.
-@item t
-Number of articles in the current sub-thread.  Using this spec will slow
-down summary buffer generation somewhat.
-@item e
-An @samp{=} (@code{gnus-not-empty-thread-mark}) will be displayed if the
-article has any children.
-@item P
-The line number.
-@item O
-Download mark.
-@item u
-User defined specifier.  The next character in the format string should
-be a letter.  Gnus will call the function
-@code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
-following @samp{%u}.  The function will be passed the current header as
-argument.  The function should return a string, which will be inserted
-into the summary just like information from any other summary specifier.
-@end table
-
-The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
-have to be handled with care.  For reasons of efficiency, Gnus will
-compute what column these characters will end up in, and ``hard-code''
-that.  This means that it is invalid to have these specs after a
-variable-length spec.  Well, you might not be arrested, but your summary
-buffer will look strange, which is bad enough.
-
-The smart choice is to have these specs as far to the left as possible.
-(Isn't that the case with everything, though?  But I digress.)
-
-This restriction may disappear in later versions of Gnus.
-
-
-@node To From Newsgroups
-@subsection To From Newsgroups
-@cindex To
-@cindex Newsgroups
-
-In some groups (particularly in archive groups), the @code{From} header
-isn't very interesting, since all the articles there are written by
-you.  To display the information in the @code{To} or @code{Newsgroups}
-headers instead, you need to decide three things: What information to
-gather; where to display it; and when to display it.
-
-@enumerate
-@item
-@vindex gnus-extra-headers
-The reading of extra header information is controlled by the
-@code{gnus-extra-headers}.  This is a list of header symbols.  For
-instance:
-
-@lisp
-(setq gnus-extra-headers
-      '(To Newsgroups X-Newsreader))
-@end lisp
-
-This will result in Gnus trying to obtain these three headers, and
-storing it in header structures for later easy retrieval.
-
-@item
-@findex gnus-extra-header
-The value of these extra headers can be accessed via the
-@code{gnus-extra-header} function.  Here's a format line spec that will
-access the @code{X-Newsreader} header:
-
-@example
-"%~(form (gnus-extra-header 'X-Newsreader))@@"
-@end example
-
-@item
-@vindex gnus-ignored-from-addresses
-The @code{gnus-ignored-from-addresses} variable says when the @samp{%f}
-summary line spec returns the @code{To}, @code{Newsreader} or
-@code{From} header.  If this regexp matches the contents of the
-@code{From} header, the value of the @code{To} or @code{Newsreader}
-headers are used instead.
-
-@end enumerate
-
-@vindex nnmail-extra-headers
-A related variable is @code{nnmail-extra-headers}, which controls when
-to include extra headers when generating overview (@sc{nov}) files.  If
-you have old overview files, you should regenerate them after changing
-this variable.
-
-@vindex gnus-summary-line-format
-You also have to instruct Gnus to display the data by changing the
-@code{%n} spec to the @code{%f} spec in the
-@code{gnus-summary-line-format} variable.
-
-In summary, you'd typically do something like the following:
-
-@lisp
-(setq gnus-extra-headers
-      '(To Newsgroups))
-(setq nnmail-extra-headers gnus-extra-headers)
-(setq gnus-summary-line-format
-      "%U%R%z%I%(%[%4L: %-20,20f%]%) %s\n")
-(setq gnus-ignored-from-addresses
-      "Your Name Here")
-@end lisp
-
-Now, this is mostly useful for mail groups, where you have control over
-the @sc{nov} files that are created.  However, if you can persuade your
-nntp admin to add:
-
-@example
-Newsgroups:full
-@end example
-
-to the end of her @file{overview.fmt} file, then you can use that just
-as you would the extra headers from the mail groups.
-
-
-@node Summary Buffer Mode Line
-@subsection Summary Buffer Mode Line
-
-@vindex gnus-summary-mode-line-format
-You can also change the format of the summary mode bar (@pxref{Mode Line
-Formatting}).  Set @code{gnus-summary-mode-line-format} to whatever you
-like.  The default is @samp{Gnus: %%b [%A] %Z}.
-
-Here are the elements you can play with:
-
-@table @samp
-@item G
-Group name.
-@item p
-Unprefixed group name.
-@item A
-Current article number.
-@item z
-Current article score.
-@item V
-Gnus version.
-@item U
-Number of unread articles in this group.
-@item e
-Number of unread articles in this group that aren't displayed in the
-summary buffer.
-@item Z
-A string with the number of unread and unselected articles represented
-either as @samp{<%U(+%e) more>} if there are both unread and unselected
-articles, and just as @samp{<%U more>} if there are just unread articles
-and no unselected ones.
-@item g
-Shortish group name.  For instance, @samp{rec.arts.anime} will be
-shortened to @samp{r.a.anime}.
-@item S
-Subject of the current article.
-@item u
-User-defined spec (@pxref{User-Defined Specs}).
-@item s
-Name of the current score file (@pxref{Scoring}).
-@item d
-Number of dormant articles (@pxref{Unread Articles}).
-@item t
-Number of ticked articles (@pxref{Unread Articles}).
-@item r
-Number of articles that have been marked as read in this session.
-@item E
-Number of articles expunged by the score files.
-@end table
-
-
-@node Summary Highlighting
-@subsection Summary Highlighting
-
-@table @code
-
-@item gnus-visual-mark-article-hook
-@vindex gnus-visual-mark-article-hook
-This hook is run after selecting an article.  It is meant to be used for
-highlighting the article in some way.  It is not run if
-@code{gnus-visual} is @code{nil}.
-
-@item gnus-summary-update-hook
-@vindex gnus-summary-update-hook
-This hook is called when a summary line is changed.  It is not run if
-@code{gnus-visual} is @code{nil}.
-
-@item gnus-summary-selected-face
-@vindex gnus-summary-selected-face
-This is the face (or @dfn{font} as some people call it) used to
-highlight the current article in the summary buffer.
-
-@item gnus-summary-highlight
-@vindex gnus-summary-highlight
-Summary lines are highlighted according to this variable, which is a
-list where the elements are of the format @code{(@var{form}
-. @var{face})}.  If you would, for instance, like ticked articles to be
-italic and high-scored articles to be bold, you could set this variable
-to something like
-@lisp
-(((eq mark gnus-ticked-mark) . italic)
- ((> score default) . bold))
-@end lisp
-As you may have guessed, if @var{form} returns a non-@code{nil} value,
-@var{face} will be applied to the line.
-@end table
-
-
-@node Summary Maneuvering
-@section Summary Maneuvering
-@cindex summary movement
-
-All the straight movement commands understand the numeric prefix and
-behave pretty much as you'd expect.
-
-None of these commands select articles.
-
-@table @kbd
-@item G M-n
-@itemx M-n
-@kindex M-n (Summary)
-@kindex G M-n (Summary)
-@findex gnus-summary-next-unread-subject
-Go to the next summary line of an unread article
-(@code{gnus-summary-next-unread-subject}).
-
-@item G M-p
-@itemx M-p
-@kindex M-p (Summary)
-@kindex G M-p (Summary)
-@findex gnus-summary-prev-unread-subject
-Go to the previous summary line of an unread article
-(@code{gnus-summary-prev-unread-subject}).
-
-@item G j
-@itemx j
-@kindex j (Summary)
-@kindex G j (Summary)
-@findex gnus-summary-goto-article
-Ask for an article number or @code{Message-ID}, and then go to that
-article (@code{gnus-summary-goto-article}).
-
-@item G g
-@kindex G g (Summary)
-@findex gnus-summary-goto-subject
-Ask for an article number and then go to the summary line of that article
-without displaying the article (@code{gnus-summary-goto-subject}).
-@end table
-
-If Gnus asks you to press a key to confirm going to the next group, you
-can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
-buffer, searching for the next group to read without actually returning
-to the group buffer.
-
-Variables related to summary movement:
-
-@table @code
-
-@vindex gnus-auto-select-next
-@item gnus-auto-select-next
-If you issue one of the movement commands (like @kbd{n}) and there are
-no more unread articles after the current one, Gnus will offer to go to
-the next group.  If this variable is @code{t} and the next group is
-empty, Gnus will exit summary mode and return to the group buffer.  If
-this variable is neither @code{t} nor @code{nil}, Gnus will select the
-next group, no matter whether it has any unread articles or not.  As a
-special case, if this variable is @code{quietly}, Gnus will select the
-next group without asking for confirmation.  If this variable is
-@code{almost-quietly}, the same will happen only if you are located on
-the last article in the group.  Finally, if this variable is
-@code{slightly-quietly}, the @kbd{Z n} command will go to the next group
-without confirmation.  Also @pxref{Group Levels}.
-
-@item gnus-auto-select-same
-@vindex gnus-auto-select-same
-If non-@code{nil}, all the movement commands will try to go to the next
-article with the same subject as the current.  (@dfn{Same} here might
-mean @dfn{roughly equal}.  See @code{gnus-summary-gather-subject-limit}
-for details (@pxref{Customizing Threading}).)  If there are no more
-articles with the same subject, go to the first unread article.
-
-This variable is not particularly useful if you use a threaded display.
-
-@item gnus-summary-check-current
-@vindex gnus-summary-check-current
-If non-@code{nil}, all the ``unread'' movement commands will not proceed
-to the next (or previous) article if the current article is unread.
-Instead, they will choose the current article.
-
-@item gnus-auto-center-summary
-@vindex gnus-auto-center-summary
-If non-@code{nil}, Gnus will keep the point in the summary buffer
-centered at all times.  This makes things quite tidy, but if you have a
-slow network connection, or simply do not like this un-Emacsism, you can
-set this variable to @code{nil} to get the normal Emacs scrolling
-action.  This will also inhibit horizontal re-centering of the summary
-buffer, which might make it more inconvenient to read extremely long
-threads.
-
-This variable can also be a number.  In that case, center the window at
-the given number of lines from the top.
-
-@end table
-
-
-@node Choosing Articles
-@section Choosing Articles
-@cindex selecting articles
-
-@menu
-* Choosing Commands::        Commands for choosing articles.
-* Choosing Variables::       Variables that influence these commands.
-@end menu
-
-
-@node Choosing Commands
-@subsection Choosing Commands
-
-None of the following movement commands understand the numeric prefix,
-and they all select and display an article.
-
-@table @kbd
-@item SPACE
-@kindex SPACE (Summary)
-@findex gnus-summary-next-page
-Select the current article, or, if that one's read already, the next
-unread article (@code{gnus-summary-next-page}).
-
-@item G n
-@itemx n
-@kindex n (Summary)
-@kindex G n (Summary)
-@findex gnus-summary-next-unread-article
-@c @icon{gnus-summary-next-unread}
-Go to next unread article (@code{gnus-summary-next-unread-article}).
-
-@item G p
-@itemx p
-@kindex p (Summary)
-@findex gnus-summary-prev-unread-article
-@c @icon{gnus-summary-prev-unread}
-Go to previous unread article (@code{gnus-summary-prev-unread-article}).
-
-@item G N
-@itemx N
-@kindex N (Summary)
-@kindex G N (Summary)
-@findex gnus-summary-next-article
-Go to the next article (@code{gnus-summary-next-article}).
-
-@item G P
-@itemx P
-@kindex P (Summary)
-@kindex G P (Summary)
-@findex gnus-summary-prev-article
-Go to the previous article (@code{gnus-summary-prev-article}).
-
-@item G C-n
-@kindex G C-n (Summary)
-@findex gnus-summary-next-same-subject
-Go to the next article with the same subject
-(@code{gnus-summary-next-same-subject}).
-
-@item G C-p
-@kindex G C-p (Summary)
-@findex gnus-summary-prev-same-subject
-Go to the previous article with the same subject
-(@code{gnus-summary-prev-same-subject}).
-
-@item G f
-@itemx .
-@kindex G f  (Summary)
-@kindex .  (Summary)
-@findex gnus-summary-first-unread-article
-Go to the first unread article
-(@code{gnus-summary-first-unread-article}).
-
-@item G b
-@itemx ,
-@kindex G b (Summary)
-@kindex , (Summary)
-@findex gnus-summary-best-unread-article
-Go to the article with the highest score
-(@code{gnus-summary-best-unread-article}).
-
-@item G l
-@itemx l
-@kindex l (Summary)
-@kindex G l (Summary)
-@findex gnus-summary-goto-last-article
-Go to the previous article read (@code{gnus-summary-goto-last-article}).
-
-@item G o
-@kindex G o (Summary)
-@findex gnus-summary-pop-article
-@cindex history
-@cindex article history
-Pop an article off the summary history and go to this article
-(@code{gnus-summary-pop-article}).  This command differs from the
-command above in that you can pop as many previous articles off the
-history as you like, while @kbd{l} toggles the two last read articles.
-For a somewhat related issue (if you use these commands a lot),
-@pxref{Article Backlog}.
-@end table
-
-
-@node Choosing Variables
-@subsection Choosing Variables
-
-Some variables relevant for moving and selecting articles:
-
-@table @code
-@item gnus-auto-extend-newsgroup
-@vindex gnus-auto-extend-newsgroup
-All the movement commands will try to go to the previous (or next)
-article, even if that article isn't displayed in the Summary buffer if
-this variable is non-@code{nil}.  Gnus will then fetch the article from
-the server and display it in the article buffer.
-
-@item gnus-select-article-hook
-@vindex gnus-select-article-hook
-This hook is called whenever an article is selected.  By default it
-exposes any threads hidden under the selected article.
-
-@item gnus-mark-article-hook
-@vindex gnus-mark-article-hook
-@findex gnus-summary-mark-unread-as-read
-@findex gnus-summary-mark-read-and-unread-as-read
-@findex gnus-unread-mark
-This hook is called whenever an article is selected.  It is intended to
-be used for marking articles as read.  The default value is
-@code{gnus-summary-mark-read-and-unread-as-read}, and will change the
-mark of almost any article you read to @code{gnus-unread-mark}.  The
-only articles not affected by this function are ticked, dormant, and
-expirable articles.  If you'd instead like to just have unread articles
-marked as read, you can use @code{gnus-summary-mark-unread-as-read}
-instead.  It will leave marks like @code{gnus-low-score-mark},
-@code{gnus-del-mark} (and so on) alone.
-
-@end table
-
-
-@node Paging the Article
-@section Scrolling the Article
-@cindex article scrolling
-
-@table @kbd
-
-@item SPACE
-@kindex SPACE (Summary)
-@findex gnus-summary-next-page
-Pressing @kbd{SPACE} will scroll the current article forward one page,
-or, if you have come to the end of the current article, will choose the
-next article (@code{gnus-summary-next-page}).
-
-@item DEL
-@kindex DEL (Summary)
-@findex gnus-summary-prev-page
-Scroll the current article back one page (@code{gnus-summary-prev-page}).
-
-@item RET
-@kindex RET (Summary)
-@findex gnus-summary-scroll-up
-Scroll the current article one line forward
-(@code{gnus-summary-scroll-up}).
-
-@item M-RET
-@kindex M-RET (Summary)
-@findex gnus-summary-scroll-down
-Scroll the current article one line backward
-(@code{gnus-summary-scroll-down}).
-
-@item A g
-@itemx g
-@kindex A g (Summary)
-@kindex g (Summary)
-@findex gnus-summary-show-article
-(Re)fetch the current article (@code{gnus-summary-show-article}).  If
-given a prefix, fetch the current article, but don't run any of the
-article treatment functions.  This will give you a ``raw'' article, just
-the way it came from the server.
-
-@item A <
-@itemx <
-@kindex < (Summary)
-@kindex A < (Summary)
-@findex gnus-summary-beginning-of-article
-Scroll to the beginning of the article
-(@code{gnus-summary-beginning-of-article}).
-
-@item A >
-@itemx >
-@kindex > (Summary)
-@kindex A > (Summary)
-@findex gnus-summary-end-of-article
-Scroll to the end of the article (@code{gnus-summary-end-of-article}).
-
-@item A s
-@itemx s
-@kindex A s (Summary)
-@kindex s (Summary)
-@findex gnus-summary-isearch-article
-Perform an isearch in the article buffer
-(@code{gnus-summary-isearch-article}).
-
-@item h
-@kindex h (Summary)
-@findex gnus-summary-select-article-buffer
-Select the article buffer (@code{gnus-summary-select-article-buffer}).
-
-@end table
-
-
-@node Reply Followup and Post
-@section Reply, Followup and Post
-
-@menu
-* Summary Mail Commands::            Sending mail.
-* Summary Post Commands::            Sending news.
-@end menu
-
-
-@node Summary Mail Commands
-@subsection Summary Mail Commands
-@cindex mail
-@cindex composing mail
-
-Commands for composing a mail message:
-
-@table @kbd
-
-@item S r
-@itemx r
-@kindex S r (Summary)
-@kindex r (Summary)
-@findex gnus-summary-reply
-@c @icon{gnus-summary-mail-reply}
-@c @icon{gnus-summary-reply}
-Mail a reply to the author of the current article
-(@code{gnus-summary-reply}).
-
-@item S R
-@itemx R
-@kindex R (Summary)
-@kindex S R (Summary)
-@findex gnus-summary-reply-with-original
-@c @icon{gnus-summary-reply-with-original}
-Mail a reply to the author of the current article and include the
-original message (@code{gnus-summary-reply-with-original}).  This
-command uses the process/prefix convention.
-
-@item S w
-@kindex S w (Summary)
-@findex gnus-summary-wide-reply
-Mail a wide reply to the author of the current article
-(@code{gnus-summary-wide-reply}).  A @dfn{wide reply} is a reply that
-goes out to all people listed in the @code{To}, @code{From} (or
-@code{Reply-to}) and @code{Cc} headers.
-
-@item S W
-@kindex S W (Summary)
-@findex gnus-summary-wide-reply-with-original
-Mail a wide reply to the current article and include the original
-message (@code{gnus-summary-wide-reply-with-original}).  This command uses
-the process/prefix convention.
-
-@item S o m
-@kindex S o m (Summary)
-@findex gnus-summary-mail-forward
-@c @icon{gnus-summary-mail-forward}
-Forward the current article to some other person
-(@code{gnus-summary-mail-forward}).  If given a prefix, include the full
-headers of the forwarded article.
-
-@item S m
-@itemx m
-@kindex m (Summary)
-@kindex S m (Summary)
-@findex gnus-summary-mail-other-window
-@c @icon{gnus-summary-mail-originate}
-Send a mail to some other person
-(@code{gnus-summary-mail-other-window}).
-
-@item S D b
-@kindex S D b (Summary)
-@findex gnus-summary-resend-bounced-mail
-@cindex bouncing mail
-If you have sent a mail, but the mail was bounced back to you for some
-reason (wrong address, transient failure), you can use this command to
-resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
-will be popped into a mail buffer where you can edit the headers before
-sending the mail off again.  If you give a prefix to this command, and
-the bounced mail is a reply to some other mail, Gnus will try to fetch
-that mail and display it for easy perusal of its headers.  This might
-very well fail, though.
-
-@item S D r
-@kindex S D r (Summary)
-@findex gnus-summary-resend-message
-Not to be confused with the previous command,
-@code{gnus-summary-resend-message} will prompt you for an address to
-send the current message off to, and then send it to that place.  The
-headers of the message won't be altered---but lots of headers that say
-@code{Resent-To}, @code{Resent-From} and so on will be added.  This
-means that you actually send a mail to someone that has a @code{To}
-header that (probably) points to yourself.  This will confuse people.
-So, natcherly you'll only do that if you're really eVIl.
-
-This command is mainly used if you have several accounts and want to
-ship a mail to a different account of yours.  (If you're both
-@code{root} and @code{postmaster} and get a mail for @code{postmaster}
-to the @code{root} account, you may want to resend it to
-@code{postmaster}.  Ordnung muß sein!
-
-This command understands the process/prefix convention
-(@pxref{Process/Prefix}).
-
-@item S O m
-@kindex S O m (Summary)
-@findex gnus-uu-digest-mail-forward
-Digest the current series (@pxref{Decoding Articles}) and forward the
-result using mail (@code{gnus-uu-digest-mail-forward}).  This command
-uses the process/prefix convention (@pxref{Process/Prefix}).
-
-@item S M-c
-@kindex S M-c (Summary)
-@findex gnus-summary-mail-crosspost-complaint
-@cindex crossposting
-@cindex excessive crossposting
-Send a complaint about excessive crossposting to the author of the
-current article (@code{gnus-summary-mail-crosspost-complaint}).
-
-@findex gnus-crosspost-complaint
-This command is provided as a way to fight back against the current
-crossposting pandemic that's sweeping Usenet.  It will compose a reply
-using the @code{gnus-crosspost-complaint} variable as a preamble.  This
-command understands the process/prefix convention
-(@pxref{Process/Prefix}) and will prompt you before sending each mail.
-
-@end table
-
-Also @pxref{(message)Header Commands} for more information.
-
-
-@node Summary Post Commands
-@subsection Summary Post Commands
-@cindex post
-@cindex composing news
-
-Commands for posting a news article:
-
-@table @kbd
-@item S p
-@itemx a
-@kindex a (Summary)
-@kindex S p (Summary)
-@findex gnus-summary-post-news
-@c @icon{gnus-summary-post-news}
-Post an article to the current group
-(@code{gnus-summary-post-news}).
-
-@item S f
-@itemx f
-@kindex f (Summary)
-@kindex S f (Summary)
-@findex gnus-summary-followup
-@c @icon{gnus-summary-followup}
-Post a followup to the current article (@code{gnus-summary-followup}).
-
-@item S F
-@itemx F
-@kindex S F (Summary)
-@kindex F (Summary)
-@c @icon{gnus-summary-followup-with-original}
-@findex gnus-summary-followup-with-original
-Post a followup to the current article and include the original message
-(@code{gnus-summary-followup-with-original}).   This command uses the
-process/prefix convention.
-
-@item S n
-@kindex S n (Summary)
-@findex gnus-summary-followup-to-mail
-Post a followup to the current article via news, even if you got the
-message through mail (@code{gnus-summary-followup-to-mail}).
-
-@item S N
-@kindex S N (Summary)
-@findex gnus-summary-followup-to-mail-with-original
-Post a followup to the current article via news, even if you got the
-message through mail and include the original message
-(@code{gnus-summary-followup-to-mail-with-original}).  This command uses
-the process/prefix convention.
-
-@item S o p
-@kindex S o p (Summary)
-@findex gnus-summary-post-forward
-Forward the current article to a newsgroup
-(@code{gnus-summary-post-forward}).  If given a prefix, include the full
-headers of the forwarded article.
-
-@item S O p
-@kindex S O p (Summary)
-@findex gnus-uu-digest-post-forward
-@cindex digests
-@cindex making digests
-Digest the current series and forward the result to a newsgroup
-(@code{gnus-uu-digest-mail-forward}).  This command uses the
-process/prefix convention.
-
-@item S u
-@kindex S u (Summary)
-@findex gnus-uu-post-news
-@c @icon{gnus-uu-post-news}
-Uuencode a file, split it into parts, and post it as a series
-(@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
-@end table
-
-Also @pxref{(message)Header Commands} for more information.
-
-
-@node Canceling and Superseding
-@section Canceling Articles
-@cindex canceling articles
-@cindex superseding articles
-
-Have you ever written something, and then decided that you really,
-really, really wish you hadn't posted that?
-
-Well, you can't cancel mail, but you can cancel posts.
-
-@findex gnus-summary-cancel-article
-@kindex C (Summary)
-@c @icon{gnus-summary-cancel-article}
-Find the article you wish to cancel (you can only cancel your own
-articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
-c} (@code{gnus-summary-cancel-article}).  Your article will be
-canceled---machines all over the world will be deleting your article.
-This command uses the process/prefix convention (@pxref{Process/Prefix}).
-
-Be aware, however, that not all sites honor cancels, so your article may
-live on here and there, while most sites will delete the article in
-question.
-
-Gnus will use the ``current'' select method when canceling.  If you
-want to use the standard posting method, use the @samp{a} symbolic
-prefix (@pxref{Symbolic Prefixes}).
-
-If you discover that you have made some mistakes and want to do some
-corrections, you can post a @dfn{superseding} article that will replace
-your original article.
-
-@findex gnus-summary-supersede-article
-@kindex S (Summary)
-Go to the original article and press @kbd{S s}
-(@code{gnus-summary-supersede-article}).  You will be put in a buffer
-where you can edit the article all you want before sending it off the
-usual way.
-
-The same goes for superseding as for canceling, only more so: Some
-sites do not honor superseding.  On those sites, it will appear that you
-have posted almost the same article twice.
-
-If you have just posted the article, and change your mind right away,
-there is a trick you can use to cancel/supersede the article without
-waiting for the article to appear on your site first.  You simply return
-to the post buffer (which is called @code{*sent ...*}).  There you will
-find the article you just posted, with all the headers intact.  Change
-the @code{Message-ID} header to a @code{Cancel} or @code{Supersedes}
-header by substituting one of those words for the word
-@code{Message-ID}.  Then just press @kbd{C-c C-c} to send the article as
-you would do normally.  The previous article will be
-canceled/superseded.
-
-Just remember, kids: There is no 'c' in 'supersede'.
-
-
-@node Marking Articles
-@section Marking Articles
-@cindex article marking
-@cindex article ticking
-@cindex marks
-
-There are several marks you can set on an article.
-
-You have marks that decide the @dfn{readedness} (whoo, neato-keano
-neologism ohoy!) of the article.  Alphabetic marks generally mean
-@dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
-
-In addition, you also have marks that do not affect readedness.
-
-@menu
-* Unread Articles::      Marks for unread articles.
-* Read Articles::        Marks for read articles.
-* Other Marks::          Marks that do not affect readedness.
-@end menu
-
-@ifinfo
-There's a plethora of commands for manipulating these marks:
-@end ifinfo
-
-@menu
-* Setting Marks::             How to set and remove marks.
-* Generic Marking Commands::  How to customize the marking.
-* Setting Process Marks::     How to mark articles for later processing.
-@end menu
-
-
-@node Unread Articles
-@subsection Unread Articles
-
-The following marks mark articles as (kinda) unread, in one form or
-other.
-
-@table @samp
-@item !
-@vindex gnus-ticked-mark
-Marked as ticked (@code{gnus-ticked-mark}).
-
-@dfn{Ticked articles} are articles that will remain visible always.  If
-you see an article that you find interesting, or you want to put off
-reading it, or replying to it, until sometime later, you'd typically
-tick it.  However, articles can be expired, so if you want to keep an
-article forever, you'll have to make it persistent (@pxref{Persistent
-Articles}).
-
-@item ?
-@vindex gnus-dormant-mark
-Marked as dormant (@code{gnus-dormant-mark}).
-
-@dfn{Dormant articles} will only appear in the summary buffer if there
-are followups to it.  If you want to see them even if they don't have
-followups, you can use the @kbd{/ D} command (@pxref{Limiting}).
-
-@item SPACE
-@vindex gnus-unread-mark
-Marked as unread (@code{gnus-unread-mark}).
-
-@dfn{Unread articles} are articles that haven't been read at all yet.
-@end table
-
-
-@node Read Articles
-@subsection Read Articles
-@cindex expirable mark
-
-All the following marks mark articles as read.
-
-@table @samp
-
-@item r
-@vindex gnus-del-mark
-These are articles that the user has marked as read with the @kbd{d}
-command manually, more or less (@code{gnus-del-mark}).
-
-@item R
-@vindex gnus-read-mark
-Articles that have actually been read (@code{gnus-read-mark}).
-
-@item O
-@vindex gnus-ancient-mark
-Articles that were marked as read in previous sessions and are now
-@dfn{old} (@code{gnus-ancient-mark}).
-
-@item K
-@vindex gnus-killed-mark
-Marked as killed (@code{gnus-killed-mark}).
-
-@item X
-@vindex gnus-kill-file-mark
-Marked as killed by kill files (@code{gnus-kill-file-mark}).
-
-@item Y
-@vindex gnus-low-score-mark
-Marked as read by having too low a score (@code{gnus-low-score-mark}).
-
-@item C
-@vindex gnus-catchup-mark
-Marked as read by a catchup (@code{gnus-catchup-mark}).
-
-@item G
-@vindex gnus-canceled-mark
-Canceled article (@code{gnus-canceled-mark})
-
-@item F
-@vindex gnus-souped-mark
-@sc{soup}ed article (@code{gnus-souped-mark}).  @xref{SOUP}.
-
-@item Q
-@vindex gnus-sparse-mark
-Sparsely reffed article (@code{gnus-sparse-mark}).  @xref{Customizing
-Threading}.
-
-@item M
-@vindex gnus-duplicate-mark
-Article marked as read by duplicate suppression
-(@code{gnus-duplicated-mark}).  @xref{Duplicate Suppression}.
-
-@end table
-
-All these marks just mean that the article is marked as read, really.
-They are interpreted differently when doing adaptive scoring, though.
-
-One more special mark, though:
-
-@table @samp
-@item E
-@vindex gnus-expirable-mark
-Marked as expirable (@code{gnus-expirable-mark}).
-
-Marking articles as @dfn{expirable} (or have them marked as such
-automatically) doesn't make much sense in normal groups---a user doesn't
-control expiring of news articles, but in mail groups, for instance,
-articles marked as @dfn{expirable} can be deleted by Gnus at
-any time.
-@end table
-
-
-@node Other Marks
-@subsection Other Marks
-@cindex process mark
-@cindex bookmarks
-
-There are some marks that have nothing to do with whether the article is
-read or not.
-
-@itemize @bullet
-
-@item
-You can set a bookmark in the current article.  Say you are reading a
-long thesis on cats' urinary tracts, and have to go home for dinner
-before you've finished reading the thesis.  You can then set a bookmark
-in the article, and Gnus will jump to this bookmark the next time it
-encounters the article.  @xref{Setting Marks}.
-
-@item
-@vindex gnus-replied-mark
-All articles that you have replied to or made a followup to (i.e., have
-answered) will be marked with an @samp{A} in the second column
-(@code{gnus-replied-mark}).
-
-@item
-@vindex gnus-cached-mark
-Articles stored in the article cache will be marked with an @samp{*} in
-the second column (@code{gnus-cached-mark}).  @xref{Article Caching}.
-
-@item
-@vindex gnus-saved-mark
-Articles ``saved'' (in some manner or other; not necessarily
-religiously) are marked with an @samp{S} in the second column
-(@code{gnus-saved-mark}).
-
-@item
-@vindex gnus-not-empty-thread-mark
-@vindex gnus-empty-thread-mark
-If the @samp{%e} spec is used, the presence of threads or not will be
-marked with @code{gnus-not-empty-thread-mark} and
-@code{gnus-empty-thread-mark} in the third column, respectively.
-
-@item
-@vindex gnus-process-mark
-Finally we have the @dfn{process mark} (@code{gnus-process-mark}).  A
-variety of commands react to the presence of the process mark.  For
-instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
-all articles that have been marked with the process mark.  Articles
-marked with the process mark have a @samp{#} in the second column.
-
-@end itemize
-
-You might have noticed that most of these ``non-readedness'' marks
-appear in the second column by default.  So if you have a cached, saved,
-replied article that you have process-marked, what will that look like?
-
-Nothing much.  The precedence rules go as follows: process -> cache ->
-replied -> saved.  So if the article is in the cache and is replied,
-you'll only see the cache mark and not the replied mark.
-
-
-@node Setting Marks
-@subsection Setting Marks
-@cindex setting marks
-
-All the marking commands understand the numeric prefix.
-
-@table @kbd
-@item M c
-@itemx M-u
-@kindex M c (Summary)
-@kindex M-u (Summary)
-@findex gnus-summary-clear-mark-forward
-@cindex mark as unread
-Clear all readedness-marks from the current article
-(@code{gnus-summary-clear-mark-forward}).  In other words, mark the
-article as unread.
-
-@item M t
-@itemx !
-@kindex ! (Summary)
-@kindex M t (Summary)
-@findex gnus-summary-tick-article-forward
-Tick the current article (@code{gnus-summary-tick-article-forward}).
-@xref{Article Caching}.
-
-@item M ?
-@itemx ?
-@kindex ? (Summary)
-@kindex M ? (Summary)
-@findex gnus-summary-mark-as-dormant
-Mark the current article as dormant
-(@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching}.
-
-@item M d
-@itemx d
-@kindex M d (Summary)
-@kindex d (Summary)
-@findex gnus-summary-mark-as-read-forward
-Mark the current article as read
-(@code{gnus-summary-mark-as-read-forward}).
-
-@item D
-@kindex D (Summary)
-@findex gnus-summary-mark-as-read-backward
-Mark the current article as read and move point to the previous line
-(@code{gnus-summary-mark-as-read-backward}).
-
-@item M k
-@itemx k
-@kindex k (Summary)
-@kindex M k (Summary)
-@findex gnus-summary-kill-same-subject-and-select
-Mark all articles that have the same subject as the current one as read,
-and then select the next unread article
-(@code{gnus-summary-kill-same-subject-and-select}).
-
-@item M K
-@itemx C-k
-@kindex M K (Summary)
-@kindex C-k (Summary)
-@findex gnus-summary-kill-same-subject
-Mark all articles that have the same subject as the current one as read
-(@code{gnus-summary-kill-same-subject}).
-
-@item M C
-@kindex M C (Summary)
-@findex gnus-summary-catchup
-@c @icon{gnus-summary-catchup}
-Mark all unread articles as read (@code{gnus-summary-catchup}).
-
-@item M C-c
-@kindex M C-c (Summary)
-@findex gnus-summary-catchup-all
-Mark all articles in the group as read---even the ticked and dormant
-articles (@code{gnus-summary-catchup-all}).
-
-@item M H
-@kindex M H (Summary)
-@findex gnus-summary-catchup-to-here
-Catchup the current group to point
-(@code{gnus-summary-catchup-to-here}).
-
-@item C-w
-@kindex C-w (Summary)
-@findex gnus-summary-mark-region-as-read
-Mark all articles between point and mark as read
-(@code{gnus-summary-mark-region-as-read}).
-
-@item M V k
-@kindex M V k (Summary)
-@findex gnus-summary-kill-below
-Kill all articles with scores below the default score (or below the
-numeric prefix) (@code{gnus-summary-kill-below}).
-
-@item M e
-@itemx E
-@kindex M e (Summary)
-@kindex E (Summary)
-@findex gnus-summary-mark-as-expirable
-Mark the current article as expirable
-(@code{gnus-summary-mark-as-expirable}).
-
-@item M b
-@kindex M b (Summary)
-@findex gnus-summary-set-bookmark
-Set a bookmark in the current article
-(@code{gnus-summary-set-bookmark}).
-
-@item M B
-@kindex M B (Summary)
-@findex gnus-summary-remove-bookmark
-Remove the bookmark from the current article
-(@code{gnus-summary-remove-bookmark}).
-
-@item M V c
-@kindex M V c (Summary)
-@findex gnus-summary-clear-above
-Clear all marks from articles with scores over the default score (or
-over the numeric prefix) (@code{gnus-summary-clear-above}).
-
-@item M V u
-@kindex M V u (Summary)
-@findex gnus-summary-tick-above
-Tick all articles with scores over the default score (or over the
-numeric prefix) (@code{gnus-summary-tick-above}).
-
-@item M V m
-@kindex M V m (Summary)
-@findex gnus-summary-mark-above
-Prompt for a mark, and mark all articles with scores over the default
-score (or over the numeric prefix) with this mark
-(@code{gnus-summary-clear-above}).
-@end table
-
-@vindex gnus-summary-goto-unread
-The @code{gnus-summary-goto-unread} variable controls what action should
-be taken after setting a mark.  If non-@code{nil}, point will move to
-the next/previous unread article.  If @code{nil}, point will just move
-one line up or down.  As a special case, if this variable is
-@code{never}, all the marking commands as well as other commands (like
-@kbd{SPACE}) will move to the next article, whether it is unread or not.
-The default is @code{t}.
-
-
-@node Generic Marking Commands
-@subsection Generic Marking Commands
-
-Some people would like the command that ticks an article (@kbd{!}) go to
-the next article.  Others would like it to go to the next unread
-article.  Yet others would like it to stay on the current article.  And
-even though I haven't heard of anybody wanting it to go to the
-previous (unread) article, I'm sure there are people that want that as
-well.
-
-Multiply these five behaviours with five different marking commands, and
-you get a potentially complex set of variable to control what each
-command should do.
-
-To sidestep that mess, Gnus provides commands that do all these
-different things.  They can be found on the @kbd{M M} map in the summary
-buffer.  Type @kbd{M M C-h} to see them all---there are too many of them
-to list in this manual.
-
-While you can use these commands directly, most users would prefer
-altering the summary mode keymap.  For instance, if you would like the
-@kbd{!} command to go to the next article instead of the next unread
-article, you could say something like:
-
-@lisp
-(add-hook 'gnus-summary-mode-hook 'my-alter-summary-map)
-(defun my-alter-summary-map ()
-  (local-set-key "!" 'gnus-summary-put-mark-as-ticked-next))
-@end lisp
-
-or
-
-@lisp
-(defun my-alter-summary-map ()
-  (local-set-key "!" "MM!n"))
-@end lisp
-
-
-@node Setting Process Marks
-@subsection Setting Process Marks
-@cindex setting process marks
-
-@table @kbd
-
-@item M P p
-@itemx #
-@kindex # (Summary)
-@kindex M P p (Summary)
-@findex gnus-summary-mark-as-processable
-Mark the current article with the process mark
-(@code{gnus-summary-mark-as-processable}).
-@findex gnus-summary-unmark-as-processable
-
-@item M P u
-@itemx M-#
-@kindex M P u (Summary)
-@kindex M-# (Summary)
-Remove the process mark, if any, from the current article
-(@code{gnus-summary-unmark-as-processable}).
-
-@item M P U
-@kindex M P U (Summary)
-@findex gnus-summary-unmark-all-processable
-Remove the process mark from all articles
-(@code{gnus-summary-unmark-all-processable}).
-
-@item M P i
-@kindex M P i (Summary)
-@findex gnus-uu-invert-processable
-Invert the list of process marked articles
-(@code{gnus-uu-invert-processable}).
-
-@item M P R
-@kindex M P R (Summary)
-@findex gnus-uu-mark-by-regexp
-Mark articles that have a @code{Subject} header that matches a regular
-expression (@code{gnus-uu-mark-by-regexp}).
-
-@item M P r
-@kindex M P r (Summary)
-@findex gnus-uu-mark-region
-Mark articles in region (@code{gnus-uu-mark-region}).
-
-@item M P t
-@kindex M P t (Summary)
-@findex gnus-uu-mark-thread
-Mark all articles in the current (sub)thread
-(@code{gnus-uu-mark-thread}).
-
-@item M P T
-@kindex M P T (Summary)
-@findex gnus-uu-unmark-thread
-Unmark all articles in the current (sub)thread
-(@code{gnus-uu-unmark-thread}).
-
-@item M P v
-@kindex M P v (Summary)
-@findex gnus-uu-mark-over
-Mark all articles that have a score above the prefix argument
-(@code{gnus-uu-mark-over}).
-
-@item M P s
-@kindex M P s (Summary)
-@findex gnus-uu-mark-series
-Mark all articles in the current series (@code{gnus-uu-mark-series}).
-
-@item M P S
-@kindex M P S (Summary)
-@findex gnus-uu-mark-sparse
-Mark all series that have already had some articles marked
-(@code{gnus-uu-mark-sparse}).
-
-@item M P a
-@kindex M P a (Summary)
-@findex gnus-uu-mark-all
-Mark all articles in series order (@code{gnus-uu-mark-series}).
-
-@item M P b
-@kindex M P b (Summary)
-@findex gnus-uu-mark-buffer
-Mark all articles in the buffer in the order they appear
-(@code{gnus-uu-mark-buffer}).
-
-@item M P k
-@kindex M P k (Summary)
-@findex gnus-summary-kill-process-mark
-Push the current process mark set onto the stack and unmark all articles
-(@code{gnus-summary-kill-process-mark}).
-
-@item M P y
-@kindex M P y (Summary)
-@findex gnus-summary-yank-process-mark
-Pop the previous process mark set from the stack and restore it
-(@code{gnus-summary-yank-process-mark}).
-
-@item M P w
-@kindex M P w (Summary)
-@findex gnus-summary-save-process-mark
-Push the current process mark set onto the stack
-(@code{gnus-summary-save-process-mark}).
-
-@end table
-
-
-@node Limiting
-@section Limiting
-@cindex limiting
-
-It can be convenient to limit the summary buffer to just show some
-subset of the articles currently in the group.  The effect most limit
-commands have is to remove a few (or many) articles from the summary
-buffer.
-
-All limiting commands work on subsets of the articles already fetched
-from the servers.  None of these commands query the server for
-additional articles.
-
-@table @kbd
-
-@item / /
-@itemx / s
-@kindex / / (Summary)
-@findex gnus-summary-limit-to-subject
-Limit the summary buffer to articles that match some subject
-(@code{gnus-summary-limit-to-subject}).
-
-@item / a
-@kindex / a (Summary)
-@findex gnus-summary-limit-to-author
-Limit the summary buffer to articles that match some author
-(@code{gnus-summary-limit-to-author}).
-
-@item / x
-@kindex / x (Summary)
-@findex gnus-summary-limit-to-extra
-Limit the summary buffer to articles that match one of the ``extra''
-headers (@pxref{To From Newsgroups})
-(@code{gnus-summary-limit-to-author}).
-
-@item / u
-@itemx x
-@kindex / u (Summary)
-@kindex x (Summary)
-@findex gnus-summary-limit-to-unread
-Limit the summary buffer to articles not marked as read
-(@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
-buffer to articles strictly unread.  This means that ticked and
-dormant articles will also be excluded.
-
-@item / m
-@kindex / m (Summary)
-@findex gnus-summary-limit-to-marks
-Ask for a mark and then limit to all articles that have been marked
-with that mark (@code{gnus-summary-limit-to-marks}).
-
-@item / t
-@kindex / t (Summary)
-@findex gnus-summary-limit-to-age
-Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days
-(@code{gnus-summary-limit-to-marks}).  If given a prefix, limit to
-articles younger than that number of days.
-
-@item / n
-@kindex / n (Summary)
-@findex gnus-summary-limit-to-articles
-Limit the summary buffer to the current article
-(@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
-convention (@pxref{Process/Prefix}).
-
-@item / w
-@kindex / w (Summary)
-@findex gnus-summary-pop-limit
-Pop the previous limit off the stack and restore it
-(@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
-the stack.
-
-@item / v
-@kindex / v (Summary)
-@findex gnus-summary-limit-to-score
-Limit the summary buffer to articles that have a score at or above some
-score (@code{gnus-summary-limit-to-score}).
-
-@item / E
-@itemx M S
-@kindex M S (Summary)
-@kindex / E (Summary)
-@findex gnus-summary-limit-include-expunged
-Include all expunged articles in the limit
-(@code{gnus-summary-limit-include-expunged}).
-
-@item / D
-@kindex / D (Summary)
-@findex gnus-summary-limit-include-dormant
-Include all dormant articles in the limit
-(@code{gnus-summary-limit-include-dormant}).
-
-@item / *
-@kindex / * (Summary)
-@findex gnus-summary-limit-include-cached
-Include all cached articles in the limit
-(@code{gnus-summary-limit-include-cached}).
-
-@item / d
-@kindex / d (Summary)
-@findex gnus-summary-limit-exclude-dormant
-Exclude all dormant articles from the limit
-(@code{gnus-summary-limit-exclude-dormant}).
-
-@item / M
-@kindex / M (Summary)
-@findex gnus-summary-limit-exclude-marks
-Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}).
-
-@item / T
-@kindex / T (Summary)
-@findex gnus-summary-limit-include-thread
-Include all the articles in the current thread in the limit.
-
-@item / c
-@kindex / c (Summary)
-@findex gnus-summary-limit-exclude-childless-dormant
-Exclude all dormant articles that have no children from the limit
-(@code{gnus-summary-limit-exclude-childless-dormant}).
-
-@item / C
-@kindex / C (Summary)
-@findex gnus-summary-limit-mark-excluded-as-read
-Mark all excluded unread articles as read
-(@code{gnus-summary-limit-mark-excluded-as-read}).   If given a prefix,
-also mark excluded ticked and dormant articles as read.
-
-@end table
-
-
-@node Threading
-@section Threading
-@cindex threading
-@cindex article threading
-
-Gnus threads articles by default.  @dfn{To thread} is to put responses
-to articles directly after the articles they respond to---in a
-hierarchical fashion.
-
-Threading is done by looking at the @code{References} headers of the
-articles.  In a perfect world, this would be enough to build pretty
-trees, but unfortunately, the @code{References} header is often broken
-or simply missing.  Weird news propagation excarcerbates the problem,
-so one has to employ other heuristics to get pleasing results.  A
-plethora of approaches exists, as detailed in horrible detail in
-@pxref{Customizing Threading}.
-
-First, a quick overview of the concepts:
-
-@table @dfn
-@item root
-The top-most article in a thread; the first article in the thread.
-
-@item thread
-A tree-like article structure.
-
-@item sub-thread
-A small(er) section of this tree-like structure.
-
-@item loose threads
-Threads often lose their roots due to article expiry, or due to the root
-already having been read in a previous session, and not displayed in the
-summary buffer.  We then typically have many sub-threads that really
-belong to one thread, but are without connecting roots.  These are
-called loose threads.
-
-@item thread gathering
-An attempt to gather loose threads into bigger threads.
-
-@item sparse threads
-A thread where the missing articles have been ``guessed'' at, and are
-displayed as empty lines in the summary buffer.
-
-@end table
-
-
-@menu
-* Customizing Threading::     Variables you can change to affect the threading.
-* Thread Commands::           Thread based commands in the summary buffer.
-@end menu
-
-
-@node Customizing Threading
-@subsection Customizing Threading
-@cindex customizing threading
-
-@menu
-* Loose Threads::        How Gnus gathers loose threads into bigger threads.
-* Filling In Threads::   Making the threads displayed look fuller.
-* More Threading::       Even more variables for fiddling with threads.
-* Low-Level Threading::  You thought it was over... but you were wrong!
-@end menu
-
-
-@node Loose Threads
-@subsubsection Loose Threads
-@cindex <
-@cindex >
-@cindex loose threads
-
-@table @code
-@item gnus-summary-make-false-root
-@vindex gnus-summary-make-false-root
-If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
-and create a dummy root at the top.  (Wait a minute.  Root at the top?
-Yup.)  Loose subtrees occur when the real root has expired, or you've
-read or killed the root in a previous session.
-
-When there is no real root of a thread, Gnus will have to fudge
-something.  This variable says what fudging method Gnus should use.
-There are four possible values:
-
-@iftex
-@end iftex
-
-@cindex adopting articles
-
-@table @code
-
-@item adopt
-Gnus will make the first of the orphaned articles the parent.  This
-parent will adopt all the other articles.  The adopted articles will be
-marked as such by pointy brackets (@samp{<>}) instead of the standard
-square brackets (@samp{[]}).  This is the default method.
-
-@item dummy
-@vindex gnus-summary-dummy-line-format
-Gnus will create a dummy summary line that will pretend to be the
-parent.  This dummy line does not correspond to any real article, so
-selecting it will just select the first real article after the dummy
-article.  @code{gnus-summary-dummy-line-format} is used to specify the
-format of the dummy roots.  It accepts only one format spec:  @samp{S},
-which is the subject of the article.  @xref{Formatting Variables}.
-
-@item empty
-Gnus won't actually make any article the parent, but simply leave the
-subject field of all orphans except the first empty.  (Actually, it will
-use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
-Buffer Format}).)
-
-@item none
-Don't make any article parent at all.  Just gather the threads and
-display them after one another.
-
-@item nil
-Don't gather loose threads.
-@end table
-
-@item gnus-summary-gather-subject-limit
-@vindex gnus-summary-gather-subject-limit
-Loose threads are gathered by comparing subjects of articles.  If this
-variable is @code{nil}, Gnus requires an exact match between the
-subjects of the loose threads before gathering them into one big
-super-thread.  This might be too strict a requirement, what with the
-presence of stupid newsreaders that chop off long subject lines.  If
-you think so, set this variable to, say, 20 to require that only the
-first 20 characters of the subjects have to match.  If you set this
-variable to a really low number, you'll find that Gnus will gather
-everything in sight into one thread, which isn't very helpful.
-
-@cindex fuzzy article gathering
-If you set this variable to the special value @code{fuzzy}, Gnus will
-use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
-Matching}).
-
-@item gnus-simplify-subject-fuzzy-regexp
-@vindex gnus-simplify-subject-fuzzy-regexp
-This can either be a regular expression or list of regular expressions
-that match strings that will be removed from subjects if fuzzy subject
-simplification is used.
-
-@item gnus-simplify-ignored-prefixes
-@vindex gnus-simplify-ignored-prefixes
-If you set @code{gnus-summary-gather-subject-limit} to something as low
-as 10, you might consider setting this variable to something sensible:
-
-@c Written by Michael Ernst <mernst@cs.rice.edu>
-@lisp
-(setq gnus-simplify-ignored-prefixes
-      (concat
-       "\\`\\[?\\("
-       (mapconcat
-        'identity
-        '("looking"
-          "wanted" "followup" "summary\\( of\\)?"
-          "help" "query" "problem" "question"
-          "answer" "reference" "announce"
-          "How can I" "How to" "Comparison of"
-          ;; ...
-          )
-        "\\|")
-       "\\)\\s *\\("
-       (mapconcat 'identity
-                  '("for" "for reference" "with" "about")
-                  "\\|")
-       "\\)?\\]?:?[ \t]*"))
-@end lisp
-
-All words that match this regexp will be removed before comparing two
-subjects.
-
-@item gnus-simplify-subject-functions
-@vindex gnus-simplify-subject-functions
-If non-@code{nil}, this variable overrides
-@code{gnus-summary-gather-subject-limit}.  This variable should be a
-list of functions to apply to the @code{Subject} string iteratively to
-arrive at the simplified version of the string.
-
-Useful functions to put in this list include:
-
-@table @code
-@item gnus-simplify-subject-re
-@findex gnus-simplify-subject-re
-Strip the leading @samp{Re:}.
-
-@item gnus-simplify-subject-fuzzy
-@findex gnus-simplify-subject-fuzzy
-Simplify fuzzily.
-
-@item gnus-simplify-whitespace
-@findex gnus-simplify-whitespace
-Remove excessive whitespace.
-@end table
-
-You may also write your own functions, of course.
-
-
-@item gnus-summary-gather-exclude-subject
-@vindex gnus-summary-gather-exclude-subject
-Since loose thread gathering is done on subjects only, that might lead
-to many false hits, especially with certain common subjects like
-@samp{} and @samp{(none)}.  To make the situation slightly better,
-you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
-what subjects should be excluded from the gathering process.@*
-The default is @samp{^ *$\\|^(none)$}.
-
-@item gnus-summary-thread-gathering-function
-@vindex gnus-summary-thread-gathering-function
-Gnus gathers threads by looking at @code{Subject} headers.  This means
-that totally unrelated articles may end up in the same ``thread'', which
-is confusing.  An alternate approach is to look at all the
-@code{Message-ID}s in all the @code{References} headers to find matches.
-This will ensure that no gathered threads ever include unrelated
-articles, but it also means that people who have posted with broken
-newsreaders won't be gathered properly.  The choice is yours---plague or
-cholera:
-
-@table @code
-@item gnus-gather-threads-by-subject
-@findex gnus-gather-threads-by-subject
-This function is the default gathering function and looks at
-@code{Subject}s exclusively.
-
-@item gnus-gather-threads-by-references
-@findex gnus-gather-threads-by-references
-This function looks at @code{References} headers exclusively.
-@end table
-
-If you want to test gathering by @code{References}, you could say
-something like:
-
-@lisp
-(setq gnus-summary-thread-gathering-function
-      'gnus-gather-threads-by-references)
-@end lisp
-
-@end table
-
-
-@node Filling In Threads
-@subsubsection Filling In Threads
-
-@table @code
-@item gnus-fetch-old-headers
-@vindex gnus-fetch-old-headers
-If non-@code{nil}, Gnus will attempt to build old threads by fetching
-more old headers---headers to articles marked as read.  If you
-would like to display as few summary lines as possible, but still
-connect as many loose threads as possible, you should set this variable
-to @code{some} or a number.  If you set it to a number, no more than
-that number of extra old headers will be fetched.  In either case,
-fetching old headers only works if the backend you are using carries
-overview files---this would normally be @code{nntp}, @code{nnspool} and
-@code{nnml}.  Also remember that if the root of the thread has been
-expired by the server, there's not much Gnus can do about that.
-
-This variable can also be set to @code{invisible}.  This won't have any
-visible effects, but is useful if you use the @kbd{A T} command a lot
-(@pxref{Finding the Parent}).
-
-@item gnus-build-sparse-threads
-@vindex gnus-build-sparse-threads
-Fetching old headers can be slow.  A low-rent similar effect can be
-gotten by setting this variable to @code{some}.  Gnus will then look at
-the complete @code{References} headers of all articles and try to string
-together articles that belong in the same thread.  This will leave
-@dfn{gaps} in the threading display where Gnus guesses that an article
-is missing from the thread.  (These gaps appear like normal summary
-lines.  If you select a gap, Gnus will try to fetch the article in
-question.)  If this variable is @code{t}, Gnus will display all these
-``gaps'' without regard for whether they are useful for completing the
-thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
-off sparse leaf nodes that don't lead anywhere.  This variable is
-@code{nil} by default.
-
-@end table
-
-
-@node More Threading
-@subsubsection More Threading
-
-@table @code
-@item gnus-show-threads
-@vindex gnus-show-threads
-If this variable is @code{nil}, no threading will be done, and all of
-the rest of the variables here will have no effect.  Turning threading
-off will speed group selection up a bit, but it is sure to make reading
-slower and more awkward.
-
-@item gnus-thread-hide-subtree
-@vindex gnus-thread-hide-subtree
-If non-@code{nil}, all threads will be hidden when the summary buffer is
-generated.
-
-@item gnus-thread-expunge-below
-@vindex gnus-thread-expunge-below
-All threads that have a total score (as defined by
-@code{gnus-thread-score-function}) less than this number will be
-expunged.  This variable is @code{nil} by default, which means that no
-threads are expunged.
-
-@item gnus-thread-hide-killed
-@vindex gnus-thread-hide-killed
-if you kill a thread and this variable is non-@code{nil}, the subtree
-will be hidden.
-
-@item gnus-thread-ignore-subject
-@vindex gnus-thread-ignore-subject
-Sometimes somebody changes the subject in the middle of a thread.  If
-this variable is non-@code{nil}, the subject change is ignored.  If it
-is @code{nil}, which is the default, a change in the subject will result
-in a new thread.
-
-@item gnus-thread-indent-level
-@vindex gnus-thread-indent-level
-This is a number that says how much each sub-thread should be indented.
-The default is 4.
-
-@item gnus-sort-gathered-threads-function
-@vindex gnus-sort-gathered-threads-function
-Sometimes, particularly with mailing lists, the order in which mails
-arrive locally is not necessarily the same as the order in which they
-arrived on the mailing list. Consequently, when sorting sub-threads
-using the default @code{gnus-thread-sort-by-number}, responses can end
-up appearing before the article to which they are responding to. Setting
-this variable to an alternate value
-(e.g. @code{gnus-thread-sort-by-date}), in a group's parameters or in an
-appropriate hook (e.g. @code{gnus-summary-generate-hook}) can produce a
-more logical sub-thread ordering in such instances.
-
-@end table
-
-
-@node Low-Level Threading
-@subsubsection Low-Level Threading
-
-@table @code
-
-@item gnus-parse-headers-hook
-@vindex gnus-parse-headers-hook
-Hook run before parsing any headers.
-
-@item gnus-alter-header-function
-@vindex gnus-alter-header-function
-If non-@code{nil}, this function will be called to allow alteration of
-article header structures.  The function is called with one parameter,
-the article header vector, which it may alter in any way.  For instance,
-if you have a mail-to-news gateway which alters the @code{Message-ID}s
-in systematic ways (by adding prefixes and such), you can use this
-variable to un-scramble the @code{Message-ID}s so that they are more
-meaningful.  Here's one example:
-
-@lisp
-(setq gnus-alter-header-function 'my-alter-message-id)
-
-(defun my-alter-message-id (header)
-  (let ((id (mail-header-id header)))
-    (when (string-match
-           "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
-      (mail-header-set-id
-       (concat (match-string 1 id) "@@" (match-string 2 id))
-       header))))
-@end lisp
-
-@end table
-
-
-@node Thread Commands
-@subsection Thread Commands
-@cindex thread commands
-
-@table @kbd
-
-@item T k
-@itemx M-C-k
-@kindex T k (Summary)
-@kindex M-C-k (Summary)
-@findex gnus-summary-kill-thread
-Mark all articles in the current (sub-)thread as read
-(@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
-remove all marks instead.  If the prefix argument is negative, tick
-articles instead.
-
-@item T l
-@itemx M-C-l
-@kindex T l (Summary)
-@kindex M-C-l (Summary)
-@findex gnus-summary-lower-thread
-Lower the score of the current (sub-)thread
-(@code{gnus-summary-lower-thread}).
-
-@item T i
-@kindex T i (Summary)
-@findex gnus-summary-raise-thread
-Increase the score of the current (sub-)thread
-(@code{gnus-summary-raise-thread}).
-
-@item T #
-@kindex T # (Summary)
-@findex gnus-uu-mark-thread
-Set the process mark on the current (sub-)thread
-(@code{gnus-uu-mark-thread}).
-
-@item T M-#
-@kindex T M-# (Summary)
-@findex gnus-uu-unmark-thread
-Remove the process mark from the current (sub-)thread
-(@code{gnus-uu-unmark-thread}).
-
-@item T T
-@kindex T T (Summary)
-@findex gnus-summary-toggle-threads
-Toggle threading (@code{gnus-summary-toggle-threads}).
-
-@item T s
-@kindex T s (Summary)
-@findex gnus-summary-show-thread
-Expose the (sub-)thread hidden under the current article, if any
-(@code{gnus-summary-show-thread}).
-
-@item T h
-@kindex T h (Summary)
-@findex gnus-summary-hide-thread
-Hide the current (sub-)thread (@code{gnus-summary-hide-thread}).
-
-@item T S
-@kindex T S (Summary)
-@findex gnus-summary-show-all-threads
-Expose all hidden threads (@code{gnus-summary-show-all-threads}).
-
-@item T H
-@kindex T H (Summary)
-@findex gnus-summary-hide-all-threads
-Hide all threads (@code{gnus-summary-hide-all-threads}).
-
-@item T t
-@kindex T t (Summary)
-@findex gnus-summary-rethread-current
-Re-thread the current article's thread
-(@code{gnus-summary-rethread-current}).  This works even when the
-summary buffer is otherwise unthreaded.
-
-@item T ^
-@kindex T ^ (Summary)
-@findex gnus-summary-reparent-thread
-Make the current article the child of the marked (or previous) article
-(@code{gnus-summary-reparent-thread}).
-
-@end table
-
-The following commands are thread movement commands.  They all
-understand the numeric prefix.
-
-@table @kbd
-
-@item T n
-@kindex T n (Summary)
-@findex gnus-summary-next-thread
-Go to the next thread (@code{gnus-summary-next-thread}).
-
-@item T p
-@kindex T p (Summary)
-@findex gnus-summary-prev-thread
-Go to the previous thread (@code{gnus-summary-prev-thread}).
-
-@item T d
-@kindex T d (Summary)
-@findex gnus-summary-down-thread
-Descend the thread (@code{gnus-summary-down-thread}).
-
-@item T u
-@kindex T u (Summary)
-@findex gnus-summary-up-thread
-Ascend the thread (@code{gnus-summary-up-thread}).
-
-@item T o
-@kindex T o (Summary)
-@findex gnus-summary-top-thread
-Go to the top of the thread (@code{gnus-summary-top-thread}).
-@end table
-
-@vindex gnus-thread-operation-ignore-subject
-If you ignore subject while threading, you'll naturally end up with
-threads that have several different subjects in them.  If you then issue
-a command like `T k' (@code{gnus-summary-kill-thread}) you might not
-wish to kill the entire thread, but just those parts of the thread that
-have the same subject as the current article.  If you like this idea,
-you can fiddle with @code{gnus-thread-operation-ignore-subject}.  If it
-is non-@code{nil} (which it is by default), subjects will be ignored
-when doing thread commands.  If this variable is @code{nil}, articles in
-the same thread with different subjects will not be included in the
-operation in question.  If this variable is @code{fuzzy}, only articles
-that have subjects fuzzily equal will be included (@pxref{Fuzzy
-Matching}).
-
-
-@node Sorting
-@section Sorting
-
-@findex gnus-thread-sort-by-total-score
-@findex gnus-thread-sort-by-date
-@findex gnus-thread-sort-by-score
-@findex gnus-thread-sort-by-subject
-@findex gnus-thread-sort-by-author
-@findex gnus-thread-sort-by-number
-@vindex gnus-thread-sort-functions
-If you are using a threaded summary display, you can sort the threads by
-setting @code{gnus-thread-sort-functions}, which can be either a single
-function, a list of functions, or a list containing functions and
-@code{(not some-function)} elements.
-
-By default, sorting is done on article numbers.  Ready-made sorting
-predicate functions include @code{gnus-thread-sort-by-number},
-@code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
-@code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
-@code{gnus-thread-sort-by-total-score}.
-
-Each function takes two threads and returns non-@code{nil} if the first
-thread should be sorted before the other.  Note that sorting really is
-normally done by looking only at the roots of each thread.
-
-If you use more than one function, the primary sort key should be the
-last function in the list.  You should probably always include
-@code{gnus-thread-sort-by-number} in the list of sorting
-functions---preferably first.  This will ensure that threads that are
-equal with respect to the other sort criteria will be displayed in
-ascending article order.
-
-If you would like to sort by reverse score, then by subject, and finally
-by number, you could do something like:
-
-@lisp
-(setq gnus-thread-sort-functions
-      '(gnus-thread-sort-by-number
-        gnus-thread-sort-by-subject
-        (not gnus-thread-sort-by-total-score)))
-@end lisp
-
-The threads that have highest score will be displayed first in the
-summary buffer.  When threads have the same score, they will be sorted
-alphabetically.  The threads that have the same score and the same
-subject will be sorted by number, which is (normally) the sequence in
-which the articles arrived.
-
-If you want to sort by score and then reverse arrival order, you could
-say something like:
-
-@lisp
-(setq gnus-thread-sort-functions
-      '((lambda (t1 t2)
-          (not (gnus-thread-sort-by-number t1 t2)))
-        gnus-thread-sort-by-score))
-@end lisp
-
-@vindex gnus-thread-score-function
-The function in the @code{gnus-thread-score-function} variable (default
-@code{+}) is used for calculating the total score of a thread.  Useful
-functions might be @code{max}, @code{min}, or squared means, or whatever
-tickles your fancy.
-
-@findex gnus-article-sort-functions
-@findex gnus-article-sort-by-date
-@findex gnus-article-sort-by-score
-@findex gnus-article-sort-by-subject
-@findex gnus-article-sort-by-author
-@findex gnus-article-sort-by-number
-If you are using an unthreaded display for some strange reason or other,
-you have to fiddle with the @code{gnus-article-sort-functions} variable.
-It is very similar to the @code{gnus-thread-sort-functions}, except that
-it uses slightly different functions for article comparison.  Available
-sorting predicate functions are @code{gnus-article-sort-by-number},
-@code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject},
-@code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}.
-
-If you want to sort an unthreaded summary display by subject, you could
-say something like:
-
-@lisp
-(setq gnus-article-sort-functions
-      '(gnus-article-sort-by-number
-        gnus-article-sort-by-subject))
-@end lisp
-
-
-
-@node Asynchronous Fetching
-@section Asynchronous Article Fetching
-@cindex asynchronous article fetching
-@cindex article pre-fetch
-@cindex pre-fetch
-
-If you read your news from an @sc{nntp} server that's far away, the
-network latencies may make reading articles a chore.  You have to wait
-for a while after pressing @kbd{n} to go to the next article before the
-article appears.  Why can't Gnus just go ahead and fetch the article
-while you are reading the previous one?  Why not, indeed.
-
-First, some caveats.  There are some pitfalls to using asynchronous
-article fetching, especially the way Gnus does it.
-
-Let's say you are reading article 1, which is short, and article 2 is
-quite long, and you are not interested in reading that.  Gnus does not
-know this, so it goes ahead and fetches article 2.  You decide to read
-article 3, but since Gnus is in the process of fetching article 2, the
-connection is blocked.
-
-To avoid these situations, Gnus will open two (count 'em two)
-connections to the server.  Some people may think this isn't a very nice
-thing to do, but I don't see any real alternatives.  Setting up that
-extra connection takes some time, so Gnus startup will be slower.
-
-Gnus will fetch more articles than you will read.  This will mean that
-the link between your machine and the @sc{nntp} server will become more
-loaded than if you didn't use article pre-fetch.  The server itself will
-also become more loaded---both with the extra article requests, and the
-extra connection.
-
-Ok, so now you know that you shouldn't really use this thing...  unless
-you really want to.
-
-@vindex gnus-asynchronous
-Here's how:  Set @code{gnus-asynchronous} to @code{t}.  The rest should
-happen automatically.
-
-@vindex gnus-use-article-prefetch
-You can control how many articles are to be pre-fetched by setting
-@code{gnus-use-article-prefetch}.  This is 30 by default, which means
-that when you read an article in the group, the backend will pre-fetch
-the next 30 articles.  If this variable is @code{t}, the backend will
-pre-fetch all the articles it can without bound.  If it is
-@code{nil}, no pre-fetching will be done.
-
-@vindex gnus-async-prefetch-article-p
-@findex gnus-async-read-p
-There are probably some articles that you don't want to pre-fetch---read
-articles, for instance.  The @code{gnus-async-prefetch-article-p} variable controls whether an article is to be pre-fetched.  This function should
-return non-@code{nil} when the article in question is to be
-pre-fetched.  The default is @code{gnus-async-read-p}, which returns
-@code{nil} on read articles.  The function is called with an article
-data structure as the only parameter.
-
-If, for instance, you wish to pre-fetch only unread articles shorter than 100 lines, you could say something like:
-
-@lisp
-(defun my-async-short-unread-p (data)
-  "Return non-nil for short, unread articles."
-  (and (gnus-data-unread-p data)
-       (< (mail-header-lines (gnus-data-header data))
-          100)))
-
-(setq gnus-async-prefetch-article-p 'my-async-short-unread-p)
-@end lisp
-
-These functions will be called many, many times, so they should
-preferably be short and sweet to avoid slowing down Gnus too much.
-It's probably a good idea to byte-compile things like this.
-
-@vindex gnus-prefetched-article-deletion-strategy
-Articles have to be removed from the asynch buffer sooner or later.  The
-@code{gnus-prefetched-article-deletion-strategy} says when to remove
-articles.  This is a list that may contain the following elements:
-
-@table @code
-@item read
-Remove articles when they are read.
-
-@item exit
-Remove articles when exiting the group.
-@end table
-
-The default value is @code{(read exit)}.
-
-@c @vindex gnus-use-header-prefetch
-@c If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles
-@c from the next group.
-
-
-@node Article Caching
-@section Article Caching
-@cindex article caching
-@cindex caching
-
-If you have an @emph{extremely} slow @sc{nntp} connection, you may
-consider turning article caching on.  Each article will then be stored
-locally under your home directory.  As you may surmise, this could
-potentially use @emph{huge} amounts of disk space, as well as eat up all
-your inodes so fast it will make your head swim.  In vodka.
-
-Used carefully, though, it could be just an easier way to save articles.
-
-@vindex gnus-use-long-file-name
-@vindex gnus-cache-directory
-@vindex gnus-use-cache
-To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
-all articles ticked or marked as dormant will then be copied
-over to your local cache (@code{gnus-cache-directory}).  Whether this
-cache is flat or hierarchal is controlled by the
-@code{gnus-use-long-file-name} variable, as usual.
-
-When re-selecting a ticked or dormant article, it will be fetched from the
-cache instead of from the server.  As articles in your cache will never
-expire, this might serve as a method of saving articles while still
-keeping them where they belong.  Just mark all articles you want to save
-as dormant, and don't worry.
-
-When an article is marked as read, is it removed from the cache.
-
-@vindex gnus-cache-remove-articles
-@vindex gnus-cache-enter-articles
-The entering/removal of articles from the cache is controlled by the
-@code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
-variables.  Both are lists of symbols.  The first is @code{(ticked
-dormant)} by default, meaning that ticked and dormant articles will be
-put in the cache.  The latter is @code{(read)} by default, meaning that
-articles marked as read are removed from the cache.  Possibly
-symbols in these two lists are @code{ticked}, @code{dormant},
-@code{unread} and @code{read}.
-
-@findex gnus-jog-cache
-So where does the massive article-fetching and storing come into the
-picture?  The @code{gnus-jog-cache} command will go through all
-subscribed newsgroups, request all unread articles, score them, and
-store them in the cache.  You should only ever, ever ever ever, use this
-command if 1) your connection to the @sc{nntp} server is really, really,
-really slow and 2) you have a really, really, really huge disk.
-Seriously.  One way to cut down on the number of articles downloaded is
-to score unwanted articles down and have them marked as read.  They will
-not then be downloaded by this command.
-
-@vindex gnus-uncacheable-groups
-@vindex gnus-cacheable-groups
-It is likely that you do not want caching on all groups.  For instance,
-if your @code{nnml} mail is located under your home directory, it makes no
-sense to cache it somewhere else under your home directory.  Unless you
-feel that it's neat to use twice as much space.
-
-To limit the caching, you could set @code{gnus-cacheable-groups} to a
-regexp of groups to cache, @samp{^nntp} for instance, or set the
-@code{gnus-uncacheable-groups} regexp to @samp{^nnml}, for instance.
-Both variables are @code{nil} by default. If a group matches both
-variables, the group is not cached.
-
-@findex gnus-cache-generate-nov-databases
-@findex gnus-cache-generate-active
-@vindex gnus-cache-active-file
-The cache stores information on what articles it contains in its active
-file (@code{gnus-cache-active-file}).  If this file (or any other parts
-of the cache) becomes all messed up for some reason or other, Gnus
-offers two functions that will try to set things right.  @kbd{M-x
-gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
-files, and @kbd{gnus-cache-generate-active} will (re)generate the active
-file.
-
-
-@node Persistent Articles
-@section Persistent Articles
-@cindex persistent articles
-
-Closely related to article caching, we have @dfn{persistent articles}.
-In fact, it's just a different way of looking at caching, and much more
-useful in my opinion.
-
-Say you're reading a newsgroup, and you happen on to some valuable gem
-that you want to keep and treasure forever.  You'd normally just save it
-(using one of the many saving commands) in some file.  The problem with
-that is that it's just, well, yucky.  Ideally you'd prefer just having
-the article remain in the group where you found it forever; untouched by
-the expiry going on at the news server.
-
-This is what a @dfn{persistent article} is---an article that just won't
-be deleted.  It's implemented using the normal cache functions, but
-you use two explicit commands for managing persistent articles:
-
-@table @kbd
-
-@item *
-@kindex * (Summary)
-@findex gnus-cache-enter-article
-Make the current article persistent (@code{gnus-cache-enter-article}).
-
-@item M-*
-@kindex M-* (Summary)
-@findex gnus-cache-remove-article
-Remove the current article from the persistent articles
-(@code{gnus-cache-remove-article}).  This will normally delete the
-article.
-@end table
-
-Both these commands understand the process/prefix convention.
-
-To avoid having all ticked articles (and stuff) entered into the cache,
-you should set @code{gnus-use-cache} to @code{passive} if you're just
-interested in persistent articles:
-
-@lisp
-(setq gnus-use-cache 'passive)
-@end lisp
-
-
-@node Article Backlog
-@section Article Backlog
-@cindex backlog
-@cindex article backlog
-
-If you have a slow connection, but the idea of using caching seems
-unappealing to you (and it is, really), you can help the situation some
-by switching on the @dfn{backlog}.  This is where Gnus will buffer
-already read articles so that it doesn't have to re-fetch articles
-you've already read.  This only helps if you are in the habit of
-re-selecting articles you've recently read, of course.  If you never do
-that, turning the backlog on will slow Gnus down a little bit, and
-increase memory usage some.
-
-@vindex gnus-keep-backlog
-If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
-at most @var{n} old articles in a buffer for later re-fetching.  If this
-variable is non-@code{nil} and is not a number, Gnus will store
-@emph{all} read articles, which means that your Emacs will grow without
-bound before exploding and taking your machine down with you.  I put
-that in there just to keep y'all on your toes.
-
-This variable is @code{nil} by default.
-
-
-@node Saving Articles
-@section Saving Articles
-@cindex saving articles
-
-Gnus can save articles in a number of ways.  Below is the documentation
-for saving articles in a fairly straight-forward fashion (i.e., little
-processing of the article is done before it is saved).  For a different
-approach (uudecoding, unsharing) you should use @code{gnus-uu}
-(@pxref{Decoding Articles}).
-
-@vindex gnus-save-all-headers
-If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
-unwanted headers before saving the article.
-
-@vindex gnus-saved-headers
-If the preceding variable is @code{nil}, all headers that match the
-@code{gnus-saved-headers} regexp will be kept, while the rest will be
-deleted before saving.
-
-@table @kbd
-
-@item O o
-@itemx o
-@kindex O o (Summary)
-@kindex o (Summary)
-@findex gnus-summary-save-article
-@c @icon{gnus-summary-save-article}
-Save the current article using the default article saver
-(@code{gnus-summary-save-article}).
-
-@item O m
-@kindex O m (Summary)
-@findex gnus-summary-save-article-mail
-Save the current article in mail format
-(@code{gnus-summary-save-article-mail}).
-
-@item O r
-@kindex O r (Summary)
-@findex gnus-summary-save-article-rmail
-Save the current article in rmail format
-(@code{gnus-summary-save-article-rmail}).
-
-@item O f
-@kindex O f (Summary)
-@findex gnus-summary-save-article-file
-@c @icon{gnus-summary-save-article-file}
-Save the current article in plain file format
-(@code{gnus-summary-save-article-file}).
-
-@item O F
-@kindex O F (Summary)
-@findex gnus-summary-write-article-file
-Write the current article in plain file format, overwriting any previous
-file contents (@code{gnus-summary-write-article-file}).
-
-@item O b
-@kindex O b (Summary)
-@findex gnus-summary-save-article-body-file
-Save the current article body in plain file format
-(@code{gnus-summary-save-article-body-file}).
-
-@item O h
-@kindex O h (Summary)
-@findex gnus-summary-save-article-folder
-Save the current article in mh folder format
-(@code{gnus-summary-save-article-folder}).
-
-@item O v
-@kindex O v (Summary)
-@findex gnus-summary-save-article-vm
-Save the current article in a VM folder
-(@code{gnus-summary-save-article-vm}).
-
-@item O p
-@kindex O p (Summary)
-@findex gnus-summary-pipe-output
-Save the current article in a pipe.  Uhm, like, what I mean is---Pipe
-the current article to a process (@code{gnus-summary-pipe-output}).
-@end table
-
-@vindex gnus-prompt-before-saving
-All these commands use the process/prefix convention
-(@pxref{Process/Prefix}).  If you save bunches of articles using these
-functions, you might get tired of being prompted for files to save each
-and every article in.  The prompting action is controlled by
-the @code{gnus-prompt-before-saving} variable, which is @code{always} by
-default, giving you that excessive prompting action you know and
-loathe.  If you set this variable to @code{t} instead, you'll be prompted
-just once for each series of articles you save.  If you like to really
-have Gnus do all your thinking for you, you can even set this variable
-to @code{nil}, which means that you will never be prompted for files to
-save articles in.  Gnus will simply save all the articles in the default
-files.
-
-
-@vindex gnus-default-article-saver
-You can customize the @code{gnus-default-article-saver} variable to make
-Gnus do what you want it to.  You can use any of the six ready-made
-functions below, or you can create your own.
-
-@table @code
-
-@item gnus-summary-save-in-rmail
-@findex gnus-summary-save-in-rmail
-@vindex gnus-rmail-save-name
-@findex gnus-plain-save-name
-This is the default format, @dfn{babyl}.  Uses the function in the
-@code{gnus-rmail-save-name} variable to get a file name to save the
-article in.  The default is @code{gnus-plain-save-name}.
-
-@item gnus-summary-save-in-mail
-@findex gnus-summary-save-in-mail
-@vindex gnus-mail-save-name
-Save in a Unix mail (mbox) file.  Uses the function in the
-@code{gnus-mail-save-name} variable to get a file name to save the
-article in.  The default is @code{gnus-plain-save-name}.
-
-@item gnus-summary-save-in-file
-@findex gnus-summary-save-in-file
-@vindex gnus-file-save-name
-@findex gnus-numeric-save-name
-Append the article straight to an ordinary file.  Uses the function in
-the @code{gnus-file-save-name} variable to get a file name to save the
-article in.  The default is @code{gnus-numeric-save-name}.
-
-@item gnus-summary-save-body-in-file
-@findex gnus-summary-save-body-in-file
-Append the article body to an ordinary file.  Uses the function in the
-@code{gnus-file-save-name} variable to get a file name to save the
-article in.  The default is @code{gnus-numeric-save-name}.
-
-@item gnus-summary-save-in-folder
-@findex gnus-summary-save-in-folder
-@findex gnus-folder-save-name
-@findex gnus-Folder-save-name
-@vindex gnus-folder-save-name
-@cindex rcvstore
-@cindex MH folders
-Save the article to an MH folder using @code{rcvstore} from the MH
-library.  Uses the function in the @code{gnus-folder-save-name} variable
-to get a file name to save the article in.  The default is
-@code{gnus-folder-save-name}, but you can also use
-@code{gnus-Folder-save-name}, which creates capitalized names.
-
-@item gnus-summary-save-in-vm
-@findex gnus-summary-save-in-vm
-Save the article in a VM folder.  You have to have the VM mail
-reader to use this setting.
-@end table
-
-@vindex gnus-article-save-directory
-All of these functions, except for the last one, will save the article
-in the @code{gnus-article-save-directory}, which is initialized from the
-@code{SAVEDIR} environment variable.  This is @file{~/News/} by
-default.
-
-As you can see above, the functions use different functions to find a
-suitable name of a file to save the article in.  Below is a list of
-available functions that generate names:
-
-@table @code
-
-@item gnus-Numeric-save-name
-@findex gnus-Numeric-save-name
-File names like @file{~/News/Alt.andrea-dworkin/45}.
-
-@item gnus-numeric-save-name
-@findex gnus-numeric-save-name
-File names like @file{~/News/alt.andrea-dworkin/45}.
-
-@item gnus-Plain-save-name
-@findex gnus-Plain-save-name
-File names like @file{~/News/Alt.andrea-dworkin}.
-
-@item gnus-plain-save-name
-@findex gnus-plain-save-name
-File names like @file{~/News/alt.andrea-dworkin}.
-@end table
-
-@vindex gnus-split-methods
-You can have Gnus suggest where to save articles by plonking a regexp into
-the @code{gnus-split-methods} alist.  For instance, if you would like to
-save articles related to Gnus in the file @file{gnus-stuff}, and articles
-related to VM in @code{vm-stuff}, you could set this variable to something
-like:
-
-@lisp
-(("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
- ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
- (my-choosing-function "../other-dir/my-stuff")
- ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
-@end lisp
-
-We see that this is a list where each element is a list that has two
-elements---the @dfn{match} and the @dfn{file}.  The match can either be
-a string (in which case it is used as a regexp to match on the article
-head); it can be a symbol (which will be called as a function with the
-group name as a parameter); or it can be a list (which will be
-@code{eval}ed).  If any of these actions have a non-@code{nil} result,
-the @dfn{file} will be used as a default prompt.  In addition, the
-result of the operation itself will be used if the function or form
-called returns a string or a list of strings.
-
-You basically end up with a list of file names that might be used when
-saving the current article.  (All ``matches'' will be used.)  You will
-then be prompted for what you really want to use as a name, with file
-name completion over the results from applying this variable.
-
-This variable is @code{((gnus-article-archive-name))} by default, which
-means that Gnus will look at the articles it saves for an
-@code{Archive-name} line and use that as a suggestion for the file
-name.
-
-Here's an example function to clean up file names somewhat.  If you have
-lots of mail groups called things like
-@samp{nnml:mail.whatever}, you may want to chop off the beginning of
-these group names before creating the file name to save to.  The
-following will do just that:
-
-@lisp
-(defun my-save-name (group)
-  (when (string-match "^nnml:mail." group)
-    (substring group (match-end 0))))
-
-(setq gnus-split-methods
-      '((gnus-article-archive-name)
-        (my-save-name)))
-@end lisp
-
-
-@vindex gnus-use-long-file-name
-Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
-@code{nil}, all the preceding functions will replace all periods
-(@samp{.}) in the group names with slashes (@samp{/})---which means that
-the functions will generate hierarchies of directories instead of having
-all the files in the top level directory
-(@file{~/News/alt/andrea-dworkin} instead of
-@file{~/News/alt.andrea-dworkin}.)  This variable is @code{t} by default
-on most systems.  However, for historical reasons, this is @code{nil} on
-Xenix and usg-unix-v machines by default.
-
-This function also affects kill and score file names.  If this variable
-is a list, and the list contains the element @code{not-score}, long file
-names will not be used for score files, if it contains the element
-@code{not-save}, long file names will not be used for saving, and if it
-contains the element @code{not-kill}, long file names will not be used
-for kill files.
-
-If you'd like to save articles in a hierarchy that looks something like
-a spool, you could
-
-@lisp
-(setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
-(setq gnus-default-article-saver 'gnus-summary-save-in-file) ; no encoding
-@end lisp
-
-Then just save with @kbd{o}.  You'd then read this hierarchy with
-ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
-the top level directory as the argument (@file{~/News/}).  Then just walk
-around to the groups/directories with @code{nneething}.
-
-
-@node Decoding Articles
-@section Decoding Articles
-@cindex decoding articles
-
-Sometime users post articles (or series of articles) that have been
-encoded in some way or other.  Gnus can decode them for you.
-
-@menu
-* Uuencoded Articles::    Uudecode articles.
-* Shell Archives::        Unshar articles.
-* PostScript Files::      Split PostScript.
-* Other Files::           Plain save and binhex.
-* Decoding Variables::    Variables for a happy decoding.
-* Viewing Files::         You want to look at the result of the decoding?
-@end menu
-
-@cindex series
-@cindex article series
-All these functions use the process/prefix convention
-(@pxref{Process/Prefix}) for finding out what articles to work on, with
-the extension that a ``single article'' means ``a single series''.  Gnus
-can find out by itself what articles belong to a series, decode all the
-articles and unpack/view/save the resulting file(s).
-
-Gnus guesses what articles are in the series according to the following
-simplish rule: The subjects must be (nearly) identical, except for the
-last two numbers of the line.  (Spaces are largely ignored, however.)
-
-For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
-will find all the articles that match the regexp @samp{^cat.gif
-([0-9]+/[0-9]+).*$}.
-
-Subjects that are non-standard, like @samp{cat.gif (2/3) Part 6 of a
-series}, will not be properly recognized by any of the automatic viewing
-commands, and you have to mark the articles manually with @kbd{#}.
-
-
-@node Uuencoded Articles
-@subsection Uuencoded Articles
-@cindex uudecode
-@cindex uuencoded articles
-
-@table @kbd
-
-@item X u
-@kindex X u (Summary)
-@findex gnus-uu-decode-uu
-@c @icon{gnus-uu-decode-uu}
-Uudecodes the current series (@code{gnus-uu-decode-uu}).
-
-@item X U
-@kindex X U (Summary)
-@findex gnus-uu-decode-uu-and-save
-Uudecodes and saves the current series
-(@code{gnus-uu-decode-uu-and-save}).
-
-@item X v u
-@kindex X v u (Summary)
-@findex gnus-uu-decode-uu-view
-Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
-
-@item X v U
-@kindex X v U (Summary)
-@findex gnus-uu-decode-uu-and-save-view
-Uudecodes, views and saves the current series
-(@code{gnus-uu-decode-uu-and-save-view}).
-
-@end table
-
-Remember that these all react to the presence of articles marked with
-the process mark.  If, for instance, you'd like to decode and save an
-entire newsgroup, you'd typically do @kbd{M P a}
-(@code{gnus-uu-mark-all}) and then @kbd{X U}
-(@code{gnus-uu-decode-uu-and-save}).
-
-All this is very much different from how @code{gnus-uu} worked with
-@sc{gnus 4.1}, where you had explicit keystrokes for everything under
-the sun.  This version of @code{gnus-uu} generally assumes that you mark
-articles in some way (@pxref{Setting Process Marks}) and then press
-@kbd{X u}.
-
-@vindex gnus-uu-notify-files
-Note: When trying to decode articles that have names matching
-@code{gnus-uu-notify-files}, which is hard-coded to
-@samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
-automatically post an article on @samp{comp.unix.wizards} saying that
-you have just viewed the file in question.  This feature can't be turned
-off.
-
-
-@node Shell Archives
-@subsection Shell Archives
-@cindex unshar
-@cindex shell archives
-@cindex shared articles
-
-Shell archives (``shar files'') used to be a popular way to distribute
-sources, but it isn't used all that much today.  In any case, we have
-some commands to deal with these:
-
-@table @kbd
-
-@item X s
-@kindex X s (Summary)
-@findex gnus-uu-decode-unshar
-Unshars the current series (@code{gnus-uu-decode-unshar}).
-
-@item X S
-@kindex X S (Summary)
-@findex gnus-uu-decode-unshar-and-save
-Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
-
-@item X v s
-@kindex X v s (Summary)
-@findex gnus-uu-decode-unshar-view
-Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
-
-@item X v S
-@kindex X v S (Summary)
-@findex gnus-uu-decode-unshar-and-save-view
-Unshars, views and saves the current series
-(@code{gnus-uu-decode-unshar-and-save-view}).
-@end table
-
-
-@node PostScript Files
-@subsection PostScript Files
-@cindex PostScript
-
-@table @kbd
-
-@item X p
-@kindex X p (Summary)
-@findex gnus-uu-decode-postscript
-Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
-
-@item X P
-@kindex X P (Summary)
-@findex gnus-uu-decode-postscript-and-save
-Unpack and save the current PostScript series
-(@code{gnus-uu-decode-postscript-and-save}).
-
-@item X v p
-@kindex X v p (Summary)
-@findex gnus-uu-decode-postscript-view
-View the current PostScript series
-(@code{gnus-uu-decode-postscript-view}).
-
-@item X v P
-@kindex X v P (Summary)
-@findex gnus-uu-decode-postscript-and-save-view
-View and save the current PostScript series
-(@code{gnus-uu-decode-postscript-and-save-view}).
-@end table
-
-
-@node Other Files
-@subsection Other Files
-
-@table @kbd
-@item X o
-@kindex X o (Summary)
-@findex gnus-uu-decode-save
-Save the current series
-(@code{gnus-uu-decode-save}).
-
-@item X b
-@kindex X b (Summary)
-@findex gnus-uu-decode-binhex
-Unbinhex the current series (@code{gnus-uu-decode-binhex}).  This
-doesn't really work yet.
-@end table
-
-
-@node Decoding Variables
-@subsection Decoding Variables
-
-Adjective, not verb.
-
-@menu
-* Rule Variables::          Variables that say how a file is to be viewed.
-* Other Decode Variables::  Other decode variables.
-* Uuencoding and Posting::  Variables for customizing uuencoding.
-@end menu
-
-
-@node Rule Variables
-@subsubsection Rule Variables
-@cindex rule variables
-
-Gnus uses @dfn{rule variables} to decide how to view a file.  All these
-variables are of the form
-
-@lisp
-      (list '(regexp1 command2)
-            '(regexp2 command2)
-            ...)
-@end lisp
-
-@table @code
-
-@item gnus-uu-user-view-rules
-@vindex gnus-uu-user-view-rules
-@cindex sox
-This variable is consulted first when viewing files.  If you wish to use,
-for instance, @code{sox} to convert an @samp{.au} sound file, you could
-say something like:
-@lisp
-(setq gnus-uu-user-view-rules
-      (list '("\\\\.au$" "sox %s -t .aiff > /dev/audio")))
-@end lisp
-
-@item gnus-uu-user-view-rules-end
-@vindex gnus-uu-user-view-rules-end
-This variable is consulted if Gnus couldn't make any matches from the
-user and default view rules.
-
-@item gnus-uu-user-archive-rules
-@vindex gnus-uu-user-archive-rules
-This variable can be used to say what commands should be used to unpack
-archives.
-@end table
-
-
-@node Other Decode Variables
-@subsubsection Other Decode Variables
-
-@table @code
-@vindex gnus-uu-grabbed-file-functions
-
-@item gnus-uu-grabbed-file-functions
-All functions in this list will be called right after each file has been
-successfully decoded---so that you can move or view files right away,
-and don't have to wait for all files to be decoded before you can do
-anything.  Ready-made functions you can put in this list are:
-
-@table @code
-
-@item gnus-uu-grab-view
-@findex gnus-uu-grab-view
-View the file.
-
-@item gnus-uu-grab-move
-@findex gnus-uu-grab-move
-Move the file (if you're using a saving function.)
-@end table
-
-@item gnus-uu-be-dangerous
-@vindex gnus-uu-be-dangerous
-Specifies what to do if unusual situations arise during decoding.  If
-@code{nil}, be as conservative as possible.  If @code{t}, ignore things
-that didn't work, and overwrite existing files.  Otherwise, ask each
-time.
-
-@item gnus-uu-ignore-files-by-name
-@vindex gnus-uu-ignore-files-by-name
-Files with name matching this regular expression won't be viewed.
-
-@item gnus-uu-ignore-files-by-type
-@vindex gnus-uu-ignore-files-by-type
-Files with a @sc{mime} type matching this variable won't be viewed.
-Note that Gnus tries to guess what type the file is based on the name.
-@code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly
-kludgey.
-
-@item gnus-uu-tmp-dir
-@vindex gnus-uu-tmp-dir
-Where @code{gnus-uu} does its work.
-
-@item gnus-uu-do-not-unpack-archives
-@vindex gnus-uu-do-not-unpack-archives
-Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
-looking for files to display.
-
-@item gnus-uu-view-and-save
-@vindex gnus-uu-view-and-save
-Non-@code{nil} means that the user will always be asked to save a file
-after viewing it.
-
-@item gnus-uu-ignore-default-view-rules
-@vindex gnus-uu-ignore-default-view-rules
-Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
-rules.
-
-@item gnus-uu-ignore-default-archive-rules
-@vindex gnus-uu-ignore-default-archive-rules
-Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
-unpacking commands.
-
-@item gnus-uu-kill-carriage-return
-@vindex gnus-uu-kill-carriage-return
-Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
-from articles.
-
-@item gnus-uu-unmark-articles-not-decoded
-@vindex gnus-uu-unmark-articles-not-decoded
-Non-@code{nil} means that @code{gnus-uu} will mark unsuccessfully
-decoded articles as unread.
-
-@item gnus-uu-correct-stripped-uucode
-@vindex gnus-uu-correct-stripped-uucode
-Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
-uuencoded files that have had trailing spaces deleted.
-
-@item gnus-uu-pre-uudecode-hook
-@vindex gnus-uu-pre-uudecode-hook
-Hook run before sending a message to @code{uudecode}.
-
-@item gnus-uu-view-with-metamail
-@vindex gnus-uu-view-with-metamail
-@cindex metamail
-Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
-commands defined by the rule variables and just fudge a @sc{mime}
-content type based on the file name.  The result will be fed to
-@code{metamail} for viewing.
-
-@item gnus-uu-save-in-digest
-@vindex gnus-uu-save-in-digest
-Non-@code{nil} means that @code{gnus-uu}, when asked to save without
-decoding, will save in digests.  If this variable is @code{nil},
-@code{gnus-uu} will just save everything in a file without any
-embellishments.  The digesting almost conforms to RFC1153---no easy way
-to specify any meaningful volume and issue numbers were found, so I
-simply dropped them.
-
-@end table
-
-
-@node Uuencoding and Posting
-@subsubsection Uuencoding and Posting
-
-@table @code
-
-@item gnus-uu-post-include-before-composing
-@vindex gnus-uu-post-include-before-composing
-Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
-before you compose the article.  If this variable is @code{t}, you can
-either include an encoded file with @kbd{C-c C-i} or have one included
-for you when you post the article.
-
-@item gnus-uu-post-length
-@vindex gnus-uu-post-length
-Maximum length of an article.  The encoded file will be split into how
-many articles it takes to post the entire file.
-
-@item gnus-uu-post-threaded
-@vindex gnus-uu-post-threaded
-Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
-thread.  This may not be smart, as no other decoder I have seen is able
-to follow threads when collecting uuencoded articles.  (Well, I have
-seen one package that does that---@code{gnus-uu}, but somehow, I don't
-think that counts...) Default is @code{nil}.
-
-@item gnus-uu-post-separate-description
-@vindex gnus-uu-post-separate-description
-Non-@code{nil} means that the description will be posted in a separate
-article.  The first article will typically be numbered (0/x).  If this
-variable is @code{nil}, the description the user enters will be included
-at the beginning of the first article, which will be numbered (1/x).
-Default is @code{t}.
-
-@end table
-
-
-@node Viewing Files
-@subsection Viewing Files
-@cindex viewing files
-@cindex pseudo-articles
-
-After decoding, if the file is some sort of archive, Gnus will attempt
-to unpack the archive and see if any of the files in the archive can be
-viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
-containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
-uncompress and de-tar the main file, and then view the two pictures.
-This unpacking process is recursive, so if the archive contains archives
-of archives, it'll all be unpacked.
-
-Finally, Gnus will normally insert a @dfn{pseudo-article} for each
-extracted file into the summary buffer.  If you go to these
-``articles'', you will be prompted for a command to run (usually Gnus
-will make a suggestion), and then the command will be run.
-
-@vindex gnus-view-pseudo-asynchronously
-If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
-until the viewing is done before proceeding.
-
-@vindex gnus-view-pseudos
-If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
-the pseudo-articles into the summary buffer, but view them
-immediately.  If this variable is @code{not-confirm}, the user won't even
-be asked for a confirmation before viewing is done.
-
-@vindex gnus-view-pseudos-separately
-If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
-pseudo-article will be created for each file to be viewed.  If
-@code{nil}, all files that use the same viewing command will be given as
-a list of parameters to that command.
-
-@vindex gnus-insert-pseudo-articles
-If @code{gnus-insert-pseudo-articles} is non-@code{nil}, insert
-pseudo-articles when decoding.  It is @code{t} by default.
-
-So; there you are, reading your @emph{pseudo-articles} in your
-@emph{virtual newsgroup} from the @emph{virtual server}; and you think:
-Why isn't anything real anymore? How did we get here?
-
-
-@node Article Treatment
-@section Article Treatment
-
-Reading through this huge manual, you may have quite forgotten that the
-object of newsreaders is to actually, like, read what people have
-written.  Reading articles.  Unfortunately, people are quite bad at
-writing, so there are tons of functions and variables to make reading
-these articles easier.
-
-@menu
-* Article Highlighting::    You want to make the article look like fruit salad.
-* Article Fontisizing::     Making emphasized text look nice.
-* Article Hiding::          You also want to make certain info go away.
-* Article Washing::         Lots of way-neat functions to make life better.
-* Article Buttons::         Click on URLs, Message-IDs, addresses and the like.
-* Article Date::            Grumble, UT!
-* Article Signature::       What is a signature?
-* Article Miscellania::     Various other stuff.
-@end menu
-
-
-@node Article Highlighting
-@subsection Article Highlighting
-@cindex highlighting
-
-Not only do you want your article buffer to look like fruit salad, but
-you want it to look like technicolor fruit salad.
-
-@table @kbd
-
-@item W H a
-@kindex W H a (Summary)
-@findex gnus-article-highlight
-@findex gnus-article-maybe-highlight
-Do much highlighting of the current article
-(@code{gnus-article-highlight}).  This function highlights header, cited
-text, the signature, and adds buttons to the body and the head.
-
-@item W H h
-@kindex W H h (Summary)
-@findex gnus-article-highlight-headers
-@vindex gnus-header-face-alist
-Highlight the headers (@code{gnus-article-highlight-headers}).  The
-highlighting will be done according to the @code{gnus-header-face-alist}
-variable, which is a list where each element has the form
-@code{(@var{regexp} @var{name} @var{content})}.
-@var{regexp} is a regular expression for matching the
-header, @var{name} is the face used for highlighting the header name
-(@pxref{Faces and Fonts}) and @var{content} is the face for highlighting
-the header value.  The first match made will be used.  Note that
-@var{regexp} shouldn't have @samp{^} prepended---Gnus will add one.
-
-@item W H c
-@kindex W H c (Summary)
-@findex gnus-article-highlight-citation
-Highlight cited text (@code{gnus-article-highlight-citation}).
-
-Some variables to customize the citation highlights:
-
-@table @code
-@vindex gnus-cite-parse-max-size
-
-@item gnus-cite-parse-max-size
-If the article size if bigger than this variable (which is 25000 by
-default), no citation highlighting will be performed.
-
-@item gnus-cite-prefix-regexp
-@vindex gnus-cite-prefix-regexp
-Regexp matching the longest possible citation prefix on a line.
-
-@item gnus-cite-max-prefix
-@vindex gnus-cite-max-prefix
-Maximum possible length for a citation prefix (default 20).
-
-@item gnus-cite-face-list
-@vindex gnus-cite-face-list
-List of faces used for highlighting citations (@pxref{Faces and Fonts}).
-When there are citations from multiple articles in the same message,
-Gnus will try to give each citation from each article its own face.
-This should make it easier to see who wrote what.
-
-@item gnus-supercite-regexp
-@vindex gnus-supercite-regexp
-Regexp matching normal Supercite attribution lines.
-
-@item gnus-supercite-secondary-regexp
-@vindex gnus-supercite-secondary-regexp
-Regexp matching mangled Supercite attribution lines.
-
-@item gnus-cite-minimum-match-count
-@vindex gnus-cite-minimum-match-count
-Minimum number of identical prefixes we have to see before we believe
-that it's a citation.
-
-@item gnus-cite-attribution-prefix
-@vindex gnus-cite-attribution-prefix
-Regexp matching the beginning of an attribution line.
-
-@item gnus-cite-attribution-suffix
-@vindex gnus-cite-attribution-suffix
-Regexp matching the end of an attribution line.
-
-@item gnus-cite-attribution-face
-@vindex gnus-cite-attribution-face
-Face used for attribution lines.  It is merged with the face for the
-cited text belonging to the attribution.
-
-@end table
-
-
-@item W H s
-@kindex W H s (Summary)
-@vindex gnus-signature-separator
-@vindex gnus-signature-face
-@findex gnus-article-highlight-signature
-Highlight the signature (@code{gnus-article-highlight-signature}).
-Everything after @code{gnus-signature-separator} (@pxref{Article
-Signature}) in an article will be considered a signature and will be
-highlighted with @code{gnus-signature-face}, which is @code{italic} by
-default.
-
-@end table
-
-@xref{Customizing Articles}, for how to highlight articles automatically.
-
-
-@node Article Fontisizing
-@subsection Article Fontisizing
-@cindex emphasis
-@cindex article emphasis
-
-@findex gnus-article-emphasize
-@kindex W e (Summary)
-People commonly add emphasis to words in news articles by writing things
-like @samp{_this_} or @samp{*this*} or @samp{/this/}.  Gnus can make
-this look nicer by running the article through the @kbd{W e}
-(@code{gnus-article-emphasize}) command.
-
-@vindex gnus-emphasis-alist
-How the emphasis is computed is controlled by the
-@code{gnus-emphasis-alist} variable.  This is an alist where the first
-element is a regular expression to be matched.  The second is a number
-that says what regular expression grouping is used to find the entire
-emphasized word.  The third is a number that says what regexp grouping
-should be displayed and highlighted.  (The text between these two
-groupings will be hidden.)  The fourth is the face used for
-highlighting.
-
-@lisp
-(setq gnus-article-emphasis
-      '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
-        ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
-@end lisp
-
-@cindex slash
-@cindex asterisk
-@cindex underline
-@cindex /
-@cindex *
-
-@vindex gnus-emphasis-underline
-@vindex gnus-emphasis-bold
-@vindex gnus-emphasis-italic
-@vindex gnus-emphasis-underline-bold
-@vindex gnus-emphasis-underline-italic
-@vindex gnus-emphasis-bold-italic
-@vindex gnus-emphasis-underline-bold-italic
-By default, there are seven rules, and they use the following faces:
-@code{gnus-emphasis-bold}, @code{gnus-emphasis-italic},
-@code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic},
-@code{gnus-emphasis-underline-italic},
-@code{gnus-emphasis-underline-bold}, and
-@code{gnus-emphasis-underline-bold-italic}.
-
-If you want to change these faces, you can either use @kbd{M-x
-customize}, or you can use @code{copy-face}.  For instance, if you want
-to make @code{gnus-emphasis-italic} use a red face instead, you could
-say something like:
-
-@lisp
-(copy-face 'red 'gnus-emphasis-italic)
-@end lisp
-
-@vindex gnus-group-highlight-words-alist
-
-If you want to highlight arbitrary words, you can use the
-@code{gnus-group-highlight-words-alist} variable, which uses the same
-syntax as @code{gnus-emphasis-alist}.  The @code{highlight-words} group
-parameter (@pxref{Group Parameters}) can also be used.
-
-@xref{Customizing Articles}, for how to fontize articles automatically.
-
-
-@node Article Hiding
-@subsection Article Hiding
-@cindex article hiding
-
-Or rather, hiding certain things in each article.  There usually is much
-too much cruft in most articles.
-
-@table @kbd
-
-@item W W a
-@kindex W W a (Summary)
-@findex gnus-article-hide
-Do quite a lot of hiding on the article buffer
-(@kbd{gnus-article-hide}).  In particular, this function will hide
-headers, PGP, cited text and the signature.
-
-@item W W h
-@kindex W W h (Summary)
-@findex gnus-article-hide-headers
-Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
-Headers}.
-
-@item W W b
-@kindex W W b (Summary)
-@findex gnus-article-hide-boring-headers
-Hide headers that aren't particularly interesting
-(@code{gnus-article-hide-boring-headers}).  @xref{Hiding Headers}.
-
-@item W W s
-@kindex W W s (Summary)
-@findex gnus-article-hide-signature
-Hide signature (@code{gnus-article-hide-signature}).  @xref{Article
-Signature}.
-
-@item W W l
-@kindex W W l (Summary)
-@findex gnus-article-hide-list-identifiers
-@vindex gnus-list-identifiers
-Hide list identifiers specified in @code{gnus-list-identifiers}. Theese
-are strings some list servers add to the beginning of all @code{Subject}
-headers---for example, @samp{[zebra 4711]}.
-
-@table @code
-
-@item gnus-list-identifiers
-@vindex gnus-list-identifiers
-A regular expression that matches list identifiers to be removed from
-subject. This can also be a list of regular expressions.
-
-@end table
-
-@item W W p
-@kindex W W p (Summary)
-@findex gnus-article-hide-pgp
-@vindex gnus-article-hide-pgp-hook
-Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}).  The
-@code{gnus-article-hide-pgp-hook} hook will be run after a @sc{pgp}
-signature has been hidden.  For example, to automatically verify
-articles that have signatures in them do:
-@lisp
-;;; Hide pgp cruft if any.
-
-(setq gnus-treat-strip-pgp t)
-
-;;; After hiding pgp, verify the message;
-;;; only happens if pgp signature is found.
-
-(add-hook 'gnus-article-hide-pgp-hook
-          (lambda ()
-            (save-excursion
-              (set-buffer gnus-original-article-buffer)
-              (mc-verify))))
-@end lisp
-
-@item W W P
-@kindex W W P (Summary)
-@findex gnus-article-hide-pem
-Hide @sc{pem} (privacy enhanced messages) cruft
-(@code{gnus-article-hide-pem}).
-
-@item W W B
-@kindex W W B (Summary)
-@findex gnus-article-strip-banner
-@cindex banner
-@cindex OneList
-@cindex stripping advertisments
-@cindex advertisments
-Strip the banner specified by the @code{banner} group parameter
-(@code{gnus-article-strip-banner}).  This is mainly used to hide those
-annoying banners and/or signatures that some mailing lists and moderated
-groups adds to all the messages.  The way to use this function is to add
-the @code{banner} group parameter (@pxref{Group Parameters}) to the
-group you want banners stripped from.  The parameter either be a string,
-which will be interpreted as a regular expression matching text to be
-removed, or the symbol @code{signature}, meaning that the (last)
-signature should be removed.
-
-@item W W c
-@kindex W W c (Summary)
-@findex gnus-article-hide-citation
-Hide citation (@code{gnus-article-hide-citation}).  Some variables for
-customizing the hiding:
-
-@table @code
-
-@item gnus-cited-opened-text-button-line-format
-@itemx gnus-cited-closed-text-button-line-format
-@vindex gnus-cited-closed-text-button-line-format
-@vindex gnus-cited-opened-text-button-line-format
-Gnus adds buttons to show where the cited text has been hidden, and to
-allow toggle hiding the text.  The format of the variable is specified
-by these format-like variable (@pxref{Formatting Variables}).  These
-specs are valid:
-
-@table @samp
-@item b
-Starting point of the hidden text.
-@item e
-Ending point of the hidden text.
-@item l
-Number of characters in the hidden region.
-@item n
-Number of lines of hidden text.
-@end table
-
-@item gnus-cited-lines-visible
-@vindex gnus-cited-lines-visible
-The number of lines at the beginning of the cited text to leave shown.
-
-@end table
-
-@item W W C-c
-@kindex W W C-c (Summary)
-@findex gnus-article-hide-citation-maybe
-
-Hide citation (@code{gnus-article-hide-citation-maybe}) depending on the
-following two variables:
-
-@table @code
-@item gnus-cite-hide-percentage
-@vindex gnus-cite-hide-percentage
-If the cited text is of a bigger percentage than this variable (default
-50), hide the cited text.
-
-@item gnus-cite-hide-absolute
-@vindex gnus-cite-hide-absolute
-The cited text must have at least this length (default 10) before it
-is hidden.
-@end table
-
-@item W W C
-@kindex W W C (Summary)
-@findex gnus-article-hide-citation-in-followups
-Hide cited text in articles that aren't roots
-(@code{gnus-article-hide-citation-in-followups}).  This isn't very
-useful as an interactive command, but might be a handy function to stick
-have happen automatically (@pxref{Customizing Articles}).
-
-@end table
-
-All these ``hiding'' commands are toggles, but if you give a negative
-prefix to these commands, they will show what they have previously
-hidden.  If you give a positive prefix, they will always hide.
-
-Also @pxref{Article Highlighting} for further variables for
-citation customization.
-
-@xref{Customizing Articles}, for how to hide article elements
-automatically.
-
-
-@node Article Washing
-@subsection Article Washing
-@cindex washing
-@cindex article washing
-
-We call this ``article washing'' for a really good reason.  Namely, the
-@kbd{A} key was taken, so we had to use the @kbd{W} key instead.
-
-@dfn{Washing} is defined by us as ``changing something from something to
-something else'', but normally results in something looking better.
-Cleaner, perhaps.
-
-@table @kbd
-
-@item W l
-@kindex W l (Summary)
-@findex gnus-summary-stop-page-breaking
-Remove page breaks from the current article
-(@code{gnus-summary-stop-page-breaking}).  @xref{Misc Article}, for page
-delimiters.
-
-@item W r
-@kindex W r (Summary)
-@findex gnus-summary-caesar-message
-@c @icon{gnus-summary-caesar-message}
-Do a Caesar rotate (rot13) on the article buffer
-(@code{gnus-summary-caesar-message}).
-Unreadable articles that tell you to read them with Caesar rotate or rot13.
-(Typically offensive jokes and such.)
-
-It's commonly called ``rot13'' because each letter is rotated 13
-positions in the alphabet, e. g. @samp{B} (letter #2) -> @samp{O} (letter
-#15).  It is sometimes referred to as ``Caesar rotate'' because Caesar
-is rumored to have employed this form of, uh, somewhat weak encryption.
-
-@item W t
-@kindex W t (Summary)
-@findex gnus-summary-toggle-header
-Toggle whether to display all headers in the article buffer
-(@code{gnus-summary-toggle-header}).
-
-@item W v
-@kindex W v (Summary)
-@findex gnus-summary-verbose-header
-Toggle whether to display all headers in the article buffer permanently
-(@code{gnus-summary-verbose-header}).
-
-@item W o
-@kindex W o (Summary)
-@findex gnus-article-treat-overstrike
-Treat overstrike (@code{gnus-article-treat-overstrike}).
-
-@item W d
-@kindex W d (Summary)
-@findex gnus-article-treat-dumbquotes
-@vindex gnus-article-dumbquotes-map
-@cindex Smartquotes
-@cindex M******** sm*rtq**t*s
-@cindex Latin 1
-Treat M******** sm*rtq**t*s according to
-@code{gnus-article-dumbquotes-map}
-(@code{gnus-article-treat-dumbquotes}).  Note that this function guesses
-whether a character is a sm*rtq**t* or not, so it should only be used
-interactively.
-
-@item W w
-@kindex W w (Summary)
-@findex gnus-article-fill-cited-article
-Do word wrap (@code{gnus-article-fill-cited-article}).
-
-You can give the command a numerical prefix to specify the width to use
-when filling.
-
-@item W Q
-@kindex W Q (Summary)
-@findex gnus-article-fill-long-lines 
-Fill long lines (@code{gnus-article-fill-long-lines}).
-
-@item W C
-@kindex W C (Summary)
-@findex gnus-article-capitalize-sentences
-Capitalize the first word in each sentence
-(@code{gnus-article-capitalize-sentences}).
-
-@item W c
-@kindex W c (Summary)
-@findex gnus-article-remove-cr
-Translate CRLF pairs (i. e., @samp{^M}s on the end of the lines) into LF
-(this takes care of DOS line endings), and then translate any remaining
-CRs into LF (this takes care of Mac line endings)
-(@code{gnus-article-remove-cr}).
-
-@item W q
-@kindex W q (Summary)
-@findex gnus-article-de-quoted-unreadable
-Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
-Quoted-Printable is one common @sc{mime} encoding employed when sending
-non-ASCII (i. e., 8-bit) articles.  It typically makes strings like
-@samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very
-readable to me.  Note that the this is usually done automatically by
-Gnus if the message in question has a @code{Content-Transfer-Encoding}
-header that says that this encoding has been done.
-
-@item W f
-@kindex W f (Summary)
-@cindex x-face
-@findex gnus-article-display-x-face
-@findex gnus-article-x-face-command
-@vindex gnus-article-x-face-command
-@vindex gnus-article-x-face-too-ugly
-@iftex
-@end iftex
-Look for and display any X-Face headers
-(@code{gnus-article-display-x-face}).  The command executed by this
-function is given by the @code{gnus-article-x-face-command} variable.
-If this variable is a string, this string will be executed in a
-sub-shell.  If it is a function, this function will be called with the
-face as the argument.  If the @code{gnus-article-x-face-too-ugly} (which
-is a regexp) matches the @code{From} header, the face will not be shown.
-The default action under Emacs is to fork off an @code{xv} to view the
-face; under XEmacs the default action is to display the face before the
-@code{From} header.  (It's nicer if XEmacs has been compiled with X-Face
-support---that will make display somewhat faster.  If there's no native
-X-Face support, Gnus will try to convert the @code{X-Face} header using
-external programs from the @code{pbmplus} package and friends.)  If you
-want to have this function in the display hook, it should probably come
-last.
-
-@item W b
-@kindex W b (Summary)
-@findex gnus-article-add-buttons
-Add clickable buttons to the article (@code{gnus-article-add-buttons}).
-@xref{Article Buttons}.
-
-@item W B
-@kindex W B (Summary)
-@findex gnus-article-add-buttons-to-head
-Add clickable buttons to the article headers
-(@code{gnus-article-add-buttons-to-head}).
-
-@item W W H
-@kindex W W H (Summary)
-@findex gnus-article-strip-headers-from-body
-Strip headers like the @code{X-No-Archive} header from the beginning of
-article bodies (@code{gnus-article-strip-headers-from-body}).
-
-@item W E l
-@kindex W E l (Summary)
-@findex gnus-article-strip-leading-blank-lines
-Remove all blank lines from the beginning of the article
-(@code{gnus-article-strip-leading-blank-lines}).
-
-@item W E m
-@kindex W E m (Summary)
-@findex gnus-article-strip-multiple-blank-lines
-Replace all blank lines with empty lines and then all multiple empty
-lines with a single empty line.
-(@code{gnus-article-strip-multiple-blank-lines}).
-
-@item W E t
-@kindex W E t (Summary)
-@findex gnus-article-remove-trailing-blank-lines
-Remove all blank lines at the end of the article
-(@code{gnus-article-remove-trailing-blank-lines}).
-
-@item W E a
-@kindex W E a (Summary)
-@findex gnus-article-strip-blank-lines
-Do all the three commands above
-(@code{gnus-article-strip-blank-lines}).
-
-@item W E A
-@kindex W E A (Summary)
-@findex gnus-article-strip-all-blank-lines
-Remove all blank lines
-(@code{gnus-article-strip-all-blank-lines}).
-
-@item W E s
-@kindex W E s (Summary)
-@findex gnus-article-strip-leading-space
-Remove all white space from the beginning of all lines of the article
-body (@code{gnus-article-strip-leading-space}).
-
-@item W E e
-@kindex W E e (Summary)
-@findex gnus-article-strip-trailing-space
-Remove all white space from the end of all lines of the article
-body (@code{gnus-article-strip-trailing-space}).
-
-@end table
-
-@xref{Customizing Articles}, for how to wash articles automatically.
-
-
-@node Article Buttons
-@subsection Article Buttons
-@cindex buttons
-
-People often include references to other stuff in articles, and it would
-be nice if Gnus could just fetch whatever it is that people talk about
-with the minimum of fuzz when you hit @kbd{RET} or use the middle mouse
-button on these references.
-
-Gnus adds @dfn{buttons} to certain standard references by default:
-Well-formed URLs, mail addresses and Message-IDs.  This is controlled by
-two variables, one that handles article bodies and one that handles
-article heads:
-
-@table @code
-
-@item gnus-button-alist
-@vindex gnus-button-alist
-This is an alist where each entry has this form:
-
-@lisp
-(REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
-@end lisp
-
-@table @var
-
-@item regexp
-All text that match this regular expression will be considered an
-external reference.  Here's a typical regexp that matches embedded URLs:
-@samp{<URL:\\([^\n\r>]*\\)>}.
-
-@item button-par
-Gnus has to know which parts of the matches is to be highlighted.  This
-is a number that says what sub-expression of the regexp is to be
-highlighted.  If you want it all highlighted, you use 0 here.
-
-@item use-p
-This form will be @code{eval}ed, and if the result is non-@code{nil},
-this is considered a match.  This is useful if you want extra sifting to
-avoid false matches.
-
-@item function
-This function will be called when you click on this button.
-
-@item data-par
-As with @var{button-par}, this is a sub-expression number, but this one
-says which part of the match is to be sent as data to @var{function}.
-
-@end table
-
-So the full entry for buttonizing URLs is then
-
-@lisp
-("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
-@end lisp
-
-@item gnus-header-button-alist
-@vindex gnus-header-button-alist
-This is just like the other alist, except that it is applied to the
-article head only, and that each entry has an additional element that is
-used to say what headers to apply the buttonize coding to:
-
-@lisp
-(HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
-@end lisp
-
-@var{header} is a regular expression.
-
-@item gnus-button-url-regexp
-@vindex gnus-button-url-regexp
-A regular expression that matches embedded URLs.  It is used in the
-default values of the variables above.
-
-@item gnus-article-button-face
-@vindex gnus-article-button-face
-Face used on buttons.
-
-@item gnus-article-mouse-face
-@vindex gnus-article-mouse-face
-Face used when the mouse cursor is over a button.
-
-@end table
-
-@xref{Customizing Articles}, for how to buttonize articles automatically.
-
-
-@node Article Date
-@subsection Article Date
-
-The date is most likely generated in some obscure timezone you've never
-heard of, so it's quite nice to be able to find out what the time was
-when the article was sent.
-
-@table @kbd
-
-@item W T u
-@kindex W T u (Summary)
-@findex gnus-article-date-ut
-Display the date in UT (aka. GMT, aka ZULU)
-(@code{gnus-article-date-ut}).
-
-@item W T i
-@kindex W T i (Summary)
-@findex gnus-article-date-iso8601
-@cindex ISO 8601
-Display the date in international format, aka. ISO 8601
-(@code{gnus-article-date-iso8601}).
-
-@item W T l
-@kindex W T l (Summary)
-@findex gnus-article-date-local
-Display the date in the local timezone (@code{gnus-article-date-local}).
-
-@item W T s
-@kindex W T s (Summary)
-@vindex gnus-article-time-format
-@findex gnus-article-date-user
-@findex format-time-string
-Display the date using a user-defined format
-(@code{gnus-article-date-user}).  The format is specified by the
-@code{gnus-article-time-format} variable, and is a string that's passed
-to @code{format-time-string}.  See the documentation of that variable
-for a list of possible format specs.
-
-@item W T e
-@kindex W T e (Summary)
-@findex gnus-article-date-lapsed
-@findex gnus-start-date-timer
-@findex gnus-stop-date-timer
-Say how much time has elapsed between the article was posted and now
-(@code{gnus-article-date-lapsed}).  It looks something like:
-
-@example
-X-Sent: 9 years, 6 weeks, 4 days, 9 hours, 3 minutes, 28 seconds ago
-@end example
-
-The value of @code{gnus-article-date-lapsed-new-header} determines
-whether this header will just be added below the old Date one, or will
-replace it.
-
-An advantage of using Gnus to read mail is that it converts simple bugs
-into wonderful absurdities.
-
-If you want to have this line updated continually, you can put
-
-@lisp
-(gnus-start-date-timer)
-@end lisp
-
-in your @file{.gnus.el} file, or you can run it off of some hook.  If
-you want to stop the timer, you can use the @code{gnus-stop-date-timer}
-command.
-
-@item W T o
-@kindex W T o (Summary)
-@findex gnus-article-date-original
-Display the original date (@code{gnus-article-date-original}).  This can
-be useful if you normally use some other conversion function and are
-worried that it might be doing something totally wrong.  Say, claiming
-that the article was posted in 1854.  Although something like that is
-@emph{totally} impossible.  Don't you trust me? *titter*
-
-@end table
-
-@xref{Customizing Articles}, for how to display the date in your
-preferred format automatically.
-
-
-@node Article Signature
-@subsection Article Signature
-@cindex signatures
-@cindex article signature
-
-@vindex gnus-signature-separator
-Each article is divided into two parts---the head and the body.  The
-body can be divided into a signature part and a text part.  The variable
-that says what is to be considered a signature is
-@code{gnus-signature-separator}.  This is normally the standard
-@samp{^-- $} as mandated by son-of-RFC 1036.  However, many people use
-non-standard signature separators, so this variable can also be a list
-of regular expressions to be tested, one by one.  (Searches are done
-from the end of the body towards the beginning.)  One likely value is:
-
-@lisp
-(setq gnus-signature-separator
-      '("^-- $"         ; The standard
-        "^-- *$"        ; A common mangling
-        "^-------*$"    ; Many people just use a looong
-                        ; line of dashes.  Shame!
-        "^ *--------*$" ; Double-shame!
-        "^________*$"   ; Underscores are also popular
-        "^========*$")) ; Pervert!
-@end lisp
-
-The more permissive you are, the more likely it is that you'll get false
-positives.
-
-@vindex gnus-signature-limit
-@code{gnus-signature-limit} provides a limit to what is considered a
-signature when displaying articles.
-
-@enumerate
-@item
-If it is an integer, no signature may be longer (in characters) than
-that integer.
-@item
-If it is a floating point number, no signature may be longer (in lines)
-than that number.
-@item
-If it is a function, the function will be called without any parameters,
-and if it returns @code{nil}, there is no signature in the buffer.
-@item
-If it is a string, it will be used as a regexp.  If it matches, the text
-in question is not a signature.
-@end enumerate
-
-This variable can also be a list where the elements may be of the types
-listed above.  Here's an example:
-
-@lisp
-(setq gnus-signature-limit
-      '(200.0 "^---*Forwarded article"))
-@end lisp
-
-This means that if there are more than 200 lines after the signature
-separator, or the text after the signature separator is matched by
-the regular expression @samp{^---*Forwarded article}, then it isn't a
-signature after all.
-
-
-@node Article Miscellania
-@subsection Article Miscellania
-
-@table @kbd
-@item A t
-@kindex A t (Summary)
-@findex gnus-article-babel
-Translate the article from one language to another
-(@code{gnus-article-babel}). 
-
-@end table
-
-
-@node MIME Commands
-@section @sc{mime} Commands
-@cindex MIME decoding
-
-The following commands all understand the numerical prefix.  For
-instance, @kbd{3 b} means ``view the third @sc{mime} part''.
-
-@table @kbd
-@item b
-@itemx K b
-@kindex b (Summary)
-@kindex K b (Summary)
-View the @sc{mime} part.
-
-@item K o
-@kindex K o (Summary)
-Save the @sc{mime} part.
-
-@item K c
-@kindex K c (Summary)
-Copy the @sc{mime} part.
-
-@item K e
-@kindex K e (Summary)
-View the @sc{mime} part externally.
-
-@item K i
-@kindex K i (Summary)
-View the @sc{mime} part internally.
-
-@item K |
-@kindex K | (Summary)
-Pipe the @sc{mime} part to an external command.
-@end table
-
-The rest of these @sc{mime} commands do not use the numerical prefix in
-the same manner:
-
-@table @kbd
-@item K b
-@kindex K b (Summary)
-Make all the @sc{mime} parts have buttons in from of them.
-
-@item K m
-@kindex K m (Summary)
-Some multipart messages are transmitted with missing or faulty headers.
-This command will attempt to ``repair'' these messages so that they can
-be viewed in a more pleasant manner.
-
-@item X m
-@kindex X m (Summary)
-@findex gnus-summary-save-parts
-Save all parts matching a @sc{mime} type to a directory
-(@code{gnus-summary-save-parts}).  Understands the process/prefix
-convention (@pxref{Process/Prefix}).
-
-@item M-t
-@kindex M-t (Summary)
-@findex gnus-summary-display-buttonized
-Toggle the buttonized display of the article buffer
-(@code{gnus-summary-toggle-display-buttonized}).
-
-@item W M w
-@kindex W M w (Summary)
-Decode RFC2047-encoded words in the article headers
-(@code{gnus-article-decode-mime-words}).
-
-@item W M c
-@kindex W M c (Summary)
-Decode encoded article bodies as well as charsets
-(@code{gnus-article-decode-charset}).
-
-This command looks in the @code{Content-Type} header to determine the
-charset.  If there is no such header in the article, you can give it a
-prefix, which will prompt for the charset to decode as.  In regional
-groups where people post using some common encoding (but do not include
-MIME headers), you can set the @code{charset} group/topic parameter to
-the required charset (@pxref{Group Parameters}).
-
-@item W M v
-@kindex W M v (Summary)
-View all the @sc{mime} parts in the current article
-(@code{gnus-mime-view-all-parts}).
-
-@end table
-
-Relevant variables:
-
-@table @code
-@item gnus-ignored-mime-types
-@vindex gnus-ignored-mime-types
-This is a list of regexps.  @sc{mime} types that match a regexp from
-this list will be completely ignored by Gnus.  The default value is
-@code{nil}.
-
-To have all Vcards be ignored, you'd say something like this:
-
-@lisp
-(setq gnus-ignored-mime-types
-      '("text/x-vcard"))
-@end lisp
-
-@item gnus-unbuttonized-mime-types
-@vindex gnus-unbuttonized-mime-types
-This is a list of regexps.  @sc{mime} types that match a regexp from
-this list won't have @sc{mime} buttons inserted unless they aren't
-displayed.  The default value is @code{(".*/.*")}.
-
-@item gnus-article-mime-part-function
-@vindex gnus-article-mime-part-function
-For each @sc{mime} part, this function will be called with the @sc{mime}
-handle as the parameter.  The function is meant to be used to allow
-users to gather information from the article (e. g., add Vcard info to
-the bbdb database) or to do actions based on parts (e. g., automatically
-save all jpegs into some directory).
-
-Here's an example function the does the latter:
-
-@lisp
-(defun my-save-all-jpeg-parts (handle)
-  (when (equal (car (mm-handle-type handle)) "image/jpeg")
-    (with-temp-buffer
-      (insert (mm-get-part handle))
-      (write-region (point-min) (point-max)
-                    (read-file-name "Save jpeg to: ")))))
-(setq gnus-article-mime-part-function
-      'my-save-all-jpeg-parts)
-@end lisp
-
-@vindex gnus-mime-multipart-functions
-@item gnus-mime-multipart-functions
-Alist of @sc{mime} multipart types and functions to handle them.
-
-@end table
-
-
-@node Charsets
-@section Charsets
-@cindex charsets
-
-People use different charsets, and we have @sc{mime} to let us know what
-charsets they use.  Or rather, we wish we had.  Many people use
-newsreaders and mailers that do not understand or use @sc{mime}, and
-just send out messages without saying what character sets they use.  To
-help a bit with this, some local news hierarchies have policies that say
-what character set is the default.  For instance, the @samp{fj}
-hierarchy uses @code{iso-2022-jp-2}.
-
-@vindex gnus-group-charset-alist
-This knowledge is encoded in the @code{gnus-group-charset-alist}
-variable, which is an alist of regexps (to match group names) and
-default charsets to be used when reading these groups.
-
-In addition, some people do use soi-disant @sc{mime}-aware agents that
-aren't.  These blitely mark messages as being in @code{iso-8859-1} even
-if they really are in @code{koi-8}.  To help here, the
-@code{gnus-newsgroup-ignored-charsets} variable can be used.  The
-charsets that are listed here will be ignored.  The variable can be set
-on a group-by-group basis using the group parameters (@pxref{Group
-Parameters}).  The default value is @code{(unknown-8bit)}, which is
-something some agents insist on having in there.
-
-
-@node Article Commands
-@section Article Commands
-
-@table @kbd
-
-@item A P
-@cindex PostScript
-@cindex printing
-@kindex A P (Summary)
-@vindex gnus-ps-print-hook
-@findex gnus-summary-print-article
-Generate and print a PostScript image of the article buffer
-(@code{gnus-summary-print-article}).  @code{gnus-ps-print-hook} will be
-run just before printing the buffer.
-
-@end table
-
-
-@node Summary Sorting
-@section Summary Sorting
-@cindex summary sorting
-
-You can have the summary buffer sorted in various ways, even though I
-can't really see why you'd want that.
-
-@table @kbd
-
-@item C-c C-s C-n
-@kindex C-c C-s C-n (Summary)
-@findex gnus-summary-sort-by-number
-Sort by article number (@code{gnus-summary-sort-by-number}).
-
-@item C-c C-s C-a
-@kindex C-c C-s C-a (Summary)
-@findex gnus-summary-sort-by-author
-Sort by author (@code{gnus-summary-sort-by-author}).
-
-@item C-c C-s C-s
-@kindex C-c C-s C-s (Summary)
-@findex gnus-summary-sort-by-subject
-Sort by subject (@code{gnus-summary-sort-by-subject}).
-
-@item C-c C-s C-d
-@kindex C-c C-s C-d (Summary)
-@findex gnus-summary-sort-by-date
-Sort by date (@code{gnus-summary-sort-by-date}).
-
-@item C-c C-s C-l
-@kindex C-c C-s C-l (Summary)
-@findex gnus-summary-sort-by-lines
-Sort by lines (@code{gnus-summary-sort-by-lines}).
-
-@item C-c C-s C-c
-@kindex C-c C-s C-c (Summary)
-@findex gnus-summary-sort-by-chars
-Sort by article length (@code{gnus-summary-sort-by-chars}).
-
-@item C-c C-s C-i
-@kindex C-c C-s C-i (Summary)
-@findex gnus-summary-sort-by-score
-Sort by score (@code{gnus-summary-sort-by-score}).
-@end table
-
-These functions will work both when you use threading and when you don't
-use threading.  In the latter case, all summary lines will be sorted,
-line by line.  In the former case, sorting will be done on a
-root-by-root basis, which might not be what you were looking for.  To
-toggle whether to use threading, type @kbd{T T} (@pxref{Thread
-Commands}).
-
-
-@node Finding the Parent
-@section Finding the Parent
-@cindex parent articles
-@cindex referring articles
-
-@table @kbd
-@item ^
-@kindex ^ (Summary)
-@findex gnus-summary-refer-parent-article
-If you'd like to read the parent of the current article, and it is not
-displayed in the summary buffer, you might still be able to.  That is,
-if the current group is fetched by @sc{nntp}, the parent hasn't expired
-and the @code{References} in the current article are not mangled, you
-can just press @kbd{^} or @kbd{A r}
-(@code{gnus-summary-refer-parent-article}).  If everything goes well,
-you'll get the parent.  If the parent is already displayed in the
-summary buffer, point will just move to this article.
-
-If given a positive numerical prefix, fetch that many articles back into
-the ancestry.  If given a negative numerical prefix, fetch just that
-ancestor.  So if you say @kbd{3 ^}, Gnus will fetch the parent, the
-grandparent and the grandgrandparent of the current article.  If you say
-@kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current
-article.
-
-@item A R (Summary)
-@findex gnus-summary-refer-references
-@kindex A R (Summary)
-Fetch all articles mentioned in the @code{References} header of the
-article (@code{gnus-summary-refer-references}).
-
-@item A T (Summary)
-@findex gnus-summary-refer-thread
-@kindex A T (Summary)
-Display the full thread where the current article appears
-(@code{gnus-summary-refer-thread}).  This command has to fetch all the
-headers in the current group to work, so it usually takes a while.  If
-you do it often, you may consider setting @code{gnus-fetch-old-headers}
-to @code{invisible} (@pxref{Filling In Threads}).  This won't have any
-visible effects normally, but it'll make this command work a whole lot
-faster.  Of course, it'll make group entry somewhat slow.
-
-@vindex gnus-refer-thread-limit
-The @code{gnus-refer-thread-limit} variable says how many old (i. e.,
-articles before the first displayed in the current group) headers to
-fetch when doing this command.  The default is 200.  If @code{t}, all
-the available headers will be fetched.  This variable can be overridden
-by giving the @kbd{A T} command a numerical prefix.
-
-@item M-^ (Summary)
-@findex gnus-summary-refer-article
-@kindex M-^ (Summary)
-@cindex Message-ID
-@cindex fetching by Message-ID
-You can also ask the @sc{nntp} server for an arbitrary article, no
-matter what group it belongs to.  @kbd{M-^}
-(@code{gnus-summary-refer-article}) will ask you for a
-@code{Message-ID}, which is one of those long, hard-to-read thingies
-that look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You
-have to get it all exactly right.  No fuzzy searches, I'm afraid.
-@end table
-
-The current select method will be used when fetching by
-@code{Message-ID} from non-news select method, but you can override this
-by giving this command a prefix.
-
-@vindex gnus-refer-article-method
-If the group you are reading is located on a backend that does not
-support fetching by @code{Message-ID} very well (like @code{nnspool}),
-you can set @code{gnus-refer-article-method} to an @sc{nntp} method.  It
-would, perhaps, be best if the @sc{nntp} server you consult is the one
-updating the spool you are reading from, but that's not really
-necessary.
-
-It can also be a list of select methods, as well as the special symbol
-@code{current}, which means to use the current select method.  If it
-is a list, Gnus will try all the methods in the list until it finds a
-match.
-
-Here's an example setting that will first try the current method, and
-then ask Deja if that fails:
-
-@lisp
-(setq gnus-refer-article-method
-      '(current
-        (nnweb "refer" (nnweb-type dejanews))))
-@end lisp
-
-Most of the mail backends support fetching by @code{Message-ID}, but do
-not do a particularly excellent job at it.  That is, @code{nnmbox} and
-@code{nnbabyl} are able to locate articles from any groups, while
-@code{nnml} and @code{nnfolder} are only able to locate articles that
-have been posted to the current group.  (Anything else would be too time
-consuming.)  @code{nnmh} does not support this at all.
-
-
-@node Alternative Approaches
-@section Alternative Approaches
-
-Different people like to read news using different methods.  This being
-Gnus, we offer a small selection of minor modes for the summary buffers.
-
-@menu
-* Pick and Read::               First mark articles and then read them.
-* Binary Groups::               Auto-decode all articles.
-@end menu
-
-
-@node Pick and Read
-@subsection Pick and Read
-@cindex pick and read
-
-Some newsreaders (like @code{nn} and, uhm, @code{Netnews} on VM/CMS) use
-a two-phased reading interface.  The user first marks in a summary
-buffer the articles she wants to read.  Then she starts reading the
-articles with just an article buffer displayed.
-
-@findex gnus-pick-mode
-@kindex M-x gnus-pick-mode
-Gnus provides a summary buffer minor mode that allows
-this---@code{gnus-pick-mode}.  This basically means that a few process
-mark commands become one-keystroke commands to allow easy marking, and
-it provides one additional command for switching to the summary buffer.
-
-Here are the available keystrokes when using pick mode:
-
-@table @kbd
-@item .
-@kindex . (Pick)
-@findex gnus-pick-article-or-thread
-Pick the article or thread on the current line
-(@code{gnus-pick-article-or-thread}).  If the variable
-@code{gnus-thread-hide-subtree} is true, then this key selects the
-entire thread when used at the first article of the thread.  Otherwise,
-it selects just the article. If given a numerical prefix, go to that
-thread or article and pick it.  (The line number is normally displayed
-at the beginning of the summary pick lines.)
-
-@item SPACE
-@kindex SPACE (Pick)
-@findex gnus-pick-next-page
-Scroll the summary buffer up one page (@code{gnus-pick-next-page}).  If
-at the end of the buffer, start reading the picked articles.
-
-@item u
-@kindex u (Pick)
-@findex gnus-pick-unmark-article-or-thread.
-Unpick the thread or article
-(@code{gnus-pick-unmark-article-or-thread}).  If the variable
-@code{gnus-thread-hide-subtree} is true, then this key unpicks the
-thread if used at the first article of the thread.  Otherwise it unpicks
-just the article.  You can give this key a numerical prefix to unpick
-the thread or article at that line.
-
-@item RET
-@kindex RET (Pick)
-@findex gnus-pick-start-reading
-@vindex gnus-pick-display-summary
-Start reading the picked articles (@code{gnus-pick-start-reading}).  If
-given a prefix, mark all unpicked articles as read first.  If
-@code{gnus-pick-display-summary} is non-@code{nil}, the summary buffer
-will still be visible when you are reading.
-
-@end table
-
-All the normal summary mode commands are still available in the
-pick-mode, with the exception of @kbd{u}.  However @kbd{!} is available
-which is mapped to the same function
-@code{gnus-summary-tick-article-forward}.
-
-If this sounds like a good idea to you, you could say:
-
-@lisp
-(add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
-@end lisp
-
-@vindex gnus-pick-mode-hook
-@code{gnus-pick-mode-hook} is run in pick minor mode buffers.
-
-@vindex gnus-mark-unpicked-articles-as-read
-If @code{gnus-mark-unpicked-articles-as-read} is non-@code{nil}, mark
-all unpicked articles as read.  The default is @code{nil}.
-
-@vindex gnus-summary-pick-line-format
-The summary line format in pick mode is slightly different from the
-standard format.  At the beginning of each line the line number is
-displayed.  The pick mode line format is controlled by the
-@code{gnus-summary-pick-line-format} variable (@pxref{Formatting
-Variables}).  It accepts the same format specs that
-@code{gnus-summary-line-format} does (@pxref{Summary Buffer Lines}).
-
-
-@node Binary Groups
-@subsection Binary Groups
-@cindex binary groups
-
-@findex gnus-binary-mode
-@kindex M-x gnus-binary-mode
-If you spend much time in binary groups, you may grow tired of hitting
-@kbd{X u}, @kbd{n}, @kbd{RET} all the time.  @kbd{M-x gnus-binary-mode}
-is a minor mode for summary buffers that makes all ordinary Gnus article
-selection functions uudecode series of articles and display the result
-instead of just displaying the articles the normal way.
-
-@kindex g (Binary)
-@findex gnus-binary-show-article
-The only way, in fact, to see the actual articles is the @kbd{g}
-command, when you have turned on this mode
-(@code{gnus-binary-show-article}).
-
-@vindex gnus-binary-mode-hook
-@code{gnus-binary-mode-hook} is called in binary minor mode buffers.
-
-
-@node Tree Display
-@section Tree Display
-@cindex trees
-
-@vindex gnus-use-trees
-If you don't like the normal Gnus summary display, you might try setting
-@code{gnus-use-trees} to @code{t}.  This will create (by default) an
-additional @dfn{tree buffer}.  You can execute all summary mode commands
-in the tree buffer.
-
-There are a few variables to customize the tree display, of course:
-
-@table @code
-@item gnus-tree-mode-hook
-@vindex gnus-tree-mode-hook
-A hook called in all tree mode buffers.
-
-@item gnus-tree-mode-line-format
-@vindex gnus-tree-mode-line-format
-A format string for the mode bar in the tree mode buffers (@pxref{Mode
-Line Formatting}).  The default is @samp{Gnus: %%b %S %Z}.  For a list
-of valid specs, @pxref{Summary Buffer Mode Line}.
-
-@item gnus-selected-tree-face
-@vindex gnus-selected-tree-face
-Face used for highlighting the selected article in the tree buffer.  The
-default is @code{modeline}.
-
-@item gnus-tree-line-format
-@vindex gnus-tree-line-format
-A format string for the tree nodes.  The name is a bit of a misnomer,
-though---it doesn't define a line, but just the node.  The default value
-is @samp{%(%[%3,3n%]%)}, which displays the first three characters of
-the name of the poster.  It is vital that all nodes are of the same
-length, so you @emph{must} use @samp{%4,4n}-like specifiers.
-
-Valid specs are:
-
-@table @samp
-@item n
-The name of the poster.
-@item f
-The @code{From} header.
-@item N
-The number of the article.
-@item [
-The opening bracket.
-@item ]
-The closing bracket.
-@item s
-The subject.
-@end table
-
-@xref{Formatting Variables}.
-
-Variables related to the display are:
-
-@table @code
-@item gnus-tree-brackets
-@vindex gnus-tree-brackets
-This is used for differentiating between ``real'' articles and
-``sparse'' articles.  The format is @code{((@var{real-open} . @var{real-close})
-(@var{sparse-open} . @var{sparse-close}) (@var{dummy-open} . @var{dummy-close}))}, and the
-default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
-
-@item gnus-tree-parent-child-edges
-@vindex gnus-tree-parent-child-edges
-This is a list that contains the characters used for connecting parent
-nodes to their children.  The default is @code{(?- ?\\ ?|)}.
-
-@end table
-
-@item gnus-tree-minimize-window
-@vindex gnus-tree-minimize-window
-If this variable is non-@code{nil}, Gnus will try to keep the tree
-buffer as small as possible to allow more room for the other Gnus
-windows.  If this variable is a number, the tree buffer will never be
-higher than that number.  The default is @code{t}.  Note that if you
-have several windows displayed side-by-side in a frame and the tree
-buffer is one of these, minimizing the tree window will also resize all
-other windows displayed next to it.
-
-@item gnus-generate-tree-function
-@vindex gnus-generate-tree-function
-@findex gnus-generate-horizontal-tree
-@findex gnus-generate-vertical-tree
-The function that actually generates the thread tree.  Two predefined
-functions are available: @code{gnus-generate-horizontal-tree} and
-@code{gnus-generate-vertical-tree} (which is the default).
-
-@end table
-
-Here's an example from a horizontal tree buffer:
-
-@example
-@{***@}-(***)-[odd]-[Gun]
-     |      \[Jan]
-     |      \[odd]-[Eri]
-     |      \(***)-[Eri]
-     |            \[odd]-[Paa]
-     \[Bjo]
-     \[Gun]
-     \[Gun]-[Jor]
-@end example
-
-Here's the same thread displayed in a vertical tree buffer:
-
-@example
-@{***@}
-  |--------------------------\-----\-----\
-(***)                         [Bjo] [Gun] [Gun]
-  |--\-----\-----\                          |
-[odd] [Jan] [odd] (***)                   [Jor]
-  |           |     |--\
-[Gun]       [Eri] [Eri] [odd]
-                          |
-                        [Paa]
-@end example
-
-If you're using horizontal trees, it might be nice to display the trees
-side-by-side with the summary buffer.  You could add something like the
-following to your @file{.gnus.el} file:
-
-@lisp
-(setq gnus-use-trees t
-      gnus-generate-tree-function 'gnus-generate-horizontal-tree
-      gnus-tree-minimize-window nil)
-(gnus-add-configuration
- '(article
-   (vertical 1.0
-             (horizontal 0.25
-                         (summary 0.75 point)
-                         (tree 1.0))
-             (article 1.0))))
-@end lisp
-
-@xref{Windows Configuration}.
-
-
-@node Mail Group Commands
-@section Mail Group Commands
-@cindex mail group commands
-
-Some commands only make sense in mail groups.  If these commands are
-invalid in the current group, they will raise a hell and let you know.
-
-All these commands (except the expiry and edit commands) use the
-process/prefix convention (@pxref{Process/Prefix}).
-
-@table @kbd
-
-@item B e
-@kindex B e (Summary)
-@findex gnus-summary-expire-articles
-Expire all expirable articles in the group
-(@code{gnus-summary-expire-articles}).
-
-@item B M-C-e
-@kindex B M-C-e (Summary)
-@findex gnus-summary-expire-articles-now
-Delete all the expirable articles in the group
-(@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
-articles eligible for expiry in the current group will
-disappear forever into that big @file{/dev/null} in the sky.
-
-@item B DEL
-@kindex B DEL (Summary)
-@findex gnus-summary-delete-article
-@c @icon{gnus-summary-mail-delete}
-Delete the mail article.  This is ``delete'' as in ``delete it from your
-disk forever and ever, never to return again.'' Use with caution.
-(@code{gnus-summary-delete-article}).
-
-@item B m
-@kindex B m (Summary)
-@cindex move mail
-@findex gnus-summary-move-article
-Move the article from one mail group to another
-(@code{gnus-summary-move-article}).
-
-@item B c
-@kindex B c (Summary)
-@cindex copy mail
-@findex gnus-summary-copy-article
-@c @icon{gnus-summary-mail-copy}
-Copy the article from one group (mail group or not) to a mail group
-(@code{gnus-summary-copy-article}).
-
-@item B B
-@kindex B B (Summary)
-@cindex crosspost mail
-@findex gnus-summary-crosspost-article
-Crosspost the current article to some other group
-(@code{gnus-summary-crosspost-article}).  This will create a new copy of
-the article in the other group, and the Xref headers of the article will
-be properly updated.
-
-@item B i
-@kindex B i (Summary)
-@findex gnus-summary-import-article
-Import an arbitrary file into the current mail newsgroup
-(@code{gnus-summary-import-article}).  You will be prompted for a file
-name, a @code{From} header and a @code{Subject} header.
-
-@item B r
-@kindex B r (Summary)
-@findex gnus-summary-respool-article
-Respool the mail article (@code{gnus-summary-respool-article}).
-@code{gnus-summary-respool-default-method} will be used as the default
-select method when respooling.  This variable is @code{nil} by default,
-which means that the current group select method will be used instead.
-
-@item B w
-@itemx e
-@kindex B w (Summary)
-@kindex e (Summary)
-@findex gnus-summary-edit-article
-@kindex C-c C-c (Article)
-Edit the current article (@code{gnus-summary-edit-article}).  To finish
-editing and make the changes permanent, type @kbd{C-c C-c}
-(@kbd{gnus-summary-edit-article-done}).  If you give a prefix to the
-@kbd{C-c C-c} command, Gnus won't re-highlight the article.
-
-@item B q
-@kindex B q (Summary)
-@findex gnus-summary-respool-query
-If you want to re-spool an article, you might be curious as to what group
-the article will end up in before you do the re-spooling.  This command
-will tell you (@code{gnus-summary-respool-query}).
-
-@item B t
-@kindex B t (Summary)
-@findex gnus-summary-respool-trace
-Similarly, this command will display all fancy splitting patterns used
-when repooling, if any (@code{gnus-summary-respool-trace}).
-
-@item B p
-@kindex B p (Summary)
-@findex gnus-summary-article-posted-p
-Some people have a tendency to send you "courtesy" copies when they
-follow up to articles you have posted.  These usually have a
-@code{Newsgroups} header in them, but not always.  This command
-(@code{gnus-summary-article-posted-p}) will try to fetch the current
-article from your news server (or rather, from
-@code{gnus-refer-article-method} or @code{gnus-select-method}) and will
-report back whether it found the article or not.  Even if it says that
-it didn't find the article, it may have been posted anyway---mail
-propagation is much faster than news propagation, and the news copy may
-just not have arrived yet.
-
-@end table
-
-@vindex gnus-move-split-methods
-@cindex moving articles
-If you move (or copy) articles regularly, you might wish to have Gnus
-suggest where to put the articles.  @code{gnus-move-split-methods} is a
-variable that uses the same syntax as @code{gnus-split-methods}
-(@pxref{Saving Articles}).  You may customize that variable to create
-suggestions you find reasonable.
-
-@lisp
-(setq gnus-move-split-methods
-      '(("^From:.*Lars Magne" "nnml:junk")
-        ("^Subject:.*gnus" "nnfolder:important")
-        (".*" "nnml:misc")))
-@end lisp
-
-
-@node Various Summary Stuff
-@section Various Summary Stuff
-
-@menu
-* Summary Group Information::         Information oriented commands.
-* Searching for Articles::            Multiple article commands.
-* Summary Generation Commands::       (Re)generating the summary buffer.
-* Really Various Summary Commands::   Those pesky non-conformant commands.
-@end menu
-
-@table @code
-@vindex gnus-summary-mode-hook
-@item gnus-summary-mode-hook
-This hook is called when creating a summary mode buffer.
-
-@vindex gnus-summary-generate-hook
-@item gnus-summary-generate-hook
-This is called as the last thing before doing the threading and the
-generation of the summary buffer.  It's quite convenient for customizing
-the threading variables based on what data the newsgroup has.  This hook
-is called from the summary buffer after most summary buffer variables
-have been set.
-
-@vindex gnus-summary-prepare-hook
-@item gnus-summary-prepare-hook
-It is called after the summary buffer has been generated.  You might use
-it to, for instance, highlight lines or modify the look of the buffer in
-some other ungodly manner.  I don't care.
-
-@vindex gnus-summary-prepared-hook
-@item gnus-summary-prepared-hook
-A hook called as the very last thing after the summary buffer has been
-generated.
-
-@vindex gnus-summary-ignore-duplicates
-@item gnus-summary-ignore-duplicates
-When Gnus discovers two articles that have the same @code{Message-ID},
-it has to do something drastic.  No articles are allowed to have the
-same @code{Message-ID}, but this may happen when reading mail from some
-sources.  Gnus allows you to customize what happens with this variable.
-If it is @code{nil} (which is the default), Gnus will rename the
-@code{Message-ID} (for display purposes only) and display the article as
-any other article.  If this variable is @code{t}, it won't display the
-article---it'll be as if it never existed.
-
-@end table
-
-
-@node Summary Group Information
-@subsection Summary Group Information
-
-@table @kbd
-
-@item H f
-@kindex H f (Summary)
-@findex gnus-summary-fetch-faq
-@vindex gnus-group-faq-directory
-Try to fetch the FAQ (list of frequently asked questions) for the
-current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
-FAQ from @code{gnus-group-faq-directory}, which is usually a directory
-on a remote machine.  This variable can also be a list of directories.
-In that case, giving a prefix to this command will allow you to choose
-between the various sites.  @code{ange-ftp} or @code{efs} will probably
-be used for fetching the file.
-
-@item H d
-@kindex H d (Summary)
-@findex gnus-summary-describe-group
-Give a brief description of the current group
-(@code{gnus-summary-describe-group}).  If given a prefix, force
-rereading the description from the server.
-
-@item H h
-@kindex H h (Summary)
-@findex gnus-summary-describe-briefly
-Give an extremely brief description of the most important summary
-keystrokes (@code{gnus-summary-describe-briefly}).
-
-@item H i
-@kindex H i (Summary)
-@findex gnus-info-find-node
-Go to the Gnus info node (@code{gnus-info-find-node}).
-@end table
-
-
-@node Searching for Articles
-@subsection Searching for Articles
-
-@table @kbd
-
-@item M-s
-@kindex M-s (Summary)
-@findex gnus-summary-search-article-forward
-Search through all subsequent articles for a regexp
-(@code{gnus-summary-search-article-forward}).
-
-@item M-r
-@kindex M-r (Summary)
-@findex gnus-summary-search-article-backward
-Search through all previous articles for a regexp
-(@code{gnus-summary-search-article-backward}).
-
-@item &
-@kindex & (Summary)
-@findex gnus-summary-execute-command
-This command will prompt you for a header field, a regular expression to
-match on this field, and a command to be executed if the match is made
-(@code{gnus-summary-execute-command}).  If given a prefix, search
-backward instead.
-
-@item M-&
-@kindex M-& (Summary)
-@findex gnus-summary-universal-argument
-Perform any operation on all articles that have been marked with
-the process mark (@code{gnus-summary-universal-argument}).
-@end table
-
-@node Summary Generation Commands
-@subsection Summary Generation Commands
-
-@table @kbd
-
-@item Y g
-@kindex Y g (Summary)
-@findex gnus-summary-prepare
-Regenerate the current summary buffer (@code{gnus-summary-prepare}).
-
-@item Y c
-@kindex Y c (Summary)
-@findex gnus-summary-insert-cached-articles
-Pull all cached articles (for the current group) into the summary buffer
-(@code{gnus-summary-insert-cached-articles}).
-
-@end table
-
-
-@node Really Various Summary Commands
-@subsection Really Various Summary Commands
-
-@table @kbd
-
-@item A D
-@itemx C-d
-@kindex C-d (Summary)
-@kindex A D (Summary)
-@findex gnus-summary-enter-digest-group
-If the current article is a collection of other articles (for instance,
-a digest), you might use this command to enter a group based on the that
-article (@code{gnus-summary-enter-digest-group}).  Gnus will try to
-guess what article type is currently displayed unless you give a prefix
-to this command, which forces a ``digest'' interpretation.  Basically,
-whenever you see a message that is a collection of other messages of
-some format, you @kbd{C-d} and read these messages in a more convenient
-fashion.
-
-@item M-C-d
-@kindex M-C-d (Summary)
-@findex gnus-summary-read-document
-This command is very similar to the one above, but lets you gather
-several documents into one biiig group
-(@code{gnus-summary-read-document}).  It does this by opening several
-@code{nndoc} groups for each document, and then opening an
-@code{nnvirtual} group on top of these @code{nndoc} groups.  This
-command understands the process/prefix convention
-(@pxref{Process/Prefix}).
-
-@item C-t
-@kindex C-t (Summary)
-@findex gnus-summary-toggle-truncation
-Toggle truncation of summary lines
-(@code{gnus-summary-toggle-truncation}).  This will probably confuse the
-line centering function in the summary buffer, so it's not a good idea
-to have truncation switched off while reading articles.
-
-@item =
-@kindex = (Summary)
-@findex gnus-summary-expand-window
-Expand the summary buffer window (@code{gnus-summary-expand-window}).
-If given a prefix, force an @code{article} window configuration.
-
-@item M-C-e
-@kindex M-C-e (Summary)
-@findex gnus-summary-edit-parameters
-Edit the group parameters (@pxref{Group Parameters}) of the current
-group (@code{gnus-summary-edit-parameters}).
-
-@item M-C-g
-@kindex M-C-g (Summary)
-@findex gnus-summary-customize-parameters
-Customize the group parameters (@pxref{Group Parameters}) of the current
-group (@code{gnus-summary-customize-parameters}).
-
-@end table
-
-
-@node Exiting the Summary Buffer
-@section Exiting the Summary Buffer
-@cindex summary exit
-@cindex exiting groups
-
-Exiting from the summary buffer will normally update all info on the
-group and return you to the group buffer.
-
-@table @kbd
-
-@item Z Z
-@itemx q
-@kindex Z Z (Summary)
-@kindex q (Summary)
-@findex gnus-summary-exit
-@vindex gnus-summary-exit-hook
-@vindex gnus-summary-prepare-exit-hook
-@c @icon{gnus-summary-exit}
-Exit the current group and update all information on the group
-(@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
-called before doing much of the exiting, which calls
-@code{gnus-summary-expire-articles} by default.
-@code{gnus-summary-exit-hook} is called after finishing the exit
-process.  @code{gnus-group-no-more-groups-hook} is run when returning to
-group mode having no more (unread) groups.
-
-@item Z E
-@itemx Q
-@kindex Z E (Summary)
-@kindex Q (Summary)
-@findex gnus-summary-exit-no-update
-Exit the current group without updating any information on the group
-(@code{gnus-summary-exit-no-update}).
-
-@item Z c
-@itemx c
-@kindex Z c (Summary)
-@kindex c (Summary)
-@findex gnus-summary-catchup-and-exit
-@c @icon{gnus-summary-catchup-and-exit}
-Mark all unticked articles in the group as read and then exit
-(@code{gnus-summary-catchup-and-exit}).
-
-@item Z C
-@kindex Z C (Summary)
-@findex gnus-summary-catchup-all-and-exit
-Mark all articles, even the ticked ones, as read and then exit
-(@code{gnus-summary-catchup-all-and-exit}).
-
-@item Z n
-@kindex Z n (Summary)
-@findex gnus-summary-catchup-and-goto-next-group
-Mark all articles as read and go to the next group
-(@code{gnus-summary-catchup-and-goto-next-group}).
-
-@item Z R
-@kindex Z R (Summary)
-@findex gnus-summary-reselect-current-group
-Exit this group, and then enter it again
-(@code{gnus-summary-reselect-current-group}).  If given a prefix, select
-all articles, both read and unread.
-
-@item Z G
-@itemx M-g
-@kindex Z G (Summary)
-@kindex M-g (Summary)
-@findex gnus-summary-rescan-group
-@c @icon{gnus-summary-mail-get}
-Exit the group, check for new articles in the group, and select the
-group (@code{gnus-summary-rescan-group}).  If given a prefix, select all
-articles, both read and unread.
-
-@item Z N
-@kindex Z N (Summary)
-@findex gnus-summary-next-group
-Exit the group and go to the next group
-(@code{gnus-summary-next-group}).
-
-@item Z P
-@kindex Z P (Summary)
-@findex gnus-summary-prev-group
-Exit the group and go to the previous group
-(@code{gnus-summary-prev-group}).
-
-@item Z s
-@kindex Z s (Summary)
-@findex gnus-summary-save-newsrc
-Save the current number of read/marked articles in the dribble buffer
-and then save the dribble buffer (@code{gnus-summary-save-newsrc}).  If
-given a prefix, also save the @file{.newsrc} file(s).  Using this
-command will make exit without updating (the @kbd{Q} command) worthless.
-@end table
-
-@vindex gnus-exit-group-hook
-@code{gnus-exit-group-hook} is called when you exit the current
-group.
-
-@findex gnus-summary-wake-up-the-dead
-@findex gnus-dead-summary-mode
-@vindex gnus-kill-summary-on-exit
-If you're in the habit of exiting groups, and then changing your mind
-about it, you might set @code{gnus-kill-summary-on-exit} to @code{nil}.
-If you do that, Gnus won't kill the summary buffer when you exit it.
-(Quelle surprise!)  Instead it will change the name of the buffer to
-something like @samp{*Dead Summary ... *} and install a minor mode
-called @code{gnus-dead-summary-mode}.  Now, if you switch back to this
-buffer, you'll find that all keys are mapped to a function called
-@code{gnus-summary-wake-up-the-dead}.  So tapping any keys in a dead
-summary buffer will result in a live, normal summary buffer.
-
-There will never be more than one dead summary buffer at any one time.
-
-@vindex gnus-use-cross-reference
-The data on the current group will be updated (which articles you have
-read, which articles you have replied to, etc.) when you exit the
-summary buffer.  If the @code{gnus-use-cross-reference} variable is
-@code{t} (which is the default), articles that are cross-referenced to
-this group and are marked as read, will also be marked as read in the
-other subscribed groups they were cross-posted to.  If this variable is
-neither @code{nil} nor @code{t}, the article will be marked as read in
-both subscribed and unsubscribed groups (@pxref{Crosspost Handling}).
-
-
-@node Crosspost Handling
-@section Crosspost Handling
-
-@cindex velveeta
-@cindex spamming
-Marking cross-posted articles as read ensures that you'll never have to
-read the same article more than once.  Unless, of course, somebody has
-posted it to several groups separately.  Posting the same article to
-several groups (not cross-posting) is called @dfn{spamming}, and you are
-by law required to send nasty-grams to anyone who perpetrates such a
-heinous crime.  You may want to try NoCeM handling to filter out spam
-(@pxref{NoCeM}).
-
-Remember: Cross-posting is kinda ok, but posting the same article
-separately to several groups is not.  Massive cross-posting (aka.
-@dfn{velveeta}) is to be avoided at all costs, and you can even use the
-@code{gnus-summary-mail-crosspost-complaint} command to complain about
-excessive crossposting (@pxref{Summary Mail Commands}).
-
-@cindex cross-posting
-@cindex Xref
-@cindex @sc{nov}
-One thing that may cause Gnus to not do the cross-posting thing
-correctly is if you use an @sc{nntp} server that supports @sc{xover}
-(which is very nice, because it speeds things up considerably) which
-does not include the @code{Xref} header in its @sc{nov} lines.  This is
-Evil, but all too common, alas, alack.  Gnus tries to Do The Right Thing
-even with @sc{xover} by registering the @code{Xref} lines of all
-articles you actually read, but if you kill the articles, or just mark
-them as read without reading them, Gnus will not get a chance to snoop
-the @code{Xref} lines out of these articles, and will be unable to use
-the cross reference mechanism.
-
-@cindex LIST overview.fmt
-@cindex overview.fmt
-To check whether your @sc{nntp} server includes the @code{Xref} header
-in its overview files, try @samp{telnet your.nntp.server nntp},
-@samp{MODE READER} on @code{inn} servers, and then say @samp{LIST
-overview.fmt}.  This may not work, but if it does, and the last line you
-get does not read @samp{Xref:full}, then you should shout and whine at
-your news admin until she includes the @code{Xref} header in the
-overview files.
-
-@vindex gnus-nov-is-evil
-If you want Gnus to get the @code{Xref}s right all the time, you have to
-set @code{gnus-nov-is-evil} to @code{t}, which slows things down
-considerably.
-
-C'est la vie.
-
-For an alternative approach, @pxref{Duplicate Suppression}.
-
-
-@node Duplicate Suppression
-@section Duplicate Suppression
-
-By default, Gnus tries to make sure that you don't have to read the same
-article more than once by utilizing the crossposting mechanism
-(@pxref{Crosspost Handling}).  However, that simple and efficient
-approach may not work satisfactory for some users for various
-reasons.
-
-@enumerate
-@item
-The @sc{nntp} server may fail to generate the @code{Xref} header.  This
-is evil and not very common.
-
-@item
-The @sc{nntp} server may fail to include the @code{Xref} header in the
-@file{.overview} data bases.  This is evil and all too common, alas.
-
-@item
-You may be reading the same group (or several related groups) from
-different @sc{nntp} servers.
-
-@item
-You may be getting mail that duplicates articles posted to groups.
-@end enumerate
-
-I'm sure there are other situations where @code{Xref} handling fails as
-well, but these four are the most common situations.
-
-If, and only if, @code{Xref} handling fails for you, then you may
-consider switching on @dfn{duplicate suppression}.  If you do so, Gnus
-will remember the @code{Message-ID}s of all articles you have read or
-otherwise marked as read, and then, as if by magic, mark them as read
-all subsequent times you see them---in @emph{all} groups.  Using this
-mechanism is quite likely to be somewhat inefficient, but not overly
-so.  It's certainly preferable to reading the same articles more than
-once.
-
-Duplicate suppression is not a very subtle instrument.  It's more like a
-sledge hammer than anything else.  It works in a very simple
-fashion---if you have marked an article as read, it adds this Message-ID
-to a cache.  The next time it sees this Message-ID, it will mark the
-article as read with the @samp{M} mark.  It doesn't care what group it
-saw the article in.
-
-@table @code
-@item gnus-suppress-duplicates
-@vindex gnus-suppress-duplicates
-If non-@code{nil}, suppress duplicates.
-
-@item gnus-save-duplicate-list
-@vindex gnus-save-duplicate-list
-If non-@code{nil}, save the list of duplicates to a file.  This will
-make startup and shutdown take longer, so the default is @code{nil}.
-However, this means that only duplicate articles read in a single Gnus
-session are suppressed.
-
-@item gnus-duplicate-list-length
-@vindex gnus-duplicate-list-length
-This variable says how many @code{Message-ID}s to keep in the duplicate
-suppression list.  The default is 10000.
-
-@item gnus-duplicate-file
-@vindex gnus-duplicate-file
-The name of the file to store the duplicate suppression list in.  The
-default is @file{~/News/suppression}.
-@end table
-
-If you have a tendency to stop and start Gnus often, setting
-@code{gnus-save-duplicate-list} to @code{t} is probably a good idea.  If
-you leave Gnus running for weeks on end, you may have it @code{nil}.  On
-the other hand, saving the list makes startup and shutdown much slower,
-so that means that if you stop and start Gnus often, you should set
-@code{gnus-save-duplicate-list} to @code{nil}.  Uhm.  I'll leave this up
-to you to figure out, I think.
-
-
-@node The Article Buffer
-@chapter The Article Buffer
-@cindex article buffer
-
-The articles are displayed in the article buffer, of which there is only
-one.  All the summary buffers share the same article buffer unless you
-tell Gnus otherwise.
-
-@menu
-* Hiding Headers::        Deciding what headers should be displayed.
-* Using MIME::            Pushing articles through @sc{mime} before reading them.
-* Customizing Articles::  Tailoring the look of the articles.
-* Article Keymap::        Keystrokes available in the article buffer.
-* Misc Article::          Other stuff.
-@end menu
-
-
-@node Hiding Headers
-@section Hiding Headers
-@cindex hiding headers
-@cindex deleting headers
-
-The top section of each article is the @dfn{head}.  (The rest is the
-@dfn{body}, but you may have guessed that already.)
-
-@vindex gnus-show-all-headers
-There is a lot of useful information in the head: the name of the person
-who wrote the article, the date it was written and the subject of the
-article.  That's well and nice, but there's also lots of information
-most people do not want to see---what systems the article has passed
-through before reaching you, the @code{Message-ID}, the
-@code{References}, etc. ad nauseum---and you'll probably want to get rid
-of some of those lines.  If you want to keep all those lines in the
-article buffer, you can set @code{gnus-show-all-headers} to @code{t}.
-
-Gnus provides you with two variables for sifting headers:
-
-@table @code
-
-@item gnus-visible-headers
-@vindex gnus-visible-headers
-If this variable is non-@code{nil}, it should be a regular expression
-that says what headers you wish to keep in the article buffer.  All
-headers that do not match this variable will be hidden.
-
-For instance, if you only want to see the name of the person who wrote
-the article and the subject, you'd say:
-
-@lisp
-(setq gnus-visible-headers "^From:\\|^Subject:")
-@end lisp
-
-This variable can also be a list of regexps to match headers to
-remain visible.
-
-@item gnus-ignored-headers
-@vindex gnus-ignored-headers
-This variable is the reverse of @code{gnus-visible-headers}.  If this
-variable is set (and @code{gnus-visible-headers} is @code{nil}), it
-should be a regular expression that matches all lines that you want to
-hide.  All lines that do not match this variable will remain visible.
-
-For instance, if you just want to get rid of the @code{References} line
-and the @code{Xref} line, you might say:
-
-@lisp
-(setq gnus-ignored-headers "^References:\\|^Xref:")
-@end lisp
-
-This variable can also be a list of regexps to match headers to
-be removed.
-
-Note that if @code{gnus-visible-headers} is non-@code{nil}, this
-variable will have no effect.
-
-@end table
-
-@vindex gnus-sorted-header-list
-Gnus can also sort the headers for you.  (It does this by default.)  You
-can control the sorting by setting the @code{gnus-sorted-header-list}
-variable.  It is a list of regular expressions that says in what order
-the headers are to be displayed.
-
-For instance, if you want the name of the author of the article first,
-and then the subject, you might say something like:
-
-@lisp
-(setq gnus-sorted-header-list '("^From:" "^Subject:"))
-@end lisp
-
-Any headers that are to remain visible, but are not listed in this
-variable, will be displayed in random order after all the headers listed in this variable.
-
-@findex gnus-article-hide-boring-headers
-@vindex gnus-boring-article-headers
-You can hide further boring headers by setting
-@code{gnus-treat-hide-boring-header} to @code{head}.  What this function
-does depends on the @code{gnus-boring-article-headers} variable.  It's a
-list, but this list doesn't actually contain header names.  Instead is
-lists various @dfn{boring conditions} that Gnus can check and remove
-from sight.
-
-These conditions are:
-@table @code
-@item empty
-Remove all empty headers.
-@item followup-to
-Remove the @code{Followup-To} header if it is identical to the
-@code{Newsgroups} header.
-@item reply-to
-Remove the @code{Reply-To} header if it lists the same address as the
-@code{From} header.
-@item newsgroups
-Remove the @code{Newsgroups} header if it only contains the current group
-name.
-@item date
-Remove the @code{Date} header if the article is less than three days
-old.
-@item long-to
-Remove the @code{To} header if it is very long.
-@item many-to
-Remove all @code{To} headers if there are more than one.
-@end table
-
-To include the four three elements, you could say something like;
-
-@lisp
-(setq gnus-boring-article-headers
-      '(empty followup-to reply-to))
-@end lisp
-
-This is also the default value for this variable.
-
-
-@node Using MIME
-@section Using @sc{mime}
-@cindex @sc{mime}
-
-Mime is a standard for waving your hands through the air, aimlessly,
-while people stand around yawning.
-
-@sc{mime}, however, is a standard for encoding your articles, aimlessly,
-while all newsreaders die of fear.
-
-@sc{mime} may specify what character set the article uses, the encoding
-of the characters, and it also makes it possible to embed pictures and
-other naughty stuff in innocent-looking articles.
-
-@vindex gnus-display-mime-function
-@findex gnus-display-mime
-Gnus pushes @sc{mime} articles through @code{gnus-display-mime-function}
-to display the @sc{mime} parts.  This is @code{gnus-display-mime} by
-default, which creates a bundle of clickable buttons that can be used to
-display, save and manipulate the @sc{mime} objects.
-
-The following commands are available when you have placed point over a
-@sc{mime} button:
-
-@table @kbd
-@findex gnus-article-press-button
-@item RET (Article)
-@itemx BUTTON-2 (Article)
-Toggle displaying of the @sc{mime} object
-(@code{gnus-article-press-button}).
-
-@findex gnus-mime-view-part
-@item M-RET (Article)
-@itemx v (Article)
-Prompt for a method, and then view the @sc{mime} object using this
-method (@code{gnus-mime-view-part}).
-
-@findex gnus-mime-save-part
-@item o (Article)
-Prompt for a file name, and then save the @sc{mime} object
-(@code{gnus-mime-save-part}).
-
-@findex gnus-mime-copy-part
-@item c (Article)
-Copy the @sc{mime} object to a fresh buffer and display this buffer
-(@code{gnus-mime-copy-part}).
-
-@findex gnus-mime-view-part-as-type
-@item t (Article)
-View the @sc{mime} object as if it were a different @sc{mime} media type
-(@code{gnus-mime-view-part-as-type}. 
-
-@findex gnus-mime-pipe-part
-@item | (Article)
-Output the @sc{mime} object to a process (@code{gnus-mime-pipe-part}).
-@end table
-
-Gnus will display some @sc{mime} objects automatically.  The way Gnus
-determines which parts to do this with is described in the Emacs MIME
-manual.
-
-It might be best to just use the toggling functions from the article
-buffer to avoid getting nasty surprises.  (For instance, you enter the
-group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has
-decoded the sound file in the article and some horrible sing-a-long song
-comes screaming out your speakers, and you can't find the volume button,
-because there isn't one, and people are starting to look at you, and you
-try to stop the program, but you can't, and you can't find the program
-to control the volume, and everybody else in the room suddenly decides
-to look at you disdainfully, and you'll feel rather stupid.)
-
-Any similarity to real events and people is purely coincidental.  Ahem.
-
-Also see @pxref{MIME Commands}.
-
-
-@node Customizing Articles
-@section Customizing Articles
-@cindex article customization
-
-A slew of functions for customizing how the articles are to look like
-exist.  You can call these functions interactively, or you can have them
-called automatically when you select the articles.
-
-To have them called automatically, you should set the corresponding
-``treatment'' variable.  For instance, to have headers hidden, you'd set
-@code{gnus-treat-hide-headers}.  Below is a list of variables that can
-be set, but first we discuss the values these variables can have.
-
-Note: Some values, while valid, make little sense.  Check the list below
-for sensible values.
-
-@enumerate
-@item
-@code{nil}: Don't do this treatment.
-
-@item
-@code{t}: Do this treatment on all body parts.
-
-@item
-@code{head}: Do the treatment on the headers.
-
-@item
-@code{last}: Do this treatment on the last part.
-
-@item
-An integer: Do this treatment on all body parts that have a length less
-than this number.
-
-@item
-A list of strings: Do this treatment on all body parts that are in
-articles that are read in groups that have names that match one of the
-regexps in the list.
-
-@item
-A list where the first element is not a string:
-
-The list is evaluated recursively.  The first element of the list is a
-predicate.  The following predicates are recognized: @code{or},
-@code{and}, @code{not} and @code{typep}.  Here's an example:
-
-@lisp
-(or last
-    (typep "text/x-vcard"))
-@end lisp
-
-@end enumerate
-
-You may have noticed that the word @dfn{part} is used here.  This refers
-to the fact that some messages are @sc{mime} multipart articles that may
-be divided into several parts.  Articles that are not multiparts are
-considered to contain just a single part.
-
-@vindex gnus-article-treat-types
-Are the treatments applied to all sorts of multipart parts?  Yes, if you
-want to, but by default, only @samp{text/plain} parts are given the
-treatment.  This is controlled by the @code{gnus-article-treat-types}
-variable, which is a list of regular expressions that are matched to the
-type of the part.  This variable is ignored if the value of the
-controlling variable is a predicate list, as described above.
-
-The following treatment options are available.  The easiest way to
-customize this is to examine the @code{gnus-article-treat} customization
-group. Values in brackets are suggested sensible values. Others are possible
-but those listed are probably sufficient for most people.
-
-@table @code
-@item gnus-treat-highlight-signature (t, last)
-@item gnus-treat-buttonize (t, integer)
-@item gnus-treat-buttonize-head (head)
-@item gnus-treat-emphasize (t, head, integer)
-@item gnus-treat-fill-article (t, integer)
-@item gnus-treat-strip-cr (t, integer)
-@item gnus-treat-hide-headers (head)
-@item gnus-treat-hide-boring-headers (head)
-@item gnus-treat-hide-signature (t, last)
-@item gnus-treat-hide-citation (t, integer)
-@item gnus-treat-strip-pgp (t, last, integer)
-@item gnus-treat-strip-pem (t, last, integer)
-@item gnus-treat-highlight-headers (head)
-@item gnus-treat-highlight-citation (t, integer)
-@item gnus-treat-highlight-signature (t, last, integer)
-@item gnus-treat-date-ut (head)
-@item gnus-treat-date-local (head)
-@item gnus-treat-date-lapsed (head)
-@item gnus-treat-date-original (head)
-@item gnus-treat-strip-headers-in-body (t, integer)
-@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
-@item gnus-treat-strip-leading-blank-lines (t, integer)
-@item gnus-treat-strip-multiple-blank-lines (t, integer)
-@item gnus-treat-overstrike (t, integer)
-@item gnus-treat-display-xface (head)
-@item gnus-treat-display-smileys (t, integer)
-@item gnus-treat-display-picons (head)
-@item gnus-treat-capitalize-sentences (t, integer)
-@item gnus-treat-fill-long-lines (t, integer)
-@item gnus-treat-play-sounds
-@item gnus-treat-translate
-@end table
-
-@vindex gnus-part-display-hook
-You can, of course, write your own functions to be called from
-@code{gnus-part-display-hook}.  The functions are called narrowed to the
-part, and you can do anything you like, pretty much.  There is no
-information that you have to keep in the buffer---you can change
-everything.  
-
-
-@node Article Keymap
-@section Article Keymap
-
-Most of the keystrokes in the summary buffer can also be used in the
-article buffer.  They should behave as if you typed them in the summary
-buffer, which means that you don't actually have to have a summary
-buffer displayed while reading.  You can do it all from the article
-buffer.
-
-A few additional keystrokes are available:
-
-@table @kbd
-
-@item SPACE
-@kindex SPACE (Article)
-@findex gnus-article-next-page
-Scroll forwards one page (@code{gnus-article-next-page}).
-
-@item DEL
-@kindex DEL (Article)
-@findex gnus-article-prev-page
-Scroll backwards one page (@code{gnus-article-prev-page}).
-
-@item C-c ^
-@kindex C-c ^ (Article)
-@findex gnus-article-refer-article
-If point is in the neighborhood of a @code{Message-ID} and you press
-@kbd{C-c ^}, Gnus will try to get that article from the server
-(@code{gnus-article-refer-article}).
-
-@item C-c C-m
-@kindex C-c C-m (Article)
-@findex gnus-article-mail
-Send a reply to the address near point (@code{gnus-article-mail}).  If
-given a prefix, include the mail.
-
-@item s
-@kindex s (Article)
-@findex gnus-article-show-summary
-Reconfigure the buffers so that the summary buffer becomes visible
-(@code{gnus-article-show-summary}).
-
-@item ?
-@kindex ? (Article)
-@findex gnus-article-describe-briefly
-Give a very brief description of the available keystrokes
-(@code{gnus-article-describe-briefly}).
-
-@item TAB
-@kindex TAB (Article)
-@findex gnus-article-next-button
-Go to the next button, if any (@code{gnus-article-next-button}).  This
-only makes sense if you have buttonizing turned on.
-
-@item M-TAB
-@kindex M-TAB (Article)
-@findex gnus-article-prev-button
-Go to the previous button, if any (@code{gnus-article-prev-button}).
-
-@end table
-
-
-@node Misc Article
-@section Misc Article
-
-@table @code
-
-@item gnus-single-article-buffer
-@vindex gnus-single-article-buffer
-If non-@code{nil}, use the same article buffer for all the groups.
-(This is the default.)  If @code{nil}, each group will have its own
-article buffer.
-
-@vindex gnus-article-decode-hook
-@item gnus-article-decode-hook
-@cindex MIME
-Hook used to decode @sc{mime} articles.  The default value is
-@code{(article-decode-charset article-decode-encoded-words)}
-
-@vindex gnus-article-prepare-hook
-@item gnus-article-prepare-hook
-This hook is called right after the article has been inserted into the
-article buffer.  It is mainly intended for functions that do something
-depending on the contents; it should probably not be used for changing
-the contents of the article buffer.
-
-@item gnus-article-mode-hook
-@vindex gnus-article-mode-hook
-Hook called in article mode buffers.
-
-@item gnus-article-mode-syntax-table
-@vindex gnus-article-mode-syntax-table
-Syntax table used in article buffers.  It is initialized from
-@code{text-mode-syntax-table}.
-
-@vindex gnus-article-mode-line-format
-@item gnus-article-mode-line-format
-This variable is a format string along the same lines as
-@code{gnus-summary-mode-line-format} (@pxref{Mode Line Formatting}).  It
-accepts the same format specifications as that variable, with one
-extension:
-
-@table @samp
-@item w
-The @dfn{wash status} of the article.  This is a short string with one
-character for each possible article wash operation that may have been
-performed.
-@item m
-The number of @sc{mime} parts in the article.
-@end table
-
-@vindex gnus-break-pages
-
-@item gnus-break-pages
-Controls whether @dfn{page breaking} is to take place.  If this variable
-is non-@code{nil}, the articles will be divided into pages whenever a
-page delimiter appears in the article.  If this variable is @code{nil},
-paging will not be done.
-
-@item gnus-page-delimiter
-@vindex gnus-page-delimiter
-This is the delimiter mentioned above.  By default, it is @samp{^L}
-(formfeed).
-@end table
-
-
-@node Composing Messages
-@chapter Composing Messages
-@cindex composing messages
-@cindex messages
-@cindex mail
-@cindex sending mail
-@cindex reply
-@cindex followup
-@cindex post
-
-@kindex C-c C-c (Post)
-All commands for posting and mailing will put you in a message buffer
-where you can edit the article all you like, before you send the article
-by pressing @kbd{C-c C-c}.  @xref{Top, , Top, message, The Message
-Manual}.  If you are in a foreign news group, and you wish to post the
-article using the foreign server, you can give a prefix to @kbd{C-c C-c}
-to make Gnus try to post using the foreign server.
-
-@menu
-* Mail::                 Mailing and replying.
-* Post::                 Posting and following up.
-* Posting Server::       What server should you post via?
-* Mail and Post::        Mailing and posting at the same time.
-* Archived Messages::    Where Gnus stores the messages you've sent.
-* Posting Styles::       An easier way to specify who you are.
-* Drafts::               Postponing messages and rejected messages.
-* Rejected Articles::    What happens if the server doesn't like your article?
-@end menu
-
-Also see @pxref{Canceling and Superseding} for information on how to
-remove articles you shouldn't have posted.
-
-
-@node Mail
-@section Mail
-
-Variables for customizing outgoing mail:
-
-@table @code
-@item gnus-uu-digest-headers
-@vindex gnus-uu-digest-headers
-List of regexps to match headers included in digested messages.  The
-headers will be included in the sequence they are matched.
-
-@item gnus-add-to-list
-@vindex gnus-add-to-list
-If non-@code{nil}, add a @code{to-list} group parameter to mail groups
-that have none when you do a @kbd{a}.
-
-@end table
-
-
-@node Post
-@section Post
-
-Variables for composing news articles:
-
-@table @code
-@item gnus-sent-message-ids-file
-@vindex gnus-sent-message-ids-file
-Gnus will keep a @code{Message-ID} history file of all the mails it has
-sent.  If it discovers that it has already sent a mail, it will ask the
-user whether to re-send the mail.  (This is primarily useful when
-dealing with @sc{soup} packets and the like where one is apt to send the
-same packet multiple times.)  This variable says what the name of this
-history file is.  It is @file{~/News/Sent-Message-IDs} by default.  Set
-this variable to @code{nil} if you don't want Gnus to keep a history
-file.
-
-@item gnus-sent-message-ids-length
-@vindex gnus-sent-message-ids-length
-This variable says how many @code{Message-ID}s to keep in the history
-file.  It is 1000 by default.
-
-@end table
-
-
-@node Posting Server
-@section Posting Server
-
-When you press those magical @kbd{C-c C-c} keys to ship off your latest
-(extremely intelligent, of course) article, where does it go?
-
-Thank you for asking.  I hate you.
-
-@vindex gnus-post-method
-
-It can be quite complicated.  Normally, Gnus will use the same native
-server.  However.  If your native server doesn't allow posting, just
-reading, you probably want to use some other server to post your
-(extremely intelligent and fabulously interesting) articles.  You can
-then set the @code{gnus-post-method} to some other method:
-
-@lisp
-(setq gnus-post-method '(nnspool ""))
-@end lisp
-
-Now, if you've done this, and then this server rejects your article, or
-this server is down, what do you do then?  To override this variable you
-can use a non-zero prefix to the @kbd{C-c C-c} command to force using
-the ``current'' server for posting.
-
-If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command,
-Gnus will prompt you for what method to use for posting.
-
-You can also set @code{gnus-post-method} to a list of select methods.
-If that's the case, Gnus will always prompt you for what method to use
-for posting.
-
-Finally, if you want to always post using the same select method as
-you're reading from (which might be convenient if you're reading lots of
-groups from different private servers), you can set this variable to
-@code{current}.
-
-
-@node Mail and Post
-@section Mail and Post
-
-Here's a list of variables relevant to both mailing and
-posting:
-
-@table @code
-@item gnus-mailing-list-groups
-@findex gnus-mailing-list-groups
-@cindex mailing lists
-
-If your news server offers groups that are really mailing lists
-gatewayed to the @sc{nntp} server, you can read those groups without
-problems, but you can't post/followup to them without some difficulty.
-One solution is to add a @code{to-address} to the group parameters
-(@pxref{Group Parameters}).  An easier thing to do is set the
-@code{gnus-mailing-list-groups} to a regexp that matches the groups that
-really are mailing lists.  Then, at least, followups to the mailing
-lists will work most of the time.  Posting to these groups (@kbd{a}) is
-still a pain, though.
-
-@end table
-
-You may want to do spell-checking on messages that you send out.  Or, if
-you don't want to spell-check by hand, you could add automatic
-spell-checking via the @code{ispell} package:
-
-@cindex ispell
-@findex ispell-message
-@lisp
-(add-hook 'message-send-hook 'ispell-message)
-@end lisp
-
-
-@node Archived Messages
-@section Archived Messages
-@cindex archived messages
-@cindex sent messages
-
-Gnus provides a few different methods for storing the mail and news you
-send.  The default method is to use the @dfn{archive virtual server} to
-store the messages.  If you want to disable this completely, the
-@code{gnus-message-archive-group} variable should be @code{nil}, which
-is the default.
-
-@vindex gnus-message-archive-method
-@code{gnus-message-archive-method} says what virtual server Gnus is to
-use to store sent messages.  The default is:
-
-@lisp
-(nnfolder "archive"
-          (nnfolder-directory   "~/Mail/archive")
-          (nnfolder-active-file "~/Mail/archive/active")
-          (nnfolder-get-new-mail nil)
-          (nnfolder-inhibit-expiry t))
-@end lisp
-
-You can, however, use any mail select method (@code{nnml},
-@code{nnmbox}, etc.).  @code{nnfolder} is a quite likeable select method
-for doing this sort of thing, though.  If you don't like the default
-directory chosen, you could say something like:
-
-@lisp
-(setq gnus-message-archive-method
-      '(nnfolder "archive"
-                 (nnfolder-inhibit-expiry t)
-                 (nnfolder-active-file "~/News/sent-mail/active")
-                 (nnfolder-directory "~/News/sent-mail/")))
-@end lisp
-
-@vindex gnus-message-archive-group
-@cindex Gcc
-Gnus will insert @code{Gcc} headers in all outgoing messages that point
-to one or more group(s) on that server.  Which group to use is
-determined by the @code{gnus-message-archive-group} variable.
-
-This variable can be used to do the following:
-
-@itemize @bullet
-@item a string
-Messages will be saved in that group.
-@item a list of strings
-Messages will be saved in all those groups.
-@item an alist of regexps, functions and forms
-When a key ``matches'', the result is used.
-@item @code{nil}
-No message archiving will take place.  This is the default.
-@end itemize
-
-Let's illustrate:
-
-Just saving to a single group called @samp{MisK}:
-@lisp
-(setq gnus-message-archive-group "MisK")
-@end lisp
-
-Saving to two groups, @samp{MisK} and @samp{safe}:
-@lisp
-(setq gnus-message-archive-group '("MisK" "safe"))
-@end lisp
-
-Save to different groups based on what group you are in:
-@lisp
-(setq gnus-message-archive-group
-      '(("^alt" "sent-to-alt")
-        ("mail" "sent-to-mail")
-        (".*" "sent-to-misc")))
-@end lisp
-
-More complex stuff:
-@lisp
-(setq gnus-message-archive-group
-      '((if (message-news-p)
-            "misc-news"
-          "misc-mail")))
-@end lisp
-
-How about storing all news messages in one file, but storing all mail
-messages in one file per month:
-
-@lisp
-(setq gnus-message-archive-group
-      '((if (message-news-p)
-            "misc-news"
-          (concat "mail." (format-time-string "%Y-%m")))))
-@end lisp
-
-(XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
-use a different value for @code{gnus-message-archive-group} there.)
-
-Now, when you send a message off, it will be stored in the appropriate
-group.  (If you want to disable storing for just one particular message,
-you can just remove the @code{Gcc} header that has been inserted.)  The
-archive group will appear in the group buffer the next time you start
-Gnus, or the next time you press @kbd{F} in the group buffer.  You can
-enter it and read the articles in it just like you'd read any other
-group.  If the group gets really big and annoying, you can simply rename
-if (using @kbd{G r} in the group buffer) to something
-nice---@samp{misc-mail-september-1995}, or whatever.  New messages will
-continue to be stored in the old (now empty) group.
-
-That's the default method of archiving sent messages.  Gnus offers a
-different way for the people who don't like the default method.  In that
-case you should set @code{gnus-message-archive-group} to @code{nil};
-this will disable archiving.
-
-@table @code
-@item gnus-outgoing-message-group
-@vindex gnus-outgoing-message-group
-All outgoing messages will be put in this group.  If you want to store
-all your outgoing mail and articles in the group @samp{nnml:archive},
-you set this variable to that value.  This variable can also be a list of
-group names.
-
-If you want to have greater control over what group to put each
-message in, you can set this variable to a function that checks the
-current newsgroup name and then returns a suitable group name (or list
-of names).
-
-This variable can be used instead of @code{gnus-message-archive-group},
-but the latter is the preferred method.
-@end table
-
-
-@node Posting Styles
-@section Posting Styles
-@cindex posting styles
-@cindex styles
-
-All them variables, they make my head swim.
-
-So what if you want a different @code{Organization} and signature based
-on what groups you post to?  And you post both from your home machine
-and your work machine, and you want different @code{From} lines, and so
-on?
-
-@vindex gnus-posting-styles
-One way to do stuff like that is to write clever hooks that change the
-variables you need to have changed.  That's a bit boring, so somebody
-came up with the bright idea of letting the user specify these things in
-a handy alist.  Here's an example of a @code{gnus-posting-styles}
-variable:
-
-@lisp
-((".*"
-  (signature "Peace and happiness")
-  (organization "What me?"))
- ("^comp"
-  (signature "Death to everybody"))
- ("comp.emacs.i-love-it"
-  (organization "Emacs is it")))
-@end lisp
-
-As you might surmise from this example, this alist consists of several
-@dfn{styles}.  Each style will be applicable if the first element
-``matches'', in some form or other.  The entire alist will be iterated
-over, from the beginning towards the end, and each match will be
-applied, which means that attributes in later styles that match override
-the same attributes in earlier matching styles.  So
-@samp{comp.programming.literate} will have the @samp{Death to everybody}
-signature and the @samp{What me?} @code{Organization} header.
-
-The first element in each style is called the @code{match}.  If it's a
-string, then Gnus will try to regexp match it against the group name.
-If it is the symbol @code{header}, then Gnus will look for header that
-match the next element in the match, and compare that to the last header
-in the match.  If it's a function symbol, that function will be called
-with no arguments.  If it's a variable symbol, then the variable will be
-referenced.  If it's a list, then that list will be @code{eval}ed.  In
-any case, if this returns a non-@code{nil} value, then the style is said
-to @dfn{match}.
-
-Each style may contain a arbitrary amount of @dfn{attributes}.  Each
-attribute consists of a @code{(@var{name} . @var{value})} pair.  The
-attribute name can be one of @code{signature}, @code{signature-file},
-@code{organization}, @code{address}, @code{name} or @code{body}.  The
-attribute name can also be a string.  In that case, this will be used as
-a header name, and the value will be inserted in the headers of the
-article.  If the attribute name is @code{eval}, the form is evaluated,
-and the result is thrown away.
-
-The attribute value can be a string (used verbatim), a function with
-zero arguments (the return value will be used), a variable (its value
-will be used) or a list (it will be @code{eval}ed and the return value
-will be used).  The functions and sexps are called/@code{eval}ed in the
-message buffer that is being set up.  The headers of the current article
-are available through the @code{message-reply-headers} variable.
-
-If you wish to check whether the message you are about to compose is
-meant to be a news article or a mail message, you can check the values
-of the @code{message-news-p} and @code{message-mail-p} functions.
-
-@findex message-mail-p
-@findex message-news-p
-
-So here's a new example:
-
-@lisp
-(setq gnus-posting-styles
-      '((".*"
-         (signature-file "~/.signature")
-         (name "User Name")
-         ("X-Home-Page" (getenv "WWW_HOME"))
-         (organization "People's Front Against MWM"))
-        ("^rec.humor"
-         (signature my-funny-signature-randomizer))
-        ((equal (system-name) "gnarly")
-         (signature my-quote-randomizer))
-        ((message-news-p)
-         (signature my-news-signature))
-        ((header "From.*To" "larsi.*org")
-         (Organization "Somewhere, Inc."))
-        ((posting-from-work-p)
-         (signature-file "~/.work-signature")
-         (address "user@@bar.foo")
-         (body "You are fired.\n\nSincerely, your boss.")
-         (organization "Important Work, Inc"))
-        ("^nn.+:"
-         (signature-file "~/.mail-signature"))))
-@end lisp
-
-
-@node Drafts
-@section Drafts
-@cindex drafts
-
-If you are writing a message (mail or news) and suddenly remember that
-you have a steak in the oven (or some pesto in the food processor, you
-craaazy vegetarians), you'll probably wish there was a method to save
-the message you are writing so that you can continue editing it some
-other day, and send it when you feel its finished.
-
-Well, don't worry about it.  Whenever you start composing a message of
-some sort using the Gnus mail and post commands, the buffer you get will
-automatically associate to an article in a special @dfn{draft} group.
-If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
-article will be saved there.  (Auto-save files also go to the draft
-group.)
-
-@cindex nndraft
-@vindex nndraft-directory
-The draft group is a special group (which is implemented as an
-@code{nndraft} group, if you absolutely have to know) called
-@samp{nndraft:drafts}.  The variable @code{nndraft-directory} says where
-@code{nndraft} is to store its files.  What makes this group special is
-that you can't tick any articles in it or mark any articles as
-read---all articles in the group are permanently unread.
-
-If the group doesn't exist, it will be created and you'll be subscribed
-to it.  The only way to make it disappear from the Group buffer is to
-unsubscribe it.
-
-@c @findex gnus-dissociate-buffer-from-draft
-@c @kindex C-c M-d (Mail)
-@c @kindex C-c M-d (Post)
-@c @findex gnus-associate-buffer-with-draft
-@c @kindex C-c C-d (Mail)
-@c @kindex C-c C-d (Post)
-@c If you're writing some super-secret message that you later want to
-@c encode with PGP before sending, you may wish to turn the auto-saving
-@c (and association with the draft group) off.  You never know who might be
-@c interested in reading all your extremely valuable and terribly horrible
-@c and interesting secrets.  The @kbd{C-c M-d}
-@c (@code{gnus-dissociate-buffer-from-draft}) command does that for you.
-@c If you change your mind and want to turn the auto-saving back on again,
-@c @kbd{C-c C-d} (@code{gnus-associate-buffer-with-draft} does that.
-@c
-@c @vindex gnus-use-draft
-@c To leave association with the draft group off by default, set
-@c @code{gnus-use-draft} to @code{nil}.  It is @code{t} by default.
-
-@findex gnus-draft-edit-message
-@kindex D e (Draft)
-When you want to continue editing the article, you simply enter the
-draft group and push @kbd{D e} (@code{gnus-draft-edit-message}) to do
-that.  You will be placed in a buffer where you left off.
-
-Rejected articles will also be put in this draft group (@pxref{Rejected
-Articles}).
-
-@findex gnus-draft-send-all-messages
-@findex gnus-draft-send-message
-If you have lots of rejected messages you want to post (or mail) without
-doing further editing, you can use the @kbd{D s} command
-(@code{gnus-draft-send-message}).  This command understands the
-process/prefix convention (@pxref{Process/Prefix}).  The @kbd{D S}
-command (@code{gnus-draft-send-all-messages}) will ship off all messages
-in the buffer.
-
-If you have some messages that you wish not to send, you can use the
-@kbd{D t} (@code{gnus-draft-toggle-sending}) command to mark the message
-as unsendable.  This is a toggling command.
-
-
-@node Rejected Articles
-@section Rejected Articles
-@cindex rejected articles
-
-Sometimes a news server will reject an article.  Perhaps the server
-doesn't like your face.  Perhaps it just feels miserable.  Perhaps
-@emph{there be demons}.  Perhaps you have included too much cited text.
-Perhaps the disk is full.  Perhaps the server is down.
-
-These situations are, of course, totally beyond the control of Gnus.
-(Gnus, of course, loves the way you look, always feels great, has angels
-fluttering around inside of it, doesn't care about how much cited text
-you include, never runs full and never goes down.)  So Gnus saves these
-articles until some later time when the server feels better.
-
-The rejected articles will automatically be put in a special draft group
-(@pxref{Drafts}).  When the server comes back up again, you'd then
-typically enter that group and send all the articles off.
-
-
-@node Select Methods
-@chapter Select Methods
-@cindex foreign groups
-@cindex select methods
-
-A @dfn{foreign group} is a group not read by the usual (or
-default) means.  It could be, for instance, a group from a different
-@sc{nntp} server, it could be a virtual group, or it could be your own
-personal mail group.
-
-A foreign group (or any group, really) is specified by a @dfn{name} and
-a @dfn{select method}.  To take the latter first, a select method is a
-list where the first element says what backend to use (e.g. @code{nntp},
-@code{nnspool}, @code{nnml}) and the second element is the @dfn{server
-name}.  There may be additional elements in the select method, where the
-value may have special meaning for the backend in question.
-
-One could say that a select method defines a @dfn{virtual server}---so
-we do just that (@pxref{The Server Buffer}).
-
-The @dfn{name} of the group is the name the backend will recognize the
-group as.
-
-For instance, the group @samp{soc.motss} on the @sc{nntp} server
-@samp{some.where.edu} will have the name @samp{soc.motss} and select
-method @code{(nntp "some.where.edu")}.  Gnus will call this group
-@samp{nntp+some.where.edu:soc.motss}, even though the @code{nntp}
-backend just knows this group as @samp{soc.motss}.
-
-The different methods all have their peculiarities, of course.
-
-@menu
-* The Server Buffer::     Making and editing virtual servers.
-* Getting News::          Reading USENET news with Gnus.
-* Getting Mail::          Reading your personal mail with Gnus.
-* Browsing the Web::      Getting messages from a plethora of Web sources.
-* Other Sources::         Reading directories, files, SOUP packets.
-* Combined Groups::       Combining groups into one group.
-* Gnus Unplugged::        Reading news and mail offline.
-@end menu
-
-
-@node The Server Buffer
-@section The Server Buffer
-
-Traditionally, a @dfn{server} is a machine or a piece of software that
-one connects to, and then requests information from.  Gnus does not
-connect directly to any real servers, but does all transactions through
-one backend or other.  But that's just putting one layer more between
-the actual media and Gnus, so we might just as well say that each
-backend represents a virtual server.
-
-For instance, the @code{nntp} backend may be used to connect to several
-different actual @sc{nntp} servers, or, perhaps, to many different ports
-on the same actual @sc{nntp} server.  You tell Gnus which backend to
-use, and what parameters to set by specifying a @dfn{select method}.
-
-These select method specifications can sometimes become quite
-complicated---say, for instance, that you want to read from the
-@sc{nntp} server @samp{news.funet.fi} on port number 13, which
-hangs if queried for @sc{nov} headers and has a buggy select.  Ahem.
-Anyways, if you had to specify that for each group that used this
-server, that would be too much work, so Gnus offers a way of naming
-select methods, which is what you do in the server buffer.
-
-To enter the server buffer, use the @kbd{^}
-(@code{gnus-group-enter-server-mode}) command in the group buffer.
-
-@menu
-* Server Buffer Format::      You can customize the look of this buffer.
-* Server Commands::           Commands to manipulate servers.
-* Example Methods::           Examples server specifications.
-* Creating a Virtual Server:: An example session.
-* Server Variables::          Which variables to set.
-* Servers and Methods::       You can use server names as select methods.
-* Unavailable Servers::       Some servers you try to contact may be down.
-@end menu
-
-@vindex gnus-server-mode-hook
-@code{gnus-server-mode-hook} is run when creating the server buffer.
-
-
-@node Server Buffer Format
-@subsection Server Buffer Format
-@cindex server buffer format
-
-@vindex gnus-server-line-format
-You can change the look of the server buffer lines by changing the
-@code{gnus-server-line-format} variable.  This is a @code{format}-like
-variable, with some simple extensions:
-
-@table @samp
-
-@item h
-How the news is fetched---the backend name.
-
-@item n
-The name of this server.
-
-@item w
-Where the news is to be fetched from---the address.
-
-@item s
-The opened/closed/denied status of the server.
-@end table
-
-@vindex gnus-server-mode-line-format
-The mode line can also be customized by using the
-@code{gnus-server-mode-line-format} variable (@pxref{Mode Line
-Formatting}).  The following specs are understood:
-
-@table @samp
-@item S
-Server name.
-
-@item M
-Server method.
-@end table
-
-Also @pxref{Formatting Variables}.
-
-
-@node Server Commands
-@subsection Server Commands
-@cindex server commands
-
-@table @kbd
-
-@item a
-@kindex a (Server)
-@findex gnus-server-add-server
-Add a new server (@code{gnus-server-add-server}).
-
-@item e
-@kindex e (Server)
-@findex gnus-server-edit-server
-Edit a server (@code{gnus-server-edit-server}).
-
-@item SPACE
-@kindex SPACE (Server)
-@findex gnus-server-read-server
-Browse the current server (@code{gnus-server-read-server}).
-
-@item q
-@kindex q (Server)
-@findex gnus-server-exit
-Return to the group buffer (@code{gnus-server-exit}).
-
-@item k
-@kindex k (Server)
-@findex gnus-server-kill-server
-Kill the current server (@code{gnus-server-kill-server}).
-
-@item y
-@kindex y (Server)
-@findex gnus-server-yank-server
-Yank the previously killed server (@code{gnus-server-yank-server}).
-
-@item c
-@kindex c (Server)
-@findex gnus-server-copy-server
-Copy the current server (@code{gnus-server-copy-server}).
-
-@item l
-@kindex l (Server)
-@findex gnus-server-list-servers
-List all servers (@code{gnus-server-list-servers}).
-
-@item s
-@kindex s (Server)
-@findex gnus-server-scan-server
-Request that the server scan its sources for new articles
-(@code{gnus-server-scan-server}).  This is mainly sensible with mail
-servers.
-
-@item g
-@kindex g (Server)
-@findex gnus-server-regenerate-server
-Request that the server regenerate all its data structures
-(@code{gnus-server-regenerate-server}).  This can be useful if you have
-a mail backend that has gotten out of synch.
-
-@end table
-
-
-@node Example Methods
-@subsection Example Methods
-
-Most select methods are pretty simple and self-explanatory:
-
-@lisp
-(nntp "news.funet.fi")
-@end lisp
-
-Reading directly from the spool is even simpler:
-
-@lisp
-(nnspool "")
-@end lisp
-
-As you can see, the first element in a select method is the name of the
-backend, and the second is the @dfn{address}, or @dfn{name}, if you
-will.
-
-After these two elements, there may be an arbitrary number of
-@code{(@var{variable} @var{form})} pairs.
-
-To go back to the first example---imagine that you want to read from
-port 15 on that machine.  This is what the select method should
-look like then:
-
-@lisp
-(nntp "news.funet.fi" (nntp-port-number 15))
-@end lisp
-
-You should read the documentation to each backend to find out what
-variables are relevant, but here's an @code{nnmh} example:
-
-@code{nnmh} is a mail backend that reads a spool-like structure.  Say
-you have two structures that you wish to access: One is your private
-mail spool, and the other is a public one.  Here's the possible spec for
-your private mail:
-
-@lisp
-(nnmh "private" (nnmh-directory "~/private/mail/"))
-@end lisp
-
-(This server is then called @samp{private}, but you may have guessed
-that.)
-
-Here's the method for a public spool:
-
-@lisp
-(nnmh "public"
-      (nnmh-directory "/usr/information/spool/")
-      (nnmh-get-new-mail nil))
-@end lisp
-
-If you are behind a firewall and only have access to the @sc{nntp}
-server from the firewall machine, you can instruct Gnus to @code{rlogin}
-on the firewall machine and telnet from there to the @sc{nntp} server.
-Doing this can be rather fiddly, but your virtual server definition
-should probably look something like this:
-
-@lisp
-(nntp "firewall"
-      (nntp-address "the.firewall.machine")
-      (nntp-open-connection-function nntp-open-rlogin)
-      (nntp-end-of-line "\n")
-      (nntp-rlogin-parameters
-       ("telnet" "the.real.nntp.host" "nntp")))
-@end lisp
-
-If you want to use the wonderful @code{ssh} program to provide a
-compressed connection over the modem line, you could create a virtual
-server that would look something like this:
-
-@lisp
-(nntp "news"
-       (nntp-address "copper.uio.no")
-       (nntp-rlogin-program "ssh")
-       (nntp-open-connection-function nntp-open-rlogin)
-       (nntp-end-of-line "\n")
-       (nntp-rlogin-parameters
-        ("telnet" "news.uio.no" "nntp")))
-@end lisp
-
-This means that you have to have set up @code{ssh-agent} correctly to
-provide automatic authorization, of course.  And to get a compressed
-connection, you have to have the @samp{Compression} option in the
-@code{ssh} @file{config} file.
-
-
-@node Creating a Virtual Server
-@subsection Creating a Virtual Server
-
-If you're saving lots of articles in the cache by using persistent
-articles, you may want to create a virtual server to read the cache.
-
-First you need to add a new server.  The @kbd{a} command does that.  It
-would probably be best to use @code{nnspool} to read the cache.  You
-could also use @code{nnml} or @code{nnmh}, though.
-
-Type @kbd{a nnspool RET cache RET}.
-
-You should now have a brand new @code{nnspool} virtual server called
-@samp{cache}.  You now need to edit it to have the right definitions.
-Type @kbd{e} to edit the server.  You'll be entered into a buffer that
-will contain the following:
-
-@lisp
-(nnspool "cache")
-@end lisp
-
-Change that to:
-
-@lisp
-(nnspool "cache"
-         (nnspool-spool-directory "~/News/cache/")
-         (nnspool-nov-directory "~/News/cache/")
-         (nnspool-active-file "~/News/cache/active"))
-@end lisp
-
-Type @kbd{C-c C-c} to return to the server buffer.  If you now press
-@kbd{RET} over this virtual server, you should be entered into a browse
-buffer, and you should be able to enter any of the groups displayed.
-
-
-@node Server Variables
-@subsection Server Variables
-
-One sticky point when defining variables (both on backends and in Emacs
-in general) is that some variables are typically initialized from other
-variables when the definition of the variables is being loaded.  If you
-change the "base" variable after the variables have been loaded, you
-won't change the "derived" variables.
-
-This typically affects directory and file variables.  For instance,
-@code{nnml-directory} is @file{~/Mail/} by default, and all @code{nnml}
-directory variables are initialized from that variable, so
-@code{nnml-active-file} will be @file{~/Mail/active}.  If you define a
-new virtual @code{nnml} server, it will @emph{not} suffice to set just
-@code{nnml-directory}---you have to explicitly set all the file
-variables to be what you want them to be.  For a complete list of
-variables for each backend, see each backend's section later in this
-manual, but here's an example @code{nnml} definition:
-
-@lisp
-(nnml "public"
-      (nnml-directory "~/my-mail/")
-      (nnml-active-file "~/my-mail/active")
-      (nnml-newsgroups-file "~/my-mail/newsgroups"))
-@end lisp
-
-
-@node Servers and Methods
-@subsection Servers and Methods
-
-Wherever you would normally use a select method
-(e.g. @code{gnus-secondary-select-method}, in the group select method,
-when browsing a foreign server) you can use a virtual server name
-instead.  This could potentially save lots of typing.  And it's nice all
-over.
-
-
-@node Unavailable Servers
-@subsection Unavailable Servers
-
-If a server seems to be unreachable, Gnus will mark that server as
-@code{denied}.  That means that any subsequent attempt to make contact
-with that server will just be ignored.  ``It can't be opened,'' Gnus
-will tell you, without making the least effort to see whether that is
-actually the case or not.
-
-That might seem quite naughty, but it does make sense most of the time.
-Let's say you have 10 groups subscribed to on server
-@samp{nephelococcygia.com}.  This server is located somewhere quite far
-away from you and the machine is quite slow, so it takes 1 minute just
-to find out that it refuses connection to you today.  If Gnus were to
-attempt to do that 10 times, you'd be quite annoyed, so Gnus won't
-attempt to do that.  Once it has gotten a single ``connection refused'',
-it will regard that server as ``down''.
-
-So, what happens if the machine was only feeling unwell temporarily?
-How do you test to see whether the machine has come up again?
-
-You jump to the server buffer (@pxref{The Server Buffer}) and poke it
-with the following commands:
-
-@table @kbd
-
-@item O
-@kindex O (Server)
-@findex gnus-server-open-server
-Try to establish connection to the server on the current line
-(@code{gnus-server-open-server}).
-
-@item C
-@kindex C (Server)
-@findex gnus-server-close-server
-Close the connection (if any) to the server
-(@code{gnus-server-close-server}).
-
-@item D
-@kindex D (Server)
-@findex gnus-server-deny-server
-Mark the current server as unreachable
-(@code{gnus-server-deny-server}).
-
-@item M-o
-@kindex M-o (Server)
-@findex gnus-server-open-all-servers
-Open the connections to all servers in the buffer
-(@code{gnus-server-open-all-servers}).
-
-@item M-c
-@kindex M-c (Server)
-@findex gnus-server-close-all-servers
-Close the connections to all servers in the buffer
-(@code{gnus-server-close-all-servers}).
-
-@item R
-@kindex R (Server)
-@findex gnus-server-remove-denials
-Remove all marks to whether Gnus was denied connection from any servers
-(@code{gnus-server-remove-denials}).
-
-@end table
-
-
-@node Getting News
-@section Getting News
-@cindex reading news
-@cindex news backends
-
-A newsreader is normally used for reading news.  Gnus currently provides
-only two methods of getting news---it can read from an @sc{nntp} server,
-or it can read from a local spool.
-
-@menu
-* NNTP::               Reading news from an @sc{nntp} server.
-* News Spool::         Reading news from the local spool.
-@end menu
-
-
-@node NNTP
-@subsection @sc{nntp}
-@cindex nntp
-
-Subscribing to a foreign group from an @sc{nntp} server is rather easy.
-You just specify @code{nntp} as method and the address of the @sc{nntp}
-server as the, uhm, address.
-
-If the @sc{nntp} server is located at a non-standard port, setting the
-third element of the select method to this port number should allow you
-to connect to the right port.  You'll have to edit the group info for
-that (@pxref{Foreign Groups}).
-
-The name of the foreign group can be the same as a native group.  In
-fact, you can subscribe to the same group from as many different servers
-you feel like.  There will be no name collisions.
-
-The following variables can be used to create a virtual @code{nntp}
-server:
-
-@table @code
-
-@item nntp-server-opened-hook
-@vindex nntp-server-opened-hook
-@cindex @sc{mode reader}
-@cindex authinfo
-@cindex authentification
-@cindex nntp authentification
-@findex nntp-send-authinfo
-@findex nntp-send-mode-reader
-is run after a connection has been made.  It can be used to send
-commands to the @sc{nntp} server after it has been contacted.  By
-default it sends the command @code{MODE READER} to the server with the
-@code{nntp-send-mode-reader} function.  This function should always be
-present in this hook.
-
-@item nntp-authinfo-function
-@vindex nntp-authinfo-function
-@findex nntp-send-authinfo
-@vindex nntp-authinfo-file
-This function will be used to send @samp{AUTHINFO} to the @sc{nntp}
-server.  The default function is @code{nntp-send-authinfo}, which looks
-through your @file{~/.authinfo} (or whatever you've set the
-@code{nntp-authinfo-file} variable to) for applicable entries.  If none
-are found, it will prompt you for a login name and a password.  The
-format of the @file{~/.authinfo} file is (almost) the same as the
-@code{ftp} @file{~/.netrc} file, which is defined in the @code{ftp}
-manual page, but here are the salient facts:
-
-@enumerate
-@item
-The file contains one or more line, each of which define one server.
-
-@item
-Each line may contain an arbitrary number of token/value pairs.  The
-valid tokens include @samp{machine}, @samp{login}, @samp{password},
-@samp{default} and @samp{force}.  (The latter is not a valid
-@file{.netrc}/@code{ftp} token, which is the only way the
-@file{.authinfo} file format deviates from the @file{.netrc} file
-format.)
-
-@end enumerate
-
-Here's an example file:
-
-@example
-machine news.uio.no login larsi password geheimnis
-machine nntp.ifi.uio.no login larsi force yes
-@end example
-
-The token/value pairs may appear in any order; @samp{machine} doesn't
-have to be first, for instance.
-
-In this example, both login name and password have been supplied for the
-former server, while the latter has only the login name listed, and the
-user will be prompted for the password.  The latter also has the
-@samp{force} tag, which means that the authinfo will be sent to the
-@var{nntp} server upon connection; the default (i.e., when there is not
-@samp{force} tag) is to not send authinfo to the @var{nntp} server
-until the @var{nntp} server asks for it.
-
-You can also add @samp{default} lines that will apply to all servers
-that don't have matching @samp{machine} lines.
-
-@example
-default force yes
-@end example
-
-This will force sending @samp{AUTHINFO} commands to all servers not
-previously mentioned.
-
-Remember to not leave the @file{~/.authinfo} file world-readable.
-
-@item nntp-server-action-alist
-@vindex nntp-server-action-alist
-This is a list of regexps to match on server types and actions to be
-taken when matches are made.  For instance, if you want Gnus to beep
-every time you connect to innd, you could say something like:
-
-@lisp
-(setq nntp-server-action-alist
-      '(("innd" (ding))))
-@end lisp
-
-You probably don't want to do that, though.
-
-The default value is
-
-@lisp
-'(("nntpd 1\\.5\\.11t"
-   (remove-hook 'nntp-server-opened-hook 'nntp-send-mode-reader)))
-@end lisp
-
-This ensures that Gnus doesn't send the @code{MODE READER} command to
-nntpd 1.5.11t, since that command chokes that server, I've been told.
-
-@item nntp-maximum-request
-@vindex nntp-maximum-request
-If the @sc{nntp} server doesn't support @sc{nov} headers, this backend
-will collect headers by sending a series of @code{head} commands.  To
-speed things up, the backend sends lots of these commands without
-waiting for reply, and then reads all the replies.  This is controlled
-by the @code{nntp-maximum-request} variable, and is 400 by default.  If
-your network is buggy, you should set this to 1.
-
-@item nntp-connection-timeout
-@vindex nntp-connection-timeout
-If you have lots of foreign @code{nntp} groups that you connect to
-regularly, you're sure to have problems with @sc{nntp} servers not
-responding properly, or being too loaded to reply within reasonable
-time.  This is can lead to awkward problems, which can be helped
-somewhat by setting @code{nntp-connection-timeout}.  This is an integer
-that says how many seconds the @code{nntp} backend should wait for a
-connection before giving up.  If it is @code{nil}, which is the default,
-no timeouts are done.
-
-@c @item nntp-command-timeout
-@c @vindex nntp-command-timeout
-@c @cindex PPP connections
-@c @cindex dynamic IP addresses
-@c If you're running Gnus on a machine that has a dynamically assigned
-@c address, Gnus may become confused.  If the address of your machine
-@c changes after connecting to the @sc{nntp} server, Gnus will simply sit
-@c waiting forever for replies from the server.  To help with this
-@c unfortunate problem, you can set this command to a number.  Gnus will
-@c then, if it sits waiting for a reply from the server longer than that
-@c number of seconds, shut down the connection, start a new one, and resend
-@c the command.  This should hopefully be transparent to the user.  A
-@c likely number is 30 seconds.
-@c
-@c @item nntp-retry-on-break
-@c @vindex nntp-retry-on-break
-@c If this variable is non-@code{nil}, you can also @kbd{C-g} if Gnus
-@c hangs.  This will have much the same effect as the command timeout
-@c described above.
-
-@item nntp-server-hook
-@vindex nntp-server-hook
-This hook is run as the last step when connecting to an @sc{nntp}
-server.
-
-@findex nntp-open-rlogin
-@findex nntp-open-telnet
-@findex nntp-open-network-stream
-@item nntp-open-connection-function
-@vindex nntp-open-connection-function
-This function is used to connect to the remote system.  Four pre-made
-functions are supplied:
-
-@table @code
-@item nntp-open-network-stream
-This is the default, and simply connects to some port or other on the
-remote system.
-
-@item nntp-open-rlogin
-Does an @samp{rlogin} on the
-remote system, and then does a @samp{telnet} to the @sc{nntp} server
-available there.
-
-@code{nntp-open-rlogin}-related variables:
-
-@table @code
-
-@item nntp-rlogin-program
-@vindex nntp-rlogin-program
-Program used to log in on remote machines.  The default is @samp{rsh},
-but @samp{ssh} is a popular alternative.
-
-@item nntp-rlogin-parameters
-@vindex nntp-rlogin-parameters
-This list will be used as the parameter list given to @code{rsh}.
-
-@item nntp-rlogin-user-name
-@vindex nntp-rlogin-user-name
-User name on the remote system.
-
-@end table
-
-@item nntp-open-telnet
-Does a @samp{telnet} to the remote system and then another @samp{telnet}
-to get to the @sc{nntp} server.
-
-@code{nntp-open-telnet}-related variables:
-
-@table @code
-@item nntp-telnet-command
-@vindex nntp-telnet-command
-Command used to start @code{telnet}.
-
-@item nntp-telnet-switches
-@vindex nntp-telnet-switches
-List of strings to be used as the switches to the @code{telnet} command.
-
-@item nntp-telnet-user-name
-@vindex nntp-telnet-user-name
-User name for log in on the remote system.
-
-@item nntp-telnet-passwd
-@vindex nntp-telnet-passwd
-Password to use when logging in.
-
-@item nntp-telnet-parameters
-@vindex nntp-telnet-parameters
-A list of strings executed as a command after logging in
-via @code{telnet}.
-
-@item nntp-telnet-shell-prompt
-@vindex nntp-telnet-shell-prompt
-Regexp matching the shell prompt on the remote machine.  The default is
-@samp{bash\\|\$ *\r?$\\|> *\r?}.
-
-@item nntp-open-telnet-envuser
-@vindex nntp-open-telnet-envuser
-If non-@code{nil}, the @code{telnet} session (client and server both)
-will support the @code{ENVIRON} option and not prompt for login name.
-This works for Solaris @code{telnet}, for instance.
-
-@end table
-
-@findex nntp-open-ssl-stream
-@item nntp-open-ssl-stream
-Opens a connection to a server over a @dfn{secure} channel.  To use this
-you must have SSLay installed
-(@file{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}, and you also need
-@file{ssl.el} (from the W3 distributeion, for instance).  You then
-define a server as follows:
-
-@lisp
-;; Type `C-c C-c' after you've finished editing.
-;;
-;; "snews" is port 563 and is predefined in our /etc/services
-;;
-(nntp "snews.bar.com"
-      (nntp-open-connection-function nntp-open-ssl-stream)
-      (nntp-port-number "snews")
-      (nntp-address "snews.bar.com"))
-@end lisp
-
-@end table
-
-@item nntp-end-of-line
-@vindex nntp-end-of-line
-String to use as end-of-line marker when talking to the @sc{nntp}
-server.  This is @samp{\r\n} by default, but should be @samp{\n} when
-using @code{rlogin} to talk to the server.
-
-@item nntp-rlogin-user-name
-@vindex nntp-rlogin-user-name
-User name on the remote system when using the @code{rlogin} connect
-function.
-
-@item nntp-address
-@vindex nntp-address
-The address of the remote system running the @sc{nntp} server.
-
-@item nntp-port-number
-@vindex nntp-port-number
-Port number to connect to when using the @code{nntp-open-network-stream}
-connect function.
-
-@item nntp-buggy-select
-@vindex nntp-buggy-select
-Set this to non-@code{nil} if your select routine is buggy.
-
-@item nntp-nov-is-evil
-@vindex nntp-nov-is-evil
-If the @sc{nntp} server does not support @sc{nov}, you could set this
-variable to @code{t}, but @code{nntp} usually checks automatically whether @sc{nov}
-can be used.
-
-@item nntp-xover-commands
-@vindex nntp-xover-commands
-@cindex nov
-@cindex XOVER
-List of strings used as commands to fetch @sc{nov} lines from a
-server.  The default value of this variable is @code{("XOVER"
-"XOVERVIEW")}.
-
-@item nntp-nov-gap
-@vindex nntp-nov-gap
-@code{nntp} normally sends just one big request for @sc{nov} lines to
-the server.  The server responds with one huge list of lines.  However,
-if you have read articles 2-5000 in the group, and only want to read
-article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}
-lines that you will not need.  This variable says how
-big a gap between two consecutive articles is allowed to be before the
-@code{XOVER} request is split into several request.  Note that if your
-network is fast, setting this variable to a really small number means
-that fetching will probably be slower.  If this variable is @code{nil},
-@code{nntp} will never split requests.  The default is 5.
-
-@item nntp-prepare-server-hook
-@vindex nntp-prepare-server-hook
-A hook run before attempting to connect to an @sc{nntp} server.
-
-@item nntp-warn-about-losing-connection
-@vindex nntp-warn-about-losing-connection
-If this variable is non-@code{nil}, some noise will be made when a
-server closes connection.
-
-@item nntp-record-commands
-@vindex nntp-record-commands
-If non-@code{nil}, @code{nntp} will log all commands it sends to the
-@sc{nntp} server (along with a timestep) in the @samp{*nntp-log*}
-buffer.  This is useful if you are debugging a Gnus/@sc{nntp} connection
-that doesn't seem to work.
-
-@end table
-
-
-@node News Spool
-@subsection News Spool
-@cindex nnspool
-@cindex news spool
-
-Subscribing to a foreign group from the local spool is extremely easy,
-and might be useful, for instance, to speed up reading groups that
-contain very big articles---@samp{alt.binaries.pictures.furniture}, for
-instance.
-
-Anyways, you just specify @code{nnspool} as the method and @code{""} (or
-anything else) as the address.
-
-If you have access to a local spool, you should probably use that as the
-native select method (@pxref{Finding the News}).  It is normally faster
-than using an @code{nntp} select method, but might not be.  It depends.
-You just have to try to find out what's best at your site.
-
-@table @code
-
-@item nnspool-inews-program
-@vindex nnspool-inews-program
-Program used to post an article.
-
-@item nnspool-inews-switches
-@vindex nnspool-inews-switches
-Parameters given to the inews program when posting an article.
-
-@item nnspool-spool-directory
-@vindex nnspool-spool-directory
-Where @code{nnspool} looks for the articles.  This is normally
-@file{/usr/spool/news/}.
-
-@item nnspool-nov-directory
-@vindex nnspool-nov-directory
-Where @code{nnspool} will look for @sc{nov} files.  This is normally
-@file{/usr/spool/news/over.view/}.
-
-@item nnspool-lib-dir
-@vindex nnspool-lib-dir
-Where the news lib dir is (@file{/usr/lib/news/} by default).
-
-@item nnspool-active-file
-@vindex nnspool-active-file
-The path to the active file.
-
-@item nnspool-newsgroups-file
-@vindex nnspool-newsgroups-file
-The path to the group descriptions file.
-
-@item nnspool-history-file
-@vindex nnspool-history-file
-The path to the news history file.
-
-@item nnspool-active-times-file
-@vindex nnspool-active-times-file
-The path to the active date file.
-
-@item nnspool-nov-is-evil
-@vindex nnspool-nov-is-evil
-If non-@code{nil}, @code{nnspool} won't try to use any @sc{nov} files
-that it finds.
-
-@item nnspool-sift-nov-with-sed
-@vindex nnspool-sift-nov-with-sed
-@cindex sed
-If non-@code{nil}, which is the default, use @code{sed} to get the
-relevant portion from the overview file.  If nil, @code{nnspool} will
-load the entire file into a buffer and process it there.
-
-@end table
-
-
-@node Getting Mail
-@section Getting Mail
-@cindex reading mail
-@cindex mail
-
-Reading mail with a newsreader---isn't that just plain WeIrD? But of
-course.
-
-@menu
-* Mail in a Newsreader::         Important introductory notes.  
-* Getting Started Reading Mail:: A simple cookbook example.
-* Splitting Mail::               How to create mail groups.
-* Mail Sources::                 How to tell Gnus where to get mail from.
-* Mail Backend Variables::       Variables for customizing mail handling.
-* Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
-* Group Mail Splitting::         Use group customize to drive mail splitting.
-* Incorporating Old Mail::       What about the old mail you have?
-* Expiring Mail::                Getting rid of unwanted mail.
-* Washing Mail::                 Removing gruft from the mail you get.
-* Duplicates::                   Dealing with duplicated mail.
-* Not Reading Mail::             Using mail backends for reading other files.
-* Choosing a Mail Backend::      Gnus can read a variety of mail formats.
-@end menu
-
-
-@node Mail in a Newsreader
-@subsection Mail in a Newsreader
-
-If you are used to traditional mail readers, but have decided to switch 
-to reading mail with Gnus, you may find yourself experiencing something
-of a culture shock.
-
-Gnus does not behave like traditional mail readers.  If you want to make 
-it behave that way, you can, but it's an uphill battle.
-
-Gnus, by default, handles all its groups using the same approach.  This
-approach is very newsreaderly---you enter a group, see the new/unread
-messages, and when you read the messages, they get marked as read, and
-you don't see them any more.  (Unless you explicitly ask for them.)
-
-In particular, you do not do anything explicitly to delete messages.
-
-Does this mean that all the messages that have been marked as read are
-deleted?  How awful!
-
-But, no, it means that old messages are @dfn{expired} according to some
-scheme or other.  For news messages, the expire process is controlled by 
-the news administrator; for mail, the expire process is controlled by
-you.  The expire process for mail is covered in depth in @pxref{Expiring
-Mail}.
-
-What many Gnus users find, after using it a while for both news and
-mail, is that the transport mechanism has very little to do with how
-they want to treat a message.
-
-Many people subscribe to several mailing lists.  These are transported
-via SMTP, and are therefore mail.  But we might go for weeks without
-answering, or even reading these messages very carefully. We may not
-need to save them because if we should need to read one again, they are
-archived somewhere else.
-
-Some people have local news groups which have only a handful of readers.
-These are transported via NNTP, and are therefore news.  But we may need
-to read and answer a large fraction of the messages very carefully in
-order to do our work.  And there may not be an archive, so we may need
-to save the interesting messages the same way we would personal mail.
-
-The important distinction turns out to be not the transport mechanism,
-but other factors such as how interested we are in the subject matter,
-or how easy it is to retrieve the message if we need to read it again.
-
-Gnus provides many options for sorting mail into ``groups'' which behave
-like newsgroups, and for treating each group (whether mail or news)
-differently.
-
-Some users never get comfortable using the Gnus (ahem) paradigm and wish
-that Gnus should grow up and be a male, er, mail reader.  It is possible
-to whip Gnus into a more mailreaderly being, but, as said before, it's
-not easy.  People who prefer proper mail readers should try @sc{vm}
-instead, which is an excellent, and proper, mail reader.
-
-I don't mean to scare anybody off, but I want to make it clear that you
-may be required to learn a new way of thinking about messages.  After
-you've been subjected to The Gnus Way, you will come to love it.  I can
-guarantee it.  (At least the guy who sold me the Emacs Subliminal
-Brain-Washing Functions that I've put into Gnus did guarantee it.  You
-Will Be Assimilated.  You Love Gnus.  You Love The Gnus Mail Way.
-You Do.)
-
-
-@node Getting Started Reading Mail
-@subsection Getting Started Reading Mail
-
-It's quite easy to use Gnus to read your new mail.  You just plonk the
-mail backend of your choice into @code{gnus-secondary-select-methods},
-and things will happen automatically.
-
-For instance, if you want to use @code{nnml} (which is a "one file per
-mail" backend), you could put the following in your @file{.gnus} file:
-
-@lisp
-(setq gnus-secondary-select-methods
-      '((nnml "private")))
-@end lisp
-
-Now, the next time you start Gnus, this backend will be queried for new
-articles, and it will move all the messages in your spool file to its
-directory, which is @code{~/Mail/} by default.  The new group that will
-be created (@samp{mail.misc}) will be subscribed, and you can read it
-like any other group.
-
-You will probably want to split the mail into several groups, though:
-
-@lisp
-(setq nnmail-split-methods
-      '(("junk" "^From:.*Lars Ingebrigtsen")
-        ("crazy" "^Subject:.*die\\|^Organization:.*flabby")
-        ("other" "")))
-@end lisp
-
-This will result in three new @code{nnml} mail groups being created:
-@samp{nnml:junk}, @samp{nnml:crazy}, and @samp{nnml:other}.  All the
-mail that doesn't fit into the first two groups will be placed in the
-last group.
-
-This should be sufficient for reading mail with Gnus.  You might want to
-give the other sections in this part of the manual a perusal, though.
-Especially @pxref{Choosing a Mail Backend} and @pxref{Expiring Mail}.
-
-
-@node Splitting Mail
-@subsection Splitting Mail
-@cindex splitting mail
-@cindex mail splitting
-
-@vindex nnmail-split-methods
-The @code{nnmail-split-methods} variable says how the incoming mail is
-to be split into groups.
-
-@lisp
-(setq nnmail-split-methods
-  '(("mail.junk" "^From:.*Lars Ingebrigtsen")
-    ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
-    ("mail.other" "")))
-@end lisp
-
-This variable is a list of lists, where the first element of each of
-these lists is the name of the mail group (they do not have to be called
-something beginning with @samp{mail}, by the way), and the second
-element is a regular expression used on the header of each mail to
-determine if it belongs in this mail group.  The first string may
-contain @samp{\\1} forms, like the ones used by @code{replace-match} to
-insert sub-expressions from the matched text.  For instance:
-
-@lisp
-("list.\\1" "From:.* \\(.*\\)-list@@majordomo.com")
-@end lisp
-
-The second element can also be a function.  In that case, it will be
-called narrowed to the headers with the first element of the rule as the
-argument.  It should return a non-@code{nil} value if it thinks that the
-mail belongs in that group.
-
-The last of these groups should always be a general one, and the regular
-expression should @emph{always} be @samp{} so that it matches any mails
-that haven't been matched by any of the other regexps.  (These rules are
-processed from the beginning of the alist toward the end.  The first
-rule to make a match will "win", unless you have crossposting enabled.
-In that case, all matching rules will "win".)
-
-If you like to tinker with this yourself, you can set this variable to a
-function of your choice.  This function will be called without any
-arguments in a buffer narrowed to the headers of an incoming mail
-message.  The function should return a list of group names that it
-thinks should carry this mail message.
-
-Note that the mail backends are free to maul the poor, innocent,
-incoming headers all they want to.  They all add @code{Lines} headers;
-some add @code{X-Gnus-Group} headers; most rename the Unix mbox
-@code{From<SPACE>} line to something else.
-
-@vindex nnmail-crosspost
-The mail backends all support cross-posting.  If several regexps match,
-the mail will be ``cross-posted'' to all those groups.
-@code{nnmail-crosspost} says whether to use this mechanism or not.  Note
-that no articles are crossposted to the general (@samp{}) group.
-
-@vindex nnmail-crosspost-link-function
-@cindex crosspost
-@cindex links
-@code{nnmh} and @code{nnml} makes crossposts by creating hard links to
-the crossposted articles.  However, not all file systems support hard
-links.  If that's the case for you, set
-@code{nnmail-crosspost-link-function} to @code{copy-file}.  (This
-variable is @code{add-name-to-file} by default.)
-
-@kindex M-x nnmail-split-history
-@kindex nnmail-split-history
-If you wish to see where the previous mail split put the messages, you
-can use the @kbd{M-x nnmail-split-history} command.
-
-Gnus gives you all the opportunity you could possibly want for shooting
-yourself in the foot.  Let's say you create a group that will contain
-all the mail you get from your boss.  And then you accidentally
-unsubscribe from the group.  Gnus will still put all the mail from your
-boss in the unsubscribed group, and so, when your boss mails you ``Have
-that report ready by Monday or you're fired!'', you'll never see it and,
-come Tuesday, you'll still believe that you're gainfully employed while
-you really should be out collecting empty bottles to save up for next
-month's rent money.
-
-
-@node Mail Sources
-@subsection Mail Sources
-
-Mail can be gotten from many different sources---the mail spool, from a
-POP mail server, or from a procmail directory, for instance.
-
-@menu
-* Mail Source Specifiers::       How to specify what a mail source is.
-* Mail Source Customization::    Some variables that influence things.
-* Fetching Mail::                Using the mail source specifiers.
-@end menu
-
-
-@node Mail Source Specifiers
-@subsubsection Mail Source Specifiers
-@cindex POP
-@cindex mail server
-@cindex procmail
-@cindex mail spool
-@cindex mail source
-
-You tell Gnus how to fetch mail by setting @code{mail-sources}
-(@pxref{Fetching Mail}) to a @dfn{mail source specifier}.
-
-Here's an example:
-
-@lisp
-(pop :server "pop3.mailserver.com" :user "myname")
-@end lisp
-
-As can be observed, a mail source specifier is a list where the first
-element is a @dfn{mail source type}, followed by an arbitrary number of
-@dfn{keywords}.  Keywords that are not explicitly specified are given
-default values.
-
-The following mail source types are available:
-
-@table @code
-@item file
-Get mail from a single file; typically from the mail spool.
-
-Keywords:
-
-@table @code
-@item :path
-The path of the file.  Defaults to the value of the @code{MAIL}
-environment variable or @file{/usr/mail/spool/user-name}.
-@end table
-
-An example file mail source:
-
-@lisp
-(file :path "/usr/spool/mail/user-name")
-@end lisp
-
-Or using the default path:
-
-@lisp
-(file)
-@end lisp
-
-If the mail spool file is not located on the local machine, it's best to 
-use POP or IMAP or the like to fetch the mail.  You can not you ange-ftp 
-file names here---it has no way to lock the mail spool while moving the
-mail.
-
-If it's impossible to set up a proper server, you can use ssh instead.
-
-@lisp
-(setq mail-sources
-      '((file :prescript "ssh host bin/getmail >%t")))
-@end lisp
-
-The @samp{getmail} script would look something like the following:
-
-@example
-#!/bin/sh
-#  getmail - move mail from spool to stdout
-#  flu@@iki.fi
-
-MOVEMAIL=/usr/lib/emacs/20.3/i386-redhat-linux/movemail
-TMP=~/Mail/tmp
-rm -f $TMP; $MOVEMAIL $MAIL $TMP >/dev/null && cat $TMP
-@end example
-
-Alter this script to fit find the @samp{movemail} you want to use.
-
-
-@item directory
-Get mail from several files in a directory.  This is typically used when
-you have procmail split the incoming mail into several files.
-
-Keywords:
-
-@table @code
-@item :path
-The path of the directory where the files are.  There is no default
-value.
-
-@item :suffix
-Only files ending with this suffix are used.  The default is
-@samp{.spool}.
-
-@item :predicate
-Only files that have this predicate return non-@code{nil} are returned.
-The default is @code{identity}.  This is used as an additional
-filter---only files that have the right suffix @emph{and} satisfy this
-predicate are considered.
-
-@item :prescript
-@itemx :postscript
-Script run before/after fetching mail.
-
-@end table
-
-An example directory mail source:
-
-@lisp
-(directory :path "/home/user-name/procmail-dir/"
-           :suffix ".prcml")
-@end lisp
-
-@item pop
-Get mail from a POP server.
-
-Keywords:
-
-@table @code
-@item :server
-The name of the POP server.  The default is taken from the
-@code{MAILHOST} environment variable.
-
-@item :port
-The port number of the POP server.  The default is @samp{pop3}.
-
-@item :user
-The user name to give to the POP server.  The default is the login
-name.
-
-@item :password
-The password to give to the POP server.  If not specified, the user is
-prompted.
-
-@item :program
-The program to use to fetch mail from the POP server.  This is should be
-a @code{format}-like string.  Here's an example:
-
-@example
-fetchmail %u@@%s -P %p %t
-@end example
-
-The valid format specifier characters are:
-
-@table @samp
-@item t
-The name of the file the mail is to be moved to.  This must always be
-included in this string.
-
-@item s
-The name of the server.
-
-@item P
-The port number of the server.
-
-@item u
-The user name to use.
-
-@item p
-The password to use.
-@end table
-
-The values used for these specs are taken from the values you give the
-corresponding keywords.
-
-@item :prescript
-A script to be run before fetching the mail.  The syntax is the same as
-the @code{:program} keyword.  This can also be a function to be run.
-
-@item :postscript
-A script to be run after fetching the mail.  The syntax is the same as
-the @code{:program} keyword.  This can also be a function to be run.
-
-@item :function
-The function to use to fetch mail from the POP server.  The function is
-called with one parameter---the name of the file where the mail should
-be moved to.
-
-@item :authentication
-This can be either the symbol @code{password} or the symbol @code{apop}
-and says what authentication scheme to use.  The default is
-@code{password}.
-
-@end table
-
-If the @code{:program} and @code{:function} keywords aren't specified,
-@code{pop3-movemail} will be used.
-
-Here are some examples.  Fetch from the default POP server, using the
-default user name, and default fetcher:
-
-@lisp
-(pop)
-@end lisp
-
-Fetch from a named server with a named user and password:
-
-@lisp
-(pop :server "my.pop.server"
-     :user "user-name" :password "secret")
-@end lisp
-
-Use @samp{movemail} to move the mail:
-
-@lisp
-(pop :program "movemail po:%u %t %p")
-@end lisp
-
-@item maildir
-Get mail from a maildir. This is a type of mailbox currently only
-supported by qmail, where each file in a special directory contains
-exactly one mail.
-
-Keywords:
-
-@table @code
-@item :path
-The path of the directory where the mails are stored.  The default is
-@samp{~/Maildir/new}.
-
-If you sometimes look at your mail through a pop3 daemon before fetching
-them with Gnus, you may also have to fetch your mails from the
-@code{cur} directory inside the maildir, like in the following example.
-
-@end table
-
-An example maildir mail source:
-
-@lisp
-(maildir :path "/home/user-name/Maildir/cur")
-@end lisp
-
-@item imap
-Get mail from a IMAP server. If you don't want to use IMAP as intended,
-as a network mail reading protocol (ie with nnimap), for some reason or
-other, Gnus let you treat it similar to a POP server and fetches
-articles from a given IMAP mailbox.
-
-Keywords:
-
-@table @code
-@item :server
-The name of the IMAP server.  The default is taken from the
-@code{MAILHOST} environment variable.
-
-@item :port
-The port number of the IMAP server.  The default is @samp{143}, or
-@samp{993} for SSL connections.
-
-@item :user
-The user name to give to the IMAP server.  The default is the login
-name.
-
-@item :password
-The password to give to the IMAP server.  If not specified, the user is
-prompted.
-
-@item :stream
-What stream to use for connecting to the server, this is one of the
-symbols in @code{imap-stream-alist}. Right now, this means
-@samp{kerberos4}, @samp{ssl} or the default @samp{network}.
-
-@item :authenticator
-Which authenticator to use for authenticating to the server, this is one
-of the symbols in @code{imap-authenticator-alist}. Right now, this means
-@samp{kerberos4}, @samp{cram-md5}, @samp{anonymous} or the default
-@samp{login}.
-
-@item :mailbox
-The name of the mailbox to get mail from. The default is @samp{INBOX}
-which normally is the mailbox which receive incoming mail.
-
-@item :predicate
-The predicate used to find articles to fetch. The default, 
-@samp{UNSEEN UNDELETED}, is probably the best choice for most people,
-but if you sometimes peek in your mailbox with a IMAP client and mark
-some articles as read (or; SEEN) you might want to set this to
-@samp{nil}. Then all articles in the mailbox is fetched, no matter
-what. For a complete list of predicates, see RFC2060 Â§6.4.4.
-
-@item :fetchflag
-How to flag fetched articles on the server, the default @samp{\Deleted}
-will mark them as deleted, an alternative would be @samp{\Seen} which
-would simply mark them as read. Theese are the two most likely choices,
-but more flags are defined in RFC2060 Â§2.3.2.
-
-@item :dontexpunge
-If non-nil, don't remove all articles marked as deleted in the mailbox
-after finishing the fetch.
-
-@end table
-
-An example IMAP mail source:
-
-@lisp
-(imap :server "mail.mycorp.com" :stream kerberos4)
-@end lisp
-
-@end table
-
-
-@node Mail Source Customization
-@subsubsection Mail Source Customization
-
-The following is a list of variables that influence how the mail is
-fetched.  You would normally not need to set or change any of these
-variables.
-
-@table @code
-@item mail-source-crash-box
-@vindex mail-source-crash-box
-File where mail will be stored while processing it.  The default is
-@file{~/.emacs-mail-crash-box}.
-
-@item mail-source-delete-incoming
-@vindex mail-source-delete-incoming
-If non-@code{nil}, delete incoming files after handling them.
-
-@item mail-source-directory
-@vindex mail-source-directory
-Directory where files (if any) will be stored.  The default is
-@file{~/Mail/}.  At present, the only thing this is used for is to say
-where the incoming files will be stored if the previous variable is
-@code{nil}.
-
-@item mail-source-default-file-modes
-@vindex mail-source-default-file-modes
-All new mail files will get this file mode.  The default is 384.
-
-@end table
-
-
-@node Fetching Mail
-@subsubsection Fetching Mail
-
-@vindex mail-sources
-@vindex nnmail-spool-file
-The way to actually tell Gnus where to get new mail from is to set
-@code{mail-sources} to a list of mail source specifiers
-(@pxref{Mail Source Specifiers}).
-
-If this variable (and the obsolescent @code{nnmail-spool-file}) is
-@code{nil}, the mail backends will never attempt to fetch mail by
-themselves.
-
-If you want to fetch mail both from your local spool as well as a POP
-mail server, you'd say something like:
-
-@lisp
-(setq mail-sources
-      '((file)
-        (pop :server "pop3.mail.server"
-             :password "secret")))
-@end lisp
-
-Or, if you don't want to use any of the keyword defaults:
-
-@lisp
-(setq mail-sources
-      '((file :path "/var/spool/mail/user-name")
-        (pop :server "pop3.mail.server"
-             :user "user-name"
-             :port "pop3"
-             :password "secret")))
-@end lisp
-
-
-When you use a mail backend, Gnus will slurp all your mail from your
-inbox and plonk it down in your home directory.  Gnus doesn't move any
-mail if you're not using a mail backend---you have to do a lot of magic
-invocations first.  At the time when you have finished drawing the
-pentagram, lightened the candles, and sacrificed the goat, you really
-shouldn't be too surprised when Gnus moves your mail.
-
-
-
-@node Mail Backend Variables
-@subsection Mail Backend Variables
-
-These variables are (for the most part) pertinent to all the various
-mail backends.
-
-@table @code
-@vindex nnmail-read-incoming-hook
-@item nnmail-read-incoming-hook
-The mail backends all call this hook after reading new mail.  You can
-use this hook to notify any mail watch programs, if you want to.
-
-@vindex nnmail-split-hook
-@item nnmail-split-hook
-@findex article-decode-encoded-words
-@findex RFC1522 decoding
-@findex RFC2047 decoding
-Hook run in the buffer where the mail headers of each message is kept
-just before the splitting based on these headers is done.  The hook is
-free to modify the buffer contents in any way it sees fit---the buffer
-is discarded after the splitting has been done, and no changes performed
-in the buffer will show up in any files.
-@code{gnus-article-decode-encoded-words} is one likely function to add
-to this hook.
-
-@vindex nnmail-pre-get-new-mail-hook
-@vindex nnmail-post-get-new-mail-hook
-@item nnmail-pre-get-new-mail-hook
-@itemx nnmail-post-get-new-mail-hook
-These are two useful hooks executed when treating new incoming
-mail---@code{nnmail-pre-get-new-mail-hook} (is called just before
-starting to handle the new mail) and
-@code{nnmail-post-get-new-mail-hook} (is called when the mail handling
-is done).  Here's and example of using these two hooks to change the
-default file modes the new mail files get:
-
-@lisp
-(add-hook 'gnus-pre-get-new-mail-hook
-          (lambda () (set-default-file-modes 511)))
-
-(add-hook 'gnus-post-get-new-mail-hook
-          (lambda () (set-default-file-modes 551)))
-@end lisp
-
-@item nnmail-use-long-file-names
-@vindex nnmail-use-long-file-names
-If non-@code{nil}, the mail backends will use long file and directory
-names.  Groups like @samp{mail.misc} will end up in directories
-(assuming use of @code{nnml} backend) or files (assuming use of
-@code{nnfolder} backend) like @file{mail.misc}.  If it is @code{nil},
-the same group will end up in @file{mail/misc}.
-
-@item nnmail-delete-file-function
-@vindex nnmail-delete-file-function
-@findex delete-file
-Function called to delete files.  It is @code{delete-file} by default.
-
-@item nnmail-cache-accepted-message-ids
-@vindex nnmail-cache-accepted-message-ids
-If non-@code{nil}, put the @code{Message-ID}s of articles imported into
-the backend (via @code{Gcc}, for instance) into the mail duplication
-discovery cache.  The default is @code{nil}.
-
-@end table
-
-
-@node Fancy Mail Splitting
-@subsection Fancy Mail Splitting
-@cindex mail splitting
-@cindex fancy mail splitting
-
-@vindex nnmail-split-fancy
-@findex nnmail-split-fancy
-If the rather simple, standard method for specifying how to split mail
-doesn't allow you to do what you want, you can set
-@code{nnmail-split-methods} to @code{nnmail-split-fancy}.  Then you can
-play with the @code{nnmail-split-fancy} variable.
-
-Let's look at an example value of this variable first:
-
-@lisp
-;; Messages from the mailer daemon are not crossposted to any of
-;; the ordinary groups.  Warnings are put in a separate group
-;; from real errors.
-(| ("from" mail (| ("subject" "warn.*" "mail.warning")
-                   "mail.misc"))
-   ;; Non-error messages are crossposted to all relevant
-   ;; groups, but we don't crosspost between the group for the
-   ;; (ding) list and the group for other (ding) related mail.
-   (& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
-         ("subject" "ding" "ding.misc"))
-      ;; Other mailing lists...
-      (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
-      (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
-      ;; Both lists below have the same suffix, so prevent
-      ;; cross-posting to mkpkg.list of messages posted only to 
-      ;; the bugs- list, but allow cross-posting when the
-      ;; message was really cross-posted.
-      (any "bugs-mypackage@@somewhere" "mypkg.bugs")
-      (any "mypackage@@somewhere\" - "bugs-mypackage" "mypkg.list")
-      ;; People...
-      (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
-   ;; Unmatched mail goes to the catch all group.
-   "misc.misc")
-@end lisp
-
-This variable has the format of a @dfn{split}.  A split is a (possibly)
-recursive structure where each split may contain other splits.  Here are
-the five possible split syntaxes:
-
-@enumerate
-
-@item
-@samp{group}: If the split is a string, that will be taken as a group
-name.  Normal regexp match expansion will be done.  See below for
-examples.
-
-@item
-@code{(@var{field} @var{value} @var{[- restrict [- restrict [@dots{}]]]} 
-@var{split})}: If the split is a list, the first element of which is a
-string, then store the message as specified by @var{split}, if header
-@var{field} (a regexp) contains @var{value} (also a regexp).  If
-@var{restrict} (yet another regexp) matches some string after
-@var{field} and before the end of the matched @var{value}, the
-@var{split} is ignored.  If none of the @var{restrict} clauses match,
-@var{split} is processed.
-
-@item
-@code{(| @var{split}@dots{})}: If the split is a list, and the first
-element is @code{|} (vertical bar), then process each @var{split} until
-one of them matches.  A @var{split} is said to match if it will cause
-the mail message to be stored in one or more groups.
-
-@item
-@code{(& @var{split}@dots{})}: If the split is a list, and the first
-element is @code{&}, then process all @var{split}s in the list.
-
-@item
-@code{junk}: If the split is the symbol @code{junk}, then don't save
-this message. Use with extreme caution.
-
-@item
-@code{(: @var{function} @var{arg1} @var{arg2} @dots{})}:  If the split is
-a list, and the first element is @code{:}, then the second element will
-be called as a function with @var{args} given as arguments.  The
-function should return a @var{split}.
-
-@item
-@code{(! @var{func} @var{split})}: If the split is a list, and the first
-element is @code{!}, then SPLIT will be processed, and FUNC will be
-called as a function with the result of SPLIT as argument. FUNC should
-return a split.
-
-@item
-@code{nil}: If the split is @code{nil}, it is ignored.
-
-@end enumerate
-
-In these splits, @var{field} must match a complete field name.
-@var{value} must match a complete word according to the fundamental mode
-syntax table.  You can use @code{.*} in the regexps to match partial
-field names or words.  In other words, all @var{value}'s are wrapped in
-@samp{\<} and @samp{\>} pairs.
-
-@vindex nnmail-split-abbrev-alist
-@var{field} and @var{value} can also be lisp symbols, in that case they
-are expanded as specified by the variable
-@code{nnmail-split-abbrev-alist}.  This is an alist of cons cells, where
-the @code{car} of a cell contains the key, and the @code{cdr} contains the associated
-value.
-
-@vindex nnmail-split-fancy-syntax-table
-@code{nnmail-split-fancy-syntax-table} is the syntax table in effect
-when all this splitting is performed.
-
-If you want to have Gnus create groups dynamically based on some
-information in the headers (i.e., do @code{replace-match}-like
-substitutions in the group names), you can say things like:
-
-@example
-(any "debian-\\b\\(\\w+\\)@@lists.debian.org" "mail.debian.\\1")
-@end example
-
-In this example, messages sent to @samp{debian-foo@@lists.debian.org}
-will be filed in @samp{mail.debian.foo}.
-
-If the string contains the element @samp{\&}, then the previously
-matched string will be substituted.  Similarly, the elements @samp{\\1}
-up to @samp{\\9} will be substituted with the text matched by the
-groupings 1 through 9.
-
-
-@node Group Mail Splitting
-@subsection Group Mail Splitting
-@cindex mail splitting
-@cindex group mail splitting
-
-@findex gnus-group-split
-If you subscribe to dozens of mailing lists but you don't want to
-maintain mail splitting rules manually, group mail splitting is for you.
-You just have to set @var{to-list} and/or @var{to-address} in group
-parameters or group customization and set @code{nnmail-split-methods} to
-@code{gnus-group-split}.  This splitting function will scan all groups
-for those parameters and split mail accordingly, i.e., messages posted
-from or to the addresses specified in the parameters @var{to-list} or
-@var{to-address} of a mail group will be stored in that group.
-
-Sometimes, mailing lists have multiple addresses, and you may want mail
-splitting to recognize them all: just set the @var{extra-aliases} group
-parameter to the list of additional addresses and it's done.  If you'd
-rather use a regular expression, set @var{split-regexp}.
-
-All these parameters in a group will be used to create an
-@code{nnmail-split-fancy} split, in which the @var{field} is @samp{any},
-the @var{value} is a single regular expression that matches
-@var{to-list}, @var{to-address}, all of @var{extra-aliases} and all
-matches of @var{split-regexp}, and the @var{split} is the name of the
-group.  @var{restrict}s are also supported: just set the
-@var{split-exclude} parameter to a list of regular expressions.
-
-If you can't get the right split to be generated using all these
-parameters, or you just need something fancier, you can set the
-parameter @var{split-spec} to an @code{nnmail-split-fancy} split.  In
-this case, all other aforementioned parameters will be ignored by
-@code{gnus-group-split}.  In particular, @var{split-spec} may be set to
-@code{nil}, in which case the group will be ignored by
-@code{gnus-group-split}.
-
-@vindex gnus-group-split-default-catch-all-group
-@code{gnus-group-split} will do cross-posting on all groups that match,
-by defining a single @code{&} fancy split containing one split for each
-group.  If a message doesn't match any split, it will be stored in the
-group named in @code{gnus-group-split-default-catch-all-group}, unless
-some group has @var{split-spec} set to @code{catch-all}, in which case
-that group is used as the catch-all group.  Note that, in this case,
-there's no cross-posting, as a @code{|} fancy split encloses the
-@code{&} split and the catch-all group.
-
-It's time for an example.  Assume the following group parameters have
-been defined:
-
-@example
-nnml:mail.bar:
-((to-address . "bar@@femail.com")
- (split-regexp . ".*@@femail\\.com"))
-nnml:mail.foo:
-((to-list . "foo@@nowhere.gov")
- (extra-aliases "foo@@localhost" "foo-redist@@home")
- (split-exclude "bugs-foo" "rambling-foo")
- (admin-address . "foo-request@@nowhere.gov"))
-nnml:mail.others:
-((split-spec . catch-all))
-@end example
-
-Setting @code{nnmail-split-methods} to @code{gnus-group-split} will
-behave as if @code{nnmail-split-fancy} had been selected and variable
-@code{nnmail-split-fancy} had been set as follows:
-
-@lisp
-(| (& (any "\\(bar@@femail\\.com\\|.*@@femail\\.com\\)" "mail.bar")
-      (any "\\(foo@@nowhere\\.gov\\|foo@@localhost\\|foo-redist@@home\\)"
-           - "bugs-foo" - "rambling-foo" "mail.foo"))
-   "mail.others")
-@end lisp
-
-@findex gnus-group-split-fancy
-If you'd rather not use group splitting for all your mail groups, you
-may use it for only some of them, by using @code{nnmail-split-fancy}
-splits like this:
-
-@lisp
-(: gnus-mlsplt-fancy GROUPS NO-CROSSPOST CATCH-ALL)
-@end lisp
-
-@var{groups} may be a regular expression or a list of group names whose
-parameters will be scanned to generate the output split.
-@var{no-crosspost} can be used to disable cross-posting; in this case, a
-single @code{|} split will be output.  @var{catch-all} may be the name
-of a group to be used as the default catch-all group.  If
-@var{catch-all} is @code{nil}, or if @var{split-regexp} matches the
-empty string in any selected group, no catch-all split will be issued.
-Otherwise, if some group has @var{split-spec} set to @code{catch-all},
-this group will override the value of the @var{catch-all} argument.
-
-@findex gnus-group-split-setup
-Unfortunately, scanning all groups and their parameters can be quite
-slow, especially considering that it has to be done for every message.
-But don't despair!  The function @code{gnus-group-split-setup} can be
-used to select @code{gnus-group-split} in a much more efficient way.  It
-sets @code{nnmail-split-methods} to @code{nnmail-split-fancy} and sets
-@code{nnmail-split-fancy} to the split produced by
-@code{gnus-group-split-fancy}.  Thus, the group parameters are only
-scanned once, no matter how many messages are split.
-
-@findex gnus-group-split-update
-However, if you change group parameters, you have to update
-@code{nnmail-split-fancy} manually.  You can do it by running
-@code{gnus-group-split-update}.  If you'd rather have it updated
-automatically, just tell @code{gnus-group-split-setup} to do it for
-you.  For example, add to your @file{.gnus}:
-
-@lisp
-(gnus-group-split-setup AUTO-UPDATE CATCH-ALL)
-@end lisp
-
-If @var{auto-update} is non-@code{nil}, @code{gnus-group-split-update}
-will be added to @code{nnmail-pre-get-new-mail-hook}, so you won't ever
-have to worry about updating @code{nnmail-split-fancy} again.  If you
-don't omit @var{catch-all} (it's optional),
-@code{gnus-group-split-default-catch-all-group} will be set to its
-value.
-
-@vindex gnus-group-split-updated-hook
-Because you may want to change @code{nnmail-split-fancy} after it is set
-by @code{gnus-group-split-update}, this function will run
-@code{gnus-group-split-updated-hook} just before finishing.
-
-@node Incorporating Old Mail
-@subsection Incorporating Old Mail
-
-Most people have lots of old mail stored in various file formats.  If
-you have set up Gnus to read mail using one of the spiffy Gnus mail
-backends, you'll probably wish to have that old mail incorporated into
-your mail groups.
-
-Doing so can be quite easy.
-
-To take an example: You're reading mail using @code{nnml}
-(@pxref{Mail Spool}), and have set @code{nnmail-split-methods} to a
-satisfactory value (@pxref{Splitting Mail}).  You have an old Unix mbox
-file filled with important, but old, mail.  You want to move it into
-your @code{nnml} groups.
-
-Here's how:
-
-@enumerate
-@item
-Go to the group buffer.
-
-@item
-Type `G f' and give the path to the mbox file when prompted to create an
-@code{nndoc} group from the mbox file (@pxref{Foreign Groups}).
-
-@item
-Type `SPACE' to enter the newly created group.
-
-@item
-Type `M P b' to process-mark all articles in this group's buffer
-(@pxref{Setting Process Marks}).
-
-@item
-Type `B r' to respool all the process-marked articles, and answer
-@samp{nnml} when prompted (@pxref{Mail Group Commands}).
-@end enumerate
-
-All the mail messages in the mbox file will now also be spread out over
-all your @code{nnml} groups.  Try entering them and check whether things
-have gone without a glitch.  If things look ok, you may consider
-deleting the mbox file, but I wouldn't do that unless I was absolutely
-sure that all the mail has ended up where it should be.
-
-Respooling is also a handy thing to do if you're switching from one mail
-backend to another.  Just respool all the mail in the old mail groups
-using the new mail backend.
-
-
-@node Expiring Mail
-@subsection Expiring Mail
-@cindex article expiry
-
-Traditional mail readers have a tendency to remove mail articles when
-you mark them as read, in some way.  Gnus takes a fundamentally
-different approach to mail reading.
-
-Gnus basically considers mail just to be news that has been received in
-a rather peculiar manner.  It does not think that it has the power to
-actually change the mail, or delete any mail messages.  If you enter a
-mail group, and mark articles as ``read'', or kill them in some other
-fashion, the mail articles will still exist on the system.  I repeat:
-Gnus will not delete your old, read mail.  Unless you ask it to, of
-course.
-
-To make Gnus get rid of your unwanted mail, you have to mark the
-articles as @dfn{expirable}.  This does not mean that the articles will
-disappear right away, however.  In general, a mail article will be
-deleted from your system if, 1) it is marked as expirable, AND 2) it is
-more than one week old.  If you do not mark an article as expirable, it
-will remain on your system until hell freezes over.  This bears
-repeating one more time, with some spurious capitalizations: IF you do
-NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
-
-@vindex gnus-auto-expirable-newsgroups
-You do not have to mark articles as expirable by hand.  Groups that
-match the regular expression @code{gnus-auto-expirable-newsgroups} will
-have all articles that you read marked as expirable automatically.  All
-articles marked as expirable have an @samp{E} in the first
-column in the summary buffer.
-
-By default, if you have auto expiry switched on, Gnus will mark all the
-articles you read as expirable, no matter if they were read or unread
-before.  To avoid having articles marked as read marked as expirable
-automatically, you can put something like the following in your
-@file{.gnus} file:
-
-@vindex gnus-mark-article-hook
-@lisp
-(remove-hook 'gnus-mark-article-hook
-             'gnus-summary-mark-read-and-unread-as-read)
-(add-hook 'gnus-mark-article-hook 'gnus-summary-mark-unread-as-read)
-@end lisp
-
-Note that making a group auto-expirable doesn't mean that all read
-articles are expired---only the articles marked as expirable
-will be expired.  Also note that using the @kbd{d} command won't make
-groups expirable---only semi-automatic marking of articles as read will
-mark the articles as expirable in auto-expirable groups.
-
-Let's say you subscribe to a couple of mailing lists, and you want the
-articles you have read to disappear after a while:
-
-@lisp
-(setq gnus-auto-expirable-newsgroups
-      "mail.nonsense-list\\|mail.nice-list")
-@end lisp
-
-Another way to have auto-expiry happen is to have the element
-@code{auto-expire} in the group parameters of the group.
-
-If you use adaptive scoring (@pxref{Adaptive Scoring}) and
-auto-expiring, you'll have problems.  Auto-expiring and adaptive scoring
-don't really mix very well.
-
-@vindex nnmail-expiry-wait
-The @code{nnmail-expiry-wait} variable supplies the default time an
-expirable article has to live.  Gnus starts counting days from when the
-message @emph{arrived}, not from when it was sent.  The default is seven
-days.
-
-Gnus also supplies a function that lets you fine-tune how long articles
-are to live, based on what group they are in.  Let's say you want to
-have one month expiry period in the @samp{mail.private} group, a one day
-expiry period in the @samp{mail.junk} group, and a six day expiry period
-everywhere else:
-
-@vindex nnmail-expiry-wait-function
-@lisp
-(setq nnmail-expiry-wait-function
-      (lambda (group)
-       (cond ((string= group "mail.private")
-               31)
-             ((string= group "mail.junk")
-               1)
-             ((string= group "important")
-               'never)
-             (t
-               6))))
-@end lisp
-
-The group names this function is fed are ``unadorned'' group
-names---no @samp{nnml:} prefixes and the like.
-
-The @code{nnmail-expiry-wait} variable and
-@code{nnmail-expiry-wait-function} function can either be a number (not
-necessarily an integer) or one of the symbols @code{immediate} or
-@code{never}.
-
-You can also use the @code{expiry-wait} group parameter to selectively
-change the expiry period (@pxref{Group Parameters}).
-
-@vindex nnmail-keep-last-article
-If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
-expire the final article in a mail newsgroup.  This is to make life
-easier for procmail users.
-
-@vindex gnus-total-expirable-newsgroups
-By the way: That line up there, about Gnus never expiring non-expirable
-articles, is a lie.  If you put @code{total-expire} in the group
-parameters, articles will not be marked as expirable, but all read
-articles will be put through the expiry process.  Use with extreme
-caution.  Even more dangerous is the
-@code{gnus-total-expirable-newsgroups} variable.  All groups that match
-this regexp will have all read articles put through the expiry process,
-which means that @emph{all} old mail articles in the groups in question
-will be deleted after a while.  Use with extreme caution, and don't come
-crying to me when you discover that the regexp you used matched the
-wrong group and all your important mail has disappeared.  Be a
-@emph{man}!  Or a @emph{woman}!  Whatever you feel more comfortable
-with!  So there!
-
-Most people make most of their mail groups total-expirable, though.
-
-@vindex gnus-inhibit-user-auto-expire
-If @code{gnus-inhibit-user-auto-expire} is non-@code{nil}, user marking
-commands will not mark an article as expirable, even if the group has
-auto-expire turned on.
-
-
-@node Washing Mail
-@subsection Washing Mail
-@cindex mail washing
-@cindex list server brain damage
-@cindex incoming mail treatment
-
-Mailers and list servers are notorious for doing all sorts of really,
-really stupid things with mail.  ``Hey, RFC822 doesn't explicitly
-prohibit us from adding the string @code{wE aRe ElItE!!!!!1!!} to the
-end of all lines passing through our server, so let's do that!!!!1!''
-Yes, but RFC822 wasn't designed to be read by morons.  Things that were
-considered to be self-evident were not discussed.  So.  Here we are.
-
-Case in point:  The German version of Microsoft Exchange adds @samp{AW:
-} to the subjects of replies instead of @samp{Re: }.  I could pretend to
-be shocked and dismayed by this, but I haven't got the energy.  It is to
-laugh.
-
-Gnus provides a plethora of functions for washing articles while
-displaying them, but it might be nicer to do the filtering before
-storing the mail to disc.  For that purpose, we have three hooks and
-various functions that can be put in these hooks.
-
-@table @code
-@item nnmail-prepare-incoming-hook
-@vindex nnmail-prepare-incoming-hook
-This hook is called before doing anything with the mail and is meant for
-grand, sweeping gestures.  It is called in a buffer that contains all
-the new, incoming mail.  Functions to be used include:
-
-@table @code
-@item nnheader-ms-strip-cr
-@findex nnheader-ms-strip-cr
-Remove trailing carriage returns from each line.  This is default on
-Emacs running on MS machines.
-
-@end table
-
-@item nnmail-prepare-incoming-header-hook
-@vindex nnmail-prepare-incoming-header-hook
-This hook is called narrowed to each header.  It can be used when
-cleaning up the headers.  Functions that can be used include:
-
-@table @code
-@item nnmail-remove-leading-whitespace
-@findex nnmail-remove-leading-whitespace
-Clear leading white space that ``helpful'' listservs have added to the
-headers to make them look nice.  Aaah.
-
-@item nnmail-remove-list-identifiers
-@findex nnmail-remove-list-identifiers
-Some list servers add an identifier---for example, @samp{(idm)}---to the
-beginning of all @code{Subject} headers.  I'm sure that's nice for
-people who use stone age mail readers.  This function will remove
-strings that match the @code{nnmail-list-identifiers} regexp, which can
-also be a list of regexp.
-
-For instance, if you want to remove the @samp{(idm)} and the
-@samp{nagnagnag} identifiers:
-
-@lisp
-(setq nnmail-list-identifiers
-      '("(idm)" "nagnagnag"))
-@end lisp
-
-This can also be done non-destructively with
-@code{gnus-list-identifiers}, @xref{Article Hiding}.
-
-@item nnmail-remove-tabs
-@findex nnmail-remove-tabs
-Translate all @samp{TAB} characters into @samp{SPACE} characters.
-
-@item nnmail-fix-eudora-headers
-@findex nnmail-fix-eudora-headers
-@cindex Eudora
-Eudora produces broken @code{References} headers, but OK
-@code{In-Reply-To} headers.  This function will get rid of the
-@code{References} headers.
-
-@end table
-
-@item nnmail-prepare-incoming-message-hook
-@vindex nnmail-prepare-incoming-message-hook
-This hook is called narrowed to each message.  Functions to be used
-include:
-
-@table @code
-@item article-de-quoted-unreadable
-@findex article-de-quoted-unreadable
-Decode Quoted Readable encoding.
-
-@end table
-@end table
-
-
-@node Duplicates
-@subsection Duplicates
-
-@vindex nnmail-treat-duplicates
-@vindex nnmail-message-id-cache-length
-@vindex nnmail-message-id-cache-file
-@cindex duplicate mails
-If you are a member of a couple of mailing lists, you will sometimes
-receive two copies of the same mail.  This can be quite annoying, so
-@code{nnmail} checks for and treats any duplicates it might find.  To do
-this, it keeps a cache of old @code{Message-ID}s---
-@code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by
-default.  The approximate maximum number of @code{Message-ID}s stored
-there is controlled by the @code{nnmail-message-id-cache-length}
-variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
-stored.) If all this sounds scary to you, you can set
-@code{nnmail-treat-duplicates} to @code{warn} (which is what it is by
-default), and @code{nnmail} won't delete duplicate mails.  Instead it
-will insert a warning into the head of the mail saying that it thinks
-that this is a duplicate of a different message.
-
-This variable can also be a function.  If that's the case, the function
-will be called from a buffer narrowed to the message in question with
-the @code{Message-ID} as a parameter.  The function must return either
-@code{nil}, @code{warn}, or @code{delete}.
-
-You can turn this feature off completely by setting the variable to
-@code{nil}.
-
-If you want all the duplicate mails to be put into a special
-@dfn{duplicates} group, you could do that using the normal mail split
-methods:
-
-@lisp
-(setq nnmail-split-fancy
-      '(| ;; Messages duplicates go to a separate group.
-          ("gnus-warning" "duplication of message" "duplicate")
-          ;; Message from daemons, postmaster, and the like to another.
-          (any mail "mail.misc")
-          ;; Other rules.
-          [ ... ] ))
-@end lisp
-
-Or something like:
-@lisp
-(setq nnmail-split-methods
-      '(("duplicates" "^Gnus-Warning:")
-        ;; Other rules.
-        [...]))
-@end lisp
-
-Here's a neat feature: If you know that the recipient reads her mail
-with Gnus, and that she has @code{nnmail-treat-duplicates} set to
-@code{delete}, you can send her as many insults as you like, just by
-using a @code{Message-ID} of a mail that you know that she's already
-received.  Think of all the fun!  She'll never see any of it!  Whee!
-
-
-@node Not Reading Mail
-@subsection Not Reading Mail
-
-If you start using any of the mail backends, they have the annoying
-habit of assuming that you want to read mail with them.  This might not
-be unreasonable, but it might not be what you want.
-
-If you set @code{mail-sources} and @code{nnmail-spool-file} to
-@code{nil}, none of the backends will ever attempt to read incoming
-mail, which should help.
-
-@vindex nnbabyl-get-new-mail
-@vindex nnmbox-get-new-mail
-@vindex nnml-get-new-mail
-@vindex nnmh-get-new-mail
-@vindex nnfolder-get-new-mail
-This might be too much, if, for instance, you are reading mail quite
-happily with @code{nnml} and just want to peek at some old @sc{rmail}
-file you have stashed away with @code{nnbabyl}.  All backends have
-variables called backend-@code{get-new-mail}.  If you want to disable
-the @code{nnbabyl} mail reading, you edit the virtual server for the
-group to have a setting where @code{nnbabyl-get-new-mail} to @code{nil}.
-
-All the mail backends will call @code{nn}*@code{-prepare-save-mail-hook}
-narrowed to the article to be saved before saving it when reading
-incoming mail.
-
-
-@node Choosing a Mail Backend
-@subsection Choosing a Mail Backend
-
-Gnus will read the mail spool when you activate a mail group.  The mail
-file is first copied to your home directory.  What happens after that
-depends on what format you want to store your mail in.
-
-There are five different mail backends in the standard Gnus, and more
-backends are available separately.  The mail backend most people use
-(because it is the fastest and most flexible) is @code{nnml}
-(@pxref{Mail Spool}).
-
-@menu
-* Unix Mail Box::               Using the (quite) standard Un*x mbox.
-* Rmail Babyl::                 Emacs programs use the rmail babyl format.
-* Mail Spool::                  Store your mail in a private spool?
-* MH Spool::                    An mhspool-like backend.
-* Mail Folders::                Having one file for each group.
-* Comparing Mail Backends::     An in-depth looks at pros and cons.
-@end menu
-
-
-@node Unix Mail Box
-@subsubsection Unix Mail Box
-@cindex nnmbox
-@cindex unix mail box
-
-@vindex nnmbox-active-file
-@vindex nnmbox-mbox-file
-The @dfn{nnmbox} backend will use the standard Un*x mbox file to store
-mail.  @code{nnmbox} will add extra headers to each mail article to say
-which group it belongs in.
-
-Virtual server settings:
-
-@table @code
-@item nnmbox-mbox-file
-@vindex nnmbox-mbox-file
-The name of the mail box in the user's home directory.
-
-@item nnmbox-active-file
-@vindex nnmbox-active-file
-The name of the active file for the mail box.
-
-@item nnmbox-get-new-mail
-@vindex nnmbox-get-new-mail
-If non-@code{nil}, @code{nnmbox} will read incoming mail and split it
-into groups.
-@end table
-
-
-@node Rmail Babyl
-@subsubsection Rmail Babyl
-@cindex nnbabyl
-@cindex rmail mbox
-
-@vindex nnbabyl-active-file
-@vindex nnbabyl-mbox-file
-The @dfn{nnbabyl} backend will use a babyl mail box (aka. @dfn{rmail
-mbox}) to store mail. @code{nnbabyl} will add extra headers to each mail
-article to say which group it belongs in.
-
-Virtual server settings:
-
-@table @code
-@item nnbabyl-mbox-file
-@vindex nnbabyl-mbox-file
-The name of the rmail mbox file.
-
-@item nnbabyl-active-file
-@vindex nnbabyl-active-file
-The name of the active file for the rmail box.
-
-@item nnbabyl-get-new-mail
-@vindex nnbabyl-get-new-mail
-If non-@code{nil}, @code{nnbabyl} will read incoming mail.
-@end table
-
-
-@node Mail Spool
-@subsubsection Mail Spool
-@cindex nnml
-@cindex mail @sc{nov} spool
-
-The @dfn{nnml} spool mail format isn't compatible with any other known
-format.  It should be used with some caution.
-
-@vindex nnml-directory
-If you use this backend, Gnus will split all incoming mail into files,
-one file for each mail, and put the articles into the corresponding
-directories under the directory specified by the @code{nnml-directory}
-variable.  The default value is @file{~/Mail/}.
-
-You do not have to create any directories beforehand; Gnus will take
-care of all that.
-
-If you have a strict limit as to how many files you are allowed to store
-in your account, you should not use this backend.  As each mail gets its
-own file, you might very well occupy thousands of inodes within a few
-weeks.  If this is no problem for you, and it isn't a problem for you
-having your friendly systems administrator walking around, madly,
-shouting ``Who is eating all my inodes?! Who? Who!?!'', then you should
-know that this is probably the fastest format to use.  You do not have
-to trudge through a big mbox file just to read your new mail.
-
-@code{nnml} is probably the slowest backend when it comes to article
-splitting.  It has to create lots of files, and it also generates
-@sc{nov} databases for the incoming mails.  This makes it the fastest
-backend when it comes to reading mail.
-
-Virtual server settings:
-
-@table @code
-@item nnml-directory
-@vindex nnml-directory
-All @code{nnml} directories will be placed under this directory.
-
-@item nnml-active-file
-@vindex nnml-active-file
-The active file for the @code{nnml} server.
-
-@item nnml-newsgroups-file
-@vindex nnml-newsgroups-file
-The @code{nnml} group descriptions file.  @xref{Newsgroups File
-Format}.
-
-@item nnml-get-new-mail
-@vindex nnml-get-new-mail
-If non-@code{nil}, @code{nnml} will read incoming mail.
-
-@item nnml-nov-is-evil
-@vindex nnml-nov-is-evil
-If non-@code{nil}, this backend will ignore any @sc{nov} files.
-
-@item nnml-nov-file-name
-@vindex nnml-nov-file-name
-The name of the @sc{nov} files.  The default is @file{.overview}.
-
-@item nnml-prepare-save-mail-hook
-@vindex nnml-prepare-save-mail-hook
-Hook run narrowed to an article before saving.
-
-@end table
-
-@findex nnml-generate-nov-databases
-If your @code{nnml} groups and @sc{nov} files get totally out of whack,
-you can do a complete update by typing @kbd{M-x
-nnml-generate-nov-databases}.  This command will trawl through the
-entire @code{nnml} hierarchy, looking at each and every article, so it
-might take a while to complete.  A better interface to this
-functionality can be found in the server buffer (@pxref{Server
-Commands}).
-
-
-@node MH Spool
-@subsubsection MH Spool
-@cindex nnmh
-@cindex mh-e mail spool
-
-@code{nnmh} is just like @code{nnml}, except that is doesn't generate
-@sc{nov} databases and it doesn't keep an active file.  This makes
-@code{nnmh} a @emph{much} slower backend than @code{nnml}, but it also
-makes it easier to write procmail scripts for.
-
-Virtual server settings:
-
-@table @code
-@item nnmh-directory
-@vindex nnmh-directory
-All @code{nnmh} directories will be located under this directory.
-
-@item nnmh-get-new-mail
-@vindex nnmh-get-new-mail
-If non-@code{nil}, @code{nnmh} will read incoming mail.
-
-@item nnmh-be-safe
-@vindex nnmh-be-safe
-If non-@code{nil}, @code{nnmh} will go to ridiculous lengths to make
-sure that the articles in the folder are actually what Gnus thinks they
-are.  It will check date stamps and stat everything in sight, so
-setting this to @code{t} will mean a serious slow-down.  If you never
-use anything but Gnus to read the @code{nnmh} articles, you do not have
-to set this variable to @code{t}.
-@end table
-
-
-@node Mail Folders
-@subsubsection Mail Folders
-@cindex nnfolder
-@cindex mbox folders
-@cindex mail folders
-
-@code{nnfolder} is a backend for storing each mail group in a separate
-file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}
-will add extra headers to keep track of article numbers and arrival
-dates.
-
-Virtual server settings:
-
-@table @code
-@item nnfolder-directory
-@vindex nnfolder-directory
-All the @code{nnfolder} mail boxes will be stored under this directory.
-
-@item nnfolder-active-file
-@vindex nnfolder-active-file
-The name of the active file.
-
-@item nnfolder-newsgroups-file
-@vindex nnfolder-newsgroups-file
-The name of the group descriptions file.  @xref{Newsgroups File Format}.
-
-@item nnfolder-get-new-mail
-@vindex nnfolder-get-new-mail
-If non-@code{nil}, @code{nnfolder} will read incoming mail.
-
-@item nnfolder-save-buffer-hook
-@vindex nnfolder-save-buffer-hook
-@cindex backup files
-Hook run before saving the folders.  Note that Emacs does the normal
-backup renaming of files even with the @code{nnfolder} buffers.  If you
-wish to switch this off, you could say something like the following in
-your @file{.emacs} file:
-
-@lisp
-(defun turn-off-backup ()
-  (set (make-local-variable 'backup-inhibited) t))
-
-(add-hook 'nnfolder-save-buffer-hook 'turn-off-backup)
-@end lisp
-
-@item nnfolder-delete-mail-hook
-@vindex nnfolder-delete-mail-hook
-Hook run in a buffer narrowed to the message that is to be deleted.
-This function can be used to copy the message to somewhere else, or to
-extract some information from it before removing it.
-
-@end table
-
-
-@findex nnfolder-generate-active-file
-@kindex M-x nnfolder-generate-active-file
-If you have lots of @code{nnfolder}-like files you'd like to read with
-@code{nnfolder}, you can use the @kbd{M-x nnfolder-generate-active-file}
-command to make @code{nnfolder} aware of all likely files in
-@code{nnfolder-directory}.  This only works if you use long file names,
-though.
-
-@node Comparing Mail Backends
-@subsubsection Comparing Mail Backends
-
-First, just for terminology, the @dfn{backend} is the common word for a
-low-level access method---a transport, if you will, by which something
-is acquired.  The sense is that one's mail has to come from somewhere,
-and so selection of a suitable backend is required in order to get that
-mail within spitting distance of Gnus.
-
-The same concept exists for Usenet itself: Though access to articles is
-typically done by NNTP these days, once upon a midnight dreary, everyone
-in the world got at Usenet by running a reader on the machine where the
-articles lay (the machine which today we call an NNTP server), and
-access was by the reader stepping into the articles' directory spool
-area directly.  One can still select between either the @code{nntp} or
-@code{nnspool} backends, to select between these methods, if one happens
-actually to live on the server (or can see its spool directly, anyway,
-via NFS).
-
-The goal in selecting a mail backend is to pick one which
-simultaneously represents a suitable way of dealing with the original
-format plus leaving mail in a form that is convenient to use in the
-future.  Here are some high and low points on each:
-
-@table @code
-@item nnmbox
-
-UNIX systems have historically had a single, very common, and well-
-defined format.  All messages arrive in a single @dfn{spool file}, and
-they are delineated by a line whose regular expression matches
-@samp{^From_}.  (My notational use of @samp{_} is to indicate a space,
-to make it clear in this instance that this is not the RFC-specified
-@samp{From:} header.)  Because Emacs and therefore Gnus emanate
-historically from the Unix environment, it is simplest if one does not
-mess a great deal with the original mailbox format, so if one chooses
-this backend, Gnus' primary activity in getting mail from the real spool
-area to Gnus' preferred directory is simply to copy it, with no
-(appreciable) format change in the process.  It is the ``dumbest'' way
-to move mail into availability in the Gnus environment.  This makes it
-fast to move into place, but slow to parse, when Gnus has to look at
-what's where.
-
-@item nnbabyl
-
-Once upon a time, there was the DEC-10 and DEC-20, running operating
-systems called TOPS and related things, and the usual (only?) mail
-reading environment was a thing called Babyl.  I don't know what format
-was used for mail landing on the system, but Babyl had its own internal
-format to which mail was converted, primarily involving creating a
-spool-file-like entity with a scheme for inserting Babyl-specific
-headers and status bits above the top of each message in the file.
-RMAIL was Emacs' first mail reader, it was written by Richard Stallman,
-and Stallman came out of that TOPS/Babyl environment, so he wrote RMAIL
-to understand the mail files folks already had in existence.  Gnus (and
-VM, for that matter) continue to support this format because it's
-perceived as having some good qualities in those mailer-specific
-headers/status bits stuff.  RMAIL itself still exists as well, of
-course, and is still maintained by Stallman.
-
-Both of the above forms leave your mail in a single file on your
-filesystem, and they must parse that entire file each time you take a
-look at your mail.
-
-@item nnml
-
-@code{nnml} is the backend which smells the most as though you were
-actually operating with an @code{nnspool}-accessed Usenet system.  (In
-fact, I believe @code{nnml} actually derived from @code{nnspool} code,
-lo these years ago.)  One's mail is taken from the original spool file,
-and is then cut up into individual message files, 1:1.  It maintains a
-Usenet-style active file (analogous to what one finds in an INN- or
-CNews-based news system in (for instance) @file{/var/lib/news/active},
-or what is returned via the @samp{NNTP LIST} verb) and also creates
-@dfn{overview} files for efficient group entry, as has been defined for
-@sc{nntp} servers for some years now.  It is slower in mail-splitting,
-due to the creation of lots of files, updates to the @code{nnml} active
-file, and additions to overview files on a per-message basis, but it is
-extremely fast on access because of what amounts to the indexing support
-provided by the active file and overviews.
-
-@code{nnml} costs @dfn{inodes} in a big way; that is, it soaks up the
-resource which defines available places in the filesystem to put new
-files.  Sysadmins take a dim view of heavy inode occupation within
-tight, shared filesystems.  But if you live on a personal machine where
-the filesystem is your own and space is not at a premium, @code{nnml}
-wins big.
-
-It is also problematic using this backend if you are living in a
-FAT16-based Windows world, since much space will be wasted on all these
-tiny files.
-
-@item nnmh
-
-The Rand MH mail-reading system has been around UNIX systems for a very
-long time; it operates by splitting one's spool file of messages into
-individual files, but with little or no indexing support -- @code{nnmh}
-is considered to be semantically equivalent to ``@code{nnml} without
-active file or overviews''.  This is arguably the worst choice, because
-one gets the slowness of individual file creation married to the
-slowness of access parsing when learning what's new in one's groups.
-
-@item nnfolder
-
-Basically the effect of @code{nnfolder} is @code{nnmbox} (the first
-method described above) on a per-group basis.  That is, @code{nnmbox}
-itself puts *all* one's mail in one file; @code{nnfolder} provides a
-little bit of optimization to this so that each of one's mail groups has
-a Unix mail box file.  It's faster than @code{nnmbox} because each group
-can be parsed separately, and still provides the simple Unix mail box
-format requiring minimal effort in moving the mail around.  In addition, 
-it maintains an ``active'' file making it much faster for Gnus to figure 
-out how many messages there are in each separate group.
-
-If you have groups that are expected to have a massive amount of
-messages, @code{nnfolder} is not the best choice, but if you receive
-only a moderate amount of mail, @code{nnfolder} is probably the most
-friendly mail backend all over.
-
-@end table
-
-
-@node Browsing the Web
-@section Browsing the Web
-@cindex web
-@cindex browsing the web
-@cindex www
-@cindex http
-
-Web-based discussion forums are getting more and more popular.  On many
-subjects, the web-based forums have become the most important forums,
-eclipsing the importance of mailing lists and news groups.  The reason
-is easy to understand---they are friendly to new users; you just point
-and click, and there's the discussion.  With mailing lists, you have to
-go through a cumbersome subscription procedure, and most people don't
-even know what a news group is.
-
-The problem with this scenario is that web browsers are not very good at 
-being newsreaders.  They do not keep track of what articles you've read; 
-they do not allow you to score on subjects you're interested in; they do 
-not allow off-line browsing; they require you to click around and drive
-you mad in the end.
-
-So---if web browsers suck at reading discussion forums, why not use Gnus 
-to do it instead?
-
-Gnus has been getting a bit of a collection of backends for providing
-interfaces to these sources.
-
-@menu
-* Web Searches::          Creating groups from articles that match a string.
-* Slashdot::              Reading the Slashdot comments.
-* Ultimate::              The Ultimate Bulletin Board systems.
-@end menu
-
-The main caveat with all these web sources is that they probably won't
-work for a very long time.  Gleaning information from the @sc{html} data 
-is guesswork at best, and when the layout is altered, the Gnus backend
-will fail.  If you have reasonably new versions of these backends,
-though, you should be ok.
-
-One thing all these Web methods have in common is that the Web sources
-are often down, unavailable or just plain too slow to be fun.  In those
-cases, it makes a lot of sense to let the Gnus Agent (@pxref{Gnus
-Unplugged}) handle downloading articles, and then you can read them at
-leisure from your local disk.  No more World Wide Wait for you.
-
-
-@node Web Searches
-@subsection Web Searches
-@cindex nnweb
-@cindex DejaNews
-@cindex Alta Vista
-@cindex InReference
-@cindex Usenet searches
-@cindex searching the Usenet
-
-It's, like, too neat to search the Usenet for articles that match a
-string, but it, like, totally @emph{sucks}, like, totally, to use one of
-those, like, Web browsers, and you, like, have to, rilly, like, look at
-the commercials, so, like, with Gnus you can do @emph{rad}, rilly,
-searches without having to use a browser.
-
-The @code{nnweb} backend allows an easy interface to the mighty search
-engine.  You create an @code{nnweb} group, enter a search pattern, and
-then enter the group and read the articles like you would any normal
-group.  The @kbd{G w} command in the group buffer (@pxref{Foreign
-Groups}) will do this in an easy-to-use fashion.
-
-@code{nnweb} groups don't really lend themselves to being solid
-groups---they have a very fleeting idea of article numbers.  In fact,
-each time you enter an @code{nnweb} group (not even changing the search
-pattern), you are likely to get the articles ordered in a different
-manner.  Not even using duplicate suppression (@pxref{Duplicate
-Suppression}) will help, since @code{nnweb} doesn't even know the
-@code{Message-ID} of the articles before reading them using some search
-engines (DejaNews, for instance).  The only possible way to keep track
-of which articles you've read is by scoring on the @code{Date}
-header---mark all articles posted before the last date you read the
-group as read.
-
-If the search engine changes its output substantially, @code{nnweb}
-won't be able to parse it and will fail.  One could hardly fault the Web
-providers if they were to do this---their @emph{raison d'être} is to
-make money off of advertisements, not to provide services to the
-community.  Since @code{nnweb} washes the ads off all the articles, one
-might think that the providers might be somewhat miffed.  We'll see.
-
-You must have the @code{url} and @code{w3} package installed to be able
-to use @code{nnweb}.
-
-Virtual server variables:
-
-@table @code
-@item nnweb-type
-@vindex nnweb-type
-What search engine type is being used.  The currently supported types
-are @code{dejanews}, @code{dejanewsold}, @code{altavista} and
-@code{reference}.
-
-@item nnweb-search
-@vindex nnweb-search
-The search string to feed to the search engine.
-
-@item nnweb-max-hits
-@vindex nnweb-max-hits
-Advisory maximum number of hits per search to display.  The default is
-100.
-
-@item nnweb-type-definition
-@vindex nnweb-type-definition
-Type-to-definition alist.  This alist says what @code{nnweb} should do
-with the various search engine types.  The following elements must be
-present:
-
-@table @code
-@item article
-Function to decode the article and provide something that Gnus
-understands.
-
-@item map
-Function to create an article number to message header and URL alist.
-
-@item search
-Function to send the search string to the search engine.
-
-@item address
-The address the aforementioned function should send the search string
-to.
-
-@item id
-Format string URL to fetch an article by @code{Message-ID}.
-@end table
-
-@end table
-
-
-@node Slashdot
-@subsection Slashdot
-@cindex Slashdot
-@cindex nnslashdot
-
-Slashdot (@file{http://slashdot.org/}) is a popular news site, with
-lively discussion following the news articles.  @code{nnslashdot} will
-let you read this forum in a convenient manner.
-
-The easiest way to read this source is to put something like the
-following in your @file{.gnus.el} file:
-
-@lisp
-(setq gnus-secondary-select-methods
-      '((nnslashdot "")))
-@end lisp
-
-This will make Gnus query the @code{nnslashdot} backend for new comments
-and groups.  The @kbd{F} command will subscribe each new news article as
-a new Gnus group, and you can read the comments by entering these
-groups.  (Note that the default subscription method is to subscribe new
-groups as zombies.  Other methods are available (@pxref{Subscription
-Methods}).
-
-When following up to @code{nnslashdot} comments (or posting new
-comments), some light @sc{html}izations will be performed.  In
-particular, text quoted with @samp{> } will be quoted with
-@code{blockquote} instead, and signatures will have @code{br} added to
-the end of each line.  Other than that, you can just write @sc{html}
-directly into the message buffer.  Note that Slashdot filters out some
-@sc{html} forms.
-
-The following variables can be altered to change its behavior:
-
-@table @code
-@item nnslashdot-threaded
-Whether @code{nnslashdot} should display threaded groups or not.  The
-default is @code{t}.  To be able to display threads, @code{nnslashdot}
-has to retrieve absolutely all comments in a group upon entry.  If a
-threaded display is not required, @code{nnslashdot} will only retrieve
-the comments that are actually wanted by the user.  Threading is nicer,
-but much, much slower than untreaded.
-
-@item nnslashdot-login-name
-@vindex nnslashdot-login-name
-The login name to use when posting.
-
-@item nnslashdot-password
-@vindex nnslashdot-password
-The password to use when posting.
-
-@item nnslashdot-directory
-@vindex nnslashdot-directory
-Where @code{nnslashdot} will store its files.  The default value is
-@samp{~/News/slashdot/}.
-
-@item nnslashdot-active-url
-@vindex nnslashdot-active-url
-The @sc{url} format string that will be used to fetch the information on 
-news articles and comments.  The default is
-@samp{http://slashdot.org/search.pl?section=&min=%d}.
-
-@item nnslashdot-comments-url
-@vindex nnslashdot-comments-url
-The @sc{url} format string that will be used to fetch comments.  The
-default is
-@samp{http://slashdot.org/comments.pl?sid=%s&threshold=%d&commentsort=%d&mode=flat&startat=%d}.
-
-@item nnslashdot-article-url
-@vindex nnslashdot-article-url
-The @sc{url} format string that will be used to fetch the news article.  The
-default is
-@samp{http://slashdot.org/article.pl?sid=%s&mode=nocomment}.
-
-@item nnslashdot-threshold
-@vindex nnslashdot-threshold
-The score threshold.  The default is -1.
-
-@item nnslashdot-group-number
-@vindex nnslashdot-group-number
-The number of old groups, in addition to the ten latest, to keep
-updated.  The default is 0.
-
-@end table
-
-
-
-@node Ultimate
-@subsection Ultimate
-@cindex nnultimate
-@cindex Ultimate Bulletin Board
-
-The Ultimate Bulletin Board (@file{http://www.ultimatebb.com/}) is
-probably the most popular Web bulletin board system used.  It has a
-quite regular and nice interface, and it's possible to get the
-information Gnus needs to keep groups updated.
-
-The easiest way to get started with @code{nnultimate} is to say
-something like the following in the group buffer:  @kbd{B nnultimate RET 
-http://www.tcj.com/messboard/ubbcgi/ RET}.  (Substitute the @sc{url}
-(not including @samp{Ultimate.cgi} or the like at the end) for a forum
-you're interested in; there's quite a list of them on the Ultimate web
-site.)  Then subscribe to the groups you're interested in from the
-server buffer, and read them from the group buffer.
-
-The following @code{nnultimate} variables can be altered:
-
-@table @code
-@item nnultimate-directory
-@vindex nnultimate-directory
-The directory where @code{nnultimate} stores its files.  The default is
-@samp{~/News/ultimate/}.
-@end table
-
-
-@node Other Sources
-@section Other Sources
-
-Gnus can do more than just read news or mail.  The methods described
-below allow Gnus to view directories and files as if they were
-newsgroups.
-
-@menu
-* Directory Groups::      You can read a directory as if it was a newsgroup.
-* Anything Groups::       Dired?  Who needs dired?
-* Document Groups::       Single files can be the basis of a group.
-* SOUP::                  Reading @sc{SOUP} packets ``offline''.
-* Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
-* IMAP::                  Using Gnus as a IMAP client.
-@end menu
-
-
-@node Directory Groups
-@subsection Directory Groups
-@cindex nndir
-@cindex directory groups
-
-If you have a directory that has lots of articles in separate files in
-it, you might treat it as a newsgroup.  The files have to have numerical
-names, of course.
-
-This might be an opportune moment to mention @code{ange-ftp} (and its
-successor @code{efs}), that most wonderful of all wonderful Emacs
-packages.  When I wrote @code{nndir}, I didn't think much about it---a
-backend to read directories.  Big deal.
-
-@code{ange-ftp} changes that picture dramatically.  For instance, if you
-enter the @code{ange-ftp} file name
-@file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the directory name,
-@code{ange-ftp} or @code{efs} will actually allow you to read this
-directory over at @samp{sina} as a newsgroup.  Distributed news ahoy!
-
-@code{nndir} will use @sc{nov} files if they are present.
-
-@code{nndir} is a ``read-only'' backend---you can't delete or expire
-articles with this method.  You can use @code{nnmh} or @code{nnml} for
-whatever you use @code{nndir} for, so you could switch to any of those
-methods if you feel the need to have a non-read-only @code{nndir}.
-
-
-@node Anything Groups
-@subsection Anything Groups
-@cindex nneething
-
-From the @code{nndir} backend (which reads a single spool-like
-directory), it's just a hop and a skip to @code{nneething}, which
-pretends that any arbitrary directory is a newsgroup.  Strange, but
-true.
-
-When @code{nneething} is presented with a directory, it will scan this
-directory and assign article numbers to each file.  When you enter such
-a group, @code{nneething} must create ``headers'' that Gnus can use.
-After all, Gnus is a newsreader, in case you're
-forgetting. @code{nneething} does this in a two-step process.  First, it
-snoops each file in question.  If the file looks like an article (i.e.,
-the first few lines look like headers), it will use this as the head.
-If this is just some arbitrary file without a head (e.g. a C source
-file), @code{nneething} will cobble up a header out of thin air.  It
-will use file ownership, name and date and do whatever it can with these
-elements.
-
-All this should happen automatically for you, and you will be presented
-with something that looks very much like a newsgroup.  Totally like a
-newsgroup, to be precise.  If you select an article, it will be displayed
-in the article buffer, just as usual.
-
-If you select a line that represents a directory, Gnus will pop you into
-a new summary buffer for this @code{nneething} group.  And so on.  You can
-traverse the entire disk this way, if you feel like, but remember that
-Gnus is not dired, really, and does not intend to be, either.
-
-There are two overall modes to this action---ephemeral or solid.  When
-doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
-will not store information on what files you have read, and what files
-are new, and so on.  If you create a solid @code{nneething} group the
-normal way with @kbd{G m}, Gnus will store a mapping table between
-article numbers and file names, and you can treat this group like any
-other groups.  When you activate a solid @code{nneething} group, you will
-be told how many unread articles it contains, etc., etc.
-
-Some variables:
-
-@table @code
-@item nneething-map-file-directory
-@vindex nneething-map-file-directory
-All the mapping files for solid @code{nneething} groups will be stored
-in this directory, which defaults to @file{~/.nneething/}.
-
-@item nneething-exclude-files
-@vindex nneething-exclude-files
-All files that match this regexp will be ignored.  Nice to use to exclude
-auto-save files and the like, which is what it does by default.
-
-@item nneething-include-files
-@vindex nneething-include-files
-Regexp saying what files to include in the group.  If this variable is
-non-@code{nil}, only files matching this regexp will be included.
-
-@item nneething-map-file
-@vindex nneething-map-file
-Name of the map files.
-@end table
-
-
-@node Document Groups
-@subsection Document Groups
-@cindex nndoc
-@cindex documentation group
-@cindex help group
-
-@code{nndoc} is a cute little thing that will let you read a single file
-as a newsgroup.  Several files types are supported:
-
-@table @code
-@cindex babyl
-@cindex rmail mbox
-
-@item babyl
-The babyl (rmail) mail box.
-@cindex mbox
-@cindex Unix mbox
-
-@item mbox
-The standard Unix mbox file.
-
-@cindex MMDF mail box
-@item mmdf
-The MMDF mail box format.
-
-@item news
-Several news articles appended into a file.
-
-@item rnews
-@cindex rnews batch files
-The rnews batch transport format.
-@cindex forwarded messages
-
-@item forward
-Forwarded articles.
-
-@item nsmail
-Netscape mail boxes.
-
-@item mime-parts
-MIME multipart messages.
-
-@item standard-digest
-The standard (RFC 1153) digest format.
-
-@item slack-digest
-Non-standard digest format---matches most things, but does it badly.
-@end table
-
-You can also use the special ``file type'' @code{guess}, which means
-that @code{nndoc} will try to guess what file type it is looking at.
-@code{digest} means that @code{nndoc} should guess what digest type the
-file is.
-
-@code{nndoc} will not try to change the file or insert any extra headers into
-it---it will simply, like, let you use the file as the basis for a
-group.  And that's it.
-
-If you have some old archived articles that you want to insert into your
-new & spiffy Gnus mail backend, @code{nndoc} can probably help you with
-that.  Say you have an old @file{RMAIL} file with mail that you now want
-to split into your new @code{nnml} groups.  You look at that file using
-@code{nndoc} (using the @kbd{G f} command in the group buffer
-(@pxref{Foreign Groups})), set the process mark on all the articles in
-the buffer (@kbd{M P b}, for instance), and then re-spool (@kbd{B r})
-using @code{nnml}.  If all goes well, all the mail in the @file{RMAIL}
-file is now also stored in lots of @code{nnml} directories, and you can
-delete that pesky @file{RMAIL} file.  If you have the guts!
-
-Virtual server variables:
-
-@table @code
-@item nndoc-article-type
-@vindex nndoc-article-type
-This should be one of @code{mbox}, @code{babyl}, @code{digest},
-@code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
-@code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
-@code{slack-digest}, @code{clari-briefs}, @code{nsmail} or @code{guess}.
-
-@item nndoc-post-type
-@vindex nndoc-post-type
-This variable says whether Gnus is to consider the group a news group or
-a mail group.  There are two valid values:  @code{mail} (the default)
-and @code{news}.
-@end table
-
-@menu
-* Document Server Internals::   How to add your own document types.
-@end menu
-
-
-@node Document Server Internals
-@subsubsection Document Server Internals
-
-Adding new document types to be recognized by @code{nndoc} isn't
-difficult.  You just have to whip up a definition of what the document
-looks like, write a predicate function to recognize that document type,
-and then hook into @code{nndoc}.
-
-First, here's an example document type definition:
-
-@example
-(mmdf
- (article-begin .  "^\^A\^A\^A\^A\n")
- (body-end .  "^\^A\^A\^A\^A\n"))
-@end example
-
-The definition is simply a unique @dfn{name} followed by a series of
-regexp pseudo-variable settings.  Below are the possible
-variables---don't be daunted by the number of variables; most document
-types can be defined with very few settings:
-
-@table @code
-@item first-article
-If present, @code{nndoc} will skip past all text until it finds
-something that match this regexp.  All text before this will be
-totally ignored.
-
-@item article-begin
-This setting has to be present in all document type definitions.  It
-says what the beginning of each article looks like.
-
-@item head-begin-function
-If present, this should be a function that moves point to the head of
-the article.
-
-@item nndoc-head-begin
-If present, this should be a regexp that matches the head of the
-article.
-
-@item nndoc-head-end
-This should match the end of the head of the article.  It defaults to
-@samp{^$}---the empty line.
-
-@item body-begin-function
-If present, this function should move point to the beginning of the body
-of the article.
-
-@item body-begin
-This should match the beginning of the body of the article.  It defaults
-to @samp{^\n}.
-
-@item body-end-function
-If present, this function should move point to the end of the body of
-the article.
-
-@item body-end
-If present, this should match the end of the body of the article.
-
-@item file-end
-If present, this should match the end of the file.  All text after this
-regexp will be totally ignored.
-
-@end table
-
-So, using these variables @code{nndoc} is able to dissect a document
-file into a series of articles, each with a head and a body.  However, a
-few more variables are needed since not all document types are all that
-news-like---variables needed to transform the head or the body into
-something that's palatable for Gnus:
-
-@table @code
-@item prepare-body-function
-If present, this function will be called when requesting an article.  It
-will be called with point at the start of the body, and is useful if the
-document has encoded some parts of its contents.
-
-@item article-transform-function
-If present, this function is called when requesting an article.  It's
-meant to be used for more wide-ranging transformation of both head and
-body of the article.
-
-@item generate-head-function
-If present, this function is called to generate a head that Gnus can
-understand.  It is called with the article number as a parameter, and is
-expected to generate a nice head for the article in question.  It is
-called when requesting the headers of all articles.
-
-@end table
-
-Let's look at the most complicated example I can come up with---standard
-digests:
-
-@example
-(standard-digest
- (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
- (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
- (prepare-body-function . nndoc-unquote-dashes)
- (body-end-function . nndoc-digest-body-end)
- (head-end . "^ ?$")
- (body-begin . "^ ?\n")
- (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
- (subtype digest guess))
-@end example
-
-We see that all text before a 70-width line of dashes is ignored; all
-text after a line that starts with that @samp{^End of} is also ignored;
-each article begins with a 30-width line of dashes; the line separating
-the head from the body may contain a single space; and that the body is
-run through @code{nndoc-unquote-dashes} before being delivered.
-
-To hook your own document definition into @code{nndoc}, use the
-@code{nndoc-add-type} function.  It takes two parameters---the first is
-the definition itself and the second (optional) parameter says where in
-the document type definition alist to put this definition.  The alist is
-traversed sequentially, and @code{nndoc-TYPE-type-p} is called for a given type @code{TYPE}.  So @code{nndoc-mmdf-type-p} is called to see whether a document
-is of @code{mmdf} type, and so on.  These type predicates should return
-@code{nil} if the document is not of the correct type; @code{t} if it is
-of the correct type; and a number if the document might be of the
-correct type.  A high number means high probability; a low number means
-low probability with @samp{0} being the lowest valid number.
-
-
-@node SOUP
-@subsection SOUP
-@cindex SOUP
-@cindex offline
-
-In the PC world people often talk about ``offline'' newsreaders.  These
-are thingies that are combined reader/news transport monstrosities.
-With built-in modem programs.  Yecchh!
-
-Of course, us Unix Weenie types of human beans use things like
-@code{uucp} and, like, @code{nntpd} and set up proper news and mail
-transport things like Ghod intended.  And then we just use normal
-newsreaders.
-
-However, it can sometimes be convenient to do something that's a bit
-easier on the brain if you have a very slow modem, and you're not really
-that interested in doing things properly.
-
-A file format called @sc{soup} has been developed for transporting news
-and mail from servers to home machines and back again.  It can be a bit
-fiddly.
-
-First some terminology:
-
-@table @dfn
-
-@item server
-This is the machine that is connected to the outside world and where you
-get news and/or mail from.
-
-@item home machine
-This is the machine that you want to do the actual reading and responding
-on.  It is typically not connected to the rest of the world in any way.
-
-@item packet
-Something that contains messages and/or commands.  There are two kinds
-of packets:
-
-@table @dfn
-@item message packets
-These are packets made at the server, and typically contain lots of
-messages for you to read.  These are called @file{SoupoutX.tgz} by
-default, where @var{x} is a number.
-
-@item response packets
-These are packets made at the home machine, and typically contains
-replies that you've written.  These are called @file{SoupinX.tgz} by
-default, where @var{x} is a number.
-
-@end table
-
-@end table
-
-
-@enumerate
-
-@item
-You log in on the server and create a @sc{soup} packet.  You can either
-use a dedicated @sc{soup} thingie (like the @code{awk} program), or you
-can use Gnus to create the packet with its @sc{soup} commands (@kbd{O
-s} and/or @kbd{G s b}; and then @kbd{G s p}) (@pxref{SOUP Commands}).
-
-@item
-You transfer the packet home.  Rail, boat, car or modem will do fine.
-
-@item
-You put the packet in your home directory.
-
-@item
-You fire up Gnus on your home machine using the @code{nnsoup} backend as
-the native or secondary server.
-
-@item
-You read articles and mail and answer and followup to the things you
-want (@pxref{SOUP Replies}).
-
-@item
-You do the @kbd{G s r} command to pack these replies into a @sc{soup}
-packet.
-
-@item
-You transfer this packet to the server.
-
-@item
-You use Gnus to mail this packet out with the @kbd{G s s} command.
-
-@item
-You then repeat until you die.
-
-@end enumerate
-
-So you basically have a bipartite system---you use @code{nnsoup} for
-reading and Gnus for packing/sending these @sc{soup} packets.
-
-@menu
-* SOUP Commands::     Commands for creating and sending @sc{soup} packets
-* SOUP Groups::       A backend for reading @sc{soup} packets.
-* SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.
-@end menu
-
-
-@node SOUP Commands
-@subsubsection SOUP Commands
-
-These are commands for creating and manipulating @sc{soup} packets.
-
-@table @kbd
-@item G s b
-@kindex G s b (Group)
-@findex gnus-group-brew-soup
-Pack all unread articles in the current group
-(@code{gnus-group-brew-soup}).  This command understands the
-process/prefix convention.
-
-@item G s w
-@kindex G s w (Group)
-@findex gnus-soup-save-areas
-Save all @sc{soup} data files (@code{gnus-soup-save-areas}).
-
-@item G s s
-@kindex G s s (Group)
-@findex gnus-soup-send-replies
-Send all replies from the replies packet
-(@code{gnus-soup-send-replies}).
-
-@item G s p
-@kindex G s p (Group)
-@findex gnus-soup-pack-packet
-Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}).
-
-@item G s r
-@kindex G s r (Group)
-@findex nnsoup-pack-replies
-Pack all replies into a replies packet (@code{nnsoup-pack-replies}).
-
-@item O s
-@kindex O s (Summary)
-@findex gnus-soup-add-article
-This summary-mode command adds the current article to a @sc{soup} packet
-(@code{gnus-soup-add-article}).  It understands the process/prefix
-convention (@pxref{Process/Prefix}).
-
-@end table
-
-
-There are a few variables to customize where Gnus will put all these
-thingies:
-
-@table @code
-
-@item gnus-soup-directory
-@vindex gnus-soup-directory
-Directory where Gnus will save intermediate files while composing
-@sc{soup} packets.  The default is @file{~/SoupBrew/}.
-
-@item gnus-soup-replies-directory
-@vindex gnus-soup-replies-directory
-This is what Gnus will use as a temporary directory while sending our
-reply packets.  @file{~/SoupBrew/SoupReplies/} is the default.
-
-@item gnus-soup-prefix-file
-@vindex gnus-soup-prefix-file
-Name of the file where Gnus stores the last used prefix.  The default is
-@samp{gnus-prefix}.
-
-@item gnus-soup-packer
-@vindex gnus-soup-packer
-A format string command for packing a @sc{soup} packet.  The default is
-@samp{tar cf - %s | gzip > $HOME/Soupout%d.tgz}.
-
-@item gnus-soup-unpacker
-@vindex gnus-soup-unpacker
-Format string command for unpacking a @sc{soup} packet.  The default is
-@samp{gunzip -c %s | tar xvf -}.
-
-@item gnus-soup-packet-directory
-@vindex gnus-soup-packet-directory
-Where Gnus will look for reply packets.  The default is @file{~/}.
-
-@item gnus-soup-packet-regexp
-@vindex gnus-soup-packet-regexp
-Regular expression matching @sc{soup} reply packets in
-@code{gnus-soup-packet-directory}.
-
-@end table
-
-
-@node SOUP Groups
-@subsubsection @sc{soup} Groups
-@cindex nnsoup
-
-@code{nnsoup} is the backend for reading @sc{soup} packets.  It will
-read incoming packets, unpack them, and put them in a directory where
-you can read them at leisure.
-
-These are the variables you can use to customize its behavior:
-
-@table @code
-
-@item nnsoup-tmp-directory
-@vindex nnsoup-tmp-directory
-When @code{nnsoup} unpacks a @sc{soup} packet, it does it in this
-directory.  (@file{/tmp/} by default.)
-
-@item nnsoup-directory
-@vindex nnsoup-directory
-@code{nnsoup} then moves each message and index file to this directory.
-The default is @file{~/SOUP/}.
-
-@item nnsoup-replies-directory
-@vindex nnsoup-replies-directory
-All replies will be stored in this directory before being packed into a
-reply packet.  The default is @file{~/SOUP/replies/"}.
-
-@item nnsoup-replies-format-type
-@vindex nnsoup-replies-format-type
-The @sc{soup} format of the replies packets.  The default is @samp{?n}
-(rnews), and I don't think you should touch that variable.  I probably
-shouldn't even have documented it.  Drats!  Too late!
-
-@item nnsoup-replies-index-type
-@vindex nnsoup-replies-index-type
-The index type of the replies packet.  The default is @samp{?n}, which
-means ``none''.  Don't fiddle with this one either!
-
-@item nnsoup-active-file
-@vindex nnsoup-active-file
-Where @code{nnsoup} stores lots of information.  This is not an ``active
-file'' in the @code{nntp} sense; it's an Emacs Lisp file.  If you lose
-this file or mess it up in any way, you're dead.  The default is
-@file{~/SOUP/active}.
-
-@item nnsoup-packer
-@vindex nnsoup-packer
-Format string command for packing a reply @sc{soup} packet.  The default
-is @samp{tar cf - %s | gzip > $HOME/Soupin%d.tgz}.
-
-@item nnsoup-unpacker
-@vindex nnsoup-unpacker
-Format string command for unpacking incoming @sc{soup} packets.  The
-default is @samp{gunzip -c %s | tar xvf -}.
-
-@item nnsoup-packet-directory
-@vindex nnsoup-packet-directory
-Where @code{nnsoup} will look for incoming packets.  The default is
-@file{~/}.
-
-@item nnsoup-packet-regexp
-@vindex nnsoup-packet-regexp
-Regular expression matching incoming @sc{soup} packets.  The default is
-@samp{Soupout}.
-
-@item nnsoup-always-save
-@vindex nnsoup-always-save
-If non-@code{nil}, save the replies buffer after each posted message.
-
-@end table
-
-
-@node SOUP Replies
-@subsubsection SOUP Replies
-
-Just using @code{nnsoup} won't mean that your postings and mailings end
-up in @sc{soup} reply packets automagically.  You have to work a bit
-more for that to happen.
-
-@findex nnsoup-set-variables
-The @code{nnsoup-set-variables} command will set the appropriate
-variables to ensure that all your followups and replies end up in the
-@sc{soup} system.
-
-In specific, this is what it does:
-
-@lisp
-(setq message-send-news-function 'nnsoup-request-post)
-(setq message-send-mail-function 'nnsoup-request-mail)
-@end lisp
-
-And that's it, really.  If you only want news to go into the @sc{soup}
-system you just use the first line.  If you only want mail to be
-@sc{soup}ed you use the second.
-
-
-@node Mail-To-News Gateways
-@subsection Mail-To-News Gateways
-@cindex mail-to-news gateways
-@cindex gateways
-
-If your local @code{nntp} server doesn't allow posting, for some reason
-or other, you can post using one of the numerous mail-to-news gateways.
-The @code{nngateway} backend provides the interface.
-
-Note that you can't read anything from this backend---it can only be
-used to post with.
-
-Server variables:
-
-@table @code
-@item nngateway-address
-@vindex nngateway-address
-This is the address of the mail-to-news gateway.
-
-@item nngateway-header-transformation
-@vindex nngateway-header-transformation
-News headers often have to be transformed in some odd way or other
-for the mail-to-news gateway to accept it.  This variable says what
-transformation should be called, and defaults to
-@code{nngateway-simple-header-transformation}.  The function is called
-narrowed to the headers to be transformed and with one parameter---the
-gateway address.
-
-This default function just inserts a new @code{To} header based on the
-@code{Newsgroups} header and the gateway address.
-For instance, an article with this @code{Newsgroups} header:
-
-@example
-Newsgroups: alt.religion.emacs
-@end example
-
-will get this @code{From} header inserted:
-
-@example
-To: alt-religion-emacs@@GATEWAY
-@end example
-
-The following pre-defined functions exist:
-
-@findex nngateway-simple-header-transformation
-@table @code
-
-@item nngateway-simple-header-transformation
-Creates a @code{To} header that looks like
-@var{newsgroup}@@@code{nngateway-address}.
-
-@findex nngateway-mail2news-header-transformation
-
-@item nngateway-mail2news-header-transformation
-Creates a @code{To} header that looks like
-@code{nngateway-address}.
-
-Here's an example:
-
-@lisp
-(setq gnus-post-method
-      '(nngateway "mail2news@@replay.com"
-                  (nngateway-header-transformation
-                   nngateway-mail2news-header-transformation)))
-@end lisp
-
-@end table
-
-
-@end table
-
-So, to use this, simply say something like:
-
-@lisp
-(setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
-@end lisp
-
-
-
-@node IMAP
-@subsection IMAP
-@cindex nnimap
-@cindex IMAP
-
-IMAP is a network protocol for reading mail (or news, or ...), think of
-it as a modernized NNTP. Connecting to a IMAP server is much similar to
-connecting to a news server, you just specify the network address of the
-server.
-
-The following variables can be used to create a virtual @code{nnimap}
-server:
-
-@table @code
-
-@item nnimap-address
-@vindex nnimap-address
-
-The address of the remote IMAP server. Defaults to the virtual server
-name if not specified.
-
-@item nnimap-server-port
-@vindex nnimap-server-port
-Port on server to contact. Defaults to port 143, or 993 for SSL.
-
-@item nnimap-list-pattern
-@vindex nnimap-list-pattern
-String or list of strings of mailboxes to limit available groups
-to. This is used when the server has very many mailboxes and you're only
-interested in a few -- some servers export your home directory via IMAP,
-you'll probably want to limit the mailboxes to those in @file{~/Mail/*}
-then.
-
-The string can also be a cons of REFERENCE and the string as above, what
-REFERENCE is used for is server specific, but on the University of
-Washington server it's a directory that will be concatenated with the
-mailbox.
-
-Example:
-
-@lisp
-("INBOX" "Mail/*" "alt.sex.*" ("~friend/Mail/" . "list/*"))
-@end lisp
-
-@item nnimap-stream
-@vindex nnimap-stream
-The type of stream used to connect to your server. By default, nnimap
-will use the most secure stream your server is capable of.
-
-@itemize @bullet
-@item
-@dfn{kerberos4:} Uses the `imtest' program.
-@item
-@dfn{ssl:} Uses OpenSSL or SSLeay.
-@item
-@dfn{network:} Plain, TCP/IP network connection.
-@end itemize
-
-@item nnimap-authenticator
-@vindex nnimap-authenticator
-
-The authenticator used to connect to the server. By default, nnimap will
-use the most secure authenticator your server is capable of.
-
-@itemize @bullet
-@item
-@dfn{kerberos4:} Kerberos authentication.
-@item
-@dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
-@item
-@dfn{login:} Plain-text username/password via LOGIN.
-@item
-@dfn{anonymous:} Login as `anonymous', supplying your emailadress as password.
-@end itemize
-
-@item nnimap-expunge-on-close
-@cindex Expunging
-@vindex nnimap-expunge-on-close
-Unlike Parmenides the IMAP designers has decided that things that
-doesn't exist actually does exist. More specifically, IMAP has this
-concept of marking articles @code{Deleted} which doesn't actually delete
-them, and this (marking them @code{Deleted}, that is) is what nnimap
-does when you delete a article in Gnus (with @kbd{G DEL} or similair).
-
-Since the articles aren't really removed when we mark them with the
-@code{Deleted} flag we'll need a way to actually delete them. Feel like
-running in circles yet?
-
-Traditionally, nnimap has removed all articles marked as @code{Deleted}
-when closing a mailbox but this is now configurable by this server
-variable.
-
-The possible options are:
-
-@table @code
-
-@item always
-The default behaviour, delete all articles marked as "Deleted" when
-closing a mailbox.
-@item never
-Never actually delete articles. Currently there is no way of showing the
-articles marked for deletion in nnimap, but other IMAP clients may allow
-you to do this. If you ever want to run the EXPUNGE command manually,
-@xref{Expunging mailboxes}.
-@item ask
-When closing mailboxes, nnimap will ask if you wish to expunge deleted
-articles or not.
-@end table
-
-@end table
-
-@menu
-* Splitting in IMAP::     Splitting mail with nnimap.
-* Editing IMAP ACLs::     Limiting/enabling other users access to a mailbox.
-* Expunging mailboxes::   Equivalent of a "compress mailbox" button.
-@end menu
-
-
-
-@node Splitting in IMAP
-@subsubsection Splitting in IMAP
-@cindex splitting imap mail
-
-Splitting is something Gnus users has loved and used for years, and now
-the rest of the world is catching up. Yeah, dream on, not many IMAP
-server has server side splitting and those that have splitting seem to
-use some non-standard protocol. This means that IMAP support for Gnus
-has to do it's own splitting.
-
-And it does.
-
-There are three variables of interest:
-
-@table @code
-
-@item nnimap-split-crosspost
-@cindex splitting, crosspost
-@cindex crosspost
-@vindex nnimap-split-crosspost
-
-If non-nil, do crossposting if several split methods match the mail. If
-nil, the first match in @code{nnimap-split-rule} found will be used.
-
-Nnmail equivalent: @code{nnmail-crosspost}.
-
-@item nnimap-split-inbox
-@cindex splitting, inbox
-@cindex inbox
-@vindex nnimap-split-inbox
-
-A string or a list of strings that gives the name(s) of IMAP mailboxes
-to split from. Defaults to nil, which means that splitting is disabled!
-
-@lisp
-(setq nnimap-split-inbox '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
-@end lisp
-
-No nnmail equivalent.
-
-@item nnimap-split-rule
-@cindex Splitting, rules
-@vindex nnimap-split-rule
-
-New mail found in @code{nnimap-split-inbox} will be split according to
-this variable.
-
-This variable contains a list of lists, where the first element in the
-sublist gives the name of the IMAP mailbox to move articles matching the
-regexp in the second element in the sublist. Got that? Neither did I, we
-need examples.
-
-@lisp
-(setq nnimap-split-rule
-        '(("INBOX.nnimap"        "^Sender: owner-nnimap@@vic20.globalcom.se")
-          ("INBOX.junk"          "^Subject:.*MAKE MONEY")
-          ("INBOX.private"       "")))
-@end lisp
-
-This will put all articles from the nnimap mailing list into mailbox
-INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
-into INBOX.spam and everything else in INBOX.private.
-
-The first string may contain `\\1' forms, like the ones used by
-replace-match to insert sub-expressions from the matched text. For
-instance:
-
-@lisp
-("INBOX.lists.\\1"     "^Sender: owner-\\([a-z-]+\\)@@")
-@end lisp
-
-The second element can also be a function. In that case, it will be
-called with the first element of the rule as the argument, in a buffer
-containing the headers of the article. It should return a non-nil value
-if it thinks that the mail belongs in that group.
-
-Nnmail users might recollect that the last regexp had to be empty to
-match all articles (like in the example above). This is not required in
-nnimap. Articles not matching any of the regexps will not be moved out
-of your inbox. (This might might affect performance if you keep lots of
-unread articles in your inbox, since the splitting code would go over
-them every time you fetch new mail.)
-
-These rules are processed from the beginning of the alist toward the
-end. The first rule to make a match will "win", unless you have
-crossposting enabled. In that case, all matching rules will "win".
-
-The splitting code tries to create mailboxes if it need too.
-
-Nnmail equivalent: @code{nnmail-split-methods}.
-
-@end table
-
-@node Editing IMAP ACLs
-@subsubsection Editing IMAP ACLs
-@cindex editing imap acls
-@cindex Access Control Lists
-@cindex Editing IMAP ACLs
-@kindex G l
-@findex gnus-group-nnimap-edit-acl
-
-ACL stands for Access Control List.  ACLs are used in IMAP for limiting
-(or enabling) other users access to your mail boxes. Not all IMAP
-servers support this, this function will give an error if it doesn't.
-
-To edit a ACL for a mailbox, type @kbd{G l}
-(@code{gnus-group-edit-nnimap-acl}) and you'll be presented with a ACL
-editing window with detailed instructions.
-
-Some possible uses:
-
-@itemize @bullet
-@item
-Giving "anyone" the "lrs" rights (lookup, read, keep seen/unseen flags)
-on your mailing list mailboxes enables other users on the same server to
-follow the list without subscribing to it.
-@item
-At least with the Cyrus server, you are required to give the user
-"anyone" posting ("p") capabilities to have "plussing" work (that is,
-mail sent to user+mailbox@@domain ending up in the IMAP mailbox
-INBOX.mailbox).
-@end itemize
-
-@node Expunging mailboxes
-@subsubsection Expunging mailboxes
-@cindex expunging
-
-@cindex Expunge
-@cindex Manual expunging
-@kindex G x
-@findex gnus-group-nnimap-expunge
-
-If you're using the @code{never} setting of @code{nnimap-expunge-close},
-you may want the option of expunging all deleted articles in a mailbox
-manually. This is exactly what @kbd{G x} does.
-
-Currently there is no way of showing deleted articles, you can just
-delete them.
-
-
-
-@node Combined Groups
-@section Combined Groups
-
-Gnus allows combining a mixture of all the other group types into bigger
-groups.
-
-@menu
-* Virtual Groups::     Combining articles from many groups.
-* Kibozed Groups::     Looking through parts of the newsfeed for articles.
-@end menu
-
-
-@node Virtual Groups
-@subsection Virtual Groups
-@cindex nnvirtual
-@cindex virtual groups
-@cindex merging groups
-
-An @dfn{nnvirtual group} is really nothing more than a collection of
-other groups.
-
-For instance, if you are tired of reading many small groups, you can
-put them all in one big group, and then grow tired of reading one
-big, unwieldy group.  The joys of computing!
-
-You specify @code{nnvirtual} as the method.  The address should be a
-regexp to match component groups.
-
-All marks in the virtual group will stick to the articles in the
-component groups.  So if you tick an article in a virtual group, the
-article will also be ticked in the component group from whence it came.
-(And vice versa---marks from the component groups will also be shown in
-the virtual group.)
-
-Here's an example @code{nnvirtual} method that collects all Andrea Dworkin
-newsgroups into one, big, happy newsgroup:
-
-@lisp
-(nnvirtual "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*")
-@end lisp
-
-The component groups can be native or foreign; everything should work
-smoothly, but if your computer explodes, it was probably my fault.
-
-Collecting the same group from several servers might actually be a good
-idea if users have set the Distribution header to limit distribution.
-If you would like to read @samp{soc.motss} both from a server in Japan
-and a server in Norway, you could use the following as the group regexp:
-
-@example
-"^nntp\\+server\\.jp:soc\\.motss$\\|^nntp\\+server\\.no:soc\\.motss$"
-@end example
-
-(Remember, though, that if you're creating the group with @kbd{G m}, you
-shouldn't double the backslashes, and you should leave off the quote
-characters at the beginning and the end of the string.)
-
-This should work kinda smoothly---all articles from both groups should
-end up in this one, and there should be no duplicates.  Threading (and
-the rest) will still work as usual, but there might be problems with the
-sequence of articles.  Sorting on date might be an option here
-(@pxref{Selecting a Group}).
-
-One limitation, however---all groups included in a virtual
-group have to be alive (i.e., subscribed or unsubscribed).  Killed or
-zombie groups can't be component groups for @code{nnvirtual} groups.
-
-@vindex nnvirtual-always-rescan
-If the @code{nnvirtual-always-rescan} is non-@code{nil},
-@code{nnvirtual} will always scan groups for unread articles when
-entering a virtual group.  If this variable is @code{nil} (which is the
-default) and you read articles in a component group after the virtual
-group has been activated, the read articles from the component group
-will show up when you enter the virtual group.  You'll also see this
-effect if you have two virtual groups that have a component group in
-common.  If that's the case, you should set this variable to @code{t}.
-Or you can just tap @code{M-g} on the virtual group every time before
-you enter it---it'll have much the same effect.
-
-@code{nnvirtual} can have both mail and news groups as component groups.
-When responding to articles in @code{nnvirtual} groups, @code{nnvirtual}
-has to ask the backend of the component group the article comes from
-whether it is a news or mail backend.  However, when you do a @kbd{^},
-there is typically no sure way for the component backend to know this,
-and in that case @code{nnvirtual} tells Gnus that the article came from a
-not-news backend.  (Just to be on the safe side.)
-
-@kbd{C-c C-t} in the message buffer will insert the @code{Newsgroups}
-line from the article you respond to in these cases.
-
-
-
-@node Kibozed Groups
-@subsection Kibozed Groups
-@cindex nnkiboze
-@cindex kibozing
-
-@dfn{Kibozing} is defined by @sc{oed} as ``grepping through (parts of)
-the news feed''.  @code{nnkiboze} is a backend that will do this for
-you.  Oh joy!  Now you can grind any @sc{nntp} server down to a halt
-with useless requests!  Oh happiness!
-
-@kindex G k (Group)
-To create a kibozed group, use the @kbd{G k} command in the group
-buffer.
-
-The address field of the @code{nnkiboze} method is, as with
-@code{nnvirtual}, a regexp to match groups to be ``included'' in the
-@code{nnkiboze} group.  That's where most similarities between @code{nnkiboze}
-and @code{nnvirtual} end.
-
-In addition to this regexp detailing component groups, an @code{nnkiboze} group
-must have a score file to say what articles are to be included in
-the group (@pxref{Scoring}).
-
-@kindex M-x nnkiboze-generate-groups
-@findex nnkiboze-generate-groups
-You must run @kbd{M-x nnkiboze-generate-groups} after creating the
-@code{nnkiboze} groups you want to have.  This command will take time.  Lots of
-time.  Oodles and oodles of time.  Gnus has to fetch the headers from
-all the articles in all the component groups and run them through the
-scoring process to determine if there are any articles in the groups
-that are to be part of the @code{nnkiboze} groups.
-
-Please limit the number of component groups by using restrictive
-regexps.  Otherwise your sysadmin may become annoyed with you, and the
-@sc{nntp} site may throw you off and never let you back in again.
-Stranger things have happened.
-
-@code{nnkiboze} component groups do not have to be alive---they can be dead,
-and they can be foreign.  No restrictions.
-
-@vindex nnkiboze-directory
-The generation of an @code{nnkiboze} group means writing two files in
-@code{nnkiboze-directory}, which is @file{~/News/} by default.  One
-contains the @sc{nov} header lines for all the articles in the group,
-and the other is an additional @file{.newsrc} file to store information
-on what groups have been searched through to find component articles.
-
-Articles marked as read in the @code{nnkiboze} group will have
-their @sc{nov} lines removed from the @sc{nov} file.
-
-
-@node Gnus Unplugged
-@section Gnus Unplugged
-@cindex offline
-@cindex unplugged
-@cindex Agent
-@cindex Gnus Agent
-@cindex Gnus Unplugged
-
-In olden times (ca. February '88), people used to run their newsreaders
-on big machines with permanent connections to the net.  News transport
-was dealt with by news servers, and all the newsreaders had to do was to
-read news.  Believe it or not.
-
-Nowadays most people read news and mail at home, and use some sort of
-modem to connect to the net.  To avoid running up huge phone bills, it
-would be nice to have a way to slurp down all the news and mail, hang up
-the phone, read for several hours, and then upload any responses you
-have to make.  And then you repeat the procedure.
-
-Of course, you can use news servers for doing this as well.  I've used
-@code{inn} together with @code{slurp}, @code{pop} and @code{sendmail}
-for some years, but doing that's a bore.  Moving the news server
-functionality up to the newsreader makes sense if you're the only person
-reading news on a machine.
-
-Using Gnus as an ``offline'' newsreader is quite simple.
-
-@itemize @bullet
-@item
-First, set up Gnus as you would do if you were running it on a machine
-that has full connection to the net.  Go ahead.  I'll still be waiting
-here.
-
-@item
-Then, put the following magical incantation at the end of your
-@file{.gnus.el} file:
-
-@lisp
-(gnus-agentize)
-@end lisp
-@end itemize
-
-That's it.  Gnus is now an ``offline'' newsreader.
-
-Of course, to use it as such, you have to learn a few new commands.
-
-@menu
-* Agent Basics::           How it all is supposed to work.
-* Agent Categories::       How to tell the Gnus Agent what to download.
-* Agent Commands::         New commands for all the buffers.
-* Agent Expiry::           How to make old articles go away.
-* Outgoing Messages::      What happens when you post/mail something?
-* Agent Variables::        Customizing is fun.
-* Example Setup::          An example @file{.gnus.el} file for offline people.
-* Batching Agents::        How to fetch news from a @code{cron} job.
-* Agent Caveats::          What you think it'll do and what it does.
-@end menu
-
-
-@node Agent Basics
-@subsection Agent Basics
-
-First, let's get some terminology out of the way.
-
-The Gnus Agent is said to be @dfn{unplugged} when you have severed the
-connection to the net (and notified the Agent that this is the case).
-When the connection to the net is up again (and Gnus knows this), the
-Agent is @dfn{plugged}.
-
-The @dfn{local} machine is the one you're running on, and which isn't
-connected to the net continuously.
-
-@dfn{Downloading} means fetching things from the net to your local
-machine.  @dfn{Uploading} is doing the opposite.
-
-Let's take a typical Gnus session using the Agent.
-
-@itemize @bullet
-
-@item
-You start Gnus with @code{gnus-unplugged}.  This brings up the Gnus
-Agent in a disconnected state.  You can read all the news that you have
-already fetched while in this mode.
-
-@item
-You then decide to see whether any new news has arrived.  You connect
-your machine to the net (using PPP or whatever), and then hit @kbd{J j}
-to make Gnus become @dfn{plugged}.
-
-@item
-You can then read the new news immediately, or you can download the news
-onto your local machine.  If you want to do the latter, you press @kbd{J
-s} to fetch all the eligible articles in all the groups.  (To let Gnus
-know which articles you want to download, @pxref{Agent Categories}.)
-
-@item
-After fetching the articles, you press @kbd{J j} to make Gnus become
-unplugged again, and you shut down the PPP thing (or whatever).  And
-then you read the news offline.
-
-@item
-And then you go to step 2.
-@end itemize
-
-Here are some things you should do the first time (or so) that you use
-the Agent.
-
-@itemize @bullet
-
-@item
-Decide which servers should be covered by the Agent.  If you have a mail
-backend, it would probably be nonsensical to have it covered by the
-Agent.  Go to the server buffer (@kbd{^} in the group buffer) and press
-@kbd{J a} the server (or servers) that you wish to have covered by the
-Agent (@pxref{Server Agent Commands}).  This will typically be only the
-primary select method, which is listed on the bottom in the buffer.
-
-@item
-Decide on download policy.  @xref{Agent Categories}.
-
-@item
-Uhm... that's it.
-@end itemize
-
-
-@node Agent Categories
-@subsection Agent Categories
-
-One of the main reasons to integrate the news transport layer into the
-newsreader is to allow greater control over what articles to download.
-There's not much point in downloading huge amounts of articles, just to
-find out that you're not interested in reading any of them.  It's better
-to be somewhat more conservative in choosing what to download, and then
-mark the articles for downloading manually if it should turn out that
-you're interested in the articles anyway.
-
-The main way to control what is to be downloaded is to create a
-@dfn{category} and then assign some (or all) groups to this category.
-Groups that do not belong in any other category belong to the
-@code{default} category. Gnus has its own buffer for creating and
-managing categories.
-
-@menu
-* Category Syntax::       What a category looks like.
-* The Category Buffer::   A buffer for maintaining categories.
-* Category Variables::    Customize'r'Us.
-@end menu
-
-
-@node Category Syntax
-@subsubsection Category Syntax
-
-A category consists of two things.
-
-@enumerate
-@item
-A predicate which (generally) gives a rough outline of which articles
-are eligible for downloading; and
-
-@item
-a score rule which (generally) gives you a finer granularity when
-deciding what articles to download.  (Note that this @dfn{download
-score} is not necessarily related to normal scores.)
-@end enumerate
-
-A predicate in its simplest form can be a single predicate such as
-@code{true} or @code{false}. These two will download every available
-article or nothing respectively. In the case of these two special
-predicates an additional score rule is superfluous.
-
-Predicates of @code{high} or @code{low} download articles in respect of
-their scores in relationship to @code{gnus-agent-high-score} and
-@code{gnus-agent-low-score} as descibed below.
-
-To gain even finer control of what is to be regarded eligible for
-download a predicate can consist of a number of predicates with logical
-operators sprinkled in between.
-
-Perhaps some examples are in order.
-
-Here's a simple predicate.  (It's the default predicate, in fact, used
-for all groups that don't belong to any other category.)
-
-@lisp
-short
-@end lisp
-
-Quite simple, eh?  This predicate is true if and only if the article is
-short (for some value of ``short'').
-
-Here's a more complex predicate:
-
-@lisp
-(or high
-    (and
-     (not low)
-     (not long)))
-@end lisp
-
-This means that an article should be downloaded if it has a high score,
-or if the score is not low and the article is not long.  You get the
-drift.
-
-The available logical operators are @code{or}, @code{and} and
-@code{not}.  (If you prefer, you can use the more ``C''-ish operators
-@samp{|}, @code{&} and @code{!} instead.)
-
-The following predicates are pre-defined, but if none of these fit what
-you want to do, you can write your own.
-
-@table @code
-@item short
-True iff the article is shorter than @code{gnus-agent-short-article}
-lines; default 100.
-
-@item long
-True iff the article is longer than @code{gnus-agent-long-article}
-lines; default 200.
-
-@item low
-True iff the article has a download score less than
-@code{gnus-agent-low-score}; default 0.
-
-@item high
-True iff the article has a download score greater than
-@code{gnus-agent-high-score}; default 0.
-
-@item spam
-True iff the Gnus Agent guesses that the article is spam.  The
-heuristics may change over time, but at present it just computes a
-checksum and sees whether articles match.
-
-@item true
-Always true.
-
-@item false
-Always false.
-@end table
-
-If you want to create your own predicate function, here's what you have
-to know:  The functions are called with no parameters, but the
-@code{gnus-headers} and @code{gnus-score} dynamic variables are bound to
-useful values.
-
-For example, you could decide that you don't want to download articles
-that were posted more than a certain number of days ago (e.g. posted
-more than @code{gnus-agent-expire-days} ago) you might write a function
-something along the lines of the following:
-
-@lisp
-(defun my-article-old-p ()
-  "Say whether an article is old."
-  (< (time-to-days (date-to-time (mail-header-date gnus-headers)))
-     (- (time-to-days (current-time)) gnus-agent-expire-days)))
-@end lisp
-
-with the predicate then defined as:
-
-@lisp
-(not my-article-old-p)
-@end lisp
-
-or you could append your predicate to the predefined
-@code{gnus-category-predicate-alist} in your @file{~/.gnus.el} or
-wherever.  (Note: this would have to be at a point *after*
-@code{gnus-agent} has been loaded via @code{(gnus-agentize)})
-
-@lisp
-(defvar  gnus-category-predicate-alist
-  (append gnus-category-predicate-alist
-        '((old . my-article-old-p))))
-@end lisp
-
-and simply specify your predicate as:
-
-@lisp
-(not old)
-@end lisp
-
-If/when using something like the above, be aware that there are many
-misconfigured systems/mailers out there and so an article's date is not
-always a reliable indication of when it was posted. Hell, some people
-just don't give a damm.
-
-
-The above predicates apply to *all* the groups which belong to the
-category. However, if you wish to have a specific predicate for an
-individual group within a category, or you're just too lazy to set up a
-new category, you can enter a group's individual predicate in it's group
-parameters like so:
-
-@lisp
-(agent-predicate . short)
-@end lisp
-
-This is the group parameter equivalent of the agent category
-default. Note that when specifying a single word predicate like this,
-the @code{agent-predicate} specification must be in dotted pair
-notation.
-
-The equivalent of the longer example from above would be:
-
-@lisp
-(agent-predicate or high (and (not low) (not long)))
-@end lisp
-
-The outer parenthesis required in the category specification are not
-entered here as, not being in dotted pair notation, the value of the
-predicate is assumed to be a list.
-
-
-Now, the syntax of the download score is the same as the syntax of
-normal score files, except that all elements that require actually
-seeing the article itself are verboten.  This means that only the
-following headers can be scored on: @code{Subject}, @code{From},
-@code{Date}, @code{Message-ID}, @code{References}, @code{Chars},
-@code{Lines}, and @code{Xref}.
-
-As with predicates, the specification of the @code{download score rule}
-to use in respect of a group can be in either the category definition if
-it's to be applicable to all groups in therein, or a group's parameters
-if it's to be specific to that group.
-
-In both of these places the @code{download score rule} can take one of
-three forms:
-
-@enumerate
-@item
-Score rule
-
-This has the same syntax as a normal gnus score file except only a
-subset of scoring keywords are available as mentioned above.
-
-example:
-
-@itemize @bullet
-@item
-Category specification
-
-@lisp
-(("from"
-       ("Lars Ingebrigtsen" 1000000 nil s))
-("lines"
-       (500 -100 nil <)))
-@end lisp
-
-@item
-Group Parameter specification
-
-@lisp
-(agent-score ("from"
-                   ("Lars Ingebrigtsen" 1000000 nil s))
-             ("lines"
-                   (500 -100 nil <)))
-@end lisp
-
-Again, note the omission of the outermost parenthesis here.
-@end itemize
-
-@item
-Agent score file
-
-These score files must *only* contain the permitted scoring keywords
-stated above.
-
-example:
-
-@itemize @bullet
-@item
-Category specification
-
-@lisp
-("~/News/agent.SCORE")
-@end lisp
-
-or perhaps
-
-@lisp
-("~/News/agent.SCORE" "~/News/agent.group.SCORE")
-@end lisp
-
-@item
-Group Parameter specification
-
-@lisp
-(agent-score "~/News/agent.SCORE")
-@end lisp
-
-Additional score files can be specified as above. Need I say anything
-about parenthesis.
-@end itemize
-
-@item
-Use @code{normal} score files
-
-If you dont want to maintain two sets of scoring rules for a group, and
-your desired @code{downloading} criteria for a group are the same as your
-@code{reading} criteria then you can tell the agent to refer to your
-@code{normal} score files when deciding what to download.
-
-These directives in either the category definition or a group's
-parameters will cause the agent to read in all the applicable score
-files for a group, *filtering out* those those sections that do not
-relate to one of the permitted subset of scoring keywords.
-
-@itemize @bullet
-@item
-Category Specification
-
-@lisp
-file
-@end lisp
-
-@item
-Group Parameter specification
-
-@lisp
-(agent-score . file)
-@end lisp
-@end itemize
-@end enumerate
-
-@node The Category Buffer
-@subsubsection The Category Buffer
-
-You'd normally do all category maintenance from the category buffer.
-When you enter it for the first time (with the @kbd{J c} command from
-the group buffer), you'll only see the @code{default} category.
-
-The following commands are available in this buffer:
-
-@table @kbd
-@item q
-@kindex q (Category)
-@findex gnus-category-exit
-Return to the group buffer (@code{gnus-category-exit}).
-
-@item k
-@kindex k (Category)
-@findex gnus-category-kill
-Kill the current category (@code{gnus-category-kill}).
-
-@item c
-@kindex c (Category)
-@findex gnus-category-copy
-Copy the current category (@code{gnus-category-copy}).
-
-@item a
-@kindex a (Category)
-@findex gnus-category-add
-Add a new category (@code{gnus-category-add}).
-
-@item p
-@kindex p (Category)
-@findex gnus-category-edit-predicate
-Edit the predicate of the current category
-(@code{gnus-category-edit-predicate}).
-
-@item g
-@kindex g (Category)
-@findex gnus-category-edit-groups
-Edit the list of groups belonging to the current category
-(@code{gnus-category-edit-groups}).
-
-@item s
-@kindex s (Category)
-@findex gnus-category-edit-score
-Edit the download score rule of the current category
-(@code{gnus-category-edit-score}).
-
-@item l
-@kindex l (Category)
-@findex gnus-category-list
-List all the categories (@code{gnus-category-list}).
-@end table
-
-
-@node Category Variables
-@subsubsection Category Variables
-
-@table @code
-@item gnus-category-mode-hook
-@vindex gnus-category-mode-hook
-Hook run in category buffers.
-
-@item gnus-category-line-format
-@vindex gnus-category-line-format
-Format of the lines in the category buffer (@pxref{Formatting
-Variables}).  Valid elements are:
-
-@table @samp
-@item c
-The name of the category.
-
-@item g
-The number of groups in the category.
-@end table
-
-@item gnus-category-mode-line-format
-@vindex gnus-category-mode-line-format
-Format of the category mode line (@pxref{Mode Line Formatting}).
-
-@item gnus-agent-short-article
-@vindex gnus-agent-short-article
-Articles that have fewer lines than this are short.  Default 100.
-
-@item gnus-agent-long-article
-@vindex gnus-agent-long-article
-Articles that have more lines than this are long.  Default 200.
-
-@item gnus-agent-low-score
-@vindex gnus-agent-low-score
-Articles that have a score lower than this have a low score.  Default
-0.
-
-@item gnus-agent-high-score
-@vindex gnus-agent-high-score
-Articles that have a score higher than this have a high score.  Default
-0.
-
-@end table
-
-
-@node Agent Commands
-@subsection Agent Commands
-
-All the Gnus Agent commands are on the @kbd{J} submap.  The @kbd{J j}
-(@code{gnus-agent-toggle-plugged} command works in all modes, and
-toggles the plugged/unplugged state of the Gnus Agent.
-
-
-@menu
-* Group Agent Commands::
-* Summary Agent Commands::
-* Server Agent Commands::
-@end menu
-
-You can run a complete batch fetch from the command line with the
-following incantation:
-
-@cindex gnus-agent-batch-fetch
-@example
-$ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
-@end example
-
-
-
-@node Group Agent Commands
-@subsubsection Group Agent Commands
-
-@table @kbd
-@item J u
-@kindex J u (Agent Group)
-@findex gnus-agent-fetch-groups
-Fetch all eligible articles in the current group
-(@code{gnus-agent-fetch-groups}).
-
-@item J c
-@kindex J c (Agent Group)
-@findex gnus-enter-category-buffer
-Enter the Agent category buffer (@code{gnus-enter-category-buffer}).
-
-@item J s
-@kindex J s (Agent Group)
-@findex gnus-agent-fetch-session
-Fetch all eligible articles in all groups
-(@code{gnus-agent-fetch-session}).
-
-@item J S
-@kindex J S (Agent Group)
-@findex gnus-group-send-drafts
-Send all sendable messages in the draft group
-(@code{gnus-group-send-drafts}).  @xref{Drafts}.
-
-@item J a
-@kindex J a (Agent Group)
-@findex gnus-agent-add-group
-Add the current group to an Agent category
-(@code{gnus-agent-add-group}).  This command understands the
-process/prefix convention (@pxref{Process/Prefix}).
-
-@item J r
-@kindex J r (Agent Group)
-@findex gnus-agent-remove-group
-Remove the current group from its category, if any
-(@code{gnus-agent-remove-group}).  This command understands the
-process/prefix convention (@pxref{Process/Prefix}).
-
-@end table
-
-
-@node Summary Agent Commands
-@subsubsection Summary Agent Commands
-
-@table @kbd
-@item J #
-@kindex J # (Agent Summary)
-@findex gnus-agent-mark-article
-Mark the article for downloading (@code{gnus-agent-mark-article}).
-
-@item J M-#
-@kindex J M-# (Agent Summary)
-@findex gnus-agent-unmark-article
-Remove the downloading mark from the article
-(@code{gnus-agent-unmark-article}).
-
-@item @@
-@kindex @@ (Agent Summary)
-@findex gnus-agent-toggle-mark
-Toggle whether to download the article (@code{gnus-agent-toggle-mark}).
-
-@item J c
-@kindex J c (Agent Summary)
-@findex gnus-agent-catchup
-Mark all undownloaded articles as read (@code{gnus-agent-catchup}).
-
-@end table
-
-
-@node Server Agent Commands
-@subsubsection Server Agent Commands
-
-@table @kbd
-@item J a
-@kindex J a (Agent Server)
-@findex gnus-agent-add-server
-Add the current server to the list of servers covered by the Gnus Agent
-(@code{gnus-agent-add-server}).
-
-@item J r
-@kindex J r (Agent Server)
-@findex gnus-agent-remove-server
-Remove the current server from the list of servers covered by the Gnus
-Agent (@code{gnus-agent-remove-server}).
-
-@end table
-
-
-@node Agent Expiry
-@subsection Agent Expiry
-
-@vindex gnus-agent-expire-days
-@findex gnus-agent-expire
-@kindex M-x gnus-agent-expire
-@cindex Agent expiry
-@cindex Gnus Agent expiry
-@cindex expiry
-
-@code{nnagent} doesn't handle expiry.  Instead, there's a special
-@code{gnus-agent-expire} command that will expire all read articles that
-are older than @code{gnus-agent-expire-days} days.  It can be run
-whenever you feel that you're running out of space.  It's not
-particularly fast or efficient, and it's not a particularly good idea to
-interrupt it (with @kbd{C-g} or anything else) once you've started it.
-
-@vindex gnus-agent-expire-all
-if @code{gnus-agent-expire-all} is non-@code{nil}, this command will
-expire all articles---unread, read, ticked and dormant.  If @code{nil}
-(which is the default), only read articles are eligible for expiry, and
-unread, ticked and dormant articles will be kept indefinitely.
-
-
-@node Outgoing Messages
-@subsection Outgoing Messages
-
-When Gnus is unplugged, all outgoing messages (both mail and news) are
-stored in the draft groups (@pxref{Drafts}).  You can view them there
-after posting, and edit them at will.
-
-When Gnus is plugged again, you can send the messages either from the
-draft group with the special commands available there, or you can use
-the @kbd{J S} command in the group buffer to send all the sendable
-messages in the draft group.
-
-
-
-@node Agent Variables
-@subsection Agent Variables
-
-@table @code
-@item gnus-agent-directory
-@vindex gnus-agent-directory
-Where the Gnus Agent will store its files.  The default is
-@file{~/News/agent/}.
-
-@item gnus-agent-handle-level
-@vindex gnus-agent-handle-level
-Groups on levels (@pxref{Group Levels}) higher than this variable will
-be ignored by the Agent.  The default is @code{gnus-level-subscribed},
-which means that only subscribed group will be considered by the Agent
-by default.
-
-@item gnus-agent-plugged-hook
-@vindex gnus-agent-plugged-hook
-Hook run when connecting to the network.
-
-@item gnus-agent-unplugged-hook
-@vindex gnus-agent-unplugged-hook
-Hook run when disconnecting from the network.
-
-@end table
-
-
-@node Example Setup
-@subsection Example Setup
-
-If you don't want to read this manual, and you have a fairly standard
-setup, you may be able to use something like the following as your
-@file{.gnus.el} file to get started.
-
-@lisp
-;;; Define how Gnus is to fetch news.  We do this over NNTP
-;;; from your ISP's server.
-(setq gnus-select-method '(nntp "news.your-isp.com"))
-
-;;; Define how Gnus is to read your mail.  We read mail from
-;;; your ISP's POP server.
-(setq mail-sources '((pop :server "pop.your-isp.com")))
-
-;;; Say how Gnus is to store the mail.  We use nnml groups.
-(setq gnus-secondary-select-methods '((nnml "")))
-
-;;; Make Gnus into an offline newsreader.
-(gnus-agentize)
-@end lisp
-
-That should be it, basically.  Put that in your @file{~/.gnus.el} file,
-edit to suit your needs, start up PPP (or whatever), and type @kbd{M-x
-gnus}.
-
-If this is the first time you've run Gnus, you will be subscribed
-automatically to a few default newsgroups.  You'll probably want to
-subscribe to more groups, and to do that, you have to query the
-@sc{nntp} server for a complete list of groups with the @kbd{A A}
-command.  This usually takes quite a while, but you only have to do it
-once.
-
-After reading and parsing a while, you'll be presented with a list of
-groups.  Subscribe to the ones you want to read with the @kbd{u}
-command.  @kbd{l} to make all the killed groups disappear after you've
-subscribe to all the groups you want to read.  (@kbd{A k} will bring
-back all the killed groups.)
-
-You can now read the groups at once, or you can download the articles
-with the @kbd{J s} command.  And then read the rest of this manual to
-find out which of the other gazillion things you want to customize.
-
-
-@node Batching Agents
-@subsection Batching Agents
-
-Having the Gnus Agent fetch articles (and post whatever messages you've
-written) is quite easy once you've gotten things set up properly.  The
-following shell script will do everything that is necessary:
-
-@example
-#!/bin/sh
-emacs -batch -l ~/.emacs -f gnus-agent-batch >/dev/null
-@end example
-
-
-@node Agent Caveats
-@subsection Agent Caveats
-
-The Gnus Agent doesn't seem to work like most other offline
-newsreaders.  Here are some common questions that some imaginary people
-may ask:
-
-@table @dfn
-@item If I read an article while plugged, do they get entered into the
-Agent?
-
-@strong{No.}
-
-@item If I read an article while plugged, and the article already exists
-in the Agent, will it get downloaded once more?
-
-@strong{Yes.}
-
-@end table
-
-In short, when Gnus is unplugged, it only looks into the locally stored
-articles; when it's plugged, it only talks to your ISP.
-
-
-@node Scoring
-@chapter Scoring
-@cindex scoring
-
-Other people use @dfn{kill files}, but we here at Gnus Towers like
-scoring better than killing, so we'd rather switch than fight.  They do
-something completely different as well, so sit up straight and pay
-attention!
-
-@vindex gnus-summary-mark-below
-All articles have a default score (@code{gnus-summary-default-score}),
-which is 0 by default.  This score may be raised or lowered either
-interactively or by score files.  Articles that have a score lower than
-@code{gnus-summary-mark-below} are marked as read.
-
-Gnus will read any @dfn{score files} that apply to the current group
-before generating the summary buffer.
-
-There are several commands in the summary buffer that insert score
-entries based on the current article.  You can, for instance, ask Gnus to
-lower or increase the score of all articles with a certain subject.
-
-There are two sorts of scoring entries: Permanent and temporary.
-Temporary score entries are self-expiring entries.  Any entries that are
-temporary and have not been used for, say, a week, will be removed
-silently to help keep the sizes of the score files down.
-
-@menu
-* Summary Score Commands::   Adding score entries for the current group.
-* Group Score Commands::     General score commands.
-* Score Variables::          Customize your scoring.  (My, what terminology).
-* Score File Format::        What a score file may contain.
-* Score File Editing::       You can edit score files by hand as well.
-* Adaptive Scoring::         Big Sister Gnus knows what you read.
-* Home Score File::          How to say where new score entries are to go.
-* Followups To Yourself::    Having Gnus notice when people answer you.
-* Scoring Tips::             How to score effectively.
-* Reverse Scoring::          That problem child of old is not problem.
-* Global Score Files::       Earth-spanning, ear-splitting score files.
-* Kill Files::               They are still here, but they can be ignored.
-* Converting Kill Files::    Translating kill files to score files.
-* GroupLens::                Getting predictions on what you like to read.
-* Advanced Scoring::         Using logical expressions to build score rules.
-* Score Decays::             It can be useful to let scores wither away.
-@end menu
-
-
-@node Summary Score Commands
-@section Summary Score Commands
-@cindex score commands
-
-The score commands that alter score entries do not actually modify real
-score files.  That would be too inefficient.  Gnus maintains a cache of
-previously loaded score files, one of which is considered the
-@dfn{current score file alist}.  The score commands simply insert
-entries into this list, and upon group exit, this list is saved.
-
-The current score file is by default the group's local score file, even
-if no such score file actually exists.  To insert score commands into
-some other score file (e.g. @file{all.SCORE}), you must first make this
-score file the current one.
-
-General score commands that don't actually change the score file:
-
-@table @kbd
-
-@item V s
-@kindex V s (Summary)
-@findex gnus-summary-set-score
-Set the score of the current article (@code{gnus-summary-set-score}).
-
-@item V S
-@kindex V S (Summary)
-@findex gnus-summary-current-score
-Display the score of the current article
-(@code{gnus-summary-current-score}).
-
-@item V t
-@kindex V t (Summary)
-@findex gnus-score-find-trace
-Display all score rules that have been used on the current article
-(@code{gnus-score-find-trace}).
-
-@item V R
-@kindex V R (Summary)
-@findex gnus-summary-rescore
-Run the current summary through the scoring process
-(@code{gnus-summary-rescore}).  This might be useful if you're playing
-around with your score files behind Gnus' back and want to see the
-effect you're having.
-
-@item V c
-@kindex V c (Summary)
-@findex gnus-score-change-score-file
-Make a different score file the current
-(@code{gnus-score-change-score-file}).
-
-@item V e
-@kindex V e (Summary)
-@findex gnus-score-edit-current-scores
-Edit the current score file (@code{gnus-score-edit-current-scores}).
-You will be popped into a @code{gnus-score-mode} buffer (@pxref{Score
-File Editing}).
-
-@item V f
-@kindex V f (Summary)
-@findex gnus-score-edit-file
-Edit a score file and make this score file the current one
-(@code{gnus-score-edit-file}).
-
-@item V F
-@kindex V F (Summary)
-@findex gnus-score-flush-cache
-Flush the score cache (@code{gnus-score-flush-cache}).  This is useful
-after editing score files.
-
-@item V C
-@kindex V C (Summary)
-@findex gnus-score-customize
-Customize a score file in a visually pleasing manner
-(@code{gnus-score-customize}).
-
-@end table
-
-The rest of these commands modify the local score file.
-
-@table @kbd
-
-@item V m
-@kindex V m (Summary)
-@findex gnus-score-set-mark-below
-Prompt for a score, and mark all articles with a score below this as
-read (@code{gnus-score-set-mark-below}).
-
-@item V x
-@kindex V x (Summary)
-@findex gnus-score-set-expunge-below
-Prompt for a score, and add a score rule to the current score file to
-expunge all articles below this score
-(@code{gnus-score-set-expunge-below}).
-@end table
-
-The keystrokes for actually making score entries follow a very regular
-pattern, so there's no need to list all the commands.  (Hundreds of
-them.)
-
-@findex gnus-summary-increase-score
-@findex gnus-summary-lower-score
-
-@enumerate
-@item
-The first key is either @kbd{I} (upper case i) for increasing the score
-or @kbd{L} for lowering the score.
-@item
-The second key says what header you want to score on.  The following
-keys are available:
-@table @kbd
-
-@item a
-Score on the author name.
-
-@item s
-Score on the subject line.
-
-@item x
-Score on the @code{Xref} line---i.e., the cross-posting line.
-
-@item r
-Score on the @code{References} line.
-
-@item d
-Score on the date.
-
-@item l
-Score on the number of lines.
-
-@item i
-Score on the @code{Message-ID} header.
-
-@item f
-Score on followups---this matches the author name, and adds scores to
-the followups to this author.
-
-@item b
-Score on the body.
-
-@item h
-Score on the head.
-
-@item t
-Score on thread.
-
-@end table
-
-@item
-The third key is the match type.  Which match types are valid depends on
-what headers you are scoring on.
-
-@table @code
-
-@item strings
-
-@table @kbd
-
-@item e
-Exact matching.
-
-@item s
-Substring matching.
-
-@item f
-Fuzzy matching (@pxref{Fuzzy Matching}).
-
-@item r
-Regexp matching
-@end table
-
-@item date
-@table @kbd
-
-@item b
-Before date.
-
-@item a
-After date.
-
-@item n
-This date.
-@end table
-
-@item number
-@table @kbd
-
-@item <
-Less than number.
-
-@item =
-Equal to number.
-
-@item >
-Greater than number.
-@end table
-@end table
-
-@item
-The fourth and final key says whether this is a temporary (i.e., expiring)
-score entry, or a permanent (i.e., non-expiring) score entry, or whether
-it is to be done immediately, without adding to the score file.
-@table @kbd
-
-@item t
-Temporary score entry.
-
-@item p
-Permanent score entry.
-
-@item i
-Immediately scoring.
-@end table
-
-@end enumerate
-
-So, let's say you want to increase the score on the current author with
-exact matching permanently: @kbd{I a e p}.  If you want to lower the
-score based on the subject line, using substring matching, and make a
-temporary score entry: @kbd{L s s t}.  Pretty easy.
-
-To make things a bit more complicated, there are shortcuts.  If you use
-a capital letter on either the second or third keys, Gnus will use
-defaults for the remaining one or two keystrokes.  The defaults are
-``substring'' and ``temporary''.  So @kbd{I A} is the same as @kbd{I a s
-t}, and @kbd{I a R} is the same as @kbd{I a r t}.
-
-These functions take both the numerical prefix and the symbolic prefix
-(@pxref{Symbolic Prefixes}).  A numerical prefix says how much to lower
-(or increase) the score of the article.  A symbolic prefix of @code{a}
-says to use the @file{all.SCORE} file for the command instead of the
-current score file.
-
-@vindex gnus-score-mimic-keymap
-The @code{gnus-score-mimic-keymap} says whether these commands will
-pretend they are keymaps or not.
-
-
-@node Group Score Commands
-@section Group Score Commands
-@cindex group score commands
-
-There aren't many of these as yet, I'm afraid.
-
-@table @kbd
-
-@item W f
-@kindex W f (Group)
-@findex gnus-score-flush-cache
-Gnus maintains a cache of score alists to avoid having to reload them
-all the time.  This command will flush the cache
-(@code{gnus-score-flush-cache}).
-
-@end table
-
-You can do scoring from the command line by saying something like:
-
-@findex gnus-batch-score
-@cindex batch scoring
-@example
-$ emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-batch-score
-@end example
-
-
-@node Score Variables
-@section Score Variables
-@cindex score variables
-
-@table @code
-
-@item gnus-use-scoring
-@vindex gnus-use-scoring
-If @code{nil}, Gnus will not check for score files, and will not, in
-general, do any score-related work.  This is @code{t} by default.
-
-@item gnus-kill-killed
-@vindex gnus-kill-killed
-If this variable is @code{nil}, Gnus will never apply score files to
-articles that have already been through the kill process.  While this
-may save you lots of time, it also means that if you apply a kill file
-to a group, and then change the kill file and want to run it over you
-group again to kill more articles, it won't work.  You have to set this
-variable to @code{t} to do that.  (It is @code{t} by default.)
-
-@item gnus-kill-files-directory
-@vindex gnus-kill-files-directory
-All kill and score files will be stored in this directory, which is
-initialized from the @code{SAVEDIR} environment variable by default.
-This is @file{~/News/} by default.
-
-@item gnus-score-file-suffix
-@vindex gnus-score-file-suffix
-Suffix to add to the group name to arrive at the score file name
-(@samp{SCORE} by default.)
-
-@item gnus-score-uncacheable-files
-@vindex gnus-score-uncacheable-files
-@cindex score cache
-All score files are normally cached to avoid excessive re-loading of
-score files.  However, if this might make your Emacs grow big and
-bloated, so this regexp can be used to weed out score files unlikely to be needed again.  It would be a bad idea to deny caching of
-@file{all.SCORE}, while it might be a good idea to not cache
-@file{comp.infosystems.www.authoring.misc.ADAPT}.  In fact, this
-variable is @samp{ADAPT$} by default, so no adaptive score files will
-be cached.
-
-@item gnus-save-score
-@vindex gnus-save-score
-If you have really complicated score files, and do lots of batch
-scoring, then you might set this variable to @code{t}.  This will make
-Gnus save the scores into the @file{.newsrc.eld} file.
-
-If you do not set this to @code{t}, then manual scores (like those set
-with @kbd{V s} (@code{gnus-summary-set-score})) will not be preserved
-across group visits.
-
-@item gnus-score-interactive-default-score
-@vindex gnus-score-interactive-default-score
-Score used by all the interactive raise/lower commands to raise/lower
-score with.  Default is 1000, which may seem excessive, but this is to
-ensure that the adaptive scoring scheme gets enough room to play with.
-We don't want the small changes from the adaptive scoring to overwrite
-manually entered data.
-
-@item gnus-summary-default-score
-@vindex gnus-summary-default-score
-Default score of an article, which is 0 by default.
-
-@item gnus-summary-expunge-below
-@vindex gnus-summary-expunge-below
-Don't display the summary lines of articles that have scores lower than
-this variable.  This is @code{nil} by default, which means that no
-articles will be hidden.  This variable is local to the summary buffers,
-and has to be set from @code{gnus-summary-mode-hook}.
-
-@item gnus-score-over-mark
-@vindex gnus-score-over-mark
-Mark (in the third column) used for articles with a score over the
-default.  Default is @samp{+}.
-
-@item gnus-score-below-mark
-@vindex gnus-score-below-mark
-Mark (in the third column) used for articles with a score below the
-default.  Default is @samp{-}.
-
-@item gnus-score-find-score-files-function
-@vindex gnus-score-find-score-files-function
-Function used to find score files for the current group.  This function
-is called with the name of the group as the argument.
-
-Predefined functions available are:
-@table @code
-
-@item gnus-score-find-single
-@findex gnus-score-find-single
-Only apply the group's own score file.
-
-@item gnus-score-find-bnews
-@findex gnus-score-find-bnews
-Apply all score files that match, using bnews syntax.  This is the
-default.  If the current group is @samp{gnu.emacs.gnus}, for instance,
-@file{all.emacs.all.SCORE}, @file{not.alt.all.SCORE} and
-@file{gnu.all.SCORE} would all apply.  In short, the instances of
-@samp{all} in the score file names are translated into @samp{.*}, and
-then a regexp match is done.
-
-This means that if you have some score entries that you want to apply to
-all groups, then you put those entries in the @file{all.SCORE} file.
-
-The score files are applied in a semi-random order, although Gnus will
-try to apply the more general score files before the more specific score
-files.  It does this by looking at the number of elements in the score
-file names---discarding the @samp{all} elements.
-
-@item gnus-score-find-hierarchical
-@findex gnus-score-find-hierarchical
-Apply all score files from all the parent groups.  This means that you
-can't have score files like @file{all.SCORE}, but you can have
-@file{SCORE}, @file{comp.SCORE} and @file{comp.emacs.SCORE}.
-
-@end table
-This variable can also be a list of functions.  In that case, all these
-functions will be called, and all the returned lists of score files will
-be applied.  These functions can also return lists of score alists
-directly.  In that case, the functions that return these non-file score
-alists should probably be placed before the ``real'' score file
-functions, to ensure that the last score file returned is the local
-score file.  Phu.
-
-@item gnus-score-expiry-days
-@vindex gnus-score-expiry-days
-This variable says how many days should pass before an unused score file
-entry is expired.  If this variable is @code{nil}, no score file entries
-are expired.  It's 7 by default.
-
-@item gnus-update-score-entry-dates
-@vindex gnus-update-score-entry-dates
-If this variable is non-@code{nil}, matching score entries will have
-their dates updated.  (This is how Gnus controls expiry---all
-non-matching entries will become too old while matching entries will
-stay fresh and young.)  However, if you set this variable to @code{nil},
-even matching entries will grow old and will have to face that oh-so
-grim reaper.
-
-@item gnus-score-after-write-file-function
-@vindex gnus-score-after-write-file-function
-Function called with the name of the score file just written.
-
-@item gnus-score-thread-simplify
-@vindex gnus-score-thread-simplify
-If this variable is non-@code{nil}, article subjects will be simplified
-for subject scoring purposes in the same manner as with
-threading---according to the current value of
-gnus-simplify-subject-functions.  If the scoring entry uses
-@code{substring} or @code{exact} matching, the match will also be
-simplified in this manner.
-
-@end table
-
-
-@node Score File Format
-@section Score File Format
-@cindex score file format
-
-A score file is an @code{emacs-lisp} file that normally contains just a
-single form.  Casual users are not expected to edit these files;
-everything can be changed from the summary buffer.
-
-Anyway, if you'd like to dig into it yourself, here's an example:
-
-@lisp
-(("from"
-  ("Lars Ingebrigtsen" -10000)
-  ("Per Abrahamsen")
-  ("larsi\\|lmi" -50000 nil R))
- ("subject"
-  ("Ding is Badd" nil 728373))
- ("xref"
-  ("alt.politics" -1000 728372 s))
- ("lines"
-  (2 -100 nil <))
- (mark 0)
- (expunge -1000)
- (mark-and-expunge -10)
- (read-only nil)
- (orphan -10)
- (adapt t)
- (files "/hom/larsi/News/gnu.SCORE")
- (exclude-files "all.SCORE")
- (local (gnus-newsgroup-auto-expire t)
-        (gnus-summary-make-false-root empty))
- (eval (ding)))
-@end lisp
-
-This example demonstrates most score file elements.  For a different
-approach, see @pxref{Advanced Scoring}.
-
-Even though this looks much like lisp code, nothing here is actually
-@code{eval}ed.  The lisp reader is used to read this form, though, so it
-has to be valid syntactically, if not semantically.
-
-Six keys are supported by this alist:
-
-@table @code
-
-@item STRING
-If the key is a string, it is the name of the header to perform the
-match on.  Scoring can only be performed on these eight headers:
-@code{From}, @code{Subject}, @code{References}, @code{Message-ID},
-@code{Xref}, @code{Lines}, @code{Chars} and @code{Date}.  In addition to
-these headers, there are three strings to tell Gnus to fetch the entire
-article and do the match on larger parts of the article: @code{Body}
-will perform the match on the body of the article, @code{Head} will
-perform the match on the head of the article, and @code{All} will
-perform the match on the entire article.  Note that using any of these
-last three keys will slow down group entry @emph{considerably}.  The
-final ``header'' you can score on is @code{Followup}.  These score
-entries will result in new score entries being added for all follow-ups
-to articles that matches these score entries.
-
-Following this key is a arbitrary number of score entries, where each
-score entry has one to four elements.
-@enumerate
-
-@item
-The first element is the @dfn{match element}.  On most headers this will
-be a string, but on the Lines and Chars headers, this must be an
-integer.
-
-@item
-If the second element is present, it should be a number---the @dfn{score
-element}.  This number should be an integer in the neginf to posinf
-interval.  This number is added to the score of the article if the match
-is successful.  If this element is not present, the
-@code{gnus-score-interactive-default-score} number will be used
-instead.  This is 1000 by default.
-
-@item
-If the third element is present, it should be a number---the @dfn{date
-element}.  This date says when the last time this score entry matched,
-which provides a mechanism for expiring the score entries.  It this
-element is not present, the score entry is permanent.  The date is
-represented by the number of days since December 31, 1 BCE.
-
-@item
-If the fourth element is present, it should be a symbol---the @dfn{type
-element}.  This element specifies what function should be used to see
-whether this score entry matches the article.  What match types that can
-be used depends on what header you wish to perform the match on.
-@table @dfn
-
-@item From, Subject, References, Xref, Message-ID
-For most header types, there are the @code{r} and @code{R} (regexp), as
-well as @code{s} and @code{S} (substring) types, and @code{e} and
-@code{E} (exact match), and @code{w} (word match) types.  If this
-element is not present, Gnus will assume that substring matching should
-be used.  @code{R}, @code{S}, and @code{E} differ from the others in
-that the matches will be done in a case-sensitive manner.  All these
-one-letter types are really just abbreviations for the @code{regexp},
-@code{string}, @code{exact}, and @code{word} types, which you can use
-instead, if you feel like.
-
-@item Lines, Chars
-These two headers use different match types: @code{<}, @code{>},
-@code{=}, @code{>=} and @code{<=}.
-
-These predicates are true if
-
-@example
-(PREDICATE HEADER MATCH)
-@end example
-
-evaluates to non-@code{nil}.  For instance, the advanced match
-@code{("lines" 4 <)} (@pxref{Advanced Scoring}) will result in the
-following form:
-
-@lisp
-(< header-value 4)
-@end lisp
-
-Or to put it another way: When using @code{<} on @code{Lines} with 4 as
-the match, we get the score added if the article has less than 4 lines.
-(It's easy to get confused and think it's the other way around.  But
-it's not.  I think.)
-
-When matching on @code{Lines}, be careful because some backends (like
-@code{nndir}) do not generate @code{Lines} header, so every article ends
-up being marked as having 0 lines.  This can lead to strange results if
-you happen to lower score of the articles with few lines.
-
-@item Date
-For the Date header we have three kinda silly match types:
-@code{before}, @code{at} and @code{after}.  I can't really imagine this
-ever being useful, but, like, it would feel kinda silly not to provide
-this function.  Just in case.  You never know.  Better safe than sorry.
-Once burnt, twice shy.  Don't judge a book by its cover.  Never not have
-sex on a first date.  (I have been told that at least one person, and I
-quote, ``found this function indispensable'', however.)
-
-@cindex ISO8601
-@cindex date
-A more useful match type is @code{regexp}.  With it, you can match the
-date string using a regular expression.  The date is normalized to
-ISO8601 compact format first---@var{YYYYMMDD}@code{T}@var{HHMMSS}.  If
-you want to match all articles that have been posted on April 1st in
-every year, you could use @samp{....0401.........} as a match string,
-for instance.  (Note that the date is kept in its original time zone, so
-this will match articles that were posted when it was April 1st where
-the article was posted from.  Time zones are such wholesome fun for the
-whole family, eh?)
-
-@item Head, Body, All
-These three match keys use the same match types as the @code{From} (etc)
-header uses.
-
-@item Followup
-This match key is somewhat special, in that it will match the
-@code{From} header, and affect the score of not only the matching
-articles, but also all followups to the matching articles.  This allows
-you e.g. increase the score of followups to your own articles, or
-decrease the score of followups to the articles of some known
-trouble-maker.  Uses the same match types as the @code{From} header
-uses.  (Using this match key will lead to creation of @file{ADAPT}
-files.)
-
-@item Thread
-This match key works along the same lines as the @code{Followup} match
-key.  If you say that you want to score on a (sub-)thread started by an
-article with a @code{Message-ID} @var{x}, then you add a @samp{thread}
-match.  This will add a new @samp{thread} match for each article that
-has @var{x} in its @code{References} header.  (These new @samp{thread}
-matches will use the @code{Message-ID}s of these matching articles.)
-This will ensure that you can raise/lower the score of an entire thread,
-even though some articles in the thread may not have complete
-@code{References} headers.  Note that using this may lead to
-undeterministic scores of the articles in the thread.  (Using this match
-key will lead to creation of @file{ADAPT} files.)
-@end table
-@end enumerate
-
-@cindex Score File Atoms
-@item mark
-The value of this entry should be a number.  Any articles with a score
-lower than this number will be marked as read.
-
-@item expunge
-The value of this entry should be a number.  Any articles with a score
-lower than this number will be removed from the summary buffer.
-
-@item mark-and-expunge
-The value of this entry should be a number.  Any articles with a score
-lower than this number will be marked as read and removed from the
-summary buffer.
-
-@item thread-mark-and-expunge
-The value of this entry should be a number.  All articles that belong to
-a thread that has a total score below this number will be marked as read
-and removed from the summary buffer.  @code{gnus-thread-score-function}
-says how to compute the total score for a thread.
-
-@item files
-The value of this entry should be any number of file names.  These files
-are assumed to be score files as well, and will be loaded the same way
-this one was.
-
-@item exclude-files
-The clue of this entry should be any number of files.  These files will
-not be loaded, even though they would normally be so, for some reason or
-other.
-
-@item eval
-The value of this entry will be @code{eval}el.  This element will be
-ignored when handling global score files.
-
-@item read-only
-Read-only score files will not be updated or saved.  Global score files
-should feature this atom (@pxref{Global Score Files}).  (Note:
-@dfn{Global} here really means @dfn{global}; not your personal
-apply-to-all-groups score files.)
-
-@item orphan
-The value of this entry should be a number.  Articles that do not have
-parents will get this number added to their scores.  Imagine you follow
-some high-volume newsgroup, like @samp{comp.lang.c}.  Most likely you
-will only follow a few of the threads, also want to see any new threads.
-
-You can do this with the following two score file entries:
-
-@example
-        (orphan -500)
-        (mark-and-expunge -100)
-@end example
-
-When you enter the group the first time, you will only see the new
-threads.  You then raise the score of the threads that you find
-interesting (with @kbd{I T} or @kbd{I S}), and ignore (@kbd{C y}) the
-rest.  Next time you enter the group, you will see new articles in the
-interesting threads, plus any new threads.
-
-I.e.---the orphan score atom is for high-volume groups where there
-exist a few interesting threads which can't be found automatically by
-ordinary scoring rules.
-
-@item adapt
-This entry controls the adaptive scoring.  If it is @code{t}, the
-default adaptive scoring rules will be used.  If it is @code{ignore}, no
-adaptive scoring will be performed on this group.  If it is a list, this
-list will be used as the adaptive scoring rules.  If it isn't present,
-or is something other than @code{t} or @code{ignore}, the default
-adaptive scoring rules will be used.  If you want to use adaptive
-scoring on most groups, you'd set @code{gnus-use-adaptive-scoring} to
-@code{t}, and insert an @code{(adapt ignore)} in the groups where you do
-not want adaptive scoring.  If you only want adaptive scoring in a few
-groups, you'd set @code{gnus-use-adaptive-scoring} to @code{nil}, and
-insert @code{(adapt t)} in the score files of the groups where you want
-it.
-
-@item adapt-file
-All adaptive score entries will go to the file named by this entry.  It
-will also be applied when entering the group.  This atom might be handy
-if you want to adapt on several groups at once, using the same adaptive
-file for a number of groups.
-
-@item local
-@cindex local variables
-The value of this entry should be a list of @code{(VAR VALUE)} pairs.
-Each @var{var} will be made buffer-local to the current summary buffer,
-and set to the value specified.  This is a convenient, if somewhat
-strange, way of setting variables in some groups if you don't like hooks
-much.  Note that the @var{value} won't be evaluated.
-@end table
-
-
-@node Score File Editing
-@section Score File Editing
-
-You normally enter all scoring commands from the summary buffer, but you
-might feel the urge to edit them by hand as well, so we've supplied you
-with a mode for that.
-
-It's simply a slightly customized @code{emacs-lisp} mode, with these
-additional commands:
-
-@table @kbd
-
-@item C-c C-c
-@kindex C-c C-c (Score)
-@findex gnus-score-edit-done
-Save the changes you have made and return to the summary buffer
-(@code{gnus-score-edit-done}).
-
-@item C-c C-d
-@kindex C-c C-d (Score)
-@findex gnus-score-edit-insert-date
-Insert the current date in numerical format
-(@code{gnus-score-edit-insert-date}).  This is really the day number, if
-you were wondering.
-
-@item C-c C-p
-@kindex C-c C-p (Score)
-@findex gnus-score-pretty-print
-The adaptive score files are saved in an unformatted fashion.  If you
-intend to read one of these files, you want to @dfn{pretty print} it
-first.  This command (@code{gnus-score-pretty-print}) does that for
-you.
-
-@end table
-
-Type @kbd{M-x gnus-score-mode} to use this mode.
-
-@vindex gnus-score-mode-hook
-@code{gnus-score-menu-hook} is run in score mode buffers.
-
-In the summary buffer you can use commands like @kbd{V f} and @kbd{V
-e} to begin editing score files.
-
-
-@node Adaptive Scoring
-@section Adaptive Scoring
-@cindex adaptive scoring
-
-If all this scoring is getting you down, Gnus has a way of making it all
-happen automatically---as if by magic.  Or rather, as if by artificial
-stupidity, to be precise.
-
-@vindex gnus-use-adaptive-scoring
-When you read an article, or mark an article as read, or kill an
-article, you leave marks behind.  On exit from the group, Gnus can sniff
-these marks and add score elements depending on what marks it finds.
-You turn on this ability by setting @code{gnus-use-adaptive-scoring} to
-@code{t} or @code{(line)}.  If you want score adaptively on separate
-words appearing in the subjects, you should set this variable to
-@code{(word)}.  If you want to use both adaptive methods, set this
-variable to @code{(word line)}.
-
-@vindex gnus-default-adaptive-score-alist
-To give you complete control over the scoring process, you can customize
-the @code{gnus-default-adaptive-score-alist} variable.  For instance, it
-might look something like this:
-
-@lisp
-(defvar gnus-default-adaptive-score-alist
-  '((gnus-unread-mark)
-    (gnus-ticked-mark (from 4))
-    (gnus-dormant-mark (from 5))
-    (gnus-del-mark (from -4) (subject -1))
-    (gnus-read-mark (from 4) (subject 2))
-    (gnus-expirable-mark (from -1) (subject -1))
-    (gnus-killed-mark (from -1) (subject -3))
-    (gnus-kill-file-mark)
-    (gnus-ancient-mark)
-    (gnus-low-score-mark)
-    (gnus-catchup-mark (from -1) (subject -1))))
-@end lisp
-
-As you see, each element in this alist has a mark as a key (either a
-variable name or a ``real'' mark---a character).  Following this key is
-a arbitrary number of header/score pairs.  If there are no header/score
-pairs following the key, no adaptive scoring will be done on articles
-that have that key as the article mark.  For instance, articles with
-@code{gnus-unread-mark} in the example above will not get adaptive score
-entries.
-
-Each article can have only one mark, so just a single of these rules
-will be applied to each article.
-
-To take @code{gnus-del-mark} as an example---this alist says that all
-articles that have that mark (i.e., are marked with @samp{D}) will have a
-score entry added to lower based on the @code{From} header by -4, and
-lowered by @code{Subject} by -1.  Change this to fit your prejudices.
-
-If you have marked 10 articles with the same subject with
-@code{gnus-del-mark}, the rule for that mark will be applied ten times.
-That means that that subject will get a score of ten times -1, which
-should be, unless I'm much mistaken, -10.
-
-If you have auto-expirable (mail) groups (@pxref{Expiring Mail}), all
-the read articles will be marked with the @samp{E} mark.  This'll
-probably make adaptive scoring slightly impossible, so auto-expiring and
-adaptive scoring doesn't really mix very well.
-
-The headers you can score on are @code{from}, @code{subject},
-@code{message-id}, @code{references}, @code{xref}, @code{lines},
-@code{chars} and @code{date}.  In addition, you can score on
-@code{followup}, which will create an adaptive score entry that matches
-on the @code{References} header using the @code{Message-ID} of the
-current article, thereby matching the following thread.
-
-You can also score on @code{thread}, which will try to score all
-articles that appear in a thread.  @code{thread} matches uses a
-@code{Message-ID} to match on the @code{References} header of the
-article.  If the match is made, the @code{Message-ID} of the article is
-added to the @code{thread} rule.  (Think about it.  I'd recommend two
-aspirins afterwards.)
-
-If you use this scheme, you should set the score file atom @code{mark}
-to something small---like -300, perhaps, to avoid having small random
-changes result in articles getting marked as read.
-
-After using adaptive scoring for a week or so, Gnus should start to
-become properly trained and enhance the authors you like best, and kill
-the authors you like least, without you having to say so explicitly.
-
-You can control what groups the adaptive scoring is to be performed on
-by using the score files (@pxref{Score File Format}).  This will also
-let you use different rules in different groups.
-
-@vindex gnus-adaptive-file-suffix
-The adaptive score entries will be put into a file where the name is the
-group name with @code{gnus-adaptive-file-suffix} appended.  The default
-is @samp{ADAPT}.
-
-@vindex gnus-score-exact-adapt-limit
-When doing adaptive scoring, substring or fuzzy matching would probably
-give you the best results in most cases.  However, if the header one
-matches is short, the possibility for false positives is great, so if
-the length of the match is less than
-@code{gnus-score-exact-adapt-limit}, exact matching will be used.  If
-this variable is @code{nil}, exact matching will always be used to avoid
-this problem.
-
-@vindex gnus-default-adaptive-word-score-alist
-As mentioned above, you can adapt either on individual words or entire
-headers.  If you adapt on words, the
-@code{gnus-default-adaptive-word-score-alist} variable says what score
-each instance of a word should add given a mark.
-
-@lisp
-(setq gnus-default-adaptive-word-score-alist
-      `((,gnus-read-mark . 30)
-        (,gnus-catchup-mark . -10)
-        (,gnus-killed-mark . -20)
-        (,gnus-del-mark . -15)))
-@end lisp
-
-This is the default value.  If you have adaption on words enabled, every
-word that appears in subjects of articles marked with
-@code{gnus-read-mark} will result in a score rule that increase the
-score with 30 points.
-
-@vindex gnus-default-ignored-adaptive-words
-@vindex gnus-ignored-adaptive-words
-Words that appear in the @code{gnus-default-ignored-adaptive-words} list
-will be ignored.  If you wish to add more words to be ignored, use the
-@code{gnus-ignored-adaptive-words} list instead.
-
-@vindex gnus-adaptive-word-syntax-table
-When the scoring is done, @code{gnus-adaptive-word-syntax-table} is the
-syntax table in effect.  It is similar to the standard syntax table, but
-it considers numbers to be non-word-constituent characters.
-
-@vindex gnus-adaptive-word-minimum
-If @code{gnus-adaptive-word-minimum} is set to a number, the adaptive
-word scoring process will never bring down the score of an article to
-below this number.  The default is @code{nil}.
-
-@vindex gnus-adaptive-word-no-group-words
-If @code{gnus-adaptive-word-no-group-words} is set to @code{t}, gnus
-won't adaptively word score any of the words in the group name.  Useful
-for groups like @samp{comp.editors.emacs}, where most of the subject
-lines contain the word @samp{emacs}.
-
-After using this scheme for a while, it might be nice to write a
-@code{gnus-psychoanalyze-user} command to go through the rules and see
-what words you like and what words you don't like.  Or perhaps not.
-
-Note that the adaptive word scoring thing is highly experimental and is
-likely to change in the future.  Initial impressions seem to indicate
-that it's totally useless as it stands.  Some more work (involving more
-rigorous statistical methods) will have to be done to make this useful.
-
-
-@node Home Score File
-@section Home Score File
-
-The score file where new score file entries will go is called the
-@dfn{home score file}.  This is normally (and by default) the score file
-for the group itself.  For instance, the home score file for
-@samp{gnu.emacs.gnus} is @file{gnu.emacs.gnus.SCORE}.
-
-However, this may not be what you want.  It is often convenient to share
-a common home score file among many groups---all @samp{emacs} groups
-could perhaps use the same home score file.
-
-@vindex gnus-home-score-file
-The variable that controls this is @code{gnus-home-score-file}.  It can
-be:
-
-@enumerate
-@item
-A string.  Then this file will be used as the home score file for all
-groups.
-
-@item
-A function. The result of this function will be used as the home score
-file.  The function will be called with the name of the group as the
-parameter.
-
-@item
-A list.  The elements in this list can be:
-
-@enumerate
-@item
-@code{(@var{regexp} @var{file-name})}.  If the @var{regexp} matches the
-group name, the @var{file-name} will will be used as the home score file.
-
-@item
-A function. If the function returns non-nil, the result will be used as
-the home score file.
-
-@item
-A string.  Use the string as the home score file.
-@end enumerate
-
-The list will be traversed from the beginning towards the end looking
-for matches.
-
-@end enumerate
-
-So, if you want to use just a single score file, you could say:
-
-@lisp
-(setq gnus-home-score-file
-      "my-total-score-file.SCORE")
-@end lisp
-
-If you want to use @file{gnu.SCORE} for all @samp{gnu} groups and
-@file{rec.SCORE} for all @samp{rec} groups (and so on), you can say:
-
-@findex gnus-hierarchial-home-score-file
-@lisp
-(setq gnus-home-score-file
-      'gnus-hierarchial-home-score-file)
-@end lisp
-
-This is a ready-made function provided for your convenience.
-Other functions include
-
-@table @code
-@item gnus-current-home-score-file
-@findex gnus-current-home-score-file
-Return the ``current'' regular score file.  This will make scoring
-commands add entry to the ``innermost'' matching score file.
-
-@end table
-
-If you want to have one score file for the @samp{emacs} groups and
-another for the @samp{comp} groups, while letting all other groups use
-their own home score files:
-
-@lisp
-(setq gnus-home-score-file
-      ;; All groups that match the regexp "\\.emacs"
-      '(("\\.emacs" "emacs.SCORE")
-        ;; All the comp groups in one score file
-        ("^comp" "comp.SCORE")))
-@end lisp
-
-@vindex gnus-home-adapt-file
-@code{gnus-home-adapt-file} works exactly the same way as
-@code{gnus-home-score-file}, but says what the home adaptive score file
-is instead.  All new adaptive file entries will go into the file
-specified by this variable, and the same syntax is allowed.
-
-In addition to using @code{gnus-home-score-file} and
-@code{gnus-home-adapt-file}, you can also use group parameters
-(@pxref{Group Parameters}) and topic parameters (@pxref{Topic
-Parameters}) to achieve much the same.  Group and topic parameters take
-precedence over this variable.
-
-
-@node Followups To Yourself
-@section Followups To Yourself
-
-Gnus offers two commands for picking out the @code{Message-ID} header in
-the current buffer.  Gnus will then add a score rule that scores using
-this @code{Message-ID} on the @code{References} header of other
-articles.  This will, in effect, increase the score of all articles that
-respond to the article in the current buffer.  Quite useful if you want
-to easily note when people answer what you've said.
-
-@table @code
-
-@item gnus-score-followup-article
-@findex gnus-score-followup-article
-This will add a score to articles that directly follow up your own
-article.
-
-@item gnus-score-followup-thread
-@findex gnus-score-followup-thread
-This will add a score to all articles that appear in a thread ``below''
-your own article.
-@end table
-
-@vindex message-sent-hook
-These two functions are both primarily meant to be used in hooks like
-@code{message-sent-hook}.
-
-If you look closely at your own @code{Message-ID}, you'll notice that
-the first two or three characters are always the same.  Here's two of
-mine:
-
-@example
-<x6u3u47icf.fsf@@eyesore.no>
-<x6sp9o7ibw.fsf@@eyesore.no>
-@end example
-
-So ``my'' ident on this machine is @samp{x6}.  This can be
-exploited---the following rule will raise the score on all followups to
-myself:
-
-@lisp
-("references"
- ("<x6[0-9a-z]+\\.fsf\\(_-_\\)?@@.*eyesore.no>"
-  1000 nil r))
-@end lisp
-
-Whether it's the first two or first three characters that are ``yours''
-is system-dependent.
-
-
-@node Scoring Tips
-@section Scoring Tips
-@cindex scoring tips
-
-@table @dfn
-
-@item Crossposts
-@cindex crossposts
-@cindex scoring crossposts
-If you want to lower the score of crossposts, the line to match on is
-the @code{Xref} header.
-@lisp
-("xref" (" talk.politics.misc:" -1000))
-@end lisp
-
-@item Multiple crossposts
-If you want to lower the score of articles that have been crossposted to
-more than, say, 3 groups:
-@lisp
-("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r))
-@end lisp
-
-@item Matching on the body
-This is generally not a very good idea---it takes a very long time.
-Gnus actually has to fetch each individual article from the server.  But
-you might want to anyway, I guess.  Even though there are three match
-keys (@code{Head}, @code{Body} and @code{All}), you should choose one
-and stick with it in each score file.  If you use any two, each article
-will be fetched @emph{twice}.  If you want to match a bit on the
-@code{Head} and a bit on the @code{Body}, just use @code{All} for all
-the matches.
-
-@item Marking as read
-You will probably want to mark articles that have scores below a certain
-number as read.  This is most easily achieved by putting the following
-in your @file{all.SCORE} file:
-@lisp
-((mark -100))
-@end lisp
-You may also consider doing something similar with @code{expunge}.
-
-@item Negated character classes
-If you say stuff like @code{[^abcd]*}, you may get unexpected results.
-That will match newlines, which might lead to, well, The Unknown.  Say
-@code{[^abcd\n]*} instead.
-@end table
-
-
-@node Reverse Scoring
-@section Reverse Scoring
-@cindex reverse scoring
-
-If you want to keep just articles that have @samp{Sex with Emacs} in the
-subject header, and expunge all other articles, you could put something
-like this in your score file:
-
-@lisp
-(("subject"
-  ("Sex with Emacs" 2))
- (mark 1)
- (expunge 1))
-@end lisp
-
-So, you raise all articles that match @samp{Sex with Emacs} and mark the
-rest as read, and expunge them to boot.
-
-
-@node Global Score Files
-@section Global Score Files
-@cindex global score files
-
-Sure, other newsreaders have ``global kill files''.  These are usually
-nothing more than a single kill file that applies to all groups, stored
-in the user's home directory.  Bah!  Puny, weak newsreaders!
-
-What I'm talking about here are Global Score Files.  Score files from
-all over the world, from users everywhere, uniting all nations in one
-big, happy score file union!  Ange-score!  New and untested!
-
-@vindex gnus-global-score-files
-All you have to do to use other people's score files is to set the
-@code{gnus-global-score-files} variable.  One entry for each score file,
-or each score file directory.  Gnus will decide by itself what score
-files are applicable to which group.
-
-Say you want to use the score file
-@file{/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE} and
-all score files in the @file{/ftp@@ftp.some-where:/pub/score} directory:
-
-@lisp
-(setq gnus-global-score-files
-      '("/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE"
-        "/ftp@@ftp.some-where:/pub/score/"))
-@end lisp
-
-@findex gnus-score-search-global-directories
-Simple, eh?  Directory names must end with a @samp{/}.  These
-directories are typically scanned only once during each Gnus session.
-If you feel the need to manually re-scan the remote directories, you can
-use the @code{gnus-score-search-global-directories} command.
-
-Note that, at present, using this option will slow down group entry
-somewhat.  (That is---a lot.)
-
-If you want to start maintaining score files for other people to use,
-just put your score file up for anonymous ftp and announce it to the
-world.  Become a retro-moderator!  Participate in the retro-moderator
-wars sure to ensue, where retro-moderators battle it out for the
-sympathy of the people, luring them to use their score files on false
-premises!  Yay!  The net is saved!
-
-Here are some tips for the would-be retro-moderator, off the top of my
-head:
-
-@itemize @bullet
-
-@item
-Articles heavily crossposted are probably junk.
-@item
-To lower a single inappropriate article, lower by @code{Message-ID}.
-@item
-Particularly brilliant authors can be raised on a permanent basis.
-@item
-Authors that repeatedly post off-charter for the group can safely be
-lowered out of existence.
-@item
-Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest
-articles completely.
-
-@item
-Use expiring score entries to keep the size of the file down.  You
-should probably have a long expiry period, though, as some sites keep
-old articles for a long time.
-@end itemize
-
-... I wonder whether other newsreaders will support global score files
-in the future.  @emph{Snicker}.  Yup, any day now, newsreaders like Blue
-Wave, xrn and 1stReader are bound to implement scoring.  Should we start
-holding our breath yet?
-
-
-@node Kill Files
-@section Kill Files
-@cindex kill files
-
-Gnus still supports those pesky old kill files.  In fact, the kill file
-entries can now be expiring, which is something I wrote before Daniel
-Quinlan thought of doing score files, so I've left the code in there.
-
-In short, kill processing is a lot slower (and I do mean @emph{a lot})
-than score processing, so it might be a good idea to rewrite your kill
-files into score files.
-
-Anyway, a kill file is a normal @code{emacs-lisp} file.  You can put any
-forms into this file, which means that you can use kill files as some
-sort of primitive hook function to be run on group entry, even though
-that isn't a very good idea.
-
-Normal kill files look like this:
-
-@lisp
-(gnus-kill "From" "Lars Ingebrigtsen")
-(gnus-kill "Subject" "ding")
-(gnus-expunge "X")
-@end lisp
-
-This will mark every article written by me as read, and remove the
-marked articles from the summary buffer.  Very useful, you'll agree.
-
-Other programs use a totally different kill file syntax.  If Gnus
-encounters what looks like a @code{rn} kill file, it will take a stab at
-interpreting it.
-
-Two summary functions for editing a GNUS kill file:
-
-@table @kbd
-
-@item M-k
-@kindex M-k (Summary)
-@findex gnus-summary-edit-local-kill
-Edit this group's kill file (@code{gnus-summary-edit-local-kill}).
-
-@item M-K
-@kindex M-K (Summary)
-@findex gnus-summary-edit-global-kill
-Edit the general kill file (@code{gnus-summary-edit-global-kill}).
-@end table
-
-Two group mode functions for editing the kill files:
-
-@table @kbd
-
-@item M-k
-@kindex M-k (Group)
-@findex gnus-group-edit-local-kill
-Edit this group's kill file (@code{gnus-group-edit-local-kill}).
-
-@item M-K
-@kindex M-K (Group)
-@findex gnus-group-edit-global-kill
-Edit the general kill file (@code{gnus-group-edit-global-kill}).
-@end table
-
-Kill file variables:
-
-@table @code
-@item gnus-kill-file-name
-@vindex gnus-kill-file-name
-A kill file for the group @samp{soc.motss} is normally called
-@file{soc.motss.KILL}.  The suffix appended to the group name to get
-this file name is detailed by the @code{gnus-kill-file-name} variable.
-The ``global'' kill file (not in the score file sense of ``global'', of
-course) is just called @file{KILL}.
-
-@vindex gnus-kill-save-kill-file
-@item gnus-kill-save-kill-file
-If this variable is non-@code{nil}, Gnus will save the
-kill file after processing, which is necessary if you use expiring
-kills.
-
-@item gnus-apply-kill-hook
-@vindex gnus-apply-kill-hook
-@findex gnus-apply-kill-file-unless-scored
-@findex gnus-apply-kill-file
-A hook called to apply kill files to a group.  It is
-@code{(gnus-apply-kill-file)} by default.  If you want to ignore the
-kill file if you have a score file for the same group, you can set this
-hook to @code{(gnus-apply-kill-file-unless-scored)}.  If you don't want
-kill files to be processed, you should set this variable to @code{nil}.
-
-@item gnus-kill-file-mode-hook
-@vindex gnus-kill-file-mode-hook
-A hook called in kill-file mode buffers.
-
-@end table
-
-
-@node Converting Kill Files
-@section Converting Kill Files
-@cindex kill files
-@cindex converting kill files
-
-If you have loads of old kill files, you may want to convert them into
-score files.  If they are ``regular'', you can use
-the @file{gnus-kill-to-score.el} package; if not, you'll have to do it
-by hand.
-
-The kill to score conversion package isn't included in Gnus by default.
-You can fetch it from
-@file{http://www.stud.ifi.uio.no/~larsi/ding-other/gnus-kill-to-score}.
-
-If your old kill files are very complex---if they contain more
-non-@code{gnus-kill} forms than not, you'll have to convert them by
-hand.  Or just let them be as they are.  Gnus will still use them as
-before.
-
-
-@node GroupLens
-@section GroupLens
-@cindex GroupLens
-
-GroupLens is a collaborative filtering system that helps you work
-together with other people to find the quality news articles out of the
-huge volume of news articles generated every day.
-
-To accomplish this the GroupLens system combines your opinions about
-articles you have already read with the opinions of others who have done
-likewise and gives you a personalized prediction for each unread news
-article.  Think of GroupLens as a matchmaker.  GroupLens watches how you
-rate articles, and finds other people that rate articles the same way.
-Once it has found some people you agree with it tells you, in the form
-of a prediction, what they thought of the article.  You can use this
-prediction to help you decide whether or not you want to read the
-article.
-
-@menu
-* Using GroupLens::          How to make Gnus use GroupLens.
-* Rating Articles::          Letting GroupLens know how you rate articles.
-* Displaying Predictions::   Displaying predictions given by GroupLens.
-* GroupLens Variables::      Customizing GroupLens.
-@end menu
-
-
-@node Using GroupLens
-@subsection Using GroupLens
-
-To use GroupLens you must register a pseudonym with your local Better
-Bit Bureau (BBB).
-@samp{http://www.cs.umn.edu/Research/GroupLens/bbb.html} is the only
-better bit in town at the moment.
-
-Once you have registered you'll need to set a couple of variables.
-
-@table @code
-
-@item gnus-use-grouplens
-@vindex gnus-use-grouplens
-Setting this variable to a non-@code{nil} value will make Gnus hook into
-all the relevant GroupLens functions.
-
-@item grouplens-pseudonym
-@vindex grouplens-pseudonym
-This variable should be set to the pseudonym you got when registering
-with the Better Bit Bureau.
-
-@item grouplens-newsgroups
-@vindex grouplens-newsgroups
-A list of groups that you want to get GroupLens predictions for.
-
-@end table
-
-That's the minimum of what you need to get up and running with GroupLens.
-Once you've registered, GroupLens will start giving you scores for
-articles based on the average of what other people think.  But, to get
-the real benefit of GroupLens you need to start rating articles
-yourself.  Then the scores GroupLens gives you will be personalized for
-you, based on how the people you usually agree with have already rated.
-
-
-@node Rating Articles
-@subsection Rating Articles
-
-In GroupLens, an article is rated on a scale from 1 to 5, inclusive.
-Where 1 means something like this article is a waste of bandwidth and 5
-means that the article was really good.  The basic question to ask
-yourself is, "on a scale from 1 to 5 would I like to see more articles
-like this one?"
-
-There are four ways to enter a rating for an article in GroupLens.
-
-@table @kbd
-
-@item r
-@kindex r (GroupLens)
-@findex bbb-summary-rate-article
-This function will prompt you for a rating on a scale of one to five.
-
-@item k
-@kindex k (GroupLens)
-@findex grouplens-score-thread
-This function will prompt you for a rating, and rate all the articles in
-the thread.  This is really useful for some of those long running giant
-threads in rec.humor.
-
-@end table
-
-The next two commands, @kbd{n} and @kbd{,} take a numerical prefix to be
-the score of the article you're reading.
-
-@table @kbd
-
-@item 1-5 n
-@kindex n (GroupLens)
-@findex grouplens-next-unread-article
-Rate the article and go to the next unread article.
-
-@item 1-5 ,
-@kindex , (GroupLens)
-@findex grouplens-best-unread-article
-Rate the article and go to the next unread article with the highest score.
-
-@end table
-
-If you want to give the current article a score of 4 and then go to the
-next article, just type @kbd{4 n}.
-
-
-@node Displaying Predictions
-@subsection Displaying Predictions
-
-GroupLens makes a prediction for you about how much you will like a
-news article.  The predictions from GroupLens are on a scale from 1 to
-5, where 1 is the worst and 5 is the best.  You can use the predictions
-from GroupLens in one of three ways controlled by the variable
-@code{gnus-grouplens-override-scoring}.
-
-@vindex gnus-grouplens-override-scoring
-There are three ways to display predictions in grouplens.  You may
-choose to have the GroupLens scores contribute to, or override the
-regular gnus scoring mechanism. override is the default; however, some
-people prefer to see the Gnus scores plus the grouplens scores.  To get
-the separate scoring behavior you need to set
-@code{gnus-grouplens-override-scoring} to @code{'separate}.  To have the
-GroupLens predictions combined with the grouplens scores set it to
-@code{'override} and to combine the scores set
-@code{gnus-grouplens-override-scoring} to @code{'combine}.  When you use
-the combine option you will also want to set the values for
-@code{grouplens-prediction-offset} and
-@code{grouplens-score-scale-factor}.
-
-@vindex grouplens-prediction-display
-In either case, GroupLens gives you a few choices for how you would like
-to see your predictions displayed.  The display of predictions is
-controlled by the @code{grouplens-prediction-display} variable.
-
-The following are valid values for that variable.
-
-@table @code
-@item prediction-spot
-The higher the prediction, the further to the right an @samp{*} is
-displayed.
-
-@item confidence-interval
-A numeric confidence interval.
-
-@item prediction-bar
-The higher the prediction, the longer the bar.
-
-@item confidence-bar
-Numerical confidence.
-
-@item confidence-spot
-The spot gets bigger with more confidence.
-
-@item prediction-num
-Plain-old numeric value.
-
-@item confidence-plus-minus
-Prediction +/- confidence.
-
-@end table
-
-
-@node GroupLens Variables
-@subsection GroupLens Variables
-
-@table @code
-
-@item gnus-summary-grouplens-line-format
-The summary line format used in GroupLens-enhanced summary buffers.  It
-accepts the same specs as the normal summary line format (@pxref{Summary
-Buffer Lines}).  The default is @samp{%U%R%z%l%I%(%[%4L: %-20,20n%]%)
-%s\n}.
-
-@item grouplens-bbb-host
-Host running the bbbd server.  @samp{grouplens.cs.umn.edu} is the
-default.
-
-@item grouplens-bbb-port
-Port of the host running the bbbd server.  The default is 9000.
-
-@item grouplens-score-offset
-Offset the prediction by this value.  In other words, subtract the
-prediction value by this number to arrive at the effective score.  The
-default is 0.
-
-@item grouplens-score-scale-factor
-This variable allows the user to magnify the effect of GroupLens scores.
-The scale factor is applied after the offset.  The default is 1.
-
-@end table
-
-
-@node Advanced Scoring
-@section Advanced Scoring
-
-Scoring on Subjects and From headers is nice enough, but what if you're
-really interested in what a person has to say only when she's talking
-about a particular subject?  Or what if you really don't want to
-read what person A has to say when she's following up to person B, but
-want to read what she says when she's following up to person C?
-
-By using advanced scoring rules you may create arbitrarily complex
-scoring patterns.
-
-@menu
-* Advanced Scoring Syntax::     A definition.
-* Advanced Scoring Examples::   What they look like.
-* Advanced Scoring Tips::       Getting the most out of it.
-@end menu
-
-
-@node Advanced Scoring Syntax
-@subsection Advanced Scoring Syntax
-
-Ordinary scoring rules have a string as the first element in the rule.
-Advanced scoring rules have a list as the first element.  The second
-element is the score to be applied if the first element evaluated to a
-non-@code{nil} value.
-
-These lists may consist of three logical operators, one redirection
-operator, and various match operators.
-
-Logical operators:
-
-@table @code
-@item &
-@itemx and
-This logical operator will evaluate each of its arguments until it finds
-one that evaluates to @code{false}, and then it'll stop.  If all arguments
-evaluate to @code{true} values, then this operator will return
-@code{true}.
-
-@item |
-@itemx or
-This logical operator will evaluate each of its arguments until it finds
-one that evaluates to @code{true}.  If no arguments are @code{true},
-then this operator will return @code{false}.
-
-@item !
-@itemx not
-@itemx Â¬
-This logical operator only takes a single argument.  It returns the
-logical negation of the value of its argument.
-
-@end table
-
-There is an @dfn{indirection operator} that will make its arguments
-apply to the ancestors of the current article being scored.  For
-instance, @code{1-} will make score rules apply to the parent of the
-current article.  @code{2-} will make score rules apply to the
-grandparent of the current article.  Alternatively, you can write
-@code{^^}, where the number of @code{^}s (carets) says how far back into
-the ancestry you want to go.
-
-Finally, we have the match operators.  These are the ones that do the
-real work.  Match operators are header name strings followed by a match
-and a match type.  A typical match operator looks like @samp{("from"
-"Lars Ingebrigtsen" s)}.  The header names are the same as when using
-simple scoring, and the match types are also the same.
-
-
-@node Advanced Scoring Examples
-@subsection Advanced Scoring Examples
-
-Let's say you want to increase the score of articles written by Lars
-when he's talking about Gnus:
-
-@example
-((&
-  ("from" "Lars Ingebrigtsen")
-  ("subject" "Gnus"))
- 1000)
-@end example
-
-Quite simple, huh?
-
-When he writes long articles, he sometimes has something nice to say:
-
-@example
-((&
-  ("from" "Lars Ingebrigtsen")
-  (|
-   ("subject" "Gnus")
-   ("lines" 100 >)))
- 1000)
-@end example
-
-However, when he responds to things written by Reig Eigil Logge, you
-really don't want to read what he's written:
-
-@example
-((&
-  ("from" "Lars Ingebrigtsen")
-  (1- ("from" "Reig Eigir Logge")))
- -100000)
-@end example
-
-Everybody that follows up Redmondo when he writes about disappearing
-socks should have their scores raised, but only when they talk about
-white socks.  However, when Lars talks about socks, it's usually not
-very interesting:
-
-@example
-((&
-  (1-
-   (&
-    ("from" "redmondo@@.*no" r)
-    ("body" "disappearing.*socks" t)))
-  (! ("from" "Lars Ingebrigtsen"))
-  ("body" "white.*socks"))
- 1000)
-@end example
-
-The possibilities are endless.
-
-
-@node Advanced Scoring Tips
-@subsection Advanced Scoring Tips
-
-The @code{&} and @code{|} logical operators do short-circuit logic.
-That is, they stop processing their arguments when it's clear what the
-result of the operation will be.  For instance, if one of the arguments
-of an @code{&} evaluates to @code{false}, there's no point in evaluating
-the rest of the arguments.  This means that you should put slow matches
-(@samp{body}, @samp{header}) last and quick matches (@samp{from},
-@samp{subject}) first.
-
-The indirection arguments (@code{1-} and so on) will make their
-arguments work on previous generations of the thread.  If you say
-something like:
-
-@example
-...
-(1-
- (1-
-  ("from" "lars")))
-...
-@end example
-
-Then that means "score on the from header of the grandparent of the
-current article".  An indirection is quite fast, but it's better to say:
-
-@example
-(1-
- (&
-  ("from" "Lars")
-  ("subject" "Gnus")))
-@end example
-
-than it is to say:
-
-@example
-(&
- (1- ("from" "Lars"))
- (1- ("subject" "Gnus")))
-@end example
-
-
-@node Score Decays
-@section Score Decays
-@cindex score decays
-@cindex decays
-
-You may find that your scores have a tendency to grow without
-bounds, especially if you're using adaptive scoring.  If scores get too
-big, they lose all meaning---they simply max out and it's difficult to
-use them in any sensible way.
-
-@vindex gnus-decay-scores
-@findex gnus-decay-score
-@vindex gnus-decay-score-function
-Gnus provides a mechanism for decaying scores to help with this problem.
-When score files are loaded and @code{gnus-decay-scores} is
-non-@code{nil}, Gnus will run the score files through the decaying
-mechanism thereby lowering the scores of all non-permanent score rules.
-The decay itself if performed by the @code{gnus-decay-score-function}
-function, which is @code{gnus-decay-score} by default.  Here's the
-definition of that function:
-
-@lisp
-(defun gnus-decay-score (score)
-  "Decay SCORE.
-This is done according to `gnus-score-decay-constant'
-and `gnus-score-decay-scale'."
-  (floor
-   (- score
-      (* (if (< score 0) 1 -1)
-         (min (abs score)
-              (max gnus-score-decay-constant
-                   (* (abs score)
-                      gnus-score-decay-scale)))))))
-@end lisp
-
-@vindex gnus-score-decay-scale
-@vindex gnus-score-decay-constant
-@code{gnus-score-decay-constant} is 3 by default and
-@code{gnus-score-decay-scale} is 0.05.  This should cause the following:
-
-@enumerate
-@item
-Scores between -3 and 3 will be set to 0 when this function is called.
-
-@item
-Scores with magnitudes between 3 and 60 will be shrunk by 3.
-
-@item
-Scores with magnitudes greater than 60 will be shrunk by 5% of the
-score.
-@end enumerate
-
-If you don't like this decay function, write your own.  It is called
-with the score to be decayed as its only parameter, and it should return
-the new score, which should be an integer.
-
-Gnus will try to decay scores once a day.  If you haven't run Gnus for
-four days, Gnus will decay the scores four times, for instance.
-
-
-@node Various
-@chapter Various
-
-@menu
-* Process/Prefix::             A convention used by many treatment commands.
-* Interactive::                Making Gnus ask you many questions.
-* Symbolic Prefixes::          How to supply some Gnus functions with options.
-* Formatting Variables::       You can specify what buffers should look like.
-* Windows Configuration::      Configuring the Gnus buffer windows.
-* Faces and Fonts::            How to change how faces look.
-* Compilation::                How to speed Gnus up.
-* Mode Lines::                 Displaying information in the mode lines.
-* Highlighting and Menus::     Making buffers look all nice and cozy.
-* Buttons::                    Get tendonitis in ten easy steps!
-* Daemons::                    Gnus can do things behind your back.
-* NoCeM::                      How to avoid spam and other fatty foods.
-* Undo::                       Some actions can be undone.
-* Moderation::                 What to do if you're a moderator.
-* XEmacs Enhancements::        There are more pictures and stuff under XEmacs.
-* Fuzzy Matching::             What's the big fuzz?
-* Thwarting Email Spam::       A how-to on avoiding unsolicited commercial email.
-* Various Various::            Things that are really various.
-@end menu
-
-
-@node Process/Prefix
-@section Process/Prefix
-@cindex process/prefix convention
-
-Many functions, among them functions for moving, decoding and saving
-articles, use what is known as the @dfn{Process/Prefix convention}.
-
-This is a method for figuring out what articles the user wants the
-command to be performed on.
-
-It goes like this:
-
-If the numeric prefix is N, perform the operation on the next N
-articles, starting with the current one.  If the numeric prefix is
-negative, perform the operation on the previous N articles, starting
-with the current one.
-
-@vindex transient-mark-mode
-If @code{transient-mark-mode} in non-@code{nil} and the region is
-active, all articles in the region will be worked upon.
-
-If there is no numeric prefix, but some articles are marked with the
-process mark, perform the operation on the articles marked with
-the process mark.
-
-If there is neither a numeric prefix nor any articles marked with the
-process mark, just perform the operation on the current article.
-
-Quite simple, really, but it needs to be made clear so that surprises
-are avoided.
-
-Commands that react to the process mark will push the current list of
-process marked articles onto a stack and will then clear all process
-marked articles.  You can restore the previous configuration with the
-@kbd{M P y} command (@pxref{Setting Process Marks}).
-
-@vindex gnus-summary-goto-unread
-One thing that seems to shock & horrify lots of people is that, for
-instance, @kbd{3 d} does exactly the same as @kbd{d} @kbd{d} @kbd{d}.
-Since each @kbd{d} (which marks the current article as read) by default
-goes to the next unread article after marking, this means that @kbd{3 d}
-will mark the next three unread articles as read, no matter what the
-summary buffer looks like.  Set @code{gnus-summary-goto-unread} to
-@code{nil} for a more straightforward action.
-
-
-@node Interactive
-@section Interactive
-@cindex interaction
-
-@table @code
-
-@item gnus-novice-user
-@vindex gnus-novice-user
-If this variable is non-@code{nil}, you are either a newcomer to the
-World of Usenet, or you are very cautious, which is a nice thing to be,
-really.  You will be given questions of the type ``Are you sure you want
-to do this?'' before doing anything dangerous.  This is @code{t} by
-default.
-
-@item gnus-expert-user
-@vindex gnus-expert-user
-If this variable is non-@code{nil}, you will seldom be asked any
-questions by Gnus.  It will simply assume you know what you're doing, no
-matter how strange.
-
-@item gnus-interactive-catchup
-@vindex gnus-interactive-catchup
-Require confirmation before catching up a group if non-@code{nil}.  It
-is @code{t} by default.
-
-@item gnus-interactive-exit
-@vindex gnus-interactive-exit
-Require confirmation before exiting Gnus.  This variable is @code{t} by
-default.
-@end table
-
-
-@node Symbolic Prefixes
-@section Symbolic Prefixes
-@cindex symbolic prefixes
-
-Quite a lot of Emacs commands react to the (numeric) prefix.  For
-instance, @kbd{C-u 4 C-f} moves point four characters forward, and
-@kbd{C-u 9 0 0 I s s p} adds a permanent @code{Subject} substring score
-rule of 900 to the current article.
-
-This is all nice and well, but what if you want to give a command some
-additional information?  Well, what most commands do is interpret the
-``raw'' prefix in some special way.  @kbd{C-u 0 C-x C-s} means that one
-doesn't want a backup file to be created when saving the current buffer,
-for instance.  But what if you want to save without making a backup
-file, and you want Emacs to flash lights and play a nice tune at the
-same time?  You can't, and you're probably perfectly happy that way.
-
-@kindex M-i (Summary)
-@findex gnus-symbolic-argument
-I'm not, so I've added a second prefix---the @dfn{symbolic prefix}.  The
-prefix key is @kbd{M-i} (@code{gnus-symbolic-argument}), and the next
-character typed in is the value.  You can stack as many @kbd{M-i}
-prefixes as you want.  @kbd{M-i a M-C-u} means ``feed the @kbd{M-C-u}
-command the symbolic prefix @code{a}''.  @kbd{M-i a M-i b M-C-u} means
-``feed the @kbd{M-C-u} command the symbolic prefixes @code{a} and
-@code{b}''.  You get the drift.
-
-Typing in symbolic prefixes to commands that don't accept them doesn't
-hurt, but it doesn't do any good either.  Currently not many Gnus
-functions make use of the symbolic prefix.
-
-If you're interested in how Gnus implements this, @pxref{Extended
-Interactive}.
-
-
-@node Formatting Variables
-@section Formatting Variables
-@cindex formatting variables
-
-Throughout this manual you've probably noticed lots of variables called
-things like @code{gnus-group-line-format} and
-@code{gnus-summary-mode-line-format}.  These control how Gnus is to
-output lines in the various buffers.  There's quite a lot of them.
-Fortunately, they all use the same syntax, so there's not that much to
-be annoyed by.
-
-Here's an example format spec (from the group buffer): @samp{%M%S%5y:
-%(%g%)\n}.  We see that it is indeed extremely ugly, and that there are
-lots of percentages everywhere.
-
-@menu
-* Formatting Basics::     A formatting variable is basically a format string.
-* Mode Line Formatting::  Some rules about mode line formatting variables.
-* Advanced Formatting::   Modifying output in various ways.
-* User-Defined Specs::    Having Gnus call your own functions.
-* Formatting Fonts::      Making the formatting look colorful and nice.
-@end menu
-
-Currently Gnus uses the following formatting variables:
-@code{gnus-group-line-format}, @code{gnus-summary-line-format},
-@code{gnus-server-line-format}, @code{gnus-topic-line-format},
-@code{gnus-group-mode-line-format},
-@code{gnus-summary-mode-line-format},
-@code{gnus-article-mode-line-format},
-@code{gnus-server-mode-line-format}, and
-@code{gnus-summary-pick-line-format}.
-
-All these format variables can also be arbitrary elisp forms.  In that
-case, they will be @code{eval}ed to insert the required lines.
-
-@kindex M-x gnus-update-format
-@findex gnus-update-format
-Gnus includes a command to help you while creating your own format
-specs.  @kbd{M-x gnus-update-format} will @code{eval} the current form,
-update the spec in question and pop you to a buffer where you can
-examine the resulting lisp code to be run to generate the line.
-
-
-
-@node Formatting Basics
-@subsection Formatting Basics
-
-Each @samp{%} element will be replaced by some string or other when the
-buffer in question is generated.  @samp{%5y} means ``insert the @samp{y}
-spec, and pad with spaces to get a 5-character field''.
-
-As with normal C and Emacs Lisp formatting strings, the numerical
-modifier between the @samp{%} and the formatting type character will
-@dfn{pad} the output so that it is always at least that long.
-@samp{%5y} will make the field always (at least) five characters wide by
-padding with spaces to the left.  If you say @samp{%-5y}, it will pad to
-the right instead.
-
-You may also wish to limit the length of the field to protect against
-particularly wide values.  For that you can say @samp{%4,6y}, which
-means that the field will never be more than 6 characters wide and never
-less than 4 characters wide.
-
-
-@node Mode Line Formatting
-@subsection Mode Line Formatting
-
-Mode line formatting variables (e.g.,
-@code{gnus-summary-mode-line-format}) follow the same rules as other,
-buffer line oriented formatting variables (@pxref{Formatting Basics})
-with the following two differences:
-
-@enumerate
-
-@item
-There must be no newline (@samp{\n}) at the end.
-
-@item
-The special @samp{%%b} spec can be used to display the buffer name.
-Well, it's no spec at all, really---@samp{%%} is just a way to quote
-@samp{%} to allow it to pass through the formatting machinery unmangled,
-so that Emacs receives @samp{%b}, which is something the Emacs mode line
-display interprets to mean ``show the buffer name''.  For a full list of
-mode line specs Emacs understands, see the documentation of the
-@code{mode-line-format} variable.
-
-@end enumerate
-
-
-@node Advanced Formatting
-@subsection Advanced Formatting
-
-It is frequently useful to post-process the fields in some way.
-Padding, limiting, cutting off parts and suppressing certain values can
-be achieved by using @dfn{tilde modifiers}.  A typical tilde spec might
-look like @samp{%~(cut 3)~(ignore "0")y}.
-
-These are the valid modifiers:
-
-@table @code
-@item pad
-@itemx pad-left
-Pad the field to the left with spaces until it reaches the required
-length.
-
-@item pad-right
-Pad the field to the right with spaces until it reaches the required
-length.
-
-@item max
-@itemx max-left
-Cut off characters from the left until it reaches the specified length.
-
-@item max-right
-Cut off characters from the right until it reaches the specified
-length.
-
-@item cut
-@itemx cut-left
-Cut off the specified number of characters from the left.
-
-@item cut-right
-Cut off the specified number of characters from the right.
-
-@item ignore
-Return an empty string if the field is equal to the specified value.
-
-@item form
-Use the specified form as the field value when the @samp{@@} spec is
-used.
-@end table
-
-Let's take an example.  The @samp{%o} spec in the summary mode lines
-will return a date in compact ISO8601 format---@samp{19960809T230410}.
-This is quite a mouthful, so we want to shave off the century number and
-the time, leaving us with a six-character date.  That would be
-@samp{%~(cut-left 2)~(max-right 6)~(pad 6)o}.  (Cutting is done before
-maxing, and we need the padding to ensure that the date is never less
-than 6 characters to make it look nice in columns.)
-
-Ignoring is done first; then cutting; then maxing; and then as the very
-last operation, padding.
-
-If you use lots of these advanced thingies, you'll find that Gnus gets
-quite slow.  This can be helped enormously by running @kbd{M-x
-gnus-compile} when you are satisfied with the look of your lines.
-@xref{Compilation}.
-
-
-@node User-Defined Specs
-@subsection User-Defined Specs
-
-All the specs allow for inserting user defined specifiers---@samp{u}.
-The next character in the format string should be a letter.  Gnus
-will call the function @code{gnus-user-format-function-}@samp{X}, where
-@samp{X} is the letter following @samp{%u}.  The function will be passed
-a single parameter---what the parameter means depends on what buffer
-it's being called from.  The function should return a string, which will
-be inserted into the buffer just like information from any other
-specifier.  This function may also be called with dummy values, so it
-should protect against that.
-
-You can also use tilde modifiers (@pxref{Advanced Formatting} to achieve
-much the same without defining new functions.  Here's an example:
-@samp{%~(form (count-lines (point-min) (point)))@@}.  The form
-given here will be evaluated to yield the current line number, and then
-inserted.
-
-
-@node Formatting Fonts
-@subsection Formatting Fonts
-
-There are specs for highlighting, and these are shared by all the format
-variables.  Text inside the @samp{%(} and @samp{%)} specifiers will get
-the special @code{mouse-face} property set, which means that it will be
-highlighted (with @code{gnus-mouse-face}) when you put the mouse pointer
-over it.
-
-Text inside the @samp{%@{} and @samp{%@}} specifiers will have their
-normal faces set using @code{gnus-face-0}, which is @code{bold} by
-default.  If you say @samp{%1@{}, you'll get @code{gnus-face-1} instead,
-and so on.  Create as many faces as you wish.  The same goes for the
-@code{mouse-face} specs---you can say @samp{%3(hello%)} to have
-@samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
-
-Text inside the @samp{%<} and @samp{%>} specifiers will get the special
-@code{balloon-help} property set to @code{gnus-balloon-face-0}. If you say
-@samp{%1<}, you'll get @code{gnus-balloon-face-1} and so on. The
-@code{gnus-balloon-face-*} variables should be either strings or
-symbols naming functions that return a string. Under @code{balloon-help-mode},
-when the mouse passes over text with this property set, a balloon window
-will appear and display the string. Please refer to the doc string of
-@code{balloon-help-mode} for more information on this.
-
-Here's an alternative recipe for the group buffer:
-
-@lisp
-;; Create three face types.
-(setq gnus-face-1 'bold)
-(setq gnus-face-3 'italic)
-
-;; We want the article count to be in
-;; a bold and green face.  So we create
-;; a new face called `my-green-bold'.
-(copy-face 'bold 'my-green-bold)
-;; Set the color.
-(set-face-foreground 'my-green-bold "ForestGreen")
-(setq gnus-face-2 'my-green-bold)
-
-;; Set the new & fancy format.
-(setq gnus-group-line-format
-      "%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n")
-@end lisp
-
-I'm sure you'll be able to use this scheme to create totally unreadable
-and extremely vulgar displays.  Have fun!
-
-Note that the @samp{%(} specs (and friends) do not make any sense on the
-mode-line variables.
-
-
-@node Windows Configuration
-@section Windows Configuration
-@cindex windows configuration
-
-No, there's nothing here about X, so be quiet.
-
-@vindex gnus-use-full-window
-If @code{gnus-use-full-window} non-@code{nil}, Gnus will delete all
-other windows and occupy the entire Emacs screen by itself.  It is
-@code{t} by default.
-
-Setting this variable to @code{nil} kinda works, but there are
-glitches.  Use at your own peril.
-
-@vindex gnus-buffer-configuration
-@code{gnus-buffer-configuration} describes how much space each Gnus
-buffer should be given.  Here's an excerpt of this variable:
-
-@lisp
-((group (vertical 1.0 (group 1.0 point)
-                      (if gnus-carpal (group-carpal 4))))
- (article (vertical 1.0 (summary 0.25 point)
-                        (article 1.0))))
-@end lisp
-
-This is an alist.  The @dfn{key} is a symbol that names some action or
-other.  For instance, when displaying the group buffer, the window
-configuration function will use @code{group} as the key.  A full list of
-possible names is listed below.
-
-The @dfn{value} (i.e., the @dfn{split}) says how much space each buffer
-should occupy.  To take the @code{article} split as an example -
-
-@lisp
-(article (vertical 1.0 (summary 0.25 point)
-                       (article 1.0)))
-@end lisp
-
-This @dfn{split} says that the summary buffer should occupy 25% of upper
-half of the screen, and that it is placed over the article buffer.  As
-you may have noticed, 100% + 25% is actually 125% (yup, I saw y'all
-reaching for that calculator there).  However, the special number
-@code{1.0} is used to signal that this buffer should soak up all the
-rest of the space available after the rest of the buffers have taken
-whatever they need.  There should be only one buffer with the @code{1.0}
-size spec per split.
-
-Point will be put in the buffer that has the optional third element
-@code{point}.  In a @code{frame} split, the last subsplit having a leaf
-split where the tag @code{frame-focus} is a member (i.e. is the third or
-fourth element in the list, depending on whether the @code{point} tag is
-present) gets focus.
-
-Here's a more complicated example:
-
-@lisp
-(article (vertical 1.0 (group 4)
-                       (summary 0.25 point)
-                       (if gnus-carpal (summary-carpal 4))
-                       (article 1.0)))
-@end lisp
-
-If the size spec is an integer instead of a floating point number,
-then that number will be used to say how many lines a buffer should
-occupy, not a percentage.
-
-If the @dfn{split} looks like something that can be @code{eval}ed (to be
-precise---if the @code{car} of the split is a function or a subr), this
-split will be @code{eval}ed.  If the result is non-@code{nil}, it will
-be used as a split.  This means that there will be three buffers if
-@code{gnus-carpal} is @code{nil}, and four buffers if @code{gnus-carpal}
-is non-@code{nil}.
-
-Not complicated enough for you?  Well, try this on for size:
-
-@lisp
-(article (horizontal 1.0
-             (vertical 0.5
-                 (group 1.0)
-                 (gnus-carpal 4))
-             (vertical 1.0
-                 (summary 0.25 point)
-                 (summary-carpal 4)
-                 (article 1.0))))
-@end lisp
-
-Whoops.  Two buffers with the mystery 100% tag.  And what's that
-@code{horizontal} thingie?
-
-If the first element in one of the split is @code{horizontal}, Gnus will
-split the window horizontally, giving you two windows side-by-side.
-Inside each of these strips you may carry on all you like in the normal
-fashion.  The number following @code{horizontal} says what percentage of
-the screen is to be given to this strip.
-
-For each split, there @emph{must} be one element that has the 100% tag.
-The splitting is never accurate, and this buffer will eat any leftover
-lines from the splits.
-
-To be slightly more formal, here's a definition of what a valid split
-may look like:
-
-@example
-split       = frame | horizontal | vertical | buffer | form
-frame       = "(frame " size *split ")"
-horizontal  = "(horizontal " size *split ")"
-vertical    = "(vertical " size *split ")"
-buffer      = "(" buffer-name " " size *[ "point" ] *[ "frame-focus"] ")"
-size        = number | frame-params
-buffer-name = group | article | summary ...
-@end example
-
-The limitations are that the @code{frame} split can only appear as the
-top-level split.  @var{form} should be an Emacs Lisp form that should
-return a valid split.  We see that each split is fully recursive, and
-may contain any number of @code{vertical} and @code{horizontal} splits.
-
-@vindex gnus-window-min-width
-@vindex gnus-window-min-height
-@cindex window height
-@cindex window width
-Finding the right sizes can be a bit complicated.  No window may be less
-than @code{gnus-window-min-height} (default 1) characters high, and all
-windows must be at least @code{gnus-window-min-width} (default 1)
-characters wide.  Gnus will try to enforce this before applying the
-splits.  If you want to use the normal Emacs window width/height limit,
-you can just set these two variables to @code{nil}.
-
-If you're not familiar with Emacs terminology, @code{horizontal} and
-@code{vertical} splits may work the opposite way of what you'd expect.
-Windows inside a @code{horizontal} split are shown side-by-side, and
-windows within a @code{vertical} split are shown above each other.
-
-@findex gnus-configure-frame
-If you want to experiment with window placement, a good tip is to call
-@code{gnus-configure-frame} directly with a split.  This is the function
-that does all the real work when splitting buffers.  Below is a pretty
-nonsensical configuration with 5 windows; two for the group buffer and
-three for the article buffer.  (I said it was nonsensical.)  If you
-@code{eval} the statement below, you can get an idea of how that would
-look straight away, without going through the normal Gnus channels.
-Play with it until you're satisfied, and then use
-@code{gnus-add-configuration} to add your new creation to the buffer
-configuration list.
-
-@lisp
-(gnus-configure-frame
- '(horizontal 1.0
-    (vertical 10
-      (group 1.0)
-      (article 0.3 point))
-    (vertical 1.0
-      (article 1.0)
-      (horizontal 4
-        (group 1.0)
-        (article 10)))))
-@end lisp
-
-You might want to have several frames as well.  No prob---just use the
-@code{frame} split:
-
-@lisp
-(gnus-configure-frame
- '(frame 1.0
-         (vertical 1.0
-                   (summary 0.25 point frame-focus)
-                   (article 1.0))
-         (vertical ((height . 5) (width . 15)
-                    (user-position . t)
-                    (left . -1) (top . 1))
-                   (picon 1.0))))
-
-@end lisp
-
-This split will result in the familiar summary/article window
-configuration in the first (or ``main'') frame, while a small additional
-frame will be created where picons will be shown.  As you can see,
-instead of the normal @code{1.0} top-level spec, each additional split
-should have a frame parameter alist as the size spec.
-@xref{Frame Parameters, , Frame Parameters, elisp, The GNU Emacs Lisp
-Reference Manual}.  Under XEmacs, a frame property list will be
-accepted, too---for instance, @code{(height 5 width 15 left -1 top 1)}
-is such a plist.
-The list of all possible keys for @code{gnus-buffer-configuration} can
-be found in its default value.
-
-Note that the @code{message} key is used for both
-@code{gnus-group-mail} and @code{gnus-summary-mail-other-window}.  If
-it is desirable to distinguish between the two, something like this
-might be used:
-
-@lisp
-(message (horizontal 1.0
-                     (vertical 1.0 (message 1.0 point))
-                     (vertical 0.24
-                               (if (buffer-live-p gnus-summary-buffer)
-                                   '(summary 0.5))
-                               (group 1.0)))))
-@end lisp
-
-One common desire for a multiple frame split is to have a separate frame
-for composing mail and news while leaving the original frame intact.  To
-accomplish that, something like the following can be done:
-
-@lisp
-(message (frame 1.0
-                (if (not (buffer-live-p gnus-summary-buffer))
-                    (car (cdr (assoc 'group gnus-buffer-configuration)))
-                  (car (cdr (assoc 'summary gnus-buffer-configuration))))
-                (vertical ((user-position . t) (top . 1) (left . 1)
-                           (name . "Message"))
-                          (message 1.0 point))))
-@end lisp
-
-@findex gnus-add-configuration
-Since the @code{gnus-buffer-configuration} variable is so long and
-complicated, there's a function you can use to ease changing the config
-of a single setting: @code{gnus-add-configuration}.  If, for instance,
-you want to change the @code{article} setting, you could say:
-
-@lisp
-(gnus-add-configuration
- '(article (vertical 1.0
-               (group 4)
-               (summary .25 point)
-               (article 1.0))))
-@end lisp
-
-You'd typically stick these @code{gnus-add-configuration} calls in your
-@file{.gnus.el} file or in some startup hook---they should be run after
-Gnus has been loaded.
-
-@vindex gnus-always-force-window-configuration
-If all windows mentioned in the configuration are already visible, Gnus
-won't change the window configuration.  If you always want to force the
-``right'' window configuration, you can set
-@code{gnus-always-force-window-configuration} to non-@code{nil}.
-
-If you're using tree displays (@pxref{Tree Display}), and the tree
-window is displayed vertically next to another window, you may also want
-to fiddle with @code{gnus-tree-minimize-window} to avoid having the
-windows resized.
-
-
-@node Faces and Fonts
-@section Faces and Fonts
-@cindex faces
-@cindex fonts
-@cindex colors
-
-Fiddling with fonts and faces used to be very difficult, but these days
-it is very simple.  You simply say @kbd{M-x customize-face}, pick out
-the face you want to alter, and alter it via the standard Customize
-interface.
-
-
-@node Compilation
-@section Compilation
-@cindex compilation
-@cindex byte-compilation
-
-@findex gnus-compile
-
-Remember all those line format specification variables?
-@code{gnus-summary-line-format}, @code{gnus-group-line-format}, and so
-on.  Now, Gnus will of course heed whatever these variables are, but,
-unfortunately, changing them will mean a quite significant slow-down.
-(The default values of these variables have byte-compiled functions
-associated with them, while the user-generated versions do not, of
-course.)
-
-To help with this, you can run @kbd{M-x gnus-compile} after you've
-fiddled around with the variables and feel that you're (kind of)
-satisfied.  This will result in the new specs being byte-compiled, and
-you'll get top speed again.  Gnus will save these compiled specs in the
-@file{.newsrc.eld} file.  (User-defined functions aren't compiled by
-this function, though---you should compile them yourself by sticking
-them into the @code{.gnus.el} file and byte-compiling that file.)
-
-
-@node Mode Lines
-@section Mode Lines
-@cindex mode lines
-
-@vindex gnus-updated-mode-lines
-@code{gnus-updated-mode-lines} says what buffers should keep their mode
-lines updated.  It is a list of symbols.  Supported symbols include
-@code{group}, @code{article}, @code{summary}, @code{server},
-@code{browse}, and @code{tree}.  If the corresponding symbol is present,
-Gnus will keep that mode line updated with information that may be
-pertinent.  If this variable is @code{nil}, screen refresh may be
-quicker.
-
-@cindex display-time
-
-@vindex gnus-mode-non-string-length
-By default, Gnus displays information on the current article in the mode
-lines of the summary and article buffers.  The information Gnus wishes
-to display (e.g. the subject of the article) is often longer than the
-mode lines, and therefore have to be cut off at some point.  The
-@code{gnus-mode-non-string-length} variable says how long the other
-elements on the line is (i.e., the non-info part).  If you put
-additional elements on the mode line (e.g. a clock), you should modify
-this variable:
-
-@c Hook written by Francesco Potorti` <pot@cnuce.cnr.it>
-@lisp
-(add-hook 'display-time-hook
-          (lambda () (setq gnus-mode-non-string-length
-                           (+ 21
-                              (if line-number-mode 5 0)
-                              (if column-number-mode 4 0)
-                              (length display-time-string)))))
-@end lisp
-
-If this variable is @code{nil} (which is the default), the mode line
-strings won't be chopped off, and they won't be padded either.  Note
-that the default is unlikely to be desirable, as even the percentage
-complete in the buffer may be crowded off the mode line; the user should
-configure this variable appropriately for her configuration.
-
-
-@node Highlighting and Menus
-@section Highlighting and Menus
-@cindex visual
-@cindex highlighting
-@cindex menus
-
-@vindex gnus-visual
-The @code{gnus-visual} variable controls most of the Gnus-prettifying
-aspects.  If @code{nil}, Gnus won't attempt to create menus or use fancy
-colors or fonts.  This will also inhibit loading the @file{gnus-vis.el}
-file.
-
-This variable can be a list of visual properties that are enabled.  The
-following elements are valid, and are all included by default:
-
-@table @code
-@item group-highlight
-Do highlights in the group buffer.
-@item summary-highlight
-Do highlights in the summary buffer.
-@item article-highlight
-Do highlights in the article buffer.
-@item highlight
-Turn on highlighting in all buffers.
-@item group-menu
-Create menus in the group buffer.
-@item summary-menu
-Create menus in the summary buffers.
-@item article-menu
-Create menus in the article buffer.
-@item browse-menu
-Create menus in the browse buffer.
-@item server-menu
-Create menus in the server buffer.
-@item score-menu
-Create menus in the score buffers.
-@item menu
-Create menus in all buffers.
-@end table
-
-So if you only want highlighting in the article buffer and menus in all
-buffers, you could say something like:
-
-@lisp
-(setq gnus-visual '(article-highlight menu))
-@end lisp
-
-If you want highlighting only and no menus whatsoever, you'd say:
-
-@lisp
-(setq gnus-visual '(highlight))
-@end lisp
-
-If @code{gnus-visual} is @code{t}, highlighting and menus will be used
-in all Gnus buffers.
-
-Other general variables that influence the look of all buffers include:
-
-@table @code
-@item gnus-mouse-face
-@vindex gnus-mouse-face
-This is the face (i.e., font) used for mouse highlighting in Gnus.  No
-mouse highlights will be done if @code{gnus-visual} is @code{nil}.
-
-@end table
-
-There are hooks associated with the creation of all the different menus:
-
-@table @code
-
-@item gnus-article-menu-hook
-@vindex gnus-article-menu-hook
-Hook called after creating the article mode menu.
-
-@item gnus-group-menu-hook
-@vindex gnus-group-menu-hook
-Hook called after creating the group mode menu.
-
-@item gnus-summary-menu-hook
-@vindex gnus-summary-menu-hook
-Hook called after creating the summary mode menu.
-
-@item gnus-server-menu-hook
-@vindex gnus-server-menu-hook
-Hook called after creating the server mode menu.
-
-@item gnus-browse-menu-hook
-@vindex gnus-browse-menu-hook
-Hook called after creating the browse mode menu.
-
-@item gnus-score-menu-hook
-@vindex gnus-score-menu-hook
-Hook called after creating the score mode menu.
-
-@end table
-
-
-@node Buttons
-@section Buttons
-@cindex buttons
-@cindex mouse
-@cindex click
-
-Those new-fangled @dfn{mouse} contraptions is very popular with the
-young, hep kids who don't want to learn the proper way to do things
-these days.  Why, I remember way back in the summer of '89, when I was
-using Emacs on a Tops 20 system.  Three hundred users on one single
-machine, and every user was running Simula compilers.  Bah!
-
-Right.
-
-@vindex gnus-carpal
-Well, you can make Gnus display bufferfuls of buttons you can click to
-do anything by setting @code{gnus-carpal} to @code{t}.  Pretty simple,
-really.  Tell the chiropractor I sent you.
-
-
-@table @code
-
-@item gnus-carpal-mode-hook
-@vindex gnus-carpal-mode-hook
-Hook run in all carpal mode buffers.
-
-@item gnus-carpal-button-face
-@vindex gnus-carpal-button-face
-Face used on buttons.
-
-@item gnus-carpal-header-face
-@vindex gnus-carpal-header-face
-Face used on carpal buffer headers.
-
-@item gnus-carpal-group-buffer-buttons
-@vindex gnus-carpal-group-buffer-buttons
-Buttons in the group buffer.
-
-@item gnus-carpal-summary-buffer-buttons
-@vindex gnus-carpal-summary-buffer-buttons
-Buttons in the summary buffer.
-
-@item gnus-carpal-server-buffer-buttons
-@vindex gnus-carpal-server-buffer-buttons
-Buttons in the server buffer.
-
-@item gnus-carpal-browse-buffer-buttons
-@vindex gnus-carpal-browse-buffer-buttons
-Buttons in the browse buffer.
-@end table
-
-All the @code{buttons} variables are lists.  The elements in these list
-are either cons cells where the @code{car} contains a text to be displayed and
-the @code{cdr} contains a function symbol, or a simple string.
-
-
-@node Daemons
-@section Daemons
-@cindex demons
-@cindex daemons
-
-Gnus, being larger than any program ever written (allegedly), does lots
-of strange stuff that you may wish to have done while you're not
-present.  For instance, you may want it to check for new mail once in a
-while.  Or you may want it to close down all connections to all servers
-when you leave Emacs idle.  And stuff like that.
-
-Gnus will let you do stuff like that by defining various
-@dfn{handlers}.  Each handler consists of three elements:  A
-@var{function}, a @var{time}, and an @var{idle} parameter.
-
-Here's an example of a handler that closes connections when Emacs has
-been idle for thirty minutes:
-
-@lisp
-(gnus-demon-close-connections nil 30)
-@end lisp
-
-Here's a handler that scans for PGP headers every hour when Emacs is
-idle:
-
-@lisp
-(gnus-demon-scan-pgp 60 t)
-@end lisp
-
-This @var{time} parameter and than @var{idle} parameter work together
-in a strange, but wonderful fashion.  Basically, if @var{idle} is
-@code{nil}, then the function will be called every @var{time} minutes.
-
-If @var{idle} is @code{t}, then the function will be called after
-@var{time} minutes only if Emacs is idle.  So if Emacs is never idle,
-the function will never be called.  But once Emacs goes idle, the
-function will be called every @var{time} minutes.
-
-If @var{idle} is a number and @var{time} is a number, the function will
-be called every @var{time} minutes only when Emacs has been idle for
-@var{idle} minutes.
-
-If @var{idle} is a number and @var{time} is @code{nil}, the function
-will be called once every time Emacs has been idle for @var{idle}
-minutes.
-
-And if @var{time} is a string, it should look like @samp{07:31}, and
-the function will then be called once every day somewhere near that
-time.  Modified by the @var{idle} parameter, of course.
-
-@vindex gnus-demon-timestep
-(When I say ``minute'' here, I really mean @code{gnus-demon-timestep}
-seconds.  This is 60 by default.  If you change that variable,
-all the timings in the handlers will be affected.)
-
-So, if you want to add a handler, you could put something like this in
-your @file{.gnus} file:
-
-@findex gnus-demon-add-handler
-@lisp
-(gnus-demon-add-handler 'gnus-demon-close-connections 30 t)
-@end lisp
-
-@findex gnus-demon-add-nocem
-@findex gnus-demon-add-scanmail
-@findex gnus-demon-add-rescan
-@findex gnus-demon-add-scan-timestamps
-@findex gnus-demon-add-disconnection
-Some ready-made functions to do this have been created:
-@code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection},
-@code{gnus-demon-add-nntp-close-connection},
-@code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, and
-@code{gnus-demon-add-scanmail}.  Just put those functions in your
-@file{.gnus} if you want those abilities.
-
-@findex gnus-demon-init
-@findex gnus-demon-cancel
-@vindex gnus-demon-handlers
-If you add handlers to @code{gnus-demon-handlers} directly, you should
-run @code{gnus-demon-init} to make the changes take hold.  To cancel all
-daemons, you can use the @code{gnus-demon-cancel} function.
-
-Note that adding daemons can be pretty naughty if you over do it.  Adding
-functions that scan all news and mail from all servers every two seconds
-is a sure-fire way of getting booted off any respectable system.  So
-behave.
-
-
-@node NoCeM
-@section NoCeM
-@cindex nocem
-@cindex spam
-
-@dfn{Spamming} is posting the same article lots and lots of times.
-Spamming is bad.  Spamming is evil.
-
-Spamming is usually canceled within a day or so by various anti-spamming
-agencies.  These agencies usually also send out @dfn{NoCeM} messages.
-NoCeM is pronounced ``no see-'em'', and means what the name
-implies---these are messages that make the offending articles, like, go
-away.
-
-What use are these NoCeM messages if the articles are canceled anyway?
-Some sites do not honor cancel messages and some sites just honor cancels
-from a select few people.  Then you may wish to make use of the NoCeM
-messages, which are distributed in the @samp{alt.nocem.misc} newsgroup.
-
-Gnus can read and parse the messages in this group automatically, and
-this will make spam disappear.
-
-There are some variables to customize, of course:
-
-@table @code
-@item gnus-use-nocem
-@vindex gnus-use-nocem
-Set this variable to @code{t} to set the ball rolling.  It is @code{nil}
-by default.
-
-@item gnus-nocem-groups
-@vindex gnus-nocem-groups
-Gnus will look for NoCeM messages in the groups in this list.  The
-default is @code{("news.lists.filters" "news.admin.net-abuse.bulletins"
-"alt.nocem.misc" "news.admin.net-abuse.announce")}.
-
-@item gnus-nocem-issuers
-@vindex gnus-nocem-issuers
-There are many people issuing NoCeM messages.  This list says what
-people you want to listen to.  The default is @code{("Automoose-1"
-"rbraver@@ohww.norman.ok.us" "clewis@@ferret.ocunix.on.ca"
-"jem@@xpat.com" "snowhare@@xmission.com" "red@@redpoll.mrfs.oh.us
-(Richard E. Depew)")}; fine, upstanding citizens all of them.
-
-Known despammers that you can put in this list include:
-
-@table @samp
-@item clewis@@ferret.ocunix.on.ca;
-@cindex Chris Lewis
-Chris Lewis---Major Canadian despammer who has probably canceled more
-usenet abuse than anybody else.
-
-@item Automoose-1
-@cindex CancelMoose[tm]
-The CancelMoose[tm] on autopilot.  The CancelMoose[tm] is reputed to be
-Norwegian, and was the person(s) who invented NoCeM.
-
-@item jem@@xpat.com;
-@cindex Jem
-John Milburn---despammer located in Korea who is getting very busy these
-days.
-
-@item red@@redpoll.mrfs.oh.us (Richard E. Depew)
-Richard E. Depew---lone American despammer.  He mostly cancels binary
-postings to non-binary groups and removes spews (regurgitated articles).
-@end table
-
-You do not have to heed NoCeM messages from all these people---just the
-ones you want to listen to.  You also don't have to accept all NoCeM
-messages from the people you like.  Each NoCeM message has a @dfn{type}
-header that gives the message a (more or less, usually less) rigorous
-definition.  Common types are @samp{spam}, @samp{spew}, @samp{mmf},
-@samp{binary}, and @samp{troll}.  To specify this, you have to use
-@code{(@var{issuer} @var{conditions} @dots{})} elements in the list.
-Each condition is either a string (which is a regexp that matches types
-you want to use) or a list on the form @code{(not @var{string})}, where
-@var{string} is a regexp that matches types you don't want to use.
-
-For instance, if you want all NoCeM messages from Chris Lewis except his
-@samp{troll} messages, you'd say:
-
-@lisp
-("clewis@@ferret.ocunix.on.ca" ".*" (not "troll"))
-@end lisp
-
-On the other hand, if you just want nothing but his @samp{spam} and
-@samp{spew} messages, you'd say:
-
-@lisp
-("clewis@@ferret.ocunix.on.ca" (not ".*") "spew" "spam")
-@end lisp
-
-The specs are applied left-to-right.
-
-
-@item gnus-nocem-verifyer
-@vindex gnus-nocem-verifyer
-@findex mc-verify
-This should be a function for verifying that the NoCeM issuer is who she
-says she is.  The default is @code{mc-verify}, which is a Mailcrypt
-function.  If this is too slow and you don't care for verification
-(which may be dangerous), you can set this variable to @code{nil}.
-
-If you want signed NoCeM messages to be verified and unsigned messages
-not to be verified (but used anyway), you could do something like:
-
-@lisp
-(setq gnus-nocem-verifyer 'my-gnus-mc-verify)
-
-(defun my-gnus-mc-verify ()
-  (not (eq 'forged
-           (ignore-errors
-             (if (mc-verify)
-                 t
-               'forged)))))
-@end lisp
-
-This might be dangerous, though.
-
-@item gnus-nocem-directory
-@vindex gnus-nocem-directory
-This is where Gnus will store its NoCeM cache files.  The default is
-@file{~/News/NoCeM/}.
-
-@item gnus-nocem-expiry-wait
-@vindex gnus-nocem-expiry-wait
-The number of days before removing old NoCeM entries from the cache.
-The default is 15.  If you make it shorter Gnus will be faster, but you
-might then see old spam.
-
-@end table
-
-Using NoCeM could potentially be a memory hog.  If you have many living
-(i. e., subscribed or unsubscribed groups), your Emacs process will grow
-big.  If this is a problem, you should kill off all (or most) of your
-unsubscribed groups (@pxref{Subscription Commands}).
-
-
-@node Undo
-@section Undo
-@cindex undo
-
-It is very useful to be able to undo actions one has done.  In normal
-Emacs buffers, it's easy enough---you just push the @code{undo} button.
-In Gnus buffers, however, it isn't that simple.
-
-The things Gnus displays in its buffer is of no value whatsoever to
-Gnus---it's all just data designed to look nice to the user.
-Killing a group in the group buffer with @kbd{C-k} makes the line
-disappear, but that's just a side-effect of the real action---the
-removal of the group in question from the internal Gnus structures.
-Undoing something like that can't be done by the normal Emacs
-@code{undo} function.
-
-Gnus tries to remedy this somewhat by keeping track of what the user
-does and coming up with actions that would reverse the actions the user
-takes.  When the user then presses the @code{undo} key, Gnus will run
-the code to reverse the previous action, or the previous actions.
-However, not all actions are easily reversible, so Gnus currently offers
-a few key functions to be undoable.  These include killing groups,
-yanking groups, and changing the list of read articles of groups.
-That's it, really.  More functions may be added in the future, but each
-added function means an increase in data to be stored, so Gnus will
-never be totally undoable.
-
-@findex gnus-undo-mode
-@vindex gnus-use-undo
-@findex gnus-undo
-The undoability is provided by the @code{gnus-undo-mode} minor mode.  It
-is used if @code{gnus-use-undo} is non-@code{nil}, which is the
-default.  The @kbd{M-C-_} key performs the @code{gnus-undo} command
-command, which should feel kinda like the normal Emacs @code{undo}
-command.
-
-
-@node Moderation
-@section Moderation
-@cindex moderation
-
-If you are a moderator, you can use the @file{gnus-mdrtn.el} package.
-It is not included in the standard Gnus package.  Write a mail to
-@samp{larsi@@gnus.org} and state what group you moderate, and you'll
-get a copy.
-
-The moderation package is implemented as a minor mode for summary
-buffers.  Put
-
-@lisp
-(add-hook 'gnus-summary-mode-hook 'gnus-moderate)
-@end lisp
-
-in your @file{.gnus.el} file.
-
-If you are the moderator of @samp{rec.zoofle}, this is how it's
-supposed to work:
-
-@enumerate
-@item
-You split your incoming mail by matching on
-@samp{Newsgroups:.*rec.zoofle}, which will put all the to-be-posted
-articles in some mail group---for instance, @samp{nnml:rec.zoofle}.
-
-@item
-You enter that group once in a while and post articles using the @kbd{e}
-(edit-and-post) or @kbd{s} (just send unedited) commands.
-
-@item
-If, while reading the @samp{rec.zoofle} newsgroup, you happen upon some
-articles that weren't approved by you, you can cancel them with the
-@kbd{c} command.
-@end enumerate
-
-To use moderation mode in these two groups, say:
-
-@lisp
-(setq gnus-moderated-list
-      "^nnml:rec.zoofle$\\|^rec.zoofle$")
-@end lisp
-
-
-@node XEmacs Enhancements
-@section XEmacs Enhancements
-@cindex XEmacs
-
-XEmacs is able to display pictures and stuff, so Gnus has taken
-advantage of that.
-
-@menu
-* Picons::    How to display pictures of what your reading.
-* Smileys::   Show all those happy faces the way they were meant to be shown.
-* Toolbar::   Click'n'drool.
-* XVarious::  Other XEmacsy Gnusey variables.
-@end menu
-
-
-@node Picons
-@subsection Picons
-
-@iftex
-@end iftex
-
-So...  You want to slow down your news reader even more!  This is a
-good way to do so.  Its also a great way to impress people staring
-over your shoulder as you read news.
-
-@menu
-* Picon Basics::           What are picons and How do I get them.
-* Picon Requirements::     Don't go further if you aren't using XEmacs.
-* Easy Picons::            Displaying Picons---the easy way.
-* Hard Picons::            The way you should do it.  You'll learn something.
-* Picon Useless Configuration:: Other variables you can trash/tweak/munge/play with.
-@end menu
-
-
-@node Picon Basics
-@subsubsection Picon Basics
-
-What are Picons?  To quote directly from the Picons Web site:
-
-@iftex
-@end iftex
-
-@quotation
-@dfn{Picons} is short for ``personal icons''.  They're small,
-constrained images used to represent users and domains on the net,
-organized into databases so that the appropriate image for a given
-e-mail address can be found.  Besides users and domains, there are picon
-databases for Usenet newsgroups and weather forecasts.  The picons are
-in either monochrome @code{XBM} format or color @code{XPM} and
-@code{GIF} formats.
-@end quotation
-
-@vindex gnus-picons-piconsearch-url
-If you have a permanent connection to the Internet you can use Steve
-Kinzler's Picons Search engine by setting
-@code{gnus-picons-piconsearch-url} to the string @*
-@file{http://www.cs.indiana.edu/picons/search.html}.
-
-@vindex gnus-picons-database
-Otherwise you need a local copy of his database.  For instructions on
-obtaining and installing the picons databases, point your Web browser at @*
-@file{http://www.cs.indiana.edu/picons/ftp/index.html}.  Gnus expects
-picons to be installed into a location pointed to by
-@code{gnus-picons-database}.
-
-
-@node Picon Requirements
-@subsubsection Picon Requirements
-
-To have Gnus display Picons for you, you must be running XEmacs
-19.13 or greater since all other versions of Emacs aren't yet able to
-display images.
-
-Additionally, you must have @code{x} support compiled into XEmacs.  To
-display color picons which are much nicer than the black & white one,
-you also need one of @code{xpm} or @code{gif} compiled into XEmacs.
-
-@vindex gnus-picons-convert-x-face
-If you want to display faces from @code{X-Face} headers, you should have
-the @code{xface} support compiled into XEmacs.  Otherwise you must have
-the @code{netpbm} utilities installed, or munge the
-@code{gnus-picons-convert-x-face} variable to use something else.
-
-
-@node Easy Picons
-@subsubsection Easy Picons
-
-To enable displaying picons, simply put the following line in your
-@file{~/.gnus} file and start Gnus.
-
-@lisp
-(setq gnus-use-picons t)
-(setq gnus-treat-display-picons t)
-@end lisp
-
-and make sure @code{gnus-picons-database} points to the directory
-containing the Picons databases.
-
-Alternatively if you want to use the web piconsearch engine add this:
-
-@lisp
-(setq gnus-picons-piconsearch-url
-      "http://www.cs.indiana.edu:800/piconsearch")
-@end lisp
-
-
-@node Hard Picons
-@subsubsection Hard Picons
-
-@iftex
-@end iftex
-
-Gnus can display picons for you as you enter and leave groups and
-articles.  It knows how to interact with three sections of the picons
-database.  Namely, it can display the picons newsgroup pictures,
-author's face picture(s), and the authors domain.  To enable this
-feature, you need to select where to get the picons from, and where to
-display them.
-
-@table @code
-
-@item gnus-picons-database
-@vindex gnus-picons-database
-The location of the picons database.  Should point to a directory
-containing the @file{news}, @file{domains}, @file{users} (and so on)
-subdirectories.  This is only useful if
-@code{gnus-picons-piconsearch-url} is @code{nil}.  Defaults to
-@file{/usr/local/faces/}.
-
-@item gnus-picons-piconsearch-url
-@vindex gnus-picons-piconsearch-url
-The URL for the web picons search engine.  The only currently known
-engine is @file{http://www.cs.indiana.edu:800/piconsearch}.  To
-workaround network delays, icons will be fetched in the background.  If
-this is @code{nil} 'the default), then picons are fetched from local
-database indicated by @code{gnus-picons-database}.
-
-@item gnus-picons-display-where
-@vindex gnus-picons-display-where
-Where the picon images should be displayed.  It is @code{picons} by
-default (which by default maps to the buffer @samp{*Picons*}).  Other
-valid places could be @code{article}, @code{summary}, or
-@samp{*scratch*} for all I care.  Just make sure that you've made the
-buffer visible using the standard Gnus window configuration
-routines---@pxref{Windows Configuration}.
-
-@item gnus-picons-group-excluded-groups
-@vindex gnus-picons-group-excluded-groups
-Groups that are matched by this regexp won't have their group icons
-displayed.
-
-@end table
-
-Note: If you set @code{gnus-use-picons} to @code{t}, it will set up your
-window configuration for you to include the @code{picons} buffer.
-
-Now that you've made those decision, you need to add the following
-functions to the appropriate hooks so these pictures will get displayed
-at the right time.
-
-@vindex gnus-picons-display-where
-@table @code
-@item gnus-article-display-picons
-@findex gnus-article-display-picons
-Looks up and displays the picons for the author and the author's domain
-in the @code{gnus-picons-display-where} buffer.
-
-@item gnus-picons-article-display-x-face
-@findex gnus-article-display-picons
-Decodes and displays the X-Face header if present.
-
-@end table
-
-
-
-@node Picon Useless Configuration
-@subsubsection Picon Useless Configuration
-
-@iftex
-@end iftex
-
-The following variables offer further control over how things are
-done, where things are located, and other useless stuff you really
-don't need to worry about.
-
-@table @code
-
-@item gnus-picons-news-directories
-@vindex gnus-picons-news-directories
-List of subdirectories to search in @code{gnus-picons-database} for
-newsgroups faces.  @code{("news")} is the default.
-
-@item gnus-picons-user-directories
-@vindex gnus-picons-user-directories
-List of subdirectories to search in @code{gnus-picons-database} for user
-faces.  @code{("local" "users" "usenix" "misc")} is the default.
-
-@item gnus-picons-domain-directories
-@vindex gnus-picons-domain-directories
-List of subdirectories to search in @code{gnus-picons-database} for
-domain name faces.  Defaults to @code{("domains")}.  Some people may
-want to add @samp{"unknown"} to this list.
-
-@item gnus-picons-convert-x-face
-@vindex gnus-picons-convert-x-face
-If you don't have @code{xface} support builtin XEmacs, this is the
-command to use to convert the @code{X-Face} header to an X bitmap
-(@code{xbm}).  Defaults to @code{(format "@{ echo '/* Width=48,
-Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s"
-gnus-picons-x-face-file-name)}
-
-@item gnus-picons-x-face-file-name
-@vindex gnus-picons-x-face-file-name
-Names a temporary file to store the @code{X-Face} bitmap in.  Defaults
-to @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}.
-
-@item gnus-picons-has-modeline-p
-@vindex gnus-picons-has-modeline-p
-If you have set @code{gnus-picons-display-where} to @code{picons}, your
-XEmacs frame will become really cluttered.  To alleviate this a bit you
-can set @code{gnus-picons-has-modeline-p} to @code{nil}; this will
-remove the mode line from the Picons buffer.  This is only useful if
-@code{gnus-picons-display-where} is @code{picons}.
-
-@item gnus-picons-refresh-before-display
-@vindex gnus-picons-refresh-before-display
-If non-nil, display the article buffer before computing the picons.
-Defaults to @code{nil}.
-
-@item gnus-picons-display-as-address
-@vindex gnus-picons-display-as-address
-If @code{t} display textual email addresses along with pictures.
-Defaults to @code{t}.
-
-@item gnus-picons-file-suffixes
-@vindex gnus-picons-file-suffixes
-Ordered list of suffixes on picon file names to try.  Defaults to
-@code{("xpm" "gif" "xbm")} minus those not builtin your XEmacs.
-
-@item gnus-picons-setup-hook
-@vindex gnus-picons-setup-hook
-Hook run in the picon buffer, if that is displayed.
-
-@item gnus-picons-display-article-move-p
-@vindex gnus-picons-display-article-move-p
-Whether to move point to first empty line when displaying picons.  This
-has only an effect if `gnus-picons-display-where' has value `article'.
-
-If @code{nil}, display the picons in the @code{From} and
-@code{Newsgroups} lines.  This is the defailt.
-
-@item gnus-picons-clear-cache-on-shutdown
-@vindex gnus-picons-clear-cache-on-shutdown
-Whether to clear the picons cache when exiting gnus.  Gnus caches every
-picons it finds while it is running.  This saves some time in the search
-process but eats some memory.  If this variable is set to @code{nil},
-Gnus will never clear the cache itself; you will have to manually call
-@code{gnus-picons-clear-cache} to clear it.  Otherwise the cache will be
-cleared every time you exit Gnus.  Defaults to @code{t}.
-
-@iftex
-@end iftex
-
-@end table
-
-@node Smileys
-@subsection Smileys
-@cindex smileys
-
-@iftex
-@end iftex
-
-@dfn{Smiley} is a package separate from Gnus, but since Gnus is
-currently the only package that uses Smiley, it is documented here.
-
-In short---to use Smiley in Gnus, put the following in your
-@file{.gnus.el} file:
-
-@lisp
-(setq gnus-treat-display-smiley t)
-@end lisp
-
-Smiley maps text smiley faces---@samp{:-)}, @samp{:-=}, @samp{:-(} and
-the like---to pictures and displays those instead of the text smiley
-faces.  The conversion is controlled by a list of regexps that matches
-text and maps that to file names.
-
-@vindex smiley-nosey-regexp-alist
-@vindex smiley-deformed-regexp-alist
-Smiley supplies two example conversion alists by default:
-@code{smiley-deformed-regexp-alist} (which matches @samp{:)}, @samp{:(}
-and so on), and @code{smiley-nosey-regexp-alist} (which matches
-@samp{:-)}, @samp{:-(} and so on).
-
-The alist used is specified by the @code{smiley-regexp-alist} variable,
-which defaults to the value of @code{smiley-deformed-regexp-alist}.
-
-The first item in each element is the regexp to be matched; the second
-element is the regexp match group that is to be replaced by the picture;
-and the third element is the name of the file to be displayed.
-
-The following variables customize where Smiley will look for these
-files, as well as the color to be used and stuff:
-
-@table @code
-
-@item smiley-data-directory
-@vindex smiley-data-directory
-Where Smiley will look for smiley faces files.
-
-@item smiley-flesh-color
-@vindex smiley-flesh-color
-Skin color.  The default is @samp{yellow}, which is really racist.
-
-@item smiley-features-color
-@vindex smiley-features-color
-Color of the features of the face.  The default is @samp{black}.
-
-@item smiley-tongue-color
-@vindex smiley-tongue-color
-Color of the tongue.  The default is @samp{red}.
-
-@item smiley-circle-color
-@vindex smiley-circle-color
-Color of the circle around the face.  The default is @samp{black}.
-
-@item smiley-mouse-face
-@vindex smiley-mouse-face
-Face used for mouse highlighting over the smiley face.
-
-@end table
-
-
-@node Toolbar
-@subsection Toolbar
-
-@table @code
-
-@iftex
-@end iftex
-
-@item gnus-use-toolbar
-@vindex gnus-use-toolbar
-If @code{nil}, don't display toolbars.  If non-@code{nil}, it should be
-one of @code{default-toolbar}, @code{top-toolbar}, @code{bottom-toolbar},
-@code{right-toolbar}, or @code{left-toolbar}.
-
-@item gnus-group-toolbar
-@vindex gnus-group-toolbar
-The toolbar in the group buffer.
-
-@item gnus-summary-toolbar
-@vindex gnus-summary-toolbar
-The toolbar in the summary buffer.
-
-@item gnus-summary-mail-toolbar
-@vindex gnus-summary-mail-toolbar
-The toolbar in the summary buffer of mail groups.
-
-@end table
-
-
-@node XVarious
-@subsection Various XEmacs Variables
-
-@table @code
-@item gnus-xmas-glyph-directory
-@vindex gnus-xmas-glyph-directory
-This is where Gnus will look for pictures.  Gnus will normally
-auto-detect this directory, but you may set it manually if you have an
-unusual directory structure.
-
-@item gnus-xmas-logo-color-alist
-@vindex gnus-xmas-logo-color-alist
-This is an alist where the key is a type symbol and the values are the
-foreground and background color of the splash page glyph.
-
-@item gnus-xmas-logo-color-style
-@vindex gnus-xmas-logo-color-style
-This is the key used to look up the color in the alist described above.
-Valid values include @code{flame}, @code{pine}, @code{moss},
-@code{irish}, @code{sky}, @code{tin}, @code{velvet}, @code{grape},
-@code{labia}, @code{berry}, @code{neutral}, and @code{september}.
-
-@item gnus-xmas-modeline-glyph
-@vindex gnus-xmas-modeline-glyph
-A glyph displayed in all Gnus mode lines.  It is a tiny gnu head by
-default.
-
-@iftex
-@end iftex
-
-@end table
-
-
-
-
-@node Fuzzy Matching
-@section Fuzzy Matching
-@cindex fuzzy matching
-
-Gnus provides @dfn{fuzzy matching} of @code{Subject} lines when doing
-things like scoring, thread gathering and thread comparison.
-
-As opposed to regular expression matching, fuzzy matching is very fuzzy.
-It's so fuzzy that there's not even a definition of what @dfn{fuzziness}
-means, and the implementation has changed over time.
-
-Basically, it tries to remove all noise from lines before comparing.
-@samp{Re: }, parenthetical remarks, white space, and so on, are filtered
-out of the strings before comparing the results.  This often leads to
-adequate results---even when faced with strings generated by text
-manglers masquerading as newsreaders.
-
-
-@node Thwarting Email Spam
-@section Thwarting Email Spam
-@cindex email spam
-@cindex spam
-@cindex UCE
-@cindex unsolicited commercial email
-
-In these last days of the Usenet, commercial vultures are hanging about
-and grepping through news like crazy to find email addresses they can
-foist off their scams and products to.  As a reaction to this, many
-people have started putting nonsense addresses into their @code{From}
-lines.  I think this is counterproductive---it makes it difficult for
-people to send you legitimate mail in response to things you write, as
-well as making it difficult to see who wrote what.  This rewriting may
-perhaps be a bigger menace than the unsolicited commercial email itself
-in the end.
-
-The biggest problem I have with email spam is that it comes in under
-false pretenses.  I press @kbd{g} and Gnus merrily informs me that I
-have 10 new emails.  I say ``Golly gee!  Happy is me!'' and select the
-mail group, only to find two pyramid schemes, seven advertisements
-(``New!  Miracle tonic for growing full, lustrous hair on your toes!'')
-and one mail asking me to repent and find some god.
-
-This is annoying.
-
-The way to deal with this is having Gnus split out all spam into a
-@samp{spam} mail group (@pxref{Splitting Mail}).
-
-First, pick one (1) valid mail address that you can be reached at, and
-put it in your @code{From} header of all your news articles.  (I've
-chosen @samp{larsi@@trym.ifi.uio.no}, but for many addresses on the form
-@samp{larsi+usenet@@ifi.uio.no} will be a better choice.  Ask your
-sysadm whether your sendmail installation accepts keywords in the local
-part of the mail address.)
-
-@lisp
-(setq message-default-news-headers
-      "From: Lars Magne Ingebrigtsen <larsi@@trym.ifi.uio.no>\n")
-@end lisp
-
-Then put the following split rule in @code{nnmail-split-fancy}
-(@pxref{Fancy Mail Splitting}):
-
-@lisp
-(
- ...
- (to "larsi@@trym.ifi.uio.no"
-      (| ("subject" "re:.*" "misc")
-         ("references" ".*@@.*" "misc")
-         "spam"))
- ...
-)
-@end lisp
-
-This says that all mail to this address is suspect, but if it has a
-@code{Subject} that starts with a @samp{Re:} or has a @code{References}
-header, it's probably ok.  All the rest goes to the @samp{spam} group.
-(This idea probably comes from Tim Pierce.)
-
-In addition, many mail spammers talk directly to your @code{smtp} server
-and do not include your email address explicitly in the @code{To}
-header.  Why they do this is unknown---perhaps it's to thwart this
-thwarting scheme?  In any case, this is trivial to deal with---you just
-put anything not addressed to you in the @samp{spam} group by ending
-your fancy split rule in this way:
-
-@lisp
-(
- ...
- (to "larsi" "misc")
- "spam")
-@end lisp
-
-In my experience, this will sort virtually everything into the right
-group.  You still have to check the @samp{spam} group from time to time to
-check for legitimate mail, though.  If you feel like being a good net
-citizen, you can even send off complaints to the proper authorities on
-each unsolicited commercial email---at your leisure.
-
-If you are also a lazy net citizen, you will probably prefer complaining
-automatically with the @file{gnus-junk.el} package, available FOR FREE
-at @* @file{<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html>}.
-Since most e-mail spam is sent automatically, this may reconcile the
-cosmic balance somewhat.
-
-This works for me.  It allows people an easy way to contact me (they can
-just press @kbd{r} in the usual way), and I'm not bothered at all with
-spam.  It's a win-win situation.  Forging @code{From} headers to point
-to non-existent domains is yucky, in my opinion.
-
-
-@node Various Various
-@section Various Various
-@cindex mode lines
-@cindex highlights
-
-@table @code
-
-@item gnus-home-directory
-All Gnus path variables will be initialized from this variable, which
-defaults to @file{~/}.
-
-@item gnus-directory
-@vindex gnus-directory
-Most Gnus storage path variables will be initialized from this variable,
-which defaults to the @samp{SAVEDIR} environment variable, or
-@file{~/News/} if that variable isn't set.
-
-Note that Gnus is mostly loaded when the @file{.gnus.el} file is read.
-This means that other directory variables that are initialized from this
-variable won't be set properly if you set this variable in
-@file{.gnus.el}.  Set this variable in @file{.emacs} instead.
-
-@item gnus-default-directory
-@vindex gnus-default-directory
-Not related to the above variable at all---this variable says what the
-default directory of all Gnus buffers should be.  If you issue commands
-like @kbd{C-x C-f}, the prompt you'll get starts in the current buffer's
-default directory.  If this variable is @code{nil} (which is the
-default), the default directory will be the default directory of the
-buffer you were in when you started Gnus.
-
-@item gnus-verbose
-@vindex gnus-verbose
-This variable is an integer between zero and ten.  The higher the value,
-the more messages will be displayed.  If this variable is zero, Gnus
-will never flash any messages, if it is seven (which is the default),
-most important messages will be shown, and if it is ten, Gnus won't ever
-shut up, but will flash so many messages it will make your head swim.
-
-@item gnus-verbose-backends
-@vindex gnus-verbose-backends
-This variable works the same way as @code{gnus-verbose}, but it applies
-to the Gnus backends instead of Gnus proper.
-
-@item nnheader-max-head-length
-@vindex nnheader-max-head-length
-When the backends read straight heads of articles, they all try to read
-as little as possible.  This variable (default 4096) specifies
-the absolute max length the backends will try to read before giving up
-on finding a separator line between the head and the body.  If this
-variable is @code{nil}, there is no upper read bound.  If it is
-@code{t}, the backends won't try to read the articles piece by piece,
-but read the entire articles.  This makes sense with some versions of
-@code{ange-ftp} or @code{efs}.
-
-@item nnheader-head-chop-length
-@vindex nnheader-head-chop-length
-This variable (default 2048) says how big a piece of each article to
-read when doing the operation described above.
-
-@item nnheader-file-name-translation-alist
-@vindex nnheader-file-name-translation-alist
-@cindex file names
-@cindex invalid characters in file names
-@cindex characters in file names
-This is an alist that says how to translate characters in file names.
-For instance, if @samp{:} is invalid as a file character in file names
-on your system (you OS/2 user you), you could say something like:
-
-@lisp
-(setq nnheader-file-name-translation-alist
-      '((?: . ?_)))
-@end lisp
-
-In fact, this is the default value for this variable on OS/2 and MS
-Windows (phooey) systems.
-
-@item gnus-hidden-properties
-@vindex gnus-hidden-properties
-This is a list of properties to use to hide ``invisible'' text.  It is
-@code{(invisible t intangible t)} by default on most systems, which
-makes invisible text invisible and intangible.
-
-@item gnus-parse-headers-hook
-@vindex gnus-parse-headers-hook
-A hook called before parsing headers.  It can be used, for instance, to
-gather statistics on the headers fetched, or perhaps you'd like to prune
-some headers.  I don't see why you'd want that, though.
-
-@item gnus-shell-command-separator
-@vindex gnus-shell-command-separator
-String used to separate two shell commands.  The default is @samp{;}.
-
-
-@end table
-
-
-@node The End
-@chapter The End
-
-Well, that's the manual---you can get on with your life now.  Keep in
-touch.  Say hello to your cats from me.
-
-My @strong{ghod}---I just can't stand goodbyes.  Sniffle.
-
-Ol' Charles Reznikoff said it pretty well, so I leave the floor to him:
-
-@quotation
-@strong{Te Deum}
-
-@sp 1
-Not because of victories @*
-I sing,@*
-having none,@*
-but for the common sunshine,@*
-the breeze,@*
-the largess of the spring.
-
-@sp 1
-Not for victory@*
-but for the day's work done@*
-as well as I was able;@*
-not for a seat upon the dais@*
-but at the common table.@*
-@end quotation
-
-
-@node Appendices
-@chapter Appendices
-
-@menu
-* History::                        How Gnus got where it is today.
-* Terminology::                    We use really difficult, like, words here.
-* Customization::                  Tailoring Gnus to your needs.
-* Troubleshooting::                What you might try if things do not work.
-* Gnus Reference Guide::           Rilly, rilly technical stuff.
-* Emacs for Heathens::             A short introduction to Emacsian terms.
-* Frequently Asked Questions::     A question-and-answer session.
-@end menu
-
-
-@node History
-@section History
-
-@cindex history
-@sc{gnus} was written by Masanobu @sc{Umeda}.  When autumn crept up in
-'94, Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.
-
-If you want to investigate the person responsible for this outrage, you
-can point your (feh!) web browser to
-@file{http://www.stud.ifi.uio.no/~larsi/}.  This is also the primary
-distribution point for the new and spiffy versions of Gnus, and is known
-as The Site That Destroys Newsrcs And Drives People Mad.
-
-During the first extended alpha period of development, the new Gnus was
-called ``(ding) Gnus''.  @dfn{(ding)} is, of course, short for
-@dfn{ding is not Gnus}, which is a total and utter lie, but who cares?
-(Besides, the ``Gnus'' in this abbreviation should probably be
-pronounced ``news'' as @sc{Umeda} intended, which makes it a more
-appropriate name, don't you think?)
-
-In any case, after spending all that energy on coming up with a new and
-spunky name, we decided that the name was @emph{too} spunky, so we
-renamed it back again to ``Gnus''.  But in mixed case.  ``Gnus'' vs.
-``@sc{gnus}''.  New vs. old.
-
-The first ``proper'' release of Gnus 5 was done in November 1995 when it
-was included in the Emacs 19.30 distribution (132 (ding) Gnus releases
-plus 15 Gnus 5.0 releases).
-
-In May 1996 the next Gnus generation (aka. ``September Gnus'' (after 99
-releases)) was released under the name ``Gnus 5.2'' (40 releases).
-
-On July 28th 1996 work on Red Gnus was begun, and it was released on
-January 25th 1997 (after 84 releases) as ``Gnus 5.4'' (67 releases).
-
-On September 13th 1997, Quassia Gnus was started and lasted 37
-releases.  If was released as ``Gnus 5.6 on March 8th 1998.
-
-If you happen upon a version of Gnus that has a prefixed name --
-``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' --
-don't panic.  Don't let it know that you're frightened.  Back away.
-Slowly.  Whatever you do, don't run.  Walk away, calmly, until you're
-out of its reach.  Find a proper released version of Gnus and snuggle up
-to that instead.
-
-@menu
-* Why?::                What's the point of Gnus?
-* Compatibility::       Just how compatible is Gnus with @sc{gnus}?
-* Conformity::          Gnus tries to conform to all standards.
-* Emacsen::             Gnus can be run on a few modern Emacsen.
-* Gnus Development::    How Gnus is developed.
-* Contributors::        Oodles of people.
-* New Features::        Pointers to some of the new stuff in Gnus.
-* Newest Features::     Features so new that they haven't been written yet.
-@end menu
-
-
-@node Why?
-@subsection Why?
-
-What's the point of Gnus?
-
-I want to provide a ``rad'', ``happening'', ``way cool'' and ``hep''
-newsreader, that lets you do anything you can think of.  That was my
-original motivation, but while working on Gnus, it has become clear to
-me that this generation of newsreaders really belong in the stone age.
-Newsreaders haven't developed much since the infancy of the net.  If the
-volume continues to rise with the current rate of increase, all current
-newsreaders will be pretty much useless.  How do you deal with
-newsgroups that have thousands of new articles each day?  How do you
-keep track of millions of people who post?
-
-Gnus offers no real solutions to these questions, but I would very much
-like to see Gnus being used as a testing ground for new methods of
-reading and fetching news.  Expanding on @sc{Umeda}-san's wise decision
-to separate the newsreader from the backends, Gnus now offers a simple
-interface for anybody who wants to write new backends for fetching mail
-and news from different sources.  I have added hooks for customizations
-everywhere I could imagine it being useful.  By doing so, I'm inviting
-every one of you to explore and invent.
-
-May Gnus never be complete. @kbd{C-u 100 M-x all-hail-emacs} and
-@kbd{C-u 100 M-x all-hail-xemacs}.
-
-
-@node Compatibility
-@subsection Compatibility
-
-@cindex compatibility
-Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
-bindings have been kept.  More key bindings have been added, of course,
-but only in one or two obscure cases have old bindings been changed.
-
-Our motto is:
-@quotation
-@cartouche
-@center In a cloud bones of steel.
-@end cartouche
-@end quotation
-
-All commands have kept their names.  Some internal functions have changed
-their names.
-
-The @code{gnus-uu} package has changed drastically. @xref{Decoding
-Articles}.
-
-One major compatibility question is the presence of several summary
-buffers.  All variables relevant while reading a group are
-buffer-local to the summary buffer they belong in.  Although many
-important variables have their values copied into their global
-counterparts whenever a command is executed in the summary buffer, this
-change might lead to incorrect values being used unless you are careful.
-
-All code that relies on knowledge of @sc{gnus} internals will probably
-fail.  To take two examples: Sorting @code{gnus-newsrc-alist} (or
-changing it in any way, as a matter of fact) is strictly verboten.  Gnus
-maintains a hash table that points to the entries in this alist (which
-speeds up many functions), and changing the alist directly will lead to
-peculiar results.
-
-@cindex hilit19
-@cindex highlighting
-Old hilit19 code does not work at all.  In fact, you should probably
-remove all hilit code from all Gnus hooks
-(@code{gnus-group-prepare-hook} and @code{gnus-summary-prepare-hook}).
-Gnus provides various integrated functions for highlighting.  These are
-faster and more accurate.  To make life easier for everybody, Gnus will
-by default remove all hilit calls from all hilit hooks.  Uncleanliness!
-Away!
-
-Packages like @code{expire-kill} will no longer work.  As a matter of
-fact, you should probably remove all old @sc{gnus} packages (and other
-code) when you start using Gnus.  More likely than not, Gnus already
-does what you have written code to make @sc{gnus} do.  (Snicker.)
-
-Even though old methods of doing things are still supported, only the
-new methods are documented in this manual.  If you detect a new method of
-doing something while reading this manual, that does not mean you have
-to stop doing it the old way.
-
-Gnus understands all @sc{gnus} startup files.
-
-@kindex M-x gnus-bug
-@findex gnus-bug
-@cindex reporting bugs
-@cindex bugs
-Overall, a casual user who hasn't written much code that depends on
-@sc{gnus} internals should suffer no problems.  If problems occur,
-please let me know by issuing that magic command @kbd{M-x gnus-bug}.
-
-@vindex gnus-bug-create-help-buffer
-If you are in the habit of sending bug reports @emph{very} often, you
-may find the helpful help buffer annoying after a while.  If so, set
-@code{gnus-bug-create-help-buffer} to @code{nil} to avoid having it pop
-up at you.
-
-
-@node Conformity
-@subsection Conformity
-
-No rebels without a clue here, ma'am.  We conform to all standards known
-to (wo)man.  Except for those standards and/or conventions we disagree
-with, of course.
-
-@table @strong
-
-@item RFC 822
-@cindex RFC 822
-There are no known breaches of this standard.
-
-@item RFC 1036
-@cindex RFC 1036
-There are no known breaches of this standard, either.
-
-@item Son-of-RFC 1036
-@cindex Son-of-RFC 1036
-We do have some breaches to this one.
-
-@table @emph
-
-@item X-Newsreader
-@itemx User-Agent
-These are considered to be ``vanity headers'', while I consider them
-to be consumer information.  After seeing so many badly formatted
-articles coming from @code{tin} and @code{Netscape} I know not to use
-either of those for posting articles.  I would not have known that if
-it wasn't for the @code{X-Newsreader} header.
-@end table
-
-@item USEFOR
-@cindex USEFOR
-USEFOR is an IETF working group writing a successor to RFC 1036, based
-on Son-of-RFC 1036.  They have produced a number of drafts proposing
-various changes to the format of news articles.  The Gnus towers will
-look into implementing the changes when the draft is accepted as an RFC.
-
-@end table
-
-If you ever notice Gnus acting non-compliant with regards to the texts
-mentioned above, don't hesitate to drop a note to Gnus Towers and let us
-know.
-
-
-@node Emacsen
-@subsection Emacsen
-@cindex Emacsen
-@cindex XEmacs
-@cindex Mule
-@cindex Emacs
-
-Gnus should work on :
-
-@itemize @bullet
-
-@item
-Emacs 20.3 and up.
-
-@item
-XEmacs 20.4 and up.
-
-@end itemize
-
-This Gnus version will absolutely not work on any Emacsen older than
-that.  Not reliably, at least.  Older versions of Gnus may work on older
-Emacs versions.
-
-There are some vague differences between Gnus on the various
-platforms---XEmacs features more graphics (a logo and a toolbar)---but
-other than that, things should look pretty much the same under all
-Emacsen.
-
-
-@node Gnus Development
-@subsection Gnus Development
-
-Gnus is developed in a two-phased cycle.  The first phase involves much
-discussion on the @samp{ding@@gnus.org} mailing list, where people
-propose changes and new features, post patches and new backends.  This
-phase is called the @dfn{alpha} phase, since the Gnusae released in this
-phase are @dfn{alpha releases}, or (perhaps more commonly in other
-circles) @dfn{snapshots}.  During this phase, Gnus is assumed to be
-unstable and should not be used by casual users.  Gnus alpha releases
-have names like ``Red Gnus'' and ``Quassia Gnus''.
-
-After futzing around for 50-100 alpha releases, Gnus is declared
-@dfn{frozen}, and only bug fixes are applied.  Gnus loses the prefix,
-and is called things like ``Gnus 5.6.32'' instead.  Normal people are
-supposed to be able to use these, and these are mostly discussed on the
-@samp{gnu.emacs.gnus} newsgroup.
-
-@cindex Incoming*
-@vindex nnmail-delete-incoming
-Some variable defaults differ between alpha Gnusae and released Gnusae.
-In particular, @code{nnmail-delete-incoming} defaults to @code{nil} in
-alpha Gnusae and @code{t} in released Gnusae.  This is to prevent
-lossage of mail if an alpha release hiccups while handling the mail.
-
-The division of discussion between the ding mailing list and the Gnus
-newsgroup is not purely based on publicity concerns.  It's true that
-having people write about the horrible things that an alpha Gnus release
-can do (sometimes) in a public forum may scare people off, but more
-importantly, talking about new experimental features that have been
-introduced may confuse casual users.  New features are frequently
-introduced, fiddled with, and judged to be found wanting, and then
-either discarded or totally rewritten.  People reading the mailing list
-usually keep up with these rapid changes, whille people on the newsgroup
-can't be assumed to do so.
-
-
-
-@node Contributors
-@subsection Contributors
-@cindex contributors
-
-The new Gnus version couldn't have been done without the help of all the
-people on the (ding) mailing list.  Every day for over a year I have
-gotten billions of nice bug reports from them, filling me with joy,
-every single one of them.  Smooches.  The people on the list have been
-tried beyond endurance, what with my ``oh, that's a neat idea <type
-type>, yup, I'll release it right away <ship off> no wait, that doesn't
-work at all <type type>, yup, I'll ship that one off right away <ship
-off> no, wait, that absolutely does not work'' policy for releases.
-Micro$oft---bah.  Amateurs.  I'm @emph{much} worse.  (Or is that
-``worser''? ``much worser''?  ``worsest''?)
-
-I would like to take this opportunity to thank the Academy for...  oops,
-wrong show.
-
-@itemize @bullet
-
-@item
-Masanobu @sc{Umeda}---the writer of the original @sc{gnus}.
-
-@item
-Per Abrahamsen---custom, scoring, highlighting and @sc{soup} code (as
-well as numerous other things).
-
-@item
-Luis Fernandes---design and graphics.
-
-@item
-Erik Naggum---help, ideas, support, code and stuff.
-
-@item
-Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el and many other things
-connected with @sc{mime} and other types of en/decoding.
-
-@item
-Wes Hardaker---@file{gnus-picon.el} and the manual section on
-@dfn{picons} (@pxref{Picons}).
-
-@item
-Kim-Minh Kaplan---further work on the picon code.
-
-@item
-Brad Miller---@file{gnus-gl.el} and the GroupLens manual section
-(@pxref{GroupLens}).
-
-@item
-Sudish Joseph---innumerable bug fixes.
-
-@item
-Ilja Weis---@file{gnus-topic.el}.
-
-@item
-Steven L. Baur---lots and lots and lots of bugs detections and fixes.
-
-@item
-Vladimir Alexiev---the refcard and reference booklets.
-
-@item
-Felix Lee & Jamie Zawinski---I stole some pieces from the XGnus
-distribution by Felix Lee and JWZ.
-
-@item
-Scott Byer---@file{nnfolder.el} enhancements & rewrite.
-
-@item
-Peter Mutsaers---orphan article scoring code.
-
-@item
-Ken Raeburn---POP mail support.
-
-@item
-Hallvard B Furuseth---various bits and pieces, especially dealing with
-.newsrc files.
-
-@item
-Brian Edmonds---@file{gnus-bbdb.el}.
-
-@item
-David Moore---rewrite of @file{nnvirtual.el} and many other things.
-
-@item
-Kevin Davidson---came up with the name @dfn{ding}, so blame him.
-
-@item
-François Pinard---many, many interesting and thorough bug reports, as
-well as autoconf support.
-
-@end itemize
-
-This manual was proof-read by Adrian Aichner, with Ricardo Nassif, Mark
-Borges, and Jost Krieger proof-reading parts of the manual.
-
-The following people have contributed many patches and suggestions:
-
-Christopher Davis,
-Andrew Eskilsson,
-Kai Grossjohann,
-David KÃ¥gedal,
-Richard Pieri,
-Fabrice Popineau,
-Daniel Quinlan,
-Jason L. Tibbitts, III,
-and
-Jack Vinson.
-
-Also thanks to the following for patches and stuff:
-
-Jari Aalto,
-Adrian Aichner,
-Vladimir Alexiev,
-Russ Allbery,
-Peter Arius,
-Matt Armstrong,
-Marc Auslander,
-Miles Bader,
-Alexei V. Barantsev,
-Frank Bennett,
-Robert Bihlmeyer,
-Chris Bone,
-Mark Borges,
-Mark Boyns,
-Lance A. Brown,
-Rob Browning,
-Kees de Bruin,
-Martin Buchholz,
-Joe Buehler,
-Kevin Buhr,
-Alastair Burt,
-Joao Cachopo,
-Zlatko Calusic,
-Massimo Campostrini,
-Castor,
-David Charlap,
-Dan Christensen,
-Kevin Christian,
-Jae-you Chung, @c ?
-James H. Cloos, Jr.,
-Laura Conrad,
-Michael R. Cook,
-Glenn Coombs,
-Andrew J. Cosgriff,
-Neil Crellin,
-Frank D. Cringle,
-Geoffrey T. Dairiki,
-Andre Deparade,
-Ulrik Dickow,
-Dave Disser,
-Rui-Tao Dong, @c ?
-Joev Dubach,
-Michael Welsh Duggan,
-Dave Edmondson,
-Paul Eggert,
-Mark W. Eichin,
-Karl Eichwalder,
-Enami Tsugutomo, @c Enami
-Michael Ernst,
-Luc Van Eycken,
-Sam Falkner,
-Nelson Jose dos Santos Ferreira,
-Sigbjorn Finne,
-Sven Fischer,
-Paul Fisher,
-Decklin Foster,
-Gary D. Foster,
-Paul Franklin,
-Guy Geens,
-Arne Georg Gleditsch,
-David S. Goldberg,
-Michelangelo Grigni,
-Dale Hagglund,
-D. Hall,
-Magnus Hammerin,
-Kenichi Handa, @c Handa
-Raja R. Harinath,
-Yoshiki Hayashi, @c ?
-P. E. Jareth Hein,
-Hisashige Kenji, @c Hisashige
-Scott Hofmann,
-Marc Horowitz,
-Gunnar Horrigmo,
-Richard Hoskins,
-Brad Howes,
-Miguel de Icaza,
-François Felix Ingrand,
-Tatsuya Ichikawa, @c ?
-Ishikawa Ichiro, @c Ishikawa
-Lee Iverson,
-Iwamuro Motonori, @c Iwamuro
-Rajappa Iyer,
-Andreas Jaeger,
-Adam P. Jenkins,
-Randell Jesup,
-Fred Johansen,
-Gareth Jones,
-Simon Josefsson,
-Greg Klanderman,
-Karl Kleinpaste,
-Michael Klingbeil,
-Peter Skov Knudsen,
-Shuhei Kobayashi, @c Kobayashi
-Petr Konecny,
-Koseki Yoshinori, @c Koseki
-Thor Kristoffersen,
-Jens Lautenbacher,
-Martin Larose,
-Seokchan Lee, @c Lee
-Joerg Lenneis,
-Carsten Leonhardt,
-James LewisMoss,
-Christian Limpach,
-Markus Linnala,
-Dave Love,
-Mike McEwan,
-Tonny Madsen,
-Shlomo Mahlab,
-Nat Makarevitch,
-Istvan Marko,
-David Martin,
-Jason R. Mastaler,
-Gordon Matzigkeit,
-Timo Metzemakers,
-Richard Mlynarik,
-Lantz Moore,
-Morioka Tomohiko, @c Morioka
-Erik Toubro Nielsen,
-Hrvoje Niksic,
-Andy Norman,
-Fred Oberhauser,
-C. R. Oldham,
-Alexandre Oliva,
-Ken Olstad,
-Masaharu Onishi, @c Onishi
-Hideki Ono, @c Ono
-Ettore Perazzoli,
-William Perry,
-Stephen Peters,
-Jens-Ulrik Holger Petersen,
-Ulrich Pfeifer,
-Matt Pharr,
-Andy Piper,
-John McClary Prevost,
-Bill Pringlemeir,
-Mike Pullen,
-Jim Radford,
-Colin Rafferty,
-Lasse Rasinen,
-Lars Balker Rasmussen,
-Joe Reiss,
-Renaud Rioboo,
-Roland B. Roberts,
-Bart Robinson,
-Christian von Roques,
-Markus Rost,
-Jason Rumney,
-Wolfgang Rupprecht,
-Jay Sachs,
-Dewey M. Sasser,
-Conrad Sauerwald,
-Loren Schall,
-Dan Schmidt,
-Ralph Schleicher,
-Philippe Schnoebelen,
-Andreas Schwab,
-Randal L. Schwartz,
-Justin Sheehy,
-Danny Siu,
-Matt Simmons,
-Paul D. Smith,
-Jeff Sparkes,
-Toby Speight,
-Michael Sperber,
-Darren Stalder,
-Richard Stallman,
-Greg Stark,
-Sam Steingold,
-Paul Stevenson,
-Jonas Steverud,
-Paul Stodghill,
-Kiyokazu Suto, @c Suto
-Kurt Swanson,
-Samuel Tardieu,
-Teddy,
-Chuck Thompson,
-Tozawa Akihiko, @c Tozawa
-Philippe Troin,
-James Troup,
-Trung Tran-Duc,
-Jack Twilley,
-Aaron M. Ucko,
-Aki Vehtari,
-Didier Verna,
-Vladimir Volovich,
-Jan Vroonhof,
-Stefan Waldherr,
-Pete Ware,
-Barry A. Warsaw,
-Christoph Wedler,
-Joe Wells,
-Lee Willis,
-Katsumi Yamaoka @c Yamaoka
-and
-Lloyd Zusman.
-
-
-For a full overview of what each person has done, the ChangeLogs
-included in the Gnus alpha distributions should give ample reading
-(550kB and counting).
-
-Apologies to everybody that I've forgotten, of which there are many, I'm
-sure.
-
-Gee, that's quite a list of people.  I guess that must mean that there
-actually are people who are using Gnus.  Who'd'a thunk it!
-
-
-@node New Features
-@subsection New Features
-@cindex new features
-
-@menu
-* ding Gnus::          New things in Gnus 5.0/5.1, the first new Gnus.
-* September Gnus::     The Thing Formally Known As Gnus 5.3/5.3.
-* Red Gnus::           Third time best---Gnus 5.4/5.5.
-* Quassia Gnus::       Two times two is four, or Gnus 5.6/5.7.
-@end menu
-
-These lists are, of course, just @emph{short} overviews of the
-@emph{most} important new features.  No, really.  There are tons more.
-Yes, we have feeping creaturism in full effect.
-
-
-@node ding Gnus
-@subsubsection (ding) Gnus
-
-New features in Gnus 5.0/5.1:
-
-@itemize @bullet
-
-@item
-The look of all buffers can be changed by setting format-like variables
-(@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}).
-
-@item
-Local spool and several @sc{nntp} servers can be used at once
-(@pxref{Select Methods}).
-
-@item
-You can combine groups into virtual groups (@pxref{Virtual Groups}).
-
-@item
-You can read a number of different mail formats (@pxref{Getting Mail}).
-All the mail backends implement a convenient mail expiry scheme
-(@pxref{Expiring Mail}).
-
-@item
-Gnus can use various strategies for gathering threads that have lost
-their roots (thereby gathering loose sub-threads into one thread) or it
-can go back and retrieve enough headers to build a complete thread
-(@pxref{Customizing Threading}).
-
-@item
-Killed groups can be displayed in the group buffer, and you can read
-them as well (@pxref{Listing Groups}).
-
-@item
-Gnus can do partial group updates---you do not have to retrieve the
-entire active file just to check for new articles in a few groups
-(@pxref{The Active File}).
-
-@item
-Gnus implements a sliding scale of subscribedness to groups
-(@pxref{Group Levels}).
-
-@item
-You can score articles according to any number of criteria
-(@pxref{Scoring}).  You can even get Gnus to find out how to score
-articles for you (@pxref{Adaptive Scoring}).
-
-@item
-Gnus maintains a dribble buffer that is auto-saved the normal Emacs
-manner, so it should be difficult to lose much data on what you have
-read if your machine should go down (@pxref{Auto Save}).
-
-@item
-Gnus now has its own startup file (@file{.gnus}) to avoid cluttering up
-the @file{.emacs} file.
-
-@item
-You can set the process mark on both groups and articles and perform
-operations on all the marked items (@pxref{Process/Prefix}).
-
-@item
-You can grep through a subset of groups and create a group from the
-results (@pxref{Kibozed Groups}).
-
-@item
-You can list subsets of groups according to, well, anything
-(@pxref{Listing Groups}).
-
-@item
-You can browse foreign servers and subscribe to groups from those
-servers (@pxref{Browse Foreign Server}).
-
-@item
-Gnus can fetch articles, asynchronously, on a second connection to the
-server (@pxref{Asynchronous Fetching}).
-
-@item
-You can cache articles locally (@pxref{Article Caching}).
-
-@item
-The uudecode functions have been expanded and generalized
-(@pxref{Decoding Articles}).
-
-@item
-You can still post uuencoded articles, which was a little-known feature
-of @sc{gnus}' past (@pxref{Uuencoding and Posting}).
-
-@item
-Fetching parents (and other articles) now actually works without
-glitches (@pxref{Finding the Parent}).
-
-@item
-Gnus can fetch FAQs and group descriptions (@pxref{Group Information}).
-
-@item
-Digests (and other files) can be used as the basis for groups
-(@pxref{Document Groups}).
-
-@item
-Articles can be highlighted and customized (@pxref{Customizing
-Articles}).
-
-@item
-URLs and other external references can be buttonized (@pxref{Article
-Buttons}).
-
-@item
-You can do lots of strange stuff with the Gnus window & frame
-configuration (@pxref{Windows Configuration}).
-
-@item
-You can click on buttons instead of using the keyboard
-(@pxref{Buttons}).
-
-@end itemize
-
-
-@node September Gnus
-@subsubsection September Gnus
-
-@iftex
-@end iftex
-
-New features in Gnus 5.2/5.3:
-
-@itemize @bullet
-
-@item
-A new message composition mode is used.  All old customization variables
-for @code{mail-mode}, @code{rnews-reply-mode} and @code{gnus-msg} are
-now obsolete.
-
-@item
-Gnus is now able to generate @dfn{sparse} threads---threads where
-missing articles are represented by empty nodes (@pxref{Customizing
-Threading}).
-
-@lisp
-(setq gnus-build-sparse-threads 'some)
-@end lisp
-
-@item
-Outgoing articles are stored on a special archive server
-(@pxref{Archived Messages}).
-
-@item
-Partial thread regeneration now happens when articles are
-referred.
-
-@item
-Gnus can make use of GroupLens predictions (@pxref{GroupLens}).
-
-@item
-Picons (personal icons) can be displayed under XEmacs (@pxref{Picons}).
-
-@item
-A @code{trn}-like tree buffer can be displayed (@pxref{Tree Display}).
-
-@lisp
-(setq gnus-use-trees t)
-@end lisp
-
-@item
-An @code{nn}-like pick-and-read minor mode is available for the summary
-buffers (@pxref{Pick and Read}).
-
-@lisp
-(add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
-@end lisp
-
-@item
-In binary groups you can use a special binary minor mode (@pxref{Binary
-Groups}).
-
-@item
-Groups can be grouped in a folding topic hierarchy (@pxref{Group
-Topics}).
-
-@lisp
-(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
-@end lisp
-
-@item
-Gnus can re-send and bounce mail (@pxref{Summary Mail Commands}).
-
-@item
-Groups can now have a score, and bubbling based on entry frequency
-is possible (@pxref{Group Score}).
-
-@lisp
-(add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)
-@end lisp
-
-@item
-Groups can be process-marked, and commands can be performed on
-groups of groups (@pxref{Marking Groups}).
-
-@item
-Caching is possible in virtual groups.
-
-@item
-@code{nndoc} now understands all kinds of digests, mail boxes, rnews
-news batches, ClariNet briefs collections, and just about everything
-else (@pxref{Document Groups}).
-
-@item
-Gnus has a new backend (@code{nnsoup}) to create/read SOUP packets
-(@pxref{SOUP}).
-
-@item
-The Gnus cache is much faster.
-
-@item
-Groups can be sorted according to many criteria (@pxref{Sorting
-Groups}).
-
-@item
-New group parameters have been introduced to set list-addresses and
-expiry times (@pxref{Group Parameters}).
-
-@item
-All formatting specs allow specifying faces to be used
-(@pxref{Formatting Fonts}).
-
-@item
-There are several more commands for setting/removing/acting on process
-marked articles on the @kbd{M P} submap (@pxref{Setting Process Marks}).
-
-@item
-The summary buffer can be limited to show parts of the available
-articles based on a wide range of criteria.  These commands have been
-bound to keys on the @kbd{/} submap (@pxref{Limiting}).
-
-@item
-Articles can be made persistent with the @kbd{*} command
-(@pxref{Persistent Articles}).
-
-@item
-All functions for hiding article elements are now toggles.
-
-@item
-Article headers can be buttonized (@pxref{Article Washing}).
-
-@item
-All mail backends support fetching articles by @code{Message-ID}.
-
-@item
-Duplicate mail can now be treated properly (@pxref{Duplicates}).
-
-@item
-All summary mode commands are available directly from the article
-buffer (@pxref{Article Keymap}).
-
-@item
-Frames can be part of @code{gnus-buffer-configuration} (@pxref{Windows
-Configuration}).
-
-@item
-Mail can be re-scanned by a daemonic process (@pxref{Daemons}).
-@iftex
-@end iftex
-
-@item
-Gnus can make use of NoCeM files to weed out spam (@pxref{NoCeM}).
-
-@lisp
-(setq gnus-use-nocem t)
-@end lisp
-
-@item
-Groups can be made permanently visible (@pxref{Listing Groups}).
-
-@lisp
-(setq gnus-permanently-visible-groups "^nnml:")
-@end lisp
-
-@item
-Many new hooks have been introduced to make customizing easier.
-
-@item
-Gnus respects the @code{Mail-Copies-To} header.
-
-@item
-Threads can be gathered by looking at the @code{References} header
-(@pxref{Customizing Threading}).
-
-@lisp
-(setq gnus-summary-thread-gathering-function
-      'gnus-gather-threads-by-references)
-@end lisp
-
-@item
-Read articles can be stored in a special backlog buffer to avoid
-refetching (@pxref{Article Backlog}).
-
-@lisp
-(setq gnus-keep-backlog 50)
-@end lisp
-
-@item
-A clean copy of the current article is always stored in a separate
-buffer to allow easier treatment.
-
-@item
-Gnus can suggest where to save articles (@pxref{Saving Articles}).
-
-@item
-Gnus doesn't have to do as much prompting when saving (@pxref{Saving
-Articles}).
-
-@lisp
-(setq gnus-prompt-before-saving t)
-@end lisp
-
-@item
-@code{gnus-uu} can view decoded files asynchronously while fetching
-articles (@pxref{Other Decode Variables}).
-
-@lisp
-(setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view)
-@end lisp
-
-@item
-Filling in the article buffer now works properly on cited text
-(@pxref{Article Washing}).
-
-@item
-Hiding cited text adds buttons to toggle hiding, and how much
-cited text to hide is now customizable (@pxref{Article Hiding}).
-
-@lisp
-(setq gnus-cited-lines-visible 2)
-@end lisp
-
-@item
-Boring headers can be hidden (@pxref{Article Hiding}).
-
-@item
-Default scoring values can now be set from the menu bar.
-
-@item
-Further syntax checking of outgoing articles have been added.
-
-@end itemize
-
-
-@node Red Gnus
-@subsubsection Red Gnus
-
-New features in Gnus 5.4/5.5:
-
-@iftex
-@end iftex
-
-@itemize @bullet
-
-@item
-@file{nntp.el} has been totally rewritten in an asynchronous fashion.
-
-@item
-Article prefetching functionality has been moved up into
-Gnus (@pxref{Asynchronous Fetching}).
-
-@item
-Scoring can now be performed with logical operators like @code{and},
-@code{or}, @code{not}, and parent redirection (@pxref{Advanced
-Scoring}).
-
-@item
-Article washing status can be displayed in the
-article mode line (@pxref{Misc Article}).
-
-@item
-@file{gnus.el} has been split into many smaller files.
-
-@item
-Suppression of duplicate articles based on Message-ID can be done
-(@pxref{Duplicate Suppression}).
-
-@lisp
-(setq gnus-suppress-duplicates t)
-@end lisp
-
-@item
-New variables for specifying what score and adapt files are to be
-considered home score and adapt files (@pxref{Home Score File}) have
-been added.
-
-@item
-@code{nndoc} was rewritten to be easily extendable (@pxref{Document
-Server Internals}).
-
-@item
-Groups can inherit group parameters from parent topics (@pxref{Topic
-Parameters}).
-
-@item
-Article editing has been revamped and is now actually usable.
-
-@item
-Signatures can be recognized in more intelligent fashions
-(@pxref{Article Signature}).
-
-@item
-Summary pick mode has been made to look more @code{nn}-like.  Line
-numbers are displayed and the @kbd{.} command can be used to pick
-articles (@code{Pick and Read}).
-
-@item
-Commands for moving the @file{.newsrc.eld} from one server to
-another have been added (@pxref{Changing Servers}).
-
-@item
-There's a way now to specify that ``uninteresting'' fields be suppressed
-when generating lines in buffers (@pxref{Advanced Formatting}).
-
-@item
-Several commands in the group buffer can be undone with @kbd{M-C-_}
-(@pxref{Undo}).
-
-@item
-Scoring can be done on words using the new score type @code{w}
-(@pxref{Score File Format}).
-
-@item
-Adaptive scoring can be done on a Subject word-by-word basis
-(@pxref{Adaptive Scoring}).
-
-@lisp
-(setq gnus-use-adaptive-scoring '(word))
-@end lisp
-
-@item
-Scores can be decayed (@pxref{Score Decays}).
-
-@lisp
-(setq gnus-decay-scores t)
-@end lisp
-
-@item
-Scoring can be performed using a regexp on the Date header.  The Date is
-normalized to compact ISO 8601 format first (@pxref{Score File Format}).
-
-@item
-A new command has been added to remove all data on articles from
-the native server (@pxref{Changing Servers}).
-
-@item
-A new command for reading collections of documents
-(@code{nndoc} with @code{nnvirtual} on top) has been added---@kbd{M-C-d}
-(@pxref{Really Various Summary Commands}).
-
-@item
-Process mark sets can be pushed and popped (@pxref{Setting Process
-Marks}).
-
-@item
-A new mail-to-news backend makes it possible to post even when the NNTP
-server doesn't allow posting (@pxref{Mail-To-News Gateways}).
-
-@item
-A new backend for reading searches from Web search engines
-(@dfn{DejaNews}, @dfn{Alta Vista}, @dfn{InReference}) has been added
-(@pxref{Web Searches}).
-
-@item
-Groups inside topics can now be sorted using the standard sorting
-functions, and each topic can be sorted independently (@pxref{Topic
-Sorting}).
-
-@item
-Subsets of the groups can be sorted independently (@code{Sorting
-Groups}).
-
-@item
-Cached articles can be pulled into the groups (@pxref{Summary Generation
-Commands}).
-@iftex
-@end iftex
-
-@item
-Score files are now applied in a more reliable order (@pxref{Score
-Variables}).
-
-@item
-Reports on where mail messages end up can be generated (@pxref{Splitting
-Mail}).
-
-@item
-More hooks and functions have been added to remove junk from incoming
-mail before saving the mail (@pxref{Washing Mail}).
-
-@item
-Emphasized text can be properly fontisized:
-
-@end itemize
-
-
-@node Quassia Gnus
-@subsubsection Quassia Gnus
-
-New features in Gnus 5.6:
-
-@itemize @bullet
-
-@item
-New functionality for using Gnus as an offline newsreader has been
-added.  A plethora of new commands and modes have been added.  See
-@pxref{Gnus Unplugged} for the full story.
-
-@item
- The @code{nndraft} backend has returned, but works differently than
-before.  All Message buffers are now also articles in the @code{nndraft}
-group, which is created automatically.
-
-@item
-@code{gnus-alter-header-function} can now be used to alter header
-values.
-
-@item
- @code{gnus-summary-goto-article} now accept Message-ID's.
-
-@item
- A new Message command for deleting text in the body of a message
-outside the region: @kbd{C-c C-v}.
-
-@item
- You can now post to component group in @code{nnvirtual} groups with
-@kbd{C-u C-c C-c}.
-
-@item
- @code{nntp-rlogin-program}---new variable to ease customization.
-
-@item
- @code{C-u C-c C-c} in @code{gnus-article-edit-mode} will now inhibit
-re-highlighting of the article buffer.
-
-@item
- New element in @code{gnus-boring-article-headers}---@code{long-to}.
-
-@item
- @kbd{M-i} symbolic prefix command.  See the section "Symbolic
-Prefixes" in the Gnus manual for details.
-
-@item
- @kbd{L} and @kbd{I} in the summary buffer now take the symbolic prefix
-@kbd{a} to add the score rule to the "all.SCORE" file.
-
-@item
- @code{gnus-simplify-subject-functions} variable to allow greater
-control over simplification.
-
-@item
- @kbd{A T}---new command for fetching the current thread.
-
-@item
- @kbd{/ T}---new command for including the current thread in the
-limit.
-
-@item
- @kbd{M-RET} is a new Message command for breaking cited text.
-
-@item
- @samp{\\1}-expressions are now valid in @code{nnmail-split-methods}.
-
-@item
- The @code{custom-face-lookup} function has been removed.
-If you used this function in your initialization files, you must
-rewrite them to use @code{face-spec-set} instead.
-
-@item
- Canceling now uses the current select method.  Symbolic prefix
-@kbd{a} forces normal posting method.
-
-@item
- New command to translate M******** sm*rtq**t*s into proper
-text---@kbd{W d}.
-
-@item
- For easier debugging of @code{nntp}, you can set
-@code{nntp-record-commands} to a non-@code{nil} value.
-
-@item
- @code{nntp} now uses @file{~/.authinfo}, a @file{.netrc}-like file, for
-controlling where and how to send @sc{authinfo} to @sc{nntp} servers.
-
-@item
- A command for editing group parameters from the summary buffer
-has been added.
-
-@item
- A history of where mails have been split is available.
-
-@item
- A new article date command has been added---@code{article-date-iso8601}.
-
-@item
- Subjects can be simplified when threading by setting
-@code{gnus-score-thread-simplify}.
-
-@item
- A new function for citing in Message has been
-added---@code{message-cite-original-without-signature}.
-
-@item
- @code{article-strip-all-blank-lines}---new article command.
-
-@item
- A new Message command to kill to the end of the article has
-been added.
-
-@item
- A minimum adaptive score can be specified by using the
-@code{gnus-adaptive-word-minimum} variable.
-
-@item
- The "lapsed date" article header can be kept continually
-updated by the @code{gnus-start-date-timer} command.
-
-@item
- Web listserv archives can be read with the @code{nnlistserv} backend.
-
-@item
- Old dejanews archives can now be read by @code{nnweb}.
-
-@end itemize
-
-
-@node Newest Features
-@subsection Newest Features
-@cindex todo
-
-Also known as the @dfn{todo list}.  Sure to be implemented before the
-next millennium.
-
-Be afraid.  Be very afraid.
-
-(That a feature appears in this list doesn't necessarily mean that I've
-decided to actually implement it.  It just means that I think it sounds
-interesting.)
-
-(Yes, this is the actual, up-to-the-second todo list.)
-
-@itemize @bullet
-
-@item
- I would like the zombie-page to contain an URL to the source of the
-latest version of gnus or some explanation on where to find it.
-
-@item
- A way to continue editing the latest Message composition.
-
-@item
- http://www.sonicnet.com/feature/ari3/
-
-@item
- facep is not declared.
-
-@item
- Include a section in the manual on why the number of articles
-isn't the same in the group buffer and on the SPC prompt.
-
-@item
- Interacting with rmail fcc isn't easy.
-
-@item
-@example
- Hypermail:
-<URL:http://www.falch.no/people/pepper/DSSSL-Lite/archives/>
-<URL:http://www.eit.com/software/hypermail/hypermail.html>
-<URL:http://homer.ncm.com/>
-<URL:http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/HTML_Converters/>
-http://www.uwsg.indiana.edu/hypermail/linux/kernel/9610/index.html
-<URL:http://union.ncsa.uiuc.edu/HyperNews/get/www/html/converters.html>
-http://www.miranova.com/gnus-list/
-
-@end example
-
-@item
-@samp{^-- } is made into - in LaTeX.
-
-@item
- gnus-kill is much slower than it was in GNUS 4.1.3.
-
-@item
- when expunging articles on low score, the sparse nodes keep hanging on?
-@item
- starting the first time seems to hang Gnus on some systems.  Does
-NEWGROUPS answer too fast?
-@item
- nndir doesn't read gzipped files.
-@item
- FAQ doesn't have an up node?
-@item
- when moving mail from a procmail spool to the crash-box,
-the crash-box is only appropriate to one specific group.
-@item
- `t' `t' makes X-Faces disappear.
-@item
- nnmh-be-safe means that crossposted articles will
-be marked as unread.
-@item
- Orphan score entries don't show on "V t" score trace
-@item
- when clearing out data, the cache data should also be reset.
-@item
- rewrite gnus-summary-limit-children to be non-recursive
-to avoid exceeding lisp nesting on huge groups.
-@item
- expunged articles are counted when computing scores.
-@item
- implement gnus-batch-brew-soup
-@item
- ticked articles aren't easy to read in pick mode -- `n' and
-stuff just skips past them.  Read articles are the same.
-@item
- topics that contain just groups with ticked
-articles aren't displayed.
-@item
- nndoc should always allocate unique Message-IDs.
-@item
- If there are mail groups the first time you use Gnus, Gnus'll
-make the mail groups killed.
-@item
- no "no news is good news" when using topics.
-@item
- when doing crosspost marking, the cache has to be consulted
-and articles have to be removed.
-@item
- nnweb should fetch complete articles when they are split into several
-parts.
-@item
- scoring on head immediate doesn't work.
-@item
- finding short score file names takes forever.
-@item
- canceling articles in foreign groups.
-@item
- nntp-open-rlogin no longer works.
-@item
- C-u C-x C-s (Summary) switches to the group buffer.
-@item
- move nnmail-split-history out to the backends.
-@item
- nnweb doesn't work properly.
-@item
- using a virtual server name as `gnus-select-method' doesn't work?
-@item
- when killing/yanking a group from one topic to another in a slave, the
-master will yank it first to one topic and then add it to another.
-Perhaps.
-
-@item
- warn user about `=' redirection of a group in the active file?
-@item
- take over the XEmacs menubar and offer a toggle between the XEmacs
-bar and the Gnus bar.
-@item
-@example
- push active file and NOV file parsing down into C code.
-`(canonize-message-id id)'
-`(mail-parent-message-id references n)'
-`(parse-news-nov-line &optional dependency-hashtb)'
-`(parse-news-nov-region beg end &optional dependency-hashtb fullp)'
-`(parse-news-active-region beg end hashtb)'
-
-@end example
-
-@item
- nnml .overview directory with splits.
-@item
- asynchronous cache
-@item
- postponed commands.
-@item
- the selected article show have its Subject displayed in its summary line.
-@item
- when entering groups, get the real number of unread articles from
-the server?
-@item
- sort after gathering threads -- make false roots have the
-headers of the oldest orphan with a 0 article number?
-@item
- nndoc groups should inherit the score files of their parents?  Also
-inherit copy prompts and save files.
-@item
- command to start up Gnus (if not running) and enter a mail mode buffer.
-@item
- allow editing the group description from the group buffer
-for backends that support that.
-@item
-gnus-hide,show-all-topics
-@item
- groups and sub-topics should be allowed to mingle inside each topic,
-and not just list all subtopics at the end.
-@item
- a command to remove all read articles that are not needed to connect
-threads -- `gnus-summary-limit-to-sparse-unread'?
-@item
- a variable to turn off limiting/cutting of threads in the tree buffer.
-@item
- a variable to limit how many files are uudecoded.
-@item
- add zombie groups to a special "New Groups" topic.
-@item
- server mode command: close/open all connections
-@item
- put a file date in gnus-score-alist and check whether the file
-has been changed before using it.
-@item
- on exit from a digest group, go to the next article in the parent group.
-@item
- hide (sub)threads with low score.
-@item
- when expiring, remove all marks from expired articles.
-@item
- gnus-summary-limit-to-body
-@item
- a regexp alist that says what level groups are to be subscribed
-on.  Eg. -- `(("nnml:" . 1))'.
-@item
- easier interface to nnkiboze to create ephemeral groups that
-contain groups that match a regexp.
-@item
- allow newlines in <URL:> urls, but remove them before using
-the URL.
-@item
- If there is no From line, the mail backends should fudge one from the
-"From " line.
-@item
- fuzzy simplifying should strip all non-alpha-numerical info
-from subject lines.
-@item
- gnus-soup-brew-soup-with-high-scores.
-@item
- nntp-ping-before-connect
-@item
- command to check whether NOV is evil.  "list overview.fmt".
-@item
- when entering a group, Gnus should look through the score
-files very early for `local' atoms and set those local variables.
-@item
- message annotations.
-@item
- topics are always yanked before groups, and that's not good.
-@item
- (set-extent-property extent 'help-echo "String to display in minibuf")
-to display help in the minibuffer on buttons under XEmacs.
-@item
- allow group line format spec to say how many articles there
-are in the cache.
-@item
- AUTHINFO GENERIC
-@item
- `run-with-idle-timer' in gnus-demon.
-@item
- stop using invisible text properties and start using overlays instead
-@item
- C-c C-f C-e to add an Expires header.
-@item
- go from one group to the next; everything is expunged; go to the
-next group instead of going to the group buffer.
-@item
- gnus-renumber-cache -- to renumber the cache using "low" numbers.
-@item
- record topic changes in the dribble buffer.
-@item
- `nnfolder-generate-active-file' should look at the folders it
-finds and generate proper active ranges.
-@item
- nneething-look-in-files-for-article-heads variable to control
-whether nneething should sniff all files in the directories.
-@item
- gnus-fetch-article -- start Gnus, enter group, display article
-@item
- gnus-dont-move-articles-to-same-group variable when respooling.
-@item
- when messages are crossposted between several auto-expirable groups,
-articles aren't properly marked as expirable.
-@item
- nneething should allow deletion/moving.
-@item
- TAB on the last button should go to the first button.
-@item
- if the car of an element in `mail-split-methods' is a function,
-and the function returns non-nil, use that as the name of the group(s) to
-save mail in.
-@item
- command for listing all score files that have been applied.
-@item
- a command in the article buffer to return to `summary' config.
-@item
- `gnus-always-post-using-current-server' -- variable to override
-`C-c C-c' when posting.
-@item
- nnmail-group-spool-alist -- says where each group should use
-as a spool file.
-@item
- when an article is crossposted to an auto-expirable group, the article
-should be marker as expirable.
-@item
- article mode command/menu for "send region as URL to browser".
-@item
- on errors, jump to info nodes that explain the error.  For instance,
-on invalid From headers, or on error messages from the nntp server.
-@item
- when gathering threads, make the article that has no "Re: " the parent.
-Also consult Date headers.
-@item
- a token in splits to call shrink-window-if-larger-than-buffer
-@item
- `1 0 A M' to do matches on the active hashtb.
-@item
- duplicates -- command to remove Gnus-Warning header, use the read
-Message-ID, delete the "original".
-@item
- when replying to several messages at once, put the "other" message-ids
-into a See-Also header.
-@item
- support setext: URL:http://www.bsdi.com/setext/
-@item
- support ProleText: <URL:http://proletext.clari.net/prole/proletext.html>
-@item
- when browsing a foreign server, the groups that are already subscribed
-should be listed as such and not as "K".
-@item
- generate font names dynamically.
-@item
- score file mode auto-alist.
-@item
- allow nndoc to change/add/delete things from documents.  Implement
-methods for each format for adding an article to the document.
-@item
- `gnus-fetch-old-headers' `all' value to incorporate
-absolutely all headers there is.
-@item
- function like `|', but concatenate all marked articles
-and pipe them to the process.
-@item
- cache the list of killed (or active) groups in a separate file.  Update
-the file whenever we read the active file or the list
-of killed groups in the .eld file reaches a certain length.
-@item
- function for starting to edit a file to put into
-the current mail group.
-@item
- score-find-trace should display the total score of the article.
-@item
- "ghettozie" -- score on Xref header and nix it out after using it
-to avoid marking as read in other groups it has been crossposted to.
-@item
- look at procmail splitting.  The backends should create
-the groups automatically if a spool file exists for that group.
-@item
- function for backends to register themselves with Gnus.
-@item
- when replying to several process-marked articles,
-have all the From end up in Cc headers?  Variable to toggle.
-@item
- command to delete a crossposted mail article from all
-groups it has been mailed to.
-@item
- `B c' and `B m' should be crosspost aware.
-@item
- hide-pgp should also hide PGP public key blocks.
-@item
- Command in the group buffer to respool process-marked groups.
-@item
- `gnus-summary-find-matching' should accept
-pseudo-"headers" like "body", "head" and "all"
-@item
- When buttifying <URL: > things, all white space (including
-newlines) should be ignored.
-@item
- Process-marking all groups in a topic should process-mark
-groups in subtopics as well.
-@item
- Add non-native groups to the list of killed groups when killing them.
-@item
- nntp-suggest-kewl-config to probe the nntp server and suggest
-variable settings.
-@item
- add edit and forward secondary marks.
-@item
- nnml shouldn't visit its .overview files.
-@item
- allow customizing sorting within gathered threads.
-@item
- `B q' shouldn't select the current article.
-@item
- nnmbox should support a newsgroups file for descriptions.
-@item
- allow fetching mail from several pop servers.
-@item
- Be able to specify whether the saving commands save the original
-or the formatted article.
-@item
- a command to reparent with the child process-marked (cf. `T ^'.).
-@item
- I think the possibility to send a password with nntp-open-rlogin
-should be a feature in Red Gnus.
-@item
- The `Z n' command should be possible to execute from a mouse click.
-@item
- more limiting functions -- date, etc.
-@item
- be able to limit on a random header; on body; using reverse matches.
-@item
- a group parameter (`absofucking-total-expiry') that will make Gnus expire
-even unread articles.
-@item
- a command to print the article buffer as postscript.
-@item
- variable to disable password fetching when opening by nntp-open-telnet.
-@item
- manual: more example servers -- nntp with rlogin, telnet
-@item
- checking for bogus groups should clean topic alists as well.
-@item
- canceling articles in foreign groups.
-@item
- article number in folded topics isn't properly updated by
-Xref handling.
-@item
- Movement in the group buffer to the next unread group should go to the
-next closed topic with unread messages if no group can be found.
-@item
- Extensive info pages generated on the fly with help everywhere --
-in the "*Gnus edit*" buffers, for instance.
-@item
- Topic movement commands -- like thread movement.  Up, down, forward, next.
-@item
- a way to tick/mark as read Gcc'd articles.
-@item
- a way to say that all groups within a specific topic comes
-from a particular server?  Hm.
-@item
- `gnus-article-fill-if-long-lines' -- a function to fill
-the article buffer if there are any looong lines there.
-@item
- `T h' should jump to the parent topic and fold it.
-@item
- a command to create an ephemeral nndoc group out of a file,
-and then splitting it/moving it to some other group/backend.
-@item
- a group parameter for nnkiboze groups that says that
-all kibozed articles should be entered into the cache.
-@item
- It should also probably be possible to delimit what
-`gnus-jog-cache' does -- for instance, work on just some groups, or on
-some levels, and entering just articles that have a score higher than
-a certain number.
-@item
- nnfolder should append to the folder instead of re-writing
-the entire folder to disk when accepting new messages.
-@item
- allow all backends to do the proper thing with .gz files.
-@item
- a backend for reading collections of babyl files nnbabylfolder?
-@item
- a command for making the native groups into foreign groups.
-@item
- server mode command for clearing read marks from all groups
-from a server.
-@item
- when following up multiple articles, include all To, Cc, etc headers
-from all articles.
-@item
- a command for deciding what the total score of the current
-thread is.  Also a way to highlight based on this.
-@item
- command to show and edit group scores
-@item
- a gnus-tree-minimize-horizontal to minimize tree buffers
-horizontally.
-@item
- command to generate nnml overview file for one group.
-@item
- `C-u C-u a' -- prompt for many crossposted groups.
-@item
- keep track of which mail groups have received new articles (in this session).
-Be able to generate a report and perhaps do some marking in the group
-buffer.
-@item
- gnus-build-sparse-threads to a number -- build only sparse threads
-that are of that length.
-@item
- have nnmh respect mh's unseen sequence in .mh_profile.
-@item
- cache the newsgroups descriptions locally.
-@item
- asynchronous posting under nntp.
-@item
- be able to control word adaptive scoring from the score files.
-@item
- a variable to make `C-c C-c' post using the "current" select method.
-@item
- `limit-exclude-low-scored-articles'.
-@item
- if `gnus-summary-show-thread' is a number, hide threads that have
-a score lower than this number.
-@item
- split newsgroup subscription variable up into "order" and "method".
-@item
- buttonize ange-ftp file names.
-@item
- a command to make a duplicate copy of the current article
-so that each copy can be edited separately.
-@item
- nnweb should allow fetching from the local nntp server.
-@item
- record the sorting done in the summary buffer so that
-it can be repeated when limiting/regenerating the buffer.
-@item
- nnml-generate-nov-databses should generate for
-all nnml servers.
-@item
- when the user does commands in the group buffer, check
-the modification time of the .newsrc.eld file and use
-ask-user-about-supersession-threat.  Also warn when trying
-to save .newsrc.eld and it has changed.
-@item
- M-g on a topic will display all groups with 0 articles in
-the topic.
-@item
- command to remove all topic stuff.
-@item
- allow exploding incoming digests when reading incoming mail
-and splitting the resulting digests.
-@item
- nnsoup shouldn't set the `message-' variables.
-@item
- command to nix out all nnoo state information.
-@item
- nnmail-process-alist that calls functions if group names
-matches an alist -- before saving.
-@item
- use buffer-invisibility-spec everywhere for hiding text.
-@item
- variable to activate each group before entering them
-to get the (new) number of articles.  `gnus-activate-before-entering'.
-@item
- command to fetch a Message-ID from any buffer, even
-starting Gnus first if necessary.
-@item
- when posting and checking whether a group exists or not, just
-ask the nntp server instead of relying on the active hashtb.
-@item
- buttonize the output of `C-c C-a' in an apropos-like way.
-@item
- `G p' should understand process/prefix, and allow editing
-of several groups at once.
-@item
- command to create an ephemeral nnvirtual group that
-matches some regexp(s).
-@item
- nndoc should understand "Content-Type: message/rfc822" forwarded messages.
-@item
- it should be possible to score "thread" on the From header.
-@item
- hitting RET on a "gnus-uu-archive" pseudo article should unpack it.
-@item
- `B i' should display the article at once in the summary buffer.
-@item
- remove the "*" mark at once when unticking an article.
-@item
- `M-s' should highlight the matching text.
-@item
- when checking for duplicated mails, use Resent-Message-ID if present.
-@item
- killing and yanking groups in topics should be better.  If killing one copy
-of a group that exists in multiple topics, only that copy should
-be removed.  Yanking should insert the copy, and yanking topics
-should be possible to be interspersed with the other yankings.
-@item
- command for enter a group just to read the cached articles.  A way to say
-"ignore the nntp connection; just read from the cache."
-@item
- `X u' should decode base64 articles.
-@item
- a way to hide all "inner" cited text, leaving just the most
-recently cited text.
-@item
- nnvirtual should be asynchronous.
-@item
- after editing an article, gnus-original-article-buffer should
-be invalidated.
-@item
- there should probably be a way to make Gnus not connect to the
-server and just read the articles in the server
-@item
- allow a `set-default' (or something) to change the default
-value of nnoo variables.
-@item
- a command to import group infos from a .newsrc.eld file.
-@item
- groups from secondary servers have the entire select method
-listed in each group info.
-@item
- a command for just switching from the summary buffer to the group
-buffer.
-@item
- a way to specify that some incoming mail washing functions
-should only be applied to some groups.
-@item
- Message `C-f C-t' should ask the user whether to heed
-mail-copies-to: never.
-@item
- new group parameter -- `post-to-server' that says to post
-using the current server.  Also a variable to do the same.
-@item
- the slave dribble files should auto-save to the slave file names.
-@item
- a group parameter that says what articles to display on group entry, based
-on article marks.
-@item
- a way to visually distinguish slave Gnusae from masters.  (Whip instead
-of normal logo?)
-@item
- Use DJ Bernstein "From " quoting/dequoting, where applicable.
-@item
- Why is hide-citation-maybe and hide-citation different?  Also
-clear up info.
-@item
- group user-defined meta-parameters.
-
-
-
-From: John Griffith <griffith@@sfs.nphil.uni-tuebingen.de>
-@item
- I like the option for trying to retrieve the FAQ for a group and I was
-thinking it would be great if for those newsgroups that had archives
-you could also try to read the archive for that group.  Part of the
-problem is that archives are spread all over the net, unlike FAQs.
-What would be best I suppose is to find the one closest to your site.
-
-In any case, there is a list of general news group archives at @*
-ftp://ftp.neosoft.com/pub/users/claird/news.lists/newsgroup_archives.html
-
-
-
-
-@item
-@example
-From: Jason L Tibbitts III <tibbs@@hpc.uh.edu>
-(add-hook 'gnus-select-group-hook
-  (lambda ()
-    (gnus-group-add-parameter group
-       (cons 'gnus-group-date-last-entered (list (current-time-string))))))
-
-(defun gnus-user-format-function-d (headers)
-  "Return the date the group was last read."
-  (cond ((car (gnus-group-get-parameter gnus-tmp-group 'gnus-group-date-last-entered)))
-      (t "")))
-@end example
-
-@item
- tanken var at nÃ¥r du bruker `gnus-startup-file' som prefix (FOO) til Ã¥ lete
-opp en fil FOO-SERVER, FOO-SERVER.el, FOO-SERVER.eld, kan du la den være en
-liste hvor du bruker hvert element i listen som FOO, istedet.  da kunne man
-hatt forskjellige serveres startup-filer forskjellige steder.
-
-
-@item
-LMI> Well, nnbabyl could alter the group info to heed labels like
-LMI> answered and read, I guess.
-
-It could also keep them updated (the same for the Status: header of
-unix mbox files).
-
-They could be used like this:
-
-
-@example
-`M l <name> RET' add label <name> to current message.
-`M u <name> RET' remove label <name> from current message.
-`/ l <expr> RET' limit summary buffer according to <expr>.
-
-<expr> would be a boolean expression on the labels, e.g.
-
-`/ l bug & !fixed RET'
-@end example
-
-would show all the messages which are labeled `bug' but not labeled
-`fixed'.
-
-One could also imagine the labels being used for highlighting, or
-affect the summary line format.
-
-
-@item
-Sender: abraham@@dina.kvl.dk
-
-I'd like a gnus-find-file which work like find file, except that it
-would recognize things that looks like messages or folders:
-
-- If it is a directory containing numbered files, create an nndir
-summary buffer.
-
-- For other directories, create a nneething summary buffer.
-
-- For files matching "\\`From ", create a nndoc/mbox summary.
-
-- For files matching "\\`BABYL OPTIONS:", create a nndoc/baby summary.
-
-- For files matching "\\`[^ \t\n]+:", create an *Article* buffer.
-
-- For other files, just find them normally.
-
-I'd like `nneething' to use this function, so it would work on a
-directory potentially containing mboxes or babyl files.
-
-@item
-Please send a mail to bwarsaw@@cnri.reston.va.us (Barry A. Warsaw) and
-tell him what you are doing.
-
-@item
-Currently, I get prompted:
-
-decend into sci?
-- type y
-decend into sci.something ?
-- type n
-decend into ucd?
-
-The problem above is that since there is really only one subsection of
-science, shouldn't it prompt you for only descending sci.something?  If
-there was a sci.somethingelse group or section, then it should prompt
-for sci? first the sci.something? then sci.somethingelse?...
-
-@item
-Ja, det burde være en mÃ¥te Ã¥ si slikt.  Kanskje en ny variabel?
-`gnus-use-few-score-files'?  SÃ¥ kunne score-regler legges til den
-"mest" lokale score-fila.  F. eks. ville no-gruppene betjenes av
-"no.all.SCORE", osv.
-
-@item
-What i want is for Gnus to treat any sequence or combination of the following
-as a single spoiler warning and hide it all, replacing it with a "Next Page"
-button:
-
-
-^L's
-
-more than n blank lines
-
-more than m identical lines
-(which should be replaced with button to show them)
-
-any whitespace surrounding any of the above
-
-
-@item
-Well, we could allow a new value to `gnus-thread-ignore-subject' --
-`spaces', or something.  (We could even default to that.)  And then
-subjects that differ in white space only could be considered the
-"same" subject for threading purposes.
-
-@item
-Modes to preprocess the contents (e.g. jka-compr) use the second form
-"(REGEXP FUNCTION NON-NIL)" while ordinary modes (e.g. tex) use the first
-form "(REGEXP . FUNCTION)", so you could use it to distinguish between
-those two types of modes. (auto-modes-alist, insert-file-contents-literally.)
-
-@item
- Under XEmacs -- do funny article marks:
-tick - thumb tack
-killed - skull
-soup - bowl of soup
-score below - dim light bulb
-score over - bright light bulb
-
-@item
-Yes. I think the algorithm is as follows:
-
-@example
-Group-mode
-
-   show-list-of-articles-in-group
-        if (key-pressed == SPACE)
-                if (no-more-articles-in-group-to-select)
-                        if (articles-selected)
-                                start-reading-selected-articles;
-                        junk-unread-articles;
-                        next-group;
-                 else
-                        show-next-page;
-
-         else if (key-pressed = '.')
-                if (consolidated-menus)         # same as hide-thread in Gnus
-                        select-thread-under-cursor;
-                else
-                        select-article-under-cursor;
-
-
-Article-mode
-        if (key-pressed == SPACE)
-                if (more-pages-in-article)
-                        next-page;
-                else if (more-selected-articles-to-read)
-                        next-article;
-                else
-                        next-group;
-@end example
-
-@item
-My precise need here would have been to limit files to Incoming*.
-One could think of some `nneething-only-files' variable, but I guess
-it would have been unacceptable if one was using many unrelated such
-nneething groups.
-
-A more useful approach would be to, in response to the `G D' prompt, be
-allowed to say something like: `~/.mail/Incoming*', somewhat limiting
-the top-level directory only (in case directories would be matched by
-the wildcard expression).
-
-@item
-It would be nice if it also handled
-
-        <URL:news://sunsite.auc.dk/>
-
-which should correspond to `B nntp RET sunsite.auc.dk' in *Group*.
-
-
-@item
-
-  Take a look at w3-menu.el in the Emacs-W3 distribution - this works out
-really well.  Each menu is 'named' by a symbol that would be on a
-gnus-*-menus (where * would be whatever, but at least group, summary, and
-article versions) variable.
-
-  So for gnus-summary-menus, I would set to '(sort mark dispose ...)
-
-  A value of '1' would just put _all_ the menus in a single 'GNUS' menu in
-the main menubar.  This approach works really well for Emacs-W3 and VM.
-
-
-@item
- nndoc should take care to create unique Message-IDs for all its
-articles.
-@item
- gnus-score-followup-article only works when you have a summary buffer
-active.  Make it work when posting from the group buffer as well.
-(message-sent-hook).
-@item
- rewrite gnus-demon to use run-with-idle-timers.
-
-@item
- * Enhancements to Gnus:
-
-  Add two commands:
-
-  * gnus-servers (gnus-start-server-buffer?)--enters Gnus and goes
-    straight to the server buffer, without opening any connections to
-    servers first.
-
-  * gnus-server-read-server-newsrc--produces a buffer very similar to
-    the group buffer, but with only groups from that server listed;
-    quitting this buffer returns to the server buffer.
-
-@item
- add a command to check the integrity of an nnfolder folder --
-go through the article numbers and see that there are no duplicates,
-and stuff.
-
-@item
- `unsmileyfy-buffer' to undo smileification.
-
-@item
- a command to give all relevant info on an article, including all
-secondary marks.
-
-@item
- when doing `-request-accept-article', the backends should do
-the nnmail duplicate checking.
-
-@item
- allow `message-signature-file' to be a function to return the
-value of the signature file.
-
-@item
- In addition, I would love it if I could configure message-tab so that it
-could call `bbdb-complete-name' in other headers.  So, some sort of
-interface like
-
-(setq message-tab-alist
-      '((message-header-regexp message-expand-group)
-        ("^\\(To\\|[cC]c\\|[bB]cc\\)"  bbdb-complete-name)))
-
-then you could run the relevant function to complete the information in
-the header
-
-@item
- cache the newsgroups file locally to avoid reloading it all the time.
-
-@item
- a command to import a buffer into a group.
-
-@item
- nnweb should allow fetching by Message-ID from servers.
-
-@item
- point in the article buffer doesn't always go to the
-beginning of the buffer when selecting new articles.
-
-@item
- a command to process mark all unread articles.
-
-@item
- `gnus-gather-threads-by-references-and-subject' -- first
-do gathering by references, and then go through the dummy roots and
-do more gathering by subject.
-
-@item
- gnus-uu-mark-in-numerical-order -- process mark articles in
-article numerical order.
-
-@item
- (gnus-thread-total-score
- (gnus-id-to-thread (mail-header-id (gnus-summary-article-header))))
-bind to a key.
-
-@item
- sorting by score is wrong when using sparse threads.
-
-@item
- a command to fetch an arbitrary article -- without having to be
-in the summary buffer.
-
-@item
- a new nncvs backend.  Each group would show an article, using
-version branches as threading, checkin date as the date, etc.
-
-@item
- http://www.dejanews.com/forms/dnsetfilter_exp.html ?
-This filter allows one to construct advance queries on the Dejanews
-database such as specifying start and end dates, subject, author,
-and/or newsgroup name.
-
-@item
- new Date header scoring type -- older, newer
-
-@item
- use the summary toolbar in the article buffer.
-
-@item
- a command to fetch all articles that are less than X days old.
-
-@item
- in pick mode, `q' should save the list of selected articles in the
-group info.  The next time the group is selected, these articles
-will automatically get the process mark.
-
-@item
- Isn't it possible to (also?) allow M-^ to automatically try the
-default server if it fails on the current server?  (controlled by a
-user variable, (nil, t, 'ask)).
-
-@item
- make it possible to cancel articles using the select method for the
-current group.
-
-@item
- `gnus-summary-select-article-on-entry' or something.  It'll default
-to t and will select whatever article decided by `gnus-auto-select-first'.
-
-@item
- a new variable to control which selection commands should be unselecting.
-`first', `best', `next', `prev', `next-unread', `prev-unread' are
-candidates.
-
-@item
- be able to select groups that have no articles in them
-to be able to post in them (using the current select method).
-
-@item
- be able to post via DejaNews.
-
-@item
- `x' should retain any sortings that have been performed.
-
-@item
- allow the user to specify the precedence of the secondary marks.  Also
-allow them to be displayed separately.
-
-@item
- gnus-summary-save-in-pipe should concatenate the results from
-the processes when doing a process marked pipe.
-
-@item
- a new match type, like Followup, but which adds Thread matches on all
-articles that match a certain From header.
-
-@item
- a function that can be read from kill-emacs-query-functions to offer
-saving living summary buffers.
-
-@item
- a function for selecting a particular group which will contain
-the articles listed in a list of article numbers/id's.
-
-@item
- a battery of character translation functions to translate common
-Mac, MS (etc) characters into ISO 8859-1.
-
-@example
-(defun article-fix-m$word ()
-  "Fix M$Word smartquotes in an article."
-  (interactive)
-  (save-excursion
-    (let ((buffer-read-only nil))
-      (goto-char (point-min))
-      (while (search-forward "\221" nil t)
-        (replace-match "`" t t))
-      (goto-char (point-min))
-      (while (search-forward "\222" nil t)
-        (replace-match "'" t t))
-      (goto-char (point-min))
-      (while (search-forward "\223" nil t)
-        (replace-match "\"" t t))
-      (goto-char (point-min))
-      (while (search-forward "\224" nil t)
-        (replace-match "\"" t t)))))
-@end example
-
-@item
-@example
- (add-hook 'gnus-exit-query-functions
-'(lambda ()
-   (if (and (file-exists-p nnmail-spool-file)
-            (> (nnheader-file-size nnmail-spool-file) 0))
-       (yes-or-no-p "New mail has arrived.  Quit Gnus anyways? ")
-       (y-or-n-p "Are you sure you want to quit Gnus? "))))
-@end example
-
-@item
- allow message-default-headers to be a function.
-
-@item
- new Date score match types -- < > = (etc) that take floating point
-numbers and match on the age of the article.
-
-@item
-@example
->  > > If so, I've got one gripe: It seems that when I fire up gnus 5.2.25
->  > > under xemacs-19.14, it's creating a new frame, but is erasing the
->  > > buffer in the frame that it was called from =:-O
->
->  > Hm.  How do you start up Gnus?  From the toolbar or with
->  > `M-x gnus-other-frame'?
->
->    I normally start it up from the toolbar; at
-> least that's the way I've caught it doing the
-> deed before.
-@end example
-
-@item
- all commands that react to the process mark should push
-the current process mark set onto the stack.
-
-@item
- gnus-article-hide-pgp
-Selv ville jeg nok ha valgt Ã¥ slette den dersom teksten matcher
-@example
-"\\(This\s+\\)?[^ ]+ has been automatically signed by"
-@end example
-og det er maks hundre tegn mellom match-end og ----linja.  Men -det-
-er min type heuristikk og langt fra alles.
-
-@item
- `gnus-subscribe-sorted' -- insert new groups where they would have been
-sorted to if `gnus-group-sort-function' were run.
-
-@item
- gnus-(group,summary)-highlight should respect any `face' text props set
-on the lines.
-
-@item
- use run-with-idle-timer for gnus-demon instead of the
-home-brewed stuff for better reliability.
-
-@item
- add a way to select which NoCeM type to apply -- spam, troll, etc.
-
-@item
- nndraft-request-group should tally auto-save files.
-
-@item
- implement nntp-retry-on-break and nntp-command-timeout.
-
-@item
- gnus-article-highlight-limit that says when not to highlight (long)
-articles.
-
-@item
- (nnoo-set SERVER VARIABLE VALUE)
-
-@item
- nn*-spool-methods
-
-@item
- interrupitng agent fetching of articles should save articles.
-
-@item
- command to open a digest group, and copy all the articles there to the
-current group.
-
-@item
- a variable to disable article body highlights if there's more than
-X characters in the body.
-
-@item
- handle 480/381 authinfo requests separately.
-
-@item
- include the texi/dir file in the distribution.
-
-@item
- format spec to "tab" to a position.
-
-@item
- Move all prompting to the new `M-n' default style.
-
-@item
- command to display all dormant articles.
-
-@item
- gnus-auto-select-next makeover -- list of things it should do.
-
-@item
- a score match type that adds scores matching on From if From has replied
-to something someone else has said.
-
-@item
- Read Netscape discussion groups:
-snews://secnews.netscape.com/netscape.communicator.unix
-
-@item
-One command to edit the original version if an article, and one to edit
-the displayed version.
-
-@item
-@kbd{T v} -- make all process-marked articles the children of the
-current article.
-
-@item
-Switch from initial text to the new default text mechanism.
-
-@item
-How about making it possible to expire local articles?  Will it be
-possible to make various constraints on when an article can be
-expired, e.g. (read), (age > 14 days), or the more interesting (read
-& age > 14 days)?
-
-@item
-New limit command---limit to articles that have a certain string
-in the head or body.
-
-@item
-Allow breaking lengthy NNTP commands.
-
-@item
-gnus-article-highlight-limit, to disable highlighting in big articles.
-
-@item
-Editing an article should put the article to be edited
-in a special, unique buffer.
-
-@item
-A command to send a mail to the admin-address group param.
-
-@item
-A Date scoring type that will match if the article
-is less than a certain number of days old.
-
-@item
-New spec: %~(tab 56) to put point on column 56
-
-@item
-Allow Gnus Agent scoring to use normal score files.
-
-@item
-Rething the Agent active file thing.  `M-g' doesn't update the active
-file, for instance.
-
-@item
-With dummy roots, `^' and then selecing the first article
-in any other dummy thread will make Gnus highlight the
-dummy root instead of the first article.
-
-@item
-Propagate all group properties (marks, article numbers, etc) up to the
-topics for displaying.
-
-@item
-`n' in the group buffer with topics should go to the next group
-with unread articles, even if that group is hidden in a topic.
-
-@item
-gnus-posting-styles doesn't work in drafts.
-
-@item
-gnus-summary-limit-include-cached is slow when there are
-many articles in the cache, since it regenerates big parts of the
-summary buffer for each article.
-
-@item
-Implement gnus-batch-brew-soup.
-
-@item
-Group parameters and summary commands for un/subscribing to mailing
-lists.
-
-@item
-Introduce nnmail-home-directory.
-
-@item
-gnus-fetch-group and friends should exit Gnus when the user
-exits the group.
-
-@item
-The jingle is only played on the second invocation of Gnus.
-
-@item
-Bouncing articles should do MIME.
-
-@item
-Crossposted articles should "inherit" the % or @ mark from the other
-groups it has been crossposted to, or something.  (Agent.)
-
-@item
-If point is on a group that appears multiple times in topics, and
-you press `l', point will move to the first instance of the group.
-
-@item
-A spec for the group line format to display the number of
-agent-downloaded articles in the group.
-
-@item
-Some nntp servers never respond when posting, so there should be a
-timeout for all commands.
-
-@item
-When stading on a topic line and `t'-ing, point goes to the last line.
-It should go somewhere else.
-
-@item
-I'm having trouble accessing a newsgroup with a "+" in its name with
-Gnus.  There is a new newsgroup on msnews.microsoft.com named
-"microsoft.public.multimedia.directx.html+time" that I'm trying to
-access as
-"nntp+msnews.microsoft.com:microsoft.public.multimedia.directx.html+time"
-but it gives an error that it cant access the group.
-
-Is the "+" character illegal in newsgroup names?  Is there any way in
-Gnus to work around this?  (gnus 5.6.45 - XEmacs 20.4)
-
-@item
-
-When `#F', do:
-
-@example
-Subject: Answer to your mails 01.01.1999-01.05.1999
- --text follows this line--
-Sorry I killfiled you...
-
-Under the subject "foo", you wrote on 01.01.1999:
-> bar
-Under the subject "foo1", you wrote on 01.01.1999:
-> bar 1
-@end example
-
-@item
-Allow "orphan" scores in the Agent scoring.
-
-@item
-@example
-    - Edit article's summary line. 
-    - End edit
-    - Sort lines in buffer by subject
-
-    --> the old subject line appears in Summary buffer, not the one that was
-    just changed to.
-@end example
-
-
-@item
-Remove list identifiers from the subject in the summary when doing `^'
-and the like.
-
-@item
-Have the Agent write out articles, one by one, as it retrieves them,
-to avoid having to re-fetch them all if Emacs should crash while
-fetching. 
-
-@item
-Be able to forward groups of messages as MIME digests.
-
-@item
-Solve the halting problem.
-
-@c TODO
-@end itemize
-
-@iftex
-
-@page
-@node The Manual
-@section The Manual
-@cindex colophon
-@cindex manual
-
-This manual was generated from a TeXinfo file and then run through
-either @code{texi2dvi}
-to get what you hold in your hands now.
-
-The following conventions have been used:
-
-@enumerate
-
-@item
-This is a @samp{string}
-
-@item
-This is a @kbd{keystroke}
-
-@item
-This is a @file{file}
-
-@item
-This is a @code{symbol}
-
-@end enumerate
-
-So if I were to say ``set @code{flargnoze} to @samp{yes}'', that would
-mean:
-
-@lisp
-(setq flargnoze "yes")
-@end lisp
-
-If I say ``set @code{flumphel} to @code{yes}'', that would mean:
-
-@lisp
-(setq flumphel 'yes)
-@end lisp
-
-@samp{yes} and @code{yes} are two @emph{very} different things---don't
-ever get them confused.
-
-
-@end iftex
-
-
-@page
-@node Terminology
-@section Terminology
-
-@cindex terminology
-@table @dfn
-
-@item news
-@cindex news
-This is what you are supposed to use this thing for---reading news.
-News is generally fetched from a nearby @sc{nntp} server, and is
-generally publicly available to everybody.  If you post news, the entire
-world is likely to read just what you have written, and they'll all
-snigger mischievously.  Behind your back.
-
-@item mail
-@cindex mail
-Everything that's delivered to you personally is mail.  Some news/mail
-readers (like Gnus) blur the distinction between mail and news, but
-there is a difference.  Mail is private.  News is public.  Mailing is
-not posting, and replying is not following up.
-
-@item reply
-@cindex reply
-Send a mail to the person who has written what you are reading.
-
-@item follow up
-@cindex follow up
-Post an article to the current newsgroup responding to the article you
-are reading.
-
-@item backend
-@cindex backend
-Gnus gets fed articles from a number of backends, both news and mail
-backends.  Gnus does not handle the underlying media, so to speak---this
-is all done by the backends.
-
-@item native
-@cindex native
-Gnus will always use one method (and backend) as the @dfn{native}, or
-default, way of getting news.
-
-@item foreign
-@cindex foreign
-You can also have any number of foreign groups active at the same time.
-These are groups that use non-native non-secondary backends for getting
-news.
-
-@item secondary
-@cindex secondary
-Secondary backends are somewhere half-way between being native and being
-foreign, but they mostly act like they are native.
-
-@item article
-@cindex article
-A message that has been posted as news.
-
-@item mail message
-@cindex mail message
-A message that has been mailed.
-
-@item message
-@cindex message
-A mail message or news article
-
-@item head
-@cindex head
-The top part of a message, where administrative information (etc.) is
-put.
-
-@item body
-@cindex body
-The rest of an article.  Everything not in the head is in the
-body.
-
-@item header
-@cindex header
-A line from the head of an article.
-
-@item headers
-@cindex headers
-A collection of such lines, or a collection of heads.  Or even a
-collection of @sc{nov} lines.
-
-@item @sc{nov}
-@cindex nov
-When Gnus enters a group, it asks the backend for the headers of all
-unread articles in the group.  Most servers support the News OverView
-format, which is more compact and much faster to read and parse than the
-normal @sc{head} format.
-
-@item level
-@cindex levels
-Each group is subscribed at some @dfn{level} or other (1-9).  The ones
-that have a lower level are ``more'' subscribed than the groups with a
-higher level.  In fact, groups on levels 1-5 are considered
-@dfn{subscribed}; 6-7 are @dfn{unsubscribed}; 8 are @dfn{zombies}; and 9
-are @dfn{killed}.  Commands for listing groups and scanning for new
-articles will all use the numeric prefix as @dfn{working level}.
-
-@item killed groups
-@cindex killed groups
-No information on killed groups is stored or updated, which makes killed
-groups much easier to handle than subscribed groups.
-
-@item zombie groups
-@cindex zombie groups
-Just like killed groups, only slightly less dead.
-
-@item active file
-@cindex active file
-The news server has to keep track of what articles it carries, and what
-groups exist.  All this information in stored in the active file, which
-is rather large, as you might surmise.
-
-@item bogus groups
-@cindex bogus groups
-A group that exists in the @file{.newsrc} file, but isn't known to the
-server (i.e.,  it isn't in the active file), is a @emph{bogus group}.
-This means that the group probably doesn't exist (any more).
-
-@item activating
-@cindex activating groups
-The act of asking the server for info on a group and computing the
-number of unread articles is called @dfn{activating the group}.
-Un-activated groups are listed with @samp{*} in the group buffer.
-
-@item server
-@cindex server
-A machine one can connect to and get news (or mail) from.
-
-@item select method
-@cindex select method
-A structure that specifies the backend, the server and the virtual
-server settings.
-
-@item virtual server
-@cindex virtual server
-A named select method.  Since a select method defines all there is to
-know about connecting to a (physical) server, taking the thing as a
-whole is a virtual server.
-
-@item washing
-@cindex washing
-Taking a buffer and running it through a filter of some sort.  The
-result will (more often than not) be cleaner and more pleasing than the
-original.
-
-@item ephemeral groups
-@cindex ephemeral groups
-Most groups store data on what articles you have read.  @dfn{Ephemeral}
-groups are groups that will have no data stored---when you exit the
-group, it'll disappear into the aether.
-
-@item solid groups
-@cindex solid groups
-This is the opposite of ephemeral groups.  All groups listed in the
-group buffer are solid groups.
-
-@item sparse articles
-@cindex sparse articles
-These are article placeholders shown in the summary buffer when
-@code{gnus-build-sparse-threads} has been switched on.
-
-@item threading
-@cindex threading
-To put responses to articles directly after the articles they respond
-to---in a hierarchical fashion.
-
-@item root
-@cindex root
-@cindex thread root
-The first article in a thread is the root.  It is the ancestor of all
-articles in the thread.
-
-@item parent
-@cindex parent
-An article that has responses.
-
-@item child
-@cindex child
-An article that responds to a different article---its parent.
-
-@item digest
-@cindex digest
-A collection of messages in one file.  The most common digest format is
-specified by RFC1153.
-
-@end table
-
-
-@page
-@node Customization
-@section Customization
-@cindex general customization
-
-All variables are properly documented elsewhere in this manual.  This
-section is designed to give general pointers on how to customize Gnus
-for some quite common situations.
-
-@menu
-* Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
-* Slow Terminal Connection::  You run a remote Emacs.
-* Little Disk Space::         You feel that having large setup files is icky.
-* Slow Machine::              You feel like buying a faster machine.
-@end menu
-
-
-@node Slow/Expensive Connection
-@subsection Slow/Expensive @sc{nntp} Connection
-
-If you run Emacs on a machine locally, and get your news from a machine
-over some very thin strings, you want to cut down on the amount of data
-Gnus has to get from the @sc{nntp} server.
-
-@table @code
-
-@item gnus-read-active-file
-Set this to @code{nil}, which will inhibit Gnus from requesting the
-entire active file from the server.  This file is often v.  large.  You
-also have to set @code{gnus-check-new-newsgroups} and
-@code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus
-doesn't suddenly decide to fetch the active file anyway.
-
-@item gnus-nov-is-evil
-This one has to be @code{nil}.  If not, grabbing article headers from
-the @sc{nntp} server will not be very fast.  Not all @sc{nntp} servers
-support @sc{xover}; Gnus will detect this by itself.
-@end table
-
-
-@node Slow Terminal Connection
-@subsection Slow Terminal Connection
-
-Let's say you use your home computer for dialing up the system that runs
-Emacs and Gnus.  If your modem is slow, you want to reduce (as much as
-possible) the amount of data sent over the wires.
-
-@table @code
-
-@item gnus-auto-center-summary
-Set this to @code{nil} to inhibit Gnus from re-centering the summary
-buffer all the time.  If it is @code{vertical}, do only vertical
-re-centering.  If it is neither @code{nil} nor @code{vertical}, do both
-horizontal and vertical recentering.
-
-@item gnus-visible-headers
-Cut down on the headers included in the articles to the
-minimum.  You can, in fact, make do without them altogether---most of the
-useful data is in the summary buffer, anyway.  Set this variable to
-@samp{^NEVVVVER} or @samp{From:}, or whatever you feel you need.
-
-Set this hook to all the available hiding commands:
-@lisp
-(setq gnus-treat-hide-headers 'head
-      gnus-treat-hide-signature t
-      gnus-treat-hide-citation t)
-@end lisp
-
-@item gnus-use-full-window
-By setting this to @code{nil}, you can make all the windows smaller.
-While this doesn't really cut down much generally, it means that you
-have to see smaller portions of articles before deciding that you didn't
-want to read them anyway.
-
-@item gnus-thread-hide-subtree
-If this is non-@code{nil}, all threads in the summary buffer will be
-hidden initially.
-
-@item gnus-updated-mode-lines
-If this is @code{nil}, Gnus will not put information in the buffer mode
-lines, which might save some time.
-@end table
-
-
-@node Little Disk Space
-@subsection Little Disk Space
-@cindex disk space
-
-The startup files can get rather large, so you may want to cut their
-sizes a bit if you are running out of space.
-
-@table @code
-
-@item gnus-save-newsrc-file
-If this is @code{nil}, Gnus will never save @file{.newsrc}---it will
-only save @file{.newsrc.eld}.  This means that you will not be able to
-use any other newsreaders than Gnus.  This variable is @code{t} by
-default.
-
-@item gnus-read-newsrc-file
-If this is @code{nil}, Gnus will never read @file{.newsrc}---it will
-only read @file{.newsrc.eld}.  This means that you will not be able to
-use any other newsreaders than Gnus.  This variable is @code{t} by
-default.
-
-@item gnus-save-killed-list
-If this is @code{nil}, Gnus will not save the list of dead groups.  You
-should also set @code{gnus-check-new-newsgroups} to @code{ask-server}
-and @code{gnus-check-bogus-newsgroups} to @code{nil} if you set this
-variable to @code{nil}.  This variable is @code{t} by default.
-
-@end table
-
-
-@node Slow Machine
-@subsection Slow Machine
-@cindex slow machine
-
-If you have a slow machine, or are just really impatient, there are a
-few things you can do to make Gnus run faster.
-
-Set @code{gnus-check-new-newsgroups} and
-@code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster.
-
-Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
-@code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
-summary buffer faster.
-
-
-@page
-@node Troubleshooting
-@section Troubleshooting
-@cindex troubleshooting
-
-Gnus works @emph{so} well straight out of the box---I can't imagine any
-problems, really.
-
-Ahem.
-
-@enumerate
-
-@item
-Make sure your computer is switched on.
-
-@item
-Make sure that you really load the current Gnus version.  If you have
-been running @sc{gnus}, you need to exit Emacs and start it up again before
-Gnus will work.
-
-@item
-Try doing an @kbd{M-x gnus-version}.  If you get something that looks
-like @samp{Gnus v5.46; nntp 4.0} you have the right files loaded.  If,
-on the other hand, you get something like @samp{NNTP 3.x} or @samp{nntp
-flee}, you have some old @file{.el} files lying around.  Delete these.
-
-@item
-Read the help group (@kbd{G h} in the group buffer) for a FAQ and a
-how-to.
-
-@item
-@vindex max-lisp-eval-depth
-Gnus works on many recursive structures, and in some extreme (and very
-rare) cases Gnus may recurse down ``too deeply'' and Emacs will beep at
-you.  If this happens to you, set @code{max-lisp-eval-depth} to 500 or
-something like that.
-@end enumerate
-
-If all else fails, report the problem as a bug.
-
-@cindex bugs
-@cindex reporting bugs
-
-@kindex M-x gnus-bug
-@findex gnus-bug
-If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}
-command. @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
-me the backtrace.  I will fix bugs, but I can only fix them if you send
-me a precise description as to how to reproduce the bug.
-
-You really can never be too detailed in a bug report.  Always use the
-@kbd{M-x gnus-bug} command when you make bug reports, even if it creates
-a 10Kb mail each time you use it, and even if you have sent me your
-environment 500 times before.  I don't care.  I want the full info each
-time.
-
-It is also important to remember that I have no memory whatsoever.  If
-you send a bug report, and I send you a reply, and then you just send
-back ``No, it's not! Moron!'', I will have no idea what you are
-insulting me about.  Always over-explain everything.  It's much easier
-for all of us---if I don't have all the information I need, I will just
-mail you and ask for more info, and everything takes more time.
-
-If the problem you're seeing is very visual, and you can't quite explain
-it, copy the Emacs window to a file (with @code{xwd}, for instance), put
-it somewhere it can be reached, and include the URL of the picture in
-the bug report.
-
-If you just need help, you are better off asking on
-@samp{gnu.emacs.gnus}.  I'm not very helpful.
-
-@cindex gnu.emacs.gnus
-@cindex ding mailing list
-You can also ask on the ding mailing list---@samp{ding@@gnus.org}.
-Write to @samp{ding-request@@gnus.org} to subscribe.
-
-
-@page
-@node Gnus Reference Guide
-@section Gnus Reference Guide
-
-It is my hope that other people will figure out smart stuff that Gnus
-can do, and that other people will write those smart things as well.  To
-facilitate that I thought it would be a good idea to describe the inner
-workings of Gnus.  And some of the not-so-inner workings, while I'm at
-it.
-
-You can never expect the internals of a program not to change, but I
-will be defining (in some details) the interface between Gnus and its
-backends (this is written in stone), the format of the score files
-(ditto), data structures (some are less likely to change than others)
-and general methods of operation.
-
-@menu
-* Gnus Utility Functions::   Common functions and variable to use.
-* Backend Interface::        How Gnus communicates with the servers.
-* Score File Syntax::        A BNF definition of the score file standard.
-* Headers::                  How Gnus stores headers internally.
-* Ranges::                   A handy format for storing mucho numbers.
-* Group Info::               The group info format.
-* Extended Interactive::     Symbolic prefixes and stuff.
-* Emacs/XEmacs Code::        Gnus can be run under all modern Emacsen.
-* Various File Formats::     Formats of files that Gnus use.
-@end menu
-
-
-@node Gnus Utility Functions
-@subsection Gnus Utility Functions
-@cindex Gnus utility functions
-@cindex utility functions
-@cindex functions
-@cindex internal variables
-
-When writing small functions to be run from hooks (and stuff), it's
-vital to have access to the Gnus internal functions and variables.
-Below is a list of the most common ones.
-
-@table @code
-
-@item gnus-newsgroup-name
-@vindex gnus-newsgroup-name
-This variable holds the name of the current newsgroup.
-
-@item gnus-find-method-for-group
-@findex gnus-find-method-for-group
-A function that returns the select method for @var{group}.
-
-@item gnus-group-real-name
-@findex gnus-group-real-name
-Takes a full (prefixed) Gnus group name, and returns the unprefixed
-name.
-
-@item gnus-group-prefixed-name
-@findex gnus-group-prefixed-name
-Takes an unprefixed group name and a select method, and returns the full
-(prefixed) Gnus group name.
-
-@item gnus-get-info
-@findex gnus-get-info
-Returns the group info list for @var{group}.
-
-@item gnus-group-unread
-@findex gnus-group-unread
-The number of unread articles in @var{group}, or @code{t} if that is
-unknown.
-
-@item gnus-active
-@findex gnus-active
-The active entry for @var{group}.
-
-@item gnus-set-active
-@findex gnus-set-active
-Set the active entry for @var{group}.
-
-@item gnus-add-current-to-buffer-list
-@findex gnus-add-current-to-buffer-list
-Adds the current buffer to the list of buffers to be killed on Gnus
-exit.
-
-@item gnus-continuum-version
-@findex gnus-continuum-version
-Takes a Gnus version string as a parameter and returns a floating point
-number.  Earlier versions will always get a lower number than later
-versions.
-
-@item gnus-group-read-only-p
-@findex gnus-group-read-only-p
-Says whether @var{group} is read-only or not.
-
-@item gnus-news-group-p
-@findex gnus-news-group-p
-Says whether @var{group} came from a news backend.
-
-@item gnus-ephemeral-group-p
-@findex gnus-ephemeral-group-p
-Says whether @var{group} is ephemeral or not.
-
-@item gnus-server-to-method
-@findex gnus-server-to-method
-Returns the select method corresponding to @var{server}.
-
-@item gnus-server-equal
-@findex gnus-server-equal
-Says whether two virtual servers are equal.
-
-@item gnus-group-native-p
-@findex gnus-group-native-p
-Says whether @var{group} is native or not.
-
-@item gnus-group-secondary-p
-@findex gnus-group-secondary-p
-Says whether @var{group} is secondary or not.
-
-@item gnus-group-foreign-p
-@findex gnus-group-foreign-p
-Says whether @var{group} is foreign or not.
-
-@item group-group-find-parameter
-@findex group-group-find-parameter
-Returns the parameter list of @var{group}.  If given a second parameter,
-returns the value of that parameter for @var{group}.
-
-@item gnus-group-set-parameter
-@findex gnus-group-set-parameter
-Takes three parameters; @var{group}, @var{parameter} and @var{value}.
-
-@item gnus-narrow-to-body
-@findex gnus-narrow-to-body
-Narrows the current buffer to the body of the article.
-
-@item gnus-check-backend-function
-@findex gnus-check-backend-function
-Takes two parameters, @var{function} and @var{group}.  If the backend
-@var{group} comes from supports @var{function}, return non-@code{nil}.
-
-@lisp
-(gnus-check-backend-function "request-scan" "nnml:misc")
-@result{} t
-@end lisp
-
-@item gnus-read-method
-@findex gnus-read-method
-Prompts the user for a select method.
-
-@end table
-
-
-@node Backend Interface
-@subsection Backend Interface
-
-Gnus doesn't know anything about @sc{nntp}, spools, mail or virtual
-groups.  It only knows how to talk to @dfn{virtual servers}.  A virtual
-server is a @dfn{backend} and some @dfn{backend variables}.  As examples
-of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}.  As
-examples of the latter we have @code{nntp-port-number} and
-@code{nnmbox-directory}.
-
-When Gnus asks for information from a backend---say @code{nntp}---on
-something, it will normally include a virtual server name in the
-function parameters.  (If not, the backend should use the ``current''
-virtual server.)  For instance, @code{nntp-request-list} takes a virtual
-server as its only (optional) parameter.  If this virtual server hasn't
-been opened, the function should fail.
-
-Note that a virtual server name has no relation to some physical server
-name.  Take this example:
-
-@lisp
-(nntp "odd-one"
-      (nntp-address "ifi.uio.no")
-      (nntp-port-number 4324))
-@end lisp
-
-Here the virtual server name is @samp{odd-one} while the name of
-the physical server is @samp{ifi.uio.no}.
-
-The backends should be able to switch between several virtual servers.
-The standard backends implement this by keeping an alist of virtual
-server environments that they pull down/push up when needed.
-
-There are two groups of interface functions: @dfn{required functions},
-which must be present, and @dfn{optional functions}, which Gnus will
-always check for presence before attempting to call 'em.
-
-All these functions are expected to return data in the buffer
-@code{nntp-server-buffer} (@samp{ *nntpd*}), which is somewhat
-unfortunately named, but we'll have to live with it.  When I talk about
-@dfn{resulting data}, I always refer to the data in that buffer.  When I
-talk about @dfn{return value}, I talk about the function value returned by
-the function call.  Functions that fail should return @code{nil} as the
-return value.
-
-Some backends could be said to be @dfn{server-forming} backends, and
-some might be said not to be.  The latter are backends that generally
-only operate on one group at a time, and have no concept of ``server''
--- they have a group, and they deliver info on that group and nothing
-more.
-
-In the examples and definitions I will refer to the imaginary backend
-@code{nnchoke}.
-
-@cindex @code{nnchoke}
-
-@menu
-* Required Backend Functions::        Functions that must be implemented.
-* Optional Backend Functions::        Functions that need not be implemented.
-* Error Messaging::                   How to get messages and report errors.
-* Writing New Backends::              Extending old backends.
-* Hooking New Backends Into Gnus::    What has to be done on the Gnus end.
-* Mail-like Backends::                Some tips on mail backends.
-@end menu
-
-
-@node Required Backend Functions
-@subsubsection Required Backend Functions
-
-@table @code
-
-@item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)
-
-@var{articles} is either a range of article numbers or a list of
-@code{Message-ID}s.  Current backends do not fully support either---only
-sequences (lists) of article numbers, and most backends do not support
-retrieval of @code{Message-ID}s.  But they should try for both.
-
-The result data should either be HEADs or NOV lines, and the result
-value should either be @code{headers} or @code{nov} to reflect this.
-This might later be expanded to @code{various}, which will be a mixture
-of HEADs and NOV lines, but this is currently not supported by Gnus.
-
-If @var{fetch-old} is non-@code{nil} it says to try fetching "extra
-headers", in some meaning of the word.  This is generally done by
-fetching (at most) @var{fetch-old} extra headers less than the smallest
-article number in @code{articles}, and filling the gaps as well.  The
-presence of this parameter can be ignored if the backend finds it
-cumbersome to follow the request.  If this is non-@code{nil} and not a
-number, do maximum fetches.
-
-Here's an example HEAD:
-
-@example
-221 1056 Article retrieved.
-Path: ifi.uio.no!sturles
-From: sturles@@ifi.uio.no (Sturle Sunde)
-Newsgroups: ifi.discussion
-Subject: Re: Something very droll
-Date: 27 Oct 1994 14:02:57 +0100
-Organization: Dept. of Informatics, University of Oslo, Norway
-Lines: 26
-Message-ID: <38o8e1$a0o@@holmenkollen.ifi.uio.no>
-References: <38jdmq$4qu@@visbur.ifi.uio.no>
-NNTP-Posting-Host: holmenkollen.ifi.uio.no
-.
-@end example
-
-So a @code{headers} return value would imply that there's a number of
-these in the data buffer.
-
-Here's a BNF definition of such a buffer:
-
-@example
-headers        = *head
-head           = error / valid-head
-error-message  = [ "4" / "5" ] 2number " " <error message> eol
-valid-head     = valid-message *header "." eol
-valid-message  = "221 " <number> " Article retrieved." eol
-header         = <text> eol
-@end example
-
-If the return value is @code{nov}, the data buffer should contain
-@dfn{network overview database} lines.  These are basically fields
-separated by tabs.
-
-@example
-nov-buffer = *nov-line
-nov-line   = 8*9 [ field <TAB> ] eol
-field      = <text except TAB>
-@end example
-
-For a closer look at what should be in those fields,
-@pxref{Headers}.
-
-
-@item (nnchoke-open-server SERVER &optional DEFINITIONS)
-
-@var{server} is here the virtual server name.  @var{definitions} is a
-list of @code{(VARIABLE VALUE)} pairs that define this virtual server.
-
-If the server can't be opened, no error should be signaled.  The backend
-may then choose to refuse further attempts at connecting to this
-server.  In fact, it should do so.
-
-If the server is opened already, this function should return a
-non-@code{nil} value.  There should be no data returned.
-
-
-@item (nnchoke-close-server &optional SERVER)
-
-Close connection to @var{server} and free all resources connected
-to it.  Return @code{nil} if the server couldn't be closed for some
-reason.
-
-There should be no data returned.
-
-
-@item (nnchoke-request-close)
-
-Close connection to all servers and free all resources that the backend
-have reserved.  All buffers that have been created by that backend
-should be killed.  (Not the @code{nntp-server-buffer}, though.)  This
-function is generally only called when Gnus is shutting down.
-
-There should be no data returned.
-
-
-@item (nnchoke-server-opened &optional SERVER)
-
-If @var{server} is the current virtual server, and the connection to the
-physical server is alive, then this function should return a
-non-@code{nil} vlue.  This function should under no circumstances
-attempt to reconnect to a server we have lost connection to.
-
-There should be no data returned.
-
-
-@item (nnchoke-status-message &optional SERVER)
-
-This function should return the last error message from @var{server}.
-
-There should be no data returned.
-
-
-@item (nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER)
-
-The result data from this function should be the article specified by
-@var{article}.  This might either be a @code{Message-ID} or a number.
-It is optional whether to implement retrieval by @code{Message-ID}, but
-it would be nice if that were possible.
-
-If @var{to-buffer} is non-@code{nil}, the result data should be returned
-in this buffer instead of the normal data buffer.  This is to make it
-possible to avoid copying large amounts of data from one buffer to
-another, while Gnus mainly requests articles to be inserted directly
-into its article buffer.
-
-If it is at all possible, this function should return a cons cell where
-the @code{car} is the group name the article was fetched from, and the @code{cdr} is
-the article number.  This will enable Gnus to find out what the real
-group and article numbers are when fetching articles by
-@code{Message-ID}.  If this isn't possible, @code{t} should be returned
-on successful article retrieval.
-
-
-@item (nnchoke-request-group GROUP &optional SERVER FAST)
-
-Get data on @var{group}.  This function also has the side effect of
-making @var{group} the current group.
-
-If @var{fast}, don't bother to return useful data, just make @var{group}
-the current group.
-
-Here's an example of some result data and a definition of the same:
-
-@example
-211 56 1000 1059 ifi.discussion
-@end example
-
-The first number is the status, which should be 211.  Next is the
-total number of articles in the group, the lowest article number, the
-highest article number, and finally the group name.  Note that the total
-number of articles may be less than one might think while just
-considering the highest and lowest article numbers, but some articles
-may have been canceled.  Gnus just discards the total-number, so
-whether one should take the bother to generate it properly (if that is a
-problem) is left as an exercise to the reader.
-
-@example
-group-status = [ error / info ] eol
-error        = [ "4" / "5" ] 2<number> " " <Error message>
-info         = "211 " 3* [ <number> " " ] <string>
-@end example
-
-
-@item (nnchoke-close-group GROUP &optional SERVER)
-
-Close @var{group} and free any resources connected to it.  This will be
-a no-op on most backends.
-
-There should be no data returned.
-
-
-@item (nnchoke-request-list &optional SERVER)
-
-Return a list of all groups available on @var{server}.  And that means
-@emph{all}.
-
-Here's an example from a server that only carries two groups:
-
-@example
-ifi.test 0000002200 0000002000 y
-ifi.discussion 3324 3300 n
-@end example
-
-On each line we have a group name, then the highest article number in
-that group, the lowest article number, and finally a flag.
-
-@example
-active-file = *active-line
-active-line = name " " <number> " " <number> " " flags eol
-name        = <string>
-flags       = "n" / "y" / "m" / "x" / "j" / "=" name
-@end example
-
-The flag says whether the group is read-only (@samp{n}), is moderated
-(@samp{m}), is dead (@samp{x}), is aliased to some other group
-(@samp{=other-group}) or none of the above (@samp{y}).
-
-
-@item (nnchoke-request-post &optional SERVER)
-
-This function should post the current buffer.  It might return whether
-the posting was successful or not, but that's not required.  If, for
-instance, the posting is done asynchronously, it has generally not been
-completed by the time this function concludes.  In that case, this
-function should set up some kind of sentinel to beep the user loud and
-clear if the posting could not be completed.
-
-There should be no result data from this function.
-
-@end table
-
-
-@node Optional Backend Functions
-@subsubsection Optional Backend Functions
-
-@table @code
-
-@item (nnchoke-retrieve-groups GROUPS &optional SERVER)
-
-@var{groups} is a list of groups, and this function should request data
-on all those groups.  How it does it is of no concern to Gnus, but it
-should attempt to do this in a speedy fashion.
-
-The return value of this function can be either @code{active} or
-@code{group}, which says what the format of the result data is.  The
-former is in the same format as the data from
-@code{nnchoke-request-list}, while the latter is a buffer full of lines
-in the same format as @code{nnchoke-request-group} gives.
-
-@example
-group-buffer = *active-line / *group-status
-@end example
-
-
-@item (nnchoke-request-update-info GROUP INFO &optional SERVER)
-
-A Gnus group info (@pxref{Group Info}) is handed to the backend for
-alterations.  This comes in handy if the backend really carries all the
-information (as is the case with virtual and imap groups).  This
-function should destructively alter the info to suit its needs, and
-should return the (altered) group info.
-
-There should be no result data from this function.
-
-
-@item (nnchoke-request-type GROUP &optional ARTICLE)
-
-When the user issues commands for ``sending news'' (@kbd{F} in the
-summary buffer, for instance), Gnus has to know whether the article the
-user is following up on is news or mail.  This function should return
-@code{news} if @var{article} in @var{group} is news, @code{mail} if it
-is mail and @code{unknown} if the type can't be decided.  (The
-@var{article} parameter is necessary in @code{nnvirtual} groups which
-might very well combine mail groups and news groups.)  Both @var{group}
-and @var{article} may be @code{nil}.
-
-There should be no result data from this function.
-
-
-@item (nnchoke-request-set-mark GROUP ACTION &optional SERVER)
-
-Set/remove/add marks on articles. Normally Gnus handles the article
-marks (such as read, ticked, expired etc) internally, and store them in
-@code{~/.newsrc.eld}. Some backends (such as IMAP) however carry all
-information about the articles on the server, so Gnus need to propagate
-the mark information to the server.
-
-ACTION is a list of mark setting requests, having this format:
-
-@example
-(RANGE ACTION MARK)
-@end example
-
-Range is a range of articles you wish to update marks on. Action is
-@code{set}, @code{add} or @code{del}, respectively used for removing all
-existing marks and setting them as specified, adding (preserving the
-marks not mentioned) mark and removing (preserving the marks not
-mentioned) marks. Mark is a list of marks; where each mark is a
-symbol. Currently used marks are @code{read}, @code{tick}, @code{reply},
-@code{expire}, @code{killed}, @code{dormant}, @code{save},
-@code{download} and @code{unsend}, but your backend should, if possible,
-not limit itself to theese.
-
-Given contradictory actions, the last action in the list should be the
-effective one. That is, if your action contains a request to add the
-@code{tick} mark on article 1 and, later in the list, a request to
-remove the mark on the same article, the mark should in fact be removed.
-
-An example action list:
-
-@example
-(((5 12 30) 'del '(tick))
- ((10 . 90) 'add '(read expire))
- ((92 94) 'del '(read)))
-@end example
-
-The function should return a range of articles it wasn't able to set the
-mark on (currently not used for anything).
-
-There should be no result data from this function.
-
-@item (nnchoke-request-update-mark GROUP ARTICLE MARK)
-
-If the user tries to set a mark that the backend doesn't like, this
-function may change the mark.  Gnus will use whatever this function
-returns as the mark for @var{article} instead of the original
-@var{mark}.  If the backend doesn't care, it must return the original
-@var{mark}, and not @code{nil} or any other type of garbage.
-
-The only use for this I can see is what @code{nnvirtual} does with
-it---if a component group is auto-expirable, marking an article as read
-in the virtual group should result in the article being marked as
-expirable.
-
-There should be no result data from this function.
-
-
-@item (nnchoke-request-scan &optional GROUP SERVER)
-
-This function may be called at any time (by Gnus or anything else) to
-request that the backend check for incoming articles, in one way or
-another.  A mail backend will typically read the spool file or query the
-POP server when this function is invoked.  The @var{group} doesn't have
-to be heeded---if the backend decides that it is too much work just
-scanning for a single group, it may do a total scan of all groups.  It
-would be nice, however, to keep things local if that's practical.
-
-There should be no result data from this function.
-
-
-@item (nnchoke-request-group-description GROUP &optional SERVER)
-
-The result data from this function should be a description of
-@var{group}.
-
-@example
-description-line = name <TAB> description eol
-name             = <string>
-description      = <text>
-@end example
-
-@item (nnchoke-request-list-newsgroups &optional SERVER)
-
-The result data from this function should be the description of all
-groups available on the server.
-
-@example
-description-buffer = *description-line
-@end example
-
-
-@item (nnchoke-request-newgroups DATE &optional SERVER)
-
-The result data from this function should be all groups that were
-created after @samp{date}, which is in normal human-readable date
-format.  The data should be in the active buffer format.
-
-
-@item (nnchoke-request-create-group GROUP &optional SERVER)
-
-This function should create an empty group with name @var{group}.
-
-There should be no return data.
-
-
-@item (nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE)
-
-This function should run the expiry process on all articles in the
-@var{articles} range (which is currently a simple list of article
-numbers.)  It is left up to the backend to decide how old articles
-should be before they are removed by this function.  If @var{force} is
-non-@code{nil}, all @var{articles} should be deleted, no matter how new
-they are.
-
-This function should return a list of articles that it did not/was not
-able to delete.
-
-There should be no result data returned.
-
-
-@item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM
-&optional LAST)
-
-This function should move @var{article} (which is a number) from
-@var{group} by calling @var{accept-form}.
-
-This function should ready the article in question for moving by
-removing any header lines it has added to the article, and generally
-should ``tidy up'' the article.  Then it should @code{eval}
-@var{accept-form} in the buffer where the ``tidy'' article is.  This
-will do the actual copying.  If this @code{eval} returns a
-non-@code{nil} value, the article should be removed.
-
-If @var{last} is @code{nil}, that means that there is a high likelihood
-that there will be more requests issued shortly, so that allows some
-optimizations.
-
-The function should return a cons where the @code{car} is the group name and
-the @code{cdr} is the article number that the article was entered as.
-
-There should be no data returned.
-
-
-@item (nnchoke-request-accept-article GROUP &optional SERVER LAST)
-
-This function takes the current buffer and inserts it into @var{group}.
-If @var{last} in @code{nil}, that means that there will be more calls to
-this function in short order.
-
-The function should return a cons where the @code{car} is the group name and
-the @code{cdr} is the article number that the article was entered as.
-
-There should be no data returned.
-
-
-@item (nnchoke-request-replace-article ARTICLE GROUP BUFFER)
-
-This function should remove @var{article} (which is a number) from
-@var{group} and insert @var{buffer} there instead.
-
-There should be no data returned.
-
-
-@item (nnchoke-request-delete-group GROUP FORCE &optional SERVER)
-
-This function should delete @var{group}.  If @var{force}, it should
-really delete all the articles in the group, and then delete the group
-itself.  (If there is such a thing as ``the group itself''.)
-
-There should be no data returned.
-
-
-@item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER)
-
-This function should rename @var{group} into @var{new-name}.  All
-articles in @var{group} should move to @var{new-name}.
-
-There should be no data returned.
-
-@end table
-
-
-@node Error Messaging
-@subsubsection Error Messaging
-
-@findex nnheader-report
-@findex nnheader-get-report
-The backends should use the function @code{nnheader-report} to report
-error conditions---they should not raise errors when they aren't able to
-perform a request.  The first argument to this function is the backend
-symbol, and the rest are interpreted as arguments to @code{format} if
-there are multiple of them, or just a string if there is one of them.
-This function must always returns @code{nil}.
-
-@lisp
-(nnheader-report 'nnchoke "You did something totally bogus")
-
-(nnheader-report 'nnchoke "Could not request group %s" group)
-@end lisp
-
-Gnus, in turn, will call @code{nnheader-get-report} when it gets a
-@code{nil} back from a server, and this function returns the most
-recently reported message for the backend in question.  This function
-takes one argument---the server symbol.
-
-Internally, these functions access @var{backend}@code{-status-string},
-so the @code{nnchoke} backend will have its error message stored in
-@code{nnchoke-status-string}.
-
-
-@node Writing New Backends
-@subsubsection Writing New Backends
-
-Many backends are quite similar.  @code{nnml} is just like
-@code{nnspool}, but it allows you to edit the articles on the server.
-@code{nnmh} is just like @code{nnml}, but it doesn't use an active file,
-and it doesn't maintain overview databases.  @code{nndir} is just like
-@code{nnml}, but it has no concept of ``groups'', and it doesn't allow
-editing articles.
-
-It would make sense if it were possible to ``inherit'' functions from
-backends when writing new backends.  And, indeed, you can do that if you
-want to.  (You don't have to if you don't want to, of course.)
-
-All the backends declare their public variables and functions by using a
-package called @code{nnoo}.
-
-To inherit functions from other backends (and allow other backends to
-inherit functions from the current backend), you should use the
-following macros:
-
-@table @code
-
-@item nnoo-declare
-This macro declares the first parameter to be a child of the subsequent
-parameters.  For instance:
-
-@lisp
-(nnoo-declare nndir
-  nnml nnmh)
-@end lisp
-
-@code{nndir} has declared here that it intends to inherit functions from
-both @code{nnml} and @code{nnmh}.
-
-@item defvoo
-This macro is equivalent to @code{defvar}, but registers the variable as
-a public server variable.  Most state-oriented variables should be
-declared with @code{defvoo} instead of @code{defvar}.
-
-In addition to the normal @code{defvar} parameters, it takes a list of
-variables in the parent backends to map the variable to when executing
-a function in those backends.
-
-@lisp
-(defvoo nndir-directory nil
-  "Where nndir will look for groups."
-  nnml-current-directory nnmh-current-directory)
-@end lisp
-
-This means that @code{nnml-current-directory} will be set to
-@code{nndir-directory} when an @code{nnml} function is called on behalf
-of @code{nndir}.  (The same with @code{nnmh}.)
-
-@item nnoo-define-basics
-This macro defines some common functions that almost all backends should
-have.
-
-@example
-(nnoo-define-basics nndir)
-@end example
-
-@item deffoo
-This macro is just like @code{defun} and takes the same parameters.  In
-addition to doing the normal @code{defun} things, it registers the
-function as being public so that other backends can inherit it.
-
-@item nnoo-map-functions
-This macro allows mapping of functions from the current backend to
-functions from the parent backends.
-
-@example
-(nnoo-map-functions nndir
-  (nnml-retrieve-headers 0 nndir-current-group 0 0)
-  (nnmh-request-article 0 nndir-current-group 0 0))
-@end example
-
-This means that when @code{nndir-retrieve-headers} is called, the first,
-third, and fourth parameters will be passed on to
-@code{nnml-retrieve-headers}, while the second parameter is set to the
-value of @code{nndir-current-group}.
-
-@item nnoo-import
-This macro allows importing functions from backends.  It should be the
-last thing in the source file, since it will only define functions that
-haven't already been defined.
-
-@example
-(nnoo-import nndir
-  (nnmh
-   nnmh-request-list
-   nnmh-request-newgroups)
-  (nnml))
-@end example
-
-This means that calls to @code{nndir-request-list} should just be passed
-on to @code{nnmh-request-list}, while all public functions from
-@code{nnml} that haven't been defined in @code{nndir} yet should be
-defined now.
-
-@end table
-
-Below is a slightly shortened version of the @code{nndir} backend.
-
-@lisp
-;;; nndir.el --- single directory newsgroup access for Gnus
-;; Copyright (C) 1995,96 Free Software Foundation, Inc.
-
-;;; Code:
-
-(require 'nnheader)
-(require 'nnmh)
-(require 'nnml)
-(require 'nnoo)
-(eval-when-compile (require 'cl))
-
-(nnoo-declare nndir
-  nnml nnmh)
-
-(defvoo nndir-directory nil
-  "Where nndir will look for groups."
-  nnml-current-directory nnmh-current-directory)
-
-(defvoo nndir-nov-is-evil nil
-  "*Non-nil means that nndir will never retrieve NOV headers."
-  nnml-nov-is-evil)
-
-(defvoo nndir-current-group "" nil nnml-current-group nnmh-current-group)
-(defvoo nndir-top-directory nil nil nnml-directory nnmh-directory)
-(defvoo nndir-get-new-mail nil nil nnml-get-new-mail nnmh-get-new-mail)
-
-(defvoo nndir-status-string "" nil nnmh-status-string)
-(defconst nndir-version "nndir 1.0")
-
-;;; Interface functions.
-
-(nnoo-define-basics nndir)
-
-(deffoo nndir-open-server (server &optional defs)
-  (setq nndir-directory
-        (or (cadr (assq 'nndir-directory defs))
-            server))
-  (unless (assq 'nndir-directory defs)
-    (push `(nndir-directory ,server) defs))
-  (push `(nndir-current-group
-          ,(file-name-nondirectory (directory-file-name nndir-directory)))
-        defs)
-  (push `(nndir-top-directory
-          ,(file-name-directory (directory-file-name nndir-directory)))
-        defs)
-  (nnoo-change-server 'nndir server defs))
-
-(nnoo-map-functions nndir
-  (nnml-retrieve-headers 0 nndir-current-group 0 0)
-  (nnmh-request-article 0 nndir-current-group 0 0)
-  (nnmh-request-group nndir-current-group 0 0)
-  (nnmh-close-group nndir-current-group 0))
-
-(nnoo-import nndir
-  (nnmh
-   nnmh-status-message
-   nnmh-request-list
-   nnmh-request-newgroups))
-
-(provide 'nndir)
-@end lisp
-
-
-@node Hooking New Backends Into Gnus
-@subsubsection Hooking New Backends Into Gnus
-
-@vindex gnus-valid-select-methods
-Having Gnus start using your new backend is rather easy---you just
-declare it with the @code{gnus-declare-backend} functions.  This will
-enter the backend into the @code{gnus-valid-select-methods} variable.
-
-@code{gnus-declare-backend} takes two parameters---the backend name and
-an arbitrary number of @dfn{abilities}.
-
-Here's an example:
-
-@lisp
-(gnus-declare-backend "nnchoke" 'mail 'respool 'address)
-@end lisp
-
-The abilities can be:
-
-@table @code
-@item mail
-This is a mailish backend---followups should (probably) go via mail.
-@item post
-This is a newsish backend---followups should (probably) go via news.
-@item post-mail
-This backend supports both mail and news.
-@item none
-This is neither a post nor mail backend---it's something completely
-different.
-@item respool
-It supports respooling---or rather, it is able to modify its source
-articles and groups.
-@item address
-The name of the server should be in the virtual server name.  This is
-true for almost all backends.
-@item prompt-address
-The user should be prompted for an address when doing commands like
-@kbd{B} in the group buffer.  This is true for backends like
-@code{nntp}, but not @code{nnmbox}, for instance.
-@end table
-
-
-@node Mail-like Backends
-@subsubsection Mail-like Backends
-
-One of the things that separate the mail backends from the rest of the
-backends is the heavy dependence by the mail backends on common
-functions in @file{nnmail.el}.  For instance, here's the definition of
-@code{nnml-request-scan}:
-
-@lisp
-(deffoo nnml-request-scan (&optional group server)
-  (setq nnml-article-file-alist nil)
-  (nnmail-get-new-mail 'nnml 'nnml-save-nov nnml-directory group))
-@end lisp
-
-It simply calls @code{nnmail-get-new-mail} with a few parameters,
-and @code{nnmail} takes care of all the moving and splitting of the
-mail.
-
-This function takes four parameters.
-
-@table @var
-@item method
-This should be a symbol to designate which backend is responsible for
-the call.
-
-@item exit-function
-This function should be called after the splitting has been performed.
-
-@item temp-directory
-Where the temporary files should be stored.
-
-@item group
-This optional argument should be a group name if the splitting is to be
-performed for one group only.
-@end table
-
-@code{nnmail-get-new-mail} will call @var{backend}@code{-save-mail} to
-save each article.  @var{backend}@code{-active-number} will be called to
-find the article number assigned to this article.
-
-The function also uses the following variables:
-@var{backend}@code{-get-new-mail} (to see whether to get new mail for
-this backend); and @var{backend}@code{-group-alist} and
-@var{backend}@code{-active-file} to generate the new active file.
-@var{backend}@code{-group-alist} should be a group-active alist, like
-this:
-
-@example
-(("a-group" (1 . 10))
- ("some-group" (34 . 39)))
-@end example
-
-
-@node Score File Syntax
-@subsection Score File Syntax
-
-Score files are meant to be easily parseable, but yet extremely
-mallable.   It was decided that something that had the same read syntax
-as an Emacs Lisp list would fit that spec.
-
-Here's a typical score file:
-
-@lisp
-(("summary"
-  ("win95" -10000 nil s)
-  ("Gnus"))
- ("from"
-  ("Lars" -1000))
- (mark -100))
-@end lisp
-
-BNF definition of a score file:
-
-@example
-score-file       = "" / "(" *element ")"
-element          = rule / atom
-rule             = string-rule / number-rule / date-rule
-string-rule      = "(" quote string-header quote space *string-match ")"
-number-rule      = "(" quote number-header quote space *number-match ")"
-date-rule        = "(" quote date-header quote space *date-match ")"
-quote            = <ascii 34>
-string-header    = "subject" / "from" / "references" / "message-id" /
-                   "xref" / "body" / "head" / "all" / "followup"
-number-header    = "lines" / "chars"
-date-header      = "date"
-string-match     = "(" quote <string> quote [ "" / [ space score [ "" /
-                   space date [ "" / [ space string-match-t ] ] ] ] ] ")"
-score            = "nil" / <integer>
-date             = "nil" / <natural number>
-string-match-t   = "nil" / "s" / "substring" / "S" / "Substring" /
-                   "r" / "regex" / "R" / "Regex" /
-                   "e" / "exact" / "E" / "Exact" /
-                   "f" / "fuzzy" / "F" / "Fuzzy"
-number-match     = "(" <integer> [ "" / [ space score [ "" /
-                   space date [ "" / [ space number-match-t ] ] ] ] ] ")"
-number-match-t   = "nil" / "=" / "<" / ">" / ">=" / "<="
-date-match       = "(" quote <string> quote [ "" / [ space score [ "" /
-                   space date [ "" / [ space date-match-t ] ] ] ] ")"
-date-match-t     = "nil" / "at" / "before" / "after"
-atom             = "(" [ required-atom / optional-atom ] ")"
-required-atom    = mark / expunge / mark-and-expunge / files /
-                   exclude-files / read-only / touched
-optional-atom    = adapt / local / eval
-mark             = "mark" space nil-or-number
-nil-or-number    = "nil" / <integer>
-expunge          = "expunge" space nil-or-number
-mark-and-expunge = "mark-and-expunge" space nil-or-number
-files            = "files" *[ space <string> ]
-exclude-files    = "exclude-files" *[ space <string> ]
-read-only        = "read-only" [ space "nil" / space "t" ]
-adapt            = "adapt" [ space "ignore" / space "t" / space adapt-rule ]
-adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
-local            = "local" *[ space "(" <string> space <form> ")" ]
-eval             = "eval" space <form>
-space            = *[ " " / <TAB> / <NEWLINE> ]
-@end example
-
-Any unrecognized elements in a score file should be ignored, but not
-discarded.
-
-As you can see, white space is needed, but the type and amount of white
-space is irrelevant.  This means that formatting of the score file is
-left up to the programmer---if it's simpler to just spew it all out on
-one looong line, then that's ok.
-
-The meaning of the various atoms are explained elsewhere in this
-manual (@pxref{Score File Format}).
-
-
-@node Headers
-@subsection Headers
-
-Internally Gnus uses a format for storing article headers that
-corresponds to the @sc{nov} format in a mysterious fashion.  One could
-almost suspect that the author looked at the @sc{nov} specification and
-just shamelessly @emph{stole} the entire thing, and one would be right.
-
-@dfn{Header} is a severely overloaded term.  ``Header'' is used in
-RFC1036 to talk about lines in the head of an article (e.g.,
-@code{From}).  It is used by many people as a synonym for
-``head''---``the header and the body''.  (That should be avoided, in my
-opinion.)  And Gnus uses a format internally that it calls ``header'',
-which is what I'm talking about here.  This is a 9-element vector,
-basically, with each header (ouch) having one slot.
-
-These slots are, in order: @code{number}, @code{subject}, @code{from},
-@code{date}, @code{id}, @code{references}, @code{chars}, @code{lines},
-@code{xref}, and @code{extra}.  There are macros for accessing and
-setting these slots---they all have predictable names beginning with
-@code{mail-header-} and @code{mail-header-set-}, respectively.
-
-All these slots contain strings, except the @code{extra} slot, which
-contains an alist of header/value pairs (@pxref{To From Newsgroups}).
-
-
-@node Ranges
-@subsection Ranges
-
-@sc{gnus} introduced a concept that I found so useful that I've started
-using it a lot and have elaborated on it greatly.
-
-The question is simple: If you have a large amount of objects that are
-identified by numbers (say, articles, to take a @emph{wild} example)
-that you want to qualify as being ``included'', a normal sequence isn't
-very useful.  (A 200,000 length sequence is a bit long-winded.)
-
-The solution is as simple as the question: You just collapse the
-sequence.
-
-@example
-(1 2 3 4 5 6 10 11 12)
-@end example
-
-is transformed into
-
-@example
-((1 . 6) (10 . 12))
-@end example
-
-To avoid having those nasty @samp{(13 . 13)} elements to denote a
-lonesome object, a @samp{13} is a valid element:
-
-@example
-((1 . 6) 7 (10 . 12))
-@end example
-
-This means that comparing two ranges to find out whether they are equal
-is slightly tricky:
-
-@example
-((1 . 5) 7 8 (10 . 12))
-@end example
-
-and
-
-@example
-((1 . 5) (7 . 8) (10 . 12))
-@end example
-
-are equal.  In fact, any non-descending list is a range:
-
-@example
-(1 2 3 4 5)
-@end example
-
-is a perfectly valid range, although a pretty long-winded one.  This is
-also valid:
-
-@example
-(1 . 5)
-@end example
-
-and is equal to the previous range.
-
-Here's a BNF definition of ranges.  Of course, one must remember the
-semantic requirement that the numbers are non-descending.  (Any number
-of repetition of the same number is allowed, but apt to disappear in
-range handling.)
-
-@example
-range           = simple-range / normal-range
-simple-range    = "(" number " . " number ")"
-normal-range    = "(" start-contents ")"
-contents        = "" / simple-range *[ " " contents ] /
-                  number *[ " " contents ]
-@end example
-
-Gnus currently uses ranges to keep track of read articles and article
-marks.  I plan on implementing a number of range operators in C if The
-Powers That Be are willing to let me.  (I haven't asked yet, because I
-need to do some more thinking on what operators I need to make life
-totally range-based without ever having to convert back to normal
-sequences.)
-
-
-@node Group Info
-@subsection Group Info
-
-Gnus stores all permanent info on groups in a @dfn{group info} list.
-This list is from three to six elements (or more) long and exhaustively
-describes the group.
-
-Here are two example group infos; one is a very simple group while the
-second is a more complex one:
-
-@example
-("no.group" 5 ((1 . 54324)))
-
-("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
-                ((tick (15 . 19)) (replied 3 6 (19 . 3)))
-                (nnml "")
-                ((auto-expire . t) (to-address . "ding@@gnus.org")))
-@end example
-
-The first element is the @dfn{group name}---as Gnus knows the group,
-anyway.  The second element is the @dfn{subscription level}, which
-normally is a small integer.  (It can also be the @dfn{rank}, which is a
-cons cell where the @code{car} is the level and the @code{cdr} is the
-score.)  The third element is a list of ranges of read articles.  The
-fourth element is a list of lists of article marks of various kinds.
-The fifth element is the select method (or virtual server, if you like).
-The sixth element is a list of @dfn{group parameters}, which is what
-this section is about.
-
-Any of the last three elements may be missing if they are not required.
-In fact, the vast majority of groups will normally only have the first
-three elements, which saves quite a lot of cons cells.
-
-Here's a BNF definition of the group info format:
-
-@example
-info          = "(" group space ralevel space read
-                [ "" / [ space marks-list [ "" / [ space method [ "" /
-                space parameters ] ] ] ] ] ")"
-group         = quote <string> quote
-ralevel       = rank / level
-level         = <integer in the range of 1 to inf>
-rank          = "(" level "." score ")"
-score         = <integer in the range of 1 to inf>
-read          = range
-marks-lists   = nil / "(" *marks ")"
-marks         = "(" <string> range ")"
-method        = "(" <string> *elisp-forms ")"
-parameters    = "(" *elisp-forms ")"
-@end example
-
-Actually that @samp{marks} rule is a fib.  A @samp{marks} is a
-@samp{<string>} consed on to a @samp{range}, but that's a bitch to say
-in pseudo-BNF.
-
-If you have a Gnus info and want to access the elements, Gnus offers a
-series of macros for getting/setting these elements.
-
-@table @code
-@item gnus-info-group
-@itemx gnus-info-set-group
-@findex gnus-info-group
-@findex gnus-info-set-group
-Get/set the group name.
-
-@item gnus-info-rank
-@itemx gnus-info-set-rank
-@findex gnus-info-rank
-@findex gnus-info-set-rank
-Get/set the group rank (@pxref{Group Score}).
-
-@item gnus-info-level
-@itemx gnus-info-set-level
-@findex gnus-info-level
-@findex gnus-info-set-level
-Get/set the group level.
-
-@item gnus-info-score
-@itemx gnus-info-set-score
-@findex gnus-info-score
-@findex gnus-info-set-score
-Get/set the group score (@pxref{Group Score}).
-
-@item gnus-info-read
-@itemx gnus-info-set-read
-@findex gnus-info-read
-@findex gnus-info-set-read
-Get/set the ranges of read articles.
-
-@item gnus-info-marks
-@itemx gnus-info-set-marks
-@findex gnus-info-marks
-@findex gnus-info-set-marks
-Get/set the lists of ranges of marked articles.
-
-@item gnus-info-method
-@itemx gnus-info-set-method
-@findex gnus-info-method
-@findex gnus-info-set-method
-Get/set the group select method.
-
-@item gnus-info-params
-@itemx gnus-info-set-params
-@findex gnus-info-params
-@findex gnus-info-set-params
-Get/set the group parameters.
-@end table
-
-All the getter functions take one parameter---the info list.  The setter
-functions take two parameters---the info list and the new value.
-
-The last three elements in the group info aren't mandatory, so it may be
-necessary to extend the group info before setting the element.  If this
-is necessary, you can just pass on a non-@code{nil} third parameter to
-the three final setter functions to have this happen automatically.
-
-
-@node Extended Interactive
-@subsection Extended Interactive
-@cindex interactive
-@findex gnus-interactive
-
-Gnus extends the standard Emacs @code{interactive} specification
-slightly to allow easy use of the symbolic prefix (@pxref{Symbolic
-Prefixes}).  Here's an example of how this is used:
-
-@lisp
-(defun gnus-summary-increase-score (&optional score symp)
-  (interactive (gnus-interactive "P\ny"))
-  ...
-  )
-@end lisp
-
-The best thing to do would have been to implement
-@code{gnus-interactive} as a macro which would have returned an
-@code{interactive} form, but this isn't possible since Emacs checks
-whether a function is interactive or not by simply doing an @code{assq}
-on the lambda form.  So, instead we have @code{gnus-interactive}
-function that takes a string and returns values that are usable to
-@code{interactive}.
-
-This function accepts (almost) all normal @code{interactive} specs, but
-adds a few more.
-
-@table @samp
-@item y
-@vindex gnus-current-prefix-symbol
-The current symbolic prefix---the @code{gnus-current-prefix-symbol}
-variable.
-
-@item Y
-@vindex gnus-current-prefix-symbols
-A list of the current symbolic prefixes---the
-@code{gnus-current-prefix-symbol} variable.
-
-@item A
-The current article number---the @code{gnus-summary-article-number}
-function.
-
-@item H
-The current article header---the @code{gnus-summary-article-header}
-function.
-
-@item g
-The current group name---the @code{gnus-group-group-name}
-function.
-
-@end table
-
-
-@node Emacs/XEmacs Code
-@subsection Emacs/XEmacs Code
-@cindex XEmacs
-@cindex Emacsen
-
-While Gnus runs under Emacs, XEmacs and Mule, I decided that one of the
-platforms must be the primary one.  I chose Emacs.  Not because I don't
-like XEmacs or Mule, but because it comes first alphabetically.
-
-This means that Gnus will byte-compile under Emacs with nary a warning,
-while XEmacs will pump out gigabytes of warnings while byte-compiling.
-As I use byte-compilation warnings to help me root out trivial errors in
-Gnus, that's very useful.
-
-I've also consistently used Emacs function interfaces, but have used
-Gnusey aliases for the functions.  To take an example:  Emacs defines a
-@code{run-at-time} function while XEmacs defines a @code{start-itimer}
-function.  I then define a function called @code{gnus-run-at-time} that
-takes the same parameters as the Emacs @code{run-at-time}.  When running
-Gnus under Emacs, the former function is just an alias for the latter.
-However, when running under XEmacs, the former is an alias for the
-following function:
-
-@lisp
-(defun gnus-xmas-run-at-time (time repeat function &rest args)
-  (start-itimer
-   "gnus-run-at-time"
-   `(lambda ()
-      (,function ,@@args))
-   time repeat))
-@end lisp
-
-This sort of thing has been done for bunches of functions.  Gnus does
-not redefine any native Emacs functions while running under XEmacs---it
-does this @code{defalias} thing with Gnus equivalents instead.  Cleaner
-all over.
-
-In the cases where the XEmacs function interface was obviously cleaner,
-I used it instead.  For example @code{gnus-region-active-p} is an alias
-for @code{region-active-p} in XEmacs, whereas in Emacs it is a function.
-
-Of course, I could have chosen XEmacs as my native platform and done
-mapping functions the other way around.  But I didn't.  The performance
-hit these indirections impose on Gnus under XEmacs should be slight.
-
-
-@node Various File Formats
-@subsection Various File Formats
-
-@menu
-* Active File Format::      Information on articles and groups available.
-* Newsgroups File Format::  Group descriptions.
-@end menu
-
-
-@node Active File Format
-@subsubsection Active File Format
-
-The active file lists all groups available on the server in
-question.  It also lists the highest and lowest current article numbers
-in each group.
-
-Here's an excerpt from a typical active file:
-
-@example
-soc.motss 296030 293865 y
-alt.binaries.pictures.fractals 3922 3913 n
-comp.sources.unix 1605 1593 m
-comp.binaries.ibm.pc 5097 5089 y
-no.general 1000 900 y
-@end example
-
-Here's a pseudo-BNF definition of this file:
-
-@example
-active      = *group-line
-group-line  = group space high-number space low-number space flag <NEWLINE>
-group       = <non-white-space string>
-space       = " "
-high-number = <non-negative integer>
-low-number  = <positive integer>
-flag        = "y" / "n" / "m" / "j" / "x" / "=" group
-@end example
-
-For a full description of this file, see the manual pages for
-@samp{innd}, in particular @samp{active(5)}.
-
-
-@node Newsgroups File Format
-@subsubsection Newsgroups File Format
-
-The newsgroups file lists groups along with their descriptions.  Not all
-groups on the server have to be listed,  and not all groups in the file
-have to exist on the server.  The file is meant purely as information to
-the user.
-
-The format is quite simple; a group name, a tab, and the description.
-Here's the definition:
-
-@example
-newsgroups    = *line
-line          = group tab description <NEWLINE>
-group         = <non-white-space string>
-tab           = <TAB>
-description   = <string>
-@end example
-
-
-@page
-@node Emacs for Heathens
-@section Emacs for Heathens
-
-Believe it or not, but some people who use Gnus haven't really used
-Emacs much before they embarked on their journey on the Gnus Love Boat.
-If you are one of those unfortunates whom ``@kbd{M-C-a}'', ``kill the
-region'', and ``set @code{gnus-flargblossen} to an alist where the key
-is a regexp that is used for matching on the group name'' are magical
-phrases with little or no meaning, then this appendix is for you.  If
-you are already familiar with Emacs, just ignore this and go fondle your
-cat instead.
-
-@menu
-* Keystrokes::      Entering text and executing commands.
-* Emacs Lisp::      The built-in Emacs programming language.
-@end menu
-
-
-@node Keystrokes
-@subsection Keystrokes
-
-@itemize @bullet
-@item
-Q: What is an experienced Emacs user?
-
-@item
-A: A person who wishes that the terminal had pedals.
-@end itemize
-
-Yes, when you use Emacs, you are apt to use the control key, the shift
-key and the meta key a lot.  This is very annoying to some people
-(notably @code{vi}le users), and the rest of us just love the hell out
-of it.  Just give up and submit.  Emacs really does stand for
-``Escape-Meta-Alt-Control-Shift'', and not ``Editing Macros'', as you
-may have heard from other disreputable sources (like the Emacs author).
-
-The shift keys are normally located near your pinky fingers, and are
-normally used to get capital letters and stuff.  You probably use it all
-the time.  The control key is normally marked ``CTRL'' or something like
-that.  The meta key is, funnily enough, never marked as such on any
-keyboard.  The one I'm currently at has a key that's marked ``Alt'',
-which is the meta key on this keyboard.  It's usually located somewhere
-to the left hand side of the keyboard, usually on the bottom row.
-
-Now, us Emacs people don't say ``press the meta-control-m key'',
-because that's just too inconvenient.  We say ``press the @kbd{M-C-m}
-key''.  @kbd{M-} is the prefix that means ``meta'' and ``C-'' is the
-prefix that means ``control''.  So ``press @kbd{C-k}'' means ``press
-down the control key, and hold it down while you press @kbd{k}''.
-``Press @kbd{M-C-k}'' means ``press down and hold down the meta key and
-the control key and then press @kbd{k}''.  Simple, ay?
-
-This is somewhat complicated by the fact that not all keyboards have a
-meta key.  In that case you can use the ``escape'' key.  Then @kbd{M-k}
-means ``press escape, release escape, press @kbd{k}''.  That's much more
-work than if you have a meta key, so if that's the case, I respectfully
-suggest you get a real keyboard with a meta key.  You can't live without
-it.
-
-
-
-@node Emacs Lisp
-@subsection Emacs Lisp
-
-Emacs is the King of Editors because it's really a Lisp interpreter.
-Each and every key you tap runs some Emacs Lisp code snippet, and since
-Emacs Lisp is an interpreted language, that means that you can configure
-any key to run any arbitrary code.  You just, like, do it.
-
-Gnus is written in Emacs Lisp, and is run as a bunch of interpreted
-functions.  (These are byte-compiled for speed, but it's still
-interpreted.)  If you decide that you don't like the way Gnus does
-certain things, it's trivial to have it do something a different way.
-(Well, at least if you know how to write Lisp code.)  However, that's
-beyond the scope of this manual, so we are simply going to talk about
-some common constructs that you normally use in your @file{.emacs} file
-to customize Gnus.
-
-If you want to set the variable @code{gnus-florgbnize} to four (4), you
-write the following:
-
-@lisp
-(setq gnus-florgbnize 4)
-@end lisp
-
-This function (really ``special form'') @code{setq} is the one that can
-set a variable to some value.  This is really all you need to know.  Now
-you can go and fill your @code{.emacs} file with lots of these to change
-how Gnus works.
-
-If you have put that thing in your @code{.emacs} file, it will be read
-and @code{eval}ed (which is lisp-ese for ``run'') the next time you
-start Emacs.  If you want to change the variable right away, simply say
-@kbd{C-x C-e} after the closing parenthesis.  That will @code{eval} the
-previous ``form'', which is a simple @code{setq} statement here.
-
-Go ahead---just try it, if you're located at your Emacs.  After you
-@kbd{C-x C-e}, you will see @samp{4} appear in the echo area, which
-is the return value of the form you @code{eval}ed.
-
-Some pitfalls:
-
-If the manual says ``set @code{gnus-read-active-file} to @code{some}'',
-that means:
-
-@lisp
-(setq gnus-read-active-file 'some)
-@end lisp
-
-On the other hand, if the manual says ``set @code{gnus-nntp-server} to
-@samp{nntp.ifi.uio.no}'', that means:
-
-@lisp
-(setq gnus-nntp-server "nntp.ifi.uio.no")
-@end lisp
-
-So be careful not to mix up strings (the latter) with symbols (the
-former).  The manual is unambiguous, but it can be confusing.
-
-@page
-@include gnus-faq.texi
-
-@node Index
-@chapter Index
-@printindex cp
-
-@node Key Index
-@chapter Key Index
-@printindex ky
-
-@summarycontents
-@contents
-@bye
-
-@iftex
-@end iftex
-
-@c End:
diff --git a/texi/refcard.tex b/texi/refcard.tex
deleted file mode 100644 (file)
index 8028687..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-% Reference Card for Oort Gnus: to be processed with LaTeX2e
-\documentclass{article}
-
-\usepackage{supertabular}
-
-\def\Guide{Card}\def\guide{card}
-\def\logoscale{0.25}
-\newlength{\logowidth} \setlength{\logowidth}{6.861in}
-\newlength{\logoheight} \setlength{\logoheight}{7.013in}
-
-\raggedbottom\raggedright
-
-\usepackage{epsfig}
-
-\setlength{\textwidth}{7.26in} \setlength{\textheight}{10in}
-\setlength{\topmargin}{-1.0in}
-% the same settings work for A4, although there is a bit of space at the
-% top and bottom of the page. 
-\setlength{\oddsidemargin}{-0.5in} \setlength{\evensidemargin}{-0.5in}
-
-
-% README (for refcard + booklet)
-% This is a 5+ page reference card. In addition there is a booklet
-% (bk-a4.tex for A4 and bk-lt.tex for Letter).
-%
-% *** files for the refcard
-% refcard.tex (this file), gnusref.tex ("include"-file) and
-% gnuslogo-refcard.eps (Gnus logo).
-%
-% *** printing (about 5 pages now: write me if you can make it shorter..)
-% if you are using latex-mode, you do C-c C-f (process with latex),
-% C-c C-v (view using xdvi/dvi2tty) and C-c C-p (print)
-% the original author has set up the page dimensions cleverly so that this
-% should print on both letter and a4 (see note above)
-% $latex refcard.tex
-% this creates a file refcard.dvi which you can preview using
-% $xdvi refcard.dvi [C-c C-v]
-% and print using something like
-% $dvips refcard.dvi 
-%
-% If you want to print the booklet, you need to use `pstops' from the
-% `psutils' package (TODO: somebody write a howto ?)
-%
-% *** customization:
-
-% the part following \begin{document} in this file consists of a macro for
-% each section and section-headers (\section*{..}). It should be easy to
-% reorder things and/or remove sections (put '%' at the beginning of the line).
-% (i.e. you might want to omit \notes in the printed version)
-% The same goes for the booklet: Its contents are defined in booklet.tex.
-% If you think that the order is not logical and you have ideas for
-% improvements, please send mail to the current maintainer.
-
-% *** TODO:
-% o some things might not be updated: scoring and server modes, maybe more
-% o Gnus Unplugged category-buffer commands need to be written
-
-\begin{document}
-
-\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions
-\def\date{Mar 23rd, 2002}
-\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$}
-\raggedbottom\raggedright
-
-\twocolumn
-% use \tiny to shrink it to 4 pages (needs a high-resolution printer though)
-%\tiny
-\scriptsize
-\pagestyle{plain}
-
-% this contains a set of commands containing the actual sections
-% (and some explanations).
-\input{gnusref}
-
-\Title
-\par
-\Logo{refcard}
-\Notes
-%
-%
-\section*{Group-Mode}
-\GroupModeGeneral
-    \subsection*{Group Subscribedness-Levels}
-    \GroupLevels
-    \subsection*{List Groups}
-    \ListGroups
-    \subsection*{Create/Edit Foreign Groups}
-    \CreateEditGroups
-    \subsection*{Unsubscribe, Kill and Yank Groups}
-    \SubscribeKillYankGroups
-    \subsection*{Mark Groups}
-    \MarkGroups
-    \subsection*{Group-Unplugged}
-    \GroupUnplugged
-% topics in group-mode
-    \subsection*{Group Topics}
-    \GroupTopicsGeneral
-    \subsubsection*{Topic Sorting}
-    \TopicSorting
-%
-% summary-mode
-\section*{Summary-Mode}
-\SummaryModeGeneral
-    \subsection*{Select Articles}
-    \SelectArticles
-%
-    \subsection*{Threading}
-    \Threading
-%
-    \subsection*{Limiting}
-    \Limiting
-    \subsection*{Sort the Summary-Buffer}
-    \SortSummary
-    \subsection*{Score (Value) Commands}
-    \Scoring
-    \subsection*{Output Articles}
-    \OutputArticles
-    \subsection*{Extract Series (Uudecode etc)}
-    \ExtractSeries
-    \subsection*{MIME operations from the Summary-Buffer}
-    \MIMESummary     
-%
-    \subsection*{Post, Followup, Reply, Forward, Cancel}
-    \PostReplyetc
-    \newpage
-      \subsection*{Message Composition}
-      \MsgCompositionGeneral
-        \subsubsection*{Jumping in message-buffer}
-        \MsgCompositionMovementArticle
-        \subsubsection*{Attachments/MML}
-        \MsgCompositionMML
-% marking articles
-    \subsection*{Mark Articles}
-    \MarkArticlesGeneral
-        \subsubsection*{Mark Based on Score}
-        \MarkByScore
-        \subsubsection*{The Process Mark}
-        \ProcessMark
-        \subsubsection*{Mark Indication-Characters}
-        \MarkCharacters
-%
-    \subsection*{Summary-Unplugged}
-    \SummaryUnplugged
-    \subsection*{Mail-Group Commands}
-    \MailGroups
-    \subsection*{Draft-Group Commands}
-    \DraftGroup
-% exiting
-    \subsection*{Exit the Summary-Buffer}
-    \ExitSummary
-%
-%
-\section*{Article Mode (reading)}
-\ArticleModeGeneral
-    \subsection*{Wash the Article-Buffer}
-    \WashArticle
-    \subsubsection*{Blank Lines and Whitespace}
-    \BlankAndWhitespace
-    \subsubsection*{Picons, X-faces, Smileys}
-    \Picons
-    \subsubsection*{Time and Date}
-    \TimeAndDate
-    \subsection*{Hide/Highlight Parts of the Article}
-    \HideHighlightArticle
-    \subsection*{MIME operations from the Article-Buffer (reading)}
-    \MIMEArticleMode
-%
-%
-\section*{Server Mode}
-\ServerMode
-    \subsection*{Unplugged-Server}
-    \ServerUnplugged
-%
-%
-\section*{Browse Server Mode}
-\BrowseServer
-
-%\pagebreak
-\vspace*{\fill}
-\Copyright
-
-\end{document}
-
-%%% Local Variables:
-%%% mode: latex
-%%% End:
diff --git a/texi/widget.texi b/texi/widget.texi
deleted file mode 100644 (file)
index b733a78..0000000
+++ /dev/null
@@ -1,1432 +0,0 @@
-\input texinfo.tex
-
-@c %**start of header
-@setfilename widget
-@settitle The Emacs Widget Library
-@iftex
-@afourpaper
-@headings double
-@end iftex
-@c %**end of header
-
-@node Top, Introduction, (dir), (dir)
-@comment  node-name,  next,  previous,  up
-@top The Emacs Widget Library
-
-Version: 1.82
-
-@menu
-* Introduction::                
-* User Interface::              
-* Programming Example::         
-* Setting Up the Buffer::       
-* Basic Types::                 
-* Sexp Types::                  
-* Widget Properties::           
-* Defining New Widgets::        
-* Widget Wishlist.::            
-@end menu
-
-@node  Introduction, User Interface, Top, Top
-@comment  node-name,  next,  previous,  up
-@section Introduction
-
-Most graphical user interface toolkits, such as Motif and XView, provide
-a number of standard user interface controls (sometimes known as
-`widgets' or `gadgets').  Emacs doesn't really support anything like
-this, except for an incredible powerful text ``widget''.  On the other
-hand, Emacs does provide the necessary primitives to implement many
-other widgets within a text buffer.  The @code{widget} package
-simplifies this task.
-
-The basic widgets are:
-
-@table @code
-@item link
-Areas of text with an associated action.  Intended for hypertext links
-embedded in text.
-@item push-button 
-Like link, but intended for stand-alone buttons.
-@item editable-field
-An editable text field.  It can be either variable or fixed length.
-@item menu-choice
-Allows the user to choose one of multiple options from a menu, each
-option is itself a widget.  Only the selected option will be visible in
-the buffer.
-@item radio-button-choice
-Allows the user to choose one of multiple options by pushing radio
-buttons.  The options are implemented as widgets.  All options will be
-visible in the buffer.
-@item item
-A simple constant widget intended to be used in the @code{menu-choice} and
-@code{radio-button-choice} widgets. 
-@item choice-item
-An button item only intended for use in choices.  When pushed, the user
-will be asked to select another option from the choice widget.
-@item toggle
-A simple @samp{on}/@samp{off} switch.
-@item checkbox
-A checkbox (@samp{[ ]}/@samp{[X]}). 
-@item editable-list
-Create an editable list.  The user can insert or delete items in the
-list.  Each list item is itself a widget.
-@end table
-
-Now of what possible use can support for widgets be in a text editor?
-I'm glad you asked.  The answer is that widgets are useful for
-implementing forms.  A @dfn{form} in emacs is a buffer where the user is
-supposed to fill out a number of fields, each of which has a specific
-meaning.  The user is not supposed to change or delete any of the text
-between the fields.  Examples of forms in Emacs are the @file{forms}
-package (of course), the customize buffers, the mail and news compose
-modes, and the @sc{html} form support in the @file{w3} browser.  
-
-The advantages for a programmer of using the @code{widget} package to
-implement forms are:
-
-@enumerate
-@item
-More complex field than just editable text are supported. 
-@item
-You can give the user immediate feedback if he enters invalid data in a
-text field, and sometimes prevent entering invalid data.
-@item 
-You can have fixed sized fields, thus allowing multiple field to be
-lined up in columns.
-@item
-It is simple to query or set the value of a field. 
-@item 
-Editing happens in buffer, not in the mini-buffer.
-@item 
-Packages using the library get a uniform look, making them easier for
-the user to learn.
-@item 
-As support for embedded graphics improve, the widget library will
-extended to support it.  This means that your code using the widget
-library will also use the new graphic features by automatic.
-@end enumerate
-
-In order to minimize the code that is loaded by users who does not
-create any widgets, the code has been split in two files:
-
-@table @file
-@item widget.el
-This will declare the user variables, define the function
-@code{widget-define}, and autoload the function @code{widget-create}. 
-@item wid-edit.el
-Everything else is here, there is no reason to load it explicitly, as
-it will be autoloaded when needed.
-@end table
-
-@node User Interface, Programming Example, Introduction, Top
-@comment  node-name,  next,  previous,  up
-@section User Interface
-
-A form consist of read only text for documentation and some fields,
-where each the fields contain two parts, as tag and a value.  The tags
-are used to identify the fields, so the documentation can refer to the
-foo field, meaning the field tagged with @samp{Foo}. Here is an example
-form:
-
-@example
-Here is some documentation.
-
-Name: @i{My Name}     @strong{Choose}: This option
-Address:  @i{Some Place
-In some City
-Some country.}
-
-See also @b{_other work_} for more information.
-
-Numbers: count to three below
-@b{[INS]} @b{[DEL]} @i{One}
-@b{[INS]} @b{[DEL]} @i{Eh, two?}
-@b{[INS]} @b{[DEL]} @i{Five!}
-@b{[INS]} 
-
-Select multiple:
-
-@b{[X]} This
-@b{[ ]} That
-@b{[X]} Thus
-
-Select one:
-
-@b{(*)} One
-@b{( )} Another One.
-@b{( )} A Final One.
-
-@b{[Apply Form]} @b{[Reset Form]}
-@end example
-
-The top level widgets in is example are tagged @samp{Name},
-@samp{Choose}, @samp{Address}, @samp{_other work_}, @samp{Numbers},
-@samp{Select multiple}, @samp{Select one}, @samp{[Apply Form]}, and
-@samp{[Reset Form]}.  There are basically two thing the user can do within
-a form, namely editing the editable text fields and activating the
-buttons.
-
-@subsection Editable Text Fields
-
-In the example, the value for the @samp{Name} is most likely displayed
-in an editable text field, and so are values for each of the members of
-the @samp{Numbers} list.  All the normal Emacs editing operations are
-available for editing these fields.  The only restriction is that each
-change you make must be contained within a single editable text field.
-For example, capitalizing all text from the middle of one field to the
-middle of another field is prohibited.
-
-Editing text fields are created by the @code{editable-field} widget.
-
-The editing text fields are highlighted with the
-@code{widget-field-face} face, making them easy to find.
-
-@deffn Face widget-field-face
-Face used for other editing fields.
-@end deffn
-
-@subsection Buttons
-
-Some portions of the buffer have an associated @dfn{action}, which can
-be @dfn{activated} by a standard key or mouse command.  These portions
-are called @dfn{buttons}.  The default commands for activating a button
-are:
-
-@table @kbd
-@item @key{RET}
-@deffn Command widget-button-press @var{pos} &optional @var{event}
-Activate the button at @var{pos}, defaulting to point.
-If point is not located on a button, activate the binding in
-@code{widget-global-map} (by default the global map).
-@end deffn
-
-@item mouse-2
-@deffn Command widget-button-click @var{event}
-Activate the button at the location of the mouse pointer.  If the mouse
-pointer is located in an editable text field, activate the binding in
-@code{widget-global-map} (by default the global map).
-@end deffn
-@end table
-
-There are several different kind of buttons, all of which are present in
-the example:
-
-@table @emph
-@item The Option Field Tags.
-When you activate one of these buttons, you will be asked to choose
-between a number of different options.  This is how you edit an option
-field.  Option fields are created by the @code{menu-choice} widget.  In
-the example, @samp{@b{Choose}} is an option field tag.
-@item The @samp{@b{[INS]}} and @samp{@b{[DEL]}} buttons.
-Activating these will insert or delete elements from a editable list.
-The list is created by the @code{editable-list} widget. 
-@item Embedded Buttons.
-The @samp{@b{_other work_}} is an example of an embedded
-button. Embedded buttons are not associated with a fields, but can serve
-any purpose, such as implementing hypertext references.  They are
-usually created by the @code{link} widget.
-@item The @samp{@b{[ ]}} and @samp{@b{[X]}} buttons.
-Activating one of these will convert it to the other.  This is useful
-for implementing multiple-choice fields.  You can create it wit
-@item The @samp{@b{( )}} and @samp{@b{(*)}} buttons.
-Only one radio button in a @code{radio-button-choice} widget can be selected at any
-time.  When you push one of the unselected radio buttons, it will be
-selected and the previous selected radio button will become unselected. 
-@item The @samp{@b{[Apply Form]}} @samp{@b{[Reset Form]}} buttons.
-These are explicit buttons made with the @code{push-button} widget.  The main
-difference from the @code{link} widget is that the buttons are will be
-displayed as GUI buttons when possible.
-enough. 
-@end table
-
-To make them easier to locate, buttons are emphasized in the buffer.  
-
-@deffn Face widget-button-face
-Face used for buttons.
-@end deffn
-
-@defopt widget-mouse-face
-Face used for buttons when the mouse pointer is above it.
-@end defopt
-
-@subsection Navigation
-
-You can use all the normal Emacs commands to move around in a form
-buffer, plus you will have these additional commands:
-
-@table @kbd
-@item @key{TAB}
-@deffn Command widget-forward &optional count
-Move point @var{count} buttons or editing fields forward.
-@end deffn
-@item @key{M-TAB}
-@deffn Command widget-backward &optional count
-Move point @var{count} buttons or editing fields backward.
-@end deffn
-@end table
-
-@node Programming Example, Setting Up the Buffer, User Interface, Top
-@comment  node-name,  next,  previous,  up
-@section Programming Example
-
-Here is the code to implement the user interface example (see @ref{User
-Interface}).
-
-@lisp
-(require 'widget)
-
-(eval-when-compile
-  (require 'wid-edit))
-
-(defvar widget-example-repeat)
-
-(defun widget-example ()
-  "Create the widgets from the Widget manual."
-  (interactive)
-  (switch-to-buffer "*Widget Example*")
-  (kill-all-local-variables)
-  (make-local-variable 'widget-example-repeat)
-  (let ((inhibit-read-only t))
-    (erase-buffer))
-  (widget-insert "Here is some documentation.\n\nName: ")
-  (widget-create 'editable-field
-                :size 13
-                "My Name")
-  (widget-create 'menu-choice
-                :tag "Choose"
-                :value "This"
-                :help-echo "Choose me, please!"
-                :notify (lambda (widget &rest ignore)
-                          (message "%s is a good choice!"
-                                   (widget-value widget)))
-                '(item :tag "This option" :value "This")
-                '(choice-item "That option")
-                '(editable-field :menu-tag "No option" "Thus option"))
-  (widget-insert "Address: ")
-  (widget-create 'editable-field
-                "Some Place\nIn some City\nSome country.")
-  (widget-insert "\nSee also ")
-  (widget-create 'link
-                :notify (lambda (&rest ignore)
-                          (widget-value-set widget-example-repeat 
-                                            '("En" "To" "Tre"))
-                          (widget-setup))
-                "other work")
-  (widget-insert " for more information.\n\nNumbers: count to three below\n")
-  (setq widget-example-repeat
-       (widget-create 'editable-list
-                      :entry-format "%i %d %v"
-                      :notify (lambda (widget &rest ignore)
-                                (let ((old (widget-get widget
-                                                       ':example-length))
-                                      (new (length (widget-value widget))))
-                                  (unless (eq old new)
-                                    (widget-put widget ':example-length new)
-                                    (message "You can count to %d." new))))
-                      :value '("One" "Eh, two?" "Five!")
-                      '(editable-field :value "three")))
-  (widget-insert "\n\nSelect multiple:\n\n")
-  (widget-create 'checkbox t)
-  (widget-insert " This\n")
-  (widget-create 'checkbox nil)
-  (widget-insert " That\n")
-  (widget-create 'checkbox
-                :notify (lambda (&rest ignore) (message "Tickle"))
-                t)
-  (widget-insert " Thus\n\nSelect one:\n\n")
-  (widget-create 'radio-button-choice
-                :value "One"
-                :notify (lambda (widget &rest ignore)
-                          (message "You selected %s"
-                                   (widget-value widget)))
-                '(item "One") '(item "Anthor One.") '(item "A Final One."))
-  (widget-insert "\n")
-  (widget-create 'push-button
-                :notify (lambda (&rest ignore) 
-                          (if (= (length (widget-value widget-example-repeat))
-                                 3)
-                              (message "Congratulation!")
-                            (error "Three was the count!")))
-                "Apply Form")
-  (widget-insert " ")
-  (widget-create 'push-button
-                :notify (lambda (&rest ignore)
-                          (widget-example))
-                "Reset Form")
-  (widget-insert "\n")
-  (use-local-map widget-keymap)
-  (widget-setup))
-@end lisp
-
-@node Setting Up the Buffer, Basic Types, Programming Example, Top
-@comment  node-name,  next,  previous,  up
-@section Setting Up the Buffer
-
-Widgets are created with @code{widget-create}, which returns a
-@dfn{widget} object.  This object can be queried and manipulated by
-other widget functions, until it is deleted with @code{widget-delete}.
-After the widgets have been created, @code{widget-setup} must be called
-to enable them.
-
-@defun widget-create type [ keyword argument ]@dots{}
-Create and return a widget of type @var{type}.
-The syntax for the @var{type} argument is described in @ref{Basic Types}.
-
-The keyword arguments can be used to overwrite the keyword arguments
-that are part of @var{type}.
-@end defun
-
-@defun widget-delete widget
-Delete @var{widget} and remove it from the buffer.
-@end defun
-
-@defun widget-setup 
-Setup a buffer to support widgets. 
-
-This should be called after creating all the widgets and before allowing
-the user to edit them.
-@refill
-@end defun
-
-If you want to insert text outside the widgets in the form, the
-recommended way to do that is with @code{widget-insert}.
-
-@defun widget-insert 
-Insert the arguments, either strings or characters, at point.
-The inserted text will be read only.
-@end defun
-
-There is a standard widget keymap which you might find useful.
-
-@defvr Const widget-keymap
-A keymap with the global keymap as its parent.@*
-@key{TAB} and @kbd{C-@key{TAB}} are bound to @code{widget-forward} and
-@code{widget-backward}, respectively.  @kbd{@key{RET}} and @kbd{mouse-2}
-are bound to @code{widget-button-press} and
-@code{widget-button-}.@refill
-@end defvr
-
-@defvar widget-global-map
-Keymap used by @code{widget-button-press} and @code{widget-button-click}
-when not on a button.  By default this is @code{global-map}.
-@end defvar
-
-@node Basic Types, Sexp Types, Setting Up the Buffer, Top
-@comment  node-name,  next,  previous,  up
-@section Basic Types
-
-The syntax of a type specification is given below:
-
-@example
-NAME ::= (NAME [KEYWORD ARGUMENT]... ARGS)
-     |   NAME
-@end example
-
-Where, @var{name} is a widget name, @var{keyword} is the name of a
-property, @var{argument} is the value of the property, and @var{args}
-are interpreted in a widget specific way.
-
-There following keyword arguments that apply to all widgets:
-
-@table @code
-@item :value
-The initial value for widgets of this type.
-
-@item :format
-This string will be inserted in the buffer when you create a widget.
-The following @samp{%} escapes are available:
-
-@table @samp
-@item %[
-@itemx %]
-The text inside will be marked as a button.
-
-@item %@{
-@itemx %@}
-The text inside will be displayed with the face specified by
-@code{:sample-face}. 
-
-@item %v
-This will be replaces with the buffer representation of the widgets
-value.  What this is depends on the widget type.
-
-@item %d
-Insert the string specified by @code{:doc} here.
-
-@item %h
-Like @samp{%d}, with the following modifications: If the documentation
-string is more than one line, it will add a button which will toggle
-between showing only the first line, and showing the full text.
-Furthermore, if there is no @code{:doc} property in the widget, it will
-instead examine the @code{:documentation-property} property.  If it is a
-lambda expression, it will be called with the widget's value as an
-argument, and the result will be used as the documentation text.
-
-@item %t
-Insert the string specified by @code{:tag} here, or the @code{princ}
-representation of the value if there is no tag.
-
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item :button-face
-Face used to highlight text inside %[ %] in the format.
-
-@item :doc
-The string inserted by the @samp{%d} escape in the format
-string.  
-
-@item :tag
-The string inserted by the @samp{%t} escape in the format
-string.  
-
-@item :tag-glyph
-Name of image to use instead of the string specified by `:tag' on
-Emacsen that supports it.
-
-@item :help-echo
-Message displayed whenever you move to the widget with either
-@code{widget-forward} or @code{widget-backward}.
-
-@item :indent
-An integer indicating the absolute number of spaces to indent children
-of this widget.
-
-@item :offset
-An integer indicating how many extra spaces to add to the widget's
-grandchildren compared to this widget.
-
-@item :extra-offset
-An integer indicating how many extra spaces to add to the widget's
-children compared to this widget.
-
-@item :notify
-A function called each time the widget or a nested widget is changed.
-The function is called with two or three arguments.  The first argument
-is the widget itself, the second argument is the widget that was
-changed, and the third argument is the event leading to the change, if
-any. 
-
-@item :menu-tag
-Tag used in the menu when the widget is used as an option in a
-@code{menu-choice} widget.
-
-@item :menu-tag-get
-Function used for finding the tag when the widget is used as an option
-in a @code{menu-choice} widget.  By default, the tag used will be either the
-@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
-representation of the @code{:value} property if not.
-
-@item :match
-Should be a function called with two arguments, the widget and a value,
-and returning non-nil if the widget can represent the specified value.
-
-@item :validate
-A function which takes a widget as an argument, and return nil if the
-widgets current value is valid for the widget.  Otherwise, it should
-return the widget containing the invalid data, and set that widgets
-@code{:error} property to a string explaining the error.
-
-@item :tab-order
-Specify the order in which widgets are traversed with
-@code{widget-forward} or @code{widget-backward}.  This is only partially
-implemented.
-
-@enumerate a
-@item
-Widgets with tabbing order @code{-1} are ignored.
-
-@item 
-(Unimplemented) When on a widget with tabbing order @var{n}, go to the
-next widget in the buffer with tabbing order @var{n+1} or @code{nil},
-whichever comes first.
-
-@item
-When on a widget with no tabbing order specified, go to the next widget
-in the buffer with a positive tabbing order, or @code{nil}
-@end enumerate
-
-@item :parent
-The parent of a nested widget (e.g. a @code{menu-choice} item or an
-element of a @code{editable-list} widget).
-
-@item :sibling-args
-This keyword is only used for members of a @code{radio-button-choice} or
-@code{checklist}.  The value should be a list of extra keyword
-arguments, which will be used when creating the @code{radio-button} or
-@code{checkbox} associated with this item.
-
-@end table
-
-@deffn {User Option} widget-glyph-directory
-Directory where glyphs are found.  
-Widget will look here for a file with the same name as specified for the
-image, with either a @samp{.xpm} (if supported) or @samp{.xbm} extension.
-@end deffn
-
-@deffn{User Option} widget-glyph-enable
-If non-nil, allow glyphs to appear on displayes where they are supported.
-@end deffn
-
-
-@menu
-* link::                        
-* url-link::                    
-* info-link::                   
-* push-button::                 
-* editable-field::              
-* text::                        
-* menu-choice::                 
-* radio-button-choice::         
-* item::                        
-* choice-item::                 
-* toggle::                      
-* checkbox::                    
-* checklist::                   
-* editable-list::               
-@end menu
-
-@node link, url-link, Basic Types, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{link} Widget
-
-Syntax:
-
-@example
-TYPE ::= (link [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in the
-buffer. 
-
-@node url-link, info-link, link, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{url-link} Widget
-
-Syntax:
-
-@example
-TYPE ::= (url-link [KEYWORD ARGUMENT]...  URL)
-@end example
-
-When this link is activated, the @sc{www} browser specified by
-@code{browse-url-browser-function} will be called with @var{url}. 
-
-@node info-link, push-button, url-link, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{info-link} Widget
-
-Syntax:
-
-@example
-TYPE ::= (info-link [KEYWORD ARGUMENT]...  ADDRESS)
-@end example
-
-When this link is activated, the build-in info browser is started on
-@var{address}. 
-
-@node  push-button, editable-field, info-link, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{push-button} Widget
-
-Syntax:
-
-@example
-TYPE ::= (push-button [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property. The value should be a string, which will be inserted in the
-buffer. 
-
-The following extra properties are recognized.
-
-@table @code
-@item :text-format
-The format string used when the push button cannot be displayed
-graphically.  There are two escapes, @code{%s}, which must be present
-exactly once, will be substituted with the tag, and @code{%%} will be
-substituted with a singe @samp{%}.
-@end table
-
-By default the tag will be shown in brackets.
-
-@node editable-field, text, push-button, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{editable-field} Widget
-
-Syntax:
-
-@example
-TYPE ::= (editable-field [KEYWORD ARGUMENT]... [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in
-field.  This widget will match all string values.
-
-The following extra properties are recognized.
-
-@table @code
-@item :size
-The width of the editable field.@*
-By default the field will reach to the end of the line.
-
-@item :value-face
-Face used for highlighting the editable field.  Default is
-@code{widget-field-face}. 
-
-@item :secret
-Character used to display the value.  You can set this to e.g. @code{?*}
-if the field contains a password or other secret information.  By
-default, the value is not secret.
-
-@item :valid-regexp
-By default the @code{:validate} function will match the content of the
-field with the value of this attribute.  The default value is @code{""}
-which matches everything.
-
-@item :keymap
-Keymap used in the editable field.  The default value is
-@code{widget-field-keymap}, which allows you to use all the normal
-editing commands, even if the buffers major mode supress some of them.
-Pressing return activates the function specified by @code{:activate}. 
-
-@item :hide-front-space
-@itemx :hide-rear-space
-In order to keep track of the editable field, emacs places an invisible
-space character in front of the field, and for fixed sized fields also
-in the rear end of the field.  For fields that extent to the end of the
-line, the terminating linefeed serves that purpose instead.  
-
-Emacs will try to make the spaces intangible when it is safe to do so.
-Intangible means that the cursor motion commands will skip over the
-character as if it didn't exist.  This is safe to do when the text
-preceding or following the widget cannot possible change during the
-lifetime of the @code{editable-field} widget.  The preferred way to tell
-Emacs this, is to add text to the @code{:format} property around the
-value.  For example @code{:format "Tag: %v "}.  
-
-You can overwrite the internal safety check by setting the
-@code{:hide-front-space} or @code{:hide-rear-space} properties to
-non-nil.  This is not recommended.  For example, @emph{all} text that
-belongs to a widget (i.e. is created from its @code{:format} string) will
-change whenever the widget changes its value.
-
-@end table
-
-@node text, menu-choice, editable-field, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{text} Widget
-
-This is just like @code{editable-field}, but intended for multiline text
-fields.  The default @code{:keymap} is @code{widget-text-keymap}, which
-does not rebind the return key.
-
-@node menu-choice, radio-button-choice, text, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{menu-choice} Widget
-
-Syntax:
-
-@example
-TYPE ::= (menu-choice [KEYWORD ARGUMENT]... TYPE ... )
-@end example
-
-The @var{type} arguments represents each possible choice.  The widgets
-value of will be the value of the chosen @var{type} argument.  This
-widget will match any value that matches at least one of the specified
-@var{type} arguments.
-
-@table @code
-@item :void 
-Widget type used as a fallback when the value does not match any of the
-specified @var{type} arguments.
-
-@item :case-fold
-Set this to nil if you don't want to ignore case when prompting for a
-choice through the minibuffer.
-
-@item :children
-A list whose car is the widget representing the currently chosen type in
-the buffer. 
-
-@item :choice
-The current chosen type
-
-@item :args 
-The list of types. 
-@end table
-
-@node radio-button-choice, item, menu-choice, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{radio-button-choice} Widget
-
-Syntax:
-
-@example
-TYPE ::= (radio-button-choice [KEYWORD ARGUMENT]...  TYPE ... )
-@end example
-
-The @var{type} arguments represents each possible choice.  The widgets
-value of will be the value of the chosen @var{type} argument.  This
-widget will match any value that matches at least one of the specified
-@var{type} arguments.
-
-The following extra properties are recognized.
-
-@table @code
-@item :entry-format
-This string will be inserted for each entry in the list.
-The following @samp{%} escapes are available:
-@table @samp
-@item %v
-Replaced with the buffer representation of the @var{type} widget.
-@item %b
-Replace with the radio button.
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item button-args
-A list of keywords to pass to the radio buttons.  Useful for setting
-e.g. the @samp{:help-echo} for each button.
-
-@item :buttons
-The widgets representing the radio buttons.
-
-@item :children
-The widgets representing each type.
-
-@item :choice
-The current chosen type
-
-@item :args 
-The list of types. 
-@end table
-
-You can add extra radio button items to a @code{radio-button-choice}
-widget after it has been created with the function
-@code{widget-radio-add-item}. 
-
-@defun widget-radio-add-item widget type
-Add to @code{radio-button-choice} widget @var{widget} a new radio button item of type
-@var{type}. 
-@end defun
-
-Please note that such items added after the @code{radio-button-choice}
-widget has been created will @strong{not} be properly destructed when
-you call @code{widget-delete}.
-
-@node item, choice-item, radio-button-choice, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{item} Widget
-
-Syntax:
-
-@example
-ITEM ::= (item [KEYWORD ARGUMENT]... VALUE)
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in the
-buffer.  This widget will only match the specified value.
-
-@node choice-item, toggle, item, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{choice-item} Widget
-
-Syntax:
-
-@example
-ITEM ::= (choice-item [KEYWORD ARGUMENT]... VALUE)
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in the
-buffer as a button.  Activating the button of a @code{choice-item} is
-equivalent to activating the parent widget.  This widget will only match
-the specified value. 
-
-@node toggle, checkbox, choice-item, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{toggle} Widget
-
-Syntax:
-
-@example
-TYPE ::= (toggle [KEYWORD ARGUMENT]...)
-@end example
-
-The widget has two possible states, `on' and `off', which corresponds to
-a @code{t} or @code{nil} value.
-
-The following extra properties are recognized.
-
-@table @code
-@item :on
-String representing the `on' state.  By default the string @samp{on}.
-@item :off 
-String representing the `off' state.  By default the string @samp{off}.
-@item :on-glyph
-Name of a glyph to be used instead of the `:on' text string, on emacsen
-that supports it.
-@item :off-glyph
-Name of a glyph to be used instead of the `:off' text string, on emacsen
-that supports it.
-@end table
-
-@node checkbox, checklist, toggle, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{checkbox} Widget
-
-The widget has two possible states, `selected' and `unselected', which
-corresponds to a @code{t} or @code{nil} value.
-
-Syntax:
-
-@example
-TYPE ::= (checkbox [KEYWORD ARGUMENT]...)
-@end example
-
-@node checklist, editable-list, checkbox, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{checklist} Widget
-
-Syntax:
-
-@example
-TYPE ::= (checklist [KEYWORD ARGUMENT]...  TYPE ... )
-@end example
-
-The @var{type} arguments represents each checklist item.  The widgets
-value of will be a list containing the value of each ticked @var{type}
-argument.  The checklist widget will match a list whose elements all
-matches at least one of the specified @var{type} arguments.
-
-The following extra properties are recognized.
-
-@table @code
-@item :entry-format
-This string will be inserted for each entry in the list.
-The following @samp{%} escapes are available:
-@table @samp
-@item %v
-Replaced with the buffer representation of the @var{type} widget.
-@item %b
-Replace with the checkbox.
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item button-args
-A list of keywords to pass to the checkboxes.  Useful for setting
-e.g. the @samp{:help-echo} for each checkbox.
-
-@item :buttons
-The widgets representing the checkboxes.
-
-@item :children
-The widgets representing each type.
-
-@item :args 
-The list of types. 
-@end table
-
-@node editable-list,  , checklist, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{editable-list} Widget
-
-Syntax:
-
-@example
-TYPE ::= (editable-list [KEYWORD ARGUMENT]... TYPE)
-@end example
-
-The value is a list, where each member represent one widget of type
-@var{type}. 
-
-The following extra properties are recognized.
-
-@table @code
-@item :entry-format
-This string will be inserted for each entry in the list.
-The following @samp{%} escapes are available:
-@table @samp
-@item %v
-This will be replaced with the buffer representation of the @var{type}
-widget.
-@item %i
-Insert the @b{[INS]} button.
-@item %d
-Insert the @b{[DEL]} button.
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item :insert-button-args
-A list of keyword arguments to pass to the insert buttons.
-
-@item :delete-button-args
-A list of keyword arguments to pass to the delete buttons.
-
-@item :append-button-args
-A list of keyword arguments to pass to the trailing insert button.
-
-
-@item :buttons
-The widgets representing the insert and delete buttons.
-
-@item :children
-The widgets representing the elements of the list.
-
-@item :args
-List whose car is the type of the list elements.
-
-@end table
-
-@node Sexp Types, Widget Properties, Basic Types, Top
-@comment
-@section Sexp Types
-
-A number of widgets for editing s-expressions (lisp types) are also
-available.  These basically fall in three categories: @dfn{atoms},
-@dfn{composite types}, and @dfn{generic}.
-
-@menu
-* generic::                     
-* atoms::                       
-* composite::                   
-@end menu
-
-@node generic, atoms, Sexp Types, Sexp Types
-@comment  node-name,  next,  previous,  up
-@subsection The Generic Widget.
-
-The @code{const} and @code{sexp} widgets can contain any lisp
-expression.  In the case of the @code{const} widget the user is
-prohibited from editing edit it, which is mainly useful as a component
-of one of the composite widgets.
-
-The syntax for the generic widgets is
-
-@example
-TYPE ::= (const [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property and can be any s-expression.
-
-@deffn Widget const
-This will display any valid s-expression in an immutable part of the
-buffer. 
-@end deffn
-
-@deffn Widget sexp
-This will allow you to edit any valid s-expression in an editable buffer
-field. 
-
-The @code{sexp} widget takes the same keyword arguments as the
-@code{editable-field} widget.
-@end deffn
-
-@node atoms, composite, generic, Sexp Types
-@comment  node-name,  next,  previous,  up
-@subsection Atomic Sexp Widgets.
-
-The atoms are s-expressions that does not consist of other
-s-expressions.  A string is an atom, while a list is a composite type.
-You can edit the value of an atom with the following widgets.  
-
-The syntax for all the atoms are
-
-@example
-TYPE ::= (NAME [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property and must be an expression of the same type as the widget.
-I.e. the string widget can only be initialized with a string.
-
-All the atom widgets take the same keyword arguments as the @code{editable-field}
-widget.
-
-@deffn Widget string
-Allows you to edit a string in an editable field.
-@end deffn
-
-@deffn Widget file
-Allows you to edit a file name in an editable field.  You you activate
-the tag button, you can edit the file name in the mini-buffer with
-completion. 
-
-Keywords:
-@table @code
-@item :must-match
-If this is set to non-nil, only existing file names will be allowed in
-the minibuffer.
-@end table
-@end deffn
-
-@deffn Widget directory
-Allows you to edit a directory name in an editable field.
-Similar to the @code{file} widget.
-@end deffn
-
-@deffn Widget symbol
-Allows you to edit a lisp symbol in an editable field.
-@end deffn
-
-@deffn Widget integer
-Allows you to edit an integer in an editable field.
-@end deffn
-
-@deffn Widget number
-Allows you to edit a number in an editable field.
-@end deffn
-
-@deffn Widget boolean
-Allows you to edit a boolean.  In lisp this means a variable which is
-either nil meaning false, or non-nil meaning true.
-@end deffn
-
-
-@node composite,  , atoms, Sexp Types
-@comment  node-name,  next,  previous,  up
-@subsection Composite Sexp Widgets.
-
-The syntax for the composite are
-
-@example
-TYPE ::= (NAME [KEYWORD ARGUMENT]...  COMPONENT...)
-@end example
-
-Where each @var{component} must be a widget type.  Each component widget
-will be displayed in the buffer, and be editable to the user.
-
-@deffn Widget cons
-The value of a @code{cons} widget is a cons-cell where the car is the
-value of the first component and the cdr is the value of the second
-component.  There must be exactly two components. 
-@end deffn
-
-@deffn Widget lisp
-The value of a @code{lisp} widget is a list containing the value of
-each of its component.
-@end deffn
-
-@deffn Widget vector
-The value of a @code{vector} widget is a vector containing the value of
-each of its component.
-@end deffn
-
-The above suffice for specifying fixed size lists and vectors.  To get
-variable length lists and vectors, you can use a @code{choice},
-@code{set} or @code{repeat} widgets together with the @code{:inline}
-keywords.  If any component of a composite widget has the @code{:inline}
-keyword set, its value must be a list which will then be spliced into
-the composite.  For example, to specify a list whose first element must
-be a file name, and whose remaining arguments should either by the
-symbol @code{t} or two files, you can use the following widget
-specification:
-
-@example
-(list file
-      (choice (const t)
-              (list :inline t
-                    :value ("foo" "bar")
-                    string string)))
-@end example
-
-The value of a widget of this type will either have the form 
-@samp{(file t)} or @code{(file string string)}.
-
-This concept of inline is probably hard to understand.  It was certainly
-hard to implement so instead of confuse you more by trying to explain it
-here, I'll just suggest you meditate over it for a while.
-
-@deffn Widget choice
-Allows you to edit a sexp which may have one of fixed set of types.  It
-is currently implemented with the @code{choice-menu} basic widget, and
-has a similar syntax.
-@end deffn
-
-@deffn Widget set
-Allows you to specify a type which must be a list whose elements all
-belong to given set.  The elements of the list is not significant.  This
-is implemented on top of the @code{checklist} basic widget, and has a
-similar syntax. 
-@end deffn
-
-@deffn Widget repeat
-Allows you to specify a variable length list whose members are all of
-the same type.  Implemented on top of the `editable-list' basic widget,
-and has a similar syntax.
-@end deffn
-
-@node Widget Properties, Defining New Widgets, Sexp Types, Top
-@comment  node-name,  next,  previous,  up
-@section Properties
-
-You can examine or set the value of a widget by using the widget object
-that was returned by @code{widget-create}.
-
-@defun widget-value widget
-Return the current value contained in @var{widget}.
-It is an error to call this function on an uninitialized widget.
-@end defun
-
-@defun widget-value-set widget value
-Set the value contained in @var{widget} to @var{value}.
-It is an error to call this function with an invalid @var{value}.
-@end defun
-
-@strong{Important:} You @emph{must} call @code{widget-setup} after
-modifying the value of a widget before the user is allowed to edit the
-widget again.  It is enough to call @code{widget-setup} once if you
-modify multiple widgets.  This is currently only necessary if the widget
-contains an editing field, but may be necessary for other widgets in the
-future. 
-
-If your application needs to associate some information with the widget
-objects, for example a reference to the item being edited, it can be
-done with @code{widget-put} and @code{widget-get}.  The property names
-must begin with a @samp{:}.
-
-@defun widget-put widget property value
-In @var{widget} set @var{property} to @var{value}.
-@var{property} should be a symbol, while @var{value} can be anything.
-@end defun
-
-@defun widget-get widget property
-In @var{widget} return the value for @var{property}.
-@var{property} should be a symbol, the value is what was last set by
-@code{widget-put} for @var{property}.
-@end defun
-
-@defun widget-member widget property
-Non-nil if @var{widget} has a value (even nil) for property @var{property}.
-@end defun
-
-Occasionally it can be useful to know which kind of widget you have,
-i.e. the name of the widget type you gave when the widget was created. 
-
-@defun widget-type widget
-Return the name of @var{widget}, a symbol.
-@end defun
-
-Widgets can be in two states: active, which means they are modifiable by
-the user, or inactive, which means they cannot be modified by the user.
-You can query or set the state with the following code:
-
-@lisp
-;; Examine if @var{widget} is active or not.
-(if (widget-apply @var{widget} :active)
-    (message "Widget is active.")
-  (message "Widget is inactive.")
-
-;; Make @var{widget} inactive.
-(widget-apply @var{widget} :deactivate)
-
-;; Make @var{widget} active.
-(widget-apply @var{widget} :activate)
-@end lisp
-
-A widget is inactive if itself, or any of its ancestors (found by
-following the @code{:parent} link) have been deactivated.  To make sure
-a widget is really active, you must therefore activate both itself, and
-all its ancestors.
-
-@lisp
-(while widget 
-  (widget-apply widget :activate)
-  (setq widget (widget-get widget :parent)))
-@end lisp
-
-You can check if a widget has been made inactive by examining the value
-of @code{:inactive} keyword.  If this is non-nil, the widget itself has
-been deactivated.  This is different from using the @code{:active}
-keyword, in that the later tell you if the widget @strong{or} any of its
-ancestors have been deactivated.   Do not attempt to set the
-@code{:inactive} keyword directly.  Use the @code{:activate}
-@code{:deactivated} keywords instead.
-
-
-@node Defining New Widgets, Widget Wishlist., Widget Properties, Top
-@comment  node-name,  next,  previous,  up
-@section Defining New Widgets
-
-You can define specialized widgets with @code{define-widget}.  It allows
-you to create a shorthand for more complex widgets, including specifying
-component widgets and default new default values for the keyword
-arguments. 
-
-@defun widget-define name class doc &rest args
-Define a new widget type named @var{name} from @code{class}.
-
-@var{name} and class should both be symbols, @code{class} should be one
-of the existing widget types. 
-
-The third argument @var{DOC} is a documentation string for the widget.
-
-After the new widget has been defined, the following two calls will
-create identical widgets:
-
-@itemize @bullet
-@item
-@lisp
-(widget-create @var{name})
-@end lisp
-
-@item
-@lisp
-(apply widget-create @var{class} @var{args})
-@end lisp
-@end itemize
-
-@end defun
-
-Using @code{widget-define} does just store the definition of the widget
-type in the @code{widget-type} property of @var{name}, which is what
-@code{widget-create} uses.
-
-If you just want to specify defaults for keywords with no complex
-conversions, you can use @code{identity} as your conversion function.
-
-The following additional keyword arguments are useful when defining new
-widgets: 
-@table @code
-@item :convert-widget
-Function to convert a widget type before creating a widget of that
-type.  It takes a widget type as an argument, and returns the converted
-widget type.  When a widget is created, this function is called for the
-widget type and all the widgets parent types, most derived first. 
-
-@item :value-to-internal
-Function to convert the value to the internal format.  The function
-takes two arguments, a widget and an external value, and returns the
-internal value.  The function is called on the present @code{:value}
-when the widget is created, and on any value set later with
-@code{widget-value-set}.
-
-@item :value-to-external
-Function to convert the value to the external format.  The function
-takes two arguments, a widget and an internal value, and returns the
-internal value.  The function is called on the present @code{:value}
-when the widget is created, and on any value set later with
-@code{widget-value-set}.
-
-@item :create
-Function to create a widget from scratch.  The function takes one
-argument, a widget type, and create a widget of that type, insert it in
-the buffer, and return a widget object.
-
-@item :delete
-Function to delete a widget.  The function takes one argument, a widget,
-and should remove all traces of the widget from the buffer.
-
-@item :value-create
-Function to expand the @samp{%v} escape in the format string.  It will
-be called with the widget as its argument.  Should
-insert a representation of the widgets value in the buffer.
-
-@item :value-delete
-Should remove the representation of the widgets value from the buffer.
-It will be called with the widget as its argument.  It doesn't have to
-remove the text, but it should release markers and delete nested widgets
-if such has been used.
-
-@item :format-handler
-Function to handle unknown @samp{%} escapes in the format string.  It
-will be called with the widget and the escape character as arguments.
-You can set this to allow your widget to handle non-standard escapes.
-
-You should end up calling @code{widget-default-format-handler} to handle
-unknown escape sequences, which will handle the @samp{%h} and any future
-escape sequences, as well as give an error for unknown escapes.
-@end table
-
-If you want to define a new widget from scratch, use the @code{default}
-widget as its base.
-
-@deffn Widget default [ keyword argument ]
-Widget used as a base for other widgets. 
-
-It provides most of the functionality that is referred to as ``by
-default'' in this text. 
-@end deffn
-
-@node  Widget Wishlist.,  , Defining New Widgets, Top
-@comment  node-name,  next,  previous,  up
-@section Wishlist.
-
-@itemize @bullet
-@item 
-It should be possible to add or remove items from a list with @kbd{C-k}
-and @kbd{C-o} (suggested by @sc{rms}).
-
-@item 
-The @samp{[INS]} and @samp{[DEL]} buttons should be replaced by a single
-dash (@samp{-}).  The dash should be a button that, when activated, ask
-whether you want to add or delete an item (@sc{rms} wanted to git rid of
-the ugly buttons, the dash is my idea).
-
-@item
-Widgets such as @code{file} and @code{symbol} should prompt with completion. 
-
-@item
-The @code{menu-choice} tag should be prettier, something like the abbreviated
-menus in Open Look.
-
-@item
-The functions used in many widgets, like
-@code{widget-item-convert-widget}, should not have names that are
-specific to the first widget where I happended to use them.
-
-@item
-Flag to make @code{widget-move} skip a specified button.
-
-@item
-Document `helper' functions for defining new widgets.
-
-@item
-Activate the item this is below the mouse when the button is
-released, not the item this is below the mouse when the button is
-pressed.  Dired and grep gets this right.  Give feedback if possible.
-
-@item
-Use @samp{@@deffn Widget} to document widgets. 
-
-@item
-Document global keywords in one place.  
-
-Document keywords particular to a specific widget in the widget
-definition.
-
-Document the `default' widget first. 
-
-Split, when needed, keywords into those useful for normal
-customization, those primarily useful when deriving, and those who
-represent runtime information. 
-
-@item
-Figure out terminology and @sc{api} for the class/type/object/super
-stuff. 
-
-Perhaps the correct model is delegation?
-
-@item
-Document @code{widget-browse}.
-
-@item
-Make indentation work with glyphs and propertional fonts.
-
-@item
-Add object and class hierarchies to the browser.
-
-@end itemize
-
-@contents
-@bye