anchor.diff:    `(let ((,nick (argument-old-user ,sender ,nick ,server)))
        ,@body))
   
  -(defun list-channels (sender server user)
  -  ;; (list-channels (server "irc.freenode.org") (nick "pjb"))
  -  ;; (list-channels nil nil)
  +;; list     my log requests                                (requests sender)
  +;; list     my log requests for channel #lisp              (of-channel channel (requests sender))
  +;; list all my log requests                                (requests sender)
  +;;
  +;; list all    log requests of mr foo                      (requests user)
  +;; list all    log requests of mr foo for channel #lisp    (of-channel channel (requests user))
  +;; list all    log requests           for channel #lisp    (requests channel)
  +;; list all    log requests                                (requests server)
  +
  +(defun of-channel (channel requests)
  +  (remove channel requests :test-not (function eql) :key (function channel)))
  +
  +(defun select-log-requests (sender allp user channel server)
  +  (let* ((channel  (when channel (argument-channel  sender channel)))
  +         (user     (when user    (argument-old-user sender user    server))))
  +    (if allp
  +        (if user
  +            (if (has-user-credentials sender user)
  +                (values (if channel
  +                            (of-channel channel (requests user))
  +                            (requests user))
  +                        user)
  +                (progn
  +                  (answer sender "You are not authorized to access the requests from the user ~A." (name user))
  +                  nil))
  +            (if channel
  +                (if (has-server-credential sender server)
  +                    (values (requests channel))
  +                    (values (of-channel channel (requests sender)) sender))
  +                (if (has-server-credential sender server)
  +                    (values (requests (or server (server sender))))
  +                    (values (requests sender) sender))))
  +        (if channel
  +            (values (of-channel channel (requests sender)) sender)
  +            (values (requests sender))))))
  +
  +(defun list-log-requests (sender allp user channel &optional server)
  +  ;; (list-log-requests (server "irc.freenode.org") (nick "pjb"))
  +  ;; (list-log-requests nil nil)
     (with-server (sender server)
  -    (with-user (sender user server)
  -      (if (has-user-credentials sender user)
  -          (let ((requests (requests user)))
  -            (if (endp requests)
  -                (answer sender "~A has requested no logs." (name user))
  -                (dolist (request (requests user))
  -                  (answer sender "~3D) ~15A ~A ~@[~A~]"
  -                          (id request)
  -                          (name (channel request))
  -                          (format-iso8601-time (start-date request))
  -                          (when (end-date request)
  -                            (format-iso8601-time (end-date request)))))))
  -          (answer sender "You are not authorized list the channels logged by the user ~A." (name user))))))
  +    (multiple-value-bind (requests owner) (select-log-requests sender allp user channel server)
  +      (if requests
  +          (dolist (request requests
  +                           (answer sender "~R request~:*~p." (length requests)))
  +            (answer sender "~3D) ~9A requested ~15A from ~A~@[ to ~A~]"
  +                    (id request)
  +                    (name (owner request))
  +                    (name (channel request))
  +                    (format-iso8601-time (start-date request))
  +                    (when (end-date request)
  +                      (format-iso8601-time (end-date request)))))
  +          (answer sender "~:[No log requests.~;~A has requested no logs.~]" owner (name owner))))))
  +
  +(defun user-names (server)
  +  (mapcar (function pathname-name)
  +          (directory (user-pathname :wild server))))
   
   (defun list-users (sender server)
     ;; (list-users (server "irc.freenode.org")) 
     ;; (list-users nil)
     (with-server (sender server)
       (dolist (user 
  -             (if  (has-server-credential sender server)
  -                  (mapcar (function pathname-name)
  -                          (directory (user-pathname :wild server)))
  -                  (progn (answer sender "You are not authorized to list the users other than you.")
  -                         (list (name sender)))))
  +             (if (has-server-credential sender server)
  +                 (user-names server)
  +                 (progn (answer sender "You are not authorized to list the users other than you.")
  +                        (list (name sender)))))
         (let ((user (find-user server user)))
           (answer sender "~16A ~:[ ~;I~]~:[ ~;V~] ~@[~A~]"
                   (name user) (identified user) (verified user) (email user))))))
  
positive.code:           (answer sender "End date must be after start date.")
            (answer sender "Added ~A" (create-request channel sender start-date end-date))))))
  
  (defun cancel-log-channel (sender channel server)
    ;; (cancel-log-channel (channel "#lisp") (server "irc.freenode.org")) 
    ;; (cancel-log-channel (channel "#lisp") nil)
    (with-server (sender server)
      (let* ((channel  (argument-channel sender channel))
             (requests (requests sender))
             (the-one  (find-if (lambda (request)
                                  (and (eql channel (channel request))
                                       (<= (start-date request) (get-universal-time))
                                       (null (end-date request))))
                                requests)))
        (if the-one
            (answer sender "Deleted ~A" (delete-request the-one))
            (answer sender "Found no undelimited request.")))))
  
  (defun cancel-log-id (sender id)
    ;; (cancel-log-id (id "42"))
  
negative.code:        (reset (nick "pjb")))
        ("set password pjb 321545623f new-secret-password"
         (set-password (nick "pjb") (key "321545623f") (password "new-secret-password")))
        
        ("list users"
         (list-users nil))
        ("list users on irc.freenode.org"
         (list-users (server "irc.freenode.org")))
        ("list servers"
         (list-servers))
  
        ;;
        ("list     my log requests"
         (list-log-requests nil nil nil nil))                                
        ("list     my log requests for channel #lisp"
         (list-log-requests nil nil (channel "#lisp") nil))              
        ("list all my log requests"
         (list-log-requests nil nil nil nil))                                
  
        ("list all    log requests of mr foo"
         (list-log-requests t (nick "foo") (channel "#lisp") nil))                      
        ("list all    log requests of mr foo for channel #lisp"
         (list-log-requests t (nick "foo") (channel "#lisp") nil))    
        ("list all    log requests           for channel #lisp"
         (list-log-requests t nil (channel "#lisp") nil))    
        ("list all    log requests"
         (list-log-requests t nil (channel "#lisp") nil))                                
  
        ("list all    log requests of mr foo  on server irc.freenode.org"
         (list-log-requests t (nick "foo") (channel "#lisp") (server "irc.freenode.org")))                      
        ("list all    log requests of mr foo for channel #lisp  on server irc.freenode.org"
         (list-log-requests t (nick "foo") (channel "#lisp") (server "irc.freenode.org")))    
        ("list all    log requests           for channel #lisp  on server irc.freenode.org"
         (list-log-requests t nil (channel "#lisp") (server "irc.freenode.org")))    
        ("list all    log requests on server irc.freenode.org"
         (list-log-requests t nil (channel "#lisp") (server "irc.freenode.org")))                                
        
        ("list all channel logs on server irc.freenode.org"
         (list-log-requests t nil nil (server "irc.freenode.org")))
        ("list all channels"
         (list-log-requests t nil nil nil))
        ("list all logs on irc.freenode.org"
         (list-log-requests t nil nil (server "irc.freenode.org")))
        ("list all logs"
         (list-log-requests t nil nil nil))
        
        ;;
        ("cancel     my log requests"
         (cancel-log-requests nil nil nil nil))                                
        ("cancel     my log requests for channel #lisp"
         (cancel-log-requests nil nil (channel "#lisp") nil))              
        ("cancel all my log requests"
         (cancel-log-requests nil nil nil nil))                                
  
        ("cancel all    log requests of mr foo"
         (cancel-log-requests t (nick "foo") (channel "#lisp") nil))                      
        ("cancel all    log requests of mr foo for channel #lisp"
         (cancel-log-requests t (nick "foo") (channel "#lisp") nil))    
        ("cancel all    log requests           for channel #lisp"
         (cancel-log-requests t nil (channel "#lisp") nil))    
        ("cancel all    log requests"
         (cancel-log-requests t nil (channel "#lisp") nil))                                
  
        ("cancel all    log requests of mr foo  on server irc.freenode.org"
         (cancel-log-requests t (nick "foo") (channel "#lisp") (server "irc.freenode.org")))                      
        ("cancel all    log requests of mr foo for channel #lisp  on server irc.freenode.org"
         (cancel-log-requests t (nick "foo") (channel "#lisp") (server "irc.freenode.org")))    
        ("cancel all    log requests           for channel #lisp  on server irc.freenode.org"
         (cancel-log-requests t nil (channel "#lisp") (server "irc.freenode.org")))    
        ("cancel all    log requests on server irc.freenode.org"
         (cancel-log-requests t nil (channel "#lisp") (server "irc.freenode.org")))                                
        
        ("cancel all channel logs on server irc.freenode.org"
         (cancel-log-requests t nil nil (server "irc.freenode.org")))
        ("cancel all channels"
         (cancel-log-requests t nil nil nil))
        ("cancel all logs on irc.freenode.org"
         (cancel-log-requests t nil nil (server "irc.freenode.org")))
        ("cancel all logs"
         (cancel-log-requests t nil nil nil))
        ;;
        ("cancel all log request on channel #lisp on server irc.freenode.org"
         (cancel-log-requests t nil (channel "#lisp") (server "irc.freenode.org")))
        ("cancel all log request on channel #lisp"
         (cancel-log-requests t nil (channel "#lisp") nil))
        ("cancel all #lisp on irc.freenode.org"
         (cancel-log-requests t nil (channel "#lisp") (server "irc.freenode.org")))
        ("cancel all #lisp"
         (cancel-log-requests t nil (channel "#lisp") nil))
        ;;
        ("cancel log 42"
         (cancel-log-id (id "42")))
        ;;
        ("log channel #lisp on server irc.freenode.org                 to 2016-02-28"
         (log-request (channel "#lisp") (server "irc.freenode.org") nil (date "2016-02-28")))
        ("log channel #lisp on server irc.freenode.org from 2016-03-01 to 2016-03-31"
  