emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] feature/aptel/dynamic-modules-rc3 41ec64b 23/35: Merge bra


From: Noah Friedman
Subject: [Emacs-diffs] feature/aptel/dynamic-modules-rc3 41ec64b 23/35: Merge branch 'master' into dynamic-modules
Date: Mon, 8 May 2017 19:46:29 -0400 (EDT)

branch: feature/aptel/dynamic-modules-rc3
commit 41ec64b33d44d2f70ad82b6aa4e9ae3e22b3a677
Merge: 092a6d2 080b9b5
Author: Aurélien Aptel <address@hidden>
Commit: Aurélien Aptel <address@hidden>

    Merge branch 'master' into dynamic-modules
    
    Conflicts:
        src/doc.c
        src/lread.c
---
 .dir-locals.el                                     |    4 +-
 .gitattributes                                     |   40 +
 .gitignore                                         |  293 +-
 CONTRIBUTE                                         |  218 ++
 ChangeLog                                          |  397 ++-
 GNUmakefile                                        |    2 +-
 INSTALL                                            |   17 +-
 INSTALL.REPO                                       |    4 +-
 Makefile.in                                        |   43 +-
 README                                             |    2 +-
 admin/CPP-DEFINES                                  |    3 +-
 admin/ChangeLog                                    |  134 +-
 admin/MAINTAINERS                                  |   23 +-
 admin/README                                       |    2 +-
 admin/admin.el                                     |   65 +-
 admin/alloc-colors.c                               |    2 +-
 admin/authors.el                                   |   17 +-
 admin/build-configs                                |    2 +-
 admin/bzrmerge.el                                  |    2 +-
 admin/charsets/.gitignore                          |    2 -
 admin/charsets/mapfiles/README                     |    2 +-
 admin/cus-test.el                                  |    2 +-
 admin/diff-tar-files                               |    2 +-
 admin/find-gc.el                                   |    2 +-
 admin/gitmerge.el                                  |  525 ++++
 admin/grammars/Makefile.in                         |   39 +-
 admin/grammars/c.by                                |    2 +-
 admin/grammars/grammar.wy                          |    2 +-
 admin/grammars/java-tags.wy                        |    2 +-
 admin/grammars/js.wy                               |    2 +-
 admin/grammars/make.by                             |    2 +-
 admin/grammars/python.wy                           |    2 +-
 admin/grammars/scheme.by                           |    2 +-
 admin/grammars/srecode-template.wy                 |    2 +-
 admin/make-emacs                                   |    2 +-
 admin/merge-gnulib                                 |    6 +-
 admin/merge-pkg-config                             |    2 +-
 admin/notes/bugtracker                             |    6 +-
 admin/notes/changelogs                             |   32 -
 admin/notes/commits                                |   70 -
 admin/notes/copyright                              |    8 +-
 admin/notes/font-backend                           |    2 +-
 admin/notes/git-workflow                           |   56 +-
 admin/notes/hydra                                  |    2 +-
 admin/notes/multi-tty                              |    2 +-
 admin/notes/newfile                                |    2 +-
 admin/notes/repo                                   |   68 +-
 admin/notes/unicode                                |   35 +-
 admin/notes/www                                    |    2 +-
 admin/nt/README-UNDUMP.W32                         |    2 +-
 admin/nt/README-ftp-server                         |    2 +-
 admin/quick-install-emacs                          |    8 +-
 admin/unidata/.gitignore                           |    3 -
 admin/unidata/Makefile.in                          |   57 +-
 admin/unidata/unidata-gen.el                       |    6 +-
 admin/unidata/uvs.el                               |    3 +-
 admin/update-copyright                             |    4 +-
 admin/update_autogen                               |   13 +-
 autogen.sh                                         |   43 +-
 build-aux/git-hooks/commit-msg                     |  126 +
 .../git-hooks/pre-commit                           |   43 +-
 build-aux/make-info-dir                            |    2 +-
 build-aux/move-if-change                           |    2 +-
 build-aux/msys-to-w32                              |   16 +-
 build-aux/snippet/arg-nonnull.h                    |    2 +-
 build-aux/snippet/c++defs.h                        |    2 +-
 build-aux/snippet/warn-on-use.h                    |    2 +-
 build-aux/update-copyright                         |    6 +-
 build-aux/update-subdirs                           |    2 +-
 config.bat                                         |    2 +-
 configure.ac                                       |  136 +-
 doc/emacs/.gitignore                               |   23 -
 doc/emacs/ChangeLog                                |   96 +-
 doc/emacs/Makefile.in                              |   15 +-
 doc/emacs/abbrevs.texi                             |    2 +-
 doc/emacs/ack.texi                                 |    2 +-
 doc/emacs/anti.texi                                |    2 +-
 doc/emacs/arevert-xtra.texi                        |    2 +-
 doc/emacs/basic.texi                               |    2 +-
 doc/emacs/buffers.texi                             |   13 +-
 doc/emacs/building.texi                            |    4 +-
 doc/emacs/cal-xtra.texi                            |    2 +-
 doc/emacs/calendar.texi                            |    2 +-
 doc/emacs/cmdargs.texi                             |   11 +-
 doc/emacs/commands.texi                            |    2 +-
 doc/emacs/custom.texi                              |   12 +-
 doc/emacs/dired-xtra.texi                          |    2 +-
 doc/emacs/dired.texi                               |    2 +-
 doc/emacs/display.texi                             |   15 +-
 doc/emacs/emacs-xtra.texi                          |    2 +-
 doc/emacs/emacs.texi                               |    3 +-
 doc/emacs/emerge-xtra.texi                         |    2 +-
 doc/emacs/entering.texi                            |    2 +-
 doc/emacs/files.texi                               |    9 +-
 doc/emacs/fixit.texi                               |    2 +-
 doc/emacs/fortran-xtra.texi                        |    2 +-
 doc/emacs/frames.texi                              |    2 +-
 doc/emacs/glossary.texi                            |    2 +-
 doc/emacs/gnu.texi                                 |    2 +-
 doc/emacs/help.texi                                |    2 +-
 doc/emacs/indent.texi                              |    2 +-
 doc/emacs/killing.texi                             |    2 +-
 doc/emacs/kmacro.texi                              |    2 +-
 doc/emacs/m-x.texi                                 |    2 +-
 doc/emacs/macos.texi                               |    2 +-
 doc/emacs/maintaining.texi                         |   61 +-
 doc/emacs/makefile.w32-in                          |    2 +-
 doc/emacs/mark.texi                                |    2 +-
 doc/emacs/mini.texi                                |    2 +-
 doc/emacs/misc.texi                                |  132 +-
 doc/emacs/modes.texi                               |    2 +-
 doc/emacs/msdos-xtra.texi                          |    2 +-
 doc/emacs/msdos.texi                               |    2 +-
 doc/emacs/mule.texi                                |    2 +-
 doc/emacs/package.texi                             |    2 +-
 doc/emacs/picture-xtra.texi                        |    2 +-
 doc/emacs/programs.texi                            |    4 +-
 doc/emacs/regs.texi                                |    2 +-
 doc/emacs/rmail.texi                               |    2 +-
 doc/emacs/screen.texi                              |    2 +-
 doc/emacs/search.texi                              |    2 +-
 doc/emacs/sending.texi                             |    2 +-
 doc/emacs/text.texi                                |    2 +-
 doc/emacs/trouble.texi                             |  244 +-
 doc/emacs/vc-xtra.texi                             |    2 +-
 doc/emacs/vc1-xtra.texi                            |    2 +-
 doc/emacs/windows.texi                             |    2 +-
 doc/emacs/xresources.texi                          |    2 +-
 doc/lispintro/.gitignore                           |   21 -
 doc/lispintro/ChangeLog                            |   10 +-
 doc/lispintro/Makefile.in                          |   19 +-
 doc/lispintro/README                               |    2 +-
 doc/lispintro/cons-1.eps                           |    2 +-
 doc/lispintro/cons-2.eps                           |    2 +-
 doc/lispintro/cons-2a.eps                          |    2 +-
 doc/lispintro/cons-3.eps                           |    2 +-
 doc/lispintro/cons-4.eps                           |    2 +-
 doc/lispintro/cons-5.eps                           |    2 +-
 doc/lispintro/drawers.eps                          |    2 +-
 doc/lispintro/emacs-lisp-intro.texi                |    2 +-
 doc/lispintro/lambda-1.eps                         |    2 +-
 doc/lispintro/lambda-2.eps                         |    2 +-
 doc/lispintro/lambda-3.eps                         |    2 +-
 doc/lispintro/makefile.w32-in                      |    2 +-
 doc/lispref/.gitignore                             |   13 -
 doc/lispref/ChangeLog                              |  295 +-
 doc/lispref/Makefile.in                            |   19 +-
 doc/lispref/README                                 |    2 +-
 doc/lispref/abbrevs.texi                           |   11 +-
 doc/lispref/anti.texi                              |    2 +-
 doc/lispref/back.texi                              |    2 +-
 doc/lispref/backups.texi                           |    6 +-
 doc/lispref/buffers.texi                           |    4 +-
 doc/lispref/commands.texi                          |   34 +-
 doc/lispref/compile.texi                           |    3 +-
 doc/lispref/control.texi                           |   17 +-
 doc/lispref/customize.texi                         |    6 +-
 doc/lispref/debugging.texi                         |    8 +-
 doc/lispref/display.texi                           |  332 +-
 doc/lispref/edebug.texi                            |    2 +-
 doc/lispref/elisp.texi                             |    3 +-
 doc/lispref/errors.texi                            |    2 +-
 doc/lispref/eval.texi                              |    2 +-
 doc/lispref/files.texi                             |   26 +-
 doc/lispref/frames.texi                            |   34 +-
 doc/lispref/functions.texi                         |   82 +-
 doc/lispref/hash.texi                              |    4 +-
 doc/lispref/help.texi                              |    4 +-
 doc/lispref/hooks.texi                             |    3 +-
 doc/lispref/internals.texi                         |    5 +-
 doc/lispref/intro.texi                             |    4 +-
 doc/lispref/keymaps.texi                           |    6 +-
 doc/lispref/lay-flat.texi                          |    2 +-
 doc/lispref/lists.texi                             |   11 +-
 doc/lispref/loading.texi                           |    6 +-
 doc/lispref/macros.texi                            |    5 +-
 doc/lispref/makefile.w32-in                        |    2 +-
 doc/lispref/maps.texi                              |    2 +-
 doc/lispref/markers.texi                           |    9 +-
 doc/lispref/minibuf.texi                           |   34 +-
 doc/lispref/modes.texi                             |    6 +-
 doc/lispref/nonascii.texi                          |    7 +-
 doc/lispref/numbers.texi                           |    2 +-
 doc/lispref/objects.texi                           |    2 +-
 doc/lispref/os.texi                                |   20 +-
 doc/lispref/package.texi                           |    2 +-
 doc/lispref/positions.texi                         |    7 +-
 doc/lispref/processes.texi                         |   12 +-
 doc/lispref/searching.texi                         |   16 +-
 doc/lispref/sequences.texi                         |  297 +-
 doc/lispref/streams.texi                           |   28 +-
 doc/lispref/strings.texi                           |   19 +-
 doc/lispref/symbols.texi                           |    2 +-
 doc/lispref/syntax.texi                            |    9 +-
 doc/lispref/text.texi                              |  178 +-
 doc/lispref/tips.texi                              |   10 +-
 doc/lispref/two-volume-cross-refs.txt              |    2 +-
 doc/lispref/two-volume.make                        |    2 +-
 doc/lispref/variables.texi                         |    6 +-
 doc/lispref/windows.texi                           |  136 +-
 doc/man/ChangeLog                                  |    7 +-
 doc/man/ebrowse.1                                  |    2 +-
 doc/man/emacs.1.in                                 |    2 +-
 doc/man/etags.1                                    |    2 +-
 doc/man/grep-changelog.1                           |   80 -
 doc/misc/.gitignore                                |   23 -
 doc/misc/ChangeLog                                 |   81 +-
 doc/misc/Makefile.in                               |   24 +-
 doc/misc/ada-mode.texi                             |    2 +-
 doc/misc/auth.texi                                 |    2 +-
 doc/misc/autotype.texi                             |    2 +-
 doc/misc/bovine.texi                               |    2 +-
 doc/misc/calc.texi                                 |   27 +-
 doc/misc/cc-mode.texi                              |    2 +-
 doc/misc/cl.texi                                   |    6 +-
 doc/misc/dbus.texi                                 |    2 +-
 doc/misc/dired-x.texi                              |    2 +-
 doc/misc/ebrowse.texi                              |    2 +-
 doc/misc/ede.texi                                  |    2 +-
 doc/misc/ediff.texi                                |    2 +-
 doc/misc/edt.texi                                  |    2 +-
 doc/misc/efaq-w32.texi                             |    2 +-
 doc/misc/efaq.texi                                 |    4 +-
 doc/misc/eieio.texi                                |    7 +-
 doc/misc/emacs-gnutls.texi                         |    2 +-
 doc/misc/emacs-mime.texi                           |    2 +-
 doc/misc/epa.texi                                  |    2 +-
 doc/misc/erc.texi                                  |    2 +-
 doc/misc/ert.texi                                  |    2 +-
 doc/misc/eshell.texi                               |    2 +-
 doc/misc/eudc.texi                                 |  132 +-
 doc/misc/eww.texi                                  |   58 +-
 doc/misc/flymake.texi                              |    2 +-
 doc/misc/forms.texi                                |    2 +-
 doc/misc/gnus-coding.texi                          |    2 +-
 doc/misc/gnus-faq.texi                             |    4 +-
 doc/misc/gnus-news.el                              |    4 +-
 doc/misc/gnus-news.texi                            |    2 +-
 doc/misc/gnus.texi                                 |   29 +-
 doc/misc/htmlfontify.texi                          |    2 +-
 doc/misc/idlwave.texi                              |    2 +-
 doc/misc/ido.texi                                  |    2 +-
 doc/misc/info.texi                                 |    7 +-
 doc/misc/mairix-el.texi                            |    2 +-
 doc/misc/makefile.w32-in                           |    2 +-
 doc/misc/message.texi                              |    2 +-
 doc/misc/mh-e.texi                                 |    2 +-
 doc/misc/newsticker.texi                           |    2 +-
 doc/misc/nxml-mode.texi                            |    2 +-
 doc/misc/octave-mode.texi                          |    2 +-
 doc/misc/org.texi                                  |    4 +-
 doc/misc/pcl-cvs.texi                              |    2 +-
 doc/misc/pgg.texi                                  |    2 +-
 doc/misc/rcirc.texi                                |    2 +-
 doc/misc/reftex.texi                               |    2 +-
 doc/misc/remember.texi                             |    2 +-
 doc/misc/sasl.texi                                 |    2 +-
 doc/misc/sc.texi                                   |    2 +-
 doc/misc/sem-user.texi                             |    2 +-
 doc/misc/semantic.texi                             |    2 +-
 doc/misc/ses.texi                                  |    2 +-
 doc/misc/sieve.texi                                |    2 +-
 doc/misc/smtpmail.texi                             |    4 +-
 doc/misc/speedbar.texi                             |    2 +-
 doc/misc/srecode.texi                              |    2 +-
 doc/misc/texinfo.tex                               |   88 +-
 doc/misc/todo-mode.texi                            |    2 +-
 doc/misc/tramp.texi                                |   19 +-
 doc/misc/trampver.texi                             |    4 +-
 doc/misc/url.texi                                  |    2 +-
 doc/misc/vhdl-mode.texi                            |    2 +-
 doc/misc/vip.texi                                  |    2 +-
 doc/misc/viper.texi                                |    2 +-
 doc/misc/widget.texi                               |    2 +-
 doc/misc/wisent.texi                               |    2 +-
 doc/misc/woman.texi                                |    2 +-
 etc/.gitignore                                     |    2 -
 etc/CALC-NEWS                                      |    2 +-
 etc/CONTRIBUTE                                     |  217 --
 etc/ChangeLog                                      |  147 +-
 etc/DEBUG                                          |    2 +-
 etc/DISTRIB                                        |    2 +-
 etc/ERC-NEWS                                       |    2 +-
 etc/ETAGS.EBNF                                     |    2 +-
 etc/ETAGS.README                                   |    2 +-
 etc/GNUS-NEWS                                      |    2 +-
 etc/HELLO                                          |    2 +-
 etc/MACHINES                                       |    3 +-
 etc/MH-E-NEWS                                      |    2 +-
 etc/NEWS                                           |  282 +-
 etc/NEWS.1-17                                      |    2 +-
 etc/NEWS.18                                        |    2 +-
 etc/NEWS.19                                        |    2 +-
 etc/NEWS.20                                        |    2 +-
 etc/NEWS.21                                        |    2 +-
 etc/NEWS.22                                        |    2 +-
 etc/NEWS.23                                        |    2 +-
 etc/NEWS.24                                        |    5 +-
 etc/NEXTSTEP                                       |    2 +-
 etc/NXML-NEWS                                      |    2 +-
 etc/ORG-NEWS                                       |    2 +-
 etc/PROBLEMS                                       |   28 +-
 etc/README                                         |    2 +-
 etc/TERMS                                          |    4 +-
 etc/TODO                                           |    8 +-
 etc/charsets/README                                |    2 +-
 etc/compilation.txt                                |    2 +-
 etc/edt-user.el                                    |    2 +-
 etc/emacs-buffer.gdb                               |    2 +-
 etc/emacs.appdata.xml                              |    2 +-
 etc/enriched.txt                                   |    2 +-
 etc/forms/forms-d2.el                              |    2 +-
 etc/gnus-tut.txt                                   |    2 +-
 etc/grep.txt                                       |    8 +-
 etc/images/README                                  |   14 +-
 etc/images/checked.xpm                             |    2 +-
 etc/images/custom/README                           |    2 +-
 etc/images/ezimage/README                          |    2 +-
 etc/images/gnus/README                             |    6 +-
 etc/images/gnus/gnus.svg                           |    2 +-
 etc/images/gud/README                              |    6 +-
 etc/images/icons/README                            |    6 +-
 etc/images/icons/hicolor/scalable/apps/emacs.svg   |    2 +-
 .../hicolor/scalable/mimetypes/emacs-document.svg  |    2 +-
 etc/images/mh-logo.xpm                             |    2 +-
 etc/images/mpc/README                              |    2 +-
 etc/images/newsticker/README                       |    2 +-
 etc/images/smilies/README                          |    2 +-
 etc/images/smilies/grayscale/README                |    2 +-
 etc/images/smilies/medium/README                   |    2 +-
 etc/images/splash.pbm                              |  Bin 8273 -> 9797 bytes
 etc/images/splash.png                              |  Bin 37472 -> 25160 bytes
 etc/images/splash.svg                              |  126 +-
 etc/images/splash.xpm                              |  611 ++--
 etc/images/tree-widget/default/README              |    2 +-
 etc/images/tree-widget/folder/README               |    2 +-
 etc/images/unchecked.xpm                           |    2 +-
 etc/org/README                                     |    2 +-
 etc/ps-prin0.ps                                    |    2 +-
 etc/ps-prin1.ps                                    |    2 +-
 etc/publicsuffix.txt                               | 2745 +++++++++++------
 etc/refcards/Makefile                              |    2 +-
 etc/refcards/README                                |    4 +-
 etc/refcards/calccard.tex                          |    2 +-
 etc/refcards/cs-dired-ref.tex                      |  215 +-
 etc/refcards/cs-refcard.tex                        |  454 ++-
 etc/refcards/cs-survival.tex                       |  360 ++-
 etc/refcards/de-refcard.tex                        |    2 +-
 etc/refcards/dired-ref.tex                         |    2 +-
 etc/refcards/emacsver.tex.in                       |    2 +-
 etc/refcards/fr-dired-ref.tex                      |    2 +-
 etc/refcards/fr-refcard.tex                        |    2 +-
 etc/refcards/fr-survival.tex                       |    2 +-
 etc/refcards/gnus-logo.eps                         |    2 +-
 etc/refcards/gnus-refcard.tex                      |    2 +-
 etc/refcards/orgcard.tex                           |    2 +-
 etc/refcards/pdflayout.sty                         |    2 +-
 etc/refcards/pl-refcard.tex                        |    2 +-
 etc/refcards/pt-br-refcard.tex                     |    2 +-
 etc/refcards/refcard.tex                           |    2 +-
 etc/refcards/ru-refcard.tex                        |    4 +-
 etc/refcards/sk-dired-ref.tex                      |  230 +-
 etc/refcards/sk-refcard.tex                        |  465 ++-
 etc/refcards/sk-survival.tex                       |  334 +-
 etc/refcards/survival.tex                          |    2 +-
 etc/refcards/vipcard.tex                           |    2 +-
 etc/refcards/viperCard.tex                         |    2 +-
 etc/schema/locate.rnc                              |    2 +-
 etc/schema/relaxng.rnc                             |    2 +-
 etc/schema/schemas.xml                             |    2 +-
 etc/ses-example.ses                                |    2 +-
 etc/srecode/c.srt                                  |    2 +-
 etc/srecode/cpp.srt                                |    2 +-
 etc/srecode/default.srt                            |    2 +-
 etc/srecode/doc-cpp.srt                            |    2 +-
 etc/srecode/doc-default.srt                        |    2 +-
 etc/srecode/doc-java.srt                           |    2 +-
 etc/srecode/ede-autoconf.srt                       |    2 +-
 etc/srecode/ede-make.srt                           |    2 +-
 etc/srecode/el.srt                                 |    2 +-
 etc/srecode/getset-cpp.srt                         |    2 +-
 etc/srecode/java.srt                               |    2 +-
 etc/srecode/make.srt                               |    2 +-
 etc/srecode/template.srt                           |    2 +-
 etc/srecode/test.srt                               |    2 +-
 etc/srecode/texi.srt                               |    2 +-
 etc/srecode/wisent.srt                             |    2 +-
 etc/themes/adwaita-theme.el                        |    2 +-
 etc/themes/deeper-blue-theme.el                    |    2 +-
 etc/themes/dichromacy-theme.el                     |    2 +-
 etc/themes/leuven-theme.el                         |    2 +-
 etc/themes/light-blue-theme.el                     |    2 +-
 etc/themes/manoj-dark-theme.el                     |    2 +-
 etc/themes/misterioso-theme.el                     |    2 +-
 etc/themes/tango-dark-theme.el                     |    2 +-
 etc/themes/tango-theme.el                          |    2 +-
 etc/themes/tsdh-dark-theme.el                      |    2 +-
 etc/themes/tsdh-light-theme.el                     |    2 +-
 etc/themes/wheatgrass-theme.el                     |    2 +-
 etc/themes/whiteboard-theme.el                     |    2 +-
 etc/themes/wombat-theme.el                         |    2 +-
 etc/tutorials/TUTORIAL                             |    2 +-
 etc/tutorials/TUTORIAL.bg                          |    2 +-
 etc/tutorials/TUTORIAL.cn                          |    4 +-
 etc/tutorials/TUTORIAL.cs                          |    2 +-
 etc/tutorials/TUTORIAL.de                          |    2 +-
 etc/tutorials/TUTORIAL.eo                          |    2 +-
 etc/tutorials/TUTORIAL.es                          |  232 +-
 etc/tutorials/TUTORIAL.fr                          |    2 +-
 etc/tutorials/TUTORIAL.he                          |   76 +-
 etc/tutorials/TUTORIAL.it                          |    2 +-
 etc/tutorials/TUTORIAL.ja                          |    2 +-
 etc/tutorials/TUTORIAL.ko                          |    2 +-
 etc/tutorials/TUTORIAL.nl                          |    4 +-
 etc/tutorials/TUTORIAL.pl                          |    2 +-
 etc/tutorials/TUTORIAL.pt_BR                       |    2 +-
 etc/tutorials/TUTORIAL.ro                          |    4 +-
 etc/tutorials/TUTORIAL.ru                          |    2 +-
 etc/tutorials/TUTORIAL.sk                          |    2 +-
 etc/tutorials/TUTORIAL.sl                          |    2 +-
 etc/tutorials/TUTORIAL.sv                          |    2 +-
 etc/tutorials/TUTORIAL.th                          |    2 +-
 etc/tutorials/TUTORIAL.zh                          |    2 +-
 leim/.gitignore                                    |    2 -
 leim/ChangeLog                                     |   15 +-
 leim/Makefile.in                                   |   28 +-
 leim/README                                        |    2 +-
 leim/SKK-DIC/SKK-JISYO.L                           |   12 +-
 leim/ja-dic/.gitignore                             |    1 -
 leim/leim-ext.el                                   |    2 +-
 leim/makefile.w32-in                               |    2 +-
 lib-src/.gitignore                                 |    7 -
 lib-src/ChangeLog                                  |  160 +-
 lib-src/Makefile.in                                |  111 +-
 lib-src/ebrowse.c                                  |   31 +-
 lib-src/emacsclient.c                              |   37 +-
 lib-src/etags.c                                    |   43 +-
 lib-src/grep-changelog                             |  265 --
 lib-src/hexl.c                                     |    2 +-
 lib-src/make-docfile.c                             |  361 ++-
 lib-src/makefile.w32-in                            |    2 +-
 lib-src/movemail.c                                 |    2 +-
 lib-src/ntlib.c                                    |    2 +-
 lib-src/ntlib.h                                    |    2 +-
 lib-src/pop.c                                      |    5 +-
 lib-src/pop.h                                      |    2 +-
 lib-src/profile.c                                  |    2 +-
 lib-src/rcs2log                                    |    4 +-
 lib-src/update-game-score.c                        |   47 +-
 lib/acl-errno-valid.c                              |    2 +-
 lib/acl-internal.h                                 |    2 +-
 lib/acl.h                                          |    2 +-
 lib/acl_entries.c                                  |    2 +-
 lib/alloca.in.h                                    |    2 +-
 lib/allocator.h                                    |    2 +-
 lib/at-func.c                                      |    2 +-
 lib/binary-io.h                                    |    2 +-
 lib/byteswap.in.h                                  |    2 +-
 lib/c-ctype.c                                      |    2 +-
 lib/c-ctype.h                                      |    2 +-
 lib/c-strcase.h                                    |    2 +-
 lib/c-strcasecmp.c                                 |    2 +-
 lib/c-strncasecmp.c                                |    2 +-
 lib/careadlinkat.c                                 |    2 +-
 lib/careadlinkat.h                                 |    2 +-
 lib/close-stream.c                                 |    2 +-
 lib/count-one-bits.h                               |    2 +-
 lib/count-trailing-zeros.h                         |    2 +-
 lib/dirent.in.h                                    |    2 +-
 lib/dosname.h                                      |    2 +-
 lib/dtotimespec.c                                  |    2 +-
 lib/dup2.c                                         |    2 +-
 lib/errno.in.h                                     |    2 +-
 lib/euidaccess.c                                   |    2 +-
 lib/execinfo.in.h                                  |    2 +-
 lib/faccessat.c                                    |    2 +-
 lib/fcntl.c                                        |    2 +-
 lib/fcntl.in.h                                     |    2 +-
 lib/fdatasync.c                                    |    2 +-
 lib/fdopendir.c                                    |    2 +-
 lib/file-has-acl.c                                 |    2 +-
 lib/filemode.c                                     |    2 +-
 lib/filemode.h                                     |    2 +-
 lib/fpending.c                                     |    2 +-
 lib/fpending.h                                     |    2 +-
 lib/fstatat.c                                      |    2 +-
 lib/fsync.c                                        |    2 +-
 lib/ftoastr.c                                      |    2 +-
 lib/ftoastr.h                                      |    2 +-
 lib/getdtablesize.c                                |    2 +-
 lib/getgroups.c                                    |    2 +-
 lib/getloadavg.c                                   |    2 +-
 lib/getopt.c                                       |    2 +-
 lib/getopt.in.h                                    |    2 +-
 lib/getopt1.c                                      |    2 +-
 lib/getopt_.h                                      |    4 +-
 lib/getopt_int.h                                   |    2 +-
 lib/gettext.h                                      |    2 +-
 lib/gettime.c                                      |    2 +-
 lib/gettimeofday.c                                 |    2 +-
 lib/gnulib.mk                                      |   15 +-
 lib/group-member.c                                 |    2 +-
 lib/intprops.h                                     |    2 +-
 lib/inttypes.in.h                                  |    2 +-
 lib/lstat.c                                        |    2 +-
 lib/makefile.w32-in                                |    2 +-
 lib/md5.c                                          |    2 +-
 lib/md5.h                                          |    2 +-
 lib/memrchr.c                                      |    2 +-
 lib/mkostemp.c                                     |    2 +-
 lib/mktime.c                                       |    2 +-
 lib/openat-priv.h                                  |    2 +-
 lib/openat-proc.c                                  |    2 +-
 lib/openat.h                                       |    2 +-
 lib/pathmax.h                                      |    2 +-
 lib/pipe2.c                                        |    2 +-
 lib/pselect.c                                      |    2 +-
 lib/pthread_sigmask.c                              |    2 +-
 lib/putenv.c                                       |    2 +-
 lib/qcopy-acl.c                                    |    2 +-
 lib/qset-acl.c                                     |    2 +-
 lib/readlink.c                                     |    2 +-
 lib/readlinkat.c                                   |    2 +-
 lib/root-uid.h                                     |    2 +-
 lib/save-cwd.c                                     |    2 +-
 lib/save-cwd.h                                     |    4 +-
 lib/secure_getenv.c                                |    2 +-
 lib/sha1.c                                         |    2 +-
 lib/sha1.h                                         |    2 +-
 lib/sha256.c                                       |    2 +-
 lib/sha256.h                                       |    2 +-
 lib/sha512.c                                       |    2 +-
 lib/sha512.h                                       |    2 +-
 lib/sig2str.c                                      |    2 +-
 lib/sig2str.h                                      |    2 +-
 lib/signal.in.h                                    |    2 +-
 lib/stat-time.h                                    |   18 +-
 lib/stat.c                                         |    2 +-
 lib/stdalign.in.h                                  |    7 +-
 lib/stddef.in.h                                    |   43 +-
 lib/stdint.in.h                                    |    2 +-
 lib/stdio.in.h                                     |    9 +-
 lib/stdlib.in.h                                    |    2 +-
 lib/{strtoull.c => stpcpy.c}                       |   39 +-
 lib/strftime.c                                     |    2 +-
 lib/strftime.h                                     |    2 +-
 lib/string.in.h                                    |    2 +-
 lib/strtoimax.c                                    |    2 +-
 lib/strtol.c                                       |    2 +-
 lib/strtoll.c                                      |    2 +-
 lib/strtoul.c                                      |    2 +-
 lib/strtoull.c                                     |    2 +-
 lib/symlink.c                                      |    2 +-
 lib/sys_select.in.h                                |    2 +-
 lib/sys_stat.in.h                                  |    2 +-
 lib/sys_time.in.h                                  |    2 +-
 lib/sys_types.in.h                                 |    2 +-
 lib/tempname.c                                     |    2 +-
 lib/tempname.h                                     |    2 +-
 lib/time.in.h                                      |    4 +-
 lib/time_r.c                                       |    2 +-
 lib/timespec-add.c                                 |    2 +-
 lib/timespec-sub.c                                 |    2 +-
 lib/timespec.h                                     |    6 +-
 lib/u64.h                                          |    2 +-
 lib/unistd.in.h                                    |    4 +-
 lib/unsetenv.c                                     |    2 +-
 lib/utimens.c                                      |    4 +-
 lib/utimens.h                                      |    2 +-
 lib/verify.h                                       |    2 +-
 lib/vla.h                                          |    2 +-
 lib/xalloc-oversized.h                             |    2 +-
 lisp/.gitignore                                    |    6 -
 lisp/ChangeLog                                     | 3214 +++++++++++++++++++-
 lisp/ChangeLog.1                                   |    2 +-
 lisp/ChangeLog.10                                  |    4 +-
 lisp/ChangeLog.11                                  |    2 +-
 lisp/ChangeLog.12                                  |    4 +-
 lisp/ChangeLog.13                                  |    8 +-
 lisp/ChangeLog.14                                  |   28 +-
 lisp/ChangeLog.15                                  |   28 +-
 lisp/ChangeLog.16                                  |    8 +-
 lisp/ChangeLog.2                                   |    2 +-
 lisp/ChangeLog.3                                   |    2 +-
 lisp/ChangeLog.4                                   |    2 +-
 lisp/ChangeLog.5                                   |    2 +-
 lisp/ChangeLog.6                                   |    4 +-
 lisp/ChangeLog.7                                   |    4 +-
 lisp/ChangeLog.8                                   |    2 +-
 lisp/ChangeLog.9                                   |    2 +-
 lisp/Makefile.in                                   |   81 +-
 lisp/abbrev.el                                     |    2 +-
 lisp/align.el                                      |    2 +-
 lisp/allout-widgets.el                             |    2 +-
 lisp/allout.el                                     |    2 +-
 lisp/ansi-color.el                                 |    2 +-
 lisp/apropos.el                                    |    2 +-
 lisp/arc-mode.el                                   |   17 +-
 lisp/array.el                                      |    2 +-
 lisp/autoarg.el                                    |    2 +-
 lisp/autoinsert.el                                 |   26 +-
 lisp/autorevert.el                                 |   19 +-
 lisp/avoid.el                                      |    2 +-
 lisp/battery.el                                    |    2 +-
 lisp/bindings.el                                   |    6 +-
 lisp/bookmark.el                                   |    2 +-
 lisp/bs.el                                         |    2 +-
 lisp/buff-menu.el                                  |    2 +-
 lisp/button.el                                     |   24 +-
 lisp/calc/.gitignore                               |    2 -
 lisp/calc/calc-aent.el                             |    2 +-
 lisp/calc/calc-alg.el                              |    2 +-
 lisp/calc/calc-arith.el                            |    2 +-
 lisp/calc/calc-bin.el                              |    2 +-
 lisp/calc/calc-comb.el                             |    2 +-
 lisp/calc/calc-cplx.el                             |    2 +-
 lisp/calc/calc-embed.el                            |    2 +-
 lisp/calc/calc-ext.el                              |    6 +-
 lisp/calc/calc-fin.el                              |    2 +-
 lisp/calc/calc-forms.el                            |    2 +-
 lisp/calc/calc-frac.el                             |    2 +-
 lisp/calc/calc-funcs.el                            |    2 +-
 lisp/calc/calc-graph.el                            |    2 +-
 lisp/calc/calc-help.el                             |    4 +-
 lisp/calc/calc-incom.el                            |    2 +-
 lisp/calc/calc-keypd.el                            |    2 +-
 lisp/calc/calc-lang.el                             |    2 +-
 lisp/calc/calc-macs.el                             |    2 +-
 lisp/calc/calc-map.el                              |    2 +-
 lisp/calc/calc-math.el                             |    2 +-
 lisp/calc/calc-menu.el                             |    2 +-
 lisp/calc/calc-misc.el                             |    2 +-
 lisp/calc/calc-mode.el                             |    2 +-
 lisp/calc/calc-mtx.el                              |    2 +-
 lisp/calc/calc-nlfit.el                            |    2 +-
 lisp/calc/calc-poly.el                             |    2 +-
 lisp/calc/calc-prog.el                             |    2 +-
 lisp/calc/calc-rewr.el                             |    2 +-
 lisp/calc/calc-rules.el                            |    2 +-
 lisp/calc/calc-sel.el                              |    2 +-
 lisp/calc/calc-stat.el                             |    2 +-
 lisp/calc/calc-store.el                            |    2 +-
 lisp/calc/calc-stuff.el                            |    2 +-
 lisp/calc/calc-trail.el                            |    2 +-
 lisp/calc/calc-undo.el                             |    2 +-
 lisp/calc/calc-units.el                            |   54 +-
 lisp/calc/calc-vec.el                              |    2 +-
 lisp/calc/calc-yank.el                             |    2 +-
 lisp/calc/calc.el                                  |    2 +-
 lisp/calc/calcalg2.el                              |    2 +-
 lisp/calc/calcalg3.el                              |    2 +-
 lisp/calc/calccomp.el                              |    2 +-
 lisp/calc/calcsel2.el                              |    2 +-
 lisp/calculator.el                                 |   18 +-
 lisp/calendar/.gitignore                           |    4 -
 lisp/calendar/appt.el                              |    2 +-
 lisp/calendar/cal-bahai.el                         |    2 +-
 lisp/calendar/cal-china.el                         |   31 +-
 lisp/calendar/cal-coptic.el                        |    2 +-
 lisp/calendar/cal-dst.el                           |    2 +-
 lisp/calendar/cal-french.el                        |    4 +-
 lisp/calendar/cal-hebrew.el                        |    2 +-
 lisp/calendar/cal-html.el                          |    2 +-
 lisp/calendar/cal-islam.el                         |    2 +-
 lisp/calendar/cal-iso.el                           |    2 +-
 lisp/calendar/cal-julian.el                        |    2 +-
 lisp/calendar/cal-mayan.el                         |    2 +-
 lisp/calendar/cal-menu.el                          |    2 +-
 lisp/calendar/cal-move.el                          |    2 +-
 lisp/calendar/cal-persia.el                        |    2 +-
 lisp/calendar/cal-tex.el                           |    2 +-
 lisp/calendar/cal-x.el                             |    2 +-
 lisp/calendar/calendar.el                          |    3 +-
 lisp/calendar/diary-lib.el                         |    6 +-
 lisp/calendar/holidays.el                          |    4 +-
 lisp/calendar/icalendar.el                         |    2 +-
 lisp/calendar/lunar.el                             |    3 +-
 lisp/calendar/parse-time.el                        |    2 +-
 lisp/calendar/solar.el                             |    2 +-
 lisp/calendar/time-date.el                         |    2 +-
 lisp/calendar/timeclock.el                         |    2 +-
 lisp/calendar/todo-mode.el                         |   47 +-
 lisp/case-table.el                                 |    2 +-
 lisp/cdl.el                                        |    2 +-
 lisp/cedet/.gitignore                              |    8 -
 lisp/cedet/ChangeLog                               |  163 +-
 lisp/cedet/cedet-cscope.el                         |    2 +-
 lisp/cedet/cedet-files.el                          |    2 +-
 lisp/cedet/cedet-global.el                         |    2 +-
 lisp/cedet/cedet-idutils.el                        |    2 +-
 lisp/cedet/cedet.el                                |    2 +-
 lisp/cedet/data-debug.el                           |    2 +-
 lisp/cedet/ede.el                                  |   12 +-
 lisp/cedet/ede/auto.el                             |    2 +-
 lisp/cedet/ede/autoconf-edit.el                    |    2 +-
 lisp/cedet/ede/base.el                             |   23 +-
 lisp/cedet/ede/config.el                           |    2 +-
 lisp/cedet/ede/cpp-root.el                         |    2 +-
 lisp/cedet/ede/custom.el                           |    6 +-
 lisp/cedet/ede/detect.el                           |    2 +-
 lisp/cedet/ede/dired.el                            |    3 +-
 lisp/cedet/ede/emacs.el                            |    2 +-
 lisp/cedet/ede/files.el                            |    2 +-
 lisp/cedet/ede/generic.el                          |    4 +-
 lisp/cedet/ede/linux.el                            |    2 +-
 lisp/cedet/ede/locate.el                           |    2 +-
 lisp/cedet/ede/make.el                             |    2 +-
 lisp/cedet/ede/makefile-edit.el                    |    2 +-
 lisp/cedet/ede/pconf.el                            |    2 +-
 lisp/cedet/ede/pmake.el                            |    2 +-
 lisp/cedet/ede/proj-archive.el                     |    2 +-
 lisp/cedet/ede/proj-aux.el                         |    2 +-
 lisp/cedet/ede/proj-comp.el                        |    2 +-
 lisp/cedet/ede/proj-elisp.el                       |    2 +-
 lisp/cedet/ede/proj-info.el                        |    2 +-
 lisp/cedet/ede/proj-misc.el                        |    2 +-
 lisp/cedet/ede/proj-obj.el                         |    2 +-
 lisp/cedet/ede/proj-prog.el                        |    2 +-
 lisp/cedet/ede/proj-scheme.el                      |    2 +-
 lisp/cedet/ede/proj-shared.el                      |    2 +-
 lisp/cedet/ede/proj.el                             |    4 +-
 lisp/cedet/ede/project-am.el                       |   12 +-
 lisp/cedet/ede/shell.el                            |    2 +-
 lisp/cedet/ede/simple.el                           |    2 +-
 lisp/cedet/ede/source.el                           |    2 +-
 lisp/cedet/ede/speedbar.el                         |   10 +-
 lisp/cedet/ede/srecode.el                          |    2 +-
 lisp/cedet/ede/system.el                           |    2 +-
 lisp/cedet/ede/util.el                             |    2 +-
 lisp/cedet/inversion.el                            |    2 +-
 lisp/cedet/mode-local.el                           |    2 +-
 lisp/cedet/pulse.el                                |   18 +-
 lisp/cedet/semantic.el                             |  146 +-
 lisp/cedet/semantic/analyze.el                     |    2 +-
 lisp/cedet/semantic/analyze/complete.el            |    2 +-
 lisp/cedet/semantic/analyze/debug.el               |    2 +-
 lisp/cedet/semantic/analyze/fcn.el                 |    2 +-
 lisp/cedet/semantic/analyze/refs.el                |    2 +-
 lisp/cedet/semantic/bovine.el                      |    2 +-
 lisp/cedet/semantic/bovine/c.el                    |    2 +-
 lisp/cedet/semantic/bovine/debug.el                |    2 +-
 lisp/cedet/semantic/bovine/el.el                   |    2 +-
 lisp/cedet/semantic/bovine/gcc.el                  |    2 +-
 lisp/cedet/semantic/bovine/grammar.el              |    2 +-
 lisp/cedet/semantic/bovine/make.el                 |    7 +-
 lisp/cedet/semantic/bovine/scm.el                  |    2 +-
 lisp/cedet/semantic/chart.el                       |    2 +-
 lisp/cedet/semantic/complete.el                    |    6 +-
 lisp/cedet/semantic/ctxt.el                        |    2 +-
 lisp/cedet/semantic/db-debug.el                    |    2 +-
 lisp/cedet/semantic/db-ebrowse.el                  |    4 +-
 lisp/cedet/semantic/db-el.el                       |    6 +-
 lisp/cedet/semantic/db-file.el                     |    5 +-
 lisp/cedet/semantic/db-find.el                     |    8 +-
 lisp/cedet/semantic/db-global.el                   |    2 +-
 lisp/cedet/semantic/db-javascript.el               |    2 +-
 lisp/cedet/semantic/db-mode.el                     |    2 +-
 lisp/cedet/semantic/db-ref.el                      |    2 +-
 lisp/cedet/semantic/db-typecache.el                |    4 +-
 lisp/cedet/semantic/db.el                          |   10 +-
 lisp/cedet/semantic/debug.el                       |    2 +-
 lisp/cedet/semantic/decorate.el                    |    2 +-
 lisp/cedet/semantic/decorate/include.el            |    2 +-
 lisp/cedet/semantic/decorate/mode.el               |    2 +-
 lisp/cedet/semantic/dep.el                         |    2 +-
 lisp/cedet/semantic/doc.el                         |    2 +-
 lisp/cedet/semantic/ede-grammar.el                 |    4 +-
 lisp/cedet/semantic/edit.el                        |    2 +-
 lisp/cedet/semantic/find.el                        |    2 +-
 lisp/cedet/semantic/format.el                      |    2 +-
 lisp/cedet/semantic/fw.el                          |   21 +-
 lisp/cedet/semantic/grammar-wy.el                  |    2 +-
 lisp/cedet/semantic/grammar.el                     |   11 +-
 lisp/cedet/semantic/html.el                        |    2 +-
 lisp/cedet/semantic/ia-sb.el                       |    3 +-
 lisp/cedet/semantic/ia.el                          |    2 +-
 lisp/cedet/semantic/idle.el                        |    2 +-
 lisp/cedet/semantic/imenu.el                       |    3 +-
 lisp/cedet/semantic/java.el                        |    2 +-
 lisp/cedet/semantic/lex-spp.el                     |    7 +-
 lisp/cedet/semantic/lex.el                         |    2 +-
 lisp/cedet/semantic/mru-bookmark.el                |    2 +-
 lisp/cedet/semantic/sb.el                          |    2 +-
 lisp/cedet/semantic/scope.el                       |    6 +-
 lisp/cedet/semantic/senator.el                     |    2 +-
 lisp/cedet/semantic/sort.el                        |    2 +-
 lisp/cedet/semantic/symref.el                      |    2 +-
 lisp/cedet/semantic/symref/cscope.el               |    2 +-
 lisp/cedet/semantic/symref/filter.el               |    2 +-
 lisp/cedet/semantic/symref/global.el               |    2 +-
 lisp/cedet/semantic/symref/grep.el                 |    2 +-
 lisp/cedet/semantic/symref/idutils.el              |    2 +-
 lisp/cedet/semantic/symref/list.el                 |    2 +-
 lisp/cedet/semantic/tag-file.el                    |    2 +-
 lisp/cedet/semantic/tag-ls.el                      |    2 +-
 lisp/cedet/semantic/tag-write.el                   |    2 +-
 lisp/cedet/semantic/tag.el                         |    2 +-
 lisp/cedet/semantic/texi.el                        |    2 +-
 lisp/cedet/semantic/util-modes.el                  |    2 +-
 lisp/cedet/semantic/util.el                        |    2 +-
 lisp/cedet/semantic/wisent.el                      |    2 +-
 lisp/cedet/semantic/wisent/comp.el                 |    2 +-
 lisp/cedet/semantic/wisent/grammar.el              |    2 +-
 lisp/cedet/semantic/wisent/java-tags.el            |    2 +-
 lisp/cedet/semantic/wisent/javascript.el           |    2 +-
 lisp/cedet/semantic/wisent/python.el               |    2 +-
 lisp/cedet/semantic/wisent/wisent.el               |    2 +-
 lisp/cedet/srecode.el                              |    2 +-
 lisp/cedet/srecode/args.el                         |    2 +-
 lisp/cedet/srecode/compile.el                      |   10 +-
 lisp/cedet/srecode/cpp.el                          |    2 +-
 lisp/cedet/srecode/ctxt.el                         |    2 +-
 lisp/cedet/srecode/dictionary.el                   |    2 +-
 lisp/cedet/srecode/document.el                     |    2 +-
 lisp/cedet/srecode/el.el                           |    2 +-
 lisp/cedet/srecode/expandproto.el                  |    2 +-
 lisp/cedet/srecode/extract.el                      |    2 +-
 lisp/cedet/srecode/fields.el                       |    4 +-
 lisp/cedet/srecode/filters.el                      |    2 +-
 lisp/cedet/srecode/find.el                         |    2 +-
 lisp/cedet/srecode/getset.el                       |    2 +-
 lisp/cedet/srecode/insert.el                       |   12 +-
 lisp/cedet/srecode/java.el                         |    2 +-
 lisp/cedet/srecode/map.el                          |    4 +-
 lisp/cedet/srecode/mode.el                         |    2 +-
 lisp/cedet/srecode/semantic.el                     |    2 +-
 lisp/cedet/srecode/srt-mode.el                     |    6 +-
 lisp/cedet/srecode/srt.el                          |    2 +-
 lisp/cedet/srecode/table.el                        |    2 +-
 lisp/cedet/srecode/template.el                     |    2 +-
 lisp/cedet/srecode/texi.el                         |    2 +-
 lisp/chistory.el                                   |    2 +-
 lisp/cmuscheme.el                                  |    2 +-
 lisp/color.el                                      |    2 +-
 lisp/comint.el                                     |   28 +-
 lisp/completion.el                                 |  230 +-
 lisp/composite.el                                  |    2 +-
 lisp/cus-dep.el                                    |    5 +-
 lisp/cus-edit.el                                   |   31 +-
 lisp/cus-face.el                                   |    2 +-
 lisp/cus-start.el                                  |   16 +-
 lisp/cus-theme.el                                  |    2 +-
 lisp/custom.el                                     |    5 +-
 lisp/dabbrev.el                                    |    2 +-
 lisp/delim-col.el                                  |    2 +-
 lisp/delsel.el                                     |    2 +-
 lisp/descr-text.el                                 |   98 +-
 lisp/desktop.el                                    |   10 +-
 lisp/dframe.el                                     |    2 +-
 lisp/dired-aux.el                                  |    9 +-
 lisp/dired-x.el                                    |    3 +-
 lisp/dired.el                                      |   13 +-
 lisp/dirtrack.el                                   |    2 +-
 lisp/disp-table.el                                 |    2 +-
 lisp/dnd.el                                        |   23 +-
 lisp/doc-view.el                                   |    2 +-
 lisp/dom.el                                        |  230 ++
 lisp/dos-fns.el                                    |    2 +-
 lisp/dos-vars.el                                   |    2 +-
 lisp/dos-w32.el                                    |    2 +-
 lisp/double.el                                     |    2 +-
 lisp/dynamic-setting.el                            |    2 +-
 lisp/ebuff-menu.el                                 |    2 +-
 lisp/echistory.el                                  |    2 +-
 lisp/edmacro.el                                    |    2 +-
 lisp/ehelp.el                                      |    2 +-
 lisp/elec-pair.el                                  |    2 +-
 lisp/electric.el                                   |    7 +-
 lisp/elide-head.el                                 |    2 +-
 lisp/emacs-lisp/advice.el                          |    2 +-
 lisp/emacs-lisp/autoload.el                        |   18 +-
 lisp/emacs-lisp/avl-tree.el                        |   60 +-
 lisp/emacs-lisp/backquote.el                       |    6 +-
 lisp/emacs-lisp/benchmark.el                       |    2 +-
 lisp/emacs-lisp/bindat.el                          |    2 +-
 lisp/emacs-lisp/byte-opt.el                        |    2 +-
 lisp/emacs-lisp/byte-run.el                        |    9 +-
 lisp/emacs-lisp/bytecomp.el                        |   16 +-
 lisp/emacs-lisp/cconv.el                           |   59 +-
 lisp/emacs-lisp/chart.el                           |   12 +-
 lisp/emacs-lisp/check-declare.el                   |    2 +-
 lisp/emacs-lisp/checkdoc.el                        |    2 +-
 lisp/emacs-lisp/cl-extra.el                        |   46 +-
 lisp/emacs-lisp/cl-generic.el                      |  849 ++++++
 lisp/emacs-lisp/cl-indent.el                       |    2 +-
 lisp/emacs-lisp/cl-lib.el                          |   13 +-
 lisp/emacs-lisp/cl-macs.el                         |  303 +-
 lisp/emacs-lisp/cl-preloaded.el                    |   48 +
 lisp/emacs-lisp/cl-seq.el                          |    2 +-
 lisp/emacs-lisp/cl.el                              |   12 +-
 lisp/emacs-lisp/copyright.el                       |    2 +-
 lisp/emacs-lisp/crm.el                             |    2 +-
 lisp/emacs-lisp/debug.el                           |    2 +-
 lisp/emacs-lisp/derived.el                         |    5 +-
 lisp/emacs-lisp/disass.el                          |    2 +-
 lisp/emacs-lisp/easy-mmode.el                      |   13 +-
 lisp/emacs-lisp/easymenu.el                        |    2 +-
 lisp/emacs-lisp/edebug.el                          |    3 +-
 lisp/emacs-lisp/eieio-base.el                      |  149 +-
 lisp/emacs-lisp/eieio-compat.el                    |  264 ++
 lisp/emacs-lisp/eieio-core.el                      | 2108 ++++---------
 lisp/emacs-lisp/eieio-custom.el                    |   62 +-
 lisp/emacs-lisp/eieio-datadebug.el                 |   36 +-
 lisp/emacs-lisp/eieio-opt.el                       |  311 +-
 lisp/emacs-lisp/eieio-speedbar.el                  |   26 +-
 lisp/emacs-lisp/eieio.el                           |  588 ++--
 lisp/emacs-lisp/eldoc.el                           |   25 +-
 lisp/emacs-lisp/elint.el                           |    2 +-
 lisp/emacs-lisp/elp.el                             |    2 +-
 lisp/emacs-lisp/ert-x.el                           |    2 +-
 lisp/emacs-lisp/ert.el                             |    2 +-
 lisp/emacs-lisp/ewoc.el                            |    2 +-
 lisp/emacs-lisp/find-func.el                       |  123 +-
 lisp/emacs-lisp/float-sup.el                       |    2 +-
 lisp/emacs-lisp/generic.el                         |    2 +-
 lisp/emacs-lisp/gv.el                              |    2 +-
 lisp/emacs-lisp/helper.el                          |    2 +-
 lisp/emacs-lisp/inline.el                          |  262 ++
 lisp/emacs-lisp/lisp-mnt.el                        |    2 +-
 lisp/emacs-lisp/lisp-mode.el                       |    2 +-
 lisp/emacs-lisp/lisp.el                            |    2 +-
 lisp/emacs-lisp/macroexp.el                        |   50 +-
 lisp/emacs-lisp/map-ynp.el                         |    2 +-
 lisp/emacs-lisp/nadvice.el                         |    2 +-
 lisp/emacs-lisp/package-x.el                       |    6 +-
 lisp/emacs-lisp/package.el                         |  268 +-
 lisp/emacs-lisp/pcase.el                           |    2 +-
 lisp/emacs-lisp/pp.el                              |    2 +-
 lisp/emacs-lisp/re-builder.el                      |    2 +-
 lisp/emacs-lisp/regexp-opt.el                      |    2 +-
 lisp/emacs-lisp/regi.el                            |    2 +-
 lisp/emacs-lisp/ring.el                            |    2 +-
 lisp/emacs-lisp/rx.el                              |    2 +-
 lisp/emacs-lisp/seq.el                             |  273 ++
 lisp/emacs-lisp/shadow.el                          |    2 +-
 lisp/emacs-lisp/smie.el                            |    2 +-
 lisp/emacs-lisp/subr-x.el                          |    2 +-
 lisp/emacs-lisp/syntax.el                          |    2 +-
 lisp/emacs-lisp/tabulated-list.el                  |    2 +-
 lisp/emacs-lisp/tcover-ses.el                      |    2 +-
 lisp/emacs-lisp/tcover-unsafep.el                  |    2 +-
 lisp/emacs-lisp/testcover.el                       |    2 +-
 lisp/emacs-lisp/timer.el                           |    2 +-
 lisp/emacs-lisp/tq.el                              |    2 +-
 lisp/emacs-lisp/trace.el                           |    2 +-
 lisp/emacs-lisp/unsafep.el                         |    2 +-
 lisp/emacs-lisp/warnings.el                        |    2 +-
 lisp/emacs-lock.el                                 |    2 +-
 lisp/emulation/.gitignore                          |    1 -
 lisp/emulation/cua-base.el                         |    2 +-
 lisp/emulation/cua-gmrk.el                         |    2 +-
 lisp/emulation/cua-rect.el                         |    2 +-
 lisp/emulation/edt-lk201.el                        |    2 +-
 lisp/emulation/edt-mapper.el                       |    2 +-
 lisp/emulation/edt-pc.el                           |    2 +-
 lisp/emulation/edt-vt100.el                        |    2 +-
 lisp/emulation/edt.el                              |    3 +-
 lisp/emulation/keypad.el                           |    2 +-
 lisp/emulation/viper-cmd.el                        |    2 +-
 lisp/emulation/viper-ex.el                         |    2 +-
 lisp/emulation/viper-init.el                       |    2 +-
 lisp/emulation/viper-keym.el                       |    2 +-
 lisp/emulation/viper-macs.el                       |    2 +-
 lisp/emulation/viper-mous.el                       |    2 +-
 lisp/emulation/viper-util.el                       |    2 +-
 lisp/emulation/viper.el                            |    2 +-
 lisp/env.el                                        |    2 +-
 lisp/epa-dired.el                                  |    2 +-
 lisp/epa-file.el                                   |    2 +-
 lisp/epa-hook.el                                   |    2 +-
 lisp/epa-mail.el                                   |    2 +-
 lisp/epa.el                                        |   78 +-
 lisp/epg-config.el                                 |    2 +-
 lisp/epg.el                                        |    2 +-
 lisp/erc/.gitignore                                |    3 -
 lisp/erc/ChangeLog                                 |   21 +-
 lisp/erc/ChangeLog.01                              |    2 +-
 lisp/erc/ChangeLog.02                              |    4 +-
 lisp/erc/ChangeLog.03                              |   14 +-
 lisp/erc/ChangeLog.04                              |    2 +-
 lisp/erc/ChangeLog.05                              |    2 +-
 lisp/erc/ChangeLog.06                              |    2 +-
 lisp/erc/ChangeLog.07                              |    2 +-
 lisp/erc/ChangeLog.08                              |    2 +-
 lisp/erc/erc-autoaway.el                           |    2 +-
 lisp/erc/erc-backend.el                            |    9 +-
 lisp/erc/erc-button.el                             |    2 +-
 lisp/erc/erc-capab.el                              |    2 +-
 lisp/erc/erc-compat.el                             |    2 +-
 lisp/erc/erc-dcc.el                                |    5 +-
 lisp/erc/erc-desktop-notifications.el              |   11 +-
 lisp/erc/erc-ezbounce.el                           |    2 +-
 lisp/erc/erc-fill.el                               |    2 +-
 lisp/erc/erc-goodies.el                            |    2 +-
 lisp/erc/erc-ibuffer.el                            |    2 +-
 lisp/erc/erc-identd.el                             |    2 +-
 lisp/erc/erc-imenu.el                              |    2 +-
 lisp/erc/erc-join.el                               |    2 +-
 lisp/erc/erc-lang.el                               |    2 +-
 lisp/erc/erc-list.el                               |    2 +-
 lisp/erc/erc-log.el                                |    2 +-
 lisp/erc/erc-match.el                              |    2 +-
 lisp/erc/erc-menu.el                               |    2 +-
 lisp/erc/erc-netsplit.el                           |    2 +-
 lisp/erc/erc-networks.el                           |    2 +-
 lisp/erc/erc-notify.el                             |    2 +-
 lisp/erc/erc-page.el                               |    2 +-
 lisp/erc/erc-pcomplete.el                          |    2 +-
 lisp/erc/erc-replace.el                            |    2 +-
 lisp/erc/erc-ring.el                               |    2 +-
 lisp/erc/erc-services.el                           |    2 +-
 lisp/erc/erc-sound.el                              |    2 +-
 lisp/erc/erc-speedbar.el                           |    2 +-
 lisp/erc/erc-spelling.el                           |    2 +-
 lisp/erc/erc-stamp.el                              |    2 +-
 lisp/erc/erc-track.el                              |    2 +-
 lisp/erc/erc-truncate.el                           |    2 +-
 lisp/erc/erc-xdcc.el                               |    2 +-
 lisp/erc/erc.el                                    |    2 +-
 lisp/eshell/.gitignore                             |    2 -
 lisp/eshell/em-alias.el                            |    2 +-
 lisp/eshell/em-banner.el                           |    2 +-
 lisp/eshell/em-basic.el                            |    2 +-
 lisp/eshell/em-cmpl.el                             |    2 +-
 lisp/eshell/em-dirs.el                             |    2 +-
 lisp/eshell/em-glob.el                             |    2 +-
 lisp/eshell/em-hist.el                             |    2 +-
 lisp/eshell/em-ls.el                               |    2 +-
 lisp/eshell/em-pred.el                             |    2 +-
 lisp/eshell/em-prompt.el                           |    2 +-
 lisp/eshell/em-rebind.el                           |    2 +-
 lisp/eshell/em-script.el                           |    2 +-
 lisp/eshell/em-smart.el                            |    2 +-
 lisp/eshell/em-term.el                             |    2 +-
 lisp/eshell/em-tramp.el                            |    2 +-
 lisp/eshell/em-unix.el                             |    2 +-
 lisp/eshell/em-xtra.el                             |    2 +-
 lisp/eshell/esh-arg.el                             |    2 +-
 lisp/eshell/esh-cmd.el                             |    2 +-
 lisp/eshell/esh-ext.el                             |    7 +-
 lisp/eshell/esh-io.el                              |    2 +-
 lisp/eshell/esh-mode.el                            |    2 +-
 lisp/eshell/esh-module.el                          |    2 +-
 lisp/eshell/esh-opt.el                             |    2 +-
 lisp/eshell/esh-proc.el                            |    2 +-
 lisp/eshell/esh-util.el                            |    2 +-
 lisp/eshell/esh-var.el                             |    2 +-
 lisp/eshell/eshell.el                              |    2 +-
 lisp/expand.el                                     |    2 +-
 lisp/ezimage.el                                    |    2 +-
 lisp/face-remap.el                                 |    2 +-
 lisp/facemenu.el                                   |    2 +-
 lisp/faces.el                                      |    2 +-
 lisp/ffap.el                                       |    6 +-
 lisp/filecache.el                                  |    2 +-
 lisp/filenotify.el                                 |  385 ++-
 lisp/files-x.el                                    |    2 +-
 lisp/files.el                                      |  126 +-
 lisp/filesets.el                                   |    2 +-
 lisp/find-cmd.el                                   |    2 +-
 lisp/find-dired.el                                 |    2 +-
 lisp/find-file.el                                  |    2 +-
 lisp/find-lisp.el                                  |    2 +-
 lisp/finder.el                                     |    3 +-
 lisp/flow-ctrl.el                                  |    2 +-
 lisp/foldout.el                                    |    2 +-
 lisp/follow.el                                     |    2 +-
 lisp/font-core.el                                  |    2 +-
 lisp/font-lock.el                                  |    2 +-
 lisp/format-spec.el                                |    2 +-
 lisp/format.el                                     |    2 +-
 lisp/forms.el                                      |    2 +-
 lisp/frame.el                                      |   61 +-
 lisp/frameset.el                                   |    2 +-
 lisp/fringe.el                                     |    6 +-
 lisp/generic-x.el                                  |    2 +-
 lisp/gnus/.gitignore                               |    1 -
 lisp/gnus/ChangeLog                                |  207 +-
 lisp/gnus/ChangeLog.1                              |   26 +-
 lisp/gnus/ChangeLog.2                              |   64 +-
 lisp/gnus/auth-source.el                           |   36 +-
 lisp/gnus/canlock.el                               |    2 +-
 lisp/gnus/compface.el                              |    2 +-
 lisp/gnus/deuglify.el                              |    2 +-
 lisp/gnus/ecomplete.el                             |    2 +-
 lisp/gnus/flow-fill.el                             |    2 +-
 lisp/gnus/gmm-utils.el                             |    2 +-
 lisp/gnus/gnus-agent.el                            |    2 +-
 lisp/gnus/gnus-art.el                              |  349 +--
 lisp/gnus/gnus-async.el                            |    2 +-
 lisp/gnus/gnus-bcklg.el                            |    6 +-
 lisp/gnus/gnus-bookmark.el                         |    4 +-
 lisp/gnus/gnus-cache.el                            |    2 +-
 lisp/gnus/gnus-cite.el                             |    2 +-
 lisp/gnus/gnus-cloud.el                            |   13 +-
 lisp/gnus/gnus-cus.el                              |    2 +-
 lisp/gnus/gnus-delay.el                            |    2 +-
 lisp/gnus/gnus-demon.el                            |    2 +-
 lisp/gnus/gnus-diary.el                            |    2 +-
 lisp/gnus/gnus-dired.el                            |    2 +-
 lisp/gnus/gnus-draft.el                            |    2 +-
 lisp/gnus/gnus-dup.el                              |    2 +-
 lisp/gnus/gnus-eform.el                            |    2 +-
 lisp/gnus/gnus-ems.el                              |    2 +-
 lisp/gnus/gnus-fun.el                              |    2 +-
 lisp/gnus/gnus-gravatar.el                         |    2 +-
 lisp/gnus/gnus-group.el                            |   53 +-
 lisp/gnus/gnus-html.el                             |    2 +-
 lisp/gnus/gnus-icalendar.el                        |    2 +-
 lisp/gnus/gnus-int.el                              |   10 +-
 lisp/gnus/gnus-kill.el                             |    2 +-
 lisp/gnus/gnus-logic.el                            |    2 +-
 lisp/gnus/gnus-mh.el                               |    2 +-
 lisp/gnus/gnus-ml.el                               |    2 +-
 lisp/gnus/gnus-mlspl.el                            |    2 +-
 lisp/gnus/gnus-msg.el                              |    2 +-
 lisp/gnus/gnus-notifications.el                    |    2 +-
 lisp/gnus/gnus-picon.el                            |    2 +-
 lisp/gnus/gnus-range.el                            |    2 +-
 lisp/gnus/gnus-registry.el                         |  107 +-
 lisp/gnus/gnus-salt.el                             |    2 +-
 lisp/gnus/gnus-score.el                            |    2 +-
 lisp/gnus/gnus-sieve.el                            |    2 +-
 lisp/gnus/gnus-spec.el                             |    2 +-
 lisp/gnus/gnus-srvr.el                             |    2 +-
 lisp/gnus/gnus-start.el                            |    3 +-
 lisp/gnus/gnus-sum.el                              |    3 +-
 lisp/gnus/gnus-sync.el                             |    2 +-
 lisp/gnus/gnus-topic.el                            |    2 +-
 lisp/gnus/gnus-undo.el                             |    2 +-
 lisp/gnus/gnus-util.el                             |    2 +-
 lisp/gnus/gnus-uu.el                               |    2 +-
 lisp/gnus/gnus-vm.el                               |    2 +-
 lisp/gnus/gnus-win.el                              |    2 +-
 lisp/gnus/gnus.el                                  |    2 +-
 lisp/gnus/gravatar.el                              |    2 +-
 lisp/gnus/gssapi.el                                |    2 +-
 lisp/gnus/html2text.el                             |    2 +-
 lisp/gnus/ietf-drums.el                            |    2 +-
 lisp/gnus/legacy-gnus-agent.el                     |    2 +-
 lisp/gnus/mail-parse.el                            |    2 +-
 lisp/gnus/mail-prsvr.el                            |    2 +-
 lisp/gnus/mail-source.el                           |    2 +-
 lisp/gnus/mailcap.el                               |   18 +-
 lisp/gnus/message.el                               |   37 +-
 lisp/gnus/messcompat.el                            |    2 +-
 lisp/gnus/mm-archive.el                            |    2 +-
 lisp/gnus/mm-bodies.el                             |    2 +-
 lisp/gnus/mm-decode.el                             |   25 +-
 lisp/gnus/mm-encode.el                             |    2 +-
 lisp/gnus/mm-extern.el                             |    2 +-
 lisp/gnus/mm-partial.el                            |    2 +-
 lisp/gnus/mm-url.el                                |    2 +-
 lisp/gnus/mm-util.el                               |    4 +-
 lisp/gnus/mm-uu.el                                 |    2 +-
 lisp/gnus/mm-view.el                               |    2 +-
 lisp/gnus/mml-sec.el                               |    2 +-
 lisp/gnus/mml-smime.el                             |    2 +-
 lisp/gnus/mml.el                                   |    2 +-
 lisp/gnus/mml1991.el                               |    2 +-
 lisp/gnus/mml2015.el                               |    2 +-
 lisp/gnus/nnagent.el                               |    2 +-
 lisp/gnus/nnbabyl.el                               |    2 +-
 lisp/gnus/nndiary.el                               |    2 +-
 lisp/gnus/nndir.el                                 |    2 +-
 lisp/gnus/nndoc.el                                 |    2 +-
 lisp/gnus/nndraft.el                               |    2 +-
 lisp/gnus/nneething.el                             |    2 +-
 lisp/gnus/nnfolder.el                              |    2 +-
 lisp/gnus/nngateway.el                             |    2 +-
 lisp/gnus/nnheader.el                              |    2 +-
 lisp/gnus/nnimap.el                                |  169 +-
 lisp/gnus/nnir.el                                  |  125 +-
 lisp/gnus/nnmail.el                                |    2 +-
 lisp/gnus/nnmairix.el                              |    4 +-
 lisp/gnus/nnmbox.el                                |    2 +-
 lisp/gnus/nnmh.el                                  |    2 +-
 lisp/gnus/nnml.el                                  |    2 +-
 lisp/gnus/nnoo.el                                  |    2 +-
 lisp/gnus/nnregistry.el                            |    2 +-
 lisp/gnus/nnrss.el                                 |    2 +-
 lisp/gnus/nnspool.el                               |    2 +-
 lisp/gnus/nntp.el                                  |   21 +-
 lisp/gnus/nnvirtual.el                             |   10 +-
 lisp/gnus/nnweb.el                                 |    4 +-
 lisp/gnus/plstore.el                               |    2 +-
 lisp/gnus/pop3.el                                  |    3 +-
 lisp/gnus/qp.el                                    |    2 +-
 lisp/gnus/registry.el                              |  163 +-
 lisp/gnus/rfc1843.el                               |    2 +-
 lisp/gnus/rfc2045.el                               |    2 +-
 lisp/gnus/rfc2047.el                               |    2 +-
 lisp/gnus/rfc2104.el                               |    2 +-
 lisp/gnus/rfc2231.el                               |    2 +-
 lisp/gnus/rtree.el                                 |    2 +-
 lisp/gnus/score-mode.el                            |    2 +-
 lisp/gnus/sieve-manage.el                          |    2 +-
 lisp/gnus/sieve-mode.el                            |    2 +-
 lisp/gnus/sieve.el                                 |    2 +-
 lisp/gnus/smiley.el                                |    2 +-
 lisp/gnus/smime.el                                 |    2 +-
 lisp/gnus/spam-report.el                           |    2 +-
 lisp/gnus/spam-stat.el                             |    2 +-
 lisp/gnus/spam-wash.el                             |    2 +-
 lisp/gnus/spam.el                                  |    2 +-
 lisp/gnus/starttls.el                              |    2 +-
 lisp/gnus/utf7.el                                  |    2 +-
 lisp/gnus/yenc.el                                  |    2 +-
 lisp/gs.el                                         |    2 +-
 lisp/help-at-pt.el                                 |    2 +-
 lisp/help-fns.el                                   |   30 +-
 lisp/help-macro.el                                 |    2 +-
 lisp/help-mode.el                                  |    6 +-
 lisp/help.el                                       |   65 +-
 lisp/hex-util.el                                   |    2 +-
 lisp/hexl.el                                       |    7 +-
 lisp/hfy-cmap.el                                   |    2 +-
 lisp/hi-lock.el                                    |    2 +-
 lisp/hilit-chg.el                                  |    2 +-
 lisp/hippie-exp.el                                 |    2 +-
 lisp/hl-line.el                                    |    2 +-
 lisp/htmlfontify.el                                |    4 +-
 lisp/ibuf-ext.el                                   |    2 +-
 lisp/ibuf-macs.el                                  |    2 +-
 lisp/ibuffer.el                                    |    4 +-
 lisp/icomplete.el                                  |    4 +-
 lisp/ido.el                                        |  248 +-
 lisp/ielm.el                                       |    8 +-
 lisp/iimage.el                                     |    2 +-
 lisp/image-dired.el                                |    2 +-
 lisp/image-file.el                                 |    2 +-
 lisp/image-mode.el                                 |    2 +-
 lisp/image.el                                      |    2 +-
 lisp/imenu.el                                      |    2 +-
 lisp/indent.el                                     |    2 +-
 lisp/info-look.el                                  |    2 +-
 lisp/info-xref.el                                  |    2 +-
 lisp/info.el                                       |   22 +-
 lisp/informat.el                                   |    2 +-
 lisp/international/.gitignore                      |   16 -
 lisp/international/ccl.el                          |   51 +-
 lisp/international/characters.el                   |    2 +-
 lisp/international/fontset.el                      |    2 +-
 lisp/international/isearch-x.el                    |    2 +-
 lisp/international/iso-ascii.el                    |    2 +-
 lisp/international/iso-cvt.el                      |    2 +-
 lisp/international/iso-transl.el                   |    2 +-
 lisp/international/ja-dic-cnv.el                   |    2 +-
 lisp/international/kinsoku.el                      |    2 +-
 lisp/international/kkc.el                          |    2 +-
 lisp/international/latexenc.el                     |    2 +-
 lisp/international/latin1-disp.el                  |    2 +-
 lisp/international/mule-cmds.el                    |    2 +-
 lisp/international/mule-conf.el                    |    2 +-
 lisp/international/mule-diag.el                    |   12 +-
 lisp/international/mule-util.el                    |    2 +-
 lisp/international/mule.el                         |  169 +-
 lisp/international/ogonek.el                       |    2 +-
 lisp/international/quail.el                        |    6 +-
 lisp/international/titdic-cnv.el                   |    2 +-
 lisp/international/ucs-normalize.el                |    2 +-
 lisp/international/utf-7.el                        |    2 +-
 lisp/isearch.el                                    |   27 +-
 lisp/isearchb.el                                   |    2 +-
 lisp/jit-lock.el                                   |    9 +-
 lisp/jka-cmpr-hook.el                              |    4 +-
 lisp/jka-compr.el                                  |    3 +-
 lisp/json.el                                       |    2 +-
 lisp/kermit.el                                     |    2 +-
 lisp/kmacro.el                                     |    2 +-
 lisp/language/.gitignore                           |    1 -
 lisp/language/china-util.el                        |    2 +-
 lisp/language/chinese.el                           |    2 +-
 lisp/language/cyril-util.el                        |    2 +-
 lisp/language/cyrillic.el                          |    2 +-
 lisp/language/czech.el                             |    2 +-
 lisp/language/english.el                           |    2 +-
 lisp/language/ethio-util.el                        |    2 +-
 lisp/language/ethiopic.el                          |    2 +-
 lisp/language/european.el                          |    2 +-
 lisp/language/georgian.el                          |    2 +-
 lisp/language/greek.el                             |    2 +-
 lisp/language/hanja-util.el                        |    2 +-
 lisp/language/hebrew.el                            |    2 +-
 lisp/language/ind-util.el                          |    2 +-
 lisp/language/indian.el                            |    2 +-
 lisp/language/japan-util.el                        |    2 +-
 lisp/language/japanese.el                          |    2 +-
 lisp/language/korea-util.el                        |    2 +-
 lisp/language/korean.el                            |    2 +-
 lisp/language/lao-util.el                          |    2 +-
 lisp/language/lao.el                               |    2 +-
 lisp/language/misc-lang.el                         |    3 +-
 lisp/language/romanian.el                          |    2 +-
 lisp/language/slovak.el                            |    2 +-
 lisp/language/tai-viet.el                          |    2 +-
 lisp/language/thai-util.el                         |    2 +-
 lisp/language/thai.el                              |    2 +-
 lisp/language/tibet-util.el                        |    2 +-
 lisp/language/tibetan.el                           |    2 +-
 lisp/language/utf-8-lang.el                        |    2 +-
 lisp/language/viet-util.el                         |    2 +-
 lisp/language/vietnamese.el                        |    2 +-
 lisp/ldefs-boot.el                                 | 2552 ++++++++--------
 lisp/leim/.gitignore                               |    2 -
 lisp/leim/quail/.gitignore                         |   22 -
 lisp/leim/quail/arabic.el                          |    2 +-
 lisp/leim/quail/croatian.el                        |    2 +-
 lisp/leim/quail/cyril-jis.el                       |    2 +-
 lisp/leim/quail/cyrillic.el                        |    2 +-
 lisp/leim/quail/czech.el                           |    2 +-
 lisp/leim/quail/georgian.el                        |    2 +-
 lisp/leim/quail/greek.el                           |    2 +-
 lisp/leim/quail/hangul.el                          |    2 +-
 lisp/leim/quail/hanja.el                           |    2 +-
 lisp/leim/quail/hanja3.el                          |    2 +-
 lisp/leim/quail/indian.el                          |    2 +-
 lisp/leim/quail/ipa-praat.el                       |    2 +-
 lisp/leim/quail/ipa.el                             |    2 +-
 lisp/leim/quail/japanese.el                        |    2 +-
 lisp/leim/quail/latin-alt.el                       |    2 +-
 lisp/leim/quail/latin-ltx.el                       |    2 +-
 lisp/leim/quail/latin-post.el                      |    2 +-
 lisp/leim/quail/latin-pre.el                       |    2 +-
 lisp/leim/quail/lrt.el                             |    2 +-
 lisp/leim/quail/persian.el                         |    2 +-
 lisp/leim/quail/py-punct.el                        |    2 +-
 lisp/leim/quail/rfc1345.el                         |    2 +-
 lisp/leim/quail/sgml-input.el                      |    2 +-
 lisp/leim/quail/sisheng.el                         |    2 +-
 lisp/leim/quail/slovak.el                          |    2 +-
 lisp/leim/quail/symbol-ksc.el                      |    2 +-
 lisp/leim/quail/tibetan.el                         |    2 +-
 lisp/leim/quail/uni-input.el                       |    2 +-
 lisp/leim/quail/vntelex.el                         |    2 +-
 lisp/leim/quail/vnvni.el                           |    2 +-
 lisp/leim/quail/welsh.el                           |    2 +-
 lisp/let-alist.el                                  |  142 +
 lisp/linum.el                                      |   17 +-
 lisp/loadhist.el                                   |    2 +-
 lisp/loadup.el                                     |    7 +-
 lisp/locate.el                                     |    2 +-
 lisp/lpr.el                                        |    2 +-
 lisp/ls-lisp.el                                    |    2 +-
 lisp/macros.el                                     |    2 +-
 lisp/mail/.gitignore                               |    1 -
 lisp/mail/binhex.el                                |    2 +-
 lisp/mail/blessmail.el                             |    2 +-
 lisp/mail/emacsbug.el                              |    4 +-
 lisp/mail/footnote.el                              |    2 +-
 lisp/mail/hashcash.el                              |    2 +-
 lisp/mail/mail-extr.el                             |    2 +-
 lisp/mail/mail-hist.el                             |    2 +-
 lisp/mail/mail-utils.el                            |    2 +-
 lisp/mail/mailabbrev.el                            |    2 +-
 lisp/mail/mailalias.el                             |    2 +-
 lisp/mail/mailclient.el                            |    2 +-
 lisp/mail/mailheader.el                            |    2 +-
 lisp/mail/metamail.el                              |    2 +-
 lisp/mail/mspools.el                               |    2 +-
 lisp/mail/reporter.el                              |    2 +-
 lisp/mail/rfc2368.el                               |    2 +-
 lisp/mail/rfc822.el                                |    2 +-
 lisp/mail/rmail-spam-filter.el                     |    2 +-
 lisp/mail/rmail.el                                 |   17 +-
 lisp/mail/rmailedit.el                             |    2 +-
 lisp/mail/rmailkwd.el                              |    2 +-
 lisp/mail/rmailmm.el                               |    2 +-
 lisp/mail/rmailmsc.el                              |    2 +-
 lisp/mail/rmailout.el                              |    2 +-
 lisp/mail/rmailsort.el                             |    2 +-
 lisp/mail/rmailsum.el                              |    2 +-
 lisp/mail/sendmail.el                              |    2 +-
 lisp/mail/smtpmail.el                              |    3 +-
 lisp/mail/supercite.el                             |    2 +-
 lisp/mail/uce.el                                   |    2 +-
 lisp/mail/undigest.el                              |    2 +-
 lisp/mail/unrmail.el                               |    2 +-
 lisp/mail/uudecode.el                              |    2 +-
 lisp/makefile.w32-in                               |    2 +-
 lisp/makesum.el                                    |    2 +-
 lisp/man.el                                        |    3 +-
 lisp/master.el                                     |    2 +-
 lisp/mb-depth.el                                   |    2 +-
 lisp/md4.el                                        |    2 +-
 lisp/menu-bar.el                                   |  102 +-
 lisp/mh-e/.gitignore                               |    3 -
 lisp/mh-e/ChangeLog                                |    4 +-
 lisp/mh-e/ChangeLog.1                              |    2 +-
 lisp/mh-e/mh-acros.el                              |    2 +-
 lisp/mh-e/mh-alias.el                              |    2 +-
 lisp/mh-e/mh-buffers.el                            |    2 +-
 lisp/mh-e/mh-comp.el                               |    2 +-
 lisp/mh-e/mh-compat.el                             |    2 +-
 lisp/mh-e/mh-e.el                                  |    4 +-
 lisp/mh-e/mh-folder.el                             |    2 +-
 lisp/mh-e/mh-funcs.el                              |    2 +-
 lisp/mh-e/mh-gnus.el                               |    2 +-
 lisp/mh-e/mh-identity.el                           |    2 +-
 lisp/mh-e/mh-inc.el                                |    2 +-
 lisp/mh-e/mh-junk.el                               |    2 +-
 lisp/mh-e/mh-letter.el                             |    2 +-
 lisp/mh-e/mh-limit.el                              |    2 +-
 lisp/mh-e/mh-mime.el                               |    2 +-
 lisp/mh-e/mh-print.el                              |    2 +-
 lisp/mh-e/mh-scan.el                               |    2 +-
 lisp/mh-e/mh-search.el                             |    2 +-
 lisp/mh-e/mh-seq.el                                |    2 +-
 lisp/mh-e/mh-show.el                               |    2 +-
 lisp/mh-e/mh-speed.el                              |    2 +-
 lisp/mh-e/mh-thread.el                             |    2 +-
 lisp/mh-e/mh-tool-bar.el                           |    2 +-
 lisp/mh-e/mh-utils.el                              |    2 +-
 lisp/mh-e/mh-xface.el                              |    2 +-
 lisp/midnight.el                                   |    2 +-
 lisp/minibuf-eldef.el                              |    2 +-
 lisp/minibuffer.el                                 |   65 +-
 lisp/misc.el                                       |    2 +-
 lisp/misearch.el                                   |   21 +-
 lisp/mouse-copy.el                                 |    2 +-
 lisp/mouse-drag.el                                 |    2 +-
 lisp/mouse.el                                      |   31 +-
 lisp/mpc.el                                        |    2 +-
 lisp/msb.el                                        |    2 +-
 lisp/mwheel.el                                     |    2 +-
 lisp/net/.gitignore                                |    1 -
 lisp/net/ange-ftp.el                               |   28 +-
 lisp/net/browse-url.el                             |    2 +-
 lisp/net/dbus.el                                   |    2 +-
 lisp/net/dig.el                                    |    2 +-
 lisp/net/dns.el                                    |    2 +-
 lisp/net/eudc-bob.el                               |    5 +-
 lisp/net/eudc-export.el                            |    5 +-
 lisp/net/eudc-hotlist.el                           |    5 +-
 lisp/net/eudc-vars.el                              |  102 +-
 lisp/net/eudc.el                                   |   76 +-
 lisp/net/eudcb-bbdb.el                             |    5 +-
 lisp/net/eudcb-ldap.el                             |   34 +-
 lisp/net/eudcb-mab.el                              |    4 +-
 lisp/net/eudcb-ph.el                               |    5 +-
 lisp/net/eww.el                                    | 1036 +++++--
 lisp/net/gnutls.el                                 |    7 +-
 lisp/net/goto-addr.el                              |    2 +-
 lisp/net/hmac-def.el                               |    2 +-
 lisp/net/hmac-md5.el                               |    2 +-
 lisp/net/imap.el                                   |    2 +-
 lisp/net/ldap.el                                   |  138 +-
 lisp/net/mairix.el                                 |    2 +-
 lisp/net/net-utils.el                              |   22 +-
 lisp/net/netrc.el                                  |    2 +-
 lisp/net/network-stream.el                         |   33 +-
 lisp/net/newst-backend.el                          |   54 +-
 lisp/net/newst-plainview.el                        |    2 +-
 lisp/net/newst-reader.el                           |    2 +-
 lisp/net/newst-ticker.el                           |    2 +-
 lisp/net/newst-treeview.el                         |   87 +-
 lisp/net/newsticker.el                             |    2 +-
 lisp/net/nsm.el                                    |  502 +++
 lisp/net/ntlm.el                                   |    2 +-
 lisp/net/quickurl.el                               |    2 +-
 lisp/net/rcirc.el                                  |    2 +-
 lisp/net/rlogin.el                                 |    2 +-
 lisp/net/sasl-cram.el                              |    2 +-
 lisp/net/sasl-digest.el                            |    2 +-
 lisp/net/sasl-ntlm.el                              |    2 +-
 lisp/net/sasl.el                                   |    2 +-
 lisp/net/secrets.el                                |    2 +-
 lisp/net/shr-color.el                              |    2 +-
 lisp/net/shr.el                                    |  666 ++--
 lisp/net/snmp-mode.el                              |    2 +-
 lisp/net/soap-client.el                            |    2 +-
 lisp/net/soap-inspect.el                           |    2 +-
 lisp/net/socks.el                                  |    2 +-
 lisp/net/telnet.el                                 |    2 +-
 lisp/net/tls.el                                    |    2 +-
 lisp/net/tramp-adb.el                              |    5 +-
 lisp/net/tramp-cache.el                            |    4 +-
 lisp/net/tramp-cmds.el                             |    2 +-
 lisp/net/tramp-compat.el                           |   14 +-
 lisp/net/tramp-ftp.el                              |    2 +-
 lisp/net/tramp-gvfs.el                             |    2 +-
 lisp/net/tramp-gw.el                               |   11 +-
 lisp/net/tramp-sh.el                               |  163 +-
 lisp/net/tramp-smb.el                              |    9 +-
 lisp/net/tramp-uu.el                               |    2 +-
 lisp/net/tramp.el                                  |  315 +-
 lisp/net/trampver.el                               |    6 +-
 lisp/net/webjump.el                                |    2 +-
 lisp/net/zeroconf.el                               |    2 +-
 lisp/newcomment.el                                 |    2 +-
 lisp/notifications.el                              |    2 +-
 lisp/novice.el                                     |    2 +-
 lisp/nxml/.gitignore                               |    2 -
 lisp/nxml/nxml-enc.el                              |    2 +-
 lisp/nxml/nxml-glyph.el                            |    2 +-
 lisp/nxml/nxml-maint.el                            |    2 +-
 lisp/nxml/nxml-mode.el                             |    2 +-
 lisp/nxml/nxml-ns.el                               |    2 +-
 lisp/nxml/nxml-outln.el                            |    2 +-
 lisp/nxml/nxml-parse.el                            |    2 +-
 lisp/nxml/nxml-rap.el                              |    2 +-
 lisp/nxml/nxml-uchnm.el                            |    2 +-
 lisp/nxml/nxml-util.el                             |    2 +-
 lisp/nxml/rng-cmpct.el                             |    2 +-
 lisp/nxml/rng-dt.el                                |    2 +-
 lisp/nxml/rng-loc.el                               |    2 +-
 lisp/nxml/rng-maint.el                             |    2 +-
 lisp/nxml/rng-match.el                             |    2 +-
 lisp/nxml/rng-nxml.el                              |    2 +-
 lisp/nxml/rng-parse.el                             |    2 +-
 lisp/nxml/rng-pttrn.el                             |    2 +-
 lisp/nxml/rng-uri.el                               |    4 +-
 lisp/nxml/rng-util.el                              |    2 +-
 lisp/nxml/rng-valid.el                             |    2 +-
 lisp/nxml/rng-xsd.el                               |    2 +-
 lisp/nxml/xmltok.el                                |    2 +-
 lisp/nxml/xsd-regexp.el                            |    2 +-
 lisp/obsolete/.gitignore                           |    0
 lisp/obsolete/abbrevlist.el                        |    2 +-
 lisp/obsolete/assoc.el                             |    2 +-
 lisp/obsolete/awk-mode.el                          |    2 +-
 lisp/obsolete/bruce.el                             |    2 +-
 lisp/obsolete/cc-compat.el                         |    2 +-
 lisp/obsolete/cl-compat.el                         |    2 +-
 lisp/obsolete/complete.el                          |    2 +-
 lisp/obsolete/crisp.el                             |    2 +-
 lisp/obsolete/cust-print.el                        |    2 +-
 lisp/obsolete/erc-hecomplete.el                    |    2 +-
 lisp/obsolete/fast-lock.el                         |    2 +-
 lisp/obsolete/gulp.el                              |    4 +-
 lisp/obsolete/iso-acc.el                           |    2 +-
 lisp/obsolete/iso-insert.el                        |    2 +-
 lisp/obsolete/iso-swed.el                          |    2 +-
 lisp/obsolete/iswitchb.el                          |    2 +-
 lisp/obsolete/keyswap.el                           |    2 +-
 lisp/obsolete/lazy-lock.el                         |    2 +-
 lisp/obsolete/ledit.el                             |    2 +-
 lisp/obsolete/levents.el                           |    2 +-
 lisp/obsolete/lmenu.el                             |    2 +-
 lisp/obsolete/longlines.el                         |    2 +-
 lisp/obsolete/lucid.el                             |    2 +-
 lisp/obsolete/mouse-sel.el                         |    2 +-
 lisp/obsolete/old-emacs-lock.el                    |    2 +-
 lisp/obsolete/old-whitespace.el                    |    2 +-
 lisp/obsolete/options.el                           |    2 +-
 lisp/obsolete/otodo-mode.el                        |    2 +-
 lisp/obsolete/pc-mode.el                           |    2 +-
 lisp/obsolete/pc-select.el                         |   14 +-
 lisp/obsolete/pgg-def.el                           |    2 +-
 lisp/obsolete/pgg-gpg.el                           |    2 +-
 lisp/obsolete/pgg-parse.el                         |    2 +-
 lisp/obsolete/pgg-pgp.el                           |    2 +-
 lisp/obsolete/pgg-pgp5.el                          |    2 +-
 lisp/obsolete/pgg.el                               |    2 +-
 lisp/obsolete/rcompile.el                          |    2 +-
 lisp/obsolete/resume.el                            |    2 +-
 lisp/obsolete/s-region.el                          |    2 +-
 lisp/obsolete/scribe.el                            |    2 +-
 lisp/obsolete/spell.el                             |    2 +-
 lisp/obsolete/sregex.el                            |    2 +-
 lisp/obsolete/sup-mouse.el                         |    2 +-
 lisp/obsolete/swedish.el                           |    2 +-
 lisp/obsolete/sym-comp.el                          |    2 +-
 lisp/obsolete/terminal.el                          |    2 +-
 lisp/obsolete/tpu-edt.el                           |    2 +-
 lisp/obsolete/tpu-extras.el                        |    2 +-
 lisp/obsolete/tpu-mapper.el                        |    2 +-
 lisp/{vc => obsolete}/vc-arch.el                   |   22 +-
 lisp/obsolete/vc-mcvs.el                           |    2 +-
 lisp/obsolete/vip.el                               |    4 +-
 lisp/obsolete/ws-mode.el                           |    2 +-
 lisp/obsolete/xesam.el                             |    2 +-
 lisp/obsolete/yow.el                               |    2 +-
 lisp/org/ChangeLog                                 |    8 +-
 lisp/org/ob-C.el                                   |    2 +-
 lisp/org/ob-R.el                                   |    2 +-
 lisp/org/ob-asymptote.el                           |    2 +-
 lisp/org/ob-awk.el                                 |    2 +-
 lisp/org/ob-calc.el                                |    2 +-
 lisp/org/ob-clojure.el                             |    2 +-
 lisp/org/ob-comint.el                              |    2 +-
 lisp/org/ob-core.el                                |    2 +-
 lisp/org/ob-css.el                                 |    2 +-
 lisp/org/ob-ditaa.el                               |    2 +-
 lisp/org/ob-dot.el                                 |    2 +-
 lisp/org/ob-emacs-lisp.el                          |    2 +-
 lisp/org/ob-eval.el                                |    2 +-
 lisp/org/ob-exp.el                                 |    2 +-
 lisp/org/ob-fortran.el                             |    2 +-
 lisp/org/ob-gnuplot.el                             |    2 +-
 lisp/org/ob-haskell.el                             |    2 +-
 lisp/org/ob-io.el                                  |    2 +-
 lisp/org/ob-java.el                                |    2 +-
 lisp/org/ob-js.el                                  |    2 +-
 lisp/org/ob-keys.el                                |    2 +-
 lisp/org/ob-latex.el                               |    2 +-
 lisp/org/ob-ledger.el                              |    2 +-
 lisp/org/ob-lilypond.el                            |    2 +-
 lisp/org/ob-lisp.el                                |    2 +-
 lisp/org/ob-lob.el                                 |    2 +-
 lisp/org/ob-makefile.el                            |    2 +-
 lisp/org/ob-matlab.el                              |    2 +-
 lisp/org/ob-maxima.el                              |    2 +-
 lisp/org/ob-mscgen.el                              |    2 +-
 lisp/org/ob-ocaml.el                               |    2 +-
 lisp/org/ob-octave.el                              |    2 +-
 lisp/org/ob-org.el                                 |    2 +-
 lisp/org/ob-perl.el                                |    2 +-
 lisp/org/ob-picolisp.el                            |    2 +-
 lisp/org/ob-plantuml.el                            |    2 +-
 lisp/org/ob-python.el                              |    2 +-
 lisp/org/ob-ref.el                                 |    2 +-
 lisp/org/ob-ruby.el                                |    2 +-
 lisp/org/ob-sass.el                                |    2 +-
 lisp/org/ob-scala.el                               |    2 +-
 lisp/org/ob-scheme.el                              |    2 +-
 lisp/org/ob-screen.el                              |    2 +-
 lisp/org/ob-sh.el                                  |    2 +-
 lisp/org/ob-shen.el                                |    2 +-
 lisp/org/ob-sql.el                                 |    2 +-
 lisp/org/ob-sqlite.el                              |    2 +-
 lisp/org/ob-table.el                               |    2 +-
 lisp/org/ob-tangle.el                              |    2 +-
 lisp/org/ob.el                                     |    2 +-
 lisp/org/org-agenda.el                             |    2 +-
 lisp/org/org-archive.el                            |    2 +-
 lisp/org/org-attach.el                             |    2 +-
 lisp/org/org-bbdb.el                               |    2 +-
 lisp/org/org-bibtex.el                             |    2 +-
 lisp/org/org-capture.el                            |    2 +-
 lisp/org/org-clock.el                              |    6 +-
 lisp/org/org-colview.el                            |    2 +-
 lisp/org/org-compat.el                             |    2 +-
 lisp/org/org-crypt.el                              |    2 +-
 lisp/org/org-ctags.el                              |   10 +-
 lisp/org/org-datetree.el                           |    2 +-
 lisp/org/org-docview.el                            |    2 +-
 lisp/org/org-element.el                            |    2 +-
 lisp/org/org-entities.el                           |    2 +-
 lisp/org/org-eshell.el                             |    2 +-
 lisp/org/org-faces.el                              |    2 +-
 lisp/org/org-feed.el                               |    2 +-
 lisp/org/org-footnote.el                           |    2 +-
 lisp/org/org-gnus.el                               |    2 +-
 lisp/org/org-habit.el                              |    2 +-
 lisp/org/org-id.el                                 |    2 +-
 lisp/org/org-indent.el                             |    2 +-
 lisp/org/org-info.el                               |    2 +-
 lisp/org/org-inlinetask.el                         |    2 +-
 lisp/org/org-irc.el                                |    2 +-
 lisp/org/org-list.el                               |    2 +-
 lisp/org/org-macro.el                              |    2 +-
 lisp/org/org-macs.el                               |    2 +-
 lisp/org/org-mhe.el                                |    2 +-
 lisp/org/org-mobile.el                             |    2 +-
 lisp/org/org-mouse.el                              |    2 +-
 lisp/org/org-pcomplete.el                          |    2 +-
 lisp/org/org-plot.el                               |    2 +-
 lisp/org/org-protocol.el                           |    2 +-
 lisp/org/org-rmail.el                              |    2 +-
 lisp/org/org-src.el                                |    2 +-
 lisp/org/org-table.el                              |    4 +-
 lisp/org/org-timer.el                              |    2 +-
 lisp/org/org-w3m.el                                |    2 +-
 lisp/org/org.el                                    |    8 +-
 lisp/org/ox-ascii.el                               |    4 +-
 lisp/org/ox-beamer.el                              |    2 +-
 lisp/org/ox-html.el                                |    4 +-
 lisp/org/ox-icalendar.el                           |    2 +-
 lisp/org/ox-latex.el                               |    4 +-
 lisp/org/ox-man.el                                 |    2 +-
 lisp/org/ox-md.el                                  |    2 +-
 lisp/org/ox-odt.el                                 |    2 +-
 lisp/org/ox-org.el                                 |    2 +-
 lisp/org/ox-publish.el                             |    4 +-
 lisp/org/ox-texinfo.el                             |    2 +-
 lisp/org/ox.el                                     |    8 +-
 lisp/outline.el                                    |  364 ++-
 lisp/paren.el                                      |    2 +-
 lisp/password-cache.el                             |    2 +-
 lisp/pcmpl-cvs.el                                  |    2 +-
 lisp/pcmpl-gnu.el                                  |    6 +-
 lisp/pcmpl-linux.el                                |    2 +-
 lisp/pcmpl-rpm.el                                  |    2 +-
 lisp/pcmpl-unix.el                                 |    2 +-
 lisp/pcmpl-x.el                                    |    2 +-
 lisp/pcomplete.el                                  |    5 +-
 lisp/play/.gitignore                               |    1 -
 lisp/play/5x5.el                                   |    2 +-
 lisp/play/animate.el                               |    2 +-
 lisp/play/blackbox.el                              |    2 +-
 lisp/play/bubbles.el                               |    2 +-
 lisp/play/cookie1.el                               |    2 +-
 lisp/play/decipher.el                              |    2 +-
 lisp/play/dissociate.el                            |    2 +-
 lisp/play/doctor.el                                |    2 +-
 lisp/play/dunnet.el                                |    2 +-
 lisp/play/fortune.el                               |    2 +-
 lisp/play/gamegrid.el                              |    8 +-
 lisp/play/gametree.el                              |    2 +-
 lisp/play/gomoku.el                                |    2 +-
 lisp/play/handwrite.el                             |    2 +-
 lisp/play/landmark.el                              |    2 +-
 lisp/play/life.el                                  |    2 +-
 lisp/play/morse.el                                 |    4 +-
 lisp/play/mpuz.el                                  |    2 +-
 lisp/play/pong.el                                  |    2 +-
 lisp/play/snake.el                                 |    2 +-
 lisp/play/solitaire.el                             |    2 +-
 lisp/play/spook.el                                 |    2 +-
 lisp/play/tetris.el                                |    2 +-
 lisp/play/zone.el                                  |    2 +-
 lisp/printing.el                                   |    2 +-
 lisp/proced.el                                     |    2 +-
 lisp/profiler.el                                   |    2 +-
 lisp/progmodes/.gitignore                          |    1 -
 lisp/progmodes/ada-mode.el                         |    2 +-
 lisp/progmodes/ada-prj.el                          |    2 +-
 lisp/progmodes/ada-stmt.el                         |    2 +-
 lisp/progmodes/ada-xref.el                         |    2 +-
 lisp/progmodes/antlr-mode.el                       |    2 +-
 lisp/progmodes/asm-mode.el                         |    2 +-
 lisp/progmodes/autoconf.el                         |    2 +-
 lisp/progmodes/bat-mode.el                         |    2 +-
 lisp/progmodes/bug-reference.el                    |    2 +-
 lisp/progmodes/cc-align.el                         |   18 +-
 lisp/progmodes/cc-awk.el                           |    6 +-
 lisp/progmodes/cc-bytecomp.el                      |  114 +-
 lisp/progmodes/cc-cmds.el                          |   71 +-
 lisp/progmodes/cc-defs.el                          |  285 +-
 lisp/progmodes/cc-engine.el                        |  293 +-
 lisp/progmodes/cc-fonts.el                         |   73 +-
 lisp/progmodes/cc-guess.el                         |    9 +-
 lisp/progmodes/cc-langs.el                         |   51 +-
 lisp/progmodes/cc-menus.el                         |    8 +-
 lisp/progmodes/cc-mode.el                          |  207 +-
 lisp/progmodes/cc-styles.el                        |   24 +-
 lisp/progmodes/cc-vars.el                          |   13 +-
 lisp/progmodes/cfengine.el                         |    5 +-
 lisp/progmodes/cmacexp.el                          |    2 +-
 lisp/progmodes/compile.el                          |    2 +-
 lisp/progmodes/cperl-mode.el                       |    2 +-
 lisp/progmodes/cpp.el                              |    2 +-
 lisp/progmodes/cwarn.el                            |    2 +-
 lisp/progmodes/dcl-mode.el                         |    2 +-
 lisp/progmodes/ebnf-abn.el                         |    2 +-
 lisp/progmodes/ebnf-bnf.el                         |    2 +-
 lisp/progmodes/ebnf-dtd.el                         |    2 +-
 lisp/progmodes/ebnf-ebx.el                         |    2 +-
 lisp/progmodes/ebnf-iso.el                         |    2 +-
 lisp/progmodes/ebnf-otz.el                         |    2 +-
 lisp/progmodes/ebnf-yac.el                         |    2 +-
 lisp/progmodes/ebnf2ps.el                          |    2 +-
 lisp/progmodes/ebrowse.el                          |    2 +-
 lisp/progmodes/elisp-mode.el                       |   91 +-
 lisp/progmodes/etags.el                            |  124 +-
 lisp/progmodes/executable.el                       |    2 +-
 lisp/progmodes/f90.el                              |    2 +-
 lisp/progmodes/flymake.el                          |    2 +-
 lisp/progmodes/fortran.el                          |    2 +-
 lisp/progmodes/gdb-mi.el                           |    2 +-
 lisp/progmodes/glasses.el                          |    2 +-
 lisp/progmodes/grep.el                             |   25 +-
 lisp/progmodes/gud.el                              |    5 +-
 lisp/progmodes/hideif.el                           |    2 +-
 lisp/progmodes/hideshow.el                         |    2 +-
 lisp/progmodes/icon.el                             |    2 +-
 lisp/progmodes/idlw-complete-structtag.el          |    2 +-
 lisp/progmodes/idlw-help.el                        |    2 +-
 lisp/progmodes/idlw-shell.el                       |    2 +-
 lisp/progmodes/idlw-toolbar.el                     |    2 +-
 lisp/progmodes/idlwave.el                          |    4 +-
 lisp/progmodes/inf-lisp.el                         |    2 +-
 lisp/progmodes/js.el                               |   40 +-
 lisp/progmodes/ld-script.el                        |    2 +-
 lisp/progmodes/m4-mode.el                          |    2 +-
 lisp/progmodes/make-mode.el                        |    2 +-
 lisp/progmodes/mantemp.el                          |    2 +-
 lisp/progmodes/meta-mode.el                        |    2 +-
 lisp/progmodes/mixal-mode.el                       |    2 +-
 lisp/progmodes/octave.el                           |   19 +-
 lisp/progmodes/opascal.el                          |    2 +-
 lisp/progmodes/pascal.el                           |    2 +-
 lisp/progmodes/perl-mode.el                        |    2 +-
 lisp/progmodes/prog-mode.el                        |   10 +-
 lisp/progmodes/prolog.el                           |    2 +-
 lisp/progmodes/ps-mode.el                          |    2 +-
 lisp/progmodes/python.el                           | 1388 +++++----
 lisp/progmodes/ruby-mode.el                        |   45 +-
 lisp/progmodes/scheme.el                           |    2 +-
 lisp/progmodes/sh-script.el                        |   12 +-
 lisp/progmodes/simula.el                           |    2 +-
 lisp/progmodes/sql.el                              |    2 +-
 lisp/progmodes/subword.el                          |    2 +-
 lisp/progmodes/tcl.el                              |    2 +-
 lisp/progmodes/vera-mode.el                        |    2 +-
 lisp/progmodes/verilog-mode.el                     |  203 +-
 lisp/progmodes/vhdl-mode.el                        |  348 +--
 lisp/progmodes/which-func.el                       |    2 +-
 lisp/progmodes/xref.el                             |  633 ++++
 lisp/progmodes/xscheme.el                          |    2 +-
 lisp/ps-bdf.el                                     |    2 +-
 lisp/ps-def.el                                     |    2 +-
 lisp/ps-mule.el                                    |    2 +-
 lisp/ps-print.el                                   |    4 +-
 lisp/ps-samp.el                                    |    2 +-
 lisp/recentf.el                                    |    2 +-
 lisp/rect.el                                       |    2 +-
 lisp/register.el                                   |    5 +-
 lisp/repeat.el                                     |    2 +-
 lisp/replace.el                                    |   40 +-
 lisp/reposition.el                                 |    2 +-
 lisp/reveal.el                                     |    2 +-
 lisp/rfn-eshadow.el                                |    2 +-
 lisp/rot13.el                                      |    2 +-
 lisp/ruler-mode.el                                 |    2 +-
 lisp/savehist.el                                   |    2 +-
 lisp/saveplace.el                                  |   46 +-
 lisp/sb-image.el                                   |    2 +-
 lisp/scroll-all.el                                 |    2 +-
 lisp/scroll-bar.el                                 |    2 +-
 lisp/scroll-lock.el                                |    2 +-
 lisp/select.el                                     |    2 +-
 lisp/server.el                                     |    2 +-
 lisp/ses.el                                        |    2 +-
 lisp/shadowfile.el                                 |    2 +-
 lisp/shell.el                                      |    5 +-
 lisp/simple.el                                     |  208 +-
 lisp/skeleton.el                                   |    2 +-
 lisp/sort.el                                       |    2 +-
 lisp/soundex.el                                    |    2 +-
 lisp/speedbar.el                                   |    2 +-
 lisp/startup.el                                    |   13 +-
 lisp/strokes.el                                    |    2 +-
 lisp/subr.el                                       |   40 +-
 lisp/t-mouse.el                                    |    2 +-
 lisp/tabify.el                                     |    2 +-
 lisp/talk.el                                       |    2 +-
 lisp/tar-mode.el                                   |  117 +-
 lisp/tempo.el                                      |    2 +-
 lisp/term.el                                       |    2 +-
 lisp/term/.gitignore                               |    1 -
 lisp/term/AT386.el                                 |    2 +-
 lisp/term/README                                   |    2 +-
 lisp/term/common-win.el                            |    2 +-
 lisp/term/internal.el                              |    2 +-
 lisp/term/iris-ansi.el                             |    2 +-
 lisp/term/news.el                                  |    2 +-
 lisp/term/ns-win.el                                |    2 +-
 lisp/term/pc-win.el                                |    2 +-
 lisp/term/rxvt.el                                  |    2 +-
 lisp/term/screen.el                                |    2 +-
 lisp/term/sun.el                                   |    2 +-
 lisp/term/tty-colors.el                            |    2 +-
 lisp/term/tvi970.el                                |    2 +-
 lisp/term/vt100.el                                 |    2 +-
 lisp/term/w32-win.el                               |    2 +-
 lisp/term/w32console.el                            |    2 +-
 lisp/term/wyse50.el                                |    3 +-
 lisp/term/x-win.el                                 |    2 +-
 lisp/term/xterm.el                                 |    2 +-
 lisp/textmodes/.gitignore                          |    1 -
 lisp/textmodes/artist.el                           |   97 +-
 lisp/textmodes/bib-mode.el                         |    2 +-
 lisp/textmodes/bibtex-style.el                     |    2 +-
 lisp/textmodes/bibtex.el                           |    2 +-
 lisp/textmodes/conf-mode.el                        |    2 +-
 lisp/textmodes/css-mode.el                         |    4 +-
 lisp/textmodes/dns-mode.el                         |    2 +-
 lisp/textmodes/enriched.el                         |    5 +-
 lisp/textmodes/fill.el                             |    2 +-
 lisp/textmodes/flyspell.el                         |    2 +-
 lisp/textmodes/ispell.el                           |  185 +-
 lisp/textmodes/makeinfo.el                         |   13 +-
 lisp/textmodes/nroff-mode.el                       |    2 +-
 lisp/textmodes/page-ext.el                         |    2 +-
 lisp/textmodes/page.el                             |    2 +-
 lisp/textmodes/paragraphs.el                       |    6 +-
 lisp/textmodes/picture.el                          |    2 +-
 lisp/textmodes/po.el                               |    2 +-
 lisp/textmodes/refbib.el                           |    2 +-
 lisp/textmodes/refer.el                            |    2 +-
 lisp/textmodes/refill.el                           |    2 +-
 lisp/textmodes/reftex-auc.el                       |    2 +-
 lisp/textmodes/reftex-cite.el                      |    2 +-
 lisp/textmodes/reftex-dcr.el                       |    2 +-
 lisp/textmodes/reftex-global.el                    |    2 +-
 lisp/textmodes/reftex-index.el                     |    2 +-
 lisp/textmodes/reftex-parse.el                     |    2 +-
 lisp/textmodes/reftex-ref.el                       |    2 +-
 lisp/textmodes/reftex-sel.el                       |    2 +-
 lisp/textmodes/reftex-toc.el                       |    2 +-
 lisp/textmodes/reftex-vars.el                      |    2 +-
 lisp/textmodes/reftex.el                           |   42 +-
 lisp/textmodes/remember.el                         |    2 +-
 lisp/textmodes/rst.el                              |    2 +-
 lisp/textmodes/sgml-mode.el                        |    4 +-
 lisp/textmodes/table.el                            |    2 +-
 lisp/textmodes/tex-mode.el                         |   52 +-
 lisp/textmodes/texinfmt.el                         |    2 +-
 lisp/textmodes/texinfo.el                          |    2 +-
 lisp/textmodes/texnfo-upd.el                       |    2 +-
 lisp/textmodes/text-mode.el                        |    2 +-
 lisp/textmodes/tildify.el                          |  107 +-
 lisp/textmodes/two-column.el                       |    2 +-
 lisp/textmodes/underline.el                        |    2 +-
 lisp/thingatpt.el                                  |    2 +-
 lisp/thumbs.el                                     |    2 +-
 lisp/time-stamp.el                                 |    2 +-
 lisp/time.el                                       |    2 +-
 lisp/timezone.el                                   |    2 +-
 lisp/tmm.el                                        |   13 +-
 lisp/tool-bar.el                                   |    8 +-
 lisp/tooltip.el                                    |    8 +-
 lisp/tree-widget.el                                |    2 +-
 lisp/tutorial.el                                   |    2 +-
 lisp/type-break.el                                 |    3 +-
 lisp/uniquify.el                                   |    2 +-
 lisp/url/.gitignore                                |    4 -
 lisp/url/ChangeLog                                 |   49 +-
 lisp/url/url-about.el                              |    2 +-
 lisp/url/url-auth.el                               |    2 +-
 lisp/url/url-cache.el                              |    2 +-
 lisp/url/url-cid.el                                |    2 +-
 lisp/url/url-cookie.el                             |    9 +-
 lisp/url/url-dav.el                                |   12 +-
 lisp/url/url-dired.el                              |    2 +-
 lisp/url/url-domsuf.el                             |    2 +-
 lisp/url/url-expand.el                             |    2 +-
 lisp/url/url-file.el                               |    2 +-
 lisp/url/url-ftp.el                                |    2 +-
 lisp/url/url-future.el                             |   18 +-
 lisp/url/url-gw.el                                 |    2 +-
 lisp/url/url-handlers.el                           |    2 +-
 lisp/url/url-history.el                            |    2 +-
 lisp/url/url-http.el                               |   24 +-
 lisp/url/url-imap.el                               |    2 +-
 lisp/url/url-irc.el                                |    2 +-
 lisp/url/url-ldap.el                               |    2 +-
 lisp/url/url-mailto.el                             |    2 +-
 lisp/url/url-methods.el                            |    2 +-
 lisp/url/url-misc.el                               |    2 +-
 lisp/url/url-news.el                               |    2 +-
 lisp/url/url-nfs.el                                |    2 +-
 lisp/url/url-ns.el                                 |    2 +-
 lisp/url/url-parse.el                              |    2 +-
 lisp/url/url-privacy.el                            |    2 +-
 lisp/url/url-proxy.el                              |    2 +-
 lisp/url/url-queue.el                              |   11 +-
 lisp/url/url-tramp.el                              |    2 +-
 lisp/url/url-util.el                               |    3 +-
 lisp/url/url-vars.el                               |    6 +-
 lisp/url/url.el                                    |    3 +-
 lisp/userlock.el                                   |    2 +-
 lisp/vc/add-log.el                                 |    2 +-
 lisp/vc/compare-w.el                               |   86 +-
 lisp/vc/cvs-status.el                              |    2 +-
 lisp/vc/diff-mode.el                               |   12 +-
 lisp/vc/diff.el                                    |    2 +-
 lisp/vc/ediff-diff.el                              |    2 +-
 lisp/vc/ediff-help.el                              |    2 +-
 lisp/vc/ediff-hook.el                              |    2 +-
 lisp/vc/ediff-init.el                              |   13 +-
 lisp/vc/ediff-merg.el                              |    2 +-
 lisp/vc/ediff-mult.el                              |    2 +-
 lisp/vc/ediff-ptch.el                              |    2 +-
 lisp/vc/ediff-util.el                              |    2 +-
 lisp/vc/ediff-vers.el                              |    2 +-
 lisp/vc/ediff-wind.el                              |    2 +-
 lisp/vc/ediff.el                                   |    2 +-
 lisp/vc/log-edit.el                                |    2 +-
 lisp/vc/log-view.el                                |    2 +-
 lisp/vc/pcvs-defs.el                               |    2 +-
 lisp/vc/pcvs-info.el                               |    2 +-
 lisp/vc/pcvs-parse.el                              |    2 +-
 lisp/vc/pcvs-util.el                               |    2 +-
 lisp/vc/pcvs.el                                    |    2 +-
 lisp/vc/smerge-mode.el                             |   15 +-
 lisp/vc/vc-annotate.el                             |    2 +-
 lisp/vc/vc-bzr.el                                  |   74 +-
 lisp/vc/vc-cvs.el                                  |  159 +-
 lisp/vc/vc-dav.el                                  |   32 +-
 lisp/vc/vc-dir.el                                  |   24 +-
 lisp/vc/vc-dispatcher.el                           |    4 +-
 lisp/vc/vc-filewise.el                             |   84 +
 lisp/vc/vc-git.el                                  |   94 +-
 lisp/vc/vc-hg.el                                   |  107 +-
 lisp/vc/vc-hooks.el                                |  162 +-
 lisp/vc/vc-mtn.el                                  |   29 +-
 lisp/vc/vc-rcs.el                                  |  280 +-
 lisp/vc/vc-sccs.el                                 |  140 +-
 lisp/vc/vc-src.el                                  |  313 ++
 lisp/vc/vc-svn.el                                  |  114 +-
 lisp/vc/vc.el                                      |  572 ++--
 lisp/vcursor.el                                    |    2 +-
 lisp/version.el                                    |   81 +-
 lisp/view.el                                       |    2 +-
 lisp/vt-control.el                                 |    2 +-
 lisp/vt100-led.el                                  |    2 +-
 lisp/w32-fns.el                                    |    2 +-
 lisp/w32-vars.el                                   |    2 +-
 lisp/wdired.el                                     |    2 +-
 lisp/whitespace.el                                 |    3 +-
 lisp/wid-browse.el                                 |    2 +-
 lisp/wid-edit.el                                   |   71 +-
 lisp/widget.el                                     |    2 +-
 lisp/windmove.el                                   |    2 +-
 lisp/window.el                                     |  651 ++--
 lisp/winner.el                                     |    2 +-
 lisp/woman.el                                      |    2 +-
 lisp/x-dnd.el                                      |    2 +-
 lisp/xml.el                                        |    2 +-
 lisp/xt-mouse.el                                   |    2 +-
 lwlib/.gitignore                                   |    1 -
 lwlib/ChangeLog                                    |   15 +-
 lwlib/Makefile.in                                  |   18 +-
 lwlib/deps.mk                                      |    2 +-
 lwlib/lwlib-Xaw.c                                  |    2 +-
 lwlib/lwlib-Xlw.c                                  |    2 +-
 lwlib/lwlib-Xm.c                                   |    2 +-
 lwlib/lwlib-int.h                                  |    2 +-
 lwlib/lwlib-utils.c                                |    2 +-
 lwlib/lwlib-widget.h                               |    2 +-
 lwlib/lwlib.c                                      |    2 +-
 lwlib/lwlib.h                                      |    2 +-
 lwlib/xlwmenu.c                                    |    9 +-
 lwlib/xlwmenu.h                                    |    2 +-
 lwlib/xlwmenuP.h                                   |    2 +-
 m4/00gnulib.m4                                     |    2 +-
 m4/absolute-header.m4                              |    2 +-
 m4/acl.m4                                          |    2 +-
 m4/alloca.m4                                       |    2 +-
 m4/byteswap.m4                                     |    2 +-
 m4/c-strtod.m4                                     |    2 +-
 m4/clock_time.m4                                   |    2 +-
 m4/close-stream.m4                                 |    2 +-
 m4/count-one-bits.m4                               |    2 +-
 m4/count-trailing-zeros.m4                         |    2 +-
 m4/dirent_h.m4                                     |    2 +-
 m4/dup2.m4                                         |    2 +-
 m4/environ.m4                                      |    2 +-
 m4/errno_h.m4                                      |    2 +-
 m4/euidaccess.m4                                   |    2 +-
 m4/execinfo.m4                                     |    2 +-
 m4/extensions.m4                                   |    7 +-
 m4/extern-inline.m4                                |    2 +-
 m4/faccessat.m4                                    |    2 +-
 m4/fcntl.m4                                        |    2 +-
 m4/fcntl_h.m4                                      |    2 +-
 m4/fdatasync.m4                                    |    2 +-
 m4/fdopendir.m4                                    |    2 +-
 m4/filemode.m4                                     |    2 +-
 m4/fpending.m4                                     |    2 +-
 m4/fstatat.m4                                      |    2 +-
 m4/fsync.m4                                        |    2 +-
 m4/getdtablesize.m4                                |    2 +-
 m4/getgroups.m4                                    |    2 +-
 m4/getloadavg.m4                                   |    2 +-
 m4/getopt.m4                                       |    2 +-
 m4/gettime.m4                                      |    2 +-
 m4/gettimeofday.m4                                 |    2 +-
 m4/gnulib-common.m4                                |    2 +-
 m4/gnulib-comp.m4                                  |   11 +-
 m4/gnulib-tool.m4                                  |    2 +-
 m4/group-member.m4                                 |    2 +-
 m4/include_next.m4                                 |    2 +-
 m4/inttypes.m4                                     |    2 +-
 m4/largefile.m4                                    |    2 +-
 m4/longlong.m4                                     |    2 +-
 m4/lstat.m4                                        |    2 +-
 m4/manywarnings.m4                                 |    2 +-
 m4/md5.m4                                          |    2 +-
 m4/memrchr.m4                                      |    2 +-
 m4/mkostemp.m4                                     |    2 +-
 m4/mktime.m4                                       |    2 +-
 m4/multiarch.m4                                    |    2 +-
 m4/nocrash.m4                                      |    2 +-
 m4/off_t.m4                                        |    2 +-
 m4/pathmax.m4                                      |    2 +-
 m4/pipe2.m4                                        |    2 +-
 m4/pselect.m4                                      |    2 +-
 m4/pthread_sigmask.m4                              |    2 +-
 m4/putenv.m4                                       |    2 +-
 m4/readlink.m4                                     |    2 +-
 m4/readlinkat.m4                                   |    2 +-
 m4/secure_getenv.m4                                |    2 +-
 m4/setenv.m4                                       |    2 +-
 m4/sha1.m4                                         |    2 +-
 m4/sha256.m4                                       |    2 +-
 m4/sha512.m4                                       |    2 +-
 m4/sig2str.m4                                      |    2 +-
 m4/signal_h.m4                                     |    2 +-
 m4/socklen.m4                                      |    2 +-
 m4/ssize_t.m4                                      |    2 +-
 m4/st_dm_mode.m4                                   |    2 +-
 m4/stat-time.m4                                    |    2 +-
 m4/stat.m4                                         |    2 +-
 m4/stdalign.m4                                     |   10 +-
 m4/stddef_h.m4                                     |   10 +-
 m4/stdint.m4                                       |    2 +-
 m4/stdio_h.m4                                      |   25 +-
 m4/stdlib_h.m4                                     |    2 +-
 m4/stpcpy.m4                                       |   25 +
 m4/strftime.m4                                     |    2 +-
 m4/string_h.m4                                     |    2 +-
 m4/strtoimax.m4                                    |    2 +-
 m4/strtoll.m4                                      |    2 +-
 m4/strtoull.m4                                     |    2 +-
 m4/strtoumax.m4                                    |    2 +-
 m4/symlink.m4                                      |    2 +-
 m4/sys_select_h.m4                                 |    2 +-
 m4/sys_socket_h.m4                                 |    2 +-
 m4/sys_stat_h.m4                                   |    2 +-
 m4/sys_time_h.m4                                   |    2 +-
 m4/sys_types_h.m4                                  |    2 +-
 m4/tempname.m4                                     |    2 +-
 m4/time_h.m4                                       |   21 +-
 m4/time_r.m4                                       |    2 +-
 m4/timer_time.m4                                   |    2 +-
 m4/timespec.m4                                     |    2 +-
 m4/tm_gmtoff.m4                                    |    2 +-
 m4/unistd_h.m4                                     |    2 +-
 m4/utimbuf.m4                                      |    2 +-
 m4/utimens.m4                                      |    2 +-
 m4/utimes.m4                                       |    2 +-
 m4/vararrays.m4                                    |    2 +-
 m4/warnings.m4                                     |    2 +-
 m4/wchar_t.m4                                      |    2 +-
 make-dist                                          |   11 +-
 msdos/ChangeLog                                    |    2 +-
 msdos/INSTALL                                      |    2 +-
 msdos/README                                       |    4 +-
 msdos/autogen/Makefile.in                          |    6 +-
 msdos/autogen/config.in                            |    2 +-
 msdos/depfiles.bat                                 |    2 +-
 msdos/inttypes.h                                   |    2 +-
 msdos/mainmake.v2                                  |    2 +-
 msdos/sed1v2.inp                                   |    2 +-
 msdos/sed1x.inp                                    |    2 +-
 msdos/sed2v2.inp                                   |    4 +-
 msdos/sed2x.inp                                    |    2 +-
 msdos/sed3v2.inp                                   |    2 +-
 msdos/sed4.inp                                     |    2 +-
 msdos/sed5x.inp                                    |    2 +-
 msdos/sed6.inp                                     |    2 +-
 msdos/sedadmin.inp                                 |    2 +-
 msdos/sedalloc.inp                                 |    2 +-
 msdos/sedleim.inp                                  |    2 +-
 msdos/sedlibcf.inp                                 |    2 +-
 msdos/sedlibmk.inp                                 |    2 +-
 msdos/sedlisp.inp                                  |    2 +-
 nextstep/ChangeLog                                 |   16 +-
 nextstep/INSTALL                                   |    2 +-
 nextstep/Makefile.in                               |   30 +-
 nextstep/templates/Info-gnustep.plist.in           |    2 +-
 nextstep/templates/Info.plist.in                   |    2 +-
 nt/.gitignore                                      |    5 -
 nt/ChangeLog                                       |   45 +-
 nt/INSTALL                                         |    2 +-
 nt/INSTALL.OLD                                     |    2 +-
 nt/Makefile.in                                     |   37 +-
 nt/README                                          |    2 +-
 nt/README.W32                                      |    2 +-
 nt/addpm.c                                         |    7 +-
 nt/cmdproxy.c                                      |    2 +-
 nt/config.nt                                       |    4 +-
 nt/configure.bat                                   |    2 +-
 nt/ddeclient.c                                     |    2 +-
 nt/{emacs.rc => emacs.rc.in}                       |   10 +-
 nt/{emacsclient.rc => emacsclient.rc.in}           |   10 +-
 nt/envadd.bat                                      |    2 +-
 nt/epaths.nt                                       |    2 +-
 nt/gmake.defs                                      |    2 +-
 nt/gnulib.mk                                       |  114 +-
 nt/icons/README                                    |    6 +-
 nt/inc/grp.h                                       |    2 +-
 nt/inc/inttypes.h                                  |    2 +-
 nt/inc/langinfo.h                                  |    2 +-
 nt/inc/ms-w32.h                                    |   19 +-
 nt/inc/nl_types.h                                  |    2 +-
 nt/inc/stdint.h                                    |    2 +-
 nt/inc/sys/socket.h                                |    2 +-
 nt/inc/sys/stat.h                                  |    2 +-
 nt/inc/sys/wait.h                                  |    2 +-
 nt/makefile.w32-in                                 |    2 +-
 nt/multi-install-info.bat                          |    2 +-
 nt/nmake.defs                                      |    2 +-
 nt/paths.h                                         |    2 +-
 nt/preprep.c                                       |    4 +-
 nt/runemacs.c                                      |    2 +-
 nt/zipdist.bat                                     |    2 +-
 oldXMenu/.gitignore                                |    1 -
 oldXMenu/Activate.c                                |    2 +-
 oldXMenu/ChangeLog                                 |    9 +-
 oldXMenu/Create.c                                  |    2 +-
 oldXMenu/FindSel.c                                 |    2 +-
 oldXMenu/Internal.c                                |    2 +-
 oldXMenu/Makefile.in                               |   18 +-
 oldXMenu/deps.mk                                   |    2 +-
 oldXMenu/insque.c                                  |    2 +-
 src/.gdbinit                                       |   27 +-
 src/.gitignore                                     |    9 -
 src/ChangeLog                                      | 1739 ++++++++++-
 src/ChangeLog.1                                    |    2 +-
 src/ChangeLog.10                                   |    6 +-
 src/ChangeLog.11                                   |   20 +-
 src/ChangeLog.12                                   |    6 +-
 src/ChangeLog.2                                    |    8 +-
 src/ChangeLog.3                                    |    2 +-
 src/ChangeLog.4                                    |    2 +-
 src/ChangeLog.5                                    |  160 +-
 src/ChangeLog.6                                    |    2 +-
 src/ChangeLog.7                                    |    2 +-
 src/ChangeLog.8                                    |    2 +-
 src/ChangeLog.9                                    |    2 +-
 src/Makefile.in                                    |   73 +-
 src/README                                         |    2 +-
 src/alloc.c                                        |  356 +--
 src/atimer.c                                       |    2 +-
 src/atimer.h                                       |    2 +-
 src/bidi.c                                         |  291 +-
 src/blockinput.h                                   |    2 +-
 src/buffer.c                                       |  237 +-
 src/buffer.h                                       |    8 +-
 src/bytecode.c                                     |    3 +-
 src/callint.c                                      |   55 +-
 src/callproc.c                                     |   38 +-
 src/casefiddle.c                                   |    4 +-
 src/casetab.c                                      |    3 +-
 src/category.c                                     |    4 +-
 src/ccl.c                                          |   26 +-
 src/ccl.h                                          |    2 -
 src/character.c                                    |   14 +-
 src/character.h                                    |    1 -
 src/charset.c                                      |   44 +-
 src/charset.h                                      |    8 +-
 src/chartab.c                                      |   10 +-
 src/cm.c                                           |    2 +-
 src/cm.h                                           |    2 +-
 src/cmds.c                                         |   15 +-
 src/coding.c                                       |  167 +-
 src/coding.h                                       |   21 +-
 src/commands.h                                     |    2 +-
 src/composite.c                                    |   47 +-
 src/composite.h                                    |    5 +-
 src/conf_post.h                                    |   10 +-
 src/cygw32.c                                       |    2 +-
 src/cygw32.h                                       |    2 +-
 src/data.c                                         |  110 +-
 src/dbusbind.c                                     |   50 +-
 src/decompress.c                                   |   55 +-
 src/deps.mk                                        |    4 +-
 src/dired.c                                        |  200 +-
 src/dispextern.h                                   |   88 +-
 src/dispnew.c                                      |   51 +-
 src/disptab.h                                      |    5 +-
 src/doc.c                                          |   65 +-
 src/doprnt.c                                       |    2 +-
 src/dosfns.c                                       |    4 +-
 src/dosfns.h                                       |    2 +-
 src/editfns.c                                      |  188 +-
 src/emacs-icon.h                                   |    2 +-
 src/emacs.c                                        |   37 +-
 src/emacsgtkfixed.c                                |    2 +-
 src/emacsgtkfixed.h                                |    2 +-
 src/epaths.in                                      |    2 +-
 src/eval.c                                         |  140 +-
 src/fileio.c                                       |  397 +--
 src/filelock.c                                     |   23 +-
 src/firstfile.c                                    |    2 +-
 src/floatfns.c                                     |    3 +-
 src/fns.c                                          |  125 +-
 src/font.c                                         |  174 +-
 src/font.h                                         |  133 +-
 src/fontset.c                                      |   31 +-
 src/fontset.h                                      |    3 +-
 src/frame.c                                        |  361 ++-
 src/frame.h                                        |   63 +-
 src/fringe.c                                       |   15 +-
 src/ftfont.c                                       |   28 +-
 src/ftxfont.c                                      |    4 +-
 src/getpagesize.h                                  |    2 +-
 src/gfilenotify.c                                  |   58 +-
 src/gmalloc.c                                      |    2 +-
 src/gnutls.c                                       | 1082 +++++--
 src/gnutls.h                                       |    6 +-
 src/gtkutil.c                                      |   56 +-
 src/gtkutil.h                                      |    4 +-
 src/image.c                                        | 1076 +++----
 src/indent.c                                       |   11 +-
 src/indent.h                                       |    2 +-
 src/inotify.c                                      |   83 +-
 src/insdel.c                                       |   36 +-
 src/intervals.c                                    |    2 +-
 src/intervals.h                                    |   18 +-
 src/keyboard.c                                     |  382 ++-
 src/keyboard.h                                     |   33 +-
 src/keymap.c                                       |   26 +-
 src/keymap.h                                       |    5 +-
 src/lastfile.c                                     |    2 +-
 src/lisp.h                                         |  658 ++--
 src/lisp.mk                                        |    3 +-
 src/lread.c                                        |  125 +-
 src/macfont.h                                      |    2 +-
 src/macfont.m                                      |   36 +-
 src/macros.c                                       |    7 +-
 src/macros.h                                       |    2 +-
 src/makefile.w32-in                                |    2 +-
 src/marker.c                                       |    2 +-
 src/menu.c                                         |    2 +-
 src/menu.h                                         |    6 +-
 src/minibuf.c                                      |   67 +-
 src/msdos.c                                        |    4 +-
 src/msdos.h                                        |    2 +-
 src/nsfns.m                                        |   49 +-
 src/nsfont.m                                       |   11 +-
 src/nsgui.h                                        |    2 +-
 src/nsimage.m                                      |   13 +-
 src/nsmenu.m                                       |   11 +-
 src/nsselect.m                                     |   15 +-
 src/nsterm.h                                       |    9 +-
 src/nsterm.m                                       |   61 +-
 src/print.c                                        |   35 +-
 src/process.c                                      |  212 +-
 src/process.h                                      |   16 +-
 src/profiler.c                                     |    3 +-
 src/puresize.h                                     |    2 +-
 src/ralloc.c                                       |    2 +-
 src/regex.c                                        |   20 +-
 src/regex.h                                        |    2 +-
 src/region-cache.c                                 |    2 +-
 src/region-cache.h                                 |    2 +-
 src/scroll.c                                       |    2 +-
 src/search.c                                       |   42 +-
 src/sheap.c                                        |    2 +-
 src/sound.c                                        |   34 +-
 src/syntax.c                                       |   10 +-
 src/syntax.h                                       |    2 +-
 src/sysdep.c                                       |  134 +-
 src/sysselect.h                                    |    2 +-
 src/syssignal.h                                    |    2 +-
 src/systime.h                                      |    2 +-
 src/systty.h                                       |    2 +-
 src/syswait.h                                      |    2 +-
 src/term.c                                         |   29 +-
 src/termcap.c                                      |    2 +-
 src/termchar.h                                     |    2 +-
 src/termhooks.h                                    |   10 +-
 src/terminal.c                                     |   15 +-
 src/terminfo.c                                     |    2 +-
 src/termopts.h                                     |    2 +-
 src/textprop.c                                     |   24 +-
 src/tparam.c                                       |    6 +-
 src/tparam.h                                       |    2 +-
 src/undo.c                                         |   10 +-
 src/unexaix.c                                      |   29 +-
 src/unexcoff.c                                     |   29 +-
 src/unexcw.c                                       |    2 +-
 src/unexelf.c                                      |   14 +-
 src/unexmacosx.c                                   |    4 +-
 src/unexw32.c                                      |    2 +-
 src/vm-limit.c                                     |    2 +-
 src/w16select.c                                    |    2 +-
 src/w32.c                                          |   67 +-
 src/w32.h                                          |   16 +-
 src/w32common.h                                    |    2 +-
 src/w32console.c                                   |    2 +-
 src/w32fns.c                                       |  289 +-
 src/w32font.c                                      |   59 +-
 src/w32font.h                                      |    6 +-
 src/w32gui.h                                       |    2 +-
 src/w32heap.c                                      |   10 +-
 src/w32heap.h                                      |    2 +-
 src/w32inevt.c                                     |    5 +-
 src/w32inevt.h                                     |    2 +-
 src/w32menu.c                                      |  104 +-
 src/w32notify.c                                    |   12 +-
 src/w32proc.c                                      |   37 +-
 src/w32reg.c                                       |    2 +-
 src/w32select.c                                    |   10 +-
 src/w32select.h                                    |    2 +-
 src/w32term.c                                      |  145 +-
 src/w32term.h                                      |   12 +-
 src/w32uniscribe.c                                 |   18 +-
 src/w32xfns.c                                      |    2 +-
 src/widget.c                                       |    2 +-
 src/widget.h                                       |    2 +-
 src/widgetprv.h                                    |    2 +-
 src/window.c                                       |   92 +-
 src/window.h                                       |    3 +-
 src/xdisp.c                                        |  839 ++---
 src/xfaces.c                                       |  741 +++--
 src/xfns.c                                         |  335 +-
 src/xfont.c                                        |   18 +-
 src/xftfont.c                                      |   33 +-
 src/xgselect.c                                     |    6 +-
 src/xgselect.h                                     |    2 +-
 src/xmenu.c                                        |  126 +-
 src/xml.c                                          |  168 +-
 src/xrdb.c                                         |   49 +-
 src/xselect.c                                      |  144 +-
 src/xsettings.c                                    |  100 +-
 src/xsettings.h                                    |    2 +-
 src/xsmfns.c                                       |   36 +-
 src/xterm.c                                        |  589 ++--
 src/xterm.h                                        |   27 +-
 test/ChangeLog                                     |  388 ++-
 test/automated/Makefile.in                         |    8 +-
 test/automated/add-log-tests.el                    |    2 +-
 test/automated/advice-tests.el                     |    2 +-
 test/automated/bytecomp-tests.el                   |    2 +-
 test/automated/calc-tests.el                       |   54 +-
 test/automated/cl-generic-tests.el                 |  183 ++
 test/automated/cl-lib-tests.el                     |    5 +-
 test/automated/comint-testsuite.el                 |    2 +-
 test/automated/compile-tests.el                    |    2 +-
 test/automated/completion-tests.el                 |    2 +-
 test/automated/core-elisp-tests.el                 |    9 +-
 test/automated/data-tests.el                       |    2 +-
 test/automated/data/flymake/Makefile               |   13 +
 .../{flymake/warnpred => data/flymake}/test.c      |    0
 .../{flymake/warnpred => data/flymake}/test.pl     |    2 +-
 test/automated/dbus-tests.el                       |    2 +-
 test/automated/decoder-tests.el                    |    2 +-
 test/automated/descr-text-test.el                  |   94 +
 test/automated/eieio-test-methodinvoke.el          |  131 +-
 test/automated/eieio-test-persist.el               |   19 +-
 test/automated/eieio-tests.el                      |  178 +-
 test/automated/electric-tests.el                   |   13 +-
 test/automated/ert-tests.el                        |    2 +-
 test/automated/ert-x-tests.el                      |    2 +-
 test/automated/eshell.el                           |    2 +-
 test/automated/f90.el                              |    2 +-
 test/automated/file-notify-tests.el                |    2 +-
 test/automated/files.el                            |    2 +-
 test/automated/flymake-tests.el                    |    4 +-
 test/automated/flymake/warnpred/Makefile           |    8 -
 test/automated/fns-tests.el                        |    2 +-
 test/automated/font-parse-tests.el                 |    2 +-
 test/automated/gnus-tests.el                       |    2 +-
 test/automated/help-fns.el                         |    2 +-
 test/automated/icalendar-tests.el                  |    2 +-
 test/automated/imenu-test.el                       |    2 +-
 test/automated/info-xref.el                        |    2 +-
 test/automated/inotify-test.el                     |    2 +-
 test/automated/let-alist.el                        |   78 +
 test/automated/lexbind-tests.el                    |    2 +-
 test/automated/libxml-tests.el                     |   28 +-
 test/automated/man-tests.el                        |    2 +-
 test/automated/mule-util.el                        |    2 +-
 test/automated/newsticker-tests.el                 |    2 +-
 test/automated/occur-tests.el                      |    2 +-
 test/automated/package-test.el                     |   26 +-
 test/automated/pcase-tests.el                      |    2 +-
 test/automated/print-tests.el                      |    2 +-
 test/automated/process-tests.el                    |    2 +-
 test/automated/python-tests.el                     | 1118 +++++--
 test/automated/reftex-tests.el                     |    2 +-
 test/automated/regexp-tests.el                     |    4 +-
 test/automated/ruby-mode-tests.el                  |    2 +-
 test/automated/seq-tests.el                        |  201 ++
 test/automated/subr-x-tests.el                     |    2 +-
 test/automated/subword-tests.el                    |    2 +-
 test/automated/syntax-tests.el                     |    2 +-
 test/automated/thingatpt.el                        |    2 +-
 test/automated/tildify-tests.el                    |   73 +-
 test/automated/timer-tests.el                      |    2 +-
 test/automated/tramp-tests.el                      |   55 +-
 test/automated/undo-tests.el                       |    2 +-
 test/automated/url-future-tests.el                 |    2 +-
 test/automated/url-util-tests.el                   |    2 +-
 test/automated/vc-bzr.el                           |    2 +-
 test/automated/vc-tests.el                         |  455 +++
 test/automated/xml-parse-tests.el                  |    2 +-
 test/automated/zlib-tests.el                       |    2 +-
 test/biditest.el                                   |    4 +-
 test/cedet/cedet-utests.el                         |    2 +-
 test/cedet/ede-tests.el                            |    2 +-
 test/cedet/semantic-ia-utest.el                    |    2 +-
 test/cedet/semantic-tests.el                       |    2 +-
 test/cedet/semantic-utest-c.el                     |    2 +-
 test/cedet/semantic-utest.el                       |    2 +-
 test/cedet/srecode-tests.el                        |    2 +-
 test/cedet/tests/test.c                            |    2 +-
 test/cedet/tests/test.el                           |    2 +-
 test/cedet/tests/test.make                         |    2 +-
 test/cedet/tests/testdoublens.cpp                  |    2 +-
 test/cedet/tests/testdoublens.hpp                  |    2 +-
 test/cedet/tests/testjavacomp.java                 |    2 +-
 test/cedet/tests/testpolymorph.cpp                 |    2 +-
 test/cedet/tests/testspp.c                         |    2 +-
 test/cedet/tests/testsppreplace.c                  |    2 +-
 test/cedet/tests/testsppreplaced.c                 |    2 +-
 test/cedet/tests/testsubclass.cpp                  |    2 +-
 test/cedet/tests/testsubclass.hh                   |    2 +-
 test/cedet/tests/testtypedefs.cpp                  |    2 +-
 test/cedet/tests/testvarnames.c                    |    2 +-
 test/indent/js.js                                  |   13 +
 test/indent/pascal.pas                             |    2 +-
 test/indent/shell.sh                               |   27 +-
 test/redisplay-testsuite.el                        |    2 +-
 test/rmailmm.el                                    |    2 +-
 2502 files changed, 41089 insertions(+), 23328 deletions(-)

diff --git a/.dir-locals.el b/.dir-locals.el
index afc68ea..5e73e0d 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -3,7 +3,9 @@
          (fill-column . 70)))
  (c-mode . ((c-file-style . "GNU")))
  (objc-mode . ((c-file-style . "GNU")))
- (log-edit-mode . ((log-edit-font-lock-gnu-style . t)
+ (log-edit-mode . ((log-edit-rewrite-fixes
+                    "[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1")
+                   (log-edit-font-lock-gnu-style . t)
                    (log-edit-setup-add-author . t)))
  (change-log-mode . ((add-log-time-zone-rule . t)
                     (fill-column . 74)
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..c568ba2
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,40 @@
+# Attributes of Emacs files in the Git repository.
+
+# Copyright 2015 Free Software Foundation, Inc.
+
+# 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+# A few files use CRLF endings, even on non-Microsoft platforms.
+# Do not warn about trailing whitespace with these files.
+*.bat -whitespace
+admin/charsets/mapfiles/PTCP154 -whitespace
+leim/MISC-DIC/cangjie-table.b5 -whitespace
+leim/MISC-DIC/cangjie-table.cns -whitespace
+leim/MISC-DIC/pinyin.map -whitespace
+lib-src/update-game-score.exe.manifest -whitespace
+nt/nmake.defs -whitespace
+
+# Some files should not be treated as text when diffing or merging.
+*.gpg binary
+*.gz binary
+*.icns binary
+*.ico binary
+*.pbm binary
+*.pdf binary
+*.png binary
+*.sig binary
+*.tiff binary
+test/automated/data/decompress/foo-gzipped binary
diff --git a/.gitignore b/.gitignore
index 1fb7d49..9810c1d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,47 +1,58 @@
-configure
-aclocal.m4
-compile
-config.guess
-config.sub
-depcomp
-install-sh
-missing
+# Files that Git should ignore in the Emacs source directory.
+
+# Copyright 2009-2015 Free Software Foundation, Inc.
+
+# 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# Currently we assume only Git 1.7.1 (April 2010) or later, so this
+# file does not rely on "**" in patterns.  The "**" feature was added
+# in Git 1.8.2 (March 2013).
+
+
+# Built by 'autogen.sh'.
+/aclocal.m4
+/configure
+build-aux/compile
+build-aux/config.guess
+build-aux/config.sub
+build-aux/depcomp
+build-aux/install-sh
+build-aux/missing
 lib/Makefile.in
 src/config.in
-autom4te.cache
-makefile
-TAGS
-*~
-.#*
-/README.W32
-
-/bin/
-/site-lisp/
-/leim/ja-dic/
-etc/refcards/*.aux
-etc/refcards/*.log
-info/dir
-info/*.info
-test/biditest.txt
 
+# Built by 'configure'.
+Info.plist
+InfoPlist.strings
 Makefile
-config.log
-config.status
-config.cache
-lib-src/blessmail
-lib-src/ctags
-lib-src/ebrowse
-lib-src/emacsclient
-lib-src/etags
-lib-src/hexl
-lib-src/make-docfile
-lib-src/movemail
-lib-src/profile
-lib-src/test-distrib
-lib-src/update-game-score
-*.o
-*.exe
-*.res
+!admin/charsets/Makefile
+!etc/refcards/Makefile
+!test/automated/data/flymake/Makefile
+!test/indent/Makefile
+makefile
+/*.cache
+/confdefs.h
+/config.status
+/configure.lineno
+/conftest*
+src/config.h
+src/epaths.h
+
+# C-level sources built by 'make'.
 lib/alloca.h
 lib/arg-nonnull.h
 lib/byteswap.h
@@ -54,30 +65,202 @@ lib/getopt.h
 lib/inttypes.h
 lib/libgnu.a
 lib/signal.h
-lib/stdio.h
-lib/stdlib.h
-lib/stdalign.h
+lib/std*.h
+!lib/std*.in.h
 lib/string.h
 lib/sys/
 lib/time.h
 lib/unistd.h
 lib/warn-on-use.h
+src/buildobj.h
+src/globals.h
+
+# Lisp-level sources built by 'make'.
+*cus-load.el
+*loaddefs.el
+leim/changed.misc
+leim/changed.tit
+lisp/cedet/semantic/bovine/c-by.el
+lisp/cedet/semantic/bovine/make-by.el
+lisp/cedet/semantic/bovine/scm-by.el
+lisp/cedet/semantic/wisent/javat-wy.el
+lisp/cedet/semantic/wisent/js-wy.el
+lisp/cedet/semantic/wisent/python-wy.el
+lisp/cedet/srecode/srt-wy.el
+lisp/eshell/esh-groups.el
+lisp/finder-inf.el
+lisp/leim/ja-dic/
+lisp/leim/leim-list.el
+lisp/leim/quail/4Corner.el
+lisp/leim/quail/ARRAY30.el
+lisp/leim/quail/CCDOSPY.el
+lisp/leim/quail/CTLau.el
+lisp/leim/quail/CTLau-b5.el
+lisp/leim/quail/ECDICT.el
+lisp/leim/quail/ETZY.el
+lisp/leim/quail/PY-b5.el
+lisp/leim/quail/PY.el
+lisp/leim/quail/Punct.el
+lisp/leim/quail/Punct-b5.el
+lisp/leim/quail/QJ.el
+lisp/leim/quail/QJ-b5.el
+lisp/leim/quail/SW.el
+lisp/leim/quail/TONEPY.el
+lisp/leim/quail/ZIRANMA.el
+lisp/leim/quail/ZOZY.el
+lisp/leim/quail/quick-b5.el
+lisp/leim/quail/quick-cns.el
+lisp/leim/quail/tsang-b5.el
+lisp/leim/quail/tsang-cns.el
+lisp/subdirs.el
+
+# Dependencies.
+.deps/
+deps/
+
+# Logs and temporaries.
+*.log
+*.tmp
+
+# Time stamps.
+stamp_BLD
+src/gl-stamp
+src/stamp-h.in
+src/stamp-h1
+
+# Object files and debugging.
+*.a
+*.dSYM/
+*.core
+*.elc
+*.o
+*.res
+[0-9]*.core
+core
+core.*[0-9]
+oo/
+oo-spd/
+src/*.map
+
+# Tests.
+test/indent/*.new
+test/biditest.txt
+
+# ctags, etags.
+TAGS
+
+# GNU global.
+GPATH
+GSYMS
+GRTAGS
+GTAGS
+
+# GNU idutils.
+ID
+
+# Executables.
+*.exe
+a.out
+lib-src/blessmail
+lib-src/ctags
+lib-src/ebrowse
+lib-src/emacsclient
+lib-src/etags
+lib-src/hexl
+lib-src/make-docfile
+lib-src/movemail
+lib-src/profile
+lib-src/test-distrib
+lib-src/update-game-score
+nextstep/Cocoa/Emacs.base/Contents/Info.plist
+nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj
+nextstep/Emacs.app/
+nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop
+nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist
 src/bootstrap-emacs
-src/deps/
 src/emacs
 src/emacs-[0-9]*
-src/gl-stamp
-src/globals.h
-src/stamp-h1
 src/temacs
-src/temacs.map
-src/temacs.tmp
+
+# Character-set info.
+admin/charsets/*.el
+admin/charsets/*.map
+admin/charsets/jisx2131-filter
+admin/unidata/unidata.txt
+lisp/international/charprop.el
+lisp/international/uni-*.el
+
+# Documentation.
+*.aux
+*.cm
+*.cms
+*.cp
+*.cps
+*.dvi
+*.fn
+*.fns
+*.html
+*.info
+*.ky
+*.kys
+*.op
+*.ops
+*.pdf
+!doc/lispintro/cons-*.pdf
+!doc/lispintro/drawers.pdf
+!doc/lispintro/lambda-*.pdf
+!etc/refcards/gnus-logo.pdf
+*.pg
+*.pgs
+*.pj
+*.pjs
+*.ps
+*.sc
+*.scs
+*.tg
+*.tgs
+*.toc
+*.tp
+*.tps
+*.vr
+*.vrs
 doc/emacs/emacsver.texi
 doc/man/emacs.1
+doc/misc/cc-mode.ss
+etc/DOC
 etc/refcards/emacsver.tex
-lib/.deps/
-lisp/international/uni-brackets.el
-lwlib/deps/
-lwlib/liblw.a
-leim/changed.misc
-leim/changed.tit
+info/dir
+
+# Version control and locks.
+*.orig
+*.rej
+*~
+.#*
+\#*\#
+[0-9]*.patch
+
+# Built by 'make install'.
+etc/emacs.tmpdesktop
+
+# Distribution directories.
+/emacs-[1-9]*/
+
+# Microsoft-related builds and installations.
+*.in-h
+_*
+!build-aux/snippet/_Noreturn.h
+/bin/
+/BIN/
+/data/
+etc/icons/
+lib/cxxdefs.h
+lib/SYS/
+/libexec/
+/lock/
+/README.W32
+/share/
+/site-lisp/
+nt/emacs.rc
+nt/emacsclient.rc
+src/gdb.ini
+/var/
diff --git a/CONTRIBUTE b/CONTRIBUTE
new file mode 100644
index 0000000..5cf015f
--- /dev/null
+++ b/CONTRIBUTE
@@ -0,0 +1,218 @@
+This file contains information on Emacs developer processes.
+
+For information on contributing to Emacs as a non-developer, see
+(info "(emacs)Contributing") or
+http://www.gnu.org/software/emacs/manual/html_node/emacs/Contributing.html
+
+* Information for Emacs Developers.
+
+An "Emacs Developer" is someone who contributes a lot of code or
+documentation to the Emacs repository. Generally, they have write
+access to the Emacs git repository on Savannah
+https://savannah.gnu.org/git/?group=emacs.
+
+** Write access to the Emacs repository.
+
+Once you become a frequent contributor to Emacs, we can consider
+giving you write access to the version-control repository. Request
+access on the address@hidden mailing list.
+
+** Using the Emacs repository
+
+Emacs uses git for the source code repository.
+
+See http://www.emacswiki.org/emacs/GitQuickStartForEmacsDevs to get
+started, and http://www.emacswiki.org/emacs/GitForEmacsDevs for more
+advanced information.
+
+Alternately, see admin/notes/git-workflow.
+
+If committing changes written by someone else, make the ChangeLog
+entry in their name, not yours. git distinguishes between the author
+and the committer; use the --author option on the commit command to
+specify the actual author; the committer defaults to you.
+
+** commit messages
+
+When using git, commit messages should use ChangeLog format, with the
+following modifications:
+
+- Add a single short line explaining the change, then an empty line,
+  then unindented ChangeLog entries.
+
+  You can use various Emacs functions to ease this process; see (info
+  "(emacs)Change Log Commands") or
+  
http://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Log-Commands.html.
+
+- The summary line is limited to 72 characters (enforced by a commit
+  hook). If you have trouble making that a good summary, add a
+  paragraph below it, before the individual file descriptions.
+
+- If only a single file is changed, the summary line can be the normal
+  file first line (starting with the asterisk).  Then there is no
+  individual files section.
+
+- Explaining the rationale for a design choice is best done in comments
+  in the source code. However, sometimes it is useful to describe just
+  the rationale for a change; that can be done in the commit message
+  between the summary line and the file entries.
+
+** ChangeLog notes
+
+- Emacs generally follows the GNU coding standards when it comes to
+  ChangeLogs:
+  http://www.gnu.org/prep/standards/html_node/Change-Logs.html .  One
+  exception is that we still sometimes quote `like-this' (as the
+  standards used to recommend) rather than 'like-this' (as they do
+  now), because `...' is so widely used elsewhere in Emacs.
+
+- Some of the rules in the GNU coding standards section 5.2
+  "Commenting Your Work" also apply to ChangeLog entries: they must be
+  in English, and be complete sentences starting with a capital and
+  ending with a period (except the summary line should not end in a
+  period).
+
+  It is tempting to relax this rule for commit messages, since they
+  are somewhat transient.  However, they are preserved indefinitely,
+  and have a reasonable chance of being read in the future, so it's
+  better that they have good presentation.
+
+- There are multiple ChangeLogs in the emacs source; roughly one per
+  high-level directory. The ChangeLog entry for a commit belongs in the
+  lowest ChangeLog that is higher than or at the same level as any file
+  changed by the commit.
+
+- Use the present tense; describe "what the change does", not "what
+  the change did".
+
+- Preferred form for several entries with the same content:
+
+   * help.el (view-lossage):
+   * kmacro.el (kmacro-edit-lossage):
+   * edmacro.el (edit-kbd-macro): Fix docstring, lossage is now 300 keys.
+
+  (Rather than anything involving "ditto" and suchlike.)
+
+- If the commit fixes a bug, add a separate line
+
+  Fixes: bug#NNNN
+
+  where NNNN is the bug number.
+
+- In ChangeLog entries, there is no standard or recommended way to
+  identify revisions.
+
+  One way to identify revisions is by quoting their summary line.
+  Another is with an action stamp - an RFC3339 date followed by !
+  followed by the committer's email - for example,
+  "2014-01-16T05:43:address@hidden". Often, "my previous commit"
+  will suffice.
+
+- There is no need to make separate ChangeLog entries for files such
+  as NEWS, MAINTAINERS, and FOR-RELEASE, or to indicate regeneration
+  of files such as 'configure'.  "There is no need" means you don't
+  have to, but you can if you want to.
+
+** branches
+
+Development normally takes places on the trunk.
+Sometimes specialized features are developed on separate branches
+before possibly being merged to the trunk.
+
+Development is discussed on the emacs-devel mailing list.
+
+Sometime before the release of a new major version of Emacs a "feature
+freeze" is imposed on the trunk, to prepare for creating a release
+branch.  No new features may be added to the trunk after this point,
+until the release branch is created. Announcements about the freeze
+(and other important events) are made on the info-gnu-emacs mailing
+list, and not anywhere else.
+
+The trunk branch is named "master" in git; release branches are named
+"emacs-nn" where "nn" is the major version.
+
+If you are fixing a bug that exists in the current release, be sure to
+commit it to the release branch; it will be merged to the master
+branch later.
+
+However, if you know that the change will be difficult to merge to the
+trunk (eg because the trunk code has changed a lot), you can apply the
+change to both trunk and branch yourself.  Indicate in the release
+branch commit log that there is no need to merge the commit to the
+trunk; start the commit message with "Backport:".  gitmerge.el will
+then exclude that commit from the merge to trunk.
+
+
+** Other process information
+
+See all the files in admin/notes/* . In particular, see
+admin/notes/newfile, see admin/notes/repo.
+
+*** git vs rename
+
+git does not explicitly represent a file renaming; it uses a percent
+changed heuristic to deduce that a file was renamed. So if you are
+planning to make extensive changes to a file after renaming it (or
+moving it to another directory), you should:
+
+- create a feature branch
+
+- commit the rename without any changes
+
+- make other changes
+
+- merge the feature branch to trunk, _not_ squashing the commits into
+  one. The commit message on this merge should summarize the renames
+  and all the changes.
+
+** Emacs Mailing lists.
+
+Discussion about Emacs development takes place on address@hidden
+
+Bug reports and fixes, feature requests and implementations should be
+sent to address@hidden, the bug/feature list.  This is coupled
+to the tracker at http://debbugs.gnu.org .
+
+You can subscribe to the mailing lists, or see the list archives,
+by following links from http://savannah.gnu.org/mail/?group=emacs .
+
+** Document your changes.
+
+Any change that matters to end-users should have an entry in etc/NEWS.
+
+Doc-strings should be updated together with the code.
+
+Think about whether your change requires updating the manuals.  If you
+know it does not, mark the NEWS entry with "---".  If you know
+that *all* the necessary documentation updates have been made, mark
+the entry with "+++". Otherwise do not mark it.
+
+** Understanding Emacs Internals.
+
+The best way to understand Emacs Internals is to read the code,
+but the nodes "Tips" and "GNU Emacs Internals" in the Appendix
+of the Emacs Lisp Reference Manual may also help.
+
+The file etc/DEBUG describes how to debug Emacs bugs.
+
+
+
+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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+Local variables:
+mode: outline
+paragraph-separate: "[         ]*$"
+end:
diff --git a/ChangeLog b/ChangeLog
index ed97875..d7fd76c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,366 @@
-2014-11-16  Christoph Scholtes  <address@hidden>
+2015-01-28  Paul Eggert  <address@hidden>
+
+       Merge from gnulib and try to repair bad merge
+       This attempts to repair problems introduced by the bad merge
+       5491fd1098d27b3ba3db054076b9ab60fb3558dc.  The easiest way for me
+       to fix the badly-merged gnulib files was to run
+       'admin/merge-gnulib', so I did that, which also imported the
+       following changes:
+       * build-aux/update-copyright, m4/gnulib.m4:
+       Update from gnulib, incorporating:
+       2015-01-15 time: port to MinGW32 3.21
+       2015-01-15 update-copyright: apply to self
+       2015-01-11 update-copyright: recognize groff's \(co marker
+
+2015-01-28  Eli Zaretskii  <address@hidden>
+
+       * configure.ac (HAVE_W32): Abort with error message if
+       --without-toolkit-scroll-bars was specified.  See
+       http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00525.html
+       for the details.
+
+2015-01-27  Paul Eggert  <address@hidden>
+
+       Port autogen.sh hook creation to private templates
+       * autogen.sh: Do not assume that the hook samples exist.
+       This ports to developers who override templatedir in their Git
+       configuration.  The downside is that patch applications won't be
+       checked, but that's better than autogen.sh failing.
+       Problem reported by Sam Steingold in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00898.html
+
+2015-01-26  Paul Eggert  <address@hidden>
+
+       * INSTALL.REPO: Mention minimum Git version.
+
+2015-01-25  Paul Eggert  <address@hidden>
+
+       Use gnustep-config if available
+       * configure.ac (--with-gnustep): Document this.
+       (NS_GNUSTEP_CONFIG): New variable, set if gnustep-config works.
+       If gnustep-config works, use 'gnustep-config --objc-flags' and
+       'gnustep-config --gui-libs' to compute GNUstep configuration
+       variables, instead of attempting to infer them individually.
+       Fixes: bug#19507
+
+2015-01-21  Ulrich Müller  <address@hidden>
+
+       * configure.ac (gamegroup): New AC_SUBST.
+       (--with-gameuser): Allow to specify a group instead of a user.
+       In the default case, check at configure time if a 'games' user
+       exists.
 
-       * .gitignore: Ignore generated file lib/stdalign.h.
+2015-01-16  Paul Eggert  <address@hidden>
 
-2014-11-16  Paul Eggert  <address@hidden>
+       Give up on -Wsuggest-attribute=const
+       The attribute doesn't help performance significantly, and the
+       warning seems to be more trouble than it's worth.  See the thread at:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00361.html
+       * configure.ac (WERROR_CFLAGS): Don't use -Wsuggest-attribute=const.
 
-       Backport fix for minor Bazaar leftovers.
-       * .dir-locals.el: Remove reference to bzr commit --fixes debbugs.
+2015-01-11  Paul Eggert  <address@hidden>
+
+       Default to 'configure --enable-silent-rules'
+       This greatly shortens the 'make' output, making it more readable
+       and useful.  For example, on my platform it shortens a
+       4125-character line "gcc -std=gnu99 -c -Demacs -I. -I. -I../lib
+       ... emacs.c" -- a line so long that it's hard to see what's going
+       on or where the diagnostics are -- to just "CC emacs.o".
+       * INSTALL: Document this.
+       * configure.ac: Add AM_SILENT_RULES([yes]).
+       (AM_DEFAULT_VERBOSITY): Remove now-unnecessary initialization.
+       Fixes: bug#19501
+
+2015-01-06  Paul Eggert  <address@hidden>
+
+       Merge from gnulib
+       * lib/stdio.in.h, m4/stdio_h.m4: Update from gnulib, incorporating:
+       2015-01-05 stdio: fix use of PRIdMAX on modern mingw
+
+2015-01-04  Paul Eggert  <address@hidden>
+
+       * INSTALL: Mention 'make WERROR_CFLAGS='.
+
+       Clarify 'make info'
+       * Makefile.in (info): Use GNU make conditional rather than
+       an '@' rule with a shell conditional, so that the builder can
+       see the submake.
+
+       Less 'make' chatter for VCSWITNESS
+       * Makefile.in (dirstate, VCSWITNESS): New macros.
+       (src): Use them to lessen 'make' chatter.
+
+2015-01-01  Paul Eggert  <address@hidden>
+
+       Merge from gnulib, incorporating:
+       2015-01-01 version-etc: new year
+
+       * .gitattributes: New file.
+
+       * autogen.sh: Port better to non-GNU 'cp'.  Reported by Han Boetes.
+
+2014-12-31  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter at top level
+       * Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
+       (am__v_GEN_0, am__v_GEN_1, AM_V_at, am__v_at_, am__v_at_0)
+       (am__v_at_1): New macros, copied from src/Makefile.in.
+       ($(srcdir)/src/config.in, ${srcdir}/info/dir):
+       Be less chatty when not verbose.
+       ($(srcdir)/src/stamp-h.in): Simplify with '$@'.
+
+2014-12-28  Paul Eggert  <address@hidden>
+
+       * build-aux/git-hooks/commit-msg: Allow tabs.
+       Treat them as if they were expanded to spaces, with tab stops
+       every 8 columns.
+
+2014-12-27  Paul Eggert  <address@hidden>
+
+       * .gitignore: Ignore /conftest*.
+
+2014-12-27  Stefan Monnier  <address@hidden>
+
+       * build-aux/git-hooks/commit-msg (at_sign): Bump up line-length limit
+       to 78.
+
+2014-12-25  Paul Eggert  <address@hidden>
+
+       Prefer stpcpy to strcat.
+       * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
+       * lib/stpcpy.c, m4/stpcpy.m4: New files, from gnulib.
+
+2014-12-24  Stephen Leake  <address@hidden>
+
+       * CONTRIBUTE: Move user-level information to doc/emacs/trouble.texi.
+       Add Savannah url, cleanup announcing freeze.
+       (commit messages): New, gathered from comments on emacs-devel.
+       (Changelog notes): Add reference to GNU coding standards section 5.2;
+       doc 'present tense', bug fix format.
+       (branches): Freeze announcements are made on info-gnu-emacs mailing
+       list.
+       (git vs rename): New.
+
+2014-12-23  Paul Eggert  <address@hidden>
+
+       Merge from gnulib.
+       2014-12-20 utimens: remove unnecessary assert
+       2014-12-16 stdalign: port better to HP compilers
+       2014-12-16 stdalign: work around Apple GCC 4.0 bug
+       * lib/stdalign.in.h, lib/utimens.c, m4/stdalign.m4: Update from gnulib.
+
+2014-12-14  Glenn Morris  <address@hidden>
+
+       * make-dist: No more lib-src/grep-changelog.
+
+       * INSTALL.REPO: Revert 2014-12-06 change.
+
+2014-12-13  Paul Eggert  <address@hidden>
+
+       * lib/gnulib.mk: Regenerate.
+
+2014-12-13  Paul Eggert  <address@hidden>
+
+       * .gitignore: Add lib/std*.h, to ignore stdarg.h, stdbool.h, and
+       stddef.h.  Remove subsumed entries.
+       Add !lib/std*.in.h, so as to not ignore the .in.h files.
+
+2014-12-13  Paul Eggert  <address@hidden>
+
+       Port commit-msg to mawk.  Reported by Ted Zlatanov in:
+       http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg01093.html
+       * build-aux/git-hooks/commit-msg (space, non_space, non_print):
+       New vars.  Use them as approximations to POSIX bracket expressions,
+       on implementations like mawk that do not support POSIX regexps.
+
+       Improve commit-msg messages and autosquash.
+       Reported by Michal Nazarewicz in Bug#19337.
+       * build-aux/git-hooks/commit-msg: Add "commit message" to
+       diagnostics.  Distinguish better between tabs and other
+       unprintable chars in diagnostics.  Don't complain if a prefix
+       "fixup! " or "squash! " makes a summary line too long.
+
+2014-12-13  Paul Eggert  <address@hidden>
+
+       Port commit-message checking to FreeBSD 9.
+       Reported by Jan Djärv in:
+       http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00704.html
+       along with some other issues I noticed while testing with FreeBSD.
+       * build-aux/git-hooks/commit-msg: Prefer gawk if available.
+       Prefer en_US.UTF-8 to en_US.utf8, as it's more portable.
+       Work around bug in FreeBSD 9 awk, where /[[:cntrl:]]/ matches
+       ordinary text characters.
+       Be less tricky about quoting "'" in a shell script.
+
+2014-12-13  Stefan Monnier  <address@hidden>
+
+       * .gitignore: Ignore autosave files.
+
+2014-12-12  Paul Eggert  <address@hidden>
+
+       Merge from gnulib.
+       2014-12-12 stddef: support C11's max_align_t
+       2014-12-11 unistd: fix iOS check conditional
+       2014-12-08 apply _GL_ATTRIBUTE_PURE to some inline functions
+       2014-12-02 support GNU format printf and scanf on mingw
+       * lib/stat-time.h, lib/stddef.in.h, lib/timespec.h:
+       * m4/extensions.m4, m4/stddef_h.m4, m4/stdio_h.m4: Update from gnulib.
+       * lib/gnulib.mk: Regenerate.
+
+2014-12-06  Stephen Leake  <address@hidden>
+
+       * CONTRIBUTE: Improve; add explicit web references, move some info
+       from admin/notes/* here.
+
+       * INSTALL.REPO: You can't "just run make" after a clean checkout.
+
+2014-12-05  Stephen Leake  <address@hidden>
+
+       * CONTRIBUTE: Move here from etc/, preparatory to further
+       changes/cleanup.
+
+2014-12-05  Paul Eggert  <address@hidden>
+
+       * .gitignore: Remove redundant pattern (subsumed by _*).
+       Avoid "**", as it requires Git 1.8.2 or later.
+
+2014-12-05  Eli Zaretskii  <address@hidden>
+
+       * .gitignore: Ignore test/biditest.txt.
+
+2014-12-01  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * .gitignore: Ignore loaddefs directly under lisp, and in
+       sub-sub-directories.
+
+2014-11-29  Paul Eggert  <address@hidden>
+
+       Add more of the old .bzrignore to .gitignore.
+       Plus a few more .gitignore improvements.
+       * .gitignore: Add copyright notice, since it's big enough.
+       Put exceptions immediately after the patterns they're exceptions
+       to, to make them easier to follow.
+       Give four exceptions for the Makefile pattern.
+       Ignore /confdefs.h, test/indent/*.new, TAGS, GPATH, GSYMS, GRTAGS,
+       GTAGS, ID, *.exe, some nextstep-related files,
+       jisx2131-filter, *.orig, *.rej, etc/emacs.tmpdesktop, *.in-h
+       _* (except for build-aux/snippet/_Noreturn.h), /bin/, /BIN/,
+       /data/, etc/icons/, lib/cxxdefs.h, lib/SYS/, /libexec/, /lock/,
+       /README.W32, /share/, /site-lisp/, src/gdb.ini, /var/.
+       Ignore /configure.lineno, since POSIX requires
+       LINENO only with the User Portability Utilities option.
+       Ignore *cust-load.el and *loaddefs.el only under lisp.
+       Ignore core files of various flavors.
+       Do not ignore etc/refcards/gnus-logo.pdf.
+
+2014-11-29  Eli Zaretskii  <address@hidden>
+
+       * .gitignore: Add back src/_gdbinit, which is a temporary file
+       created by the MS-DOS build.
+
+2014-11-29  Paul Eggert  <address@hidden>
+
+       Add a.out to .gitignore.
+       Suggested by Lee Duhem in:
+       http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg01665.html
+       * .gitignore: Add a.out.
+       Move *.log next to *.tmp, since it's generic.
+       Put *.exe before non-generics.
+
+2014-11-29  Eli Zaretskii  <address@hidden>
+
+       * .gitignore: Resurrect Windows-specific ignorables lost in last
+       changes.
+
+2014-11-29  Paul Eggert  <address@hidden>
+
+       * .gitignore: Add /emacs-[1-9]*/, and sort better.
+
+2014-11-29  Ivan Andrus  <address@hidden>
+
+       * .gitignore: Add some nextstep/mac ignorables.
+
+2014-11-29  Paul Eggert  <address@hidden>
+
+       .gitignore cleanup.
+       * .gitignore: Merge contents of subsidiary files and organize the
+       result so as to avoid duplication.  Remove no-longer needed entries.
+       * admin/charsets/.gitignore, admin/unidata/.gitignore:
+       * doc/lispintro/.gitignore, etc/.gitignore, leim/.gitignore:
+       * leim/ja-dic/.gitignore, lib-src/.gitignore, lisp/.gitignore:
+       * lisp/calc/.gitignore, lisp/calendar/.gitignore:
+       * lisp/cedet/.gitignore, lisp/emulation/.gitignore:
+       * lisp/erc/.gitignore, lisp/eshell/.gitignore, lisp/gnus/.gitignore:
+       * lisp/international/.gitignore, lisp/language/.gitignore:
+       * lisp/leim/.gitignore, lisp/leim/quail/.gitignore:
+       * lisp/mail/.gitignore, lisp/mh-e/.gitignore, lisp/net/.gitignore:
+       * lisp/nxml/.gitignore, lisp/obsolete/.gitignore:
+       * lisp/play/.gitignore, lisp/progmodes/.gitignore:
+       * lisp/term/.gitignore, lisp/textmodes/.gitignore:
+       * lisp/url/.gitignore, nt/.gitignore, src/.gitignore:
+       Remove; no longer needed.
+
+2014-11-29  Glenn Morris  <address@hidden>
+
+       * configure.ac: Simplify gnutls tests.
+
+2014-11-28  Stefan Monnier  <address@hidden>
+
+       * .gitignore: Add entries for emacsvers files.
+
+2014-11-27  Paul Eggert  <address@hidden>
+
+       Restore 'Bug#' -> 'debbugs:' rewrite in log-edit-mode.
+       * .dir-locals.el (log-edit-mode): Restore the (log-edit-rewrite-fixes
+       "[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1").  See Glenn Morris in:
+       http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg01187.html
+
+       Simplify and fix doc-related .gitignore files.
+       This fixes some unwanted 'git status' output after 'make docs'.
+       * .gitignore: Add **/Makefile, **/makefile.
+       Remove Makefile, makefile.
+       Add doc/*/*.xxx rules for the usual kinds of documentation outputs
+       and temporaries.  Add doc/misc/cc-mode.ss.
+       * doc/emacs/.gitignore, doc/lispintro/.gitignore, doc/misc/.gitignore:
+       * lwlib/.gitignore, oldXMenu/.gitignore:
+       Remove, as these .gitignore files are no longer needed.
+       * doc/lispintro/.gitignore: Replace with list of exceptional PDF files.
+
+2014-11-26  Dani Moncayo  <address@hidden>
+
+       * configure.ac [MINGW]: Fix the way of getting the right host
+       platform.
+
+2014-11-25  Glenn Morris  <address@hidden>
+
+       * configure.ac: Fix yesterday's use of uninitialised $version.
+
+2014-11-25  Oscar Fuentes  <address@hidden>
+
+       * configure.ac [MINGW]: Set $canonical default value as per the
+       compiler's target.
+
+2014-11-24  Glenn Morris  <address@hidden>
+
+       * configure.ac [HAVE_W32]: Generate nt/*.rc files when HAVE_W32,
+       not just when using mingw32.
+
+2014-11-22  Glenn Morris  <address@hidden>
+
+       Further reduce number of versioned files storing Emacs version number.
+       * configure.ac (comma_version, comma_space_version) [mingw32]:
+       New output variables.
+       (nt/emacs.rc, nt/emacsclient.rc) [mingw32]: New output files.
+       * make-dist: Update nt/ for *.rc -> *.rc.in changes.
+
+2014-11-19  Dani Moncayo  <address@hidden>
+
+       * build-aux/msys-to-w32: Simplify implementation and docstring;
+       Paths starting with '%emacs_dir%' are just considered relative.
+
+2014-11-16  Christoph Scholtes  <address@hidden>
+
+       * .gitignore: Ignore generated file lib/stdalign.h.
 
 2014-11-16  Eli Zaretskii  <address@hidden>
 
@@ -28,7 +383,7 @@
        build: port to GCC 4.6.4 + glibc 2.5
        On platforms this old, building with _FORTIFY_SOURCE equal to 2
        results in duplicate definitions of standard library functions.
-       Problem reported by Nelson H. F. Beebe.
+       Reported by Nelson H. F. Beebe.
        * configure.ac (_FORTIFY_SOURCE): Sort after GNULIB_PORTCHECK.
        By default, do not enable this unless GNULIB_PORTCHECK is defined.
        This better matches the original intent, which as I recall was to
@@ -38,6 +393,10 @@
 
        * Makefile.in (install-arch-indep): Compress publicsuffix.txt file.
 
+2014-11-13  Paul Eggert  <address@hidden>
+
+       * .dir-locals.el: Remove reference to bzr commit --fixes debbugs.
+
 2014-11-13  Lars Magne Ingebrigtsen  <address@hidden>
 
        * .gitignore: Copy over sufficient ignorable files from the old
@@ -45,7 +404,8 @@
 
 2014-11-11  Eric S. Raymond  <address@hidden>
 
-       * Makefile.in: git transition - set VCWITNESS appropriately for git.
+       Git transition.
+       * Makefile.in (src): Set VCSWITNESS appropriately for git.
 
        All bzr revision IDS, and all CVS revision IDs for which a commit
        could be identified, were changed to time-date!committer version
@@ -54,7 +414,7 @@
        corresponding commit comments.
 
        (The first .cvsignore commit was 1999-09-30T14:07:address@hidden
-       The last CVS commit was 2009-12-27T08:11:address@hidden)
+       The last CVS commit was 2009-12-27T08:11:address@hidden)
 
        Committer/author email addresses are generally correct for the
        transition day, not necessarily when the commit was originally made.
@@ -1039,7 +1399,7 @@
        Fix problem with MAKE and xcrun configuration.
        * configure.ac: Don't set MAKE unless 'make' doesn't work.
        Set it only in the environment, not in the makefile.
-       Problem reported by Glenn Morris in:
+       Reported by Glenn Morris in:
        http://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00969.html
 
 2013-12-27  Paul Eggert  <address@hidden>
@@ -2733,7 +3093,7 @@
        (bootstrap): Run ./configure, rather than trying to run config.status
        if it exists.  That builds src/epaths.h more reliably.
        Run autogen/copy_autogen if autogen.sh fails,
-       to create 'configure'; problem reported by Andreas Schwab in
+       to create 'configure'.  Reported by Andreas Schwab in
        <http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00438.html>.
        * autogen.sh: Exit with status 1 when failing due to missing tools,
        reverting the 2012-09-10 change to this file.
@@ -4065,8 +4425,7 @@
 
        Check pkg-config exit status when configuring (Bug#10626).
        * configure.in (PKG_CHECK_MODULES): Do not assume that pkg-config
-       works; check its exit status.  Problem reported by Jordi Gutiérrez
-       Hermoso in
+       works; check its exit status.  Reported by Jordi Gutiérrez Hermoso in
        <http://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00787.html>.
 
 2012-04-07  Glenn Morris  <address@hidden>
@@ -4224,7 +4583,7 @@
        * configure.in (LIB_PTHREAD): Prepend -lpthread to LIBS (Bug#9852)
        if the library is found.  Otherwise, later configure-time tests,
        such as the test for pthread_sigmask, generate the wrong results
-       on some platforms.  Problem reported for FreeBSD by Nali Toja.
+       on some platforms.  Reported by Nali Toja for FreeBSD.
 
 2011-10-20  Paul Eggert  <address@hidden>
 
@@ -4455,7 +4814,7 @@
        * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Omit gl_THREADLIB
        test, which runs afoul of Automake installations where, for example,
        /usr/share/aclocal contains a copy of gl_THREADLIB.
-       Problem reported by Sven Joachim in
+       Reported by Sven Joachim in
        <http://lists.gnu.org/archive/html/emacs-devel/2011-07/msg00529.html>.
        This is just a quick temporary fix, specific to Emacs; I'll work
        with the other gnulib maintainers to get a more-permanent fix.
@@ -5067,7 +5426,7 @@
 
        * arg-nonnull.h, c++defs.h, warn-on-use.h: Fix licenses.
        Sync from gnulib, which has been patched to fix the problem
-       with the license notices.  Problem reported by Glenn Morris in
+       with the license notices.  Reported by Glenn Morris in
        <http://lists.gnu.org/archive/html/emacs-devel/2011-02/msg00403.html>.
 
 2011-02-09  Stefan Monnier  <address@hidden>
@@ -5221,7 +5580,7 @@
        used.  The code already assumed two's complement, so there's
        no need to test for alternatives.  All uses removed.
        (TYPE_MAXIMUM): Don't rely here on overflow behavior not defined by
-       the C standard.  Problem reported by Rich Felker in
+       the C standard.  Reported by Rich Felker in
        <http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00488.html>.
        (twos_complement_arithmetic): Also check long_int and time_t.
        (time_t_avg, time_t_add_ok, time_t_int_add_ok): New functions.
@@ -8538,7 +8897,7 @@
 
        * configure.in (HAVE_XIM): Define if XIM is available.
 
-2003-07-29  Tim Van Holder  <address@hidden>  (tiny change)
+2003-07-29  Tim Van Holder  <address@hidden>
 
        * configure.in: The function gtk_window_set_icon_from_file was
        introduced in GTK+ 2.2, so check for that release.
@@ -8772,7 +9131,7 @@
 
        * configure.in (*-sunos5.8*, *-solaris2.8*): New configurations.
 
-2002-11-11  Tim Van Holder  <address@hidden>  (tiny change)
+2002-11-11  Tim Van Holder  <address@hidden>
 
        * Makefile.in (install-arch-indep): Prepend $(srcdir)/ to lisp.
 
@@ -14212,7 +14571,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/GNUmakefile b/GNUmakefile
index b4b33f4..6de8ca2 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,6 +1,6 @@
 # Build Emacs from a fresh tarball or version-control checkout.
 
-# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Copyright (C) 2011-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/INSTALL b/INSTALL
index 8ecee65..5532020 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,6 @@
 GNU Emacs Installation Guide
-Copyright (C) 1992, 1994, 1996-1997, 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 1992, 1994, 1996-1997, 2000-2015 Free Software Foundation,
+Inc.
 See the end of the file for license conditions.
 
 
@@ -311,12 +312,13 @@ Use --enable-gcc-warnings to enable compile-time checks 
that warn
 about possibly-questionable C code.  This is intended for developers
 and is useful with GNU-compatible compilers.  On a recent GNU system
 there should be no warnings; on older and on non-GNU systems the
-generated warnings may still be useful.
+generated warnings may still be useful, though you may prefer building
+with 'make WERROR_CFLAGS=' so that the warnings are not treated as
+errors.
 
-Use --enable-silent-rules to cause 'make' to chatter less.  This is
-helpful when combined with options like --enable-gcc-warnings that
-generate long shell-command lines.  'make V=0' also suppresses the
-chatter.
+Use --disable-silent-rules to cause 'make' to give more details about
+the commands it executes.  This can be helpful when debugging a build
+that goes awry.  'make V=1' also enables the extra chatter.
 
 Use --enable-link-time-optimization to enable link-time optimizer.  If
 you're using GNU compiler, this feature is supported since version 4.5.0.
@@ -464,8 +466,7 @@ installed locations, with `make install'.  By default, 
Emacs's files
 are installed in the following directories:
 
 `/usr/local/bin' holds the executable programs users normally run -
-               `emacs', `etags', `ctags', `emacsclient', and
-               `grep-changelog'.
+               `emacs', `etags', `ctags', `emacsclient'.
 
 `/usr/local/share/emacs/VERSION/lisp' holds the Emacs Lisp library;
                `VERSION' stands for the number of the Emacs version
diff --git a/INSTALL.REPO b/INSTALL.REPO
index 83b6f2f..3431ee4 100644
--- a/INSTALL.REPO
+++ b/INSTALL.REPO
@@ -12,6 +12,8 @@ autoconf  - at least the version specified near the start of
   configure.ac (in the AC_PREREQ command).
 automake  - at least the version specified near the start of
   configure.ac (in the AM_INIT_AUTOMAKE command).
+git - at least Git 1.7.1.  If your repository was created by an older
+  Git version, you may need to reclone it.
 makeinfo  - not strictly necessary, but highly recommended, so that
   you can build the manuals.
 
@@ -62,7 +64,7 @@ never platform-specific.
 
 
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/Makefile.in b/Makefile.in
index ccb70a4..4cdd293 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Copyright (C) 1992-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -94,6 +94,19 @@ address@hidden@
 ### The nt/ subdirectory gets built only for MinGW
 address@hidden@
 
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 =
+
 # ==================== Where To Install Things ====================
 
 # Location to install Emacs.app under GNUstep / Mac OS X.
@@ -376,15 +389,13 @@ lib lib-src lisp nt: Makefile
 # repository pull. In git there is no single file that guarantees
 # this, but the local log for the current head should be close enough.
 #
-# Note the use of single quotes in the value of vcswitness.
-# This passes an unexpanded $srcdir to src's Makefile, which then
+# Pass an unexpanded $srcdir to src's Makefile, which then
 # expands it using its own value of srcdir (which points to the
 # source directory of src/).
+dirstate = .git/logs/HEAD
+VCSWITNESS = $(if $(wildcard $(srcdir)/$(dirstate)),$$(srcdir)/../$(dirstate))
 src: Makefile
-       dirstate='.git/logs/HEAD';                              \
-       vcswitness='$$(srcdir)/../'$$dirstate;                          \
-       [ -r "$(srcdir)/$$dirstate" ] || vcswitness='';                 \
-       $(MAKE) -C $@ all VCSWITNESS="$$vcswitness"
+       $(MAKE) -C $@ VCSWITNESS='$(VCSWITNESS)' all
 
 blessmail: Makefile src
        $(MAKE) -C lib-src maybe-blessmail
@@ -441,11 +452,11 @@ $(srcdir)/src/config.in: $(srcdir)/src/stamp-h.in
        @ # because stamp-h.in has changed (since building stamp-h.in
        @ # refreshes config.in as well), but if config.in is missing
        @ # then we really need to do something more.
-       [ -r "$@" ] || ( cd ${srcdir} && ${AUTOHEADER} )
+       $(if $(wildcard $@),,cd $(srcdir) && $(AUTOHEADER))
 $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS)
        cd ${srcdir} && ${AUTOHEADER}
-       rm -f $(srcdir)/src/stamp-h.in
-       echo timestamp > $(srcdir)/src/stamp-h.in
+       rm -f $@
+       echo timestamp > $@
 
 # ==================== Installation ====================
 
@@ -964,8 +975,8 @@ info_dir_deps = \
 ## but then we would need to depend on info-real, which would
 ## slow down parallelization.
 ${srcdir}/info/dir: ${info_dir_deps}
-       ${MKDIR_P} ${srcdir}/info
-       tempfile=info-dir.$$$$; \
+       $(AM_V_at)${MKDIR_P} ${srcdir}/info
+       $(AM_V_GEN)tempfile=info-dir.$$$$; \
        rm -f $${tempfile}; \
        (cd ${srcdir}/doc && \
         AWK='${AWK}' ../build-aux/make-info-dir ${info_dir_inputs} \
@@ -1032,11 +1043,9 @@ uninstall-ps: $(UNINSTALL_PS)
 # and it's not worth it.  This case is only relevant if you download a
 # release, then change the .texi files.
 info:
-       @if test "$(HAVE_MAKEINFO)" = "no"; then \
-         echo "Configured --without-makeinfo, not building manuals" ; \
-       else \
-         $(MAKE) info-real info-dir; \
-       fi
+  ifneq ($(HAVE_MAKEINFO),no)
+       $(MAKE) info-real info-dir
+  endif
 
 ## build-aux/make-info-dir expects only certain dircategories.
 check-info: info
diff --git a/README b/README
index ad412c4..0e32b6c 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/CPP-DEFINES b/admin/CPP-DEFINES
index a98d1b9..18423c2 100644
--- a/admin/CPP-DEFINES
+++ b/admin/CPP-DEFINES
@@ -19,8 +19,9 @@ __MSDOS__     Ditto.
 __DJGPP_MINOR__ Minor version number of the DJGPP library; used only in 
msdos.c and dosfns.c.
 DOS_NT         Compiling for either the MS-DOS or native MS-Windows port.
 WINDOWSNT      Compiling the native MS-Windows (W32) port.
-__MINGW32__    Compiling the W32 port with the MinGW port of GCC.
+__MINGW32__    Compiling the W32 port with the MinGW or MinGW-w64 ports of GCC.
 _MSC_VER       Compiling the W32 port with the Microsoft C compiler.
+MINGW_W64      Compiling the W32 port with the MinGW-w64 port of GCC.
 DARWIN_OS      Compiling on Mac OS X or pure Darwin (and using s/darwin.h).
 SOLARIS2
 USG
diff --git a/admin/ChangeLog b/admin/ChangeLog
index 96a98e5..ec50056 100644
--- a/admin/ChangeLog
+++ b/admin/ChangeLog
@@ -1,8 +1,125 @@
-2014-11-16  Glenn Morris  <address@hidden>
+2015-01-28  Glenn Morris  <address@hidden>
 
-       * update_autogen: Auto-detect VCS in use.
-       (vcs): New variable.
-       (status, commit, main): Handle git.
+       * update_autogen (commit): Prepend "# " to commit message.
+
+2015-01-24  Paul Eggert  <address@hidden>
+
+       Fix a couple of AM_V_GEN bugs
+       * unidata/Makefile.in (unifiles): Use AM_V_at instead of AM_V_GEN,
+       since this doesn't generate a file.
+
+2015-01-15  Eli Zaretskii  <address@hidden>
+
+       * unidata/uvs.el (uvs-print-table-ivd): Call set-binary-mode on
+       stdout.
+
+2015-01-12  Paul Eggert  <address@hidden>
+
+       Say "ELC foo.elc" instead of "GEN foo.elc"
+       * unidata/Makefile.in (AM_V_ELC, am__v_ELC_, am__v_ELC_0)
+       (am__v_ELC_1): New macros.
+       (%.elc): Use them.
+
+2015-01-08  Glenn Morris  <address@hidden>
+
+       * authors.el (authors-aliases): Add an entry to ignore.
+
+2015-01-04  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for admin/grammars
+       * grammars/Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN)
+       (am__v_GEN_, am__v_GEN_0, am__v_GEN_1, AM_V_at, am__v_at_)
+       (am__v_at_0, am__v_at_1): New macros, from src/Makefile.in.
+       (${bovinedir}/%-by.el, ${bovinedir}/scm-by.el)
+       (${cedetdir}/semantic/%-wy.el, ${wisentdir}/%-wy.el)
+       (${wisentdir}/javat-wy.el, ${cedetdir}/srecode/srt-wy.el): Use them.
+
+       Less chatter in batch mode
+       * unidata/unidata-gen.el (unidata-gen-files):
+       Don't output messages like "Generating ..." in batch mode.
+
+2015-01-02  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for unidata
+       * unidata/Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
+       (am__v_GEN_0, am__v_GEN_1, AM_V_at, am__v_at_, am__v_at_0, am__v_at_1):
+       New macros, from ../src/Makefile.in.
+       (${top_srcdir}/src/macuvs.h, %.elc, unidata.txt)
+       (${unidir}/charprop.el, unifiles): Use them.
+       (PHONY_EXTRAS): New macro.
+       (.PHONY, ${unidir}/charprop.el): Use it.
+       (FORCE): Remove; all uses replaced by PHONY_EXTRAS manipulation.
+       (${unidir}/charprop.el, extraclean):
+       Use 'make' conditionals rather than shell.
+
+2015-01-01  Paul Eggert  <address@hidden>
+
+       * update-copyright (emacsver): Change to emacsver.tex.in.
+
+2014-12-25  Paul Eggert  <address@hidden>
+
+       * merge-gnulib (GNULIB_MODULES): Add stpcpy.
+
+2014-12-24  Glenn Morris  <address@hidden>
+
+       * authors.el (authors-obsolete-files-regexps)
+       (authors-ignored-files, authors-valid-file-names)
+       (authors-renamed-files-alist, authors-renamed-files-regexps):
+       Additions.
+
+2014-12-14  Paul Eggert  <address@hidden>
+
+       * notes/unicode: Track leim/quail file renames.
+       Correct coding system of lisp/international/titdic-cnv.el.
+
+2014-12-14  Glenn Morris  <address@hidden>
+
+       * quick-install-emacs (PUBLIC_LIBSRC_SCRIPTS): Remove, and all uses.
+       * authors.el (authors-valid-file-names): Add grep-changelog.
+
+2014-12-13  Paul Eggert  <address@hidden>
+
+       * notes/unicode: Don't mention Czech and Slovakian refcards.
+
+       * merge-gnulib (GNULIB_MODULES): Add stddef, for max_align_t.
+
+2014-12-06  Stephen Leake  <address@hidden>
+
+       * notes/commits: Delete; merge into ./CONTRIBUTE.
+
+       * notes/repo: Move commit, branch info into ./CONTRIBUTE.
+
+2014-12-01  Glenn Morris  <address@hidden>
+
+       * update_autogen: Fix bogosity introduced in 2014-11-16 merge.
+
+2014-11-29  Paul Eggert  <address@hidden>
+
+       Lessen focus on ChangeLog files, as opposed to change log entries.
+       This is in preparation for generating the former automatically
+       from the latter.
+       * notes/bugtracker, notes/copyright, notes/newfile:
+       ChangeLog -> change log
+       * notes/changelogs: Remove, merging old contents to ...
+       * notes/repo: ... here.
+
+2014-11-27  David Engster  <address@hidden>
+
+       * gitmerge.el: New file.
+       * notes/git-workflow: Add documentation for using it.
+
+2014-11-27  Oscar Fuentes  <address@hidden>
+
+       * CPP-DEFINES: Mention MINGW_W64.
+
+2014-11-22  Glenn Morris  <address@hidden>
+
+       * admin.el (set-version): No more need to update nt/*.rc.
+       * authors.el (authors-renamed-files-alist): Add .rc.in files.
+
+2014-11-16  Stefan Monnier  <address@hidden>
+
+       * update_autogen: Merge from emacs-24 (restoring bzr conditionals).
 
 2014-11-13  Andreas Schwab  <address@hidden>
 
@@ -10,9 +127,10 @@
 
 2014-11-11  Eric S. Raymond  <address@hidden>
 
-       * make-tarball.txt, update-copyright, admin/notes/bugtracker,
-       admin/notes/tags, admin/update-copyright, admin/update_autogen:
-       admin/repo.notes: git transition.
+       * make-tarball.txt, notes/bugtracker, notes/repo, notes/tags:
+       Git transition.
+       * update-copyright: Use git ls-files.
+       * update_autogen: Remove some bzr conditionals.
 
 2014-11-10  Eli Zaretskii  <address@hidden>
 
@@ -2446,7 +2564,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/admin/MAINTAINERS b/admin/MAINTAINERS
index 9a46b64..57f199b 100644
--- a/admin/MAINTAINERS
+++ b/admin/MAINTAINERS
@@ -31,6 +31,7 @@ Eli Zaretskii
            src/msdos.[ch]
            src/dosfns.[ch]
            src/w16select.c
+           src/unexcoff.c
            lisp/term/internal.el
            lisp/term/pc-win.el
            lisp/dos-fns.el
@@ -80,14 +81,18 @@ Bastien Guerry
 Eli Zaretskii
        doc/*
        lispref/*
-       info/dir
 
        src/xfaces.c
        src/xdisp.c
        src/term.c
        src/dispnew.c
+       src/dispextern.h
        src/frame.c
        src/dired.c
+       src/unexw32.c
+       src/w32*.[ch]
+       src/window.c
+       nt/*
 
        lisp/arc-mode.el
        lisp/menu-bar.el
@@ -97,6 +102,8 @@ Eli Zaretskii
        lisp/startup.el
        lisp/w32*.el
 
+       admin/unidata/*
+
 Stefan Monnier
        src/intervals.c
        src/keyboard.c
@@ -181,24 +188,10 @@ src/tparam.c
 src/undo.c
 src/unexaix.c
 src/unexalpha.c
-src/unexcoff.c
 src/unexelf.c
 src/unexhp9k800.c
-src/unexw32.c
 src/vm-limit.c
-src/w32.c
-src/w32console.c
-src/w32fns.c
-src/w32heap.c
-src/w32inevt.c
-src/w32menu.c
-src/w32proc.c
-src/w32reg.c
-src/w32select.c
-src/w32term.c
-src/w32xfns.c
 src/widget.c
-src/window.c
 src/xfns.c
 src/xmenu.c
 src/xrdb.c
diff --git a/admin/README b/admin/README
index 6a5fce6..786c502 100644
--- a/admin/README
+++ b/admin/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/admin.el b/admin/admin.el
index b22160e..18ea4a4 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -1,6 +1,6 @@
 ;;; admin.el --- utilities for Emacs administration
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -99,6 +99,8 @@ Root must be the root of an Emacs source tree."
                       (rx (and bol "#" (0+ blank) "define" (1+ blank)
                                "VERSION" (1+ blank) "\""
                                (submatch (1+ (in "0-9."))))))
+  ;; TODO: msdos could easily extract the version number from
+  ;; configure.ac with sed, rather than duplicating the information.
   (set-version-in-file root "msdos/sed2v2.inp" version
                       (rx (and bol "/^#undef " (1+ not-newline)
                                "define VERSION" (1+ space) "\""
@@ -107,58 +109,15 @@ Root must be the root of an Emacs source tree."
   (set-version-in-file root "nt/makefile.w32-in" version
                       (rx (and "VERSION" (0+ space) "=" (0+ space)
                                (submatch (1+ (in "0-9."))))))
-  ;; nt/emacs.rc also contains the version number, but in an awkward
-  ;; format. It must contain four components, separated by commas, and
-  ;; in two places those commas are followed by space, in two other
-  ;; places they are not.
-  (let* ((version-components (append (split-string version "\\.")
-                                    '("0" "0")))
-        (comma-version
-         (concat (car version-components) ","
-                 (cadr version-components) ","
-                 (cadr (cdr version-components)) ","
-                 (cadr (cdr (cdr version-components)))))
-        (comma-space-version
-         (concat (car version-components) ", "
-                 (cadr version-components) ", "
-                 (cadr (cdr version-components)) ", "
-                 (cadr (cdr (cdr version-components))))))
-    (set-version-in-file root "nt/emacs.rc" comma-version
-                        (rx (and "FILEVERSION" (1+ space)
-                                 (submatch (1+ (in "0-9,"))))))
-    (set-version-in-file root "nt/emacs.rc" comma-version
-                        (rx (and "PRODUCTVERSION" (1+ space)
-                                 (submatch (1+ (in "0-9,"))))))
-    (set-version-in-file root "nt/emacs.rc" comma-space-version
-                        (rx (and "\"FileVersion\"" (0+ space) ?, (0+ space)
-                                 ?\" (submatch (1+ (in "0-9, "))) "\\0\"")))
-    (set-version-in-file root "nt/emacs.rc" comma-space-version
-                        (rx (and "\"ProductVersion\"" (0+ space) ?,
-                                 (0+ space) ?\" (submatch (1+ (in "0-9, ")))
-                                 "\\0\"")))
-    ;; Likewise for emacsclient.rc
-    (set-version-in-file root "nt/emacsclient.rc" comma-version
-                        (rx (and "FILEVERSION" (1+ space)
-                                 (submatch (1+ (in "0-9,"))))))
-    (set-version-in-file root "nt/emacsclient.rc" comma-version
-                        (rx (and "PRODUCTVERSION" (1+ space)
-                                 (submatch (1+ (in "0-9,"))))))
-    (set-version-in-file root "nt/emacsclient.rc" comma-space-version
-                        (rx (and "\"FileVersion\"" (0+ space) ?, (0+ space)
-                                 ?\" (submatch (1+ (in "0-9, "))) "\\0\"")))
-    (set-version-in-file root "nt/emacsclient.rc" comma-space-version
-                        (rx (and "\"ProductVersion\"" (0+ space) ?,
-                                 (0+ space) ?\" (submatch (1+ (in "0-9, ")))
-                                 "\\0\"")))
-    ;; Major version only.
-    (when (string-match "\\([0-9]\\{2,\\}\\)" version)
-      (setq version (match-string 1 version))
-      (set-version-in-file root "src/msdos.c" version
-                          (rx (and "Vwindow_system_version" (1+ not-newline)
-                                   ?\( (submatch (1+ (in "0-9"))) ?\))))
-      (set-version-in-file root "etc/refcards/ru-refcard.tex" version
-                          "\\\\newcommand{\\\\versionemacs}\\[0\\]\
-{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs")))
+  ;; Major version only.
+  (when (string-match "\\([0-9]\\{2,\\}\\)" version)
+    (setq version (match-string 1 version))
+    (set-version-in-file root "src/msdos.c" version
+                        (rx (and "Vwindow_system_version" (1+ not-newline)
+                                 ?\( (submatch (1+ (in "0-9"))) ?\))))
+    (set-version-in-file root "etc/refcards/ru-refcard.tex" version
+                        "\\\\newcommand{\\\\versionemacs}\\[0\\]\
+{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs"))
   (message "Setting version numbers...done"))
 
 ;; Note this makes some assumptions about form of short copyright.
diff --git a/admin/alloc-colors.c b/admin/alloc-colors.c
index a63e1ba..777c048 100644
--- a/admin/alloc-colors.c
+++ b/admin/alloc-colors.c
@@ -1,6 +1,6 @@
 /* Allocate X colors.  Used for testing with dense colormaps.
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/admin/authors.el b/admin/authors.el
index aefd947..afab6f0 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -1,6 +1,6 @@
 ;;; authors.el --- utility for maintaining Emacs's AUTHORS file -*-coding: 
utf-8 -*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <address@hidden>
 ;; Maintainer: Kim F. Storm <address@hidden>
@@ -40,6 +40,7 @@ files.")
 
 (defconst authors-aliases
   '(
+    (nil "A\\. N\\. Other")  ; unknown author 2014-12-03, later removed
     ("Aaron S. Hawley" "Aaron Hawley")
     ("Alexandru Harsanyi" "Alex Harsanyi")
     ("Andrew Csillag" "Drew Csillag")
@@ -240,7 +241,7 @@ If REALNAME is nil, ignore that author.")
 
 (defvar authors-obsolete-files-regexps
   '(".*loaddefs.el$"                   ; not obsolete, but auto-generated
-    "\\.\\(cvs\\|git\\)ignore$"                ; obsolete or uninteresting
+    "\\.\\(bzr\\|cvs\\|git\\)ignore$"          ; obsolete or uninteresting
     "\\.arch-inventory$"
     "automated/data/"             ; not interesting
     ;; TODO lib/? Matches other things?
@@ -314,6 +315,7 @@ Changes to files matching one of the regexps in this list 
are not listed.")
     "CODINGS" "CHARSETS"
     "calc/INSTALL" "calc/Makefile" "calc/README.prev"
     "vms-pp.trans" "_emacs" "batcomp.com" "notes/cpp" ; admin/
+    "notes/BRANCH" "notes/exit-value"
     "emacsver.texi.in"
     "vpath.sed"
     "Cocoa/Emacs.base/Contents/Info.plist"
@@ -634,6 +636,7 @@ Changes to files in this list are not listed.")
     "images/page-down.xpm" "images/widen.pbm" "images/widen.xpm"
     "images/gnus/bar.xbm" "images/gnus/bar.xpm"
     "images/gnus/reverse-smile.xpm"
+    "notes/commits" "notes/changelogs"
     "revdiff"                          ; admin/
     "vcdiff" "rcs-checkin" "tindex.pl"
     "mainmake" "sed1.inp" "sed2.inp" "sed3.inp" ; msdos/
@@ -661,6 +664,7 @@ Changes to files in this list are not listed.")
     "org-lparse.el"
     "org-special-blocks.el" "org-taskjuggler.el"
     "progmodes/cap-words.el"
+    "w32-common-fns.el"
     ;; gnus
     "nnwfm.el" "nnlistserv.el" "nnkiboze.el" "nndb.el" "nnsoup.el"
     "netrc.el" "password.el" "sasl-cram.el" "sasl-digest.el" "sasl-ntlm.el"
@@ -691,7 +695,7 @@ Changes to files in this list are not listed.")
     "etags-vmslib.c" "fakemail.c" "getdate.c" "getopt.h" "getopt1.c"
     "getopt_.h" "getopt_int.h" "gettext.h" "leditcfns.c" "loadst.c"
     "make-path.c" "qsort.c" "sorted-doc.c" "tcp.c" "timer.c" "wakeup.c"
-    "yow.c"
+    "yow.c" "grep-changelog" "grep-changelog.1"
     ;; etc/
     "emacsclient.c" "etags.c" "hexl.c" "make-docfile.c" "movemail.c"
     "test-distrib.c" "testfile"
@@ -730,6 +734,8 @@ in the repository.")
     ("paths.h-dist" . "epaths.in")
     ("paths.h.in" . "epaths.in")
     ("paths.in" . "epaths.in")
+    ("emacs.rc" . "emacs.rc.in")
+    ("emacsclient.rc" . "emacsclient.rc.in")
     ("patch1" . "sed1.inp")
     ("INSTALL.MSYS" . "INSTALL")
     ("server.c" . "emacsserver.c")
@@ -799,6 +805,7 @@ in the repository.")
     ;; The one in lisp is eshell/eshell.el.
     ("eshell.el" . "automated/eshell.el")
     ("eshell/esh-test.el" . "automated/eshell.el")
+    ("automated/cl-lib.el" . "automated/cl-lib-tests.el")
     ("automated/package-x-test.el" . "automated/package-test.el")
     ;; INSTALL-CVS -> .CVS -> .BZR -> .REPO
     ("INSTALL-CVS" . "INSTALL.REPO")
@@ -865,6 +872,8 @@ in the repository.")
     ("grammars/wisent-grammar.el" . "wisent/grammar.el")
     ;; Moved from admin/nt/ to nt/.
     ("nt/README.W32" . "README.W32")
+    ("notes/BRANCH" . "notes/repo")
+    ("notes/bzr" . "notes/repo")
     )
   "Alist of files which have been renamed during their lifetime.
 Elements are (OLDNAME . NEWNAME).")
@@ -937,6 +946,8 @@ 
ediff\\|emerge\\|log-edit\\|log-view\\|pcvs\\|smerge-mode\\|vc\\)\\.el\\'"
     ("comint-testsuite.el" "automated/\\&")
     ("\\`\\(bytecomp\\|font-parse\\|icalendar\\|occur\\|newsticker\\)\
 -testsuite\\.el" "automated/\\1-tests.el")
+    ("automated/flymake/warnpred/\\(Makefile\\|test\\.\\(?:c\\|pl\\)\\)\\'"
+     "automated/data/flymake/\\1")
     ;; NB lax rules should come last.
     ("^m/m-\\(.*\\.h\\)$" "m/\\1" t)
     ("^m-\\(.*\\.h\\)$" "\\1" t)
diff --git a/admin/build-configs b/admin/build-configs
index 6a36941..55530b3 100755
--- a/admin/build-configs
+++ b/admin/build-configs
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # Build Emacs in several different configurations.
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/bzrmerge.el b/admin/bzrmerge.el
index 924033b..7d4cd19 100644
--- a/admin/bzrmerge.el
+++ b/admin/bzrmerge.el
@@ -1,6 +1,6 @@
 ;;; bzrmerge.el --- help merge one Emacs bzr branch to another
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: maint
diff --git a/admin/charsets/.gitignore b/admin/charsets/.gitignore
deleted file mode 100644
index ea375dc..0000000
--- a/admin/charsets/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.map
-*.el
diff --git a/admin/charsets/mapfiles/README b/admin/charsets/mapfiles/README
index 15ec320..a05e2da 100644
--- a/admin/charsets/mapfiles/README
+++ b/admin/charsets/mapfiles/README
@@ -1,4 +1,4 @@
-Copyright (C) 2009-2014 Free Software Foundation, Inc.
+Copyright (C) 2009-2015 Free Software Foundation, Inc.
 Copyright (C) 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
   Registration Number H13PRO009
diff --git a/admin/cus-test.el b/admin/cus-test.el
index b60eac2..c7faedb 100644
--- a/admin/cus-test.el
+++ b/admin/cus-test.el
@@ -1,6 +1,6 @@
 ;;; cus-test.el --- tests for custom types and load problems
 
-;; Copyright (C) 1998, 2000, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Markus Rost <address@hidden>
 ;; Maintainer: Markus Rost <address@hidden>
diff --git a/admin/diff-tar-files b/admin/diff-tar-files
index 9bdc91f..6a8824f 100755
--- a/admin/diff-tar-files
+++ b/admin/diff-tar-files
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/find-gc.el b/admin/find-gc.el
index 83eb26e..5c6a45b 100644
--- a/admin/find-gc.el
+++ b/admin/find-gc.el
@@ -1,6 +1,6 @@
 ;;; find-gc.el --- detect functions that call the garbage collector
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 
diff --git a/admin/gitmerge.el b/admin/gitmerge.el
new file mode 100644
index 0000000..43773f5
--- /dev/null
+++ b/admin/gitmerge.el
@@ -0,0 +1,525 @@
+;;; gitmerge.el --- help merge one Emacs branch into another
+
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
+
+;; Authors: David Engster <address@hidden>
+;;          Stefan Monnier <address@hidden>
+
+;; Keywords: maint
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Rewrite of bzrmerge.el, but using git.
+;;
+;; In a nutshell: For merging foo into master, do
+;;
+;; - 'git checkout master' in Emacs repository
+;; - Start Emacs, cd to Emacs repository
+;; - M-x gitmerge
+;; - Choose branch 'foo' or 'origin/foo', depending on whether you
+;;   like to merge from a local tracking branch or from the remote
+;;   (does not make a difference if the local tracking branch is
+;;   up-to-date).
+;; - Mark commits you'd like to skip, meaning to only merge their
+;;   metadata (merge strategy 'ours').
+;; - Hit 'm' to start merging. Skipped commits will be merged separately.
+;; - If conflicts cannot be resolved automatically, you'll have to do
+;;   it manually. In that case, resolve the conflicts and restart
+;;   gitmerge, which will automatically resume. It will add resolved
+;;   files, commit the pending merge and continue merging the rest.
+;; - Inspect master branch, and if everything looks OK, push.
+
+;;; Code:
+
+(require 'vc-git)
+(require 'smerge-mode)
+
+(defvar gitmerge-skip-regexp
+  "back[- ]?port\\|merge\\|sync\\|re-?generate\\|bump version\\|from trunk\\|\
+Auto-commit"
+  "Regexp matching logs of revisions that might be skipped.
+`gitmerge-missing' will ask you if it should skip any matches.")
+
+(defvar gitmerge-status-file (expand-file-name "gitmerge-status"
+                                              user-emacs-directory)
+  "File where missing commits will be saved between sessions.")
+
+(defvar gitmerge-ignore-branches-regexp
+  "origin/\\(\\(HEAD\\|master\\)$\\|\\(old-branches\\|other-branches\\)/\\)"
+  "Regexp matching branches we want to ignore.")
+
+(defface gitmerge-skip-face
+  '((t (:strike-through t)))
+  "Face for skipped commits.")
+
+(defconst gitmerge-default-branch "origin/emacs-24"
+  "Default for branch that should be merged.")
+
+(defconst gitmerge-buffer "*gitmerge*"
+  "Working buffer for gitmerge.")
+
+(defconst gitmerge-output-buffer "*gitmerge output*"
+  "Buffer for displaying git output.")
+
+(defconst gitmerge-warning-buffer "*gitmerge warnings*"
+  "Buffer where gitmerge will display any warnings.")
+
+(defvar gitmerge-log-regexp
+  "^\\([A-Z ]\\)\\s-*\\([0-9a-f]+\\) \\(.+?\\): \\(.*\\)$")
+
+(defvar gitmerge-mode-map
+  (let ((map (make-keymap)))
+    (define-key map [(l)] 'gitmerge-show-log)
+    (define-key map [(d)] 'gitmerge-show-diff)
+    (define-key map [(f)] 'gitmerge-show-files)
+    (define-key map [(s)] 'gitmerge-toggle-skip)
+    (define-key map [(m)] 'gitmerge-start-merge)
+    map)
+  "Keymap for gitmerge major mode.")
+
+
+(defvar gitmerge-mode-font-lock-keywords
+  `((,gitmerge-log-regexp
+     (1 font-lock-warning-face)
+     (2 font-lock-constant-face)
+     (3 font-lock-builtin-face)
+     (4 font-lock-comment-face))))
+
+(defvar gitmerge--commits nil)
+(defvar gitmerge--from nil)
+
+(defun gitmerge-get-sha1 ()
+  "Get SHA1 from commit at point."
+  (save-excursion
+    (goto-char (point-at-bol))
+    (when (looking-at "^[A-Z ]\\s-*\\([a-f0-9]+\\)")
+      (match-string 1))))
+
+(defun gitmerge-show-log ()
+  "Show log of commit at point."
+  (interactive)
+  (save-selected-window
+    (let ((commit (gitmerge-get-sha1)))
+      (when commit
+       (pop-to-buffer (get-buffer-create gitmerge-output-buffer))
+       (fundamental-mode)
+       (erase-buffer)
+       (call-process "git" nil t nil "log" "-1" commit)
+       (goto-char (point-min))
+       (gitmerge-highlight-skip-regexp)))))
+
+(defun gitmerge-show-diff ()
+  "Show diff of commit at point."
+  (interactive)
+  (save-selected-window
+    (let ((commit (gitmerge-get-sha1)))
+      (when commit
+       (pop-to-buffer (get-buffer-create gitmerge-output-buffer))
+       (erase-buffer)
+       (call-process "git" nil t nil "diff-tree" "-p" commit)
+       (goto-char (point-min))
+       (diff-mode)))))
+
+(defun gitmerge-show-files ()
+  "Show changed files of commit at point."
+  (interactive)
+  (save-selected-window
+    (let ((commit (gitmerge-get-sha1)))
+      (when commit
+       (pop-to-buffer (get-buffer-create gitmerge-output-buffer))
+       (erase-buffer)
+       (fundamental-mode)
+       (call-process "git" nil t nil "diff" "--name-only" (concat commit "^!"))
+       (goto-char (point-min))))))
+
+(defun gitmerge-toggle-skip ()
+  "Toggle skipping of commit at point."
+  (interactive)
+  (let ((commit (gitmerge-get-sha1))
+       skip)
+    (when commit
+      (save-excursion
+       (goto-char (point-at-bol))
+       (when (looking-at "^\\([A-Z ]\\)\\s-*\\([a-f0-9]+\\)")
+         (setq skip (string= (match-string 1) " "))
+         (goto-char (match-beginning 2))
+         (gitmerge-handle-skip-overlay skip)
+         (dolist (ct gitmerge--commits)
+           (when (string-match commit (car ct))
+             (setcdr ct (when skip "M"))))
+         (goto-char (point-at-bol))
+         (setq buffer-read-only nil)
+         (delete-char 1)
+         (insert (if skip "M" " "))
+         (setq buffer-read-only t))))))
+
+(defun gitmerge-highlight-skip-regexp ()
+  "Highlight strings that match `gitmerge-skip-regexp'."
+  (save-excursion
+    (while (re-search-forward gitmerge-skip-regexp nil t)
+      (put-text-property (match-beginning 0) (match-end 0)
+                        'face 'font-lock-warning-face))))
+
+(defun gitmerge-missing (from)
+  "Return the list of revisions that need to be merged from FROM.
+Will detect a default set of skipped revision by looking at
+cherry mark and search for `gitmerge-skip-regexp'.  The result is
+a list with entries of the form (SHA1 . SKIP), where SKIP denotes
+if and why this commit should be skipped."
+  (let (commits)
+    ;; Go through the log and remember all commits that match
+    ;; `gitmerge-skip-regexp' or are marked by --cherry-mark.
+    (with-temp-buffer
+      (call-process "git" nil t nil "log" "--cherry-mark" from
+                   (concat "^" (car (vc-git-branches))))
+      (goto-char (point-max))
+      (while (re-search-backward "^commit \\(.+\\) \\([0-9a-f]+\\).*" nil t)
+       (let ((cherrymark (match-string 1))
+             (commit (match-string 2)))
+         (push (list commit) commits)
+         (if (string= cherrymark "=")
+             ;; Commit was recognized as backported by cherry-mark.
+             (setcdr (car commits) "C")
+           (save-excursion
+             (let ((case-fold-search t))
+               (while (not (looking-at "^\\s-+[^ ]+"))
+                 (forward-line))
+               (when (re-search-forward gitmerge-skip-regexp nil t)
+                 (setcdr (car commits) "R"))))))
+       (delete-region (point) (point-max))))
+    (nreverse commits)))
+
+(defun gitmerge-setup-log-buffer (commits from)
+  "Create the buffer for choosing commits."
+  (with-current-buffer (get-buffer-create gitmerge-buffer)
+    (erase-buffer)
+    (call-process "git" nil t nil "log"
+                 "--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s"
+                 from (concat "^" (car (vc-git-branches))))
+    (goto-char (point-min))
+    (while (looking-at "^\\([a-f0-9]+\\)")
+      (let ((skipreason (gitmerge-skip-commit-p (match-string 1) commits)))
+       (if (null skipreason)
+           (insert "  ")
+         (insert skipreason " ")
+         (gitmerge-handle-skip-overlay t)))
+      (forward-line))
+    (current-buffer)))
+
+(defun gitmerge-handle-skip-overlay (skip)
+  "Create or delete overlay on SHA1, depending on SKIP."
+  (when (looking-at "[0-9a-f]+")
+    (if skip
+       (let ((ov (make-overlay (point)
+                               (match-end 0))))
+         (overlay-put ov 'face 'gitmerge-skip-face))
+      (remove-overlays (point) (match-end 0)
+                      'face 'gitmerge-skip-face))))
+
+(defun gitmerge-skip-commit-p (commit skips)
+  "Tell whether COMMIT should be skipped.
+COMMIT is an (possibly abbreviated) SHA1.  SKIPS is list of
+cons'es with commits that should be skipped and the reason.
+Return value is string which denotes reason, or nil if commit
+should not be skipped."
+  (let (found skip)
+    (while (and (setq skip (pop skips))
+               (not found))
+      (when (string-match commit (car skip))
+       (setq found (cdr skip))))
+    found))
+
+(defun gitmerge-resolve (file)
+  "Try to resolve conflicts in FILE with smerge.
+Returns non-nil if conflicts remain."
+  (unless (file-exists-p file) (error "Gitmerge-resolve: Can't find %s" file))
+  (with-demoted-errors
+    (let ((exists (find-buffer-visiting file)))
+      (with-current-buffer (let ((enable-local-variables :safe)
+                                 (enable-local-eval nil))
+                             (find-file-noselect file))
+        (if (buffer-modified-p)
+            (user-error "Unsaved changes in %s" (current-buffer)))
+        (save-excursion
+          (cond
+           ((derived-mode-p 'change-log-mode)
+            ;; Fix up dates before resolving the conflicts.
+            (goto-char (point-min))
+            (let ((diff-auto-refine-mode nil))
+              (while (re-search-forward smerge-begin-re nil t)
+                (smerge-match-conflict)
+                (smerge-ensure-match 3)
+                (let ((start1 (match-beginning 1))
+                      (end1 (match-end 1))
+                      (start3 (match-beginning 3))
+                      (end3 (copy-marker (match-end 3) t)))
+                  (goto-char start3)
+                  (while (re-search-forward change-log-start-entry-re end3 t)
+                    (let* ((str (match-string 0))
+                           (newstr (save-match-data
+                                     (concat (add-log-iso8601-time-string)
+                                             (when (string-match " *\\'" str)
+                                               (match-string 0 str))))))
+                      (replace-match newstr t t)))
+                  ;; change-log-resolve-conflict prefers to put match-1's
+                  ;; elements first (for equal dates), whereas we want to put
+                  ;; match-3's first.
+                  (let ((match3 (buffer-substring start3 end3))
+                        (match1 (buffer-substring start1 end1)))
+                    (delete-region start3 end3)
+                    (goto-char start3)
+                    (insert match1)
+                    (delete-region start1 end1)
+                    (goto-char start1)
+                    (insert match3)))))
+            ;; (pop-to-buffer (current-buffer)) (debug 'before-resolve)
+            ))
+          ;; Try to resolve the conflicts.
+          (cond
+           ((member file '("configure" "lisp/ldefs-boot.el"
+                           "lisp/emacs-lisp/cl-loaddefs.el"))
+            ;; We are in the file's buffer, so names are relative.
+            (call-process "git" nil t nil "checkout" "--"
+                          (file-name-nondirectory file))
+            (revert-buffer nil 'noconfirm))
+           (t
+            (goto-char (point-max))
+            (while (re-search-backward smerge-begin-re nil t)
+              (save-excursion
+                (ignore-errors
+                  (smerge-match-conflict)
+                  (smerge-resolve))))
+            ;; (when (derived-mode-p 'change-log-mode)
+            ;;   (pop-to-buffer (current-buffer)) (debug 'after-resolve))
+            (save-buffer)))
+          (goto-char (point-min))
+          (prog1 (re-search-forward smerge-begin-re nil t)
+            (unless exists (kill-buffer))))))))
+
+(defun gitmerge-commit-message (beg end skip branch)
+  "Create commit message for merging BEG to END from BRANCH.
+SKIP denotes whether those commits are actually skipped.  If END
+is nil, only the single commit BEG is merged."
+  (with-temp-buffer
+    (insert "Merge from " branch "\n\n"
+           (if skip
+               (concat "The following commit"
+                       (if end "s were " " was ")
+                       "skipped:\n\n")
+             ""))
+    (apply 'call-process "git" nil t nil "log" "--oneline"
+          (if end (list (concat beg "~.." end))
+            `("-1" ,beg)))
+    (insert "\n")
+    (buffer-string)))
+
+(defun gitmerge-apply (missing from)
+  "Merge commits in MISSING from branch FROM.
+MISSING must be a list of SHA1 strings."
+  (with-current-buffer (get-buffer-create gitmerge-output-buffer)
+    (erase-buffer)
+    (let* ((skip (cdar missing))
+          (beg (car (pop missing)))
+          end commitmessage)
+      ;; Determine last revision with same boolean skip status.
+      (while (and missing
+                 (eq (null (cdar missing))
+                     (null skip)))
+       (setq end (car (pop missing))))
+      (setq commitmessage
+           (gitmerge-commit-message beg end skip from))
+      (message "%s %s%s"
+              (if skip "Skipping" "Merging")
+              (substring beg 0 6)
+              (if end (concat ".." (substring end 0 6)) ""))
+      (unless end
+       (setq end beg))
+      (unless (zerop
+              (apply 'call-process "git" nil t nil "merge" "--no-ff"
+                     (append (when skip '("-s" "ours"))
+                             `("-m" ,commitmessage ,end))))
+       (gitmerge-write-missing missing from)
+       (gitmerge-resolve-unmerged)))
+    missing))
+
+(defun gitmerge-resolve-unmerged ()
+  "Resolve all files that are unmerged.
+Throw an user-error if we cannot resolve automatically."
+  (with-current-buffer (get-buffer-create gitmerge-output-buffer)
+    (erase-buffer)
+    (let (files conflicted)
+      ;; List unmerged files
+      (if (not (zerop
+               (call-process "git" nil t nil
+                             "diff" "--name-only" "--diff-filter=U")))
+         (error "Error listing unmerged files. Resolve manually.")
+       (goto-char (point-min))
+       (while (not (eobp))
+         (push (buffer-substring (point) (line-end-position)) files)
+         (forward-line))
+       (dolist (file files)
+         (if (gitmerge-resolve file)
+             ;; File still has conflicts
+             (setq conflicted t)
+           ;; Mark as resolved
+           (call-process "git" nil t nil "add" file)))
+       (when conflicted
+         (with-current-buffer (get-buffer-create gitmerge-warning-buffer)
+           (erase-buffer)
+           (insert "For the following files, conflicts could\n"
+                   "not be resolved automatically:\n\n")
+           (call-process "git" nil t nil
+                         "diff" "--name-only" "--diff-filter=U")
+           (insert "\nResolve the conflicts manually, then run gitmerge again."
+                   "\nNote:\n  - You don't have to add resolved files or "
+                   "commit the merge yourself (but you can)."
+                   "\n  - You can safely close this Emacs session and do this "
+                   "in a new one."
+                   "\n  - When running gitmerge again, remember that you must "
+                   "that from within the Emacs repo.\n")
+           (pop-to-buffer (current-buffer)))
+         (user-error "Resolve the conflicts manually"))))))
+
+(defun gitmerge-repo-clean ()
+  "Return non-nil if repository is clean."
+  (with-temp-buffer
+      (call-process "git" nil t nil
+                   "diff" "--staged" "--name-only")
+      (call-process "git" nil t nil
+                   "diff" "--name-only")
+      (zerop (buffer-size))))
+
+(defun gitmerge-maybe-resume ()
+  "Check if we have to resume a merge.
+If so, add no longer conflicted files and commit."
+  (let ((mergehead (file-exists-p
+                   (expand-file-name ".git/MERGE_HEAD" default-directory)))
+       (statusexist (file-exists-p gitmerge-status-file)))
+    (when (and mergehead (not statusexist))
+      (user-error "Unfinished merge, but no record of a previous gitmerge 
run"))
+    (when (and (not mergehead)
+              (not (gitmerge-repo-clean)))
+      (user-error "Repository is not clean"))
+    (when statusexist
+      (if (not (y-or-n-p "Resume merge? "))
+         (progn
+           (delete-file gitmerge-status-file)
+           ;; No resume.
+           nil)
+       (message "OK, resuming...")
+       (gitmerge-resolve-unmerged)
+       ;; Commit the merge.
+       (when mergehead
+         (with-current-buffer (get-buffer-create gitmerge-output-buffer)
+           (erase-buffer)
+           (unless (zerop (call-process "git" nil t nil
+                                        "commit" "--no-edit"))
+             (error "Git error during merge - fix it manually"))))
+       ;; Successfully resumed.
+       t))))
+
+(defun gitmerge-get-all-branches ()
+  "Return list of all branches, including remotes."
+  (with-temp-buffer
+    (unless (zerop (call-process "git" nil t nil
+                                "branch" "-a"))
+      (error "Git error listing remote branches"))
+    (goto-char (point-min))
+    (let (branches branch)
+      (while (not (eobp))
+       (when (looking-at "^[^\\*]\\s-*\\(?:remotes/\\)?\\(.+\\)$")
+         (setq branch (match-string 1))
+         (unless (string-match gitmerge-ignore-branches-regexp branch)
+           (push branch branches)))
+       (forward-line))
+      (nreverse branches))))
+
+(defun gitmerge-write-missing (missing from)
+  "Write list of commits MISSING into `gitmerge-status-file'.
+Branch FROM will be prepended to the list."
+  (with-current-buffer
+      (find-file-noselect gitmerge-status-file)
+    (erase-buffer)
+    (insert
+     (prin1-to-string (append (list from) missing))
+     "\n")
+    (save-buffer)
+    (kill-buffer)))
+
+(defun gitmerge-read-missing ()
+  "Read list of missing commits from `gitmerge-status-file'."
+  (with-current-buffer
+      (find-file-noselect gitmerge-status-file)
+    (unless (zerop (buffer-size))
+      (prog1 (read (buffer-string))
+       (kill-buffer)))))
+
+(define-derived-mode gitmerge-mode special-mode "gitmerge"
+  "Major mode for Emacs branch merging."
+  (set-syntax-table text-mode-syntax-table)
+  (setq buffer-read-only t)
+  (setq-local truncate-lines t)
+  (setq-local font-lock-defaults '(gitmerge-mode-font-lock-keywords)))
+
+(defun gitmerge (from)
+  "Merge from branch FROM into `default-directory'."
+  (interactive
+   (if (not (vc-git-root default-directory))
+       (user-error "Not in a git tree")
+     (let ((default-directory (vc-git-root default-directory)))
+       (list
+       (if (gitmerge-maybe-resume)
+           'resume
+         (completing-read "Merge branch: " (gitmerge-get-all-branches)
+                          nil t gitmerge-default-branch))))))
+  (let ((default-directory (vc-git-root default-directory)))
+    (if (eq from 'resume)
+       (progn
+         (setq gitmerge--commits (gitmerge-read-missing))
+         (setq gitmerge--from (pop gitmerge--commits))
+         ;; Directly continue with the merge.
+         (gitmerge-start-merge))
+      (setq gitmerge--commits (gitmerge-missing from))
+      (setq gitmerge--from from)
+      (when (null gitmerge--commits)
+       (user-error "Nothing to merge"))
+      (with-current-buffer
+         (gitmerge-setup-log-buffer gitmerge--commits gitmerge--from)
+       (goto-char (point-min))
+       (insert (propertize "Commands: " 'font-lock-face 'bold)
+               "(s) Toggle skip, (l) Show log, (d) Show diff, "
+               "(f) Show files, (m) Start merge\n"
+               (propertize "Flags:    " 'font-lock-face 'bold)
+               "(C) Detected backport (cherry-mark), (R) Log matches "
+               "regexp, (M) Manually picked\n\n")
+       (gitmerge-mode)
+       (pop-to-buffer (current-buffer))))))
+
+(defun gitmerge-start-merge ()
+  (interactive)
+  (when (not (vc-git-root default-directory))
+    (user-error "Not in a git tree"))
+  (let ((default-directory (vc-git-root default-directory)))
+    (while gitmerge--commits
+      (setq gitmerge--commits
+           (gitmerge-apply gitmerge--commits gitmerge--from)))
+    (when (file-exists-p gitmerge-status-file)
+      (delete-file gitmerge-status-file))
+    (message "Merging from %s...done" gitmerge--from)))
+
+(provide 'gitmerge)
+
+;;; gitmerge.el ends here
diff --git a/admin/grammars/Makefile.in b/admin/grammars/Makefile.in
index c3ee2ef..6b54ecc 100644
--- a/admin/grammars/Makefile.in
+++ b/admin/grammars/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-## Copyright (C) 2013-2014 Free Software Foundation, Inc.
+## Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
@@ -28,6 +28,19 @@ srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 top_builddir = @top_builddir@
 
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 =
+
 # Prevent any settings in the user environment causing problems.
 unexport EMACSDATA EMACSDOC EMACSPATH
 
@@ -68,30 +81,30 @@ wisent: ${WISENT}
 
 ## c-by.el, make-by.el.
 ${bovinedir}/%-by.el: ${srcdir}/%.by
-       [ ! -f "$@" ] || chmod +w "$@"
-       ${make_bovine} -o "$@" $<
+       $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
+       $(AM_V_at)${make_bovine} -o "$@" $<
 
 ${bovinedir}/scm-by.el: ${srcdir}/scheme.by
-       [ ! -f "$@" ] || chmod +w "$@"
-       ${make_bovine} -o "$@" $<
+       $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
+       $(AM_V_at)${make_bovine} -o "$@" $<
 
 ## grammar-wy.el
 ${cedetdir}/semantic/%-wy.el: ${srcdir}/%.wy
-       [ ! -f "$@" ] || chmod +w "$@"
-       ${make_wisent} -o "$@" $<
+       $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
+       $(AM_V_at)${make_wisent} -o "$@" $<
 
 ## js-wy.el, python-wy.el
 ${wisentdir}/%-wy.el: ${srcdir}/%.wy
-       [ ! -f "$@" ] || chmod +w "$@"
-       ${make_wisent} -o "$@" $<
+       $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
+       $(AM_V_at)${make_wisent} -o "$@" $<
 
 ${wisentdir}/javat-wy.el: ${srcdir}/java-tags.wy
-       [ ! -f "$@" ] || chmod +w "$@"
-       ${make_wisent} -o "$@" $<
+       $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
+       $(AM_V_at)${make_wisent} -o "$@" $<
 
 ${cedetdir}/srecode/srt-wy.el: ${srcdir}/srecode-template.wy
-       [ ! -f "$@" ] || chmod +w "$@"
-       ${make_wisent} -o "$@" $<
+       $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
+       $(AM_V_at)${make_wisent} -o "$@" $<
 
 
 .PHONY: distclean bootstrap-clean maintainer-clean extraclean
diff --git a/admin/grammars/c.by b/admin/grammars/c.by
index f601549..8a3a194 100644
--- a/admin/grammars/c.by
+++ b/admin/grammars/c.by
@@ -1,5 +1,5 @@
 ;;; c.by -- LL grammar for C/C++ language specification
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam <address@hidden>
 ;;         David Ponce <address@hidden>
diff --git a/admin/grammars/grammar.wy b/admin/grammars/grammar.wy
index 4605e3c..fcb36fd 100644
--- a/admin/grammars/grammar.wy
+++ b/admin/grammars/grammar.wy
@@ -1,6 +1,6 @@
 ;;; semantic-grammar.wy -- LALR grammar of Semantic input grammars
 ;;
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/admin/grammars/java-tags.wy b/admin/grammars/java-tags.wy
index 9ff27f3..bc22f4f 100644
--- a/admin/grammars/java-tags.wy
+++ b/admin/grammars/java-tags.wy
@@ -1,6 +1,6 @@
 ;;; java-tags.wy -- Semantic LALR grammar for Java
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/admin/grammars/js.wy b/admin/grammars/js.wy
index 91dbff2..1579b07 100644
--- a/admin/grammars/js.wy
+++ b/admin/grammars/js.wy
@@ -1,6 +1,6 @@
 ;;; javascript-jv.wy -- LALR grammar for Javascript
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1998-2011 Ecma International.
 
 ;; Author: Joakim Verona
diff --git a/admin/grammars/make.by b/admin/grammars/make.by
index 7fc3951..be3cc43 100644
--- a/admin/grammars/make.by
+++ b/admin/grammars/make.by
@@ -1,6 +1,6 @@
 ;;; make.by -- BY notation for Makefiles.
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam <address@hidden>
 ;;         David Ponce <address@hidden>
diff --git a/admin/grammars/python.wy b/admin/grammars/python.wy
index 330264d..9b37a8d 100644
--- a/admin/grammars/python.wy
+++ b/admin/grammars/python.wy
@@ -1,6 +1,6 @@
 ;;; python.wy -- LALR grammar for Python
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 ;; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
 ;; 2009, 2010 Python Software Foundation; All Rights Reserved
 
diff --git a/admin/grammars/scheme.by b/admin/grammars/scheme.by
index 16b67a3..1b67d62 100644
--- a/admin/grammars/scheme.by
+++ b/admin/grammars/scheme.by
@@ -1,6 +1,6 @@
 ;;; scheme.by -- Scheme BNF language specification
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/admin/grammars/srecode-template.wy 
b/admin/grammars/srecode-template.wy
index d4dd2ad..32ef7ea 100644
--- a/admin/grammars/srecode-template.wy
+++ b/admin/grammars/srecode-template.wy
@@ -1,6 +1,6 @@
 ;;; srecode-template.wy --- Semantic Recoder Template parser
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/admin/make-emacs b/admin/make-emacs
index 17d1cdc..f0c5370 100755
--- a/admin/make-emacs
+++ b/admin/make-emacs
@@ -2,7 +2,7 @@
 # Build Emacs with various options for profiling, debugging,
 # with and without warnings enabled etc.
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index dc3cd6c..9e2b10d 100755
--- a/admin/merge-gnulib
+++ b/admin/merge-gnulib
@@ -4,7 +4,7 @@
 #
 #      admin/merge-gnulib
 
-# Copyright 2012-2014 Free Software Foundation, Inc.
+# Copyright 2012-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -35,8 +35,8 @@ GNULIB_MODULES='
   intprops largefile lstat
   manywarnings memrchr mkostemp mktime
   pipe2 pselect pthread_sigmask putenv qacl readlink readlinkat
-  sig2str socklen stat-time stdalign stdio
-  strftime strtoimax strtoumax symlink sys_stat
+  sig2str socklen stat-time stdalign stddef stdio
+  stpcpy strftime strtoimax strtoumax symlink sys_stat
   sys_time time time_r timer-time timespec-add timespec-sub
   unsetenv update-copyright utimens
   vla warnings
diff --git a/admin/merge-pkg-config b/admin/merge-pkg-config
index fd03a44..2ee633d 100755
--- a/admin/merge-pkg-config
+++ b/admin/merge-pkg-config
@@ -4,7 +4,7 @@
 #
 #      admin/merge-pkg-config
 
-# Copyright 2014 Free Software Foundation, Inc.
+# Copyright 2014-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker
index 3d9df20..fd7bd08 100644
--- a/admin/notes/bugtracker
+++ b/admin/notes/bugtracker
@@ -463,10 +463,10 @@ time, rather than by increasing bug number
 
 "raw" = ?
 
-** ChangeLog issues
+** Change log issues
 
 *** When you fix a bug, it can be helpful to put the bug number in the
-ChangeLog entry, for example:
+change log entry, for example:
 
    * foo.el (foofunc): Fix the `foo' case.  (Bug#123)
 
@@ -475,7 +475,7 @@ obvious fix (e.g. a typo), there's no need to clutter the 
log with the
 bug number.
 
 Similarly, when you close a bug, it can be helpful to include the
-relevant ChangeLog entry in the message to the bug tracker, so people
+relevant change log entry in the message to the bug tracker, so people
 can see exactly what the fix was.
 
 *** bug-reference-mode
diff --git a/admin/notes/changelogs b/admin/notes/changelogs
deleted file mode 100644
index e815806..0000000
--- a/admin/notes/changelogs
+++ /dev/null
@@ -1,32 +0,0 @@
-Emacs generally follows the GNU coding standards when it comes to ChangeLogs:
-http://www.gnu.org/prep/standards/html_node/Change-Logs.html
-
-One exception is that we still sometimes quote `like-this' (as the
-standards used to recommend) rather than 'like-this' (as they do now),
-because `...' is so widely used elsewhere in Emacs.
-http://lists.gnu.org/archive/html/emacs-devel/2014-05/msg00514.html
-
-
-If installing changes written by someone else, make the ChangeLog
-entry in their name, not yours.
-
-
-http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg00793.html
-  There is no need to make change log entries for files such as NEWS,
-  MAINTAINERS, and FOR-RELEASE.
-"There is no need" means you don't have to, but you can if you want to.
-
-
-http://lists.gnu.org/archive/html/emacs-devel/2006-12/msg01135.html
-  There is no need to indicate regeneration of files such as configure
-  in ChangeLog.
-
-
-http://lists.gnu.org/archive/html/emacs-devel/2008-11/msg00940.html
-Preferred form for several entries with the same content:
-
-   * help.el (view-lossage):
-   * kmacro.el (kmacro-edit-lossage):
-   * edmacro.el (edit-kbd-macro): Fix docstring, lossage is now 300 keys.
-
-(Rather than anything involving "ditto" and suchlike.)
diff --git a/admin/notes/commits b/admin/notes/commits
deleted file mode 100644
index f33c690..0000000
--- a/admin/notes/commits
+++ /dev/null
@@ -1,70 +0,0 @@
-HOW TO COMMIT CHANGES TO EMACS
-
-Most of these points are from:
-
-http://lists.gnu.org/archive/html/emacs-devel/2009-03/msg00555.html
-From:   Miles Bader
-Subject: commit style redux
-Date:   Tue, 31 Mar 2009 12:21:20 +0900
-
-(0) Each commit should correspond to a single change (whether spread
-    over multiple files or not).  Do not mix different changes in the
-    same commit (eg adding a feature in one file, fixing a bug in
-    another should be two commits, not one).
-
-(1) Commit all changed files at once with a single log message (which
-    in CVS will result in an identical log message for all committed
-    files), not one-by-one.  This is pretty easy using vc-dir now.
-
-(2) Make the log message describe the entire changeset, perhaps
-    including relevant changelog entries (I often don't bother with
-    the latter if it's a trivial sort of change).
-
-    Many modern source-control systems vaguely distinguish the first
-    line of the log message to use as a short summary for abbreviated
-    history listing (in arch this was explicitly called the summary,
-    but many other systems have a similar concept).  So it's nice if
-    you can format the log entry like:
-
-        SHORTISH ONE-LINE SUMMARY
-
-        MULTIPLE-LINE DETAILED DESCRIPTION POSSIBLY INCLUDING (OR
-        CONSISTING OF) CHANGELOG ENTRIES
-
-    [Even with CVS this style is useful, because web CVS browsing
-    interfaces often include the first N words of the log message of
-    the most recent commit as a short "most recent change"
-    description.]
-
-(3) Don't phrase log messages assuming the filename is known, because
-    in non-file-oriented systems (everything modern other than CVS),
-    the log listing tends to be treated as global information, and the
-    connection with specific files is less explicit.
-
-    For instance, currently I often see log messages like "Regenerate";
-    for modern source-control systems with a global log, it's better to
-    have something like "Regenerate configure".
-
-(4) (Added in 2014) In commit comments, and ChangeLog files, it is best
-    to use ways of identifying revisions that are not dependent on a
-    particular version control system.  (At time of writing Emacs is
-    about to move to its fourth VCS and another move in the future is
-    not impossible.)  An excellent way to identify commits is by
-    quoting their summary line.  Another is with an action stamp - an
-    RFC3339 date followed by ! followed by the committer's email - for
-    example, "2014-01-16T05:43:address@hidden". Often, "my
-    previous commit" will suffice.
-
-Followup discussion:
-http://lists.gnu.org/archive/html/emacs-devel/2010-01/msg00897.html
-http://lists.gnu.org/archive/html/emacs-devel/2010-02/msg00401.html
-
-
-PREVIOUS GUIDELINES FOR CVS
-
-For historical interest only, here is the old-style advice for CVS logs:
-http://lists.gnu.org/archive/html/emacs-devel/2007-12/msg01208.html
-
-From: Eli Zaretskii
-Subject: Re: Log messages in CVS
-Date: Sat, 29 Dec 2007 16:06:29 +0200
diff --git a/admin/notes/copyright b/admin/notes/copyright
index 109126a..45b7c61 100644
--- a/admin/notes/copyright
+++ b/admin/notes/copyright
@@ -1,4 +1,4 @@
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
@@ -22,7 +22,7 @@ author to make a non-trivial total. If so, make sure they 
have an
 assignment. If adding a whole file adjust the copyright statements in
 the file.
 
-2. When installing code written by someone else, the ChangeLog entry
+2. When installing code written by someone else, the commit
 should be in the name of the author of the code, not the person who
 installs it.  Also use commit's "--author" option.
 Do not install any of your own changes in the same commit.
@@ -115,8 +115,8 @@ else it is possible the file should not be in Emacs at all 
(please
 report!).
 
 Note that it seems painfully clear that one cannot rely on commit logs,
-or even ChangeLogs, for older changes. People often installed changes
-from others, without recording the true authorship.
+or even change log entries, for older changes. People often installed
+changes from others, without recording the true authorship.
 
 [For reference, most of these points were established via email with
 rms, 2007/1, "Copyright years".
diff --git a/admin/notes/font-backend b/admin/notes/font-backend
index 5c36cf0..03663d3 100644
--- a/admin/notes/font-backend
+++ b/admin/notes/font-backend
@@ -1,4 +1,4 @@
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/notes/git-workflow b/admin/notes/git-workflow
index 71ebd2a..d1d105a 100644
--- a/admin/notes/git-workflow
+++ b/admin/notes/git-workflow
@@ -68,11 +68,57 @@ and add "Backport:" to the commit string.  Then
 git push
 
 
-Merging emacs-24 to trunk
-=========================
-
-This has yet to be written.
-
+Merging emacs-24 to trunk/master
+================================
+
+It is recommended to use the file gitmerge.el in the admin directory
+for merging 'emacs-24' into 'master'.  It will take care of many
+things which would otherwise have to be done manually, like ignoring
+commits that should not land in master, fixing up ChangeLogs and
+automatically dealing with certain types of conflicts.  If you really
+want to, you can do the merge manually, but then you're on your own.
+If you still choose to do that, make absolutely sure that you *always*
+use the 'merge' command to transport commits from 'emacs-24' to
+'master'.  *Never* use 'cherry-pick'!  If you don't know why, then you
+shouldn't manually do the merge in the first place; just use
+gitmerge.el instead.
+
+How to use gitmerge.el:
+
+Enter the Emacs repository, checkout 'master' and make sure it's
+up-to-date by doing a pull.  Then start Emacs with
+
+  emacs -l admin/gitmerge.el -f gitmerge
+
+You'll be asked for the branch to merge, which will default to
+'origin/emacs-24', which you should accept.  Merging a local tracking
+branch is discouraged, since it might not be up-to-date, or worse,
+contain commits from you which are not yet pushed upstream.
+
+You will now see the list of commits from 'emacs-24' which are not yet
+merged to 'master'.  You might also see commits that are already
+marked for "skipping", which means that they will be merged with a
+different merge strategy ('ours'), which will effectively ignore the
+commit's diff while still being seen as merged, so it won't turn up
+again in future merges.  Recognizing these kinds of commits is done
+with a simple regexp searching the log for strings like 'backport' or
+'merge', so you'll probably see false positives as well as false
+negatives.  Carefully go through the commits, investigate them by
+hitting 'l', 'd' and 'f', and mark or unmark them for skipping with
+'s'.  When you're done, hit 'm' to start the merge.
+
+You'll likely get conflicts during the process which cannot be dealt
+with automatically.  In that case, the merge will stop and show you
+the list of conflicted files.  Resolve those conflicts as usual using
+smerge and restart gitmerge (remember to enter the repository when
+doing that).  You don't have to 'add' the resolved files and 'commit'
+the resulting merge, but if you really want to, feel free to do that.
+Note you can also resume gitmerge in a new Emacs session, since the
+current state will be saved to disk.
+
+When everything's done, look hard at the resulting merge.  Skipping
+commits requires separate merges, so don't be surprised to see more
+than one merge commit.  If you're happy, push.
 
 Warnings about X11 forwarding
 =============================
diff --git a/admin/notes/hydra b/admin/notes/hydra
index ce20474..7f8615d 100644
--- a/admin/notes/hydra
+++ b/admin/notes/hydra
@@ -1,6 +1,6 @@
 -*- outline -*-
 
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 NOTES FOR EMACS CONTINUOUS BUILD ON HYDRA
diff --git a/admin/notes/multi-tty b/admin/notes/multi-tty
index f67911d..c547e14 100644
--- a/admin/notes/multi-tty
+++ b/admin/notes/multi-tty
@@ -1,6 +1,6 @@
 -*- coding: utf-8; mode: text; -*-
 
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 From README.multi-tty in the multi-tty branch.
diff --git a/admin/notes/newfile b/admin/notes/newfile
index 0b66b80..a682fec 100644
--- a/admin/notes/newfile
+++ b/admin/notes/newfile
@@ -15,7 +15,7 @@ output under the headings "The following files are not valid 
DOS file
 names:" and "The following resolve to the same DOS file names:" should
 not include any files that end up in the release tarball.
 
-** Make the ChangeLog entry in the name of the author(s), not your own name.
+** Commit in the name of the author(s), not your own name.
 
 ** If appropriate, check that the file compiles OK and that Emacs
 builds fine with it.  Address any compilation warnings.
diff --git a/admin/notes/repo b/admin/notes/repo
index ded1032..2d4cc2a 100644
--- a/admin/notes/repo
+++ b/admin/notes/repo
@@ -1,41 +1,5 @@
 NOTES ON COMMITTING TO EMACS'S REPOSITORY    -*- outline -*-
 
-* Use DVCS commenting conventions
-
-Commits should follow the conventions used in all modern distributed
-version-control systems. That is, they should consist of
-
-- A self-contained topic line, preferably no more than 75 chars long.
-
-- If other content follows the topic line, there should be a blank
-  line separating the two.
-
-- Follow the blank line with ChangeLog-like entries for the specific
-  changes you made, if any.  (As long as Emacs maintains ChangeLog
-  files, just copy the entries you made in them to the commit message
-  after the blank line.)
-
-* Commit to the right branch
-
-Development normally takes places on the trunk.
-Sometimes specialized features are developed on separate branches
-before possibly being merged to the trunk.
-
-Development is discussed on the emacs-devel mailing list.
-
-Sometime before the release of a new major version of Emacs
-a "feature freeze" is imposed on the trunk.  No new features may be
-added after this point.  This is usually some months before the release.
-
-Shortly before the release, a release branch is created, and the
-trunk is then free for development.
-
-For example, "emacs-23" for Emacs 23.2 and later, "EMACS_23_1_RC" for
-23.1, "EMACS_22_BASE" for 22.x, and "EMACS_21_1_RC" for 21.x.
-
-Consult emacs-devel for exactly what kinds of changes are allowed
-on what branch at any time.
-
 ** elpa
 
 This branch does not contain a copy of Emacs, but of the Emacs Lisp
@@ -43,25 +7,6 @@ package archive (elpa.gnu.org).  See admin/notes/elpa for 
further
 explanation, and the README file in the branch for usage
 instructions.
 
-* Install changes only on one branch, let them get merged elsewhere if needed.
-
-In particular, install bug-fixes only on the release branch (if there
-is one) and let them get synced to the trunk; do not install them by
-hand on the trunk as well.  E.g. if there is an active "emacs-24" branch
-and you have a bug-fix appropriate for the next emacs-24.x release,
-install it only on the emacs-24 branch, not on the trunk as well.
-
-Installing things manually into more than one branch makes merges more
-difficult.
-
-http://lists.gnu.org/archive/html/emacs-devel/2010-03/msg01124.html
-
-The exception is, if you know that the change will be difficult to
-merge to the trunk (eg because the trunk code has changed a lot).
-In that case, it's helpful if you can apply the change to both trunk
-and branch yourself (when committing the branch change, indicate
-in the commit log that it should not be merged to the trunk; see below).
-
 * Installing changes from your personal branches.
 
 If your branch has only a single commit, or many different real
@@ -100,21 +45,13 @@ variable in admin/merge-gnulib before running it.
 If you remove a gnulib module, or if a gnulib module
 removes a file, then remove the corresponding files by hand.
 
-* Backporting a bug-fix from the trunk to a branch (e.g. "emacs-24").
-
-Indicate in the commit log that there is no need to merge the commit
-to the trunk, e.g. start the commit message with "Backport:".  This is
-helpful for the person merging the release branch to the trunk.
-
-http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00262.html
-
 * How to merge changes from emacs-24 to trunk
 
 [The section on git merge procedure has not yet been written]
 
-Inspect the ChangeLog entries (e.g. in case too many entries have been
+Inspect the change log entries (e.g. in case too many entries have been
 included or whitespace between entries needs fixing). If someone made
-multiple ChangeLog entries on different days in the branch, you may
+multiple change log entries on different days in the branch, you may
 wish to collapse them all to a single entry for that author in the
 trunk (because in the trunk they all appear under the same date).
 Obviously, if there are multiple changes to the same file by different
@@ -166,4 +103,3 @@ again.
 
 This is a semi-automated way to find the revision that introduced a bug.
 Browse `git help bisect' for technical instructions.
-
diff --git a/admin/notes/unicode b/admin/notes/unicode
index 79e0e1d..13971ef 100644
--- a/admin/notes/unicode
+++ b/admin/notes/unicode
@@ -1,6 +1,6 @@
                                             -*-mode: text; coding: utf-8;-*-
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Importing a new Unicode Standard version into Emacs
@@ -187,19 +187,6 @@ nontrivial changes to the build process.
 
        leim/MISC-DIC/cangjie-table.cns
 
- * iso-latin-2
-
-     These files are processed by csplain, a program that requires
-     Latin-2 input.  In 2012 the csplain maintainers started
-     recommending UTF-8, but these files haven't been converted yet.
-
-       etc/refcards/cs-dired-ref.tex
-       etc/refcards/cs-refcard.tex
-       etc/refcards/cs-survival.tex
-       etc/refcards/sk-dired-ref.tex
-       etc/refcards/sk-refcard.tex
-       etc/refcards/sk-survival.tex
-
  * japanese-iso-8bit
 
      SKK-JISYO.L is a verbatim copy of a file taken from an external source.
@@ -227,11 +214,6 @@ nontrivial changes to the build process.
      operating in some other language environment.
 
        etc/tutorials/TUTORIAL.ja
-       leim/quail/cyril-jis.el
-       leim/quail/hanja-jis.el
-       leim/quail/japanese.el
-       leim/quail/py-punct.el
-       leim/quail/pypunct-b5.el
        lisp/international/ja-dic-cnv.el
        lisp/international/ja-dic-utl.el
        lisp/international/kinsoku.el
@@ -239,18 +221,27 @@ nontrivial changes to the build process.
        lisp/international/titdic-cnv.el
        lisp/language/japan-util.el
        lisp/language/japanese.el
+       lisp/leim/quail/cyril-jis.el
+       lisp/leim/quail/hanja-jis.el
+       lisp/leim/quail/japanese.el
+       lisp/leim/quail/py-punct.el
+       lisp/leim/quail/pypunct-b5.el
        lisp/term/x-win.el
 
+     This file contains just Chinese characters, and has same problem.
+     Also, it contains characters that cannot be encoded in UTF-8.
+
+       lisp/international/titdic-cnv.el
+
  * utf-8-emacs
 
      These files contain characters that cannot be encoded in UTF-8.
 
-       leim/quail/tibetan.el
-       leim/quail/ethiopic.el
-       lisp/international/titdic-cnv.el
        lisp/language/tibetan.el
        lisp/language/tibet-util.el
        lisp/language/ind-util.el
+       lisp/leim/quail/ethiopic.el
+       lisp/leim/quail/tibetan.el
 
 
 This file is part of GNU Emacs.
diff --git a/admin/notes/www b/admin/notes/www
index 4d092ca..27aabe0 100644
--- a/admin/notes/www
+++ b/admin/notes/www
@@ -1,6 +1,6 @@
 -*- outline -*-
 
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 NOTES FOR EMACS WWW PAGES
diff --git a/admin/nt/README-UNDUMP.W32 b/admin/nt/README-UNDUMP.W32
index 2859140..f210556 100644
--- a/admin/nt/README-UNDUMP.W32
+++ b/admin/nt/README-UNDUMP.W32
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
                           Emacs for Windows
diff --git a/admin/nt/README-ftp-server b/admin/nt/README-ftp-server
index 5f5b4a9..eaee7cb 100644
--- a/admin/nt/README-ftp-server
+++ b/admin/nt/README-ftp-server
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
                      Precompiled Distributions of
diff --git a/admin/quick-install-emacs b/admin/quick-install-emacs
index 5edc8d4..911b39b 100755
--- a/admin/quick-install-emacs
+++ b/admin/quick-install-emacs
@@ -1,7 +1,7 @@
 #!/bin/sh
 ### quick-install-emacs --- do a halfway-decent job of installing emacs quickly
 
-## Copyright (C) 2001-2014 Free Software Foundation, Inc.
+## Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ## Author: Miles Bader <address@hidden>
 
@@ -28,7 +28,6 @@
 
 
 PUBLIC_LIBSRC_BINARIES='emacsclient etags ctags ebrowse'
-PUBLIC_LIBSRC_SCRIPTS='grep-changelog'
 
 AVOID="CVS -DIC README COPYING ChangeLog ~ [.]orig$ [.]rej$ Makefile$ 
Makefile.in$ makefile$ makefile.w32-in$ stamp-subdir [.]cvsignore [.]arch-ids 
[{]arch[}] [.][cho]$ make-docfile"
 
@@ -230,9 +229,6 @@ maybe_emit_copy $BUILD/src/emacs $DST_BIN/emacs-$VERSION
 for F in $PUBLIC_LIBSRC_BINARIES; do
   maybe_emit_copy $BUILD/lib-src/$F $DST_BIN/$F
 done
-for F in $PUBLIC_LIBSRC_SCRIPTS; do
-  maybe_emit_copy $SRC/lib-src/$F $DST_BIN/$F
-done
 
 if test x"$SRC" = x"$BUILD"; then
   PFXS="$BUILD"
@@ -259,7 +255,7 @@ for SUBDIR in lisp leim etc lib-src info; do
       ;;
     lib-src)
       DST="$DST_LIBEXEC"
-      AVOID_PAT="`echo "($AVOID ($PUBLIC_LIBSRC_BINARIES 
$PUBLIC_LIBSRC_SCRIPTS)\$)" | tr ' ' '|'`"
+      AVOID_PAT="`echo "($AVOID ($PUBLIC_LIBSRC_BINARIES)\$)" | tr ' ' '|'`"
       ;;
     info)
       DST="$DST_INFO"
diff --git a/admin/unidata/.gitignore b/admin/unidata/.gitignore
deleted file mode 100644
index 3f2d8ca..0000000
--- a/admin/unidata/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.elc
-unidata.txt
-
diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in
index 9450481..6c81d32 100644
--- a/admin/unidata/Makefile.in
+++ b/admin/unidata/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 # Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -31,6 +31,24 @@ EMACS = ${top_builddir}/src/emacs
 unidir = ${top_srcdir}/lisp/international
 emacs = "${EMACS}" -batch --no-site-file --no-site-lisp
 
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_ELC = $(address@hidden@)
+am__v_ELC_ = $(address@hidden@)
+am__v_ELC_0 = @echo "  ELC     " $@;
+am__v_ELC_1 =
+
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 =
+
 .PHONY: all unifiles
 
 all: ${top_srcdir}/src/macuvs.h unifiles
@@ -40,28 +58,31 @@ all: ${top_srcdir}/src/macuvs.h unifiles
 ## Same with charprop.el below.
 ${top_srcdir}/src/macuvs.h: ${srcdir}/uvs.el ${srcdir}/IVD_Sequences.txt | \
   ${srcdir}/uvs.elc
-       ${emacs} -L ${srcdir} -l uvs \
+       $(AM_V_GEN)${emacs} -L ${srcdir} -l uvs \
          --eval '(uvs-print-table-ivd (unmsys--file-name 
"${srcdir}/IVD_Sequences.txt") "Adobe-Japan1")' \
          > $@
 
 %.elc: %.el
-       ${emacs} -f batch-byte-compile $<
+       $(AM_V_ELC)${emacs} -f batch-byte-compile $<
 
 unidata.txt: ${srcdir}/UnicodeData.txt
-       sed -e 's/\([^;]*\);\(.*\)/(#x\1 "\2")/' -e 's/;/" "/g' < $< > $@
+       $(AM_V_GEN)sed -e 's/\([^;]*\);\(.*\)/(#x\1 "\2")/' -e 's/;/" "/g' \
+         < $< > $@
 
-FORCE =
-FORCE:
-.PHONY: FORCE
+PHONY_EXTRAS =
+.PHONY: $(PHONY_EXTRAS)
 
-${unidir}/charprop.el: ${FORCE} ${srcdir}/unidata-gen.el \
+${unidir}/charprop.el: ${srcdir}/unidata-gen.el \
   ${srcdir}/UnicodeData.txt ${srcdir}/BidiMirroring.txt \
   ${srcdir}/BidiBrackets.txt | \
   ${srcdir}/unidata-gen.elc unidata.txt
-       -if [ -f "$@" ]; then \
-         cd ${unidir} && chmod +w charprop.el `sed -n 's/^;; FILE: //p' < 
charprop.el`; \
-       fi
-       ${emacs} -L ${srcdir} -l unidata-gen -f unidata-gen-files \
+  ifneq (,$(wildcard $@))
+       $(AM_V_at)cd $(unidir) && \
+       for f in charprop.el `sed -n 's/^;; FILE: //p' < charprop.el`; do \
+         [ ! -f $$f ] || [ -w $$f ] || chmod +w $$f || exit; \
+       done
+  endif
+       $(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen -f unidata-gen-files \
          ${srcdir} "${unidir}"
 
 ## Check for deleted uni- files, and if any such, force a rebuild.
@@ -69,8 +90,8 @@ ${unidir}/charprop.el: ${FORCE} ${srcdir}/unidata-gen.el \
 ## to generate a Makefile fragment explicitly listing the uni- files,
 ## which this file could include.  If no fragment, rebuild everything.
 unifiles: ${unidir}/charprop.el
-       for f in `sed -n 's/^;; FILE: //p' < $<`; do \
-         [ -f ${unidir}/$$f ] || { ${MAKE} $< FORCE=FORCE || exit 1; break; };\
+       $(AM_V_at)for f in `sed -n 's/^;; FILE: //p' < $<`; do \
+         [ -f $(unidir)/$$f ] || exec $(MAKE) PHONY_EXTRAS=$< $<; \
        done
 
 .PHONY: clean bootstrap-clean distclean maintainer-clean extraclean
@@ -90,7 +111,7 @@ maintainer-clean: distclean
 ## Cf leim/ja-dic (which is much slower).
 extraclean:
        rm -f ${top_srcdir}/src/macuvs.h
-       if test -f ${unidir}/charprop.el; then \
-         (cd ${unidir} && rm -f `sed -n 's/^;; FILE: //p' < charprop.el`); \
-         rm -f ${unidir}/charprop.el; \
-       fi
+  ifneq (,$(wildcard $(unidir)/charprop.el))
+       cd $(unidir) && \
+         rm -f `sed -n 's/^;; FILE: //p' < charprop.el` charprop.el
+  endif
diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el
index d10b260..8af6fa0 100644
--- a/admin/unidata/unidata-gen.el
+++ b/admin/unidata/unidata-gen.el
@@ -1,6 +1,6 @@
 ;; unidata-gen.el -- Create files containing character property data.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -1329,7 +1329,7 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
          (insert (format "(define-char-code-property '%S %S\n  %S)\n"
                          prop basename docstring))
          (with-temp-buffer
-           (message "Generating %s..." file)
+           (or noninteractive (message "Generating %s..." file))
            (when (file-exists-p file)
              (insert-file-contents file)
              (goto-char (point-max))
@@ -1356,7 +1356,7 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
                        ";; End:\n\n"
                        (format ";; %s ends here\n" basename)))
            (write-file file)
-           (message "Generating %s...done" file))))
+           (or noninteractive (message "Generating %s...done" file)))))
       (message "Writing %s..." charprop-file)
       (insert ";; Local Variables:\n"
              ";; coding: utf-8\n"
diff --git a/admin/unidata/uvs.el b/admin/unidata/uvs.el
index 4a17c72..a6beac9 100644
--- a/admin/unidata/uvs.el
+++ b/admin/unidata/uvs.el
@@ -1,6 +1,6 @@
 ;;; uvs.el --- utility for UVS (format 14) cmap subtables in OpenType fonts.
 
-;; Copyright (C) 2014  Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: YAMAMOTO Mitsuharu <address@hidden>
 
@@ -200,6 +200,7 @@ corresponding number."
           (insert-file-contents filename)
           (uvs-alist-from-ivd collection-id
                               sequence-id-to-glyph-func))))
+    (set-binary-mode 'stdout t)
     (princ "/* Automatically generated by uvs.el.  */\n")
     (princ
      (format "static const unsigned char mac_uvs_table_%s_bytes[] =\n  {\n"
diff --git a/admin/update-copyright b/admin/update-copyright
index 5612d7f..459ee83 100755
--- a/admin/update-copyright
+++ b/admin/update-copyright
@@ -7,7 +7,7 @@
 # By default, this script uses the local-time calendar year.
 # Set the UPDATE_COPYRIGHT_YEAR environment variable to override the default.
 
-# Copyright 2013-2014 Free Software Foundation, Inc.
+# Copyright 2013-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -37,7 +37,7 @@ export UPDATE_COPYRIGHT_USE_INTERVALS
 : ${UPDATE_COPYRIGHT_YEAR=$(date +%Y)}
 export UPDATE_COPYRIGHT_YEAR
 
-emacsver=etc/refcards/emacsver.tex
+emacsver=etc/refcards/emacsver.tex.in
 sed 's/\\def\\year[{][0-9]*[}]/\\def\\year{'"$UPDATE_COPYRIGHT_YEAR"'}'/g \
   $emacsver >$emacsver.aux &&
 { cmp -s $emacsver $emacsver.aux ||
diff --git a/admin/update_autogen b/admin/update_autogen
index 4c4f52e..73e8aeb 100755
--- a/admin/update_autogen
+++ b/admin/update_autogen
@@ -1,7 +1,7 @@
 #!/bin/bash
 ### update_autogen - update some auto-generated files in the Emacs tree
 
-## Copyright (C) 2011-2014 Free Software Foundation, Inc.
+## Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <address@hidden>
 
@@ -228,7 +228,7 @@ commit ()
 
     echo "Committing..."
 
-    $vcs commit -m "Auto-commit of $type files." "$@" || return $?
+    $vcs commit -m "# Auto-commit of $type files." "$@" || return $?
 
     [ "$vcs" = "git" ] && {
         $vcs push || return $?
@@ -305,9 +305,6 @@ EOF
 
     modified=$(status $basegen) || die
 
-    ## bzr status output is always relative to top-level, not PWD.
-    [ "$vcs" = "bzr" ] && cd $oldpwd
-
     commit "generated" $modified || die "commit error"
 
     exit 0
@@ -379,11 +376,7 @@ echo "Checking status of loaddef files..."
 ## It probably would be fine to just check+commit lisp/, since
 ## making autoloads should not effect any other files.  But better
 ## safe than sorry.
-modified=$(status $genfiles ${ldefs_out#lisp/}) || die
-
-
-## bzr status output is always relative to top-level, not PWD.
-[ "$vcs" = "bzr" ] && cd ../
+modified=$(status $genfiles $ldefs_out) || die
 
 
 commit "loaddefs" $modified || die "commit error"
diff --git a/autogen.sh b/autogen.sh
index 1945e81..bc9c5a0 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 ### autogen.sh - tool to help build Emacs from a repository checkout
 
-## Copyright (C) 2011-2014 Free Software Foundation, Inc.
+## Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <address@hidden>
 ## Maintainer: address@hidden
@@ -216,6 +216,47 @@ autoreconf -fi -I m4 || exit $?
 ## cause 'make' to needlessly run 'autoheader'.
 echo timestamp > src/stamp-h.in || exit
 
+## Install Git hooks, if using Git.
+if test -d .git/hooks; then
+    tailored_hooks=
+    sample_hooks=
+
+    for hook in commit-msg pre-commit; do
+       cmp build-aux/git-hooks/$hook .git/hooks/$hook >/dev/null 2>&1 ||
+       tailored_hooks="$tailored_hooks $hook"
+    done
+    for hook in applypatch-msg pre-applypatch; do
+       test ! -r .git/hooks/$hook.sample ||
+       cmp .git/hooks/$hook.sample .git/hooks/$hook >/dev/null 2>&1 ||
+       sample_hooks="$sample_hooks $hook"
+    done
+
+    if test -n "$tailored_hooks$sample_hooks"; then
+       echo "Installing git hooks..."
+
+       case `cp --help 2>/dev/null` in
+         *--backup*--verbose*)
+           cp_options='--backup=numbered --verbose';;
+         *)
+           cp_options='-f';;
+       esac
+
+       if test -n "$tailored_hooks"; then
+           for hook in $tailored_hooks; do
+               cp $cp_options build-aux/git-hooks/$hook .git/hooks || exit
+               chmod a-w .git/hooks/$hook || exit
+           done
+       fi
+
+       if test -n "$sample_hooks"; then
+           for hook in $sample_hooks; do
+               cp $cp_options .git/hooks/$hook.sample .git/hooks/$hook || exit
+               chmod a-w .git/hooks/$hook || exit
+           done
+       fi
+    fi
+fi
+
 echo "You can now run './configure'."
 
 exit 0
diff --git a/build-aux/git-hooks/commit-msg b/build-aux/git-hooks/commit-msg
new file mode 100755
index 0000000..31df5ce
--- /dev/null
+++ b/build-aux/git-hooks/commit-msg
@@ -0,0 +1,126 @@
+#!/bin/sh
+# Check the format of GNU Emacs change log entries.
+
+# Copyright 2014-2015 Free Software Foundation, Inc.
+
+# 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Paul Eggert.
+
+# Prefer gawk if available, as it handles NUL bytes properly.
+if type gawk >/dev/null 2>&1; then
+  awk=gawk
+else
+  awk=awk
+fi
+
+# Use a UTF-8 locale if available, so that the UTF-8 check works.
+# Use U+00A2 CENT SIGN to test whether the locale works.
+cent_sign_utf8_octal='\302\242'
+at_sign=`
+  printf "${cent_sign_utf8_octal}@" |
+  $awk '{print substr($0, 2)}' 2>/dev/null
+`
+if test "$at_sign" != @; then
+  at_sign=`
+    printf "${cent_sign_utf8_octal}@" |
+    LC_ALL=en_US.UTF-8 $awk '{print substr($0, 2)}' 2>/dev/null
+  `
+  if test "$at_sign" = @; then
+    LC_ALL=en_US.UTF-8; export LC_ALL
+  fi
+fi
+
+# Check the log entry.
+exec $awk '
+  BEGIN {
+    if (" " ~ /[[:space:]]/) {
+      space = "[[:space:]]"
+      non_space = "[^[:space:]]"
+      non_print = "[^[:print:]]"
+    } else {
+      # mawk 1.3.3 does not support POSIX bracket expressions.
+      # Approximate them as best we can.
+      space = "[ \f\n\r\t\v]"
+      non_space = "[^ \f\n\r\t\v]"
+      non_print = "[\1-\37\177]"
+    }
+  }
+
+  /^#/ { next }
+
+  !/^.*$/ {
+    print "Invalid character (not UTF-8) in commit message"
+    status = 1
+  }
+
+  nlines == 0 && $0 !~ non_space { next }
+
+  { nlines++ }
+
+  nlines == 1 {
+    # Ignore special markers used by "git rebase --autosquash".
+    if (! sub(/^fixup! /, ""))
+      sub(/^squash! /, "")
+
+    if ($0 ~ "^" space) {
+      print "White space at start of commit message'\''s first line"
+      status = 1
+    }
+  }
+
+  nlines == 2 && $0 ~ non_space {
+    print "Nonempty second line in commit message"
+    status = 1
+  }
+
+  {
+    # Expand tabs to spaces for length calculations etc.
+    while (match($0, /\t/)) {
+      before_tab = substr($0, 1, RSTART - 1)
+      after_tab = substr($0, RSTART + 1)
+      $0 = sprintf("%s%*s%s", before_tab, 8 - (RSTART - 1) % 8, "", after_tab)
+    }
+  }
+
+  78 < length && $0 ~ space {
+    print "Line longer than 78 characters in commit message"
+    status = 1
+  }
+
+  140 < length {
+    print "Word longer than 140 characters in commit message"
+    status = 1
+  }
+
+  /^Signed-off-by: / {
+    print "'\''Signed-off-by:'\'' in commit message"
+    status = 1
+  }
+
+  $0 ~ non_print {
+    print "Unprintable character in commit message"
+    status = 1
+  }
+
+  END {
+    if (nlines == 0) {
+      print "Empty commit message"
+      status = 1
+    }
+    exit status
+  }
+' <"$1"
diff --git a/admin/diff-tar-files b/build-aux/git-hooks/pre-commit
similarity index 52%
copy from admin/diff-tar-files
copy to build-aux/git-hooks/pre-commit
index 9bdc91f..d050c40 100755
--- a/admin/diff-tar-files
+++ b/build-aux/git-hooks/pre-commit
@@ -1,6 +1,7 @@
-#! /bin/sh
+#!/bin/sh
+# Check file names in git commits for GNU Emacs.
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright 2014-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -17,25 +18,29 @@
 # You should have received a copy of the GNU General Public License
 # along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
+LC_ALL=C
+export LC_ALL
 
-if [ $# != 2 ]; then
-    cat <<EOF
-Usage: $0 OLD-TAR NEW-TAR
+exec >&2
 
-Print a diff of the files in OLD-TAR and NEW-TAR.  Used for checking
-the contents of Emacs tar files.
-EOF
-    exit 1;
-fi
+. git-sh-setup
+
+git_diff='git diff --cached --name-only --diff-filter=A'
+ok_chars='\0+[=-=]./0-9A-Z_a-z'
+nbadchars=`$git_diff -z HEAD | tr -d "$ok_chars" | wc -c`
 
-old_tar=$1
-new_tar=$2
+if test "$nbadchars" -ne 0; then
+  echo "File name does not consist of -+./_ or ASCII letters or digits."
+  exit 1
+fi
 
-old_tmp=/tmp/old.$$
-new_tmp=/tmp/new.$$
-trap "rm -f $old_tmp $new_tmp; exit 1" 1 2 15
+new_names=`$git_diff HEAD` || exit
+case "
+$new_names" in
+  */-* | *'
+'-*)
+    echo "File name component begins with '-'."
+    exit 1;;
+esac
 
-tar tzf $old_tar | sed -e 's,^[^/]*,,' | sort > $old_tmp
-tar tzf $new_tar | sed -e 's,^[^/]*,,' | sort > $new_tmp
-diff -u $old_tmp $new_tmp
-rm -f $new_tmp $old_tmp
+exec git diff-index --check --cached HEAD --
diff --git a/build-aux/make-info-dir b/build-aux/make-info-dir
index 10a0b75..829dc2c 100755
--- a/build-aux/make-info-dir
+++ b/build-aux/make-info-dir
@@ -2,7 +2,7 @@
 
 ### make-info-dir - create info/dir, for systems without install-info
 
-## Copyright (C) 2013-2014 Free Software Foundation, Inc.
+## Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <address@hidden>
 ## Maintainer: address@hidden
diff --git a/build-aux/move-if-change b/build-aux/move-if-change
index 88d9574..3cd87a9 100755
--- a/build-aux/move-if-change
+++ b/build-aux/move-if-change
@@ -8,7 +8,7 @@ VERSION='2012-01-06 07:23'; # UTC
 # If you change this file with Emacs, please let the write hook
 # do its job.  Otherwise, update this string manually.
 
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 # 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
diff --git a/build-aux/msys-to-w32 b/build-aux/msys-to-w32
index f8c3722..f8a0a81 100755
--- a/build-aux/msys-to-w32
+++ b/build-aux/msys-to-w32
@@ -2,7 +2,7 @@
 # Convert a MSYS path list to Windows-native format.
 # Status is zero if successful, nonzero otherwise.
 
-# Copyright (C) 2013-2014 Free Software Foundation, Inc.
+# Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 # 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
@@ -32,14 +32,7 @@ written to the standard output after performing these 
transformations:
 
 1. Discard empty paths.
 2. Replace: '\' with '/', '//' with '/' and ':' with ';'.
-3. Translate each path to Windows-native format.
-
-Relative paths or paths starting with '%emacs_dir%' will be passed
-verbatim to the standard output.
-
-Each non existing absolute path will be translated by looking for its
-deepest existing directory, which will be translated and the remainder
-appended.
+3. Translate absolute paths to Windows-native format.
 
 Options:
   --help     display this help and exit
@@ -78,10 +71,7 @@ for p
 do
     [ -z "$p" ] && continue
 
-    if [ "${p:0:11}" = "%emacs_dir%" ]
-    then
-       w32p=$p
-    elif [ "${p:0:1}" != "/" ]
+    if [ "${p:0:1}" != "/" ]
     then
        w32p=$p
     elif [ -d "$p" ]
diff --git a/build-aux/snippet/arg-nonnull.h b/build-aux/snippet/arg-nonnull.h
index 9ee8b15..0d55e2b 100644
--- a/build-aux/snippet/arg-nonnull.h
+++ b/build-aux/snippet/arg-nonnull.h
@@ -1,5 +1,5 @@
 /* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/build-aux/snippet/c++defs.h b/build-aux/snippet/c++defs.h
index 67b1233..585b38a 100644
--- a/build-aux/snippet/c++defs.h
+++ b/build-aux/snippet/c++defs.h
@@ -1,5 +1,5 @@
 /* C++ compatible function declaration macros.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/build-aux/snippet/warn-on-use.h b/build-aux/snippet/warn-on-use.h
index 1c4d7bd..90f4985 100644
--- a/build-aux/snippet/warn-on-use.h
+++ b/build-aux/snippet/warn-on-use.h
@@ -1,5 +1,5 @@
 /* A C macro for emitting warnings if a function is used.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/build-aux/update-copyright b/build-aux/update-copyright
index 90624e9..4eb4b93 100755
--- a/build-aux/update-copyright
+++ b/build-aux/update-copyright
@@ -3,9 +3,9 @@ eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" 
${1+"$@"}'
     if 0;
 # Update an FSF copyright year list to include the current year.
 
-my $VERSION = '2013-01-03.09:41'; # UTC
+my $VERSION = '2015-01-15.20:53'; # UTC
 
-# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2009-2015 Free Software Foundation, Inc.
 #
 # 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
@@ -124,7 +124,7 @@ use strict;
 use warnings;
 
 my $copyright_re = 'Copyright';
-my $circle_c_re = '(?:\([cC]\)|@copyright{}|&copy;)';
+my $circle_c_re = '(?:\([cC]\)|@copyright{}|\\\\\(co|&copy;)';
 my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
 $holder ||= 'Free Software Foundation, Inc.';
 my $prefix_max = 5;
diff --git a/build-aux/update-subdirs b/build-aux/update-subdirs
index 3117113..d544b22 100755
--- a/build-aux/update-subdirs
+++ b/build-aux/update-subdirs
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Write into $1/subdirs.el a list of subdirs of directory $1.
 
-# Copyright (C) 1994-1995, 1997, 1999, 2001-2014 Free Software
+# Copyright (C) 1994-1995, 1997, 1999, 2001-2015 Free Software
 # Foundation, Inc.
 
 # This file is part of GNU Emacs.
diff --git a/config.bat b/config.bat
index 67ad371..218690f 100644
--- a/config.bat
+++ b/config.bat
@@ -1,7 +1,7 @@
 @echo off
 rem   ----------------------------------------------------------------------
 rem   Configuration script for MSDOS
-rem   Copyright (C) 1994-1999, 2001-2014 Free Software Foundation, Inc.
+rem   Copyright (C) 1994-1999, 2001-2015 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/configure.ac b/configure.ac
index ea62797..dd27fab 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ dnl     autoconf
 dnl in the directory containing this script.
 dnl If you changed any AC_DEFINES, also run autoheader.
 dnl
-dnl Copyright (C) 1994-1996, 1999-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 1994-1996, 1999-2015 Free Software Foundation, Inc.
 dnl
 dnl  This file is part of GNU Emacs.
 dnl
@@ -137,12 +137,39 @@ AM_INIT_AUTOMAKE(1.11)
 
 dnl Canonicalize the configuration name.
 AC_CANONICAL_HOST
-canonical=$host
-configuration=${host_alias-${build_alias-$host}}
 
-dnl We get MINGW64 with MSYS2, MINGW32 with MSYS.
-case $canonical in
+case $host in
  *-mingw*)
+
+  if test -z "$host_alias"; then
+
+      # No --host argument was given to 'configure'; therefore $host
+      # was set to a default value based on the build platform.  But
+      # this default value may be wrong if we are building from a
+      # 64-bit MSYS[2] pre-configured to build 32-bit MinGW programs.
+      # Therefore, we'll try to get the right host platform from the
+      # compiler's target.
+
+      AC_MSG_CHECKING([the compiler's target])
+      if test -z "$CC"; then
+         cc=gcc
+      else
+         cc=$CC
+      fi
+      cc_target=`$cc -v 2>&1 | sed -n 's/Target: //p'`
+      case "$cc_target" in
+          *-*) host=$cc_target
+             ;;
+          "") AC_MSG_ERROR([Impossible to obtain $cc compiler target.
+Please explicitly provide --host.])
+              ;;
+         *) AC_MSG_WARN([Compiler reported non-standard target.
+Defaulting to $host.])
+              ;;
+      esac
+      AC_MSG_RESULT([$host])
+  fi
+
   . $srcdir/nt/mingw-cfg.site
 
   case $srcdir in
@@ -157,6 +184,9 @@ case $canonical in
   esac;;
 esac
 
+canonical=$host
+configuration=${host_alias-${build_alias-$host}}
+
 dnl Support for --program-prefix, --program-suffix and
 dnl --program-transform-name options
 AC_ARG_PROGRAM
@@ -364,14 +394,31 @@ OPTION_DEFAULT_ON([compress-install],
 make GZIP_PROG= install])
 
 AC_ARG_WITH(gameuser,dnl
-[AS_HELP_STRING([--with-gameuser=USER],[user for shared game score files])])
-test "X${with_gameuser}" != X && test "${with_gameuser}" != yes \
-  && gameuser="${with_gameuser}"
-test "X$gameuser" = X && gameuser=games
+[AS_HELP_STRING([--with-gameuser=USER_OR_GROUP],
+               [user for shared game score files.
+               An argument prefixed by ':' specifies a group instead.])])
+gameuser=
+gamegroup=
+case ${with_gameuser} in
+  no) ;;
+  "" | yes)
+    AC_MSG_CHECKING([whether a 'games' user exists])
+    if id -u games >/dev/null 2>&1; then
+      AC_MSG_RESULT([yes])
+      gameuser=games
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  :*) gamegroup=`echo "${with_gameuser}" | sed -e "s/://"` ;;
+  *) gameuser=${with_gameuser} ;;
+esac
 
 AC_ARG_WITH([gnustep-conf],dnl
 [AS_HELP_STRING([--with-gnustep-conf=FILENAME],
-   [name of GNUstep.conf; default $GNUSTEP_CONFIG_FILE, or 
/etc/GNUstep/GNUstep.conf])])
+   [name of GNUstep configuration file to use on systems where the command
+    'gnustep-config' does not work; default $GNUSTEP_CONFIG_FILE, or
+    /etc/GNUstep/GNUstep.conf])])
 test "X${with_gnustep_conf}" != X && test "${with_gnustep_conf}" != yes && \
   GNUSTEP_CONFIG_FILE="${with_gnustep_conf}"
 test "X$GNUSTEP_CONFIG_FILE" = "X" && \
@@ -864,6 +911,10 @@ else
   # Emacs's use of alloca inhibits protecting the stack.
   nw="$nw -Wstack-protector"
 
+  # Emacs's use of partly-const functions such as Fgnutls_available_p
+  # make this option problematic.
+  nw="$nw -Wsuggest-attribute=const"
+
   # Emacs's use of partly-pure functions such as CHECK_TYPE make this
   # option problematic.
   nw="$nw -Wsuggest-attribute=pure"
@@ -983,9 +1034,11 @@ if test "${enableval}" != "no"; then
    fi
 fi)
 
+dnl Prefer silent make output.  For verbose output, use
+dnl 'configure --disable-silent-rules' or 'make V=1' .
+AM_SILENT_RULES([yes])
 dnl Port to Automake 1.11.
 dnl This section can be removed once we assume Automake 1.14 or later.
-: ${AM_DEFAULT_VERBOSITY=1}
 : ${AM_V=$AM_DEFAULT_VERBOSITY}
 : ${AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY}
 AC_SUBST([AM_V])
@@ -1703,6 +1756,7 @@ else
 fi
 
 HAVE_NS=no
+NS_GNUSTEP_CONFIG=no
 NS_IMPL_COCOA=no
 NS_IMPL_GNUSTEP=no
 tmp_CPPFLAGS="$CPPFLAGS"
@@ -1719,13 +1773,13 @@ if test "${with_ns}" != no; then
      ns_appresdir=${ns_appdir}/Contents/Resources
      ns_appsrc=Cocoa/Emacs.base
      ns_fontfile=macfont.o
+  elif flags=$( (gnustep-config --objc-flags) 2>/dev/null); then
+     NS_IMPL_GNUSTEP=yes
+     NS_GNUSTEP_CONFIG=yes
+     GNU_OBJC_CFLAGS=$flags
+     LIBS_GNUSTEP=$(gnustep-config --gui-libs) || exit
   elif test -f $GNUSTEP_CONFIG_FILE; then
      NS_IMPL_GNUSTEP=yes
-     ns_appdir=`pwd`/nextstep/Emacs.app
-     ns_appbindir=${ns_appdir}
-     ns_appresdir=${ns_appdir}/Resources
-     ns_appsrc=GNUstep/Emacs.base
-     ns_fontfile=nsfont.o
      dnl FIXME sourcing this several times in subshells seems inefficient.
      GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo 
$GNUSTEP_SYSTEM_HEADERS)"
      GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo 
$GNUSTEP_SYSTEM_LIBRARIES)"
@@ -1758,8 +1812,16 @@ fail;
        GNU_OBJC_CFLAGS="-fobjc-exceptions"
      fi
   fi
+  if test $NS_IMPL_GNUSTEP = yes; then
+     ns_appdir=`pwd`/nextstep/Emacs.app
+     ns_appbindir=${ns_appdir}
+     ns_appresdir=${ns_appdir}/Resources
+     ns_appsrc=GNUstep/Emacs.base
+     ns_fontfile=nsfont.o
+  fi
 
   dnl This is only used while we test the NS headers, it gets reset below.
+  CPPFLAGS="$CPPFLAGS $GNU_OBJC_CFLAGS"
   CFLAGS="$CFLAGS $GNU_OBJC_CFLAGS"
 
   AC_CHECK_HEADER([AppKit/AppKit.h], [HAVE_NS=yes],
@@ -1878,6 +1940,9 @@ CM_OBJ="cm.o"
 XARGS_LIMIT=
 if test "${HAVE_W32}" = "yes"; then
   AC_DEFINE(HAVE_NTGUI, 1, [Define to use native MS Windows GUI.])
+  if test "$with_toolkit_scroll_bars" = "no"; then
+    AC_MSG_ERROR([Non-toolkit scroll bars are not implemented for w32 build.])
+  fi
   AC_CHECK_TOOL(WINDRES, [windres],
                 [AC_MSG_ERROR([No resource compiler found.])])
   W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o"
@@ -1887,6 +1952,13 @@ if test "${HAVE_W32}" = "yes"; then
     x86_64-*-*) EMACS_MANIFEST="emacs-x64.manifest" ;;
     *) EMACS_MANIFEST="emacs-x86.manifest" ;;
   esac
+  dnl Construct something of the form "24,4,0,0" with 4 components.
+  comma_version=`echo "${PACKAGE_VERSION}.0.0" | sed -e 's/\./,/g' -e 
's/^\([[^,]]*,[[^,]]*,[[^,]]*,[[^,]]*\).*/\1/'`
+
+  comma_space_version=`echo "$comma_version" | sed 's/,/, /g'`
+  AC_SUBST(comma_version)
+  AC_SUBST(comma_space_version)
+  AC_CONFIG_FILES([nt/emacs.rc nt/emacsclient.rc])
   if test "${opsys}" = "cygwin"; then
     W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32"
     W32_LIBS="$W32_LIBS -lusp10 -lcomctl32 -lwinspool"
@@ -1937,7 +2009,6 @@ fi
 if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then
    # Too many warnings for now.
    nw=
-   nw="$nw -Wsuggest-attribute=const"
    nw="$nw -Wsuggest-attribute=noreturn"
    gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
 
@@ -2564,19 +2635,13 @@ fi
 AC_SUBST(LIBSELINUX_LIBS)
 
 HAVE_GNUTLS=no
-HAVE_GNUTLS3=no
 if test "${with_gnutls}" = "yes" ; then
-  EMACS_CHECK_MODULES([LIBGNUTLS], [gnutls >= 3.0.0],
-    [HAVE_GNUTLS3=yes], [HAVE_GNUTLS3=no])
-  if test "${HAVE_GNUTLS3}" = "yes"; then
-    AC_DEFINE(HAVE_GNUTLS3, 1, [Define if using GnuTLS v3.])
-    HAVE_GNUTLS="yes"
-  else
-    EMACS_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.6.6],
-      [HAVE_GNUTLS=yes], [HAVE_GNUTLS=no])
-  fi
+  EMACS_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.6.6],
+    [HAVE_GNUTLS=yes], [HAVE_GNUTLS=no])
   if test "${HAVE_GNUTLS}" = "yes"; then
     AC_DEFINE(HAVE_GNUTLS, 1, [Define if using GnuTLS.])
+    EMACS_CHECK_MODULES([LIBGNUTLS3], [gnutls >= 3.0.0],
+      [AC_DEFINE(HAVE_GNUTLS3, 1, [Define if using GnuTLS v3.])], [])
   fi
 
   # Windows loads GnuTLS dynamically
@@ -3338,11 +3403,13 @@ if test "${HAVE_NS}" = "yes"; then
   fi
   if test "${NS_IMPL_GNUSTEP}" = "yes"; then
     AC_DEFINE(NS_IMPL_GNUSTEP, 1, [Define to 1 if you are using NS windowing 
under GNUstep.])
-    # See also .m.o rule in Makefile.in */
-    # FIXME: are all these flags really needed?  Document here why.  */
-    GNUSTEP_CFLAGS="-D_REENTRANT -fPIC -fno-strict-aliasing 
-I${GNUSTEP_SYSTEM_HEADERS} ${GNUSTEP_LOCAL_HEADERS}"
-    ## Extra CFLAGS applied to src/*.m files.
-    GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -fgnu-runtime -Wno-import 
-fconstant-string-class=NSConstantString -DGNUSTEP_BASE_LIBRARY=1 
-DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGSWARN -DGSDIAGNOSE"
+    if test $NS_GNUSTEP_CONFIG != yes; then
+      # See also .m.o rule in src/Makefile.in.  */
+      # FIXME: are all these flags really needed?  Document here why.  */
+      GNUSTEP_CFLAGS="-D_REENTRANT -fPIC -fno-strict-aliasing 
-I${GNUSTEP_SYSTEM_HEADERS} ${GNUSTEP_LOCAL_HEADERS}"
+      ## Extra CFLAGS applied to src/*.m files.
+      GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -fgnu-runtime -Wno-import 
-fconstant-string-class=NSConstantString -DGNUSTEP_BASE_LIBRARY=1 
-DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGSWARN -DGSDIAGNOSE"
+    fi
   fi
   OTHER_FILES=ns-app
 fi
@@ -4631,7 +4698,7 @@ fi
 
 version=$PACKAGE_VERSION
 
-copyright="Copyright (C) 2014 Free Software Foundation, Inc."
+copyright="Copyright (C) 2015 Free Software Foundation, Inc."
 AC_DEFINE_UNQUOTED(COPYRIGHT, ["$copyright"],
   [Short copyright string for this version of Emacs.])
 AC_SUBST(copyright)
@@ -4662,6 +4729,7 @@ AC_SUBST(etcdocdir)
 AC_SUBST(bitmapdir)
 AC_SUBST(gamedir)
 AC_SUBST(gameuser)
+AC_SUBST(gamegroup)
 ## FIXME? Nothing uses @address@hidden
 ## src/Makefile.in did add LD_SWITCH_X_SITE (as a cpp define) to the
 ## end of LIBX_BASE, but nothing ever set it.
@@ -4955,7 +5023,7 @@ AC_SUBST(WINDOW_SYSTEM_OBJ)
 
 AH_TOP([/* GNU Emacs site configuration template file.
 
-Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2014
+Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2015
   Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/doc/emacs/.gitignore b/doc/emacs/.gitignore
deleted file mode 100644
index 3ff56b4..0000000
--- a/doc/emacs/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-*.aux
-*.cp
-*.cps
-*.dvi
-*.fn
-*.fns
-*.ky
-*.kys
-*.log
-*.op
-*.ops
-*.pdf
-*.pg
-*.pgs
-*.ps
-*.tmp
-*.toc
-*.tp
-*.tps
-*.vr
-*.vrs
-Makefile
-makefile
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog
index 68ac9f5..1287733 100644
--- a/doc/emacs/ChangeLog
+++ b/doc/emacs/ChangeLog
@@ -1,3 +1,97 @@
+2015-01-28  Eli Zaretskii  <address@hidden>
+
+       * cmdargs.texi (Action Arguments): Clarify into which buffer
+       '--insert' inserts.  (Bug#19694)
+
+       * programs.texi (Custom C Indent): Fix a typo.  (Bug#19647)
+
+2015-01-27  Ivan Shmakov  <address@hidden>
+
+       * files.texi (File Archives): Document "I" for tar-new-entry.
+       (Bug#19274)
+
+2014-12-31  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for Emacs doc
+       * Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
+       (am__v_GEN_0, am__v_GEN_1): New macros, from ../../src/Makefile.in.
+       (ENVADD, $(buildinfodir)/emacs.info, emacs.html):
+       Use them.
+
+2014-12-27  Eli Zaretskii  <address@hidden>
+
+       * buffers.texi (Kill Buffer): Improve indexing.
+
+2014-12-24  Stephen Leake  <address@hidden>
+
+       * trouble.texi: Move user-level information from CONTRIBUTE here.
+
+2014-12-14  Alan Mackenzie  <address@hidden>
+
+       * display.texi (Scrolling): fast-but-imprecise-scrolling.
+       Describe new variable.
+
+2014-12-14  Cameron Desautels  <address@hidden>
+
+       * custom.texi (Saving Customizations): Mention
+       `custom-prompt-customize-unsaved-options'.
+
+2014-12-08  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * misc.texi (Network Security): Mention the new protocol-level
+       `high' NSM checks.
+
+2014-12-08  Eric S. Raymond  <address@hidden>
+
+       * maintaining.texi: Suopport fo Arch has been moved to obosolete,
+       remove references that imply otherwise.
+
+2014-11-29  Paul Eggert  <address@hidden>
+
+       Lessen focus on ChangeLog files, as opposed to change log entries.
+       * maintaining.texi (Change Log): Mention that ChangeLog files may
+       be copied to or from a version control system.
+       * trouble.texi (Sending Patches): Point to the commit messages.
+
+2014-11-29  Eli Zaretskii  <address@hidden>
+
+       * maintaining.texi (Switching Branches): Mention "C-x v r".
+       Correct commands for switching branches in various VCSs.
+
+2014-11-27  Tassilo Horn  <address@hidden>
+
+       * misc.texi (DocView Slicing): Describe how to slice with the
+       mouse.  Fix command mentioned by slice by BoundingBox paragraph.
+       (Bug#18040)
+
+2014-11-25  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * misc.texi (Network Security): Use "untrustworthy" instead of
+       "unsafe".
+
+2014-11-24  Eli Zaretskii  <address@hidden>
+
+       * misc.texi (Network Security): Improve wording and indexing of
+       last change.
+
+2014-11-24  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * misc.texi (Gnus Summary Buffer): Move the Network Security
+       Manager stuff here from the lispref manual.
+
+2014-11-21  Eli Zaretskii  <address@hidden>
+
+       * maintaining.texi (Version Control Systems): Move "@end itemize"
+       past the last @item.
+
+2014-11-21  H. Dieter Wilhelm  <address@hidden>
+
+       * maintaining.texi (Version Control Systems): Fix a typo.
+
+2014-11-20  Eric S. Raymond  <address@hidden>
+
+       * maintaining.texi: Document SRC support.
+
 2014-11-10  Glenn Morris  <address@hidden>
 
        * Makefile.in (top_srcdir, version): New, set by configure.
@@ -10785,7 +10879,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in
index 5e53c07..9f04f0d 100644
--- a/doc/emacs/Makefile.in
+++ b/doc/emacs/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994, 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1996-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -73,8 +73,15 @@ TEXI2DVI = texi2dvi
 TEXI2PDF = texi2pdf
 DVIPS = dvips
 
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 
-ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(TEXINPUTS)" \
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+ENVADD = $(AM_V_GEN)TEXINPUTS="$(srcdir):$(texinfodir):$(TEXINPUTS)" \
          MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)"
 
 DVI_TARGETS = emacs.dvi emacs-xtra.dvi
@@ -162,7 +169,7 @@ ${buildinfodir}:
 # There is no provision for Info files to exist in the build directory.
 # In a distribution of Emacs, the Info files should be up to date.
 $(buildinfodir)/emacs.info: ${EMACSSOURCES} | ${buildinfodir}
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
 
 emacs.dvi: ${EMACSSOURCES}
        $(ENVADD) $(TEXI2DVI) $<
@@ -171,7 +178,7 @@ emacs.pdf: ${EMACSSOURCES}
        $(ENVADD) $(TEXI2PDF) $<
 
 emacs.html: ${EMACSSOURCES}
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
 
 emacs-xtra.dvi: $(EMACS_XTRA)
        $(ENVADD) $(TEXI2DVI) $<
diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi
index 4d46a5d..a3cb989 100644
--- a/doc/emacs/abbrevs.texi
+++ b/doc/emacs/abbrevs.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Abbrevs
diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi
index 9f2496d..f97964b 100644
--- a/doc/emacs/ack.texi
+++ b/doc/emacs/ack.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1994-1997, 1999-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1994-1997, 1999-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @node Acknowledgments
diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi
index d0de906..def5411 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2005-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2005-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 
 @node Antinews
diff --git a/doc/emacs/arevert-xtra.texi b/doc/emacs/arevert-xtra.texi
index dcb73bc..32b5463 100644
--- a/doc/emacs/arevert-xtra.texi
+++ b/doc/emacs/arevert-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/basic.texi b/doc/emacs/basic.texi
index bec7774..2594608 100644
--- a/doc/emacs/basic.texi
+++ b/doc/emacs/basic.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Basic
diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi
index 54a8498..88a122c 100644
--- a/doc/emacs/buffers.texi
+++ b/doc/emacs/buffers.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Buffers
@@ -269,11 +269,16 @@ can also be used to copy text from one buffer to another.
 @section Killing Buffers
 
 @cindex killing buffers
address@hidden close buffer
address@hidden close file
   If you continue an Emacs session for a while, you may accumulate a
 large number of buffers.  You may then find it convenient to @dfn{kill}
-the buffers you no longer need.  On most operating systems, killing a
-buffer releases its space back to the operating system so that other
-programs can use it.  Here are some commands for killing buffers:
+the buffers you no longer need.  (Some other editors call this
+operation @dfn{close}, and talk about ``closing the buffer'' or
+``closing the file'' visited in the buffer.)  On most operating
+systems, killing a buffer releases its space back to the operating
+system so that other programs can use it.  Here are some commands for
+killing buffers:
 
 @table @kbd
 @item C-x k @var{bufname} @key{RET}
diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index e0ed11f..b0e6538 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Building
@@ -1358,7 +1358,7 @@ searches through each directory in the Emacs Lisp load 
path, trying to
 find a file matching that library name.  If the library name is
 @address@hidden, it tries looking for files named
 @address@hidden, @address@hidden, and @address@hidden  The
-default behaviour is to load the first file found.  This command
+default behavior is to load the first file found.  This command
 prefers @file{.elc} files over @file{.el} files because compiled files
 load and run faster.  If it finds that @address@hidden is newer
 than @address@hidden, it issues a warning, in case someone made
diff --git a/doc/emacs/cal-xtra.texi b/doc/emacs/cal-xtra.texi
index cf1eba1..f271be1 100644
--- a/doc/emacs/cal-xtra.texi
+++ b/doc/emacs/cal-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.  -*- coding: utf-8 -*-
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi
index 0722688..d3f3a55 100644
--- a/doc/emacs/calendar.texi
+++ b/doc/emacs/calendar.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.  -*- coding: utf-8 -*-
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Calendar/Diary
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index b438281..42c8e33 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Emacs Invocation
@@ -165,9 +165,12 @@ Evaluate Lisp expression @var{expression}.
 @item address@hidden
 @opindex --insert
 @cindex insert file contents, command-line argument
-Insert the contents of @var{file} into the @file{*scratch*} buffer
-(@pxref{Lisp Interaction}).  This is like what @kbd{M-x insert-file}
-does (@pxref{Misc File Ops}).
+Insert the contents of @var{file} into the buffer that is current when
+this command-line argument is processed.  Usually, this is the
address@hidden buffer (@pxref{Lisp Interaction}), but if arguments
+earlier on the command line visit files or switch buffers, that might
+be a different buffer.  The effect of this command-line argument is
+like what @kbd{M-x insert-file} does (@pxref{Misc File Ops}).
 
 @item --kill
 @opindex --kill
diff --git a/doc/emacs/commands.texi b/doc/emacs/commands.texi
index d9eba2d..fb77c77 100644
--- a/doc/emacs/commands.texi
+++ b/doc/emacs/commands.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index 0d0013f..095e49b 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Customization
@@ -405,6 +405,16 @@ customizations in your initialization file.  This is 
because saving
 customizations from such a session would wipe out all the other
 customizations you might have on your initialization file.
 
+  Please note that any customizations you have not chosen to save for
+future sessions will be lost when you terminate Emacs.  If you'd like
+to be prompted about unsaved customizations at termination time, add
+the following to your initialization file:
+
address@hidden
+(add-hook 'kill-emacs-query-functions
+          'custom-prompt-customize-unsaved-options)
address@hidden example
+
 @node Face Customization
 @subsection Customizing Faces
 @cindex customizing faces
diff --git a/doc/emacs/dired-xtra.texi b/doc/emacs/dired-xtra.texi
index f8719e8..2b9ddae 100644
--- a/doc/emacs/dired-xtra.texi
+++ b/doc/emacs/dired-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi
index c7dace6..141bb66 100644
--- a/doc/emacs/dired.texi
+++ b/doc/emacs/dired.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Dired
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index a5555d5..ae723b8 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 
 @c See file emacs.texi for copying conditions.
@@ -127,6 +127,19 @@ the mouse wheel (@pxref{Mouse Commands}); in general, it 
affects any
 command that has a address@hidden @code{scroll-command} property.
 @xref{Property Lists,,, elisp, The Emacs Lisp Reference Manual}.
 
address@hidden fast-but-imprecise-scrolling
+  Sometimes, particularly when you hold down keys such as @kbd{C-v}
+and @kbd{M-v}, activating keyboard auto-repeat, Emacs fails to keep up
+with the rapid rate of scrolling requested; the display doesn't update
+and Emacs can become unresponsive to input for quite a long time.  You
+can counter this sluggishness by setting the variable
address@hidden to a address@hidden value.  This
+instructs the scrolling commands not to fontify (@pxref{Font Lock})
+any unfontified text they scroll over, instead to assume it has the
+default face.  This can cause Emacs to scroll to somewhat wrong buffer
+positions when the faces in use are not all the same size, even with
+single (i.e. without auto-repeat) scrolling operations.
+
 @vindex scroll-up
 @vindex scroll-down
 @findex scroll-up-line
diff --git a/doc/emacs/emacs-xtra.texi b/doc/emacs/emacs-xtra.texi
index ba2b0f0..fcedf73 100644
--- a/doc/emacs/emacs-xtra.texi
+++ b/doc/emacs/emacs-xtra.texi
@@ -11,7 +11,7 @@
 @copying
 This manual describes specialized features of Emacs.
 
-Copyright @copyright{} 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index 702aa64..c1ad688 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -26,7 +26,7 @@ This is the @cite{GNU Emacs Manual},
 @end ifnottex
 updated for Emacs version @value{EMACSVER}.
 
-Copyright @copyright{} 1985--1987, 1993--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1985--1987, 1993--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -189,6 +189,7 @@ Advanced Features
 * Sending Mail::        Sending mail in Emacs.
 * Rmail::               Reading mail in Emacs.
 * Gnus::                A flexible mail and news reader.
+* Network Security::    Managing the network security.
 * Document View::       Viewing PDF, PS and DVI files.
 * EWW::                 A web browser in Emacs.
 * Shell::               Executing shell commands from Emacs.
diff --git a/doc/emacs/emerge-xtra.texi b/doc/emacs/emerge-xtra.texi
index bb39136..25bbcaa 100644
--- a/doc/emacs/emerge-xtra.texi
+++ b/doc/emacs/emerge-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/entering.texi b/doc/emacs/entering.texi
index f8ab4eb..fc9ea38 100644
--- a/doc/emacs/entering.texi
+++ b/doc/emacs/entering.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index ee80c49..b12b28f 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Files
@@ -1689,6 +1689,13 @@ likewise.  @kbd{v} extracts a file into a buffer in View 
mode
 another window, so you could edit the file and operate on the archive
 simultaneously.
 
+  The @kbd{I} key adds a new (regular) file to the archive.  The file
+is initially empty, but can readily be edited using the commands
+above.  The command inserts the new file before the current one, so
+that using it on the topmost line of the Tar buffer makes the new file
+the first one in the archive, and using it at the end of the buffer
+makes it the last one.
+
   @kbd{d} marks a file for deletion when you later use @kbd{x}, and
 @kbd{u} unmarks a file, as in Dired.  @kbd{C} copies a file from the
 archive to disk and @kbd{R} renames a file within the archive.
diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi
index a5b571d..9c3f36a 100644
--- a/doc/emacs/fixit.texi
+++ b/doc/emacs/fixit.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Fixit
diff --git a/doc/emacs/fortran-xtra.texi b/doc/emacs/fortran-xtra.texi
index 79ea410..155e998 100644
--- a/doc/emacs/fortran-xtra.texi
+++ b/doc/emacs/fortran-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index 27380cd..b5b9dbd 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Frames
diff --git a/doc/emacs/glossary.texi b/doc/emacs/glossary.texi
index 9da83bb..a764c25 100644
--- a/doc/emacs/glossary.texi
+++ b/doc/emacs/glossary.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Glossary
diff --git a/doc/emacs/gnu.texi b/doc/emacs/gnu.texi
index 4eb3672..327ee3c 100644
--- a/doc/emacs/gnu.texi
+++ b/doc/emacs/gnu.texi
@@ -1,4 +1,4 @@
address@hidden Copyright (C) 1985-1987, 1993, 1995, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993, 1995, 2001-2015 Free Software
 @c Foundation, Inc.
 @c
 @c Permission is granted to anyone to make or distribute verbatim copies
diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi
index 22bebed..d8e84c1 100644
--- a/doc/emacs/help.texi
+++ b/doc/emacs/help.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Help
diff --git a/doc/emacs/indent.texi b/doc/emacs/indent.texi
index b254cfc..10cd131 100644
--- a/doc/emacs/indent.texi
+++ b/doc/emacs/indent.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Indentation
diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi
index e258d1c..3092d34 100644
--- a/doc/emacs/killing.texi
+++ b/doc/emacs/killing.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 
diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi
index 881c7ea..039358b 100644
--- a/doc/emacs/kmacro.texi
+++ b/doc/emacs/kmacro.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Keyboard Macros
diff --git a/doc/emacs/m-x.texi b/doc/emacs/m-x.texi
index b4385cb..c9ae559 100644
--- a/doc/emacs/m-x.texi
+++ b/doc/emacs/m-x.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node M-x
diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi
index 048b49c..a93cbfb 100644
--- a/doc/emacs/macos.texi
+++ b/doc/emacs/macos.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2000-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2000-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Mac OS / GNUstep
 @appendix Emacs and Mac OS / GNUstep
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index e066c49..9074cdf 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual., Abbrevs, This is part of the Emacs 
manual., Top
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Maintaining
@@ -31,11 +31,11 @@ versions of a source file, storing information such as the 
creation
 time of each version, who made it, and a description of what was
 changed.
 
-  The Emacs version control interface is called @address@hidden  VC commands
-work with several different version control systems; currently, it
-supports GNU Arch, Bazaar, CVS, Git, Mercurial, Monotone, RCS,
+  The Emacs version control interface is called @address@hidden  VC
+commands work with several different version control systems;
+currently, it supports Bazaar, CVS, Git, Mercurial, Monotone, RCS,
 SCCS/CSSC, and Subversion.  Of these, the GNU project distributes CVS,
-Arch, RCS, and Bazaar.
+RCS, and Bazaar.
 
   VC is enabled automatically whenever you visit a file governed by a
 version control system.  To disable VC entirely, set the customizable
@@ -163,14 +163,6 @@ similar to CVS but without its problems (e.g., it supports 
atomic
 commits of filesets, and versioning of directories, symbolic links,
 meta-data, renames, copies, and deletes).
 
address@hidden GNU Arch
address@hidden Arch
address@hidden
-GNU Arch is one of the earliest @dfn{decentralized} version control
-systems (the other being Monotone).  @xref{VCS Concepts}, for a
-description of decentralized version control systems.  It is no longer
-under active development, and has been deprecated in favor of Bazaar.
-
 @cindex git
 @item
 Git is a decentralized version control system originally invented by
@@ -191,6 +183,18 @@ exception of repository sync operations.
 Bazaar (bzr) is a decentralized version control system that supports
 both repository-based and decentralized versioning.  VC supports most
 basic editing operations under Bazaar.
+
address@hidden SRC
address@hidden src
address@hidden
+SRC (src) is RCS, reloaded - a specialized version-control system
+designed for single-file projects worked on by only one person. It
+allows multiple files with independent version-control histories to
+exist in one directory, and is thus particularly well suited for
+maintaining small documents, scripts, and dotfiles.  While it uses RCS
+for revision storage, it presents a modern user interface featuring
+lockless operation and integer sequential version numbers.  VC
+supports almost all SRC operations.
 @end itemize
 
 @node VCS Concepts
@@ -268,8 +272,8 @@ number and severity of conflicts that actually occur.
   SCCS always uses locking.  RCS is lock-based by default but can be
 told to operate in a merging style.  CVS and Subversion are
 merge-based by default but can be told to operate in a locking mode.
-Decentralized version control systems, such as GNU Arch, Git, and
-Mercurial, are exclusively merging-based.
+Decentralized version control systems, such as Git and Mercurial, are
+exclusively merging-based.
 
   VC mode supports both locking and merging version control.  The
 terms ``commit'' and ``update'' are used in newer version control
@@ -1014,8 +1018,6 @@ Revert the work file(s) in the current VC fileset to the 
last revision
 (@code{vc-revert}).
 @end table
 
address@hidden `C-x v c' (vc-rollback) was removed, since it's RCS/SCCS 
specific.
-
 @kindex C-x v u
 @findex vc-revert
 @vindex vc-revert-show-diff
@@ -1317,11 +1319,18 @@ implemented, and these differences cannot be entirely 
concealed by VC.
   On some decentralized version control systems, including Bazaar and
 Mercurial in its normal mode of operation, each branch has its own
 working directory tree, so switching between branches just involves
-switching directories.  On Git, switching between branches is done
-using the @command{git branch} command, which changes the contents of
-the working tree itself.
-
-  On centralized version control systems, you can switch between
+switching directories.  On Git, branches are normally @dfn{co-located}
+in the same directory, and switching between branches is done using
+the @command{git checkout} command, which changes the contents of the
+working tree to match the branch you switch to.  Bazaar also supports
+co-located branches, in which case the @command{bzr switch} command
+will switch branches in the current directory.  With Subversion, you
+switch to another branch using the @command{svn switch} command.
+
+  The VC command to switch to another branch in the current directory
+is @kbd{C-x v r @var{branch-name} @key{RET}} (@code{vc-retrieve-tag}).
+
+  On centralized version control systems, you can also switch between
 branches by typing @kbd{C-u C-x v v} in an up-to-date work file
 (@pxref{Advanced C-x v v}), and entering the revision ID for a
 revision on another branch.  On CVS, for instance, revisions on the
@@ -1467,9 +1476,11 @@ different revision with @kbd{C-u C-x v v}.
 @cindex change log
   Many software projects keep a @dfn{change log}.  This is a file,
 normally named @file{ChangeLog}, containing a chronological record of
-when and how the program was changed.  Sometimes, there are several
-change log files, each recording the changes in one directory or
-directory tree.
+when and how the program was changed.  Sometimes, these files are
+automatically generated from the change log entries stored in version
+control systems, or are used to generate these change log entries.
+Sometimes, there are several change log files, each recording the
+changes in one directory or directory tree.
 
 @menu
 * Change Log Commands:: Commands for editing change log files.
diff --git a/doc/emacs/makefile.w32-in b/doc/emacs/makefile.w32-in
index d492a50..91f9d37 100644
--- a/doc/emacs/makefile.w32-in
+++ b/doc/emacs/makefile.w32-in
@@ -1,6 +1,6 @@
 #### -*- Makefile -*- for the Emacs Manual
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/emacs/mark.texi b/doc/emacs/mark.texi
index e3cda04..c975f6e 100644
--- a/doc/emacs/mark.texi
+++ b/doc/emacs/mark.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Mark
diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi
index a87aff0..2a86af3 100644
--- a/doc/emacs/mini.texi
+++ b/doc/emacs/mini.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Minibuffer
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index af5ced7..e12fca7 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1,6 +1,6 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014
address@hidden   Free Software Foundation, Inc.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
address@hidden Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
 @chapter Miscellaneous Commands
@@ -249,6 +249,126 @@ Search forward for articles containing a match for 
@var{regexp}.
 Exit the summary buffer and return to the group buffer.
 @end table
 
+
address@hidden Network Security
address@hidden Network Security
address@hidden network security manager
address@hidden NSM
address@hidden encryption
address@hidden SSL
address@hidden TLS
address@hidden STARTTLS
+
+Whenever Emacs establishes any network connection, it passes the
+established connection to the @dfn{Network Security Manager}
+(@acronym{NSM}).  @acronym{NSM} is responsible for enforcing the
+network security under your control.
+
address@hidden network-security-level
+The @code{network-security-level} variable determines the security
+level that @acronym{NSM} enforces.  If its value is @code{low}, no
+security checks are performed.
+
+If this variable is @code{medium} (which is the default), a number of
+checks will be performed.  If as result @acronym{NSM} determines that
+the network connection might not be trustworthy, it will make you
+aware of that, and will ask you what to do about the network
+connection.
+
+You can decide to register a permanent security exception for an
+unverified connection, a temporary exception, or refuse the connection
+entirely.
+
+Below is a list of the checks done on the @code{medium} level.
+
address@hidden @asis
+
address@hidden unable to verify a @acronym{TLS} certificate
+If the connection is a @acronym{TLS}, @acronym{SSL} or
address@hidden connection, @acronym{NSM} will check whether
+the certificate used to establish the identity of the server we're
+connecting to can be verified.
+
+While an invalid certificate is often the cause for concern (there
+could be a Man-in-the-Middle hijacking your network connection and
+stealing your password), there may be valid reasons for going ahead
+with the connection anyway.  For instance, the server may be using a
+self-signed certificate, or the certificate may have expired.  It's up
+to you to determine whether it's acceptable to continue with the
+connection.
+
address@hidden a self-signed certificate has changed
+If you've previously accepted a self-signed certificate, but it has
+now changed, that could mean that the server has just changed the
+certificate, but it might also mean that the network connection has
+been hijacked.
+
address@hidden previously encrypted connection now unencrypted
+If the connection is unencrypted, but it was encrypted in previous
+sessions, this might mean that there is a proxy between you and the
+server that strips away @acronym{STARTTLS} announcements, leaving the
+connection unencrypted.  This is usually very suspicious.
+
address@hidden talking to an unencrypted service when sending a password
+When connecting to an @acronym{IMAP} or @acronym{POP3} server, these
+should usually be encrypted, because it's common to send passwords
+over these connections.  Similarly, if you're sending email via
address@hidden that requires a password, you usually want that
+connection to be encrypted.  If the connection isn't encrypted,
address@hidden will warn you.
+
address@hidden table
+
+If @code{network-security-level} is @code{high}, the following checks
+will be made, in addition to the above:
+
address@hidden @asis
address@hidden a validated certificate changes the public key
+Servers change their keys occasionally, and that is normally nothing
+to be concerned about.  However, if you are worried that your network
+connections are being hijacked by agencies who have access to pliable
+Certificate Authorities which issue new certificates for third-party
+services, you may want to keep track of these changes.
+
address@hidden Diffie-Hellman low prime bits
+When doing the public key exchange, the number of ``prime bits''
+should be high to ensure that the channel can't be eavesdropped on by
+third parties.  If this number is too low, you will be warned.
+
address@hidden @acronym{RC4} stream cipher
+The @acronym{RC4} stream cipher is believed to be of low quality and
+may allow eavesdropping by third parties.
+
address@hidden @acronym{SSL1}, @acronym{SSL2} and @acronym{SSL3}
+The protocols older than @acronym{TLS1.0} are believed to be
+vulnerable to a variety of attacks, and you may want to avoid using
+these if what you're doing requires higher security.
address@hidden table
+
+Finally, if @code{network-security-level} is @code{paranoid}, you will
+also be notified the first time @acronym{NSM} sees any new
+certificate.  This will allow you to inspect all the certificates from
+all the connections that Emacs makes.
+
+The following additional variables can be used to control details of
address@hidden operation:
+
address@hidden @code
address@hidden nsm-settings-file
address@hidden nsm-settings-file
+This is the file where @acronym{NSM} stores details about connections.
+It defaults to @file{~/.emacs.d/network-security.data}.
+
address@hidden nsm-save-host-names
address@hidden nsm-save-host-names
+By default, host names will not be saved for address@hidden
+connections.  Instead a host/port hash is used to identify connections.
+This means that one can't casually read the settings file to see what
+servers the user has connected to.  If this variable is @code{t},
address@hidden will also save host names in the nsm-settings-file.
address@hidden table
+
+
 @node Document View
 @section Document Viewing
 @cindex DVI file
@@ -419,12 +539,14 @@ and the slice's width and height.
 
   A more convenient graphical way to specify the slice is with @kbd{s
 m} (@code{doc-view-set-slice-using-mouse}), where you use the mouse to
-select the slice.
address@hidden ??? How does this work?
+select the slice.  Simply press and hold the left mouse button at the
+upper-left corner of the region you want to have in the slice, then
+move the mouse pointer to the lower-right corner and release the
+button.
 
   The most convenient way is to set the optimal slice by using
 BoundingBox information automatically determined from the document by
-typing @kbd{s b} (@code{doc-view-set-slice-using-mouse}).
+typing @kbd{s b} (@code{doc-view-set-slice-from-bounding-box}).
 
 @findex doc-view-reset-slice
   To cancel the selected slice, type @kbd{s r}
diff --git a/doc/emacs/modes.texi b/doc/emacs/modes.texi
index b21be99..0e8f46a 100644
--- a/doc/emacs/modes.texi
+++ b/doc/emacs/modes.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Modes
diff --git a/doc/emacs/msdos-xtra.texi b/doc/emacs/msdos-xtra.texi
index c8f587c..b0fa3e9 100644
--- a/doc/emacs/msdos-xtra.texi
+++ b/doc/emacs/msdos-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/msdos.texi b/doc/emacs/msdos.texi
index a4d61e2..b5a6650 100644
--- a/doc/emacs/msdos.texi
+++ b/doc/emacs/msdos.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Microsoft Windows
diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi
index 27c10c9..bea06f5 100644
--- a/doc/emacs/mule.texi
+++ b/doc/emacs/mule.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1997, 1999-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1997, 1999-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node International
 @chapter International Character Set Support
diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi
index 136eff7..e464666 100644
--- a/doc/emacs/package.texi
+++ b/doc/emacs/package.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Packages
diff --git a/doc/emacs/picture-xtra.texi b/doc/emacs/picture-xtra.texi
index 6f29e92..6be84bd 100644
--- a/doc/emacs/picture-xtra.texi
+++ b/doc/emacs/picture-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi
index f2ca386..609392f 100644
--- a/doc/emacs/programs.texi
+++ b/doc/emacs/programs.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Programs
@@ -546,7 +546,7 @@ your selected @dfn{style} with the syntactic construct and 
adds this
 onto the indentation of the @dfn{anchor statement}.
 
 @table @kbd
address@hidden C-c . @key{RET} @var{style} @key{RET}
address@hidden C-c . @var{style} @key{RET}
 Select a predefined style @var{style} (@code{c-set-style}).
 @end table
 
diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi
index bc4abb3..dc53c3b 100644
--- a/doc/emacs/regs.texi
+++ b/doc/emacs/regs.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Registers
diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi
index 6fab25a..0c39ea7 100644
--- a/doc/emacs/rmail.texi
+++ b/doc/emacs/rmail.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Rmail
diff --git a/doc/emacs/screen.texi b/doc/emacs/screen.texi
index 3c25426..920aa08 100644
--- a/doc/emacs/screen.texi
+++ b/doc/emacs/screen.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Screen
diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi
index a0c59c6..e91e2c4 100644
--- a/doc/emacs/search.texi
+++ b/doc/emacs/search.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Search
diff --git a/doc/emacs/sending.texi b/doc/emacs/sending.texi
index 02b38cc..b4bdb93 100644
--- a/doc/emacs/sending.texi
+++ b/doc/emacs/sending.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Sending Mail
diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi
index cebbdf9..11b916a 100644
--- a/doc/emacs/text.texi
+++ b/doc/emacs/text.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Text
diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi
index 09260a1..2faa5d9 100644
--- a/doc/emacs/trouble.texi
+++ b/doc/emacs/trouble.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
@@ -1060,19 +1060,44 @@ but using it will take extra work.  Maintaining GNU 
Emacs is a lot of
 work in the best of circumstances, and we can't keep up unless you do
 your best to help.
 
+Every patch must have several pieces of information before we
+can properly evaluate it.
+
+When you have all these pieces, bundle them up in a mail message and
+send it to the developers.  Sending it to
address@hidden@@gnu.org} (which is the bug/feature list) is
+recommended, because that list is coupled to a tracking system that
+makes it easier to locate patches.  If your patch is not complete and
+you think it needs more discussion, you might want to send it to
address@hidden@@gnu@@gnu.org} instead.  If you revise your patch,
+send it as a followup to the initial topic.
+
+We prefer to get the patches as plain text, either inline (be careful
+your mail client does not change line breaks) or as MIME attachments.
+
 @itemize @bullet
 @item
-Send an explanation with your changes of what problem they fix or what
-improvement they bring about.  For a fix for an existing bug, it is
+Include an explanation with your changes of what problem they fix or what
+improvement they bring about.
+
address@hidden
address@hidden
+For a fix for an existing bug, it is
 best to reply to the relevant discussion on the @samp{bug-gnu-emacs}
 list, or the bug entry in the GNU Bug Tracker at
 @url{http://debbugs.gnu.org}.  Explain why your change fixes the bug.
 
 @item
-Always include a proper bug report for the problem you think you have
-fixed.  We need to convince ourselves that the change is right before
-installing it.  Even if it is correct, we might have trouble
-understanding it if we don't have a way to reproduce the problem.
+For a new feature, include a description of the feature and your
+implementation.
+
address@hidden
+For a new bug, include a proper bug report for the problem you think
+you have fixed.  We need to convince ourselves that the change is
+right before installing it.  Even if it is correct, we might have
+trouble understanding it if we don't have a way to reproduce the
+problem.
address@hidden itemize
 
 @item
 Include all the comments that are appropriate to help people reading the
@@ -1104,6 +1129,8 @@ right away.  That gives us the option of installing it 
immediately if it
 is important.
 
 @item
+The patch itself.
+
 Use @samp{diff -c} to make your diffs.  Diffs without context are hard
 to install reliably.  More than that, they are hard to study; we must
 always study a patch to decide whether we want to install it.  Unidiff
@@ -1114,6 +1141,12 @@ If you have GNU diff, use @samp{diff -c 
-F'^[_a-zA-Z0-9$]+ *('} when
 making diffs of C code.  This shows the name of the function that each
 change occurs in.
 
+If you are using the Emacs repository, make sure your copy is
+up-to-date (e.g. with @code{git pull}).  You can commit your changes
+to a private branch and generate a patch from the master version by
+using @code{git format-patch master}. Or you can leave your changes
+uncommitted and use @code{git diff}.
+
 @item
 Avoid any ambiguity as to which is the old version and which is the new.
 Please make the old version the first argument to diff, and the new
@@ -1137,9 +1170,17 @@ new function, all you need to say about it is that it is 
new.  If you
 feel that the purpose needs explaining, it probably does---but put the
 explanation in comments in the code.  It will be more useful there.
 
-Please read the @file{ChangeLog} files in the @file{src} and
address@hidden directories to see what sorts of information to put in,
-and to learn the style that we use.  @xref{Change Log}.
+Please look at the change log entries of recent commits to see what
+sorts of information to put in, and to learn the style that we use. Note that,
+unlike some other projects, we do require change logs for
+documentation, i.e. Texinfo files.
address@hidden Log},
address@hidden WWW_GNU_ORG
+see
address@hidden://www.gnu.org/prep/standards/html_node/Change-Log-Concepts.html},
address@hidden ifset
address@hidden Log Concepts, Change Log Concepts,
+Change Log Concepts, gnu-coding-standards, GNU Coding Standards}.
 
 @item
 When you write the fix, keep in mind that we can't install a change that
@@ -1160,11 +1201,52 @@ Please help us keep up with the workload by designing 
the patch in a
 form that is clearly safe to install.
 @end itemize
 
address@hidden FIXME: Include the node above?
 @node Contributing
 @section Contributing to Emacs Development
 @cindex contributing to Emacs
 
+Emacs is a collaborative project and we encourage contributions from
+anyone and everyone.
+
+There are many ways to contribute to Emacs:
+
address@hidden
address@hidden
+find and report bugs; @xref{Bugs}.
+
address@hidden
+answer questions on the Emacs user mailing list
address@hidden://lists.gnu.org/mailman/listinfo/help-gnu-emacs}.
+
address@hidden
+write documentation, either on the wiki, or in the Emacs source
+repository (@pxref{Sending Patches}).
+
address@hidden
+check if existing bug reports are fixed in newer versions of Emacs
address@hidden://debbugs.gnu.org/cgi/pkgreport.cgi?which=pkg&data=emacs}.
+
address@hidden
+fix existing bug reports
address@hidden://debbugs.gnu.org/cgi/pkgreport.cgi?which=pkg&data=emacs}.
+
address@hidden
address@hidden etc/TODO not in WWW_GNU_ORG
+implement a feature listed in the @file{etc/TODO} file in the Emacs
+distribution, and submit a patch.
+
address@hidden
+implement a new feature, and submit a patch.
+
address@hidden
+develop a package that works with Emacs, and publish it on your own
+or in Gnu ELPA (@url{https://elpa.gnu.org/}).
+
address@hidden
+port Emacs to a new platform, but that is not common nowadays.
+
address@hidden itemize
+
 If you would like to work on improving Emacs, please contact the maintainers at
 @ifnothtml
 @email{emacs-devel@@gnu.org}.
@@ -1186,24 +1268,148 @@ you have not yet started work, it is useful to contact
 before you start; it might be possible to suggest ways to make your
 extension fit in better with the rest of Emacs.
 
+When implementing a feature, please follow the Emacs coding standards;
address@hidden Standards}. In addition, non-trivial contributions
+require a copyright assignment to the FSF; @xref{Copyright Assignment}.
+
 The development version of Emacs can be downloaded from the
 repository where it is actively maintained by a group of developers.
 See the Emacs project page
address@hidden://savannah.gnu.org/projects/emacs/} for details.
address@hidden://savannah.gnu.org/projects/emacs/} for access details.
+
+It is important to write your patch based on the current working
+version.  If you start from an older version, your patch may be
+outdated (so that maintainers will have a hard time applying it), or
+changes in Emacs may have made your patch unnecessary. After you have
+downloaded the repository source, you should read the file
address@hidden for build instructions (they differ to some extent
+from a normal build).
+
+If you would like to make more extensive contributions, see the
address@hidden/CONTRIBUTE} file in the Emacs distribution for information on
+how to be an Emacs developer.
+
+For documentation on Emacs (to understand how to implement your
+desired change), refer to:
+
address@hidden
address@hidden
address@hidden WWW_GNU_ORG
address@hidden
+the Emacs Manual
address@hidden://www.gnu.org/software/emacs/manual/emacs.html}.
address@hidden ifhtml
address@hidden
address@hidden, Emacs Manual,,emacs}.
address@hidden ifnothtml
address@hidden ifset
address@hidden WWW_GNU_ORG
address@hidden, Emacs Manual,,emacs}.
address@hidden ifclear
+
address@hidden
address@hidden WWW_GNU_ORG
address@hidden
+the Emacs Lisp Reference Manual
address@hidden://www.gnu.org/software/emacs/manual/elisp.html}.
address@hidden ifhtml
address@hidden
address@hidden, Emacs Lisp Reference Manual,,elisp}.
address@hidden ifnothtml
address@hidden ifset
address@hidden WWW_GNU_ORG
address@hidden, Emacs Lisp Reference Manual,,elisp}.
address@hidden ifclear
+
address@hidden
address@hidden://www.gnu.org/software/emacs}
+
address@hidden
address@hidden://www.emacswiki.org/}
address@hidden itemize
+
address@hidden
+* Coding Standards::        Gnu Emacs coding standards
+* Copyright Assignment::    assigning copyright to the FSF
address@hidden menu
 
-For more information on how to contribute, see the
address@hidden Coding Standards
address@hidden Coding Standards
address@hidden coding standards
+
+Contributed code should follow the GNU Coding Standards
address@hidden://www.gnu.org/prep/standards/}. This may also be available
+in info on your system.
+
+If it doesn't, we'll need to find someone to fix the code before we
+can use it.
+
+Emacs has additional style and coding conventions:
+
address@hidden
address@hidden
 @ifset WWW_GNU_ORG
 @ifhtml
address@hidden://gnu.org/software/emacs/CONTRIBUTE, etc/CONTRIBUTE}
+the "Tips" Appendix in the Emacs Lisp Reference
address@hidden://www.gnu.org/software/emacs/manual/html_node/elisp/Tips.html}.
 @end ifhtml
 @ifnothtml
address@hidden/CONTRIBUTE}
address@hidden, "Tips" Appendix in the Emacs Lisp Reference, Tips
+Appendix, elisp, Emacs Lisp Reference}.
 @end ifnothtml
 @end ifset
 @ifclear WWW_GNU_ORG
address@hidden/CONTRIBUTE}
address@hidden, "Tips" Appendix in the Emacs Lisp Reference, Tips
+Appendix, elisp, Emacs Lisp Reference}.
 @end ifclear
-file in the Emacs distribution.
+
address@hidden
+Avoid using @code{defadvice} or @code{eval-after-load} for Lisp code
+to be included in Emacs.
+
address@hidden
+Remove all trailing whitespace in all source and text files.
+
address@hidden
+Emacs has no convention on whether to use tabs in source code; please
+don't change whitespace in the files you edit.
+
address@hidden
+Use @code{?\s} instead of @code{? } in Lisp code for a space character.
+
address@hidden itemize
+
address@hidden Copyright Assignment
address@hidden Copyright Assignment
address@hidden copyright assignment
+
+The FSF (Free Software Foundation) is the copyright holder for GNU Emacs.
+The FSF is a nonprofit with a worldwide mission to promote computer
+user freedom and to defend the rights of all free software users.
+For general information, see the website @url{http://www.fsf.org/}.
+
+Generally speaking, for non-trivial contributions to GNU Emacs we
+require that the copyright be assigned to the FSF.  For the reasons
+behind this, see @url{http://www.gnu.org/licenses/why-assign.html}.
+
+Copyright assignment is a simple process.  Residents of some countries
+can do it entirely electronically.  We can help you get started, and
+answer any questions you may have (or point you to the people with the
+answers), at the @email{emacs-devel@@gnu.org} mailing list.
+
+(Please note: general discussion about why some GNU projects ask
+for a copyright assignment is off-topic for emacs-devel.
+See gnu-misc-discuss instead.)
+
+A copyright disclaimer is also a possibility, but we prefer an assignment.
+Note that the disclaimer, like an assignment, involves you sending
+signed paperwork to the FSF (simply saying "this is in the public domain"
+is not enough).  Also, a disclaimer cannot be applied to future work, it
+has to be repeated each time you want to send something new.
+
+We can accept small changes (roughly, fewer than 15 lines) without
+an assignment.  This is a cumulative limit (e.g. three separate 5 line
+patches) over all your contributions.
 
 @node Service
 @section How To Get Help with GNU Emacs
@@ -1211,8 +1417,8 @@ file in the Emacs distribution.
 @cindex help-gnu-emacs mailing list
 @cindex gnu.emacs.help newsgroup
 
-If you need help installing, using or changing GNU Emacs, there are two
-ways to find it:
+If you need help installing, using or changing GNU Emacs, there are
+two ways to find it:
 
 @itemize @bullet
 @item
diff --git a/doc/emacs/vc-xtra.texi b/doc/emacs/vc-xtra.texi
index 52fee14..d224043 100644
--- a/doc/emacs/vc-xtra.texi
+++ b/doc/emacs/vc-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included in emacs-xtra.texi when producing the printed
diff --git a/doc/emacs/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi
index dd52d977..a2bf249 100644
--- a/doc/emacs/vc1-xtra.texi
+++ b/doc/emacs/vc1-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in vc-xtra.texi (when producing the
diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi
index 4045908..98bc532 100644
--- a/doc/emacs/windows.texi
+++ b/doc/emacs/windows.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
address@hidden Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Windows
diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi
index b372708..25552d1 100644
--- a/doc/emacs/xresources.texi
+++ b/doc/emacs/xresources.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 1987, 1993-1995, 1997, 2001-2014 Free Software
address@hidden Copyright (C) 1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node X Resources
diff --git a/doc/lispintro/.gitignore b/doc/lispintro/.gitignore
deleted file mode 100644
index e1af5a9..0000000
--- a/doc/lispintro/.gitignore
+++ /dev/null
@@ -1,21 +0,0 @@
-*.aux
-*.fn
-*.fns
-*.cps
-*.cp
-*.kys
-*.ky
-*.toc
-*.pgs
-*.pg
-*.log
-*.vrs
-*.vr
-*.dvi
-*.ps
-*.tp
-*.tps
-*.tmp
-*.txt
-Makefile
-makefile
diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog
index 572875c..57ab03b 100644
--- a/doc/lispintro/ChangeLog
+++ b/doc/lispintro/ChangeLog
@@ -1,3 +1,11 @@
+2014-12-31  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for Emacs doc
+       * Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
+       (am__v_GEN_0, am__v_GEN_1): New macros, from ../../src/Makefile.in.
+       (ENVADD, $(buildinfodir)/eintr.info, emacs-lisp-intro.html):
+       Use them.
+
 2014-11-09  Glenn Morris  <address@hidden>
 
        * Makefile.in (version): Remove variable.
@@ -770,7 +778,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/lispintro/Makefile.in b/doc/lispintro/Makefile.in
index 4bcbb53..ba63ee8 100644
--- a/doc/lispintro/Makefile.in
+++ b/doc/lispintro/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994-1999, 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-1999, 2001-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -55,8 +55,17 @@ TEXI2DVI = texi2dvi
 TEXI2PDF = texi2pdf
 DVIPS = dvips
 
-ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \
-         MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)"
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+ENVADD = \
+  $(AM_V_GEN)TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \
+  MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)"
 
 DVI_TARGETS = emacs-lisp-intro.dvi
 HTML_TARGETS = emacs-lisp-intro.html
@@ -83,7 +92,7 @@ ${buildinfodir}:
 # The file name eintr must fit within 5 characters, to allow for
 # -NN extensions to fit into DOS 8+3 limits without clashing.
 ${buildinfodir}/eintr.info: ${srcs} | ${buildinfodir}
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
 
 emacs-lisp-intro.dvi: ${srcs}
        $(ENVADD) $(TEXI2DVI) $<
@@ -92,7 +101,7 @@ emacs-lisp-intro.pdf: ${srcs}
        $(ENVADD) $(TEXI2PDF) $<
 
 emacs-lisp-intro.html: ${srcs}
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
 
 emacs-lisp-intro.ps: emacs-lisp-intro.dvi
        $(DVIPS) -o $@ $<
diff --git a/doc/lispintro/README b/doc/lispintro/README
index 872813e..e24f8f5 100644
--- a/doc/lispintro/README
+++ b/doc/lispintro/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/doc/lispintro/cons-1.eps b/doc/lispintro/cons-1.eps
index 06cc7cc..4853d6a 100644
--- a/doc/lispintro/cons-1.eps
+++ b/doc/lispintro/cons-1.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:26:58 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (address@hidden)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-2.eps b/doc/lispintro/cons-2.eps
index e942b62..258caa9 100644
--- a/doc/lispintro/cons-2.eps
+++ b/doc/lispintro/cons-2.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:26:39 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (address@hidden)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-2a.eps b/doc/lispintro/cons-2a.eps
index 847d02b..710f66e 100644
--- a/doc/lispintro/cons-2a.eps
+++ b/doc/lispintro/cons-2a.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Tue Mar 14 15:09:30 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (address@hidden)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-3.eps b/doc/lispintro/cons-3.eps
index b81dc4f..2849a31 100644
--- a/doc/lispintro/cons-3.eps
+++ b/doc/lispintro/cons-3.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:25:41 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (address@hidden)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-4.eps b/doc/lispintro/cons-4.eps
index 750878d..d933124 100644
--- a/doc/lispintro/cons-4.eps
+++ b/doc/lispintro/cons-4.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:25:06 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (address@hidden)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-5.eps b/doc/lispintro/cons-5.eps
index 14edd84..6ceec51 100644
--- a/doc/lispintro/cons-5.eps
+++ b/doc/lispintro/cons-5.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:27:28 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (address@hidden)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/drawers.eps b/doc/lispintro/drawers.eps
index ce96e7b..dcd27a6 100644
--- a/doc/lispintro/drawers.eps
+++ b/doc/lispintro/drawers.eps
@@ -9,7 +9,7 @@
 %%EndComments
 %%BeginProlog
 
-% Copyright (C) 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/emacs-lisp-intro.texi 
b/doc/lispintro/emacs-lisp-intro.texi
index f915d0d..b6eff2d 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -113,7 +113,7 @@ Edition @value{edition-number}, @value{update-date}
 Distributed with Emacs version @value{EMACSVER}.
 @end ifnottex
 @sp 1
-Copyright @copyright{} 1990--1995, 1997, 2001--2014 Free Software
+Copyright @copyright{} 1990--1995, 1997, 2001--2015 Free Software
 Foundation, Inc.
 @sp 1
 
diff --git a/doc/lispintro/lambda-1.eps b/doc/lispintro/lambda-1.eps
index 62025bd..21b180c 100644
--- a/doc/lispintro/lambda-1.eps
+++ b/doc/lispintro/lambda-1.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:31:53 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (address@hidden)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/lambda-2.eps b/doc/lispintro/lambda-2.eps
index c4c2b90..6eff61b 100644
--- a/doc/lispintro/lambda-2.eps
+++ b/doc/lispintro/lambda-2.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:33:09 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (address@hidden)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/lambda-3.eps b/doc/lispintro/lambda-3.eps
index 8103195..6ab2282 100644
--- a/doc/lispintro/lambda-3.eps
+++ b/doc/lispintro/lambda-3.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:33:49 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (address@hidden)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/makefile.w32-in b/doc/lispintro/makefile.w32-in
index 1767825..12e3a43 100644
--- a/doc/lispintro/makefile.w32-in
+++ b/doc/lispintro/makefile.w32-in
@@ -1,6 +1,6 @@
 #### -*- Makefile -*- for the Emacs Lisp Introduction manual.
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispref/.gitignore b/doc/lispref/.gitignore
deleted file mode 100644
index ba74d36..0000000
--- a/doc/lispref/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-texput.log
-elisp.??
-elisp.???
-config.log
-config.cache
-config.status
-Makefile
-makefile
-elisp
-elisp-?
-elisp-??
-elisp1* 
-elisp2*
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 6706f93..2cde2fb 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,7 +1,284 @@
+2015-01-28  Eli Zaretskii  <address@hidden>
+
+       * searching.texi (Regexp Search): Add a cross-reference to "Syntax
+       of Regexps".  (Bug#19668)
+
+2015-01-28  Daniel Koning  <address@hidden>  (tiny change)
+
+       * commands.texi (Drag Events, Motion Events, Event Examples)
+       (Accessing Mouse): Describe actual range of values that mouse
+       position objects can have.
+
+2015-01-28  Eli Zaretskii  <address@hidden>
+
+       * display.texi (Manipulating Buttons): Explain more about the
+       'action' property.  (Bug#19628)
+
+       * text.texi (Clickable Text): Improve indexing.  (Bug#19629)
+
+       * variables.texi (Creating Buffer-Local): Improve indexing.  (Bug#19608)
+
+       * frames.texi (Display Feature Testing): Make the description of
+       x-server-version and x-server-vendor less X-specific.  (Bug#19502)
+
+2015-01-15  Eli Zaretskii  <address@hidden>
+
+       * streams.texi (Input Functions): Document 'set-binary-mode'.
+       (Output Functions): Cross-reference to documentation of
+       'set-binary-mode'.
+
+2015-01-04  Paul Eggert  <address@hidden>
+
+       batch write-region no longer says "Wrote FOO"
+       * files.texi (Writing to Files): Document this.
+
+2014-12-31  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for Emacs doc
+       * Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
+       (am__v_GEN_0, am__v_GEN_1): New macros, from ../../src/Makefile.in.
+       (ENVADD, $(buildinfodir)/elisp.info, elisp.html):
+       Use them.
+
+2014-12-30  Martin Rudalics  <address@hidden>
+
+       * display.texi (Temporary Displays): Amend description of
+       `with-temp-buffer-window'.  Add descriptions for
+       `with-current-buffer-window', `with-displayed-buffer-window' and
+       `temp-buffer-resize-mode', `temp-buffer-max-height' and
+       `temp-buffer-max-width'.
+
+2014-12-29  Paul Eggert  <address@hidden>
+
+       * os.texi (System Environment): Update for system-name changes.
+
+2014-12-27  Glenn Morris  <address@hidden>
+
+       * control.texi (Pattern matching case statement):
+       * os.texi (Desktop Notifications):
+       * modes.texi (Defining Minor Modes, SMIE Lexer): Markup fixes.
+
+2014-12-27  Eli Zaretskii  <address@hidden>
+
+       * windows.texi (Recombining Windows): Index subject of sections.
+
+       * variables.texi (Variables with Restricted Values)
+       (Generalized Variables): Index subject of sections.
+
+       * text.texi (Buffer Contents, Examining Properties)
+       (Changing Properties, Property Search, Substitution): Index
+       subject of sections.
+
+       * syntax.texi (Motion and Syntax, Parsing Expressions)
+       (Motion via Parsing, Position Parse, Control Parsing): Index
+       subject of sections.
+
+       * strings.texi (Predicates for Strings, Creating Strings)
+       (Modifying Strings, Text Comparison): Index subject of sections.
+
+       * searching.texi (Syntax of Regexps, Regexp Special)
+       (Regexp Functions, Regexp Functions): Index subject of sections.
+
+       * processes.texi (Subprocess Creation, Process Information): Index
+       subject of sections.
+
+       * positions.texi (Screen Lines): Index subject of sections.
+
+       * nonascii.texi (Scanning Charsets, Specifying Coding Systems):
+       Index subject of sections.
+
+       * minibuf.texi (Text from Minibuffer, Object from Minibuffer)
+       (Multiple Queries, Minibuffer Contents): Index subject of
+       sections.
+
+       * markers.texi (Predicates on Markers, Creating Markers)
+       (Information from Markers, Moving Markers): Index subject of
+       sections.
+
+       * macros.texi (Defining Macros, Problems with Macros): Index
+       subject of sections.
+
+       * loading.texi (Loading Non-ASCII, Where Defined): Index subject
+       of sections.
+
+       * lists.texi (List-related Predicates, List Variables, Setcar)
+       (Setcdr, Plist Access): Index subject of sections.
+
+       * keymaps.texi (Controlling Active Maps, Scanning Keymaps)
+       (Modifying Menus): Index subject of sections.
+
+       * help.texi (Accessing Documentation, Help Functions): Index
+       subject of sections.
+
+       * hash.texi (Hash Access): Index subject of sections.
+
+       * functions.texi (Core Advising Primitives)
+       (Advising Named Functions, Porting old advices): Index subject of
+       sections.
+
+       * frames.texi (Creating Frames, Initial Parameters)
+       (Position Parameters, Buffer Parameters, Minibuffers and Frames)
+       (Pop-Up Menus, Drag and Drop): Index subject of sections.
+
+       * files.texi (Visiting Functions, Kinds of Files)
+       (Unique File Names): Index subject of sections.
+
+       * display.texi (Refresh Screen, Echo Area Customization)
+       (Warning Variables, Warning Options, Delayed Warnings)
+       (Temporary Displays, Managing Overlays, Overlay Properties)
+       (Finding Overlays, Size of Displayed Text, Defining Faces)
+       (Attribute Functions, Displaying Faces, Face Remapping)
+       (Basic Faces, Font Lookup, Fontsets, Replacing Specs)
+       (Defining Images, Showing Images): Index subject of sections.
+
+       * debugging.texi (Debugging, Explicit Debug)
+       (Invoking the Debugger, Excess Open, Excess Close): Index subject
+       of sections.
+
+       * customize.texi (Defining New Types, Applying Customizations)
+       (Custom Themes): Index subject of sections.
+
+       * control.texi (Sequencing, Combining Conditions)
+       (Processing of Errors, Cleanups): Index subject of sections.
+
+       * compile.texi (Eval During Compile): Index subject of sections.
+
+       * commands.texi (Using Interactive, Distinguish Interactive)
+       (Command Loop Info, Classifying Events, Event Mod)
+       (Invoking the Input Method): Index subject of sections.
+
+       * buffers.texi (Buffer List, Buffer Gap): Index subject of sections.
+
+       * backups.texi (Making Backups, Numbered Backups, Backup Names)
+       (Reverting): Index subject of sections.
+
+       * abbrevs.texi (Abbrev Tables, Defining Abbrevs, Abbrev Files)
+       (Abbrev Expansion, Standard Abbrev Tables, Abbrev Properties)
+       (Abbrev Table Properties): Index subject of sections.
+
+       * os.texi (Time of Day, Time Conversion, Time Parsing)
+       (Time Calculations, Idle Timers): Index subject of sections.
+
+2014-12-25  Martin Rudalics  <address@hidden>
+
+       * windows.texi (Windows): Resync @menu order with @node order.
+
+       * minibuf.texi (Minibuffer Windows): Add descriptions of
+       `resize-mini-windows' and `max-mini-window-height'.
+
+2014-12-25  Glenn Morris  <address@hidden>
+
+       * windows.texi (Windows): Sync @menu order with @node order.
+
+       * sequences.texi (Sequence Functions): Copyedits.
+
+       * control.texi (Pattern matching case statement):
+       * positions.texi (List Motion):
+       * streams.texi (Output Functions):
+       * strings.texi (Text Comparison):
+       * text.texi (Document Object Model): Markup fixes.
+
+2014-12-22  Paul Eggert  <address@hidden>
+
+       Remove obsolete references to pre-C99 builds
+       * internals.texi (C Integer Types): Don't mention pre-C99 compilers.
+
+2014-12-19  Martin Rudalics  <address@hidden>
+
+       * windows.texi (Resizing Windows): Describe new argument of
+       `fit-window-to-buffer'.  Move description of `window-size-fixed'
+       to new section below.
+       (Preserving Window Sizes): New section describing
+       `window-size-fixed' and `window-preserve-size'.
+       (Display Action Functions): Describe `preserve-size' alist
+       entry.
+       (Window Parameters): Describe `preserved-size' parameter.
+
+2014-12-18  Eli Zaretskii  <address@hidden>
+
+       * display.texi (Low-Level Font): Document font-info and query-font.
+
+2014-12-18  Stefan Monnier  <address@hidden>
+
+        * display.texi (Forcing Redisplay): Remove references to
+        redisplay-dont-pause and redisplay-preemption-period (which doesn't
+        even exist).
+
+2014-12-16  Nicolas Petton  <address@hidden>
+
+       * sequences.texi (Seq Library): Add documentation for seq.el.
+
+2014-12-15  Alan Mackenzie  <address@hidden>
+
+       "Advice" is a mass noun.  Amend text accordingly.
+       * functions.texi: (Advising Functions, Core Advising Primitives)
+       (Advising Named Functions, Advice combinators)
+       (Porting old advice): Replace, e.g., "an advice" with "advice".
+
+2014-12-13  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * files.texi (Relative File Names): Mention `directory-name-p'.
+
+2014-12-13  Eli Zaretskii  <address@hidden>
+
+       * text.texi (Comparing Text): Prevent a text string from being
+       broken between 2 lines.  (Bug#19257)
+
+2014-12-09  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * files.texi (Contents of Directories):
+       Document directory-files-recursively.
+
+2014-12-04  Eli Zaretskii  <address@hidden>
+
+       * display.texi (Bidirectional Display):
+       Document 'buffer-substring-with-bidi-context'.
+
+       * text.texi (Buffer Contents):
+       Mention 'buffer-substring-with-bidi-context' with a cross-reference.
+
+2014-12-02  Eli Zaretskii  <address@hidden>
+
+       * display.texi (Bidirectional Display):
+       Document 'bidi-find-overridden-directionality'.
+
+2014-11-29  Paul Eggert  <address@hidden>
+
+       Lessen focus on ChangeLog files, as opposed to change log entries.
+       * intro.texi (Acknowledgments): ChangeLog file -> change log entries.
+       * tips.texi (Library Headers): Emacs uses a version control system.
+
+2014-11-27  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * text.texi (Document Object Model): Mention `dom-pp'.
+
+2014-11-26  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * text.texi (Document Object Model): New node to document dom.el.
+
+2014-11-24  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * processes.texi (Network Security): Made into its own section and
+       fleshed out.
+       (Network Security): Mention more NSM variables.
+       (Processes): Move the Network Security Manager stuff to the Emacs
+       manual.
+
+2014-11-23  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * processes.texi (Network): Mention the new :warn-unless-encrypted
+       parameter to `open-network-stream'.
+       (Network): Mention the Network Security Manager.
+
+2014-11-21  Ulf Jasper  <address@hidden>
+
+       * text.texi (Parsing HTML/XML): Document new optional parameter
+       'discard-comments' of 'libxml-parse(html|xml)-region'.
+
 2014-11-18  Leo Liu  <address@hidden>
 
-       * functions.texi (Advising Named Functions): Document
-       define-advice.
+       * functions.texi (Advising Named Functions):
+       Document define-advice.
 
 2014-11-17  Paul Eggert  <address@hidden>
 
@@ -166,8 +443,8 @@
 
 2014-08-29  Dmitry Antipov  <address@hidden>
 
-       * lists.texi (Functions that Rearrange Lists): Remove
-       description of sort ...
+       * lists.texi (Functions that Rearrange Lists):
+       Remove description of sort ...
        * sequences.texi (Sequence Functions): ... and generalize
        it for sequences.  Add an example.
 
@@ -315,8 +592,8 @@
 
 2014-05-15  Dmitry Antipov  <address@hidden>
 
-       * lists.texi (Building Cons Cells and Lists): Remove
-       description of `reverse' and `'nreverse' to generalize them...
+       * lists.texi (Building Cons Cells and Lists):
+       Remove description of `reverse' and `'nreverse' to generalize them...
        * sequences.texi (Sequences): ...for sequences here.
 
 2014-05-14  Glenn Morris  <address@hidden>
@@ -4698,7 +4975,7 @@
        (texinputdir, $(infodir)/elisp): Use $(MAKEINFO_OPTS).
 
 2011-01-25  Chong Yidong  <address@hidden>
-            Richard Kim  <address@hidden>
+           Richard Kim  <address@hidden>
 
        * loading.texi (Library Search): Document list-load-path-shadows
        (Bug#7757).
@@ -13458,7 +13735,7 @@
 
 1998-01-30  Richard Stallman  <address@hidden>
 
-       * Makefile (SHELL): Defined.
+       * Makefile (SHELL): Define.
 
 1998-01-27  Richard Stallman  <address@hidden>
 
@@ -13616,7 +13893,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1998-2014 Free Software Foundation, Inc.
+  Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in
index 11cc0ec..4c62c70 100644
--- a/doc/lispref/Makefile.in
+++ b/doc/lispref/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1990-1996, 1998-2014 Free Software Foundation, Inc.
+# Copyright (C) 1990-1996, 1998-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -59,8 +59,17 @@ TEXI2DVI = texi2dvi
 TEXI2PDF = texi2pdf
 DVIPS = dvips
 
-ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \
-         MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)"
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+ENVADD = \
+  $(AM_V_GEN)TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \
+  MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)"
 
 DVI_TARGETS = elisp.dvi
 HTML_TARGETS = elisp.html
@@ -137,13 +146,13 @@ ${buildinfodir}:
        ${MKDIR_P} $@
 
 $(buildinfodir)/elisp.info: $(srcs) | ${buildinfodir}
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
 
 elisp.dvi: $(srcs)
        $(ENVADD) $(TEXI2DVI) $<
 
 elisp.html: $(srcs)
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
 
 elisp.pdf: $(srcs)
        $(ENVADD) $(TEXI2PDF) $<
diff --git a/doc/lispref/README b/doc/lispref/README
index e8dbadd..5ca18a8 100644
--- a/doc/lispref/README
+++ b/doc/lispref/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.  -*- outline -*-
+Copyright (C) 2001-2015 Free Software Foundation, Inc.  -*- outline -*-
 See the end of the file for license conditions.
 
 
diff --git a/doc/lispref/abbrevs.texi b/doc/lispref/abbrevs.texi
index 73a3f5f..998f63e 100644
--- a/doc/lispref/abbrevs.texi
+++ b/doc/lispref/abbrevs.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1994, 1999, 2001-2014 Free Software 
Foundation,
address@hidden Copyright (C) 1990-1994, 1999, 2001-2015 Free Software 
Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Abbrevs
@@ -59,6 +59,7 @@ expanded in the buffer.  For the user-level commands for 
abbrevs, see
 
 @node Abbrev Tables
 @section Abbrev Tables
address@hidden abbrev tables
 
   This section describes how to create and manipulate abbrev tables.
 
@@ -126,6 +127,7 @@ to add these to @var{name} separately.)
 
 @node Defining Abbrevs
 @section Defining Abbrevs
address@hidden defining abbrevs
 
   @code{define-abbrev} is the low-level basic function for defining an
 abbrev in an abbrev table.
@@ -181,6 +183,7 @@ callers.
 
 @node Abbrev Files
 @section Saving Abbrevs in Files
address@hidden save abbrevs in files
 
   A file of saved abbrev definitions is actually a file of Lisp code.
 The abbrevs are saved in the form of a Lisp program to define the same
@@ -232,6 +235,9 @@ define the same abbrevs.  If @var{filename} is @code{nil} 
or omitted,
 
 @node Abbrev Expansion
 @section Looking Up and Expanding Abbreviations
address@hidden looking up abbrevs
address@hidden expanding abbrevs
address@hidden abbrevs, looking up and expanding
 
   Abbrevs are usually expanded by certain interactive commands,
 including @code{self-insert-command}.  This section describes the
@@ -367,6 +373,7 @@ definitions of @code{local-abbrev-table} and 
@code{text-mode-abbrev-table}.
 
 @node Standard Abbrev Tables
 @section Standard Abbrev Tables
address@hidden standard abbrev tables
 
   Here we list the variables that hold the abbrev tables for the
 preloaded major modes of Emacs.
@@ -409,6 +416,7 @@ Properties}.
 
 @node Abbrev Properties
 @section Abbrev Properties
address@hidden abbrev properties
 
 Abbrevs have properties, some of which influence the way they work.
 You can provide them as arguments to @code{define-abbrev}, and
@@ -449,6 +457,7 @@ modifies the capitalization of the expansion.
 
 @node Abbrev Table Properties
 @section Abbrev Table Properties
address@hidden abbrev table properties
 
 Like abbrevs, abbrev tables have properties, some of which influence
 the way they work.  You can provide them as arguments to
diff --git a/doc/lispref/anti.texi b/doc/lispref/anti.texi
index 2ca2290..c1773aa 100644
--- a/doc/lispref/anti.texi
+++ b/doc/lispref/anti.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1999, 2002-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1999, 2002-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
 @c This node must have no pointers.
diff --git a/doc/lispref/back.texi b/doc/lispref/back.texi
index 177522e..5edfb67 100644
--- a/doc/lispref/back.texi
+++ b/doc/lispref/back.texi
@@ -1,6 +1,6 @@
 \input texinfo  @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 2001-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @c
 @c %**start of header
diff --git a/doc/lispref/backups.texi b/doc/lispref/backups.texi
index 63f8f22..0a1b5a2 100644
--- a/doc/lispref/backups.texi
+++ b/doc/lispref/backups.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1999, 2001-2014 Free Software 
Foundation,
address@hidden Copyright (C) 1990-1995, 1999, 2001-2015 Free Software 
Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Backups and Auto-Saving
@@ -50,6 +50,7 @@ don't want them any more, or Emacs can delete them 
automatically.
 
 @node Making Backups
 @subsection Making Backup Files
address@hidden making backup files
 
 @defun backup-buffer
   This function makes a backup of the file visited by the current
@@ -238,6 +239,7 @@ The default is 200.
 
 @node Numbered Backups
 @subsection Making and Deleting Numbered Backup Files
address@hidden numbered backups
 
   If a file's name is @file{foo}, the names of its numbered backup
 versions are @address@hidden, for various integers @var{v}, like
@@ -299,6 +301,7 @@ file.  The default address@hidden
 
 @node Backup Names
 @subsection Naming Backup Files
address@hidden naming backup files
 
   The functions in this section are documented mainly because you can
 customize the naming conventions for backup files by redefining them.
@@ -668,6 +671,7 @@ not initialize @code{auto-save-list-file-name}.
 
 @node Reverting
 @section Reverting
address@hidden reverting buffers
 
   If you have made extensive changes to a file and then change your mind
 about them, you can get rid of them by reading in the previous version
diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi
index 5ac2d67..1c1c423 100644
--- a/doc/lispref/buffers.texi
+++ b/doc/lispref/buffers.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Buffers
@@ -762,6 +762,7 @@ signal an error if the current buffer is read-only.
 @node Buffer List
 @section The Buffer List
 @cindex buffer list
address@hidden listing all buffers
 
   The @dfn{buffer list} is a list of all live buffers.  The order of the
 buffers in this list is based primarily on how recently each buffer has
@@ -1215,6 +1216,7 @@ in the text it is swapped with will not interfere with 
auto-saving.
 
 @node Buffer Gap
 @section The Buffer Gap
address@hidden buffer gap
 
   Emacs buffers are implemented using an invisible @dfn{gap} to make
 insertion and deletion faster.  Insertion works by filling in part of
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi
index e5db4d8..6fdc8e2 100644
--- a/doc/lispref/commands.texi
+++ b/doc/lispref/commands.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Command Loop
@@ -147,6 +147,7 @@ code.
 @node Using Interactive
 @subsection Using @code{interactive}
 @cindex arguments, interactive entry
address@hidden interactive spec, using
 
   This section describes how to write the @code{interactive} form that
 makes a Lisp function an interactively-callable command, and how to
@@ -747,6 +748,8 @@ part of the prompt.
 
 @node Distinguish Interactive
 @section Distinguish Interactive Calls
address@hidden distinguish interactive calls
address@hidden is this call interactive
 
   Sometimes a command should display additional visual feedback (such
 as an informative message in the echo area) for interactive calls
@@ -835,6 +838,7 @@ Here is another example that contrasts direct and indirect 
calls to
 
 @node Command Loop Info
 @section Information from the Command Loop
address@hidden command loop variables
 
 The editor command loop sets several Lisp variables to keep status
 records for itself and for commands that are run.  With the exception of
@@ -1485,8 +1489,10 @@ prefix @samp{drag-}.  For example, dragging the mouse 
with button 2
 held down generates a @code{drag-mouse-2} event.  The second and third
 elements of the event give the starting and ending position of the
 drag, as mouse position lists (@pxref{Click Events}).  You can access
-the second element of any mouse event in the same way, with no need to
-distinguish drag events from others.
+the second element of any mouse event in the same way.  However, the
+drag event may end outside the boundaries of the frame that was
+initially selected.  In that case, the third element's position list
+contains that frame in place of a window.
 
 The @samp{drag-} prefix follows the modifier key prefixes such as
 @samp{C-} and @samp{M-}.
@@ -1631,7 +1637,10 @@ represented by lists that look like this:
 
 @noindent
 @var{position} is a mouse position list (@pxref{Click Events}),
-specifying the current position of the mouse cursor.
+specifying the current position of the mouse cursor.  As with the
+end-position of a drag event, this position list may represent a
+location outside the boundaries of the initially selected frame, in
+which case the list contains that frame in place of a window.
 
 The special form @code{track-mouse} enables generation of motion
 events within its body.  Outside of @code{track-mouse} forms, Emacs
@@ -1846,6 +1855,14 @@ into another window.  That produces a pair of events 
like these:
                    -453816))
 @end smallexample
 
+The frame with input focus might not take up the entire screen, and
+the user might move the mouse outside the scope of the frame. Inside
+the @code{track-mouse} special form, that produces an event like this:
+
address@hidden
+(mouse-movement (#<frame *ielm* 0x102849a30> nil (563 . 205) 532301936))
address@hidden smallexample
+
 To handle a SIGUSR1 signal, define an interactive function, and
 bind it to the @code{signal usr1} event sequence:
 
@@ -1859,6 +1876,7 @@ bind it to the @code{signal usr1} event sequence:
 @node Classifying Events
 @subsection Classifying Events
 @cindex event type
address@hidden classifying events
 
   Every event has an @dfn{event type}, which classifies the event for
 key binding purposes.  For a keyboard event, the event type equals the
@@ -2009,7 +2027,9 @@ Events}); and @code{nil} otherwise.
 various parts of it:
 
 @defun posn-window position
-Return the window that @var{position} is in.
+Return the window that @var{position} is in.  If @var{position}
+represents a location outside the frame where the event was initiated,
+return that frame instead.
 @end defun
 
 @defun posn-area position
@@ -2584,6 +2604,9 @@ then continues to wait for a valid input character, or 
keyboard-quit.
 
 @node Event Mod
 @subsection Modifying and Translating Input Events
address@hidden modifiers of events
address@hidden translating input events
address@hidden event translation
 
   Emacs modifies every event it reads according to
 @code{extra-keyboard-modifiers}, then translates it through
@@ -2665,6 +2688,7 @@ at the level of @code{read-key-sequence}.
 
 @node Invoking the Input Method
 @subsection Invoking the Input Method
address@hidden invoking input method
 
   The event-reading functions invoke the current input method, if any
 (@pxref{Input Methods}).  If the value of @code{input-method-function}
diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi
index fe492df..4a246dd 100644
--- a/doc/lispref/compile.texi
+++ b/doc/lispref/compile.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1994, 2001-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1990-1994, 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Byte Compilation
 @chapter Byte Compilation
@@ -347,6 +347,7 @@ it does nothing.  It always returns @var{function}.
 
 @node Eval During Compile
 @section Evaluation During Compilation
address@hidden eval during compilation
 
   These features permit you to write code to be evaluated during
 compilation of a program.
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index 5cf6368..d212923 100644
--- a/doc/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Control Structures
@@ -44,6 +44,8 @@ structure constructs (@pxref{Macros}).
 
 @node Sequencing
 @section Sequencing
address@hidden sequencing
address@hidden sequential execution
 
   Evaluating forms in the order they appear is the most common way
 control passes from one form to another.  In some contexts, such as in a
@@ -368,11 +370,11 @@ that location.
 More specifically, a Q-pattern can take the following forms:
 @table @code
 @item (@var{qpattern1} . @var{qpattern2})
-This pattern matches any cons cell whose @code{car} matches @var{QPATTERN1} and
-whose @code{cdr} matches @var{PATTERN2}.
address@hidden address@hidden qpattern2..qpatternm}]
-This pattern matches a vector of length @code{M} whose 0..(M-1)th
-elements match @var{QPATTERN1}, @address@hidden,
+This pattern matches any cons cell whose @code{car} matches @var{qpattern1} and
+whose @code{cdr} matches @var{pattern2}.
address@hidden address@hidden @var{qpattern2} @dots{} @var{qpatternm}]
+This pattern matches a vector of length @var{M} whose 0..(@var{M}-1)th
+elements match @var{qpattern1}, @var{qpattern2} @dots{} @var{qpatternm},
 respectively.
 @item @var{atom}
 This pattern matches any atom @code{equal} to @var{atom}.
@@ -405,6 +407,7 @@ the variable @code{x}.
 
 @node Combining Conditions
 @section Constructs for Combining Conditions
address@hidden combining conditions
 
   This section describes three constructs that are often used together
 with @code{if} and @code{cond} to express complicated conditions.  The
@@ -962,6 +965,7 @@ concept of continuable errors.
 
 @node Processing of Errors
 @subsubsection How Emacs Processes Errors
address@hidden processing of errors
 
 When an error is signaled, @code{signal} searches for an active
 @dfn{handler} for the error.  A handler is a sequence of Lisp
@@ -1367,6 +1371,7 @@ and their conditions.
 
 @node Cleanups
 @subsection Cleaning Up from Nonlocal Exits
address@hidden nonlocal exits, cleaning up
 
   The @code{unwind-protect} construct is essential whenever you
 temporarily put a data structure in an inconsistent state; it permits
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index 0c6497f..0d1b6fa 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1997-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1997-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Customization
 @chapter Customization Settings
@@ -1227,6 +1227,8 @@ arguments, which will be used when creating the 
@code{radio-button} or
 
 @node Defining New Types
 @subsection Defining New Types
address@hidden customization types, define new
address@hidden define new customization types
 
 In the previous sections we have described how to construct elaborate
 type specifications for @code{defcustom}.  In some cases you may want
@@ -1296,6 +1298,7 @@ its @code{:type} argument only when needed.
 
 @node Applying Customizations
 @section Applying Customizations
address@hidden applying customizations
 
 The following functions are responsible for installing the user's
 customization settings for variables and faces, respectively.  When
@@ -1353,6 +1356,7 @@ evaluated.  @var{comment} is a string describing the 
customization.
 @node Custom Themes
 @section Custom Themes
 
address@hidden custom themes
   @dfn{Custom themes} are collections of settings that can be enabled
 or disabled as a unit.  @xref{Custom Themes,,, emacs, The GNU Emacs
 Manual}.  Each Custom theme is defined by an Emacs Lisp source file,
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index 66f12a0..0ccac18 100644
--- a/doc/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -1,10 +1,11 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1994, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1994, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Debugging
 @chapter Debugging Lisp Programs
address@hidden debugging lisp programs
 
   There are several ways to find and investigate problems in an Emacs
 Lisp program.
@@ -284,6 +285,8 @@ not currently set up to break on entry.
 
 @node Explicit Debug
 @subsection Explicit Entry to the Debugger
address@hidden debugger, explicit entry
address@hidden force entry to debugger
 
   You can cause the debugger to be called at a certain point in your
 program by writing the expression @code{(debug)} at that point.  To do
@@ -456,6 +459,7 @@ Toggle the display of local variables of the current stack 
frame.
 
 @node Invoking the Debugger
 @subsection Invoking the Debugger
address@hidden invoking lisp debugger
 
   Here we describe in full detail the function @code{debug} that is used
 to invoke the debugger.
@@ -707,6 +711,7 @@ find the mismatch.)
 
 @node Excess Open
 @subsection Excess Open Parentheses
address@hidden excess open parentheses
 
   The first step is to find the defun that is unbalanced.  If there is
 an excess open parenthesis, the way to do this is to go to the end of
@@ -741,6 +746,7 @@ anything.
 
 @node Excess Close
 @subsection Excess Close Parentheses
address@hidden excess close parentheses
 
   To deal with an excess close parenthesis, first go to the beginning
 of the file, then type @kbd{C-u -1 C-M-u} to find the end of the first
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 4cb06dd..b09b82a 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1990-1995, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Display
 @chapter Emacs Display
@@ -39,6 +39,8 @@ that Emacs presents to the user.
 
 @node Refresh Screen
 @section Refreshing the Screen
address@hidden refresh the screen
address@hidden screen refresh
 
   The function @code{redraw-frame} clears and redisplays the entire
 contents of a given frame (@pxref{Frames}).  This is useful if the
@@ -85,10 +87,7 @@ waiting for input.
 @defun redisplay &optional force
 This function tries immediately to redisplay.  The optional argument
 @var{force}, if address@hidden, forces the redisplay to be performed,
-instead of being preempted, even if input is pending and the variable
address@hidden is @code{nil} (see below).  If
address@hidden is address@hidden (the default), this
-function redisplays in any case, i.e., @var{force} does nothing.
+instead of being preempted if input is pending.
 
 The function returns @code{t} if it actually tried to redisplay, and
 @code{nil} otherwise.  A value of @code{t} does not mean that
@@ -96,28 +95,6 @@ redisplay proceeded to completion; it could have been 
preempted by
 newly arriving input.
 @end defun
 
address@hidden redisplay-dont-pause
-If this variable is @code{nil}, arriving input events preempt
-redisplay; Emacs avoids starting a redisplay, and stops any redisplay
-that is in progress, until the input has been processed.  In
-particular, @code{(redisplay)} returns @code{nil} without actually
-redisplaying, if there is pending input.
-
-The default value is @code{t}, which means that pending input does not
-preempt redisplay.
address@hidden defvar
-
address@hidden redisplay-preemption-period
-If @code{redisplay-dont-pause} is @code{nil}, this variable specifies
-how many seconds Emacs waits between checks for new input during
-redisplay; if input arrives during this interval, redisplay stops and
-the input is processed.  The default value is 0.1; if the value is
address@hidden, Emacs does not check for input during redisplay.
-
-This variable has no effect when @code{redisplay-dont-pause} is
address@hidden (the default).
address@hidden defvar
-
 @defvar pre-redisplay-function
 A function run just before redisplay.  It is called with one argument,
 the set of windows to redisplay.
@@ -534,6 +511,7 @@ are logged that share a common prefix ending in @samp{...}.
 
 @node Echo Area Customization
 @subsection Echo Area Customization
address@hidden echo area customization
 
   These variables control details of how the echo area works.
 
@@ -661,6 +639,7 @@ specify a specific warning type.
 
 @node Warning Variables
 @subsection Warning Variables
address@hidden warning variables
 
   Programs can customize how their warnings appear by binding
 the variables described in this section.
@@ -738,6 +717,7 @@ all.
 
 @node Warning Options
 @subsection Warning Options
address@hidden warning options
 
   These variables are used by users to control what happens
 when a Lisp program reports a warning.
@@ -771,6 +751,7 @@ that warning is not logged.
 
 @node Delayed Warnings
 @subsection Delayed Warnings
address@hidden delayed warnings
 
 Sometimes, you may wish to avoid showing a warning while a command is
 running, and only show it only after the end of the command.  You can
@@ -1094,6 +1075,8 @@ You can use a display table to substitute other text for 
the ellipsis
 
 @node Temporary Displays
 @section Temporary Displays
address@hidden temporary display
address@hidden temporary buffer display
 
   Temporary displays are used by Lisp programs to put output into a
 buffer and then present it to the user for perusal rather than for
@@ -1186,12 +1169,6 @@ it prints into the buffer named @var{buffer-or-name} and 
displays that
 buffer in some window.  Unlike @code{with-output-to-temp-buffer},
 however, it does not automatically switch that buffer to Help mode.
 
-Like @code{with-output-to-temp-buffer} it neither makes the buffer
-specified by @var{buffer-or-name} current when executing @var{body}.
address@hidden with-current-buffer-window
-The otherwise identical macro @code{with-current-buffer-window} can be
-used to execute @var{body} with that buffer current.
-
 The argument @var{buffer-or-name} specifies the temporary buffer.  It
 can be either a buffer, which must already exist, or a string, in which
 case a buffer of that name is created, if necessary.  The buffer is
@@ -1199,14 +1176,14 @@ marked as unmodified and read-only when 
@code{with-temp-buffer-window}
 exits.
 
 This macro does not call @code{temp-buffer-show-function}.  Rather, it
-passes the @var{action} argument to @code{display-buffer} in order to
-display the buffer.
+passes the @var{action} argument to @code{display-buffer}
+(@pxref{Choosing Window}) in order to display the buffer.
 
 The value of the last form in @var{body} is returned, unless the
 argument @var{quit-function} is specified.  In that case, it is called
 with two arguments: the window showing the buffer and the result of
address@hidden  The final return value is then whatever
address@hidden returns.
address@hidden  The final return value is then whatever @var{quit-function}
+returns.
 
 @vindex temp-buffer-window-setup-hook
 @vindex temp-buffer-window-show-hook
@@ -1215,6 +1192,56 @@ and @code{temp-buffer-window-show-hook} in place of the 
analogous hooks
 run by @code{with-output-to-temp-buffer}.
 @end defmac
 
+The two constructs described next are mostly identical to
address@hidden but differ from it as specified:
+
address@hidden with-current-buffer-window buffer-or-name action quit-function 
&rest body
+This macro is like @code{with-temp-buffer-window} but unlike that makes
+the buffer specified by @var{buffer-or-name} current for running
address@hidden
address@hidden defmac
+
address@hidden with-displayed-buffer-window buffer-or-name action quit-function 
&rest body
+This macro is like @code{with-current-buffer-window} but unlike that
+displays the buffer specified by @var{buffer-or-name} @emph{before}
+running @var{body}.
address@hidden defmac
+
+A window showing a temporary buffer can be fit to the size of that
+buffer using the following mode:
+
address@hidden temp-buffer-resize-mode
+When this minor mode is enabled, windows showing a temporary buffer are
+automatically resized to fit their buffer's contents.
+
+A window is resized if and only if it has been specially created for the
+buffer.  In particular, windows that have shown another buffer before
+are not resized.  By default, this mode uses @code{fit-window-to-buffer}
+(@pxref{Resizing Windows}) for resizing.  You can specify a different
+function by customizing the options @code{temp-buffer-max-height} and
address@hidden below.
address@hidden defopt
+
address@hidden temp-buffer-max-height
+This option specifies the maximum height (in lines) of a window
+displaying a temporary buffer when @code{temp-buffer-resize-mode} is
+enabled.  It can also be a function to be called to choose the height
+for such a buffer.  It gets one argument, the buffer, and should return
+a positive integer.  At the time the function is called, the window to
+be resized is selected.
address@hidden defopt
+
address@hidden temp-buffer-max-width
+This option specifies the maximum width of a window (in columns)
+displaying a temporary buffer when @code{temp-buffer-resize-mode} is
+enabled.  It can also be a function to be called to choose the width for
+such a buffer.  It gets one argument, the buffer, and should return a
+positive integer.  At the time the function is called, the window to be
+resized is selected.
address@hidden defopt
+
+The following function uses the current buffer for temporal display:
+
 @defun momentary-string-display string position &optional char message
 This function momentarily displays @var{string} in the current buffer at
 @var{position}.  It has no effect on the undo list or on the buffer's
@@ -1305,6 +1332,8 @@ inside the overlay or outside, and likewise for the end 
of the overlay.
 
 @node Managing Overlays
 @subsection Managing Overlays
address@hidden managing overlays
address@hidden overlays, managing
 
   This section describes the functions to create, delete and move
 overlays, and to examine their contents.  Overlay changes are not
@@ -1465,6 +1494,7 @@ faster if you do @code{(overlay-recenter (point-max))} 
first.
 
 @node Overlay Properties
 @subsection Overlay Properties
address@hidden overlay properties
 
   Overlay properties are like text properties in that the properties that
 alter how a character is displayed can come from either source.  But in
@@ -1717,6 +1747,8 @@ Properties}.
 
 @node Finding Overlays
 @subsection Searching for Overlays
address@hidden searching for overlays
address@hidden overlays, searching for
 
 @defun overlays-at pos &optional sorted
 This function returns a list of all the overlays that cover the character at
@@ -1784,6 +1816,8 @@ changes.
 
 @node Size of Displayed Text
 @section Size of Displayed Text
address@hidden size of text on display
address@hidden character width on display
 
 Since not all characters have the same width, these functions let you
 check the width of a character.  @xref{Primitive Indent}, and
@@ -2274,6 +2308,7 @@ suitable for use with @code{:stipple} (see above).  It 
returns
 
 @node Defining Faces
 @subsection Defining Faces
address@hidden defining faces
 
 @cindex face spec
   The usual way to define a face is through the @code{defface} macro.
@@ -2448,6 +2483,7 @@ Any other value of @var{spec-type} is reserved for 
internal use.
 
 @node Attribute Functions
 @subsection Face Attribute Functions
address@hidden face attributes, access and modification
 
   This section describes functions for directly accessing and
 modifying the attributes of a named face.
@@ -2649,6 +2685,8 @@ a address@hidden @code{:inverse-video} attribute.
 
 @node Displaying Faces
 @subsection Displaying Faces
address@hidden displaying faces
address@hidden face merging
 
   When Emacs displays a given piece of text, the visual appearance of
 the text may be determined by faces drawn from different sources.  If
@@ -2704,6 +2742,7 @@ at the next level of face merging.
 
 @node Face Remapping
 @subsection Face Remapping
address@hidden face remapping
 
   The variable @code{face-remapping-alist} is used for buffer-local or
 global changes in the appearance of a face.  For instance, it is used
@@ -2901,6 +2940,7 @@ usually assign faces to around 400 to 600 characters at 
each call.
 
 @node Basic Faces
 @subsection Basic Faces
address@hidden basic faces
 
 If your Emacs Lisp program needs to assign some faces to text, it is
 often a good idea to use certain existing faces or inherit from them,
@@ -3067,6 +3107,8 @@ nominal heights and widths would suggest.
 
 @node Font Lookup
 @subsection Looking Up Fonts
address@hidden font lookup
address@hidden looking up fonts
 
 @defun x-list-fonts name &optional reference-face frame maximum width
 This function returns a list of available font names that match
@@ -3124,6 +3166,7 @@ encoding of the font.
 
 @node Fontsets
 @subsection Fontsets
address@hidden fontset
 
   A @dfn{fontset} is a list of fonts, each assigned to a range of
 character codes.  An individual font cannot display the whole range of
@@ -3349,9 +3392,9 @@ The script that the font must support (a symbol).
 @item :otf
 @cindex OpenType font
 The font must be an OpenType font that supports these OpenType
-features, provided Emacs is compiled with support for @samp{libotf} (a
-library for performing complex text layout in certain scripts).  The
-value must be a list of the form
+features, provided Emacs is compiled with a library, such as
address@hidden on GNU/Linux, that supports complex text layout for
+scripts which need that.  The value must be a list of the form
 
 @smallexample
 @code{(@var{script-tag} @var{langsys-tag} @var{gsub} @var{gpos})}
@@ -3450,6 +3493,124 @@ If the optional argument @var{fold-wildcards} is 
address@hidden,
 consecutive wildcards in the XLFD are folded into one.
 @end defun
 
+The following two functions return important information about a font.
+
address@hidden font-info name &optional frame
+This function returns information about a font specified by its
address@hidden, a string, as it is used on @var{frame}.  If @var{frame} is
+omitted or @code{nil}, it defaults to the selected frame.
+
+The value returned by the function is a vector of the form
address@hidden@var{opened-name} @var{full-name} @var{size} @var{height}
address@hidden @var{relative-compose} @var{default-ascent}
address@hidden @var{ascent} @var{descent} @var{space-width}
address@hidden @var{filename} @var{capability}]}.  Here's the
+description of each components of this vector:
+
address@hidden @var
address@hidden opened-name
+The name used to open the font, a string.
+
address@hidden full-name
+The full name of the font, a string.
+
address@hidden size
+The pixel size of the font.
+
address@hidden height
+The height of the font in pixels.
+
address@hidden baseline-offset
+The offset in pixels from the @acronym{ASCII} baseline, positive
+upward.
+
address@hidden relative-compose
address@hidden default-ascent
+Numbers controlling how to compose characters.
+
address@hidden ascent
address@hidden descent
+The ascent and descent of this font.  The sum of these two numbers
+should be equal to the value of @var{height} above.
+
address@hidden space-width
+The width, in pixels, of the font's space character.
+
address@hidden average-width
+The average width of the font characters.  If this is zero, Emacs uses
+the value of @var{space-width} instead, when it calculates text layout
+on display.
+
address@hidden filename
+The file name of the font as a string.  This can be @code{nil} if the
+font back-end does not provide a way to find out the font's file name.
+
address@hidden capability
+A list whose first element is a symbol representing the font type, one
+of @code{x}, @code{opentype}, @code{truetype}, @code{type1},
address@hidden, or @code{bdf}.  For OpenType fonts, the list includes 2
+additional elements describing the @sc{gsub} and @sc{gpos} features
+supported by the font.  Each of these elements is a list of the form
address@hidden((@var{script} (@var{langsys} @var{feature} @dots{}) @dots{})
address@hidden)}, where @var{script} is a symbol representing an OpenType
+script tag, @var{langsys} is a symbol representing an OpenType langsys
+tag (or @code{nil}, which stands for the default langsys), and each
address@hidden is a symbol representing an OpenType feature tag.
address@hidden table
address@hidden defun
+
address@hidden query-font font-object
+This function returns information about a @var{font-object}.  (This is
+in contrast to @code{font-info}, which takes the font name, a string,
+as its argument.)
+
+The value returned by the function is a vector of the form
address@hidden@var{name} @var{filename} @var{pixel-size} @var{max-width}
address@hidden @var{descent} @var{space-width} @var{average-width}
address@hidden  Here's the description of each components of this
+vector:
+
address@hidden @var
address@hidden name
+The font name, a string.
+
address@hidden filename
+The file name of the font as a string.  This can be @code{nil} if the
+font back-end does not provide a way to find out the font's file name.
+
address@hidden pixel-size
+The pixel size of the font used to open the font.
+
address@hidden max-width
+The maximum advance width of the font.
+
address@hidden ascent
address@hidden descent
+The ascent and descent of this font.  The sum of these two numbers
+gives the font height.
+
address@hidden space-width
+The width, in pixels, of the font's space character.
+
address@hidden average-width
+The average width of the font characters.  If this is zero, Emacs uses
+the value of @var{space-width} instead, when it calculates text layout
+on display.
+
address@hidden capability
+A list whose first element is a symbol representing the font type, one
+of @code{x}, @code{opentype}, @code{truetype}, @code{type1},
address@hidden, or @code{bdf}.  For OpenType fonts, the list includes 2
+additional elements describing the @sc{gsub} and @sc{gpos} features
+supported by the font.  Each of these elements is a list of the form
address@hidden((@var{script} (@var{langsys} @var{feature} @dots{}) @dots{})
address@hidden)}, where @var{script} is a symbol representing an OpenType
+script tag, @var{langsys} is a symbol representing an OpenType langsys
+tag (or @code{nil}, which stands for the default langsys), and each
address@hidden is a symbol representing an OpenType feature tag.
address@hidden table
address@hidden defun
+
 @node Fringes
 @section Fringes
 @cindex fringes
@@ -4119,6 +4280,7 @@ display specifications and what they mean.
 
 @node Replacing Specs
 @subsection Display Specs That Replace The Text
address@hidden replacing display specs
 
   Some kinds of display specifications specify something to display
 instead of the text that has the property.  These are called
@@ -4995,6 +5157,7 @@ Supports the @code{:index} property.  @xref{Multi-Frame 
Images}.
 
 @node Defining Images
 @subsection Defining Images
address@hidden define image
 
   The functions @code{create-image}, @code{defimage} and
 @code{find-image} provide convenient ways to create image descriptors.
@@ -5122,6 +5285,7 @@ Here is an example of using 
@code{image-load-path-for-library}:
 
 @node Showing Images
 @subsection Showing Images
address@hidden show image
 
   You can use an image descriptor by setting up the @code{display}
 property yourself, but it is easier to use the functions in this
@@ -5571,10 +5735,12 @@ Set @var{button}'s @var{prop} property to @var{val}.
 @end defun
 
 @defun button-activate button &optional use-mouse-action
-Call @var{button}'s @code{action} property (i.e., invoke it).  If
address@hidden is address@hidden, try to invoke the button's
address@hidden property instead of @code{action}; if the button
-has no @code{mouse-action} property, use @code{action} as normal.
+Call @var{button}'s @code{action} property (i.e., invoke the function
+that is the value of that property, passing it the single argument
address@hidden).  If @var{use-mouse-action} is address@hidden, try to
+invoke the button's @code{mouse-action} property instead of
address@hidden; if the button has no @code{mouse-action} property, use
address@hidden as normal.
 @end defun
 
 @defun button-label button
@@ -6800,3 +6966,81 @@ affect all Emacs frames and windows.
 appropriate mirrored character in the reordered text.  Lisp programs
 can affect the mirrored display by changing this property.  Again, any
 such changes affect all of Emacs display.
+
address@hidden overriding bidirectional properties
address@hidden directional overrides
address@hidden LRO
address@hidden RLO
+  The bidirectional properties of characters can be overridden by
+inserting into the text special directional control characters,
+LEFT-TO-RIGHT OVERRIDE (@acronym{LRO}) and RIGHT-TO-LEFT OVERRIDE
+(@acronym{RLO}).  Any characters between a @acronym{RLO} and the
+following newline or POP DIRECTIONAL FORMATTING (@acronym{PDF})
+control character, whichever comes first, will be displayed as if they
+were strong right-to-left characters, i.e.@: they will be reversed on
+display.  Similarly, any characters between @acronym{LRO} and
address@hidden or newline will display as if they were strong
+left-to-right, and will @emph{not} be reversed even if they are strong
+right-to-left characters.
+
address@hidden phishing using directional overrides
address@hidden malicious use of directional overrides
+  These overrides are useful when you want to make some text
+unaffected by the reordering algorithm, and instead directly control
+the display order.  But they can also be used for malicious purposes,
+known as @dfn{phishing}.  Specifically, a URL on a Web page or a link
+in an email message can be manipulated to make its visual appearance
+unrecognizable, or similar to some popular benign location, while the
+real location, interpreted by a browser in the logical order, is very
+different.
+
+  Emacs provides a primitive that applications can use to detect
+instances of text whose bidirectional properties were overridden so as
+to make a left-to-right character display as if it were a
+right-to-left character, or vise versa.
+
address@hidden bidi-find-overridden-directionality from to &optional object
+This function looks at the text of the specified @var{object} between
+positions @var{from} (inclusive) and @var{to} (exclusive), and returns
+the first position where it finds a strong left-to-right character
+whose directional properties were forced to display the character as
+right-to-left, or for a strong right-to-left character that was forced
+to display as left-to-right.  If it finds no such characters in the
+specified region of text, it returns @code{nil}.
+
+The optional argument @var{object} specifies which text to search, and
+defaults to the current buffer.  If @var{object} is address@hidden, it
+can be some other buffer, or it can be a string or a window.  If it is
+a string, the function searches that string.  If it is a window, the
+function searches the buffer displayed in that window.  If a buffer
+whose text you want to examine is displayed in some window, we
+recommend to specify it by that window, rather than pass the buffer to
+the function.  This is because telling the function about the window
+allows it to correctly account for window-specific overlays, which
+might change the result of the function if some text in the buffer is
+covered by overlays.
address@hidden defun
+
address@hidden copying bidirectional text, preserve visual order
address@hidden visual order, preserve when copying bidirectional text
+  When text that includes mixed right-to-left and left-to-right
+characters and bidirectional controls is copied into a different
+location, it can change its visual appearance, and also can affect the
+visual appearance of the surrounding text at destination.  This is
+because reordering of bidirectional text specified by the
address@hidden has non-trivial context-dependent effects both on the
+copied text and on the text at copy destination that will surround it.
+
+  Sometimes, a Lisp program may need to preserve the exact visual
+appearance of the copied text at destination, and of the text that
+surrounds the copy.  Lisp programs can use the following function to
+achieve that effect.
+
address@hidden buffer-substring-with-bidi-context start end &optional 
no-properties
+This function works similar to @code{buffer-substring} (@pxref{Buffer
+Contents}), but it prepends and appends to the copied text bidi
+directional control characters necessary to preserve the visual
+appearance of the text when it is inserted at another place.  Optional
+argument @var{no-properties}, if address@hidden, means remove the text
+properties from the copy of the text.
address@hidden defun
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
index 85998fd..97bcf0d 100644
--- a/doc/lispref/edebug.texi
+++ b/doc/lispref/edebug.texi
@@ -1,6 +1,6 @@
 @comment -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1992-1994, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1992-1994, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi
index fa665da..cdc443f 100644
--- a/doc/lispref/elisp.texi
+++ b/doc/lispref/elisp.texi
@@ -98,7 +98,7 @@ This is the @cite{GNU Emacs Lisp Reference Manual}
 @end ifnottex
 corresponding to Emacs version @value{EMACSVER}.
 
-Copyright @copyright{} 1990--1996, 1998--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1990--1996, 1998--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -1006,6 +1006,7 @@ Windows
 * Windows and Frames::      Relating windows to the frame they appear on.
 * Window Sizes::            Accessing a window's size.
 * Resizing Windows::        Changing the sizes of windows.
+* Preserving Window Sizes:: Preserving the size of windows.
 * Splitting Windows::       Splitting one window into two windows.
 * Deleting Windows::        Deleting a window gives its space to other windows.
 * Recombining Windows::     Preserving the frame layout when splitting and
diff --git a/doc/lispref/errors.texi b/doc/lispref/errors.texi
index dba8d21..d485b3b 100644
--- a/doc/lispref/errors.texi
+++ b/doc/lispref/errors.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1993, 1999, 2001-2014 Free Software 
Foundation,
address@hidden Copyright (C) 1990-1993, 1999, 2001-2015 Free Software 
Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Errors
diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi
index 6ffc7db..a185da7 100644
--- a/doc/lispref/eval.texi
+++ b/doc/lispref/eval.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1994, 1998, 2001-2014 Free Software 
Foundation,
address@hidden Copyright (C) 1990-1994, 1998, 2001-2015 Free Software 
Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Evaluation
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index ac77b94..2739e3e 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Files
@@ -81,6 +81,8 @@ computer program, however, it is good to keep the distinction 
in mind.
 
 @node Visiting Functions
 @subsection Functions for Visiting Files
address@hidden visiting files, functions for
address@hidden how to visit files
 
   This section describes the functions normally used to visit files.
 For historical reasons, these functions have names starting with
@@ -651,8 +653,9 @@ and also calls the functions in the list
 @xref{Format Conversion}.
 
 Normally, @code{write-region} displays the message @samp{Wrote
address@hidden in the echo area.  If @var{visit} is neither @code{t}
-nor @code{nil} nor a string, then this message is inhibited.  This
address@hidden in the echo area.  This message is inhibited if
address@hidden is neither @code{t} nor @code{nil} nor a string, or if
+Emacs is operating in batch mode (@pxref{Batch Mode}).  This
 feature is useful for programs that use files for internal purposes,
 files that the user does not need to know about.
 @end deffn
@@ -948,6 +951,8 @@ Unix.  These conventions are also followed by 
@code{file-attributes}
 
 @node Kinds of Files
 @subsection Distinguishing Kinds of Files
address@hidden file classification
address@hidden classification of file types
 
   This section describes how to distinguish various kinds of files, such
 as directories, symbolic links, and ordinary files.
@@ -2020,6 +2025,11 @@ form.
 @end example
 @end defun
 
address@hidden directory-name-p filename
+This function returns address@hidden if @var{filename} ends with a
+forward slash (@samp{/}) character.
address@hidden defun
+
 @node Directory Names
 @subsection Directory Names
 @cindex directory name
@@ -2295,6 +2305,8 @@ through the immediately preceding @samp{/}).
 
 @node Unique File Names
 @subsection Generating Unique File Names
address@hidden unique file names
address@hidden temporary files
 
   Some programs need to write temporary files.  Here is the usual way to
 construct a name for such a file:
@@ -2605,6 +2617,14 @@ An error is signaled if @var{directory} is not the name 
of a directory
 that can be read.
 @end defun
 
address@hidden directory-files-recursively directory match &optional 
include-directories
+Return all files under @var{directory} whose file names match
address@hidden recursively.  The file names are returned ``depth first'',
+meaning that contents of sub-directories are returned before contents
+of the directories.  If @var{include-directories} is address@hidden,
+also return directory names that have matching names.
address@hidden defun
+
 @defun directory-files-and-attributes directory &optional full-name 
match-regexp nosort id-format
 This is similar to @code{directory-files} in deciding which files
 to report on and how to report their names.  However, instead
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index 0bded22..a6f4081 100644
--- a/doc/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Frames
@@ -106,6 +106,7 @@ for @code{framep} above.
 
 @node Creating Frames
 @section Creating Frames
address@hidden frame creation
 
 To create a new frame, call the function @code{make-frame}.
 
@@ -484,6 +485,7 @@ parameter values to frames that will be created henceforth.
 
 @node Initial Parameters
 @subsection Initial Frame Parameters
address@hidden parameters of initial frame
 
 You can specify the parameters for the initial startup frame by
 setting @code{initial-frame-alist} in your init file (@pxref{Init
@@ -623,6 +625,7 @@ named, this parameter will be @code{nil}.
 @node Position Parameters
 @subsubsection Position Parameters
 @cindex window position on display
address@hidden frame position
 
   Position parameters' values are normally measured in pixels, but on
 text terminals they count characters or lines instead.
@@ -833,6 +836,8 @@ integer).  @xref{Line Height}, for more information.
 
 @node Buffer Parameters
 @subsubsection Buffer Parameters
address@hidden frame, which buffers to display
address@hidden buffers to display on frame
 
   These frame parameters, meaningful on all kinds of terminals, deal
 with which buffers have been, or should, be displayed in the frame.
@@ -1663,6 +1668,7 @@ is used whenever that frame is selected.  If the frame 
has a minibuffer,
 you can get it with @code{minibuffer-window} (@pxref{Definition of
 minibuffer-window}).
 
address@hidden frame without a minibuffer
 However, you can also create a frame with no minibuffer.  Such a frame
 must use the minibuffer window of some other frame.  When you create the
 frame, you can explicitly specify the minibuffer window to use (in some
@@ -2070,6 +2076,7 @@ allows to know if the pointer has been hidden.
 
 @node Pop-Up Menus
 @section Pop-Up Menus
address@hidden menus, popup
 
   A Lisp program can pop up a menu so that the user can choose an
 alternative with the mouse.  On a text terminal, if the mouse is not
@@ -2334,6 +2341,7 @@ clipboard as empty.
 
 @node Drag and Drop
 @section Drag and Drop
address@hidden drag and drop
 
 @vindex x-dnd-test-function
 @vindex x-dnd-known-types
@@ -2774,20 +2782,26 @@ colors).
 This function returns the number of color cells the screen supports.
 @end defun
 
-  These functions obtain additional information specifically
-about X displays.
+  These functions obtain additional information about the window
+system in use where Emacs shows the specified @var{display}.  (Their
+names begin with @code{x-} for historical reasons.)
 
 @defun x-server-version &optional display
-This function returns the list of version numbers of the X server
-running the display.  The value is a list of three integers: the major
-and minor version numbers of the X protocol, and the
-distributor-specific release number of the X server software itself.
+This function returns the list of version numbers of the GUI window
+system running on @var{display}, such as the X server on GNU and Unix
+systems.  The value is a list of three integers: the major and minor
+version numbers of the protocol, and the distributor-specific release
+number of the window system software itself.  On GNU and Unix systems,
+these are normally the version of the X protocol and the
+distributor-specific release number of the X server software.  On
+MS-Windows, this is the version of the Windows OS.
 @end defun
 
 @defun x-server-vendor &optional display
-This function returns the ``vendor'' that provided the X server
-software (as a string).  Really this means whoever distributes the X
-server.
+This function returns the ``vendor'' that provided the window system
+software (as a string).  On GNU and Unix systems this really means
+whoever distributes the X server.  On MS-Windows this is the vendor ID
+string of the Windows OS (Microsoft).
 
 When the developers of X labeled software distributors as
 ``vendors'', they showed their false assumption that no system could
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index 50849d4..40b8322 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Functions
@@ -1204,17 +1204,18 @@ behavior with:
 
 The arguments @code{:before} and @code{:around} used in the above examples
 specify how the two functions are composed, since there are many different
-ways to do it.  The added function is also called an @emph{advice}.
+ways to do it.  The added function is also called a piece of @emph{advice}.
 
 @menu
 * Core Advising Primitives::    Primitives to manipulate advice.
 * Advising Named Functions::    Advising named functions.
 * Advice combinators::          Ways to compose advice.
-* Porting old advices::         Adapting code using the old defadvice.
+* Porting old advice::          Adapting code using the old defadvice.
 @end menu
 
 @node Core Advising Primitives
 @subsection Primitives to manipulate advices
address@hidden advice, add and remove
 
 @defmac add-function where place function &optional props
 This macro is the handy way to add the advice @var{function} to the function
@@ -1245,22 +1246,25 @@ identify which function to remove.  Typically used when 
@var{function} is an
 anonymous function.
 
 @item depth
-This specifies how to order the advices, in case several advices are present.
-By default, the depth is 0.  A depth of 100 indicates that this advice should
-be kept as deep as possible, whereas a depth of -100 indicates that it
-should stay as the outermost advice.  When two advices specify the same depth,
-the most recently added advice will be outermost.
-
-For a @code{:before} advice, being outermost means that this advice will be run
-first, before any other advice, whereas being innermost means that it will run
-right before the original function, with no other advice run between itself and
-the original function.  Similarly, for an @code{:after} advice innermost means
-that it will run right after the original function, with no other advice run in
-between, whereas outermost means that it will be run very last after all
-other advices.  An innermost @code{:override} advice will only override the
-original function and other advices will apply to it, whereas an outermost
address@hidden:override} advice will override not only the original function 
but all
-other advices applied to it as well.
+This specifies how to order the advice, should several pieces of
+advice be present.  By default, the depth is 0.  A depth of 100
+indicates that this piece of advice should be kept as deep as
+possible, whereas a depth of -100 indicates that it should stay as the
+outermost piece.  When two pieces of advice specify the same depth,
+the most recently added one will be outermost.
+
+For @code{:before} advice, being outermost means that this advice will
+be run first, before any other advice, whereas being innermost means
+that it will run right before the original function, with no other
+advice run between itself and the original function.  Similarly, for
address@hidden:after} advice innermost means that it will run right after the
+original function, with no other advice run in between, whereas
+outermost means that it will be run right at the end after all other
+advice.  An innermost @code{:override} piece of advice will only
+override the original function and other pieces of advice will apply
+to it, whereas an outermost @code{:override} piece of advice will
+override not only the original function but all other advice applied
+to it as well.
 @end table
 
 If @var{function} is not interactive, then the combined function will inherit
@@ -1298,7 +1302,7 @@ function, it can also be the @code{name} of the piece of 
advice.
 @end defun
 
 @defun advice-function-mapc f function-def
-Call the function @var{f} for every advice that was added to
+Call the function @var{f} for every piece of advice that was added to
 @var{function-def}.  @var{f} is called with two arguments: the advice function
 and its properties.
 @end defun
@@ -1313,6 +1317,7 @@ the current prefix argument.
 
 @node Advising Named Functions
 @subsection Advising Named Functions
address@hidden advising named functions
 
 A common use of advice is for named functions and macros.
 You could just use @code{add-function} as in:
@@ -1326,7 +1331,7 @@ instead.  This separate set of functions to manipulate 
pieces of advice applied
 to named functions, offers the following extra features compared to
 @code{add-function}: they know how to deal with macros and autoloaded
 functions, they let @code{describe-function} preserve the original docstring as
-well as document the added advice, and they let you add and remove advices
+well as document the added advice, and they let you add and remove advice
 before a function is even defined.
 
   @code{advice-add} can be useful for altering the behavior of existing calls
@@ -1361,7 +1366,7 @@ up in a confusing situation where some calls (occurring 
from Lisp
 code) obey the advice and other calls (from C code) do not.
 
 @defmac define-advice symbol (where lambda-list &optional name depth) &rest 
body
-This macro defines an advice and adds it to the function named
+This macro defines a piece of advice and adds it to the function named
 @var{symbol}.  The advice is an anonymous function if @var{name} is
 nil or a function named @code{symbol@@name}.  See @code{advice-add}
 for explanation of other arguments.
@@ -1375,23 +1380,23 @@ Add the advice @var{function} to the named function 
@var{symbol}.
 
 @defun advice-remove symbol function
 Remove the advice @var{function} from the named function @var{symbol}.
address@hidden can also be the @code{name} of an advice.
address@hidden can also be the @code{name} of a piece of advice.
 @end defun
 
 @defun advice-member-p function symbol
 Return address@hidden if the advice @var{function} is already in the named
 function @var{symbol}.  @var{function} can also be the @code{name} of
-an advice.
+a piece of advice.
 @end defun
 
 @defun advice-mapc function symbol
-Call @var{function} for every advice that was added to the named function
address@hidden  @var{function} is called with two arguments: the advice function
-and its properties.
+Call @var{function} for every piece of advice that was added to the
+named function @var{symbol}.  @var{function} is called with two
+arguments: the advice function and its properties.
 @end defun
 
 @node Advice combinators
address@hidden Ways to compose advices
address@hidden Ways to compose advice
 
 Here are the different possible values for the @var{where} argument of
 @code{add-function} and @code{advice-add}, specifying how the advice
@@ -1503,14 +1508,15 @@ More specifically, the composition of the two functions 
behaves like:
 @end table
 
 
address@hidden Porting old advices
address@hidden Porting old advice
 @subsection Adapting code using the old defadvice
address@hidden old advices, porting
 
 A lot of code uses the old @code{defadvice} mechanism, which is largely made
 obsolete by the new @code{advice-add}, whose implementation and semantics is
 significantly simpler.
 
-An old advice such as:
+An old piece of advice such as:
 
 @example
 (defadvice previous-line (before next-line-at-end
@@ -1547,11 +1553,11 @@ whereas the new advice mechanism needs:
 
 Note that @code{ad-activate} had a global effect: it activated all pieces of
 advice enabled for that specified function.  If you wanted to only activate or
-deactivate a particular advice, you needed to @emph{enable} or @emph{disable}
-that advice with @code{ad-enable-advice} and @code{ad-disable-advice}.
+deactivate a particular piece, you needed to @emph{enable} or @emph{disable}
+it with @code{ad-enable-advice} and @code{ad-disable-advice}.
 The new mechanism does away with this distinction.
 
-An around advice such as:
+Around advice such as:
 
 @example
 (defadvice foo (around foo-around)
@@ -1577,12 +1583,12 @@ modify the function's arguments (e.g., with 
@code{ad-set-arg}), and that would
 affect the argument values seen by the original function, whereas in the new
 @code{:before}, modifying an argument via @code{setq} in the advice has no
 effect on the arguments seen by the original function.
-When porting a @code{before} advice which relied on this behavior, you'll need
-to turn it into a new @code{:around} or @code{:filter-args} advice instead.
+When porting @code{before} advice which relied on this behavior, you'll need
+to turn it into new @code{:around} or @code{:filter-args} advice instead.
 
-Similarly an old @code{after} advice could modify the returned value by
-changing @code{ad-return-value}, whereas a new @code{:after} advice cannot, so
-when porting such an old @code{after} advice, you'll need to turn it into a new
+Similarly old @code{after} advice could modify the returned value by
+changing @code{ad-return-value}, whereas new @code{:after} advice cannot, so
+when porting such old @code{after} advice, you'll need to turn it into new
 @code{:around} or @code{:filter-return} advice instead.
 
 @node Obsolete Functions
diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi
index 536777a..bfa60e0 100644
--- a/doc/lispref/hash.texi
+++ b/doc/lispref/hash.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Hash Tables
 @chapter Hash Tables
@@ -188,6 +188,8 @@ Such objects may be added to the hash table after it is 
created.
 
 @node Hash Access
 @section Hash Table Access
address@hidden accessing hash tables
address@hidden hash table access
 
   This section describes the functions for accessing and storing
 associations in a hash table.  In general, any Lisp object can be used
diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi
index 20fb0e6..5b3dd58 100644
--- a/doc/lispref/help.texi
+++ b/doc/lispref/help.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Documentation
@@ -90,6 +90,7 @@ hyperlinks in the @file{*Help*} buffer.)
 
 @node Accessing Documentation
 @section Access to Documentation Strings
address@hidden accessing documentation strings
 
 @defun documentation-property symbol property &optional verbatim
 This function returns the documentation string recorded in
@@ -507,6 +508,7 @@ address@hidden, the return value is always a vector.
 
 @node Help Functions
 @section Help Functions
address@hidden help functions
 
   Emacs provides a variety of built-in help functions, all accessible to
 the user as subcommands of the prefix @kbd{C-h}.  For more information
diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi
index 547a2ff..279e78e 100644
--- a/doc/lispref/hooks.texi
+++ b/doc/lispref/hooks.texi
@@ -1,6 +1,7 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1993, 1998, 2001-2014 Free Software 
Foundation, Inc.
address@hidden Copyright (C) 1990-1993, 1998, 2001-2015 Free Software 
Foundation,
address@hidden Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Hooks
 @appendix Standard Hooks
diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index db6ed41..2627ab7 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1993, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1993, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node GNU Emacs Internals
@@ -1684,8 +1684,7 @@ using @code{int}.  Although it is also OK to use 
@code{int}, @code{0}
 and @code{1}, this older style is gradually being phased out.  When
 using @code{bool}, respect the limitations of the replacement
 implementation of @code{bool}, as documented in the source file
address@hidden/stdbool.in.h}, so that Emacs remains portable to pre-C99
-platforms.  In particular, boolean bitfields should be of type
address@hidden/stdbool.in.h}.  In particular, boolean bitfields should be of 
type
 @code{bool_bf}, not @code{bool}, so that they work correctly even when
 compiling Objective C with standard GCC.
 
diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi
index 0c5346f..14bdbdb 100644
--- a/doc/lispref/intro.texi
+++ b/doc/lispref/intro.texi
@@ -1,6 +1,6 @@
 @c -*-coding: utf-8-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1994, 2001-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1990-1994, 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
 @node Introduction
@@ -552,4 +552,4 @@ Trost, Rickard Westman, Jean White, Eduard Wiebe, Matthew 
Wilding,
 Carl Witty, Dale Worley, Rusty Wright, and David D. Zuhn.
 
   For a more complete list of contributors, please see the relevant
-ChangeLog file in the Emacs sources.
+change log entries in the Emacs source repository.
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi
index e652da0..7ba45a6 100644
--- a/doc/lispref/keymaps.texi
+++ b/doc/lispref/keymaps.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1994, 1998-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1990-1994, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Keymaps
 @chapter Keymaps
@@ -782,6 +782,7 @@ Lookup}.
 
 @node Controlling Active Maps
 @section Controlling the Active Keymaps
address@hidden active keymap, controlling
 
 @defvar global-map
 This variable contains the default global keymap that maps Emacs
@@ -1806,6 +1807,8 @@ local map.
 
 @node Scanning Keymaps
 @section Scanning Keymaps
address@hidden scanning keymaps
address@hidden keymaps, scanning
 
   This section describes functions used to scan all the current keymaps
 for the sake of printing help information.
@@ -2775,6 +2778,7 @@ function keys.
 
 @node Modifying Menus
 @subsection Modifying Menus
address@hidden menu modification
 
   When you insert a new item in an existing menu, you probably want to
 put it in a particular place among the menu's existing items.  If you
diff --git a/doc/lispref/lay-flat.texi b/doc/lispref/lay-flat.texi
index 98c778c..81755b6 100644
--- a/doc/lispref/lay-flat.texi
+++ b/doc/lispref/lay-flat.texi
@@ -1,6 +1,6 @@
 \input texinfo    @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 2001-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @c
 @comment %**start of header
diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi
index 21be5cc..a2e70a6 100644
--- a/doc/lispref/lists.texi
+++ b/doc/lispref/lists.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Lists
@@ -84,6 +84,8 @@ structure made out of cons cells as a @dfn{list structure}.
 
 @node List-related Predicates
 @section Predicates on Lists
address@hidden predicates for lists
address@hidden list predicates
 
   The following predicates test whether a Lisp object is an atom,
 whether it is a cons cell or is a list, or whether it is the
@@ -662,6 +664,8 @@ Some examples:
 
 @node List Variables
 @section Modifying List Variables
address@hidden modify a list
address@hidden list modification
 
   These functions, and one macro, provide convenient ways
 to modify a list which is stored in a variable.
@@ -818,6 +822,8 @@ new @sc{car} or @sc{cdr}.
 
 @node Setcar
 @subsection Altering List Elements with @code{setcar}
address@hidden replace list element
address@hidden list, replace element
 
   Changing the @sc{car} of a cons cell is done with @code{setcar}.  When
 used on a list, @code{setcar} replaces one element of a list with a
@@ -923,6 +929,7 @@ x2:              |
 
 @node Setcdr
 @subsection Altering the CDR of a List
address@hidden replace part of list
 
   The lowest-level primitive for modifying a @sc{cdr} is @code{setcdr}:
 
@@ -1759,6 +1766,8 @@ and later discarded; this is not possible with a property 
list.
 
 @node Plist Access
 @subsection Property Lists Outside Symbols
address@hidden plist access
address@hidden accessing plist properties
 
   The following functions can be used to manipulate property lists.
 They all compare property names using @code{eq}.
diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi
index a07c2e8..cf2f000 100644
--- a/doc/lispref/loading.texi
+++ b/doc/lispref/loading.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Loading
@@ -419,6 +419,8 @@ the shadowed files as a string.
 
 @node Loading Non-ASCII
 @section Loading address@hidden Characters
address@hidden loading, and non-ASCII characters
address@hidden non-ASCII characters in loaded files
 
   When Emacs Lisp programs contain string constants with address@hidden
 characters, these can be represented within Emacs either as unibyte
@@ -907,6 +909,8 @@ with a call to @code{provide}.  The order of the elements 
in the
 
 @node Where Defined
 @section Which File Defined a Certain Symbol
address@hidden symbol, where defined
address@hidden where was a symbol defined
 
 @defun symbol-file symbol &optional type
 This function returns the name of the file that defined @var{symbol}.
diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi
index 9be12fa..7bdfee0 100644
--- a/doc/lispref/macros.texi
+++ b/doc/lispref/macros.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998, 2001-2014 Free Software 
Foundation,
address@hidden Copyright (C) 1990-1995, 1998, 2001-2015 Free Software 
Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Macros
@@ -194,6 +194,8 @@ During Compile}).
 
 @node Defining Macros
 @section Defining Macros
address@hidden defining macros
address@hidden macro, how to define
 
   A Lisp macro object is a list whose @sc{car} is @code{macro}, and
 whose @sc{cdr} is a function.  Expansion of the macro works
@@ -253,6 +255,7 @@ Form}.
 
 @node Problems with Macros
 @section Common Problems Using Macros
address@hidden macro caveats
 
   Macro expansion can have counterintuitive consequences.  This
 section describes some important consequences that can lead to
diff --git a/doc/lispref/makefile.w32-in b/doc/lispref/makefile.w32-in
index 01fe149..4185629 100644
--- a/doc/lispref/makefile.w32-in
+++ b/doc/lispref/makefile.w32-in
@@ -1,6 +1,6 @@
 # -*- Makefile -*- for the GNU Emacs Lisp Reference Manual.
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispref/maps.texi b/doc/lispref/maps.texi
index 14cbe72..cc12726 100644
--- a/doc/lispref/maps.texi
+++ b/doc/lispref/maps.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1993, 1999, 2001-2014 Free Software 
Foundation,
address@hidden Copyright (C) 1990-1993, 1999, 2001-2015 Free Software 
Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Keymaps
diff --git a/doc/lispref/markers.texi b/doc/lispref/markers.texi
index 51b87ab..48ac9f0 100644
--- a/doc/lispref/markers.texi
+++ b/doc/lispref/markers.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Markers
@@ -118,6 +118,8 @@ m1
 
 @node Predicates on Markers
 @section Predicates on Markers
address@hidden predicates for markers
address@hidden markers, predicates for
 
   You can test an object to see whether it is a marker, or whether it is
 either an integer or a marker.  The latter test is useful in connection
@@ -141,6 +143,8 @@ integer or floating point) or a marker, @code{nil} 
otherwise.
 
 @node Creating Markers
 @section Functions that Create Markers
address@hidden creating markers
address@hidden marker creation
 
   When you create a new marker, you can make it point nowhere, or point
 to the present position of point, or to the beginning or end of the
@@ -269,6 +273,7 @@ if they both point nowhere.
 
 @node Information from Markers
 @section Information from Markers
address@hidden marker information
 
   This section describes the functions for accessing the components of a
 marker object.
@@ -342,6 +347,8 @@ specify the insertion type, create them with insertion type
 
 @node Moving Markers
 @section Moving Marker Positions
address@hidden moving markers
address@hidden marker, how to move position
 
   This section describes how to change the position of an existing
 marker.  When you do this, be sure you know whether the marker is used
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 1c6a74a..82039ba 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Minibuffers
@@ -107,6 +107,7 @@ are available in batch mode.
 
 @node Text from Minibuffer
 @section Reading Text Strings with the Minibuffer
address@hidden minibuffer input, reading text strings
 
   The most basic primitive for minibuffer input is
 @code{read-from-minibuffer}, which can be used to read either a string
@@ -390,6 +391,7 @@ following bindings, in addition to those of 
@code{minibuffer-local-map}:
 
 @node Object from Minibuffer
 @section Reading Lisp Objects with the Minibuffer
address@hidden minibuffer input, reading lisp objects
 
   This section describes functions for reading Lisp objects with the
 minibuffer.
@@ -2044,6 +2046,7 @@ Do you really want to remove everything? (yes or no)
 
 @node Multiple Queries
 @section Asking Multiple Y-or-N Questions
address@hidden multiple yes-or-no questions
 
   When you have a series of similar questions to ask, such as ``Do you
 want to save this buffer'' for each buffer in turn, you should use
@@ -2218,8 +2221,8 @@ contents of the minibuffer before the point.
 @section Minibuffer Windows
 @cindex minibuffer windows
 
-  These functions access and select minibuffer windows
-and test whether they are active.
+These functions access and select minibuffer windows, test whether they
+are active and control how they get resized.
 
 @defun active-minibuffer-window
 This function returns the currently active minibuffer window, or
@@ -2260,8 +2263,33 @@ This function returns address@hidden if @var{window} is 
the currently
 active minibuffer window.
 @end defun
 
+The following two options control whether minibuffer windows are resized
+automatically and how large they can get in the process.
+
address@hidden resize-mini-windows
+This option specifies whether minibuffer windows are resized
+automatically.  The default value is @code{grow-only}, which means that
+a minibuffer window by default expands automatically to accommodate the
+text it displays and shrinks back to one line as soon as the minibuffer
+gets empty.  If the value is @code{t}, Emacs will always try to fit the
+height of a minibuffer window to the text it displays (with a minimum of
+one line).  If the value is @code{nil}, a minibuffer window never
+changes size automatically.  In that case the window resizing commands
+(@pxref{Resizing Windows}) can be used to adjust its height.
address@hidden defopt
+
address@hidden max-mini-window-height
+This option provides a maximum height for resizing minibuffer windows
+automatically.  A floating-point number specifies a fraction of the
+frame's height; an integer specifies the maximum number of lines.  The
+default value is 0.25.
address@hidden defopt
+
+
 @node Minibuffer Contents
 @section Minibuffer Contents
address@hidden access minibuffer contents
address@hidden minibuffer contents, accessing
 
   These functions access the minibuffer prompt and contents.
 
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index d67bac6..bc247a9 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Modes
@@ -1490,7 +1490,7 @@ A positive prefix argument enables the mode, any other 
prefix argument
 disables it.  From Lisp, an argument of @code{toggle} toggles the mode,
 whereas an omitted or @code{nil} argument enables the mode.
 This makes it easy to enable the minor mode in a major mode hook, for example.
-If @var{doc} is nil, the macro supplies a default documentation string
+If @var{doc} is @code{nil}, the macro supplies a default documentation string
 explaining the above.
 
 By default, it also defines a variable named @var{mode}, which is set to
@@ -3659,7 +3659,7 @@ For example:
 Notice how those lexers return the empty string when in front of
 parentheses.  This is because SMIE automatically takes care of the
 parentheses defined in the syntax table.  More specifically if the lexer
-returns nil or an empty string, SMIE tries to handle the corresponding
+returns @code{nil} or an empty string, SMIE tries to handle the corresponding
 text as a sexp according to syntax tables.
 
 @node SMIE Tricks
diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index 902eb40..50e50ff 100644
--- a/doc/lispref/nonascii.texi
+++ b/doc/lispref/nonascii.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1998-1999, 2001-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1998-1999, 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Non-ASCII Characters
 @chapter address@hidden Characters
@@ -783,6 +783,8 @@ of them is @code{nil}, it defaults to the first or last 
codepoint of
 
 @node Scanning Charsets
 @section Scanning for Character Sets
address@hidden scanning for character sets
address@hidden character set, searching
 
   Sometimes it is useful to find out which character set a particular
 character belongs to.  One use for this is in determining which coding
@@ -1620,6 +1622,9 @@ contents (as it usually does), it should examine the 
contents of
 
 @node Specifying Coding Systems
 @subsection Specifying a Coding System for One Operation
address@hidden specify coding system
address@hidden force coding system for operation
address@hidden coding system for operation
 
   You can specify the coding system for a specific operation by binding
 the variables @code{coding-system-for-read} and/or
diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi
index 8fcd77c..1ee7050 100644
--- a/doc/lispref/numbers.texi
+++ b/doc/lispref/numbers.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Numbers
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index a93f34f..ba28b63 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Lisp Data Types
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index b709447..46df0e7 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node System Interface
@@ -917,13 +917,6 @@ This function returns the name of the machine you are 
running on, as a
 string.
 @end defun
 
-  The symbol @code{system-name} is a variable as well as a function.  In
-fact, the function returns whatever value the variable
address@hidden currently holds.  Thus, you can set the variable
address@hidden in case Emacs is confused about the name of your
-system.  The variable is also useful for constructing frame titles
-(@pxref{Frame Titles}).
-
 @c FIXME seems like this section is not the best place for this option?
 @defopt mail-host-address
 If this variable is address@hidden, it is used instead of
@@ -1208,6 +1201,7 @@ return value is @code{nil}.
 
 @node Time of Day
 @section Time of Day
address@hidden time of day
 
   This section explains how to determine the current time and time
 zone.
@@ -1320,6 +1314,7 @@ time zone.
 @node Time Conversion
 @section Time Conversion
 @cindex calendrical information
address@hidden time conversion
 
   These functions convert time values (@pxref{Time of Day}) into
 calendrical information and vice versa.
@@ -1415,6 +1410,9 @@ on others, years as early as 1901 do work.
 
 @node Time Parsing
 @section Parsing and Formatting Times
address@hidden time parsing
address@hidden time formatting
address@hidden formatting time values
 
   These functions convert time values to text in a string, and vice versa.
 Time values are lists of two to four integers (@pxref{Time of Day}).
@@ -1643,6 +1641,9 @@ interactively, it prints the duration in the echo area.
 
 @node Time Calculations
 @section Time Calculations
address@hidden time calculations
address@hidden comparing time values
address@hidden calendrical computations
 
   These functions perform calendrical computations using time values
 (@pxref{Time of Day}).
@@ -1823,6 +1824,7 @@ cause anything special to happen.
 
 @node Idle Timers
 @section Idle Timers
address@hidden idle timers
 
   Here is how to set up a timer that runs when Emacs is idle for a
 certain length of time.  Aside from how to set them up, idle timers
@@ -2529,7 +2531,7 @@ The server's version number.
 The specification version the server is compliant with.
 @end table
 
-If @var{SPEC_VERSION} is @code{nil}, the server supports a
+If @var{spec_version} is @code{nil}, the server supports a
 specification prior to @samp{"1.0"}.
 @end defun
 
diff --git a/doc/lispref/package.texi b/doc/lispref/package.texi
index c92497a..f8eba2a 100644
--- a/doc/lispref/package.texi
+++ b/doc/lispref/package.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 2010-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2010-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Packaging
 @chapter Preparing Lisp code for distribution
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index e32f0ef..317b9d6 100644
--- a/doc/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1990-1995, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Positions
 @chapter Positions
@@ -465,6 +465,7 @@ beginning or end of a line.
 
 @node Screen Lines
 @subsection Motion by Screen Lines
address@hidden screen lines, moving by
 
   The line functions in the previous section count text lines, delimited
 only by newline characters.  By contrast, these functions count screen
@@ -654,9 +655,9 @@ quotes are ignored.)
 @deffn Command up-list &optional arg escape-strings no-syntax-crossing
 This function moves forward out of @var{arg} (default 1) levels of
 parentheses.  A negative argument means move backward but still to a
-less deep spot.  If @var{escape-strings} is non-nil (as it is
+less deep spot.  If @var{escape-strings} is address@hidden (as it is
 interactively), move out of enclosing strings as well. If
address@hidden is non-nil (as it is interactively), prefer
address@hidden is address@hidden (as it is interactively), prefer
 to break out of any enclosing string instead of moving to the start of
 a list broken across multiple strings.  On error, location of point is
 unspecified.
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index db80f05..99411af 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Processes
@@ -63,6 +63,8 @@ Processes}.
 
 @node Subprocess Creation
 @section Functions that Create Subprocesses
address@hidden create subprocess
address@hidden process creation
 
   There are three primitives that create a new subprocess in which to run
 a program.  One of them, @code{start-process}, creates an asynchronous
@@ -734,6 +736,7 @@ happen sooner or later).
 
 @node Process Information
 @section Process Information
address@hidden process information
 
   Several functions return information about processes.
 
@@ -2041,6 +2044,12 @@ Regular expression matching a successful 
@acronym{STARTTLS} negotiation.
 If address@hidden, do opportunistic @acronym{STARTTLS} upgrades even if Emacs
 doesn't have built-in @acronym{TLS} support.
 
address@hidden :warn-unless-encrypted @var{boolean}
+If address@hidden, and @code{:return-value} is also address@hidden,
+Emacs will warn if the connection isn't encrypted.  This is useful for
+protocols like @acronym{IMAP} and the like, where most users would
+expect the network traffic to be encrypted.
+
 @item :client-certificate @var{list-or-t}
 Either a list of the form @code{(@var{key-file} @var{cert-file})},
 naming the certificate key file and certificate file itself, or
@@ -2066,6 +2075,7 @@ The connection type: @samp{plain} or @samp{tls}.
 
 @end defun
 
+
 @node Network Servers
 @section Network Servers
 @cindex network servers
diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi
index 992ad00..61fac78 100644
--- a/doc/lispref/searching.texi
+++ b/doc/lispref/searching.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Searching and Matching
@@ -257,6 +257,8 @@ it easier to verify even very complex regexps.
 
 @node Syntax of Regexps
 @subsection Syntax of Regular Expressions
address@hidden regexp syntax
address@hidden syntax of regular expressions
 
   Regular expressions have a syntax in which a few characters are
 special constructs and the rest are @dfn{ordinary}.  An ordinary
@@ -294,6 +296,7 @@ need to use one of the special regular expression 
constructs.
 
 @node Regexp Special
 @subsubsection Special Characters in Regular Expressions
address@hidden regexp, special characters in
 
   Here is a list of the characters that are special in a regular
 expression.
@@ -894,6 +897,7 @@ beyond the minimum needed to end a sentence.
 
   These functions operate on regular expressions.
 
address@hidden quote special characters in regexp
 @defun regexp-quote string
 This function returns a regular expression whose only exact match is
 @var{string}.  Using this regular expression in @code{looking-at} will
@@ -924,6 +928,7 @@ whitespace:
 @end example
 @end defun
 
address@hidden optimize regexp
 @defun regexp-opt strings &optional paren
 This function returns an efficient regular expression that will match
 any of the strings in the list @var{strings}.  This is useful when you
@@ -983,10 +988,11 @@ list of characters @var{chars}.
 @cindex searching for regexp
 
   In GNU Emacs, you can search for the next match for a regular
-expression either incrementally or not.  For incremental search
-commands, see @ref{Regexp Search, , Regular Expression Search, emacs,
-The GNU Emacs Manual}.  Here we describe only the search functions
-useful in programs.  The principal one is @code{re-search-forward}.
+expression (@pxref{Syntax of Regexps}) either incrementally or not.
+For incremental search commands, see @ref{Regexp Search, , Regular
+Expression Search, emacs, The GNU Emacs Manual}.  Here we describe
+only the search functions useful in programs.  The principal one is
address@hidden
 
   These search functions convert the regular expression to multibyte if
 the buffer is multibyte; they convert the regular expression to unibyte
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index d3a6792..f82c496 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Sequences Arrays Vectors
@@ -217,14 +217,14 @@ y @result{} [foo (69 2)]
 @end example
 @end defun
 
address@hidden reverse seq
address@hidden reverse sequence
 @cindex string reverse
 @cindex list reverse
 @cindex vector reverse
 @cindex sequence reverse
 This function creates a new sequence whose elements are the elements
-of @var{seq}, but in reverse order.  The original argument @var{seq}
-is @emph{not} altered.   Note that char-table cannot be reversed.
+of @var{sequence}, but in reverse order.  The original argument @var{sequence}
+is @emph{not} altered.  Note that char-tables cannot be reversed.
 
 @example
 @group
@@ -260,12 +260,12 @@ x
 @end example
 @end defun
 
address@hidden nreverse seq
address@hidden nreverse sequence
 @cindex reversing a string
 @cindex reversing a list
 @cindex reversing a vector
-  This function reverses the order of the elements of @var{seq}.
-Unlike @code{reverse} the original @var{seq} may be modified.
+  This function reverses the order of the elements of @var{sequence}.
+Unlike @code{reverse} the original @var{sequence} may be modified.
 
   For example:
 
@@ -419,6 +419,289 @@ See @code{documentation} in @ref{Accessing 
Documentation}, for a
 useful example of @code{sort}.
 @end defun
 
address@hidden sequence functions in seq
address@hidden seq library
+  The @file{seq.el} library provides the following additional sequence
+manipulation macros and functions, prefixed with @code{seq-}.  To use
+them, you must first load the @file{seq} library.
+
+  All functions defined in this library are free of side-effects;
+i.e., they do not modify any sequence (list, vector, or string) that
+you pass as an argument.  Unless otherwise stated, the result is a
+sequence of the same type as the input.  For those functions that take
+a predicate, this should be a function of one argument.
+
address@hidden seq-drop sequence n
+  This function returns all but the first @var{n} (an integer)
+elements of @var{sequence}.  If @var{n} is negative or zero,
+the result is @var{sequence}.
+
address@hidden
address@hidden
+(seq-drop [1 2 3 4 5 6] 3)
address@hidden [4 5 6]
address@hidden group
address@hidden
+(seq-drop "hello world" -4)
address@hidden "hello world"
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-take sequence n
+  This function returns the first @var{n} (an integer) elements of
address@hidden  If @var{n} is negative or zero, the result
+is @code{nil}.
+
address@hidden
address@hidden
+(seq-take '(1 2 3 4) 3)
address@hidden (1 2 3)
address@hidden group
address@hidden
+(seq-take [1 2 3 4] 0)
address@hidden []
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-take-while predicate sequence
+  This function returns the members of @var{sequence} in order,
+stopping before the first one for which @var{predicate} returns @code{nil}.
+
address@hidden
address@hidden
+(seq-take-while (lambda (elt) (> elt 0)) '(1 2 3 -1 -2))
address@hidden (1 2 3)
address@hidden group
address@hidden
+(seq-take-while (lambda (elt) (> elt 0)) [-1 4 6])
address@hidden []
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-drop-while predicate sequence
+  This function returns the members of @var{sequence} in order,
+starting from the first one for which @var{predicate} returns @code{nil}.
+
address@hidden
address@hidden
+(seq-drop-while (lambda (elt) (> elt 0)) '(1 2 3 -1 -2))
address@hidden (-1 -2)
address@hidden group
address@hidden
+(seq-drop-while (lambda (elt) (< elt 0)) [1 4 6])
address@hidden [1 4 6]
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-filter predicate sequence
address@hidden filtering sequences
+  This function returns a list of all the elements in @var{sequence}
+for which @var{predicate} returns address@hidden
+
address@hidden
address@hidden
+(seq-filter (lambda (elt) (> elt 0)) [1 -1 3 -3 5])
address@hidden (1 3 5)
address@hidden group
address@hidden
+(seq-filter (lambda (elt) (> elt 0)) '(-1 -3 -5))
address@hidden nil
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-remove predicate sequence
address@hidden removing from sequences
+  This function returns a list of all the elements in @var{sequence}
+for which @var{predicate} returns @code{nil}.
+
address@hidden
address@hidden
+(seq-remove (lambda (elt) (> elt 0)) [1 -1 3 -3 5])
address@hidden (-1 -3)
address@hidden group
address@hidden
+(seq-remove (lambda (elt) (< elt 0)) '(-1 -3 -5))
address@hidden nil
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-reduce function sequence initial-value
address@hidden reducing sequences
+  This function returns the result of calling @var{function} with
address@hidden and the first element of @var{sequence}, then calling
address@hidden with that result and the second element of @var{sequence},
+then with that result and the third element of @var{sequence}, etc.
address@hidden should be a function of two arguments.  If
address@hidden is empty, this returns @var{initial-value} without
+calling @var{function}.
+
address@hidden
address@hidden
+(seq-reduce #'+ [1 2 3 4] 0)
address@hidden 10
address@hidden group
address@hidden
+(seq-reduce #'+ '(1 2 3 4) 5)
address@hidden 15
address@hidden group
address@hidden
+(seq-reduce #'+ '() 3)
address@hidden 3
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-some-p predicate sequence
+  This function returns the first member of sequence for which @var{predicate}
+returns address@hidden
+
address@hidden
address@hidden
+(seq-some-p #'numberp ["abc" 1 nil])
address@hidden 1
address@hidden group
address@hidden
+(seq-some-p #'numberp ["abc" "def"])
address@hidden nil
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-every-p predicate sequence
+  This function returns address@hidden if applying @var{predicate}
+to every element of @var{sequence} returns address@hidden
+
address@hidden
address@hidden
+(seq-every-p #'numberp [2 4 6])
address@hidden t
address@hidden group
address@hidden
+(seq-some-p #'numberp [2 4 "6"])
address@hidden nil
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-empty-p sequence
+  This function returns address@hidden if @var{sequence} is empty.
+
address@hidden
address@hidden
+(seq-empty-p "not empty")
address@hidden nil
address@hidden group
address@hidden
+(seq-empty-p "")
address@hidden t
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-count predicate sequence
+  This function returns the number of elements in @var{sequence} for which
address@hidden returns address@hidden
+
address@hidden
+(seq-count (lambda (elt) (> elt 0)) [-1 2 0 3 -2])
address@hidden 2
address@hidden example
address@hidden defun
+
address@hidden sorting sequences
address@hidden seq-sort function sequence
+  This function returns a copy of @var{sequence} that is sorted
+according to @var{function}, a function of two arguments that returns
address@hidden if the first argument should sort before the second.
address@hidden defun
+
address@hidden seq-contains-p sequence elt &optional function
+  This function returns the first element in @var{sequence} that is equal to
address@hidden  If the optional argument @var{function} is address@hidden,
+it is a function of two arguments to use instead of the default @code{equal}.
+
address@hidden
address@hidden
+(seq-contains-p '(symbol1 symbol2) 'symbol1)
address@hidden symbol1
address@hidden group
address@hidden
+(seq-contains-p '(symbol1 symbol2) 'symbol3)
address@hidden nil
address@hidden group
address@hidden example
+
address@hidden defun
+
address@hidden seq-uniq sequence &optional function
+  This function returns a list of the elements of @var{sequence} with
+duplicates removed.  If the optional argument @var{function} is address@hidden,
+it is a function of two arguments to use instead of the default @code{equal}.
+
address@hidden
address@hidden
+(seq-uniq '(1 2 2 1 3))
address@hidden (1 2 3)
address@hidden group
address@hidden
+(seq-uniq '(1 2 2.0 1.0) #'=)
address@hidden [3 4]
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-subseq sequence start &optional end
+  This function returns a subset of @var{sequence} from @var{start}
+to @var{end}, both integers (@var{end} defaults to the last element).
+If @var{start} or @var{end} is negative, it counts from the end of
address@hidden
+
address@hidden
address@hidden
+(seq-subseq '(1 2 3 4 5) 1)
address@hidden (2 3 4 5)
address@hidden group
address@hidden
+(seq-subseq '[1 2 3 4 5] 1 3)
address@hidden [2 3]
address@hidden group
address@hidden
+(seq-subseq '[1 2 3 4 5] -3 -1)
address@hidden [3 4]
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-concatenate type &rest sequences
+  This function returns a sequence of type @var{type} made of the
+concatenation of @var{sequences}.  @var{type} may be: @code{vector},
address@hidden or @code{string}.
+
address@hidden
address@hidden
+(seq-concatenate 'list '(1 2) '(3 4) [5 6])
address@hidden (1 2 3 5 6)
address@hidden group
address@hidden
+(seq-concatenate 'string "Hello " "world")
address@hidden "Hello world"
address@hidden group
address@hidden example
address@hidden defun
+
address@hidden seq-doseq (var sequence [result]) address@hidden
address@hidden sequence iteration
+This macro is like @code{dolist}, except that @var{sequence} can be a list,
+vector or string (@pxref{Iteration} for more information about the
address@hidden macro).  This is primarily useful for side-effects.
address@hidden defmac
+
 @node Arrays
 @section Arrays
 @cindex array
diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi
index c287b61..e52a543 100644
--- a/doc/lispref/streams.texi
+++ b/doc/lispref/streams.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1994, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1994, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Read and Print
@@ -339,6 +339,25 @@ shared structures.  @xref{Circular Objects}.  Its default 
value is
 @code{t}.
 @end defvar
 
address@hidden binary I/O in batch mode
+When reading or writing from the standard input/output streams of the
+Emacs process in batch mode, it is sometimes required to make sure any
+arbitrary binary data will be read/written verbatim, and/or that no
+translation of newlines to or from CR-LF pairs are performed.  This
+issue does not exist on Posix hosts, only on MS-Windows and MS-DOS.
+The following function allows to control the I/O mode of any standard
+stream of the Emacs process.
+
address@hidden set-binary-mode stream mode
+Switch @var{stream} into binary or text I/O mode.  If @var{mode} is
address@hidden, switch to binary mode, otherwise switch to text mode.
+The value of @var{stream} can be one of @code{stdin}, @code{stdout},
+or @code{stderr}.  This function flushes any pending output data of
address@hidden as a side effect, and returns the previous value of I/O
+mode for @var{stream}.  On Posix hosts, it always returns a
address@hidden value and does nothing except flushing pending output.
address@hidden defun
+
 @node Output Streams
 @section Output Streams
 @cindex stream (for printing)
@@ -618,7 +637,7 @@ spacing between calls.
 @defun terpri &optional stream ensure
 @cindex newline in print
 This function outputs a newline to @var{stream}.  The name stands for
-``terminate print''.  If @var{ensure} is non-nil no newline is printed
+``terminate print''.  If @var{ensure} is address@hidden no newline is printed
 if @var{stream} is already at the beginning of a line.  Note in this
 case @var{stream} can not be a function and an error is signalled if
 it is.  This function returns @code{t} if a newline is printed.
@@ -686,6 +705,11 @@ This function outputs @var{object} to @var{stream}, just 
like
 indent and fill the object to make it more readable for humans.
 @end defun
 
+If you need to use binary I/O in batch mode, e.g., use the functions
+described in this section to write out arbitrary binary data or avoid
+conversion of newlines on non-Posix hosts, see @ref{Input Functions,
+set-binary-mode}.
+
 @node Output Variables
 @section Variables Affecting Output
 @cindex output-controlling variables
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index 5e0148b..aca6189 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Strings and Characters
@@ -92,6 +92,8 @@ representations and to encode and decode character codes.
 
 @node Predicates for Strings
 @section Predicates for Strings
address@hidden predicates for strings
address@hidden string predicates
 
 For more information about general sequence and array predicates,
 see @ref{Sequences Arrays Vectors}, and @ref{Arrays}.
@@ -113,6 +115,8 @@ character (i.e., an integer), @code{nil} otherwise.
 
 @node Creating Strings
 @section Creating Strings
address@hidden creating strings
address@hidden string creation
 
   The following functions create strings, either from scratch, or by
 putting strings together, or by taking them apart.
@@ -367,6 +371,8 @@ usual value is @address@hidden"[ \f\t\n\r\v]+"}}.
 
 @node Modifying Strings
 @section Modifying Strings
address@hidden modifying strings
address@hidden string modification
 
   The most basic way to alter the contents of an existing string is with
 @code{aset} (@pxref{Array Functions}).  @code{(aset @var{string}
@@ -400,6 +406,7 @@ zeros.  It may also change @var{string}'s length.
 @node Text Comparison
 @section Comparison of Characters and Strings
 @cindex string equality
address@hidden text comparison
 
 @defun char-equal character1 character2
 This function returns @code{t} if the arguments represent the same
@@ -483,17 +490,17 @@ dependent; a @var{locale} "en_US.UTF-8" is applicable on 
POSIX
 systems, while it would be, e.g., "enu_USA.1252" on MS-Windows
 systems.
 
-If @var{IGNORE-CASE} is non-nil, characters are converted to lower-case
+If @var{ignore-case} is address@hidden, characters are converted to lower-case
 before comparing them.
 
 To emulate Unicode-compliant collation on MS-Windows systems,
-bind @code{w32-collate-ignore-punctuation} to a non-nil value, since
+bind @code{w32-collate-ignore-punctuation} to a address@hidden value, since
 the codeset part of the locale cannot be "UTF-8" on MS-Windows.
 
 If your system does not support a locale environment, this function
 behaves like @code{string-equal}.
 
-Do NOT use this function to compare file names for equality, only
+Do @emph{not} use this function to compare file names for equality, only
 for sorting them.
 @end defun
 
@@ -602,11 +609,11 @@ behave like @code{string-lessp}:
 @end group
 @end example
 
-If @var{IGNORE-CASE} is non-nil, characters are converted to lower-case
+If @var{ignore-case} is address@hidden, characters are converted to lower-case
 before comparing them.
 
 To emulate Unicode-compliant collation on MS-Windows systems,
-bind @code{w32-collate-ignore-punctuation} to a non-nil value, since
+bind @code{w32-collate-ignore-punctuation} to a address@hidden value, since
 the codeset part of the locale cannot be "UTF-8" on MS-Windows.
 
 If your system does not support a locale environment, this function
diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi
index e445569..a6545ea 100644
--- a/doc/lispref/symbols.texi
+++ b/doc/lispref/symbols.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Symbols
diff --git a/doc/lispref/syntax.texi b/doc/lispref/syntax.texi
index 25e6089..1f1dd6e 100644
--- a/doc/lispref/syntax.texi
+++ b/doc/lispref/syntax.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Syntax Tables
@@ -592,6 +592,8 @@ in turn, repeatedly, until they all return @code{nil}.
 
 @node Motion and Syntax
 @section Motion and Syntax
address@hidden moving across syntax classes
address@hidden skipping characters of certain syntax
 
   This section describes functions for moving across characters that
 have certain syntax classes.
@@ -631,6 +633,8 @@ expression prefix syntax class, and characters with the 
@samp{p} flag.
 
 @node Parsing Expressions
 @section Parsing Expressions
address@hidden parsing expressions
address@hidden scanning expressions
 
   This section describes functions for parsing and scanning balanced
 expressions.  We will refer to such expressions as @dfn{sexps},
@@ -673,6 +677,7 @@ result, Emacs treats them as four consecutive empty string 
constants.
 
 @node Motion via Parsing
 @subsection Motion Commands Based on Parsing
address@hidden motion based on parsing
 
   This section describes simple point-motion functions that operate
 based on parsing expressions.
@@ -738,6 +743,7 @@ cannot exceed that many.
 
 @node Position Parse
 @subsection Finding the Parse State for a Position
address@hidden parse state for a position
 
   For syntactic analysis, such as in indentation, often the useful
 thing is to compute the syntactic state corresponding to a given buffer
@@ -919,6 +925,7 @@ nicely.
 
 @node Control Parsing
 @subsection Parameters to Control Parsing
address@hidden parsing, control parameters
 
 @defvar multibyte-syntax-as-symbol
 If this variable is address@hidden, @code{scan-sexps} treats all
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index d1a1e6f..a7cfb22 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1990-1995, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Text
 @chapter Text
@@ -162,6 +162,7 @@ the end of a line.
 
 @node Buffer Contents
 @section Examining Buffer Contents
address@hidden buffer portion as string
 
   This section describes functions that allow a Lisp program to
 convert any portion of the text in the buffer into a string.
@@ -219,6 +220,12 @@ This function returns the contents of the entire 
accessible portion of
 the current buffer, as a string.
 @end defun
 
+  If you need to make sure the resulting string, when copied to a
+different location, will not change its visual appearance due to
+reordering of bidirectional text, use the
address@hidden function
+(@pxref{Bidirectional Display, buffer-substring-with-bidi-context}).
+
 @defun filter-buffer-substring start end &optional delete
 This function filters the buffer text between @var{start} and @var{end}
 using a function specified by the variable
@@ -343,10 +350,10 @@ This function ignores case when comparing characters
 if @code{case-fold-search} is address@hidden  It always ignores
 text properties.
 
-Suppose the current buffer contains the text @samp{foobarbar
-haha!rara!}; then in this example the two substrings are @samp{rbar }
-and @samp{rara!}.  The value is 2 because the first substring is greater
-at the second character.
+Suppose you have the text @address@hidden haha!rara!}} in the
+current buffer; then in this example the two substrings are @samp{rbar
+} and @samp{rara!}.  The value is 2 because the first substring is
+greater at the second character.
 
 @example
 (compare-buffer-substrings nil 6 11 nil 16 21)
@@ -2673,6 +2680,8 @@ along with the characters; this includes such diverse 
functions as
 
 @node Examining Properties
 @subsection Examining Text Properties
address@hidden examining text properties
address@hidden text properties, examining
 
   The simplest way to examine text properties is to ask for the value of
 a particular property of a particular character.  For that, use
@@ -2764,6 +2773,8 @@ used instead.  Here is an example:
 
 @node Changing Properties
 @subsection Changing Text Properties
address@hidden changing text properties
address@hidden text properties, changing
 
   The primitives for changing properties apply to a specified range of
 text in a buffer or string.  The function @code{set-text-properties}
@@ -2927,6 +2938,8 @@ buffer but does not copy its properties.
 
 @node Property Search
 @subsection Text Property Search Functions
address@hidden searching text properties
address@hidden text properties, searching
 
   In typical use of text properties, most of the time several or many
 consecutive characters have the same value for a property.  Rather than
@@ -3718,6 +3731,7 @@ clicks on the link quickly without moving the mouse.  
This behavior is
 controlled by the user option @code{mouse-1-click-follows-link}.
 @xref{Mouse References,,, emacs, The GNU Emacs Manual}.
 
address@hidden follow-link (text or overlay property)
   To set up the link so that it obeys
 @code{mouse-1-click-follows-link}, you must either (1) apply a
 @code{follow-link} text or overlay property to the link text, or (2)
@@ -3985,6 +3999,8 @@ coalesced whenever possible.  @xref{Property Search}.
 
 @node Substitution
 @section Substituting for a Character Code
address@hidden replace characters in region
address@hidden substitute characters
 
   The following functions replace characters within a specified region
 based on their character codes.
@@ -4324,7 +4340,7 @@ coding instead.
 When Emacs is compiled with libxml2 support, the following functions
 are available to parse HTML or XML text into Lisp object trees.
 
address@hidden libxml-parse-html-region start end &optional base-url
address@hidden libxml-parse-html-region start end &optional base-url 
discard-comments
 This function parses the text between @var{start} and @var{end} as
 HTML, and returns a list representing the HTML @dfn{parse tree}.  It
 attempts to handle ``real world'' HTML by robustly coping with syntax
@@ -4333,6 +4349,9 @@ mistakes.
 The optional argument @var{base-url}, if address@hidden, should be a
 string specifying the base URL for relative URLs occurring in links.
 
+If the optional argument @var{discard-comments} is address@hidden,
+then the parse tree is created without any comments.
+
 In the parse tree, each HTML node is represented by a list in which
 the first element is a symbol representing the node name, the second
 element is an alist of node attributes, and the remaining elements are
@@ -4346,16 +4365,17 @@ document:
 @end example
 
 @noindent
-A call to @code{libxml-parse-html-region} returns this:
+A call to @code{libxml-parse-html-region} returns this @acronym{DOM}
+(document object model):
 
 @example
-(html ()
-  (head ())
-  (body ((width . "101"))
-   (div ((class . "thing"))
-    "Foo"
-    (div ()
-      "Yes"))))
+(html nil
+ (head nil)
+ (body ((width . "101"))
+  (div ((class . "thing"))
+   "Foo"
+   (div nil
+    "Yes"))))
 @end example
 @end defun
 
@@ -4368,12 +4388,140 @@ buffer.  The argument @var{dom} should be a list as 
generated by
 @end defun
 
 @cindex parsing xml
address@hidden libxml-parse-xml-region start end &optional base-url
address@hidden libxml-parse-xml-region start end &optional base-url 
discard-comments
 This function is the same as @code{libxml-parse-html-region}, except
 that it parses the text as XML rather than HTML (so it is stricter
 about syntax).
 @end defun
 
address@hidden
+* Document Object Model:: Access, manipulate and search the @acronym{DOM}.
address@hidden menu
+
address@hidden Document Object Model
address@hidden Document Object Model
address@hidden HTML DOM
address@hidden XML DOM
address@hidden DOM
address@hidden Document Object Model
+
+The @acronym{DOM} returned by @code{libxml-parse-html-region} (and the
+other @acronym{XML} parsing functions) is a tree structure where each
+node has a node name (called a @dfn{tag}), and optional key/value
address@hidden list, and then a list of @dfn{child nodes}.  The child
+nodes are either strings or @acronym{DOM} objects.
+
address@hidden
+(body ((width . "101"))
+ (div ((class . "thing"))
+  "Foo"
+  (div nil
+   "Yes")))
address@hidden example
+
address@hidden dom-node tag &optional attributes &rest children
+This function creates a @acronym{DOM} node of type @var{tag}.  If
+given, @var{attributes} should be a key/value pair list.
+If given, @var{children} should be @acronym{DOM} nodes.
address@hidden defun
+
+The following functions can be used to work with this structure.  Each
+function takes a @acronym{DOM} node, or a list of nodes.  In the
+latter case, only the first node in the list is used.
+
+Simple accessors:
+
address@hidden @code
address@hidden dom-tag @var{node}
+Return the @dfn{tag} (also called ``node name'') of the node.
+
address@hidden dom-attr @var{node} @var{attribute}
+Return the value of @var{attribute} in the node.  A common usage
+would be:
+
address@hidden
+(dom-attr img 'href)
+=> "http://fsf.org/logo.png";
address@hidden lisp
+
address@hidden dom-children @var{node}
+Return all the children of the node.
+
address@hidden dom-non-text-children @var{node}
+Return all the non-string children of the node.
+
address@hidden dom-attributes @var{node}
+Return the key/value pair list of attributes of the node.
+
address@hidden dom-text @var{node}
+Return all the textual elements of the node as a concatenated string.
+
address@hidden dom-texts @var{node}
+Return all the textual elements of the node, as well as the textual
+elements of all the children of the node, recursively, as a
+concatenated string.  This function also takes an optional separator
+to be inserted between the textual elements.
+
address@hidden dom-parent @var{dom} @var{node}
+Return the parent of @var{node} in @var{dom}.
address@hidden table
+
+The following are functions for altering the @acronym{DOM}.
+
address@hidden @code
address@hidden dom-set-attribute @var{node} @var{attribute} @var{value}
+Set the @var{attribute} of the node to @var{value}.
+
address@hidden dom-append-child @var{node} @var{child}
+Append @var{child} as the last child of @var{node}.
+
address@hidden dom-add-child-before @var{node} @var{child} @var{before}
+Add @var{child} to @var{node}'s child list before the @var{before}
+node.  If @var{before} is @code{nil}, make @var{child} the first child.
+
address@hidden dom-set-attributes @var{node} @var{attributes}
+Replace all the attributes of the node with a new key/value list.
address@hidden table
+
+The following are functions for searching for elements in the
address@hidden  They all return lists of matching nodes.
+
address@hidden @code
address@hidden dom-by-tag @var{dom} @var{tag}
+Return all nodes in @var{dom} that are of type @var{tag}.  A typical
+use would be:
+
address@hidden
+(dom-by-tag dom 'td)
+=> '((td ...) (td ...) (td ...))
address@hidden lisp
+
address@hidden dom-by-class @var{dom} @var{match}
+Return all nodes in @var{dom} that have class names that match
address@hidden, which is a regular expression.
+
address@hidden dom-by-style @var{dom} @var{style}
+Return all nodes in @var{dom} that have styles that match @var{match},
+which is a regular expression.
+
address@hidden dom-by-id @var{dom} @var{style}
+Return all nodes in @var{dom} that have IDs that match @var{match},
+which is a regular expression.
+
address@hidden dom-strings @var{dom}
+Return all strings in @var{DOM}.
+
address@hidden table
+
+Utility functions:
+
address@hidden @code
address@hidden dom-pp @var{dom} &optional @var{remove-empty}
+Pretty-print @var{dom} at point.  If @var{remove-empty}, don't print
+textual nodes that just contain white-space.
address@hidden table
+
+
 @node Atomic Changes
 @section Atomic Change Groups
 @cindex atomic changes
diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi
index d8b906d..8970efe 100644
--- a/doc/lispref/tips.texi
+++ b/doc/lispref/tips.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1993, 1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1993, 1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Tips
@@ -918,7 +918,7 @@ explains these conventions, starting with an example:
 @group
 ;;; foo.el --- Support for the Foo programming language
 
-;; Copyright (C) 2010-2014 Your Name
+;; Copyright (C) 2010-2015 Your Name
 @end group
 
 ;; Author: Your Name <yourname@@example.com>
@@ -1062,9 +1062,9 @@ context.
 @item ;;; Change Log:
 This begins an optional log of changes to the file over time.  Don't
 put too much information in this section---it is better to keep the
-detailed logs in a separate @file{ChangeLog} file (as Emacs does),
-and/or to use a version control system.  @samp{History} is an
-alternative to @samp{Change Log}.
+detailed logs in a version control system (as Emacs does) or in a
+separate @file{ChangeLog} file.  @samp{History} is an alternative to
address@hidden Log}.
 
 @item ;;; Code:
 This begins the actual code of the program.
diff --git a/doc/lispref/two-volume-cross-refs.txt 
b/doc/lispref/two-volume-cross-refs.txt
index f9d0512..eded8c4 100644
--- a/doc/lispref/two-volume-cross-refs.txt
+++ b/doc/lispref/two-volume-cross-refs.txt
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See end for copying conditions.
 
 Two Volume Cross References
diff --git a/doc/lispref/two-volume.make b/doc/lispref/two-volume.make
index a75b26b..64799d8 100644
--- a/doc/lispref/two-volume.make
+++ b/doc/lispref/two-volume.make
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2014 Free Software Foundation, Inc.
+# Copyright (C) 2007-2015 Free Software Foundation, Inc.
 # See end for copying conditions.
 
 # although it would be nice to use tex rather than pdftex to avoid
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index e890dbc..27bc061 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1990-1995, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Variables
 @chapter Variables
@@ -1403,6 +1403,7 @@ buffer-local variable interactively, just as it is useful 
to create
 buffer-local variables interactively.
 @end deffn
 
address@hidden local variables, killed by major mode
 @defun kill-all-local-variables
 This function eliminates all the buffer-local variable bindings of the
 current buffer except for variables marked as ``permanent'' and local
@@ -1951,6 +1952,7 @@ foo
 
 @node Variables with Restricted Values
 @section Variables with Restricted Values
address@hidden lisp variables defined in C, restrictions
 
   Ordinary Lisp variables can be assigned any value that is a valid
 Lisp object.  However, certain Lisp variables are not defined in Lisp,
@@ -1987,6 +1989,8 @@ Attempting to assign them any other value will result in 
an error:
 @node Generalized Variables
 @section Generalized Variables
 
address@hidden generalized variable
address@hidden place form
 A @dfn{generalized variable} or @dfn{place form} is one of the many places
 in Lisp memory where values can be stored.  The simplest place form is
 a regular Lisp variable.  But the @sc{car}s and @sc{cdr}s of lists, elements
diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index 5060fef..8d6e124 100644
--- a/doc/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
address@hidden Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Windows
@@ -16,6 +16,7 @@ is displayed in windows.
 * Windows and Frames::      Relating windows to the frame they appear on.
 * Window Sizes::            Accessing a window's size.
 * Resizing Windows::        Changing the sizes of windows.
+* Preserving Window Sizes:: Preserving the size of windows.
 * Splitting Windows::       Creating a new window.
 * Deleting Windows::        Removing a window from its frame.
 * Recombining Windows::     Preserving the frame layout when splitting and
@@ -657,22 +658,6 @@ window.  Its value has to accommodate two text columns as 
well as
 margins, fringes, a scroll bar and a right divider, if present.
 @end defopt
 
address@hidden window-size-fixed
-If this buffer-local variable is address@hidden, the size of any
-window displaying the buffer cannot normally be changed.  Deleting a
-window or changing the frame's size may still change its size, if
-there is no choice.
-
-If the value is @code{height}, then only the window's height is fixed;
-if the value is @code{width}, then only the window's width is fixed.
-Any other address@hidden value fixes both the width and the height.
-
-If this variable is @code{nil}, this does not necessarily mean that any
-window showing the buffer can be resized in the desired direction.  To
-determine that, use the function @code{window-resizable}.
address@hidden Windows}.
address@hidden defvar
-
 The following function tells how small a specific window can get taking
 into account the sizes of its areas and the values of
 @code{window-min-height}, @code{window-min-width} and
@@ -817,7 +802,7 @@ option is @code{nil}.  The default value is @code{nil}.
   The following commands resize windows in more specific ways.  When
 called interactively, they act on the selected window.
 
address@hidden Command fit-window-to-buffer &optional window max-height 
min-height max-width min-width
address@hidden Command fit-window-to-buffer &optional window max-height 
min-height max-width min-width preserve-size
 This command adjusts the height or width of @var{window} to fit the text
 in it.  It returns address@hidden if it was able to resize @var{window},
 and @code{nil} otherwise.  If @var{window} is omitted or @code{nil}, it
@@ -845,6 +830,10 @@ defaults to the width of @var{window}'s frame.  The 
optional argument
 specified in columns and include fringes, margins and scrollbars, if
 any.
 
+The optional argument @var{preserve-size}, if address@hidden, will
+install a parameter to preserve the size of @var{window} during future
+resize operations (@pxref{Preserving Window Sizes}).
+
 If the option @code{fit-frame-to-buffer} (see below) is address@hidden,
 this function will try to resize the frame of @var{window} to fit its
 contents by calling @code{fit-frame-to-buffer} (@pxref{Size and
@@ -918,6 +907,98 @@ window.
 @end deffn
 
 
address@hidden Preserving Window Sizes
address@hidden Preserving Window Sizes
address@hidden preserving window sizes
+
+A window can get resized explicitly by using one of the functions from
+the preceding section or implicitly, for example, when resizing an
+adjacent window, when splitting or deleting a window (@pxref{Splitting
+Windows}, @pxref{Deleting Windows}) or when resizing the window's frame
+(@pxref{Size and Position}).
+
+  It is possible to avoid implicit resizing of a specific window when
+there are one or more other resizable windows on the same frame.  For
+this purpose, Emacs must be advised to @dfn{preserve} the size of that
+window.  There are two basic ways to do that.
+
address@hidden window-size-fixed
+If this buffer-local variable is address@hidden, the size of any window
+displaying the buffer cannot normally be changed.  Deleting a window or
+changing the frame's size may still change the window's size, if there
+is no choice.
+
+If the value is @code{height}, then only the window's height is fixed;
+if the value is @code{width}, then only the window's width is fixed.
+Any other address@hidden value fixes both the width and the height.
+
+If this variable is @code{nil}, this does not necessarily mean that any
+window showing the buffer can be resized in the desired direction.  To
+determine that, use the function @code{window-resizable}.
address@hidden Windows}.
address@hidden defvar
+
+Often @code{window-size-fixed} is overly aggressive because it inhibits
+any attempt to explicitly resize or split an affected window as well.
+This may even happen after the window has been resized implicitly, for
+example, when deleting an adjacent window or resizing the window's
+frame.  The following function tries hard to never disallow resizing
+such a window explicitly:
+
address@hidden window-preserve-size &optional window horizontal preserve
+This function (un-)marks the height of window @var{window} as preserved
+for future resize operations.  @var{window} must be a live window and
+defaults to the selected one.  If the optional argument @var{horizontal}
+is address@hidden, it (un-)marks the width of @var{window} as preserved.
+
+If the optional argument @var{preserve} is @code{t}, this means to
+preserve the current height/width of @var{window}'s body.  The
+height/width of @var{window} will change only if Emacs has no better
+choice.  Resizing a window whose height/width is preserved by this
+function never throws an error.
+
+If @var{preserve} is @code{nil}, this means to stop preserving the
+height/width of @var{window}, lifting any respective restraint induced
+by a previous call of this function for @var{window}.  Calling
address@hidden, @code{shrink-window} or
address@hidden with @var{window} as argument may also
+remove the respective restraint.
address@hidden defun
+
address@hidden is currently invoked by the following
+functions:
+
address@hidden @code
address@hidden fit-window-to-buffer
+If the optional argument @var{preserve-size} of that function
+(@pxref{Resizing Windows}) is address@hidden, the size established by
+that function is preserved.
+
address@hidden display-buffer
+If the @var{alist} argument of that function (@pxref{Choosing Window})
+contains a @code{preserve-size} entry, the size of the window produced
+by that function is preserved.
address@hidden table
+
+  @code{window-preserve-size} installs a window parameter (@pxref{Window
+Parameters}) called @code{preserved-size} which is consulted by the
+window resizing functions.  This parameter will not prevent resizing the
+window when the window shows another buffer than the one when
address@hidden was invoked or if its size has changed since
+then.
+
+The following function can be used to check whether the height of a
+particular window is preserved:
+
address@hidden window-preserved-size &optional window horizontal
+This function returns the preserved height of window @var{window} in
+pixels.  @var{window} must be a live window and defaults to the selected
+one.  If the optional argument @var{horizontal} is address@hidden, it
+returns the preserved width of @var{window}.  It returns @code{nil} if
+the size of @var{window} is not preserved.
address@hidden defun
+
+
 @node Splitting Windows
 @section Splitting Windows
 @cindex splitting windows
@@ -1078,6 +1159,7 @@ point was previously on.  Note that this only affects
 function.
 @end defopt
 
+
 @node Deleting Windows
 @section Deleting Windows
 @cindex deleting windows
@@ -1170,6 +1252,8 @@ are the opposite of what they are in those other 
functions.
 
 @node Recombining Windows
 @section Recombining Windows
address@hidden recombining windows
address@hidden windows, recombining
 
 When deleting the last sibling of a window @var{W}, its parent window
 is deleted too, with @var{W} replacing it in the window tree.  This
@@ -2233,6 +2317,13 @@ argument: the new window.  The function is supposed to 
adjust the width
 of the window; its return value is ignored.
 @end itemize
 
+If @var{alist} contains a @code{preserve-size} entry, Emacs will try to
+preserve the size of the new window during future resize operations
+(@pxref{Preserving Window Sizes}).  The @sc{cdr} of that entry must be a
+cons cell whose @sc{car}, if address@hidden, means to preserve the width
+of the window and whose @sc{cdr}, if address@hidden, means to preserve
+the height of the window.
+
 This function can fail if no window splitting can be performed for some
 reason (e.g., if the selected frame has an @code{unsplittable} frame
 parameter; @pxref{Buffer Parameters}).
@@ -3900,6 +3991,15 @@ This parameter specifies the window that this one has 
been cloned
 from.  It is installed by @code{window-state-get} (@pxref{Window
 Configurations}).
 
address@hidden @code{preserved-size}
+This parameter specifies a buffer, a direction where @code{nil} means
+vertical and @code{t} horizontal, and a size in pixels.  If this window
+displays the specified buffer and its size in the indicated direction
+equals the size specified by this parameter, then Emacs will try to
+preserve the size of this window in the indicated direction.  This
+parameter is installed and updated by the function
address@hidden (@pxref{Preserving Window Sizes}).
+
 @item @code{quit-restore}
 This parameter is installed by the buffer display functions
 (@pxref{Choosing Window}) and consulted by @code{quit-restore-window}
diff --git a/doc/man/ChangeLog b/doc/man/ChangeLog
index ad220a3..205e9b9 100644
--- a/doc/man/ChangeLog
+++ b/doc/man/ChangeLog
@@ -1,3 +1,7 @@
+2014-12-14  Glenn Morris  <address@hidden>
+
+       * grep-changelog.1: Remove file.
+
 2014-11-10  Glenn Morris  <address@hidden>
 
        * emacs.1.in: Rename from emacs.1.
@@ -172,7 +176,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2007-2014 Free Software Foundation, Inc.
+  Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
@@ -188,4 +192,3 @@
 
   You should have received a copy of the GNU General Public License
   along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
diff --git a/doc/man/ebrowse.1 b/doc/man/ebrowse.1
index ce887b0..a4f0c79 100644
--- a/doc/man/ebrowse.1
+++ b/doc/man/ebrowse.1
@@ -85,7 +85,7 @@ was written by Gerd Moellmann.
 Copyright
 .if t \(co
 .if n (C)
-2008-2014 Free Software Foundation, Inc.
+2008-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/man/emacs.1.in b/doc/man/emacs.1.in
index fc7be71..259acb9 100644
--- a/doc/man/emacs.1.in
+++ b/doc/man/emacs.1.in
@@ -651,7 +651,7 @@ For detailed credits and acknowledgments, see the GNU Emacs 
manual.
 Copyright
 .if t \(co
 .if n (C)
-1995, 1999-2014 Free Software Foundation, Inc.
+1995, 1999-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/man/etags.1 b/doc/man/etags.1
index 7d13892..08db343 100644
--- a/doc/man/etags.1
+++ b/doc/man/etags.1
@@ -268,7 +268,7 @@ Stallman.
 Copyright
 .if t \(co
 .if n (C)
-1992, 1999, 2001-2014 Free Software Foundation, Inc.
+1992, 1999, 2001-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/man/grep-changelog.1 b/doc/man/grep-changelog.1
deleted file mode 100644
index a3635a6..0000000
--- a/doc/man/grep-changelog.1
+++ /dev/null
@@ -1,80 +0,0 @@
-.\" -*- nroff -*-
-.\" See section COPYING for copyright and redistribution information.
-.TH grep-changelog 1
-.SH NAME
-grep-changelog \- print ChangeLog entries matching criteria
-.SH SYNOPSIS
-.B grep-changelog
-.RI [ options ]
-.RI [ CHANGELOG .\|.\|.]
-.SH DESCRIPTION
-.B grep-changelog
-searches the named
-.IR CHANGELOG s
-(by default files matching the regular expressions
-.B ChangeLog
-and
-.BR "ChangeLog\e.[0-9]+" )
-for entries matching the specified criteria.  At least one option or
-file must be specified.  This program is distributed with
-.BR "GNU Emacs" .
-.PP
-.SH OPTIONS
-The program accepts unambiguous abbreviations for option names.
-.TP
-.B \-\-author=AUTHOR
-Print entries whose author matches regular expression
-.IR AUTHOR .
-.TP
-.B \-\-text=TEXT
-Print entries whose text matches regular expression
-.IR TEXT .
-.TP
-.B \-\-exclude=TEXT
-Exclude entries matching regular expression
-.IR TEXT .
-.TP
-.B \-\-from\-date=YYYY\-MM\-DD
-Only consider entries made on or after the given date.
-ChangeLog date entries not in the
-\*(lqYYYY\-MM\-DD\*(rq format are never matched.
-.TP
-.B \-\-to\-date=YYYY\-MM\-DD
-Only consider entries made on or before the given date.
-.TP
-.B \-\-rcs\-log
-Print output in a format suitable for RCS log entries.
-This format removes author lines, leading spaces, and file names.
-.TP
-.B \-\-with\-date
-In RCS log format, print short dates.
-.TP
-.B \-\-reverse
-Show matches in reverse order.
-.TP
-.B \-\-version
-Display version information.
-.TP
-.B \-\-help
-Display basic usage information.
-.
-.SH COPYING
-Copyright 
-.if t \(co
-.if n (C)
-2008-2014 Free Software Foundation, Inc.
-.PP
-Permission is granted to make and distribute verbatim copies of this
-document provided the copyright notice and this permission notice are
-preserved on all copies.
-.PP
-Permission is granted to copy and distribute modified versions of
-this document 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.
-.PP
-Permission is granted to copy and distribute translations of this
-document into another language, under the above conditions for
-modified versions, except that this permission notice may be stated
-in a translation approved by the Free Software Foundation.
-.
diff --git a/doc/misc/.gitignore b/doc/misc/.gitignore
deleted file mode 100644
index 3ff56b4..0000000
--- a/doc/misc/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-*.aux
-*.cp
-*.cps
-*.dvi
-*.fn
-*.fns
-*.ky
-*.kys
-*.log
-*.op
-*.ops
-*.pdf
-*.pg
-*.pgs
-*.ps
-*.tmp
-*.toc
-*.tp
-*.tps
-*.vr
-*.vrs
-Makefile
-makefile
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index 8b7aa1c..e75589f 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,3 +1,78 @@
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * eudc.texi (LDAP Configuration): Rename from LDAP Requirements
+       and provide configuration examples.
+
+2015-01-17  Stefan Monnier  <address@hidden>
+
+       * eieio.texi (Slot Options): Document :protection as unsupported.
+
+2015-01-01  Michael Albinus  <address@hidden>
+
+       Sync with Tramp 2.2.11.
+       * trampver.texi: Update release number.
+
+2014-12-31  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for Emacs doc
+       * Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
+       (am__v_GEN_0, am__v_GEN_1): New macros, from ../../src/Makefile.in.
+       (ENVADD, $(buildinfodir)/%.info, %.html, ${buildinfodir}/ccmode.info)
+       (${buildinfodir}/efaq%.info, efaq%.html):
+       Use them.
+
+2014-12-31  Filipp Gunbin  <address@hidden>
+
+       * info.texi (Create Info buffer): Mention info-display-manual prefix.
+
+2014-12-29  Paul Eggert  <address@hidden>
+
+       * efaq.texi (Displaying the current file name in the titlebar):
+       Prefer (system-name) to system-name.
+       * smtpmail.texi (Server workarounds): Fix grammar.
+
+2014-12-18  Eric Abrahamsen  <address@hidden>
+
+       * gnus.texi (Gnus Registry Setup): Explain pruning changes.
+       Mention gnus-registry-prune-factor. Explain sorting changes and
+       gnus-registry-default-sort-function. Correct file extension.
+
+2014-12-17  Jay Belanger  <address@hidden>
+
+       * calc.texi (About This Manual): Update instructions
+       for building the manual.
+
+2014-12-15  Alan Mackenzie  <address@hidden>
+
+       "Advice" is a mass noun.  Amend text accordingly.
+       * cl.texi (Obsolete Macros): Replace "an advice" with "advice".
+
+2014-12-12  Paul Eggert  <address@hidden>
+
+       * texinfo.tex: Update from gnulib.
+
+2014-12-08  Andrey Kotlarski  <address@hidden>
+
+       * eww.texi (Basics): Document managing multiple eww buffers.
+
+2014-12-05  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * eww.texi (Basics): Document eww PDF viewing.
+
+2014-11-23  Ivan Shmakov  <address@hidden>
+
+       * eww.texi (Advanced): Mention the Desktop stuff (bug#18010).
+
+2014-11-23  Michael Albinus  <address@hidden>
+
+       * tramp.texi (Remote processes): Let-bind environment variables to
+       `process-environment' when running `process-file' or
+       `start-file-process'.
+
+2014-11-19  Ivan Shmakov  <address@hidden>
+
+       * eww.texi (Basics): Document `eww-history-limit'.
+
 2014-11-14  Paul Eggert  <address@hidden>
 
        * org.texi (The date/time prompt, Matching tags and properties):
@@ -65,11 +140,11 @@
 
 2014-10-26  Eric S. Raymond  <address@hidden>
 
-       * efaq-w32.texi: Neutralized language specific to a repository type.
+       * efaq-w32.texi: Neutralize language specific to a repository type.
 
 2014-10-25  Eric S. Raymond  <address@hidden>
 
-       * gnus-coding.txt: Neutralized language specific to a repository type.
+       * gnus-coding.texi: Neutralize language specific to a repository type.
 
 2014-10-20  Glenn Morris  <address@hidden>
 
@@ -11968,7 +12043,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
index 40a072a..e2de06d 100644
--- a/doc/misc/Makefile.in
+++ b/doc/misc/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994, 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1996-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -96,7 +96,15 @@ TEXI2DVI = texi2dvi
 TEXI2PDF = texi2pdf
 DVIPS = dvips
 
-ENVADD = TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+ENVADD = $(AM_V_GEN)TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \
          MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)"
 
 gfdl = ${srcdir}/doclicense.texi
@@ -133,7 +141,8 @@ ${buildinfodir}:
 EXTRA_OPTS =
 
 ${buildinfodir}/%.info: ${srcdir}/%.texi ${gfdl} | ${buildinfodir}
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) $(EXTRA_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) $(EXTRA_OPTS) \
+         -o $@ $<
 
 ## The short aliases, eg efaq = $(buildinfodir)/efaq.info.
 define info_template
@@ -153,7 +162,8 @@ $(foreach ifile,$(filter-out 
info.info,$(INFO_TARGETS)),$(eval $(call info_templ
        $(ENVADD) $(TEXI2PDF) $<
 
 %.html: ${srcdir}/%.texi ${gfdl}
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) $(EXTRA_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) $(EXTRA_OPTS) \
+         -o $@ $<
 
 %.ps: %.dvi
        $(DVIPS) -o $@ $<
@@ -175,12 +185,12 @@ $(buildinfodir)/semantic.info semantic.dvi semantic.pdf 
semantic.html: ${srcdir}
 
 ## Please can we just rename cc-mode.texi to ccmode.texi...
 ${buildinfodir}/ccmode.info: ${srcdir}/cc-mode.texi ${gfdl} | ${buildinfodir}
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
 
 ## efaq, efaq_w32 do not depend on gfdl.
 ## Maybe we can use .SECONDEXPANSION for this.
 ${buildinfodir}/efaq%.info: ${srcdir}/efaq%.texi | ${buildinfodir}
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
 
 efaq%.dvi: ${srcdir}/efaq%.texi
        $(ENVADD) $(TEXI2DVI) $<
@@ -189,7 +199,7 @@ efaq%.pdf: ${srcdir}/efaq%.texi
        $(ENVADD) $(TEXI2PDF) $<
 
 efaq%.html: ${srcdir}/efaq%.texi
-       $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
+       $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
 
 ${buildinfodir}/emacs-mime.info emacs-mime.html: EXTRA_OPTS = --enable-encoding
 
diff --git a/doc/misc/ada-mode.texi b/doc/misc/ada-mode.texi
index ac39c7c..539e2b2 100644
--- a/doc/misc/ada-mode.texi
+++ b/doc/misc/ada-mode.texi
@@ -4,7 +4,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 976143e..44fcad8 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -11,7 +11,7 @@
 @copying
 This file describes the Emacs auth-source library.
 
-Copyright @copyright{} 2008--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2008--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi
index a298879..65cbae5 100644
--- a/doc/misc/autotype.texi
+++ b/doc/misc/autotype.texi
@@ -11,7 +11,7 @@
 @c  @cindex autotypist
 
 @copying
-Copyright @copyright{} 1994--1995, 1999, 2001--2014
+Copyright @copyright{} 1994--1995, 1999, 2001--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/bovine.texi b/doc/misc/bovine.texi
index 28c75f8..cd2e736 100644
--- a/doc/misc/bovine.texi
+++ b/doc/misc/bovine.texi
@@ -24,7 +24,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1999--2004, 2012--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2004, 2012--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi
index ede9598..30e39c4 100644
--- a/doc/misc/calc.texi
+++ b/doc/misc/calc.texi
@@ -95,7 +95,7 @@ This file documents Calc, the GNU Emacs calculator, included 
with
 GNU Emacs @value{EMACSVER}.
 @end ifnotinfo
 
-Copyright @copyright{} 1990--1991, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1990--1991, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -349,25 +349,12 @@ program by Donald Knuth at Stanford University) as well 
as the
 @file{texindex} program and @file{texinfo.tex} file, both of which can
 be obtained from the FSF as part of the @code{texinfo} package.
 To print the Calc manual in one huge tome, you will need the
-source code to this manual, @file{calc.texi}, available as part of the
-Emacs source.  Once you have this file, type @kbd{texi2dvi calc.texi}.
-Alternatively, change to the @file{man} subdirectory of the Emacs
-source distribution, and type @kbd{make calc.dvi}. (Don't worry if you
-get some ``overfull box'' warnings while @TeX{} runs.)
-The result will be a device-independent output file called
address@hidden, which you must print in whatever way is right
-for your system.  On many systems, the command is
-
address@hidden
-lpr -d calc.dvi
address@hidden example
-
address@hidden
-or
-
address@hidden
-dvips calc.dvi
address@hidden example
+Emacs source, which contains the source code to this manual,
address@hidden  Change to the @file{doc/misc} subdirectory of the
+Emacs source distribution, which contains source code for this manual,
+and type @kbd{make calc.pdf}. (Don't worry if you get some ``overfull
+box'' warnings while @TeX{} runs.)   The result will be this entire
+manual as a pdf file.
 @end ifnottex
 @c Printed copies of this manual are also available from the Free Software
 @c Foundation.
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index 74e3485..1b79640 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -157,7 +157,7 @@ CC Mode
 @copying
 This manual is for CC Mode in Emacs.
 
-Copyright @copyright{} 1995--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi
index c15918a..6677602 100644
--- a/doc/misc/cl.texi
+++ b/doc/misc/cl.texi
@@ -7,7 +7,7 @@
 @copying
 This file documents the GNU Emacs Common Lisp emulation package.
 
-Copyright @copyright{} 1993, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1993, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -4914,7 +4914,7 @@ through the Lisp @code{message} function.
 For those cases where the dynamic scoping of @code{flet} is desired,
 @code{cl-flet} is clearly not a substitute.  The most direct replacement would
 be instead to use @code{cl-letf} to temporarily rebind @code{(symbol-function
-'@var{fun})}.  But in most cases, a better substitute is to use an advice, such
+'@var{fun})}.  But in most cases, a better substitute is to use advice, such
 as:
 
 @example
@@ -4930,7 +4930,7 @@ binding of @code{my-fun-advice-enable}.
 
 @c Bug#411.
 Note that many primitives (e.g., @code{+}) have special byte-compile handling.
-Attempts to redefine such functions using @code{flet}, @code{cl-letf}, or an
+Attempts to redefine such functions using @code{flet}, @code{cl-letf}, or
 advice will fail when byte-compiled.
 @c Or cl-flet.
 @c In such cases, use @code{labels} instead.
diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi
index 0c19cb9..2eef4f4 100644
--- a/doc/misc/dbus.texi
+++ b/doc/misc/dbus.texi
@@ -10,7 +10,7 @@
 @syncodeindex fn cp
 
 @copying
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/dired-x.texi b/doc/misc/dired-x.texi
index 1eb512b..90fb511 100644
--- a/doc/misc/dired-x.texi
+++ b/doc/misc/dired-x.texi
@@ -20,7 +20,7 @@
 @comment %**end of header (This is for running Texinfo on a region.)
 
 @copying
-Copyright @copyright{} 1994--1995, 1999, 2001--2014
+Copyright @copyright{} 1994--1995, 1999, 2001--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ebrowse.texi b/doc/misc/ebrowse.texi
index bbb94fe..943b98d 100644
--- a/doc/misc/ebrowse.texi
+++ b/doc/misc/ebrowse.texi
@@ -11,7 +11,7 @@
 @copying
 This file documents Ebrowse, a C++ class browser for GNU Emacs.
 
-Copyright @copyright{} 2000--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2000--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi
index c61a32c..ecf1d03 100644
--- a/doc/misc/ede.texi
+++ b/doc/misc/ede.texi
@@ -6,7 +6,7 @@
 @copying
 This file describes EDE, the Emacs Development Environment.
 
-Copyright @copyright{} 1998--2001, 2004--2005, 2008--2014
+Copyright @copyright{} 1998--2001, 2004--2005, 2008--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ediff.texi b/doc/misc/ediff.texi
index 4e1806d..36c6ae2 100644
--- a/doc/misc/ediff.texi
+++ b/doc/misc/ediff.texi
@@ -26,7 +26,7 @@
 This file documents Ediff, a comprehensive visual interface to Unix diff
 and patch utilities.
 
-Copyright @copyright{} 1995--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/edt.texi b/doc/misc/edt.texi
index 1705752..aa0ef63 100644
--- a/doc/misc/edt.texi
+++ b/doc/misc/edt.texi
@@ -6,7 +6,7 @@
 @copying
 This file documents the EDT emulation package for Emacs.
 
-Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2014
+Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index 904a6ff..9691a73 100644
--- a/doc/misc/efaq-w32.texi
+++ b/doc/misc/efaq-w32.texi
@@ -17,7 +17,7 @@ Answers to Frequently asked Questions about using Emacs on 
Microsoft Windows.
 @documentlanguage en
 
 @copying
-Copyright @copyright{} 2008, 2010-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2008, 2010-2015 Free Software Foundation, Inc.
 
 @quotation
 This list of frequently asked questions about GNU Emacs on MS Windows
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index 0159101..8417827 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -12,7 +12,7 @@
 @c appreciate a notice if you do).
 
 @copying
-Copyright @copyright{} 2001--2014 Free Software Foundation, address@hidden
+Copyright @copyright{} 2001--2015 Free Software Foundation, address@hidden
 Copyright @copyright{} 1994, 1995, 1996, 1997, 1998, 1999, 2000
 Reuven M. address@hidden
 Copyright @copyright{} 1992, 1993 Steven address@hidden
@@ -1469,7 +1469,7 @@ machine at which Emacs was invoked.  This is done by 
setting
 @code{frame-title-format} to the default value of
 
 @lisp
-(multiple-frames "%b" ("" invocation-name "@@" system-name))
+(multiple-frames "%b" ("" invocation-name "@@" (system-name)))
 @end lisp
 
 To modify the behavior such that frame titlebars contain the buffer's
diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi
index 80e52ba..3f42862 100644
--- a/doc/misc/eieio.texi
+++ b/doc/misc/eieio.texi
@@ -12,7 +12,7 @@
 @copying
 This manual documents EIEIO, an object framework for Emacs Lisp.
 
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -538,10 +538,15 @@ to quote the symbol.  If you wanted to run a function on 
load, you
 can output the code to do the construction of the value.
 
 @item :protection
+This is an old option that is not supported any more.
+
 When using a slot referencing function such as @code{slot-value}, and
 the value behind @var{slot} is private or protected, then the current
 scope of operation must be within a method of the calling object.
 
+This protection is not enforced by the code any more, so it's only useful
+as documentation.
+
 Valid values are:
 
 @table @code
diff --git a/doc/misc/emacs-gnutls.texi b/doc/misc/emacs-gnutls.texi
index 8eb5298..25bb9d0 100644
--- a/doc/misc/emacs-gnutls.texi
+++ b/doc/misc/emacs-gnutls.texi
@@ -9,7 +9,7 @@
 @copying
 This file describes the Emacs GnuTLS integration.
 
-Copyright @copyright{} 2012--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2012--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi
index 36ea0b2..0147db3 100644
--- a/doc/misc/emacs-mime.texi
+++ b/doc/misc/emacs-mime.texi
@@ -11,7 +11,7 @@
 @copying
 This file documents the Emacs MIME interface functionality.
 
-Copyright @copyright{} 1998--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1998--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/epa.texi b/doc/misc/epa.texi
index 8ee683e..8de8604 100644
--- a/doc/misc/epa.texi
+++ b/doc/misc/epa.texi
@@ -10,7 +10,7 @@
 @copying
 This file describes EasyPG Assistant @value{VERSION}.
 
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/erc.texi b/doc/misc/erc.texi
index bcdae1e..aaa88ce 100644
--- a/doc/misc/erc.texi
+++ b/doc/misc/erc.texi
@@ -10,7 +10,7 @@
 @copying
 This manual is for ERC as distributed with Emacs @value{EMACSVER}.
 
-Copyright @copyright{} 2005--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2005--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi
index 9f29c25..51e9586 100644
--- a/doc/misc/ert.texi
+++ b/doc/misc/ert.texi
@@ -11,7 +11,7 @@
 @end direntry
 
 @copying
-Copyright @copyright{} 2008, 2010--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2008, 2010--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index e77e690..ca90573 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -10,7 +10,7 @@
 @copying
 This manual is for Eshell, the Emacs shell.
 
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi
index 086e741..9757c82 100644
--- a/doc/misc/eudc.texi
+++ b/doc/misc/eudc.texi
@@ -13,7 +13,7 @@ EUDC is the Emacs Unified Directory Client, a common 
interface to
 directory servers using various protocols such as LDAP or the CCSO white
 pages directory system (PH/QI)
 
-Copyright @copyright{} 1998, 2000--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1998, 2000--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -137,7 +137,7 @@ location, address@hidden More information about LDAP can be 
found at
 @url{http://www.openldap.org/}.
 
 EUDC requires external support to access LDAP directory servers
-(@pxref{LDAP Requirements})
+(@pxref{LDAP Configuration})
 
 
 @node CCSO PH/QI
@@ -213,17 +213,131 @@ email composition buffers (@pxref{Inline Query 
Expansion})
 @end lisp
 
 @menu
-* LDAP Requirements::           EUDC needs external support for LDAP
+* LDAP Configuration::           EUDC needs external support for LDAP
 @end menu
 
address@hidden LDAP Requirements
address@hidden LDAP Requirements
address@hidden LDAP Configuration
address@hidden LDAP Configuration
 
-LDAP support is added by means of @file{ldap.el}, which is part of Emacs.
address@hidden needs an external command line utility named
address@hidden, available as part of Open LDAP
-(@url{http://www.openldap.org/}).
+LDAP support is added by means of @file{ldap.el}, which is part of
+Emacs.  @file{ldap.el} needs an external command line utility named
address@hidden, available as part of OpenLDAP
+(@url{http://www.openldap.org/}).  The configurations in this section
+were tested with OpenLDAP 2.4.23.
 
+The following examples use a base of
address@hidden,dc=example,dc=com} and the host name
address@hidden, a server that supports LDAP-over-SSL
+(the @code{ldaps} protocol, with default port @code{636}) and which
+requires authentication by the user @code{emacsuser} with password
address@hidden
+
+These configurations are meant to be self-contained; that is, each
+provides everything required for sensible TAB-completion of email
+fields.  BBDB lookups are attempted first; if a matching BBDB entry is
+found then EUDC will not attempt any LDAP lookups.
+
+Wildcard LDAP lookups are supported using the @code{*} character.  For
+example, attempting to TAB-complete the following:
+
address@hidden
+To: * Smith
address@hidden example
+
+will return all LDAP entries with surnames that begin with
address@hidden  In every LDAP query it makes, EUDC implicitly appends
+the wildcard character to the end of the last word.
+
address@hidden Emacs-only Configuration
+
+Emacs can pass most required configuration options via the
address@hidden command-line.  One exception is certificate
+configuration for LDAP-over-SSL, which must be specified in
address@hidden/etc/openldap/ldap.conf}.  On systems that provide such
+certificates as part of the @code{OpenLDAP} installation, this can be
+as simple as one line:
+
address@hidden
+TLS_CACERTDIR /etc/openldap/certs
address@hidden example
+
+In @file{.emacs}, these expressions suffice to configure EUDC for
+LDAP:
+
address@hidden
+(eval-after-load "message"
+  '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
+(customize-set-variable 'eudc-server-hotlist
+                        '(("" . bbdb)
+                          ("ldaps://directory.example.com" . ldap)))
+(customize-set-variable 'ldap-host-parameters-alist
+                        '(("ldaps://directory.example.com"
+                           base "ou=people,dc=example,dc=com"
+                           binddn "example\\emacsuser"
+                           passwd ldap-password-read)))
address@hidden lisp
+
+Specifying the function @code{ldap-password-read} for @code{passwd}
+will cause Emacs to prompt interactively for the password.  The
+password will then be validated and cached, unless
address@hidden is nil.  You can customize
address@hidden to control the duration for which the
+password is cached.  If you want to clear the cache, call
address@hidden
+
address@hidden External Configuration
+
+Your system may already be configured for a default LDAP server.  For
+example, @file{/etc/openldap/ldap.conf} might contain:
+
address@hidden
+BASE ou=people,dc=example,dc=com
+URI ldaps://directory.example.com
+TLS_CACERTDIR /etc/openldap/certs
address@hidden example
+
+To authenticate, the @dfn{bind distinguished name (binddn)} is
+required, in this case, @code{example\emacsuser}, along with the
+password.  These can be specified in @file{~/.authinfo.gpg} with the
+following line:
+
address@hidden
+machine ldaps://directory.example.com binddn example\emacsuser password s3cr3t
address@hidden example
+
+Then in the @file{.emacs} init file, these expressions suffice to
+configure EUDC for LDAP:
+
address@hidden
+(eval-after-load "message"
+  '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
+(customize-set-variable 'eudc-server-hotlist
+                        '(("" . bbdb)
+                          ("ldaps://directory.example.com" . ldap)))
+(customize-set-variable 'ldap-host-parameters-alist
+                        '(("ldaps://directory.example.com"
+                           auth-source t)))
address@hidden lisp
+
+For this example where we only care about one server, the server name
+can be omitted in @file{~/.authinfo.gpg} and @file{.emacs}, in which
+case @file{ldapsearch} defaults to the host name in
address@hidden/etc/openldap/ldap.conf}.
+
+The @file{~/.authinfo.gpg} line becomes:
+
address@hidden
+binddn example\emacsuser password s3cr3t
address@hidden example
+
+and the @file{.emacs} expressions become:
+
address@hidden
+(eval-after-load "message"
+  '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
+(customize-set-variable 'eudc-server-hotlist '(("" . bbdb) ("" . ldap)))
+(customize-set-variable 'ldap-host-parameters-alist '(("" auth-source t)))
address@hidden lisp
 
 @node Usage
 @chapter Usage
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index 2208c2d..fd9f6f5 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -8,7 +8,7 @@
 @copying
 This file documents the GNU Emacs Web Wowser (EWW) package.
 
-Copyright @copyright{} 2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2014--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -126,6 +126,21 @@ history press @kbd{H} (@code{eww-list-histories}) to open 
the history
 buffer @file{*eww history*}.  The history is lost when EWW is quit.
 If you want to remember websites you can use bookmarks.
 
address@hidden eww-history-limit
+  Along with the URLs visited, EWW also remembers both the rendered
+page (as it appears in the buffer) and its source.  This can take a
+considerable amount of memory, so EWW discards the history entries to
+keep their number within a set limit, as specified by
address@hidden; the default being 50.  This variable could
+also be set to @code{nil} to allow for the history list to grow
+indefinitely.
+
address@hidden PDF
+  PDFs are viewed inline, by default, with @code{doc-view-mode}, but
+this can be customized by using the mailcap (@pxref{mailcap,,,
+emacs-mime, Emacs MIME Manual})
+mechanism, in particular @code{mailcap-mime-data}.
+
 @findex eww-add-bookmark
 @findex eww-list-bookmarks
 @kindex b
@@ -137,6 +152,13 @@ You can view stored bookmarks with @kbd{B}
 (@code{eww-list-bookmarks}).  This will open the bookmark buffer
 @file{*eww bookmarks*}.
 
address@hidden eww-list-buffers
address@hidden S
address@hidden Multiple Buffers
+  To get summary of currently opened EWW buffers, press @kbd{S}
+(@code{eww-list-buffers}).  The @file{*eww buffers*} buffer allows to
+quickly kill, flip through and switch to specific EWW buffer.
+
 @findex eww-browse-with-external-browser
 @vindex shr-external-browser
 @vindex eww-use-external-browser-for-content-type
@@ -210,6 +232,40 @@ contrast.  If that is still too low for you, you can 
customize the
 variables @code{shr-color-visible-distance-min} and
 @code{shr-color-visible-luminance-min} to get a better contrast.
 
address@hidden Desktop Support
address@hidden Saving Sessions
+  In addition to maintaining the history at run-time, EWW will also
+save the partial state of its buffers (the URIs and the titles of the
+pages visited) in the desktop file if one is used.  @xref{Saving Emacs
+Sessions, , emacs, The GNU Emacs Manual}.
+
address@hidden eww-desktop-remove-duplicates
+  EWW history may sensibly contain multiple entries for the same page
+URI.  At run-time, these entries may still have different associated
+point positions or the actual Web page contents.
+The latter, however, tend to be overly large to preserve in the
+desktop file, so they get omitted, thus rendering the respective
+entries entirely equivalent.  By default, such duplicate entries are
+not saved.  Setting @code{eww-desktop-remove-duplicates} to nil will
+force EWW to save them anyway.
+
address@hidden eww-restore-desktop
+  Restoring EWW buffers' contents may prove to take too long to
+finish.  When the @code{eww-restore-desktop} variable is set to
address@hidden (the default), EWW will not try to reload the last visited
+Web page when the buffer is restored from the desktop file, thus
+allowing for faster Emacs start-up times.  When set to @code{t},
+restoring the buffers will also initiate the reloading of such pages.
+
address@hidden eww-restore-reload-prompt
+  The EWW buffer restored from the desktop file but not yet reloaded
+will contain a prompt, as specified by the
address@hidden variable.  The value of this variable
+will be passed through @code{substitute-command-keys} upon each use,
+thus allowing for the use of the usual substitutions, such as
address@hidden for the current key binding of the
address@hidden command.
+
 @node History and Acknowledgments
 @appendix History and Acknowledgments
 
diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi
index 7bd8fd1..31fa1ab 100644
--- a/doc/misc/flymake.texi
+++ b/doc/misc/flymake.texi
@@ -12,7 +12,7 @@
 This manual is for GNU Flymake (version @value{VERSION}, @value{UPDATED}),
 which is a universal on-the-fly syntax checker for GNU Emacs.
 
-Copyright @copyright{} 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/forms.texi b/doc/misc/forms.texi
index ea7999a..433009c 100644
--- a/doc/misc/forms.texi
+++ b/doc/misc/forms.texi
@@ -19,7 +19,7 @@
 @copying
 This file documents Forms mode, a form-editing major mode for GNU Emacs.
 
-Copyright @copyright{} 1989, 1997, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1989, 1997, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi
index adbdd68..bbead6b 100644
--- a/doc/misc/gnus-coding.texi
+++ b/doc/misc/gnus-coding.texi
@@ -8,7 +8,7 @@
 @syncodeindex pg cp
 
 @copying
-Copyright @copyright{} 2004--2005, 2007--2014 Free Software
+Copyright @copyright{} 2004--2005, 2007--2015 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi
index 83fff5e..8eb7c77 100644
--- a/doc/misc/gnus-faq.texi
+++ b/doc/misc/gnus-faq.texi
@@ -1,7 +1,7 @@
 @c \input texinfo @c -*-texinfo-*-
 @c Uncomment 1st line before texing this file alone.
 @c %**start of header
address@hidden Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 @c
 @c @setfilename gnus-faq.info
 @c @settitle Frequently Asked Questions
@@ -1649,7 +1649,7 @@ aren't they and how to fix it?
 
 @subsubheading Answer
 
-The message-ID is an unique identifier for messages you
+The message-ID is a unique identifier for messages you
 send. To make it unique, Gnus need to know which machine
 name to put after the "@@". If the name of the machine
 where Gnus is running isn't suitable (it probably isn't
diff --git a/doc/misc/gnus-news.el b/doc/misc/gnus-news.el
index fdb4fe8..81986f2 100644
--- a/doc/misc/gnus-news.el
+++ b/doc/misc/gnus-news.el
@@ -1,5 +1,5 @@
 ;;; gnus-news.el --- a hack to create GNUS-NEWS from texinfo source
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Reiner Steib  <address@hidden>
 ;; Keywords: tools
@@ -26,7 +26,7 @@
 (defvar gnus-news-header-disclaimer
 "GNUS NEWS -- history of user-visible changes.
 
-Copyright (C) 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Gnus bug reports to address@hidden
diff --git a/doc/misc/gnus-news.texi b/doc/misc/gnus-news.texi
index a48b1f1..c5b96e7 100644
--- a/doc/misc/gnus-news.texi
+++ b/doc/misc/gnus-news.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 
address@hidden Copyright (C) 2004-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 @c    Permission is granted to anyone to make or distribute verbatim copies
 @c    of this document as received, in any medium, provided that the
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 57aee27..cb80874 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -11,7 +11,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 1995--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -25953,17 +25953,34 @@ the word ``archive'' is not followed.
 
 @defvar gnus-registry-max-entries
 The number (an integer or @code{nil} for unlimited) of entries the
-registry will keep.
+registry will keep.  If the registry has reached or exceeded this
+size, it will reject insertion of new entries.
 @end defvar
 
address@hidden gnus-registry-max-pruned-entries
-The maximum number (an integer or @code{nil} for unlimited) of entries
-the registry will keep after pruning.
address@hidden gnus-registry-prune-factor
+This option (a float between 0 and 1) controls how much the registry
+is cut back during pruning.  In order to prevent constant pruning, the
+registry will be pruned back to less than
address@hidden  This option controls exactly how
+much less: the target is calculated as the maximum number of entries
+minus the maximum number times this factor.  The default is 0.1:
+i.e. if your registry is limited to 50000 entries, pruning will try to
+cut back to 45000 entries.  Entries with keys marked as precious will
+not be pruned.
address@hidden defvar
+
address@hidden gnus-registry-default-sort-function
+This option specifies how registry entries are sorted during pruning.
+If a function is given, it should sort least valuable entries first,
+as pruning starts from the beginning of the list.  The default value
+is @code{gnus-registry-sort-by-creation-time}, which proposes the
+oldest entries for pruning.  Set to nil to perform no sorting, which
+will speed up the pruning process.
 @end defvar
 
 @defvar gnus-registry-cache-file
 The file where the registry will be stored between Gnus sessions.  By
-default the file name is @code{.gnus.registry.eioio} in the same
+default the file name is @code{.gnus.registry.eieio} in the same
 directory as your @code{.newsrc.eld}.
 @end defvar
 
diff --git a/doc/misc/htmlfontify.texi b/doc/misc/htmlfontify.texi
index 5bf0449..630b5f7 100644
--- a/doc/misc/htmlfontify.texi
+++ b/doc/misc/htmlfontify.texi
@@ -10,7 +10,7 @@
 This manual documents Htmlfontify, a source code -> crosslinked +
 formatted + syntax colorized html transformer.
 
-Copyright @copyright{} 2002-2003, 2013-2014 Free Software Foundation,
+Copyright @copyright{} 2002-2003, 2013-2015 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/idlwave.texi b/doc/misc/idlwave.texi
index 5c1c8ba..1858a51 100644
--- a/doc/misc/idlwave.texi
+++ b/doc/misc/idlwave.texi
@@ -23,7 +23,7 @@ Emacs, and interacting with an IDL shell run as a subprocess.
 This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE
 @value{VERSION}.
 
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/ido.texi b/doc/misc/ido.texi
index 82acada..25380c0 100644
--- a/doc/misc/ido.texi
+++ b/doc/misc/ido.texi
@@ -7,7 +7,7 @@
 @copying
 This file documents the Ido package for GNU Emacs.
 
-Copyright @copyright{} 2013-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2013-2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/info.texi b/doc/misc/info.texi
index a3a14a3..759956d 100644
--- a/doc/misc/info.texi
+++ b/doc/misc/info.texi
@@ -15,7 +15,7 @@
 This file describes how to use Info, the menu-driven GNU
 documentation system.
 
-Copyright @copyright{} 1989, 1992, 1996--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1989, 1992, 1996--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -1151,7 +1151,10 @@ switches to the buffer @file{*info*<2>}, creating it if 
necessary.
   If you have created many Info buffers in Emacs, you might find it
 difficult to remember which buffer is showing which manual.  You can
 use the command @kbd{M-x info-display-manual} to show an Info manual
-by name, reusing an existing buffer if there is one.
+by name, reusing an existing buffer if there is one.  When given a
+prefix argument, this command limits the completion alternatives to
+currently visited info files, thus giving a convenient way to switch
+between several manuals.
 
 @node Emacs Info Variables
 @section Emacs Info-mode Variables
diff --git a/doc/misc/mairix-el.texi b/doc/misc/mairix-el.texi
index 42e7c2b..5cf9ab0 100644
--- a/doc/misc/mairix-el.texi
+++ b/doc/misc/mairix-el.texi
@@ -6,7 +6,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 2008--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2008--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/makefile.w32-in b/doc/misc/makefile.w32-in
index 2edc4ce..6869d94 100644
--- a/doc/misc/makefile.w32-in
+++ b/doc/misc/makefile.w32-in
@@ -1,6 +1,6 @@
 #### -*- Makefile -*- for documentation other than the Emacs manual.
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/misc/message.texi b/doc/misc/message.texi
index 792aa4e..6e49c0a 100644
--- a/doc/misc/message.texi
+++ b/doc/misc/message.texi
@@ -11,7 +11,7 @@
 @copying
 This file documents Message, the Emacs message composition mode.
 
-Copyright @copyright{} 1996--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1996--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/mh-e.texi b/doc/misc/mh-e.texi
index 6b64a10..fc2303c 100644
--- a/doc/misc/mh-e.texi
+++ b/doc/misc/mh-e.texi
@@ -25,7 +25,7 @@
 This is version @address@hidden of @cite{The MH-E
 Manual}, last updated @value{UPDATED}.
 
-Copyright @copyright{} 1995, 2001--2003, 2005--2014 Free Software
+Copyright @copyright{} 1995, 2001--2003, 2005--2015 Free Software
 Foundation, Inc.
 
 @c This dual license has been agreed upon by the FSF.
diff --git a/doc/misc/newsticker.texi b/doc/misc/newsticker.texi
index bef63c0..a9ebc20 100644
--- a/doc/misc/newsticker.texi
+++ b/doc/misc/newsticker.texi
@@ -15,7 +15,7 @@ This manual documents Newsticker, a feed reader for Emacs.  It
 corresponds to Emacs version @value{EMACSVER}.
 
 @noindent
-Copyright @copyright{} 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/nxml-mode.texi b/doc/misc/nxml-mode.texi
index 93a8d9a..d213355 100644
--- a/doc/misc/nxml-mode.texi
+++ b/doc/misc/nxml-mode.texi
@@ -9,7 +9,7 @@
 This manual documents nXML mode, an Emacs major mode for editing
 XML with RELAX NG support.
 
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/octave-mode.texi b/doc/misc/octave-mode.texi
index 6fefab3..b65c5ee 100644
--- a/doc/misc/octave-mode.texi
+++ b/doc/misc/octave-mode.texi
@@ -6,7 +6,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1996--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1996--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/org.texi b/doc/misc/org.texi
index 5851f3b..2cb80ab 100644
--- a/doc/misc/org.texi
+++ b/doc/misc/org.texi
@@ -259,7 +259,7 @@
 @copying
 This manual is for Org version @value{VERSION}.
 
-Copyright @copyright{} 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -12954,7 +12954,7 @@ Copyright information is printed on the back of the 
title page.
 
   This is a short example of a complete Texinfo file, version 1.0.
 
-  Copyright \copy 2014 Free Software Foundation, Inc.
+  Copyright \copy 2015 Free Software Foundation, Inc.
 @end example
 
 @subsubheading The Top node
diff --git a/doc/misc/pcl-cvs.texi b/doc/misc/pcl-cvs.texi
index 099c4be..6970c69 100644
--- a/doc/misc/pcl-cvs.texi
+++ b/doc/misc/pcl-cvs.texi
@@ -7,7 +7,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1991--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1991--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/pgg.texi b/doc/misc/pgg.texi
index 193f7f7..4518de4 100644
--- a/doc/misc/pgg.texi
+++ b/doc/misc/pgg.texi
@@ -13,7 +13,7 @@
 This file describes PGG @value{VERSION}, an Emacs interface to various
 PGP implementations.
 
-Copyright @copyright{} 2001, 2003--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2001, 2003--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/rcirc.texi b/doc/misc/rcirc.texi
index e37db19..f0241f0 100644
--- a/doc/misc/rcirc.texi
+++ b/doc/misc/rcirc.texi
@@ -6,7 +6,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2006--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2006--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi
index 7a1b224..567063f 100644
--- a/doc/misc/reftex.texi
+++ b/doc/misc/reftex.texi
@@ -46,7 +46,7 @@ This manual documents @RefTeX{} (version @value{VERSION}), a 
package
 to do labels, references, citations and indices for LaTeX documents
 with Emacs.
 
-Copyright @copyright{} 1997--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1997--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/remember.texi b/doc/misc/remember.texi
index 28c0ef5..ff481b7 100644
--- a/doc/misc/remember.texi
+++ b/doc/misc/remember.texi
@@ -9,7 +9,7 @@
 @copying
 This manual is for Remember Mode, version 2.0
 
-Copyright @copyright{} 2001, 2004--2005, 2007--2014
+Copyright @copyright{} 2001, 2004--2005, 2007--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/sasl.texi b/doc/misc/sasl.texi
index 41afd9b..f6f0a98 100644
--- a/doc/misc/sasl.texi
+++ b/doc/misc/sasl.texi
@@ -12,7 +12,7 @@
 @copying
 This file describes the Emacs SASL library, version @value{VERSION}.
 
-Copyright @copyright{} 2000, 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2000, 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/sc.texi b/doc/misc/sc.texi
index 8a997cd..a97e504 100644
--- a/doc/misc/sc.texi
+++ b/doc/misc/sc.texi
@@ -15,7 +15,7 @@
 This document describes Supercite, an Emacs package for citing and
 attributing replies to mail and news messages.
 
-Copyright @copyright{} 1993, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1993, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/sem-user.texi b/doc/misc/sem-user.texi
index ebd301c..2d9eac2 100644
--- a/doc/misc/sem-user.texi
+++ b/doc/misc/sem-user.texi
@@ -1,5 +1,5 @@
 @c This is part of the Semantic manual.
address@hidden Copyright (C) 1999-2005, 2007, 2009-2014 Free Software 
Foundation,
address@hidden Copyright (C) 1999-2005, 2007, 2009-2015 Free Software 
Foundation,
 @c Inc.
 @c See file semantic.texi for copying conditions.
 
diff --git a/doc/misc/semantic.texi b/doc/misc/semantic.texi
index 9b9f29f..0907240 100644
--- a/doc/misc/semantic.texi
+++ b/doc/misc/semantic.texi
@@ -25,7 +25,7 @@
 @copying
 This manual documents the Semantic library and utilities.
 
-Copyright @copyright{} 1999--2005, 2007, 2009--2014 Free Software
+Copyright @copyright{} 1999--2005, 2007, 2009--2015 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ses.texi b/doc/misc/ses.texi
index 4851122..0685050 100644
--- a/doc/misc/ses.texi
+++ b/doc/misc/ses.texi
@@ -12,7 +12,7 @@
 @copying
 This file documents @acronym{SES}: the Simple Emacs Spreadsheet.
 
-Copyright @copyright{} 2002--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2002--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/sieve.texi b/doc/misc/sieve.texi
index 98177e0..ca965e6 100644
--- a/doc/misc/sieve.texi
+++ b/doc/misc/sieve.texi
@@ -12,7 +12,7 @@
 @copying
 This file documents the Emacs Sieve package, for server-side mail filtering.
 
-Copyright @copyright{} 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/smtpmail.texi b/doc/misc/smtpmail.texi
index f539cd0..314e6a0 100644
--- a/doc/misc/smtpmail.texi
+++ b/doc/misc/smtpmail.texi
@@ -4,7 +4,7 @@
 @documentencoding UTF-8
 @syncodeindex vr fn
 @copying
-Copyright @copyright{} 2003--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2003--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -368,7 +368,7 @@ implement support for common requirements.
 @vindex smtpmail-local-domain
   The variable @code{smtpmail-local-domain} controls the hostname sent
 in the first @code{EHLO} or @code{HELO} command sent to the server.
-It should only be set if the @code{system-name} function returns a
+It should be set only if the @code{system-name} function returns a
 name that isn't accepted by the server.  Do not set this variable
 unless your server complains.
 
diff --git a/doc/misc/speedbar.texi b/doc/misc/speedbar.texi
index c57c4b6..726f749 100644
--- a/doc/misc/speedbar.texi
+++ b/doc/misc/speedbar.texi
@@ -5,7 +5,7 @@
 @syncodeindex fn cp
 
 @copying
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/srecode.texi b/doc/misc/srecode.texi
index 749bdf0..b58cc4a 100644
--- a/doc/misc/srecode.texi
+++ b/doc/misc/srecode.texi
@@ -16,7 +16,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index 72c8cf4..370d450 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2014-10-29.10}
+\def\texinfoversion{2014-12-03.16}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -96,7 +96,9 @@
 \let\ptexraggedright=\raggedright
 \let\ptexrbrace=\}
 \let\ptexslash=\/
+\let\ptexsp=\sp
 \let\ptexstar=\*
+\let\ptexsup=\sup
 \let\ptext=\t
 \let\ptextop=\top
 {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
@@ -1010,24 +1012,15 @@ where each line of input produces a line of output.}
 % paragraph.
 %
 \gdef\dosuppressfirstparagraphindent{%
-  \gdef\indent{%
-    \restorefirstparagraphindent
-    \indent
-  }%
-  \gdef\noindent{%
-    \restorefirstparagraphindent
-    \noindent
-  }%
-  \global\everypar = {%
-    \kern -\parindent
-    \restorefirstparagraphindent
-  }%
+  \gdef\indent  {\restorefirstparagraphindent \indent}%
+  \gdef\noindent{\restorefirstparagraphindent \noindent}%
+  \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
 }
-
+%
 \gdef\restorefirstparagraphindent{%
-  \global \let \indent = \ptexindent
-  \global \let \noindent = \ptexnoindent
-  \global \everypar = {}%
+  \global\let\indent = \ptexindent
+  \global\let\noindent = \ptexnoindent
+  \global\everypar = {}%
 }
 
 
@@ -2090,12 +2083,9 @@ end
  \endgroup
 }
 
-
 % In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families.  Since
-% texinfo doesn't allow for producing subscripts and superscripts except
-% in the main text, we don't bother to reset \scriptfont and
-% \scriptscriptfont (which would also require loading a lot more fonts).
+% we have to define the \textfont of the standard families.  We don't
+% bother to reset \scriptfont and \scriptscriptfont; awaiting user need.
 %
 \def\resetmathfonts{%
   \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
@@ -2109,8 +2099,8 @@ end
 % \tenSTYLE to set the current font.
 %
 % Each font-changing command also sets the names \lsize (one size lower)
-% and \lllsize (three sizes lower).  These relative commands are used in
-% the LaTeX logo and acronyms.
+% and \lllsize (three sizes lower).  These relative commands are used
+% in, e.g., the LaTeX logo and acronyms.
 %
 % This all needs generalizing, badly.
 %
@@ -2851,6 +2841,8 @@ end
   \let\v=\check
   \let\~=\tilde
   \let\dotaccent=\dot
+  % have to provide another name for sup operator
+  \let\mathopsup=\sup
   $\finishmath
 }
 \def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
@@ -2874,6 +2866,18 @@ end
   }
 }
 
+% for @sub and @sup, if in math mode, just do a normal sub/superscript.
+% If in text, use math to place as sub/superscript, but switch
+% into text mode, with smaller fonts.  This is a different font than the
+% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
+% fix it (significant additions to font machinery) until someone notices.
+%
+\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
+\def\finishsub#1{$\sb{\hbox{\selectfonts\lllsize #1}}$}%
+%
+\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
+\def\finishsup#1{$\ptexsp{\hbox{\selectfonts\lllsize #1}}$}%
+
 % ctrl is no longer a Texinfo command, but leave this definition for fun.
 \def\ctrl #1{{\tt \rawbackslash \hat}#1}
 
@@ -5801,6 +5805,7 @@ end
   %
   {%
     \chapfonts \rmisbold
+    \let\footnote=\errfootnoteheading % give better error message
     %
     % Have to define \lastsection before calling \donoderef, because the
     % xref code eventually uses it.  On the other hand, it has to be called
@@ -5912,6 +5917,7 @@ end
     \ifx\temptype\Yomitfromtockeyword\else
       \checkenv{}% address@hidden should not be in an environment.
     \fi
+    \let\footnote=\errfootnoteheading
     %
     % Switch to the right set of fonts.
     \csname #2fonts\endcsname \rmisbold
@@ -6342,6 +6348,7 @@ end
   % other math active characters (just in case), to plain's definitions.
   \mathactive
   %
+  % Inverse of the list at the beginning of the file.
   \let\b=\ptexb
   \let\bullet=\ptexbullet
   \let\c=\ptexc
@@ -6357,7 +6364,9 @@ end
   \let\+=\tabalign
   \let\}=\ptexrbrace
   \let\/=\ptexslash
+  \let\sp=\ptexsp
   \let\*=\ptexstar
+  %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
   \let\t=\ptext
   \expandafter \let\csname top\endcsname=\ptextop  % we've made it outer
   \let\frenchspacing=\plainfrenchspacing
@@ -7423,7 +7432,6 @@ end
 %
 % \anythingelse will almost certainly be an error of some kind.
 
-
 % \mbodybackslash is the definition of \ in @macro bodies.
 % It maps \foo\ => \csname macarg.foo\endcsname => #N
 % where N is the macro parameter number.
@@ -7532,8 +7540,7 @@ end
 % the catcode regime underwhich the body was input).
 %
 % If you compile with TeX (not eTeX), and you have macros with 10 or more
-% arguments, you need that no macro has more than 256 arguments, otherwise an
-% error is produced.
+% arguments, no macro can have more than 256 arguments (else error).
 \def\parsemargdef#1;{%
   \paramno=0\def\paramlist{}%
   \let\hash\relax
@@ -8368,9 +8375,6 @@ end
 %
 % Auto-number footnotes.  Otherwise like plain.
 \gdef\footnote{%
-  \let\indent=\ptexindent
-  \let\noindent=\ptexnoindent
-  %
   \global\advance\footnoteno by address@hidden
   \edef\thisfootno{$^{\the\footnoteno}$}%
   %
@@ -8397,7 +8401,7 @@ end
   %
   % Nested footnotes are not supported in TeX, that would take a lot
   % more work.  (\startsavinginserts does not suffice.)
-  \let\footnote=\errfootnote
+  \let\footnote=\errfootnotenest
   %
   % We want to typeset this text as a normal paragraph, even if the
   % footnote reference occurs in (for example) a display environment.
@@ -8436,12 +8440,17 @@ end
 }
 }%end \catcode address@hidden
 
-\def\errfootnote{%
+\def\errfootnotenest{%
   \errhelp=\EMsimple
   \errmessage{Nested footnotes not supported in texinfo.tex,
     even though they work in makeinfo; sorry}
 }
 
+\def\errfootnoteheading{%
+  \errhelp=\EMsimple
+  \errmessage{Footnotes in chapters, sections, etc., are not supported}
+}
+
 % In case a @footnote appears in a vbox, save the footnote text and create
 % the real \insert just after the vbox finished.  Otherwise, the insertion
 % would be lost.
@@ -9288,6 +9297,18 @@ directory should work if nowhere else does.}
   \UTFviiiLoop
 \endgroup
 
+\def\globallet{\global\let} % save some \expandafter's below
+
+% @U{xxxx} to produce U+xxxx, if we support it.
+\def\U#1{%
+  \expandafter\ifx\csname uni:#1\endcsname \relax
+    \errhelp = \EMsimple       
+    \errmessage{Unicode character U+#1 not supported, sorry}%
+  \else
+    \csname uni:#1\endcsname
+  \fi
+}
+
 \begingroup
   \catcode`\"=12
   \catcode`\<=12
@@ -9296,7 +9317,6 @@ directory should work if nowhere else does.}
   \catcode`\;=12
   \catcode`\!=12
   \catcode`\~=13
-
   \gdef\DeclareUnicodeCharacter#1#2{%
     \countUTFz = "#1\relax
     %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
@@ -9311,6 +9331,8 @@ directory should work if nowhere else does.}
       \expandafter\expandafter\expandafter\expandafter
        \expandafter\expandafter\expandafter
        \gdef\UTFviiiTmp{#2}%
+      % define an additional control sequence for this code point.
+      \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
     \endgroup}
 
   \gdef\parseXMLCharref{%
diff --git a/doc/misc/todo-mode.texi b/doc/misc/todo-mode.texi
index 8b99034..6f684de 100644
--- a/doc/misc/todo-mode.texi
+++ b/doc/misc/todo-mode.texi
@@ -9,7 +9,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2013-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2013-2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index a245de8..bc7f933 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -66,7 +66,7 @@
 @end ifclear
 
 @copying
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -2711,6 +2711,21 @@ following code in your @file{.emacs}:
   (setq tramp-remote-process-environment process-environment))
 @end lisp
 
+When running @code{process-file} or @code{start-file-process} on a
+remote @code{default-directory}, the default settings in
address@hidden are not used as it is the case for local
+processes.  However, if you need environment variables other than set
+in @code{tramp-remote-process-environment}, you can let-bind them to
address@hidden Only those variables will be set then:
+
address@hidden
+(let ((process-environment (cons "HGPLAIN=1" process-environment)))
+  (process-file @dots{}))
address@hidden lisp
+
+This works only for environment variables which are not set already in
address@hidden
+
 If you use other @value{emacsname} packages which do not run
 out-of-the-box on a remote host, please let us know.  We will try to
 integrate them as well.  @xref{Bug Reports}.
@@ -2828,7 +2843,7 @@ uid=0(root) gid=0(root) groups=0(root)
 @cindex gdb
 @cindex perldb
 
address@hidden offers an unified interface to several symbolic
address@hidden offers a unified interface to several symbolic
 debuggers
 @ifset emacs
 @ifinfo
diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi
index cfcb664..a9e7f37 100644
--- a/doc/misc/trampver.texi
+++ b/doc/misc/trampver.texi
@@ -2,13 +2,13 @@
 @c texi/trampver.texi.  Generated from trampver.texi.in by configure.
 
 @c This is part of the Emacs manual.
address@hidden Copyright (C) 2003-2014 Free Software Foundation, Inc.
address@hidden Copyright (C) 2003-2015 Free Software Foundation, Inc.
 @c See file doclicense.texi for copying conditions.
 
 @c In the Tramp GIT, the version number is auto-frobbed from
 @c configure.ac, so you should edit that file and run
 @c "autoconf && ./configure" to change the version number.
address@hidden trampver 2.2.11-pre
address@hidden trampver 2.2.11
 
 @c Other flags from configuration
 @set instprefix /usr/local
diff --git a/doc/misc/url.texi b/doc/misc/url.texi
index 48e1839..a1fa31f 100644
--- a/doc/misc/url.texi
+++ b/doc/misc/url.texi
@@ -22,7 +22,7 @@
 @copying
 This is the manual for the @code{url} Emacs Lisp library.
 
-Copyright @copyright{} 1993--1999, 2002, 2004--2014 Free Software
+Copyright @copyright{} 1993--1999, 2002, 2004--2015 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/vhdl-mode.texi b/doc/misc/vhdl-mode.texi
index 39bdcac..524a534 100644
--- a/doc/misc/vhdl-mode.texi
+++ b/doc/misc/vhdl-mode.texi
@@ -10,7 +10,7 @@
 @copying
 This file documents VHDL Mode, an Emacs mode for editing VHDL code.
 
-Copyright @copyright{} 1995--2008, 2010, 2012, 2014 Free Software
+Copyright @copyright{} 1995--2008, 2010, 2012, 2015 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/vip.texi b/doc/misc/vip.texi
index a6c6d30..9a5255d 100644
--- a/doc/misc/vip.texi
+++ b/doc/misc/vip.texi
@@ -5,7 +5,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 1987, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1987, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/viper.texi b/doc/misc/viper.texi
index 837b8c2..bea7f47 100644
--- a/doc/misc/viper.texi
+++ b/doc/misc/viper.texi
@@ -9,7 +9,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 1995--1997, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--1997, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/widget.texi b/doc/misc/widget.texi
index 0685dbd..6d5b6d3 100644
--- a/doc/misc/widget.texi
+++ b/doc/misc/widget.texi
@@ -9,7 +9,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2000--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2000--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/wisent.texi b/doc/misc/wisent.texi
index b5d7899..16b5d12 100644
--- a/doc/misc/wisent.texi
+++ b/doc/misc/wisent.texi
@@ -24,7 +24,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1988--1993, 1995, 1998--2004, 2007, 2012--2014
+Copyright @copyright{} 1988--1993, 1995, 1998--2004, 2007, 2012--2015
 Free Software Foundation, Inc.
 
 @c Since we are both GNU manuals, we do not need to ack each other here.
diff --git a/doc/misc/woman.texi b/doc/misc/woman.texi
index 1e5e0a7..d199afc 100644
--- a/doc/misc/woman.texi
+++ b/doc/misc/woman.texi
@@ -15,7 +15,7 @@
 This file documents WoMan: A program to browse Unix manual pages `W.O.
 (without) man'.
 
-Copyright @copyright{} 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/etc/.gitignore b/etc/.gitignore
deleted file mode 100644
index 8e12acb..0000000
--- a/etc/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-DOC
-icons/
diff --git a/etc/CALC-NEWS b/etc/CALC-NEWS
index 51e95e3..09b12a2 100644
--- a/etc/CALC-NEWS
+++ b/etc/CALC-NEWS
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Calc is an advanced desk calculator for GNU Emacs.
diff --git a/etc/CONTRIBUTE b/etc/CONTRIBUTE
deleted file mode 100644
index d1ee9f4..0000000
--- a/etc/CONTRIBUTE
+++ /dev/null
@@ -1,217 +0,0 @@
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
-See end for license conditions.
-
-
-                       Contributing to Emacs
-
-Emacs is a collaborative project and we encourage contributions from
-anyone and everyone.  If you want to contribute in the way that will
-help us most, we recommend (1) fixing reported bugs and (2)
-implementing the feature ideas in etc/TODO.  However, if you think of
-new features to add, please suggest them too -- we might like your
-idea.  Porting to new platforms is also useful, when there is a new
-platform, but that is not common nowadays.
-
-For documentation on how to develop Emacs changes, refer to the Emacs
-Manual and the Emacs Lisp Reference Manual (both included in the Emacs
-distribution).  The web pages in http://www.gnu.org/software/emacs
-contain additional information.
-
-You may also want to submit your change so that can be considered for
-inclusion in a future version of Emacs (see below).
-
-If you don't feel up to hacking Emacs, there are many other ways to
-help.  You can answer questions on the mailing lists, write
-documentation, find and report bugs, check if existing bug reports
-are fixed in newer versions of Emacs, contribute to the Emacs web
-pages, or develop a package that works with Emacs.
-
-Here are some style and legal conventions for contributors to Emacs:
-
-
-* Coding Standards
-
-Contributed code should follow the GNU Coding Standards.
-
-If it doesn't, we'll need to find someone to fix the code before we
-can use it.
-
-Emacs has certain additional style and coding conventions.
-
-Ref: http://www.gnu.org/prep/standards/
-Ref: GNU Coding Standards Info Manual
-Ref: The "Tips" Appendix in the Emacs Lisp Reference.
-
-
-* Copyright Assignment
-
-The FSF (Free Software Foundation) is the copyright holder for GNU Emacs.
-The FSF is a nonprofit with a worldwide mission to promote computer
-user freedom and to defend the rights of all free software users.
-For general information, see the website http://www.fsf.org/ .
-
-Generally speaking, for non-trivial contributions to GNU Emacs we
-require that the copyright be assigned to the FSF.  For the reasons
-behind this, see: http://www.gnu.org/licenses/why-assign.html .
-
-Copyright assignment is a simple process.  Residents of some countries
-can do it entirely electronically.  We can help you get started, and
-answer any questions you may have (or point you to the people with the
-answers), at the address@hidden mailing list.
-
-(Please note: general discussion about why some GNU projects ask
-for a copyright assignment is off-topic for emacs-devel.
-See gnu-misc-discuss instead.)
-
-A copyright disclaimer is also a possibility, but we prefer an assignment.
-Note that the disclaimer, like an assignment, involves you sending
-signed paperwork to the FSF (simply saying "this is in the public domain"
-is not enough).  Also, a disclaimer cannot be applied to future work, it
-has to be repeated each time you want to send something new.
-
-We can accept small changes (roughly, fewer than 15 lines) without
-an assignment.  This is a cumulative limit (e.g. three separate 5 line
-patches) over all your contributions.
-
-* Getting the Source Code
-
-The latest version of the Emacs source code can be downloaded from the
-Savannah web site.  It is important to write your patch based on the
-latest version.  If you start from an older version, your patch may be
-outdated (so that maintainers will have a hard time applying it), or
-changes in Emacs may have made your patch unnecessary.
-
-After you have downloaded the repository source, you should read the file
-INSTALL.REPO for build instructions (they differ to some extent from a
-normal build).
-
-Ref: http://savannah.gnu.org/projects/emacs
-
-
-* Submitting Patches
-
-Every patch must have several pieces of information before we
-can properly evaluate it.
-
-When you have all these pieces, bundle them up in a mail message and
-send it to the developers.  Sending it to address@hidden
-(which is the bug/feature list) is recommended, because that list
-is coupled to a tracking system that makes it easier to locate patches.
-If your patch is not complete and you think it needs more discussion,
-you might want to send it to address@hidden instead.  If you
-revise your patch, send it as a followup to the initial topic.
-
-** Description
-
-For bug fixes, a description of the bug and how your patch fixes it.
-
-For new features, a description of the feature and your implementation.
-
-** ChangeLog
-
-A ChangeLog entry as plaintext (separate from the patch).
-
-See the existing ChangeLog files for format and content.  Note that,
-unlike some other projects, we do require ChangeLogs also for
-documentation, i.e. Texinfo files.
-
-Ref: "Change Log Concepts" node of the GNU Coding Standards Info
-Manual, for how to write good log entries.
-
-** The patch itself.
-
-If you are accessing the Emacs repository, make sure your copy is
-up-to-date (e.g. with `git pull'), then use
-        git diff
-Else, use
-       diff -cp OLD NEW
-
-** Mail format.
-
-We prefer to get the patches as plain text, either inline (be careful
-your mail client does not change line breaks) or as MIME attachments.
-
-** Please reread your patch before submitting it.
-
-** Do not mix changes.
-
-If you send several unrelated changes together, we will ask you to
-separate them so we can consider each of the changes by itself.
-
-** Do not make formatting changes.
-
-Making cosmetic formatting changes (indentation, etc) makes it harder
-to see what you have really changed.
-
-
-* Coding style and conventions.
-
-** Mandatory reading:
-
-The "Tips and Conventions" Appendix of the Emacs Lisp Reference.
-
-** Avoid using `defadvice' or `eval-after-load' for Lisp code to be
-included in Emacs.
-
-** Remove all trailing whitespace in all source and text files.
-
-** Use ?\s instead of ?  in Lisp code for a space character.
-
-
-* Supplemental information for Emacs Developers.
-
-** Write access to the Emacs repository.
-
-Once you become a frequent contributor to Emacs, we can consider
-giving you write access to the version-control repository.
-
-
-** Emacs Mailing lists.
-
-Discussion about Emacs development takes place on address@hidden
-
-Bug reports and fixes, feature requests and implementations should be
-sent to address@hidden, the bug/feature list.  This is coupled
-to the tracker at http://debbugs.gnu.org .
-
-You can subscribe to the mailing lists, or see the list archives,
-by following links from http://savannah.gnu.org/mail/?group=emacs .
-
-** Document your changes.
-
-Any change that matters to end-users should have a NEWS entry.
-
-Think about whether your change requires updating the documentation
-(both manuals and doc-strings).  If you know it does not, mark the NEWS
-entry with "---".  If you know that *all* the necessary documentation
-updates have been made, mark the entry with "+++". Otherwise do not mark it.
-
-** Understanding Emacs Internals.
-
-The best way to understand Emacs Internals is to read the code,
-but the nodes "Tips" and "GNU Emacs Internals" in the Appendix
-of the Emacs Lisp Reference Manual may also help.
-
-The file etc/DEBUG describes how to debug Emacs bugs.
-
-
-
-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 3 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.  If not, see <http://www.gnu.org/licenses/>.
-
-Local variables:
-mode: outline
-paragraph-separate: "[         ]*$"
-end:
diff --git a/etc/ChangeLog b/etc/ChangeLog
index ed8c345..8bc1afb 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,146 @@
+2015-01-29  Francesc Rocher  <address@hidden>
+
+       * images/splash.svg, images/splash.png:
+       * images/splash.pbm, images/splash.xpm, images/README:
+       Splash images refurbished.
+
+2015-01-28  Eli Zaretskii  <address@hidden>
+
+       * tutorials/TUTORIAL.he: Use u+05f4 HEBREW PUNCTUATION GERSHAYIM
+       instead of u+0022 QUOTATION MARK in Hebrew acronyms.
+
+2015-01-27  Ivan Shmakov  <address@hidden>
+
+       * NEWS: Mention the new tar-new-entry command.  (Bug#19274)
+
+2015-01-27  Thomas Fitzsimmons  <address@hidden>
+
+       * NEWS: Document EUDC improvements.
+
+2015-01-26  Lars Ingebrigtsen  <address@hidden>
+
+       * publicsuffix.txt: Install an updated version of the file from
+       https://publicsuffix.org/list/effective_tld_names.dat.
+
+2015-01-25  Paul Eggert  <address@hidden>
+
+       Use gnustep-config if available
+       * NEWS: Document this.
+
+2015-01-22  Paul Eggert  <address@hidden>
+
+       Don't downcase system diagnostics' first letters
+       * NEWS: Document this.
+
+2015-01-16  Artur Malabarba  <address@hidden>
+
+       * NEWS: Document installing packages from directories.
+
+2015-01-15  Eli Zaretskii  <address@hidden>
+
+       * NEWS: Mention 'set-binary-mode'.
+
+2015-01-11  Paul Eggert  <address@hidden>
+
+       Default to 'configure --enable-silent-rules'
+       * NEWS: Document this.
+
+2015-01-10  Daniel Colascione  <address@hidden>
+
+       * NEWS: Fix typo
+
+2015-01-04  Paul Eggert  <address@hidden>
+
+       batch write-region no longer says "Wrote FOO"
+       * NEWS: Document this.
+
+2014-12-30  Paul Eggert  <address@hidden>
+
+       * PROBLEMS: Omit obsolete mention of FQDNs.
+
+2014-12-27  Álvar Ibeas  <address@hidden>  (tiny change)
+
+       * tutorials/TUTORIAL.es: Improve style consistency.  Spelling fixes.
+
+2014-12-25  Karl Fogel  <address@hidden>
+
+       * NEWS: Mention new buffer display behavior for `shell'.
+       This follows up to Sam Steingold's change of 2014-12-23
+       in ../lisp/shell.el, in git commit e55a467ec0f758c311d3.
+
+2014-12-15  Artur Malabarba <address@hidden>
+
+       * NEWS: Mention `let-alist.
+
+2014-12-14  Alan Mackenzie  <address@hidden>
+
+       * NEWS: Add entry for fast-but-imprecise-scrolling.
+
+2014-12-14  Cameron Desautels  <address@hidden>
+
+       * NEWS: Mention `custom-prompt-customize-unsaved-options'.
+
+       * TODO: Remove its entry.
+
+2014-12-13  Paul Eggert  <address@hidden>
+
+       Convert Czech and Slovakian refcards to UTF-8
+       * refcards/cs-dired-ref.tex, refcards/cs-refcard.tex:
+       * refcards/cs-survival.tex, refcards/sk-dired-ref.tex:
+       * refcards/sk-refcard.tex, refcards/sk-survival.tex:
+       Convert from iso-latin-2 to utf-8.  Remove no-longer-necessary
+       coding comments and "\input utf8off" directives.
+
+2014-12-13  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * NEWS: Mention directory-name-p.
+
+2014-12-09  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * NEWS: Mention directory-files-recursively.
+
+2014-12-08  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * NEWS: Mention the new eww `S' command.
+
+2014-12-05  Stephen Leake  <address@hidden>
+
+       * CONTRIBUTE: Move to ../.
+
+2014-12-05  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * NEWS: Add some doc markers to the eww stuff.
+
+2014-12-04  Eli Zaretskii  <address@hidden>
+
+       * NEWS: Mention 'buffer-substring-with-bidi-context'.
+
+2014-12-02  Eli Zaretskii  <address@hidden>
+
+       * NEWS: Mention 'bidi-find-overridden-directionality'.
+
+2014-11-29  Paul Eggert  <address@hidden>
+
+       Lessen focus on ChangeLog files, as opposed to change log entries.
+       * CONTRIBUTE: Give advice about git commit messages and how
+       to generate proposed patches containing them.
+
+2014-11-27  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * NEWS: Mention dom.el.
+
+2014-11-24  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * NEWS: Mention NSM.
+
+2014-11-23  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * NEWS: Mention `url-request-noninteractive'.
+
+2014-11-19  Leo Liu  <address@hidden>
+
+       * NEWS: Mention new macro define-advice.
+
 2014-11-17  Paul Eggert  <address@hidden>
 
        Improve time stamp handling, and be more consistent about it.
@@ -85,7 +228,7 @@
 
        * NEWS: Mention ns-use-fullscreen-animation.
 
-2014-09-30  Bill Wohler         <address@hidden>
+2014-09-30  Bill Wohler  <address@hidden>
 
        Release MH-E version 8.6
 
@@ -6707,7 +6850,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/etc/DEBUG b/etc/DEBUG
index 89e1a85..52424d7 100644
--- a/etc/DEBUG
+++ b/etc/DEBUG
@@ -1,6 +1,6 @@
 Debugging GNU Emacs
 
-Copyright (C) 1985, 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 2000-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/DISTRIB b/etc/DISTRIB
index b464171..7b33cb8 100644
--- a/etc/DISTRIB
+++ b/etc/DISTRIB
@@ -1,7 +1,7 @@
                                                -*- text -*-
             GNU Emacs availability information
 
-Copyright (C) 1986-1993, 1995, 1998, 2000-2014 Free Software Foundation,
+Copyright (C) 1986-1993, 1995, 1998, 2000-2015 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS
index dbd4811..68aca96 100644
--- a/etc/ERC-NEWS
+++ b/etc/ERC-NEWS
@@ -1,6 +1,6 @@
 ERC NEWS                                                       -*- outline -*-
 
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 * For changes after ERC 5.3, see the main Emacs NEWS file
diff --git a/etc/ETAGS.EBNF b/etc/ETAGS.EBNF
index 0d87238..0a3d9c6 100644
--- a/etc/ETAGS.EBNF
+++ b/etc/ETAGS.EBNF
@@ -94,7 +94,7 @@ those.
 
 ===================== end of discussion of tag names =====================
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/ETAGS.README b/etc/ETAGS.README
index 2e51acc..a312d15 100644
--- a/etc/ETAGS.README
+++ b/etc/ETAGS.README
@@ -28,7 +28,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
LIABILITY, OR TORT
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2014 Free Software
+Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2015 Free Software
 Foundation, Inc.
 
 This file is not considered part of GNU Emacs.
diff --git a/etc/GNUS-NEWS b/etc/GNUS-NEWS
index 16808af..4f311e3 100644
--- a/etc/GNUS-NEWS
+++ b/etc/GNUS-NEWS
@@ -1,6 +1,6 @@
 GNUS NEWS -- history of user-visible changes.
 
-Copyright (C) 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Gnus bug reports to address@hidden
diff --git a/etc/HELLO b/etc/HELLO
index e7ecb34..f776107 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -73,7 +73,7 @@ Korean ($(CGQ1[(B)  $(C>H3gGO<<?d(B / $(C>H3gGO=J4O1n(B
 
 
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/etc/MACHINES b/etc/MACHINES
index a51b4c9..7e13f17 100644
--- a/etc/MACHINES
+++ b/etc/MACHINES
@@ -1,6 +1,6 @@
 Emacs machines list
 
-Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2014 Free Software
+Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2015 Free Software
 Foundation, Inc.
 See the end of the file for license conditions.
 
@@ -66,6 +66,7 @@ the list at the end of this file.
 
 ** Mac OS X
 
+  Version 10.6 or newer.  PowerPC is not supported.
   For installation instructions see the file nextstep/INSTALL.
 
 ** Microsoft Windows
diff --git a/etc/MH-E-NEWS b/etc/MH-E-NEWS
index 012c372..c9429fe 100644
--- a/etc/MH-E-NEWS
+++ b/etc/MH-E-NEWS
@@ -1,6 +1,6 @@
 * COPYRIGHT
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 * Changes in MH-E 8.6
diff --git a/etc/NEWS b/etc/NEWS
index 86e21c4..4b0a268 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2014 Free Software Foundation, Inc.
+Copyright (C) 2014-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to address@hidden
@@ -36,12 +36,29 @@ should be able to work around the problem either by porting 
the Emacs
 undumping code to GCC under IRIX, or by configuring --with-wide-int,
 or by sticking with Emacs 24.4.
 
+** 'configure' now prefers gnustep-config when configuring GNUstep.
+If gnustep-config is not available, the old heuristics are used.
+
 ---
 ** The configure option `--with-pkg-config-prog' has been removed.
 Use './configure PKG_CONFIG=/full/name/of/pkg-config' if you need to.
 
-** The configure option '--enable-silent-rules' and the command
-'make V=0' now do a better job of suppressing chatter.
+** The configure option '--enable-silent-rules' is now the default,
+and silent rules are now quieter.  To get the old behavior where
+'make' chatters a lot, configure with '--disable-silent-rules' or
+build with 'make V=1'.
+
+---
+** The configure option '--with-gameuser' now allows to specify a
+group instead of a user if its argument is prefixed by ':' (a colon).
+This will cause the game score files in ${localstatedir}/games/emacs
+to be owned by that group, and the helper program for updating them to
+be installed setgid.
+
+---
+** The `grep-changelog' script (and its manual page) are no longer included.
+It has no particular connection to Emacs and has not changed in years,
+so if you want to use it, you can always take a copy from an older Emacs.
 
 
 * Startup Changes in Emacs 25.1
@@ -49,8 +66,21 @@ Use './configure PKG_CONFIG=/full/name/of/pkg-config' if you 
need to.
 
 * Changes in Emacs 25.1
 
+** `package-install-from-buffer' and `package-install-file' work on 
directories.
+This follows the same rules as installing from a .tar file, except the
+-pkg file is optional.
+
+** New function `custom-prompt-customize-unsaved-options' checks for
+unsaved customizations and prompts user to customize (if found).
+
++++
+** Network security (TLS/SSL certificate validity and the like) is
+added via the new Network Security Manager (NSM) and controlled via
+the `network-security-level' variable.
+
 ** C-h l now also lists the commands that were run.
 
+---
 ** The new M-s M-w key binding uses eww to search the web for the
 text in the region.
 
@@ -65,6 +95,9 @@ have the equivalent of a primary selection.
 +++
 ** terpri gets an optional arg ENSURE to conditionally output a newline.
 
++++
+** New macro `define-advice'.
+
 ** `insert-register' now leaves point after the inserted text
 when called interactively.  A prefix argument toggles this behavior.
 
@@ -102,17 +135,51 @@ emulates the behavior of modern Posix platforms when the 
locale's
 codeset is "UTF-8" (as in "en_US.UTF-8").  This is needed because
 MS-Windows doesn't support UTF-8 as codeset in its locales.
 
++++
+** The new function `bidi-find-overridden-directionality' allows to
+find characters whose directionality was, perhaps maliciously,
+overridden by directional override control characters.  Lisp programs
+can use this to detect potential phishing of URLs and other links that
+exploits bidirectional display reordering.
+
++++
+** The new function `buffer-substring-with-bidi-context' allows to
+copy a portion of a buffer into a different location while preserving
+the visual appearance both of the copied text and the text at
+destination, even when the copied text includes mixed bidirectional
+text and directional control characters.
+
 ** New variable `ns-use-fullscreen-animation' controls animation for
 non-native NS fullscreen.  The default is nil.  Set to t to enable
 animation when entering and leaving fullscreen.  For native OSX fullscreen
 this has no effect.
 
-*** A new text property `inhibit-read-only' can be used in read-only
+** A new text property `inhibit-read-only' can be used in read-only
 buffers to allow certain parts of the text to be writable.
 
+** A new function `directory-files-recursively' returns all matching
+files (recursively) under a directory.
+
+** The new `directory-name-p' can be used to check whether a file
+name (as returned from, for instance, `file-name-all-completions' is
+a directory file name.  It returns non-nil if the last character in
+the name is a forward slash.
+
++++
+** New variable `fast-but-imprecise-scrolling' inhibits
+fontification during full screen scrolling operations, giving less
+hesitant operation during auto-repeat of C-v, M-v at the cost of
+possible inaccuracies in the end position.
+
+** The function `font-info' now returns more details about a font.
+In particular, it now returns the average width of the font's
+characters, which can be used for geometry-related calculations.
+
 
 * Editing Changes in Emacs 25.1
 
+** Unicode names entered via C-x 8 RET now use substring completion by default.
+
 ** New minor mode global-eldoc-mode is enabled by default.
 
 ** Emacs now supports "bracketed paste mode" when running on a terminal
@@ -130,8 +197,41 @@ for Unicode 8.0.  This includes full support for 
directional isolates
 and the Bidirectional Parentheses Algorithm (BPA) specified by these
 Unicode standards.
 
+** You can access `mouse-buffer-menu' (C-down-mouse-1) using C-f10.
+
 
 * Changes in Specialized Modes and Packages in Emacs 25.1
+** Shell
+
+When you invoke `shell' interactively, the *shell* buffer will now
+display in a new window.  However, you can customize this behavior via
+the `display-buffer-alist' variable.  For example, to get
+the old behavior -- *shell* buffer displays in current window -- use
+(add-to-list 'display-buffer-alist
+     '("^\\*shell\\*$" . (display-buffer-same-window))).
+
+
+** EIEIO
+*** The `:protection' slot option is not obeyed any more.
+*** The `newname' argument to constructors is optional&deprecated.
+If you need your objects to be named, do it by inheriting from `eieio-named'.
+*** The <class>-list-p and <class>-child-p functions are declared obsolete.
+*** The <class> variables are declared obsolete.
+*** The <initarg> variables are declared obsolete.
+*** defgeneric and defmethod are declared obsolete.
+
+** ido
+*** New command `ido-bury-buffer-at-head' bound to C-S-b
+Bury the buffer at the head of `ido-matches', analogous to how C-k
+kills the buffer at head.
+
+** Minibuffer
+
+*** You can use <up> and <down> keys to move point in the multi-line
+minibuffer just as in an ordinary buffer.  Only when point moves over
+the bottom/top of the minibuffer it goes to the next/previous history
+element.  The new commands bound to <up> and <down> in the minibuffer:
+`next-line-or-history-element' and `previous-line-or-history-element'.
 
 ** Search and Replace
 
@@ -150,21 +250,53 @@ typing RET.
 result of the calculation into the current buffer.
 
 ** ElDoc
-*** New minor mode global-eldoc-mode
-*** eldoc-documentation-function now defaults to nil
+*** New minor mode `global-eldoc-mode'
+*** `eldoc-documentation-function' now defaults to `ignore'
+*** `describe-char-eldoc' displays information about character at point,
+and can be used as a default value of `eldoc-documentation-function'.  It is
+useful when, for example, one needs to distinguish various spaces (e.g. ] [,
+] [, ] [, etc.) while using mono-spaced font.
 
 ** eww
 
++++
 *** A new command `R' (`eww-readable') will try do identify the main
 textual parts of a web page and display only that, leaving menus and
 the like off the page.
 
+---
 *** You can now use several eww buffers in parallel by renaming eww
 buffers you want to keep separate.
 
++++
+*** Partial state of the eww buffers (the URIs and the titles of the
+pages visited) is now preserved in the desktop file.
+
++++
 *** `eww-after-render-hook' is now called after eww has rendered
 the data in the buffer.
 
+---
+*** The `eww-reload' command now takes a prefix to not reload via
+the net, but just use the local copy of the HTML.
+
++++
+*** The DOM shr and eww uses has been changed to the general Emacs
+xml.el/libxml2 DOM, and a new package dom.el has been added to
+interact with this DOM.  See the Emacs Lisp manual for interface
+details.
+
++++
+*** `mailcap-mime-data' is now consulted when displaying PDF files.
+
++++
+*** The new `S' command will list all eww buffers, and allow managing
+them.
+
+---
+*** https pages with valid certificates have headers marked in green, while
+invalid certificates are marked in red.
+
 ** Message mode
 
 *** text/html messages that contain inline image parts will be
@@ -193,6 +325,12 @@ appending FUN to `minibuffer-setup-hook'.
 ** cl-lib
 *** New functions cl-fresh-line, cl-digit-char-p and cl-parse-integer.
 
+** seq
+*** New seq library:
+The seq library adds sequence manipulation functions and macros that
+complement basic functions provided by subr.el. All functions are
+prefixed with `seq-' and work on lists, strings and vectors.
+
 ** Calendar and diary
 
 +++
@@ -229,6 +367,11 @@ The remainder were:
 ---
 ** `Info-fontify-maximum-menu-size' can be t for no limit.
 
++++
+** `info-display-manual' can now be given a prefix argument which (any
+non-nil value) directs the command to limit the completion
+alternatives to currently visited manuals.
+
 ---
 ** ntlm.el has support for NTLM2.
 
@@ -247,14 +390,28 @@ plain text parts, if display of HTML email is possible; 
customize the
 ** In sh-mode, you can now use `sh-shell' as a file-local variable to
 specify the type of shell in use (bash, csh, etc).
 
-** The URL package accepts now the protocols "ssh", "scp" and "rsync".
+** TLS
+---
+*** Fatal TLS errors are now silent by default.
+
+** URL
+
+*** The URL package accepts now the protocols "ssh", "scp" and "rsync".
 When `url-handler-mode' is enabled, file operations for these
 protocols as well as for "telnet" and "ftp" are passed to Tramp.
 
-** The URL package allows customizing the `url-user-agent' string.
+*** The URL package allows customizing the `url-user-agent' string.
 The new `url-user-agent' variable can be customized to be a string or
 a function.
 
+*** The new interface variable `url-request-noninteractive' can be used
+to specify that we're running in a noninteractive context, and that
+we should not be queried about things like TLS certificate validity.
+
+*** If URL is used with a https connection, the first callback argument
+plist will contain a :peer element that has the output of
+`gnutls-peer-status' (if Emacs is built with GnuTLS support).
+
 ** Tramp
 
 *** New connection method "nc", which allows to access dumb busyboxes.
@@ -278,6 +435,13 @@ and comments.
 the color range from `vc-annotate-color-map' is applied to the
 background or to the foreground.
 
+*** `compare-windows' now compares text with the most recently used window
+instead of the next window.  The new option 
`compare-windows-get-window-function'
+allows to customize this.
+
+*** Two new faces `compare-windows-removed' and `compare-windows-added'
+replace the obsolete face `compare-windows'.
+
 ** Calculator: decimal display mode uses "," groups, so it's more
 fitting for use in money calculations; factorial works with
 non-integer inputs.
@@ -307,6 +471,66 @@ By default, 32 spaces and four TABs are considered to be 
too much but
 `tildify-ignored-environments-alist' variables (as well as a few
 helper functions) obsolete.
 
+** xref
+The new package provides generic framework and new commands to find
+and move to definitions, as well as pop back to the original location.
+
+*** New key bindings
+`xref-find-definitions' replaces `find-tag' and provides an interface
+to pick one destination among several.  Hence, `tags-loop-continue' is
+unbound.  `xref-pop-marker-stack' replaces `pop-tag-mark', but uses an
+easier binding, which is now unoccupied (`M-,').
+`xref-find-definitions-other-window' replaces `find-tag-other-window'.
+`xref-find-definitions-other-frame' replaces `find-tag-other-frame'.
+`xref-find-apropos' replaces `find-tag-regexp'.
+
+*** New variables
+`find-tag-marker-ring-length' is now an obsolete alias for
+`xref-marker-ring-length'.  `find-tag-marker-ring' is now an obsolete
+alias for a private variable.  `xref-push-marker-stack' and
+`xref-pop-marker-stack' should be used to mutate it instead.
+
+** etags
+As a result of the above, these commands are now obsolete:
+`find-tag-other-window', `find-tag-other-frame', `find-tag-regexp',
+`tags-apropos' and `tags-loop-continue'.
+
+** EUDC
+EUDC's LDAP backend has been improved.
+
+*** EUDC supports LDAP-over-SSL URLs (ldaps://).
+
+*** EUDC passes LDAP passwords through a pipe to the ldapsearch
+subprocess instead of on the command line.
+
+*** EUDC handles LDAP wildcards automatically so the user shouldn't
+need to configure this manually anymore.
+
+*** The LDAP configuration section of EUDC's manual has been
+rewritten.
+
+There have also been customization changes.
+
+*** New custom variable `eudc-server-hotlist' to allow specifying
+multiple EUDC servers in init file.
+
+*** Custom variable `eudc-inline-query-format' defaults to completing
+on email and firstname instead of surname.
+
+*** Custom variable `eudc-expansion-overwrites-query' defaults to nil
+to avoid interfering with the kill ring.
+
+*** Custom variable `eudc-inline-expansion-format' defaults to
+"Firstname Surname <mail-address>".
+
+*** New custom variable `ldap-ldapsearch-password-prompt-regexp' to
+allow overriding the regular expression that recognizes the ldapsearch
+command line's password prompt.
+
++++
+** tar-mode: new `tar-new-entry' command, allowing for new members to
+be added to the archive.
+
 ** Obsolete packages
 
 ---
@@ -315,10 +539,26 @@ helper functions) obsolete.
 
 * New Modes and Packages in Emacs 25.1
 
+** cl-generic.el provides CLOS-style multiple-dispatch generic functions.
+
 ** scss-mode (a minor variant of css-mode)
+
+** let-alist is a new macro (and a package) that allows one to easily
+let-bind the values stored in an alist.
+
+** `tildify-mode' allows to automatically insert hard spaces as one
+types the text.  Breaking line after a single-character words is
+forbidden by Czech and Polish typography (and may be discouraged in
+other languages), so `auto-tildify-mode' makes it easier to create
+a typographically-correct documents.
 
 * Incompatible Lisp Changes in Emacs 25.1
 
+** completion-table-dynamic stays in the minibuffer.
+If you want the old behavior of calling the function in the buffer
+from which the minibuffer was entered, call it with the new argument
+`switch-buffer'.
+
 ** window-configurations no longer record the buffers's marks.
 
 ** inhibit-modification-hooks now also inhibits lock-file checks, as well as
@@ -337,9 +577,16 @@ position list returned for such events is now nil.
 These slots used to hold key-shortcut data, but have been obsolete since
 Emacs-21.
 
+** Emacs no longer downcases the first letter of a system diagnostic
+when signaling a file error.  For example, it now reports "Permission
+denied" instead of "permission denied".  The old behavior was problematic
+in languages like German where downcasing rules depend on grammar.
+
 
 * Lisp Changes in Emacs 25.1
 
+** define-inline provides a new way to define inlinable functions.
+
 ** New function macroexpand-1 to perform a single step of macroexpansion.
 
 ** Some "x-*" were obsoleted:
@@ -376,6 +623,14 @@ optional repeat-count argument.
 
 ** Function `sort' can deal with vectors.
 
+** Function `system-name' now returns an updated value if the current
+system's name has changed or if the Emacs process has changed systems,
+and to avoid long waits it no longer consults DNS to canonicalize the
+name.  The variable `system-name' is now obsolete.
+
++++
+** Function `write-region' no longer outputs "Wrote FILE" in batch mode.
+
 ---
 ** New utilities in subr-x.el:
 *** New macros `if-let' and `when-let' allow defining bindings and to
@@ -402,6 +657,10 @@ been obsoleted.
 undocumented integer-pair format.  Instead, they return a list of two
 integers.
 
++++
+** New function `set-binary-mode' allows to switch a standard stream
+of the Emacs process to binary I/O mode.
+
 
 * Changes in Frames and Windows Code in Emacs 25.1
 
@@ -429,7 +688,7 @@ Horizontal scroll bars are turned off by default.
     `scroll-bar-height'.
 
 +++
-** The height of a frame's menu and tool bar are no more counted in the
+** The height of a frame's menu and tool bar are no longer counted in the
 frame's text height.  This means that the text height stands only for
 the height of the frame's root window plus that of the echo area (if
 present).  This was already the behavior for frames with external tool
@@ -447,6 +706,11 @@ fullwidth frames, the behavior may depend on the toolkit 
used.
    specific frame does not resize that frame in order to preserve the
    number of columns or lines it displays.
 
++++
+** New function `window-preserve-size' allows to preserve the size of
+windows without "fixing" it.  It's supported by `fit-window-to-buffer',
+`temp-buffer-resize-mode' and `display-buffer'.
+
 ** Tearoff menus and detachable toolbars for Gtk+ has been removed.
 Those features have been deprecated in Gtk+ for a long time.
 
diff --git a/etc/NEWS.1-17 b/etc/NEWS.1-17
index e0c94db..bd96f81 100644
--- a/etc/NEWS.1-17
+++ b/etc/NEWS.1-17
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  26-Mar-1986
 
-Copyright (C) 1985-1986, 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.18 b/etc/NEWS.18
index 757d8fe..581bf7c 100644
--- a/etc/NEWS.18
+++ b/etc/NEWS.18
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  17-Aug-1988
 
-Copyright (C) 1988, 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 1988, 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.19 b/etc/NEWS.19
index 184f854..5945444 100644
--- a/etc/NEWS.19
+++ b/etc/NEWS.19
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  1992.
 
-Copyright (C) 1993-1995, 2001, 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 2001, 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.20 b/etc/NEWS.20
index d60bbc4..462b0cc 100644
--- a/etc/NEWS.20
+++ b/etc/NEWS.20
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  2006-05-31
 
-Copyright (C) 1999-2001, 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2001, 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.21 b/etc/NEWS.21
index b73740c..37ccfba 100644
--- a/etc/NEWS.21
+++ b/etc/NEWS.21
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  2006-05-31
 
-Copyright (C) 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 2000-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.22 b/etc/NEWS.22
index d9182bd..9e62cf2 100644
--- a/etc/NEWS.22
+++ b/etc/NEWS.22
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to address@hidden
diff --git a/etc/NEWS.23 b/etc/NEWS.23
index 4e1f45c..d192d52 100644
--- a/etc/NEWS.23
+++ b/etc/NEWS.23
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to address@hidden
diff --git a/etc/NEWS.24 b/etc/NEWS.24
index 3d580ee..ae0d402 100644
--- a/etc/NEWS.24
+++ b/etc/NEWS.24
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2010-2014 Free Software Foundation, Inc.
+Copyright (C) 2010-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to address@hidden
@@ -27,6 +27,9 @@ otherwise leave it unmarked.
 ---
 ** The default value of `history-length' has increased to 100.
 
++++
+** `redisplay-dont-pause' is declared as obsolete.
+
 
 * Changes in Specialized Modes and Packages in Emacs 24.5
 
diff --git a/etc/NEXTSTEP b/etc/NEXTSTEP
index 79c7365..e6997b8 100644
--- a/etc/NEXTSTEP
+++ b/etc/NEXTSTEP
@@ -1,4 +1,4 @@
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 This file contains information about GNU Emacs on "Nextstep" platforms.
diff --git a/etc/NXML-NEWS b/etc/NXML-NEWS
index 8a284e2..de9f18d 100644
--- a/etc/NXML-NEWS
+++ b/etc/NXML-NEWS
@@ -1,4 +1,4 @@
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 46b4c95..5d9062a 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -3,7 +3,7 @@ ORG NEWS -- history of user-visible changes.   -*- mode: org; 
coding: utf-8 -*-
 #+LINK: doc http://orgmode.org/worg/doc.html#%s
 #+LINK: git http://orgmode.org/w/?p=org-mode.git;a=commit;h=%s
 
-Copyright (C) 2012-2014 Free Software Foundation, Inc.
+Copyright (C) 2012-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Org bug reports to address@hidden
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 3401f48..2ab85b3 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1,6 +1,7 @@
 Known Problems with GNU Emacs
 
-Copyright (C) 1987-1989, 1993-1999, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1987-1989, 1993-1999, 2001-2015 Free Software Foundation,
+Inc.
 See the end of the file for license conditions.
 
 
@@ -364,8 +365,8 @@ For example, (system-name) returns some variation on
 "localhost.localdomain", rather the name you were expecting.
 
 You need to configure your machine with a fully qualified domain name,
-(i.e. a name with at least one ".") either in /etc/hosts,
-/etc/hostname, the NIS, or wherever your system calls for specifying this.
+(i.e., a name with at least one "."), either in /etc/hostname
+or wherever your system calls for specifying this.
 
 If you cannot fix the configuration, you can set the Lisp variable
 mail-host-address to the value you want.
@@ -457,17 +458,6 @@ problem by adding this to your .cshrc file:
         endif
     endif
 
-*** Emacs startup on GNU/Linux systems (and possibly other systems) is slow.
-
-This can happen if the system is misconfigured and Emacs can't get the
-full qualified domain name, FQDN.  You should have your FQDN in the
-/etc/hosts file, something like this:
-
-127.0.0.1      localhost
-129.187.137.82 nuc04.t30.physik.tu-muenchen.de nuc04
-
-The way to set this up may vary on non-GNU systems.
-
 *** Attempting to visit remote files via ange-ftp fails.
 
 If the error message is "ange-ftp-file-modtime: Specified time is not
@@ -1962,11 +1952,11 @@ accessible by right-clicking "My Computer" or 
"Computer", selecting
 ** Emacs crashes when exiting the Emacs session
 
 This was reported to happen when some optional DLLs, such as those
-used for displaying images or the GnuTLS library, which are loaded
-on-demand, have a runtime dependency on the libgcc DLL,
-libgcc_s_dw2-1.dll.  The reason seems to be a bug in libgcc which
-rears its ugly head whenever the libgcc DLL is loaded after Emacs has
-started.
+used for displaying images or the GnuTLS library or zlib compression
+library, which are loaded on-demand, have a runtime dependency on the
+libgcc DLL, libgcc_s_dw2-1.dll.  The reason seems to be a bug in
+libgcc which rears its ugly head whenever the libgcc DLL is loaded
+after Emacs has started.
 
 One solution for this problem is to find an alternative build of the
 same optional library that does not depend on the libgcc DLL.
diff --git a/etc/README b/etc/README
index fab2e68..aca7331 100644
--- a/etc/README
+++ b/etc/README
@@ -9,5 +9,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 File: emacs.icon
   Author: Sun Microsystems, Inc
-  Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
   License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/TERMS b/etc/TERMS
index 316d902..5052634 100644
--- a/etc/TERMS
+++ b/etc/TERMS
@@ -1,4 +1,4 @@
-Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 See the end of the file for copying permissions.
 
 This file describes what you must or might want to do to termcap entries
@@ -72,7 +72,7 @@ is `cS', which I invented.
        correct parameter conventions from what would make the VT-100's
        `cs' string work properly.  From an incorrect assumption about
        %i, I reached an incorrect conclusion about `cs', but the result
-       worked correctly on the VT100 and ANSII terminals.  In Emacs
+       worked correctly on the VT100 and ANSI terminals.  In Emacs
        version 17, both `cs' and %i work correctly.
 
        The version 16 convention was to pass, for the second parameter,
diff --git a/etc/TODO b/etc/TODO
index ccd00e5..68a3792 100644
--- a/etc/TODO
+++ b/etc/TODO
@@ -1,6 +1,6 @@
 Emacs TODO List                                                   -*-outline-*-
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
@@ -419,12 +419,6 @@ rather than interactively.  This a trivial one-liner in 
easy-mode.el.
 
 ** Make byte-optimization warnings issue accurate line numbers.
 
-** A function to check for customizable options that have been
-  set but not saved, and ask the user whether to save them.
-  This could go in kill-emacs-query-functions, to remind people
-  to save their changes. If the user says yes, show them
-  in a Custom buffer using customize-customized.
-
 ** Record the sxhash of the default value for customized variables
   and notify the user (maybe by adding a menu item or toolbar button,
   as the detection can occur during autoload time) when the default
diff --git a/etc/charsets/README b/etc/charsets/README
index 8d443bd..efd0dce 100644
--- a/etc/charsets/README
+++ b/etc/charsets/README
@@ -1,6 +1,6 @@
 # README file for charset mapping files in this directory.
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
 #   Registration Number H13PRO009
diff --git a/etc/compilation.txt b/etc/compilation.txt
index 919e4db..a69a20b 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -597,7 +597,7 @@ Compilation segmentation fault at Thu Jul 13 10:55:49
 Compilation finished at Thu Jul 21 15:02:15
 
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/edt-user.el b/etc/edt-user.el
index aeaebfb..e0f5b29 100644
--- a/etc/edt-user.el
+++ b/etc/edt-user.el
@@ -1,6 +1,6 @@
 ;;; edt-user.el --- Sample user customizations for Emacs EDT emulation
 
-;; Copyright (C) 1986, 1992-1993, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1986, 1992-1993, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher <kgallagh@@spd.dsccc.com>
diff --git a/etc/emacs-buffer.gdb b/etc/emacs-buffer.gdb
index ee786cf..5d6cbd4 100644
--- a/etc/emacs-buffer.gdb
+++ b/etc/emacs-buffer.gdb
@@ -1,6 +1,6 @@
 # emacs-buffer.gdb --- gdb macros for recovering buffers from emacs coredumps
 
-# Copyright (C) 2005-2014 Free Software Foundation, Inc.
+# Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 # Maintainer: Noah Friedman <address@hidden>
 # Created: 2005-04-28
diff --git a/etc/emacs.appdata.xml b/etc/emacs.appdata.xml
index d662bcb..bbe4a9a 100644
--- a/etc/emacs.appdata.xml
+++ b/etc/emacs.appdata.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2014 Free Software Foundation, Inc. -->
+<!-- Copyright (C) 2014-2015 Free Software Foundation, Inc. -->
 <application>
  <id type="desktop">emacs.desktop</id>
  <metadata_license>GFDL-1.3</metadata_license>
diff --git a/etc/enriched.txt b/etc/enriched.txt
index e72ff15..637b621 100644
--- a/etc/enriched.txt
+++ b/etc/enriched.txt
@@ -240,7 +240,7 @@ it.</indent>
 
 
 
-Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/forms/forms-d2.el b/etc/forms/forms-d2.el
index c59c561..7ae99cb 100644
--- a/etc/forms/forms-d2.el
+++ b/etc/forms/forms-d2.el
@@ -1,6 +1,6 @@
 ;;; forms-d2.el --- demo forms-mode
 
-;; Copyright (C) 1991, 1994-1997, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1991, 1994-1997, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Johan Vromans <address@hidden>
diff --git a/etc/gnus-tut.txt b/etc/gnus-tut.txt
index 275fa5f..42089b1 100644
--- a/etc/gnus-tut.txt
+++ b/etc/gnus-tut.txt
@@ -24,7 +24,7 @@ was done by moi, yours truly, your humble servant, Lars Magne
 Ingebrigtsen.  If you have a WWW browser, you can investigate to your
 heart's delight at <URL:http://www.ifi.uio.no/~larsi/larsi.html>.
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/etc/grep.txt b/etc/grep.txt
index 523b1fa..5b226fe 100644
--- a/etc/grep.txt
+++ b/etc/grep.txt
@@ -39,7 +39,7 @@ grep -nH --color=always -e "INFO tree" ../info/*
 
 * GNU grep 2.5.1 on lines starting with a number and colon
 
-grep -nH -e "Universal Time" ../lispref/*
+grep -nH --color=always -e "Universal Time" ../doc/lispref/*
 ../lispref/os.texi:1010:0:00 January 1, 1970 UTC (Coordinated 
Universal Time)
 
 * GNU grep 2.5.1 with context lines
@@ -78,8 +78,8 @@ bzr grep --color=always -in "org-element-map"
 lisp/org/org.el:21047:                    
(org-element-map
 
 * git-grep
-  with `[diff "el"] xfuncname = "^(\\(.*)$"' in .gitconfig
-  and `*.el diff=el' in .gitattributes
+  with `[diff "lisp"] xfuncname = "^(\\(.*)$"' in .gitconfig
+  and `*.el diff=lisp' in .gitattributes
 
 git --no-pager grep -inH -p -e "org-element-map"
 lisp/org/org.el=20969=(defun org-fill-paragraph (&optional 
justify)
@@ -97,7 +97,7 @@ grep -nH -e "xyzxyz" ../info/*
 
 
 
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/images/README b/etc/images/README
index 55fc649..005754b 100644
--- a/etc/images/README
+++ b/etc/images/README
@@ -23,19 +23,19 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 File: mh-logo.xpm
   Author: Satyaki Das
-  Copyright (C) 2003-2014 Free Software Foundation, Inc.
+  Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
-Files: splash.pbm, splash.xpm, gnus.pbm
+Files: gnus.pbm
   Author: Luis Fernandes <address@hidden>
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
-Files: splash.png, splash.svg
-  Author: Francesc Rocher <address@hidden>
-  Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Files: splash.png, splash.svg, splash.pbm, splash.xpm
+  Author: Francesc Rocher <address@hidden>
+  Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 Files: checked.xpm, unchecked.xpm
   Author: Chong Yidong <address@hidden>
-  Copyright (C) 2010-2014 Free Software Foundation, Inc.
+  Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 
 * The following icons are from GTK+ 2.x. They are not part of Emacs, but
diff --git a/etc/images/checked.xpm b/etc/images/checked.xpm
index 1cc033a..0e01b4b 100644
--- a/etc/images/checked.xpm
+++ b/etc/images/checked.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2010-2015 Free Software Foundation, Inc.
  *
  * Author: Chong Yidong <address@hidden>
  *
diff --git a/etc/images/custom/README b/etc/images/custom/README
index c8ade85..8fbe751 100644
--- a/etc/images/custom/README
+++ b/etc/images/custom/README
@@ -6,5 +6,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 Files: down.xpm down-pushed.xpm right.xpm right-pushed.xpm
 Author: Juri Linkov
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/ezimage/README b/etc/images/ezimage/README
index a3d4362..c91aa5e 100644
--- a/etc/images/ezimage/README
+++ b/etc/images/ezimage/README
@@ -7,5 +7,5 @@ Files: bits.xpm bitsbang.xpm box-minus.xpm box-plus.xpm
        tag-gt.xpm tag-minus.xpm tag-plus.xpm tag-type.xpm tag-v.xpm
        tag.xpm unlock.xpm
 Author: Eric M. Ludlam
-Copyright (C) 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/gnus/README b/etc/images/gnus/README
index 07a287b..f886d9d 100644
--- a/etc/images/gnus/README
+++ b/etc/images/gnus/README
@@ -7,7 +7,7 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 Files: important.xpm, unimportant.xpm
 Author: Simon Josefsson <address@hidden>
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm
   describe-group.pbm describe-group.xpm exit-gnus.pbm exit-gnus.xpm
@@ -21,11 +21,11 @@ Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm
   unsubscribe.pbm unsubscribe.xpm uu-decode.pbm uu-decode.xpm
   uu-post.pbm uu-post.xpm
 Author: Luis Fernandes <address@hidden>
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 Files: gnus.png, gnus.svg
   Author: Francesc Rocher <address@hidden>
-  Copyright (C) 2008-2014 Free Software Foundation, Inc.
+  Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 
 * The following icons are from GNOME 2.x. They are not part of Emacs,
diff --git a/etc/images/gnus/gnus.svg b/etc/images/gnus/gnus.svg
index 4e66beb..cf3efd3 100644
--- a/etc/images/gnus/gnus.svg
+++ b/etc/images/gnus/gnus.svg
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Gnu Emacs Logo
 
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
    Author: Francesc Rocher <address@hidden>
 
diff --git a/etc/images/gud/README b/etc/images/gud/README
index 3985baa..554ecc7 100644
--- a/etc/images/gud/README
+++ b/etc/images/gud/README
@@ -1,7 +1,7 @@
 COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 The following icons were created by Nick Roberts <address@hidden>.
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
   break.pbm, nexti.pbm, go.pbm, pp.pbm, print.pbm, pstar.pbm, remove.pbm
@@ -31,7 +31,7 @@ their copyright assignment included the icons.
 The following icons are converted from the Insight Windows style icon
 set in src/gdb/gdbtk/library/images2.
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
   cont.pbm and cont.xpm were converted from continue.gif
@@ -47,7 +47,7 @@ License: GNU General Public License version 3 or later (see 
COPYING)
 The following icons are created from the Insight Windows style icon
 set in src/gdb/gdbtk/library/images2.
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
   rcont.xpm rfinish.xpm
diff --git a/etc/images/icons/README b/etc/images/icons/README
index 6e249a7..70979dd 100644
--- a/etc/images/icons/README
+++ b/etc/images/icons/README
@@ -5,7 +5,7 @@ Files: hicolor/16x16/apps/emacs.png hicolor/24x24/apps/emacs.png
        hicolor/128x128/apps/emacs.png hicolor/scalable/apps/emacs.svg
 
 Author: Kentaro Ohkouchi <address@hidden>
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
 
@@ -13,7 +13,7 @@ Files: hicolor/16x16/apps/emacs22.png 
hicolor/24x24/apps/emacs22.png
        hicolor/32x32/apps/emacs22.png hicolor/48x48/apps/emacs22.png
 
 Author: Andrew Zhilin <address@hidden>
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
 Files: allout-widgets-dark-bg/closed.png
@@ -62,5 +62,5 @@ Files: allout-widgets-dark-bg/closed.png
        allout-widgets-light-bg/through-descender.xpm
 
 Author: Ken Manheimer <address@hidden>
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/icons/hicolor/scalable/apps/emacs.svg 
b/etc/images/icons/hicolor/scalable/apps/emacs.svg
index 542e370..7af85ce 100644
--- a/etc/images/icons/hicolor/scalable/apps/emacs.svg
+++ b/etc/images/icons/hicolor/scalable/apps/emacs.svg
@@ -10,7 +10,7 @@
    id="svg4768"
    xml:space="preserve">
 <!-- Gnu Emacs Icon
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
    This file is part of GNU Emacs.
 
diff --git a/etc/images/icons/hicolor/scalable/mimetypes/emacs-document.svg 
b/etc/images/icons/hicolor/scalable/mimetypes/emacs-document.svg
index 5ee8907..120abda 100644
--- a/etc/images/icons/hicolor/scalable/mimetypes/emacs-document.svg
+++ b/etc/images/icons/hicolor/scalable/mimetypes/emacs-document.svg
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Gnu Emacs Document Icon
 
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
    This file is part of GNU Emacs.
 
diff --git a/etc/images/mh-logo.xpm b/etc/images/mh-logo.xpm
index 158dcbb..657bd46 100644
--- a/etc/images/mh-logo.xpm
+++ b/etc/images/mh-logo.xpm
@@ -1,7 +1,7 @@
 /* XPM */
 /* MH-E Logo
  *
- * Copyright (C) 2003-2014 Free Software Foundation, Inc.
+ * Copyright (C) 2003-2015 Free Software Foundation, Inc.
  *
  * Author: Satyaki Das
  *
diff --git a/etc/images/mpc/README b/etc/images/mpc/README
index 23fffa6..58a4dd3 100644
--- a/etc/images/mpc/README
+++ b/etc/images/mpc/README
@@ -2,5 +2,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 Files: add.xpm ffwd.xpm next.xpm pause.xpm play.xpm prev.xpm rewind.xpm 
stop.xpm
 Author: Stefan Monnier <address@hidden>
-Copyright (C) 2009-2014 Free Software Foundation, Inc.
+Copyright (C) 2009-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/newsticker/README b/etc/images/newsticker/README
index 31ca46c..b6bfdb8 100644
--- a/etc/images/newsticker/README
+++ b/etc/images/newsticker/README
@@ -4,5 +4,5 @@ Files: browse-url.xpm get-all.xpm mark-immortal.xpm 
mark-read.xpm
        narrow.xpm next-feed.xpm next-item.xpm prev-feed.xpm
        prev-item.xpm rss-feed.png rss-feed.svg update.xpm
 Author: Ulf Jasper
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/smilies/README b/etc/images/smilies/README
index c9e9573..80c9a44 100644
--- a/etc/images/smilies/README
+++ b/etc/images/smilies/README
@@ -3,5 +3,5 @@ Files: blink.pbm blink.xpm braindamaged.xpm cry.xpm dead.xpm 
evil.xpm
        sad.xpm smile.pbm smile.xpm wry.pbm wry.xpm
 Authors: Reiner Steib, Simon Josefsson, Kai Grossjohann, Alex
          Schroeder, Oliver Scholz, Per Abrahamsen, Kim F. Storm.
-Copyright (C) 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/smilies/grayscale/README 
b/etc/images/smilies/grayscale/README
index 8ccdae1..5767072 100644
--- a/etc/images/smilies/grayscale/README
+++ b/etc/images/smilies/grayscale/README
@@ -3,5 +3,5 @@ Files: blink.xpm braindamaged.xpm cry.xpm dead.xpm evil.xpm 
forced.xpm
        frown.xpm grin.xpm indifferent.xpm reverse-smile.xpm sad.xpm
        smile.xpm wry.xpm
 Author: Adam Sjøgren
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/smilies/medium/README b/etc/images/smilies/medium/README
index 8ccdae1..5767072 100644
--- a/etc/images/smilies/medium/README
+++ b/etc/images/smilies/medium/README
@@ -3,5 +3,5 @@ Files: blink.xpm braindamaged.xpm cry.xpm dead.xpm evil.xpm 
forced.xpm
        frown.xpm grin.xpm indifferent.xpm reverse-smile.xpm sad.xpm
        smile.xpm wry.xpm
 Author: Adam Sjøgren
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/splash.pbm b/etc/images/splash.pbm
index 7f35895..39b69a5 100644
Binary files a/etc/images/splash.pbm and b/etc/images/splash.pbm differ
diff --git a/etc/images/splash.png b/etc/images/splash.png
index a5331f1..9d0eb37 100644
Binary files a/etc/images/splash.png and b/etc/images/splash.png differ
diff --git a/etc/images/splash.svg b/etc/images/splash.svg
index 1ac5980..54865f5 100644
--- a/etc/images/splash.svg
+++ b/etc/images/splash.svg
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Gnu Emacs Logo
 
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
-   Author: Francesc Rocher <address@hidden>
+   Author: Francesc Rocher <address@hidden>
    Based on the original work by Luis Fernandes <address@hidden>
 
    This file is part of GNU Emacs.
@@ -29,12 +29,39 @@
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
    xmlns:svg="http://www.w3.org/2000/svg";
    xmlns="http://www.w3.org/2000/svg";
-   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
    version="1.0"
-   width="275.96875"
-   height="190.40625"
+   width="333"
+   height="233"
    id="svg6706"
-   style="display:inline">
+   style="display:inline"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="splash.svg"
+   inkscape:export-filename="/opt/src/emacs/etc/images/splash.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1004"
+     id="namedview3107"
+     showgrid="false"
+     inkscape:showpageshadow="false"
+     inkscape:zoom="1"
+     inkscape:cx="-49.78722"
+     inkscape:cy="105.19797"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
   <metadata
      id="metadata2314">
     <rdf:RDF>
@@ -43,7 +70,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
-        <dc:title></dc:title>
+        <dc:title />
         <dc:date>2008/06/28</dc:date>
         <dc:creator>
           <cc:Agent>
@@ -67,71 +94,28 @@
     </rdf:RDF>
   </metadata>
   <defs
-     id="defs6709">
-    <linearGradient
-       id="linearGradient2550">
-      <stop
-         id="stop2552"
-         style="stop-color:#4c94f1;stop-opacity:0.78431374"
-         offset="0" />
-      <stop
-         id="stop2554"
-         style="stop-color:#4c94f1;stop-opacity:0.78431374"
-         offset="1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient7896">
-      <stop
-         id="stop7898"
-         style="stop-color:#fc644b;stop-opacity:0.78431374"
-         offset="0" />
-      <stop
-         id="stop7900"
-         style="stop-color:#fc644b;stop-opacity:0.78431374"
-         offset="1" />
-    </linearGradient>
-    <linearGradient
-       xlink:href="#linearGradient2550"
-       id="linearGradient2556"
-       x1="147.62743"
-       y1="92.09787"
-       x2="145.82028"
-       y2="203.60176"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       xlink:href="#linearGradient7896"
-       id="linearGradient2425"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-2.4002643e-7,-2.6398943e-6)"
-       x1="147.52159"
-       y1="0.92070419"
-       x2="147.12886"
-       y2="211.99936" />
-  </defs>
+     id="defs6709" />
   <g
-     transform="translate(5.34375,-11.4375)"
-     id="layer2"
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="emacs"
      style="display:inline">
-    <path
-       id="bg-emacs"
-       d="M -0.54734668,196.72853 C -10.238062,181.78405 5.3965305,167.92976 
14.809201,161.97512 c 6.963497,-4.40524 14.224571,-9.82272 13.070957,-9.82483 
-0.996579,-0.002 -3.28511,-0.79177 -5.085617,-1.75545 -6.217876,-3.328 
-7.955628,-16.0503 7.055337,-28.37575 16.709358,-12.01621 42.570706,-26.817295 
64.900729,-20.35237 3.972323,1.58882 2.904483,4.42259 -3.766368,9.99493 
-5.675178,4.74062 -17.792772,11.85728 -18.753492,11.01391 -0.233326,-0.20481 
2.490068,-2.19795 6.051979,-4.42919 3. [...]
-       style="opacity:1;fill:#000000;display:inline" />
-    <path
-       id="bg-gnu"
-       d="m 55.834396,197.41294 c 2.448659,-7.38073 7.446723,-16.72109 
12.277833,-22.94475 5.710592,-7.35667 7.378339,-9.3856 28.689891,-34.90319 
16.87202,-20.20188 19.22296,-23.17964 22.55476,-28.56842 1.5428,-2.49527 
3.17766,-4.53686 3.63304,-4.53686 1.18186,0 1.10043,0.30992 -1.63307,6.21531 
-1.35357,2.92423 -2.46105,5.64532 -2.46105,6.04685 0,0.40153 -2.97647,4.90375 
-6.6144,10.00493 -8.98843,12.60381 -10.76025,14.97182 -13.0823,17.48445 
-1.0981,1.18822 -3.8535,4.49366 -6.123108,7.34 [...]
-       style="opacity:1;fill:#000000;display:inline" />
-  </g>
-  <g
-     transform="translate(5.34375,-11.4375)"
-     id="layer3"
-     style="display:inline">
-    <path
-       id="gnu"
-       d="m 57.534816,196.31319 c 2.448659,-7.38073 7.446723,-16.72109 
12.277833,-22.94475 5.710592,-7.35667 7.378339,-9.3856 28.689891,-34.90319 
16.87202,-20.20188 19.22296,-23.17964 22.55476,-28.56842 1.5428,-2.49527 
3.17766,-4.53686 3.63304,-4.53686 1.18186,0 1.10043,0.30992 -1.63307,6.21531 
-1.35357,2.92423 -2.46105,5.64532 -2.46105,6.04685 0,0.40153 -2.97647,4.90375 
-6.6144,10.00493 -8.98843,12.60381 -10.76025,14.97182 -13.0823,17.48445 
-1.0981,1.18822 -3.8535,4.49366 -6.123108,7.34 [...]
-       
style="fill:url(#linearGradient2425);fill-opacity:1;stroke:#000000;stroke-width:0.97730815"
 />
-    <path
-       id="emacs"
-       d="M -0.94705426,195.12806 C -10.63777,180.18357 4.9968228,166.32928 
14.409493,160.37464 c 6.963497,-4.40524 14.224571,-9.82272 13.070957,-9.82483 
-0.996579,-0.002 -3.28511,-0.79177 -5.085617,-1.75545 -6.217876,-3.328 
-7.955628,-16.0503 7.055337,-28.37575 16.709358,-12.01621 42.570706,-26.817291 
64.900729,-20.35236 3.972325,1.58882 2.904485,4.42259 -3.766368,9.99492 
-5.675178,4.74062 -17.792772,11.85728 -18.753492,11.01391 -0.233326,-0.20481 
2.490068,-2.19795 6.051979,-4.42919 3.5 [...]
-       
style="opacity:1;fill:url(#linearGradient2556);fill-opacity:1;stroke:#000000;display:inline"
 />
+    <g
+       style="display:inline"
+       id="g3171"
+       transform="translate(-0.3199963,-16.05214)">
+      <path
+         inkscape:connector-curvature="0"
+         id="gnu-7-7-5"
+         d="m 91.501627,223.13422 c 2.44866,-7.38073 7.44672,-16.72109 
12.277833,-22.94475 5.71059,-7.35667 7.37834,-9.3856 28.68987,-34.90319 
16.87203,-20.20187 19.22297,-23.17963 22.55477,-28.56842 1.5428,-2.49527 
3.17766,-4.53686 3.63304,-4.53686 1.18186,0 1.10043,0.30992 -1.63307,6.21531 
-1.35357,2.92424 -2.46105,5.64533 -2.46105,6.04686 0,0.40153 -2.97647,4.90375 
-6.6144,10.00493 -8.98843,12.6038 -10.76026,14.97181 -13.08231,17.48444 
-1.0981,1.18822 -3.8535,4.49366 -6.1231,7.34539 - [...]
+         
style="fill:#c64e3b;fill-opacity:1;stroke:#c64e3b;stroke-width:0.9769991;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+         
sodipodi:nodetypes="sssssssssscssssssscssscssssssczzzczzzzccccszcccczzcsscssscsssccssssssssssssscccccc"
 />
+      <path
+         
sodipodi:nodetypes="cscszzczcsczzzssccssssssssssscssccsssssssssssccssccssssssssccssccccssscssssccsssscsscc"
+         inkscape:connector-curvature="0"
+         id="emacs-9-4-3"
+         d="m 33.019748,221.94909 c -6.110408,-9.38954 3.380608,-25.48422 
15.35655,-34.75342 6.516165,-5.04342 14.224569,-9.82272 13.070959,-9.82483 
-0.99658,-0.002 -3.28511,-0.79177 -5.08562,-1.75545 -6.217869,-3.328 
-13.320748,-11.33731 7.05534,-28.37574 20.376088,-17.03843 58.074533,-25.26395 
64.900723,-20.35237 6.82619,4.91158 -21.13643,22.39146 -22.51985,21.00884 
-0.54574,-1.30268 16.61528,-10.7144 12.28657,-13.45436 -4.32871,-2.73996 
-49.428283,10.06303 -49.047283,27.89807 0.71955, [...]
+         
style="fill:#3c74bd;fill-opacity:1;stroke:#3c74bd;stroke-width:0.99999905;stroke-opacity:1;display:inline"
 />
+    </g>
   </g>
 </svg>
diff --git a/etc/images/splash.xpm b/etc/images/splash.xpm
index 6ff2386..2756bcd 100644
--- a/etc/images/splash.xpm
+++ b/etc/images/splash.xpm
@@ -1,249 +1,370 @@
 /* XPM */
-/* Gnu Emacs Logo
- *
- * Copyright (C) 2001-2014 Free Software Foundation, Inc.
- *
- * Author: Luis Fernandes <address@hidden>
- *
- * 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
- */
 static char *splash[] = {
-/* width height num_colors chars_per_pixel */
-"   270   217        4            1",
-/* colors */
-". c None",
-"# c #c64e3b",
-"a c #000000",
-"c c #2076c1",
+/* columns rows colors chars-per-pixel */
+"333 233 131 2 ",
+"   c #C64E3B",
+".  c #C7513E",
+"X  c #BD5144",
+"o  c #B3534D",
+"O  c #A95656",
+"+  c #A65759",
+"@  c #A1585E",
+"#  c #8F5D6F",
+"$  c #9C5A63",
+"%  c #935C6B",
+"&  c #8A5F73",
+"*  c #A15F67",
+"=  c #83607A",
+"-  c #926172",
+";  c #C14F40",
+":  c #C75340",
+">  c #C85643",
+",  c #C95846",
+"<  c #C3594B",
+"1  c #CB5C4B",
+"2  c #CC604F",
+"3  c #CD6453",
+"4  c #CE6857",
+"5  c #CF6959",
+"6  c #D06E5E",
+"7  c #D16F60",
+"8  c #CF7062",
+"9  c #D27364",
+"0  c #D37768",
+"q  c #D47A6C",
+"w  c #D67E71",
+"e  c #D78275",
+"r  c #D88477",
+"t  c #D88679",
+"y  c #D98A7D",
+"u  c #3C74BD",
+"i  c #5F6A9C",
+"p  c #766486",
+"a  c #7B6382",
+"s  c #6A6792",
+"d  c #626999",
+"f  c #4E6FAC",
+"g  c #566DA5",
+"h  c #5A6EA3",
+"j  c #5574AE",
+"k  c #4372B6",
+"l  c #4971B1",
+"z  c #4077BE",
+"x  c #4279BF",
+"c  c #457AC0",
+"v  c #497DC1",
+"b  c #4E81C3",
+"n  c #5384C5",
+"m  c #5A89C7",
+"M  c #5D8CC8",
+"N  c #6B8CC1",
+"B  c #618EC9",
+"V  c #6592CB",
+"C  c #6B95CD",
+"Z  c #6F98CE",
+"A  c #719ACF",
+"S  c #759DD0",
+"D  c #789FD1",
+"F  c #7CA2D3",
+"G  c #DB8E82",
+"H  c #DC9185",
+"J  c #DD958A",
+"K  c #DE998E",
+"L  c #DF9C92",
+"P  c #E09F94",
+"I  c #E0A096",
+"U  c #E2A59B",
+"Y  c #E3A99F",
+"T  c #E4ACA4",
+"R  c #E6B0A7",
+"E  c #E7B3AB",
+"W  c #E8B7AE",
+"Q  c #E8B7B0",
+"!  c #E9BBB4",
+"~  c #EBBFB8",
+"^  c #ECC3BC",
+"/  c #81A5D5",
+"(  c #89A6D1",
+")  c #86A9D6",
+"_  c #89ABD7",
+"`  c #8DAED8",
+"'  c #90AFD9",
+"]  c #8FB0D9",
+"[  c #9DB4D7",
+"{  c #93B2DB",
+"}  c #99B6DC",
+"|  c #9DB9DE",
+" . c #A1BCDF",
+".. c #A4BEE0",
+"X. c #A6C0E1",
+"o. c #ABC3E3",
+"O. c #B0C7E4",
+"+. c #B5CAE6",
+"@. c #B9CDE7",
+"#. c #BBCEE8",
+"$. c #BED0E9",
+"%. c #DBD0D8",
+"&. c #EDC7C1",
+"*. c #EECAC4",
+"=. c #EFCEC8",
+"-. c #F0CFCA",
+";. c #F0D2CD",
+":. c #F2D6D1",
+">. c #F3DAD5",
+",. c #F4DEDA",
+"<. c #F6E2DE",
+"1. c #C4D5EB",
+"2. c #CCDAEE",
+"3. c #D0DEEF",
+"4. c #D3DFF0",
+"5. c #D5E1F1",
+"6. c #DBE5F3",
+"7. c #DFE8F4",
+"8. c #EDE5E8",
+"9. c #F7E5E2",
+"0. c #F8E9E6",
+"q. c #F9EDEB",
+"w. c #FAF0EE",
+"e. c #E4ECF6",
+"r. c #E9EFF7",
+"t. c #ECF2F9",
+"y. c #FCF4F3",
+"u. c #FDF8F7",
+"i. c #F2F6FB",
+"p. c #F6F9FC",
+"a. c #FFFFFF",
 /* pixels */
-"..............................................................................................................................................................................................................................................................................",
-"..................................................................########..........................................................................................................................................................########..................................",
-".................................................................##########.......................................................................................................................................................############................................",
-"................................................................#############.......................########....................................................................................................................################..............................",
-"..............................................................#################...................#############................................................................................................................###################............................",
-".............................................................###################.................################.............................................................................................................#####################...........................",
-"............................................................#####################..............###################...........................................................................................................######################...........................",
-"...........................................................#######################...........#######################.........................................................................................................#######################..........................",
-"..........................................................#########################.........##########################......................................................................................................#########################.........................",
-".........................................................###########################.......############################....................................................................................................##########################.........................",
-".........................................................############################.....###############################.................................................................................................############################........................",
-"........................................................##############################...a################################................................................................................................############################........................",
-".......................................................################################.a##################################..............................................................................................##############################.......................",
-"......................................................#################################aa###################################.............................................................................................##############################.......................",
-".....................................................########################################################################...........................................................................................################################......................",
-"....................................................##########################################################################.........................................................................................a################################......................",
-"......................#............................###########aaa##############################################################.......................................................................................a#################################......................",
-".....................##...........................###########aaaaaa#############################################################......................................................................................a######aaaaaa#####################......................",
-".....................###.........................##########aaaaaaaaaa############################################################....................................................................................a######aaaaaaaaaa##################......................",
-".....................###........................##########...aaaaaaaaaa###########################################################...................................................................................a#####aaaaaaaaaaaaa################......................",
-".................a..#####......................##########......aaaaaaaaa#######################aaaaaaa############################..................................................................................a#####aaaaaaaaaaaaaaaa##############......................",
-".................aa.#####.....................##########........aaaaaaaaa####################aaaaaaaaaaa###########################.................................................................................a#####aaaaaaaaaaaaaaaa##############......................",
-"................aaa.#####....................##########..........aaaaaaaaa#################aaaaaaaaaaaaaaa##########################...............................................................................a######aaaaaaaaaaaaaaaaa#############......................",
-"................aaa#######..................##########............aaaaaaaaa###############aaaaaaaaaaaaaaaaaa#########################..............................................................................a#####.........aaaaaaaaaa############......................",
-"................aaa########...............###########...............aaaaaaaa############aa........aaaaaaaaaaaa########################.......................................................................#....a######............aaaaaaa############......................",
-"...............aaa##########............############.................aaaaaaaa###########.............aaaaaaaaaaa#######################......................................................................#....a######.............aaaaaaa###########......................",
-"...............aaa############........#############...................aaaaaaaa#########................aaaaaaaaaa#######################.................................#..................................##...aa#####...............aaaaaa###########......................",
-"...............aa##############.....##############.....................aaaaaaaa########..................aaaaaaaaa#######################...............................##..................................##...a######...............aaaaaa###########......................",
-"..............aaa#################################......................aaaaaaa#######....................aaaaaaaaa#######################.............................###...............................a.###..aa######................aaaaa###########......................",
-"..............aa#################################........................aaaaaaa######.....................aaaaaaaaa#######################..........................a.###..............................aa.##...aa#####..................aaaa###########......................",
-".............aaa################################..........................aaaaaa#####.......................aaaaaaaaa#######################........................aa####..............................aa###...aa#####..................aaaa###########......................",
-".............aaa###############################...........................aaaaaaa####.........................aaaaaaaa######################........................a####..............................aaa###..aaa####....................aaa##########.......................",
-"............aaa###############################.............................aaaaaa###...........................aaaaaaaa#######################.....................aa####..............................aa###...aaaa##.....................aaa##########.......................",
-"............aaaa#############################...............................##aaa.#.............................aaaaaaaa########################..................aa####..............................aaa###...aaaaaa.....................aaa##########.......................",
-"...........aaaaa############################...............................###aaa................................aaaaaaaa########################.................a#####..............................aa###...aaaaaa......................aaa##########.......................",
-"...........aaaaaa##########################...............................###aaa..................................aaaaaaaa#########################..............######..............................aa####...aaaaaa......................aaa#########........................",
-"...........aaaaaaa#######################................................####aaa...................................aaaaaaaa##########################..........########..............................a####....aaaaa.......................aaa#########........................",
-"............aaaaaa######################................................a###..a.....................................aaaaaaaa###########################......##########.........#...................a#####....aaaa........................aaa#########........................",
-"............aaaaaaa####################................................a###..........................................aaaaaaaa#########################################.........##...................#####.......a.........................aaa#########........................",
-".............aaaaaaa##################................................a####...........................................aaaaaaaa########################################.........###.................######.................................aaa#########........................",
-"..............aaaaaaa###############.................................a####.............................................aaaaaaaa######################################.........#####..............#######..................................aaa########.........................",
-"...............aaaaaaa############a.................................aa###...............................................aaaaaaa######################################......a..######...........########...................................aaa########.........................",
-"...............aaaaaaaaa#######aaa.................................aa####................................................aaaaaaa####################################.......aa########.......###########...................................aaa########.........................",
-"................aaaaaaaaaaaaaaaaa..................................aa###..................................................aaaaaaa###################################.......aa#########################....................................aaa########.........................",
-".................aaaaaaaaaaaaaa...................................aa###....................................................aaaaaaa#################################.......aa##########################....................................aaa########.........................",
-"..................aaaaaaaaaaaa...................................aa####....................................................aaaaaaaa################################.......aa#########################.....................................aaa#######..........................",
-"....................aaaaaaa.....................................aa####......................................................aaaaaaaa##############################.......aa##########################.....................................aaa#######..........................",
-"................................................................aa###........................................................aaaaaaaa###########################.........aa#########################......................................aaa#######..........................",
-"...............................................................aa###..........................................................aaaaaaaa#########################.........aa#########################.......................................aaa#######..........................",
-"..............................................................aa###............................................................aaaaaaaa#######################..........aa#########################.......................................aaa######...........................",
-".............................................................aaa###...........................................##................aaaaaaaa#####################..........aa#########################........................................aa#######...........................",
-".............................................................aa###...........................................#####...............aaaaaaaaa##################..........aaa########################.........................................aa#######...........................",
-"............................................................aa###...........................................#######...............aaaaaaaaaa##############a...........aaa#######################..........................................aa#######...........................",
-"...........................................................aa####...........................................########...............aaaaaaaaaaa##########aa...........aaa#######################...........................................aa######............................",
-"..........................................................aa####...........................................##########...............aaaaaaaaaaaaaaaaaaaaa............aaaa####################.............................................aa######............................",
-"..........................................................aa###..........................................a###########.................aaaaaaaaaaaaaaaaaa............aaaaa###################..............................................aa######............................",
-".........................................................aa###..........................................aa#############..................aaaaaaaaaaaa...............aaaaaa#################...............................................a#######............................",
-"........................................................aa###..........................................aa##############.............................................aaaaaaa##############a...............................................aa######.............................",
-"........................................................aa###...................................##.....a################............................................aaaaaaaa###########aa................................................aa######.............................",
-".......................................................aa###...................................###....aa################.............................................aaaaaaaaa######aaa..................................................aa######.............................",
-".......................................................aa##...................................####...aa##################.............................................aaaaaaaaaaaaaaaa...................................................aa#####..............................",
-"......................................................aa###..................................####...aa###################..............................................aaaaaaaaaaaaaa...................................................aaa#####..............................",
-".....................................................aa###..................................####....aa####################..............................................aaaaaaaaaaa.....................................................aa######..............................",
-"....................................................aaa##..................................#####...aa#####################................................................aaaaaa........................................................aa#####...............................",
-"....................................................aa###.................................#####....aa######################.............................................................................................................aa#####...............................",
-"...................................................aa###.................................######...aaa######################.............................................................................................................a######...............................",
-"..................................................aa####................................######....aaaaa####################............................................................................................................aa######...............................",
-"..................................................aa###...............................########...aaaaaaa###################............................................................................................................aa#####................................",
-".................................................aa####..............................########....aaaaaaaaa#################............................................................................................................aa#####................................",
-".................................................aa###..............................#########....aaaaaaaaa#################............................................................................................................aa#####................................",
-"................................................aa###..............................#########.......aaaaaaaa################............................................................................................................aa####.................................",
-"...............................................aaa###............................##########.........aaaaaaaa###############............................................................................................................aa####.................................",
-"...............................................aa###............................##########............aaaaaaa###############..........................................................................................................aaa####.................................",
-"..............................................aaa###...........................##########..............aaaaaa###############..........................................................................................................aaa####.................................",
-".............................................aaa####.........................##########.................aaaaaa##############..........................................................................................................aa#####.................................",
-".............................................aaa###.........................#########...................aaaaaa##############.........................................................................................................aaa####..................................",
-"............................................aaa####.......................##########.....................aaaaaa#############.........................................................................................................aa#####..................................",
-"............................................aa#####......................##########......................aaaaaa#############.........................................................................................................aa#####..................................",
-"...........................................aaa#####.....................##########........................aaaaaa############........................................................................................................aaa####...................................",
-"...........................................aa######...................###########.........................aaaaaa###########.........................................................................................................aaa####...................................",
-"..........................................aaa#######................###########............................aaaaaa##########.........................................................................................................aa####....................................",
-"..........................................aa#########..............###########.............................aaaaaa##########.........................................................................................................aa####....................................",
-".........................................aaa##########...........############...............................aaaaa##########........................................................................................................aaa####....................................",
-".........................................aa#################################................................aaaaaa#########........................................................................................................aa####.....................................",
-"........................................aaa################################..................................aaaaa#########........................................................................................................aa####.....................................",
-"........................................aa################################...................................aaaaa#########........................................................................................................aa###......................................",
-".......................................aaa###############################.....................................aaaa#########.......................................................................................................aaa###......................................",
-".......................................aaa##############################......................................aaaa#########.......................................................................................................aaa###......................................",
-"......................................aaa#############################........................................aaaa#########.......................................................................................................aa###.......................................",
-"......................................aaa############################.........................................aaaa#########......................................................................................................aaa###.......................................",
-"......................................aaa##########################............................cccc...........aaaa########.......................................................................................................aaa###.......................................",
-".....................................aaaa########################aa........................cccccccccc.........aaaa########.......................................................................................................aa###........................................",
-".....................................aaaa########################a.....................ccccccccccccccc........aaaa########.......................................................................................................aa###........................................",
-".....................................aaaa######################aa...................cccccccccccccccccc........aaaa########......................................................................................................aaa###........................................",
-".....................................aaaa#####################a...................cccccccccccccccccccc........aaaa#######.......................................................................................................aaa##.........................................",
-".....................................aaaaa##################aa.................ccccccccccccccccccccccc........aaaa#######.......................................................................................................aa###.........................................",
-".....................................aaaaaa##############aaa................cccccccccccccccccccccccccaaa......aaaa#######..................................................................#...................................aaa###.........................................",
-".....................................aaaaaaa###########aaa................cccccccccccccccccccccccccccaaaa.....aaaa######...................................................................#...................................aa####.........................................",
-".....................................aaaaaaaaa######aaaaa................cccccccccccccccccccccccccccaaaaa.....aaaa######..................................................................##...................................aa###..........................................",
-"......................................aaaaaaaaaaaaaaaaa................ccccccccccccccccaaaaccccccccaaaaa......aaaa#####...................................................................##..................................aaa###..........................................",
-".......................................aaaaaaaaaaaaaa.................cccccccccccccccaaaaaacccccccaaaaaa......aaaa#####................................................................a.###..................................aa####..........................................",
-"........................................aaaaaaaaaaa.................ccccccccccccccaaaaaaaaaccccccaaaaaa.......aaaa####.................................................................a.###..................................aa####..........................................",
-".........................................aaaaaaaa.................ccccccccccccaaaaaaaaaaaaccccccaaaaaaa.......aaaa####................................................................aa####.................................aaa###...........................................",
-"................................................................cccccccccccaaaaaaaaaaaaaaacccccaaaaaaa........aaaa###................................................................aaa###..................................aa####...........................................",
-"..............................................................cccccccccccaaaaaaaaaaaaa....ccccaaaaaaa.........aaaa#..................................................................aa####..................................aa####...........................................",
-".............................................................ccccccccccaaaaaaaaaaa.......cccaaaaaaaa..........aaaa..................................................................aa####..................................aa####............................................",
-"...........................................................ccccccccccaaaaaaaaaa.........ccc.aaaaaaa...........aaa...........aaa.....................................................aa####..................................aa####............................................",
-"..........................................................cccccccccaaaaaaaaa..........cccc..aaaaaa............aa............aaa.....................................................a####...................................aa####............................................",
-".........................................................cccccccccaaaaaaaa...........cccc..aaaaaa.............a............aaa##...................................................aa####...................................aa####............................................",
-"........................................................ccccccccaaaaaaaa............ccc...aaaaaa...........................aaa##..................................................aa####...................................aa####.............................................",
-"......................................................cccccccccaaaaaaa............cccc...aaaaaa...........................aaa##...................................................aa####...................................aa####.............................................",
-".....................................................ccccccccaaaaaaaa............ccc....aaaaaa............................aa###..................................................aa####....................................aa####.............................................",
-"....................................................ccccccccaaaaaaa............ccc.....aaaaaa............................aaa###..................................................aa####....................................aa####.............................................",
-"..................................................ccccccccaaaaaaa.............cc.....aaaaaa..............................aa###..................................................aa####.....................................aa###..............................................",
-".................................................cccccccaaaaaaa..............cc.....aaaaaa..............................aaa###..................................................aa####....................................aa####..............................................",
-"................................................cccccccaaaaaaa.....................aaaaaa...............................aa###..................................................aa####.....................................aa####..............................................",
-"...............................................ccccccaaaaaaa.....................aaaaaa................................aaa###..................................................aa####.....................................aa####..............................................",
-"..............................................ccccccaaaaaaa.....................aaaaa.................................aaa####.................................................aa####......................................aa###...............................................",
-".............................................ccccccaaaaaa.....................aaaaa...................................aaa###.................................................aaa####.....................................aa####...............................................",
-"...........................................ccccccaaaaaaa.....................aaaa....................................aaa####.................................................aa####......................................aa####...............................................",
-"..........................................ccccccaaaaaa..............................................................aaa####.................................................aaa####......................................aa####...............................................",
-".........................................ccccccaaaaa...............................................................aaa#####.................................................aa####......................................aaa###................................................",
-"........................................ccccccaaaaa................................................................aaa#####................................................aa####.......................................aa####................................................",
-".......................................ccccccaaaaa................................................................aaa######................................................aa####.......................................aa####................................................",
-"......................................ccccccaaaaa................................................................aaa######................................................aa####........................................aa###.................................................",
-".....................................ccccccaaaaa.................................................................aaa#####.................................................aa####........................................a####.................................................",
-"....................................ccccccaaaaa.................................................................aaa######................................................aa####........................................aa####.................................................",
-"...................................ccccccaaaaa.................................................................aaa######.................................................aa####........................................aa####.................................................",
-"..................................ccccccaaaaa..........................c.......................................aaa######................................................aa####.........................................aa####.................................................",
-".................................ccccccaaaaa.......................ccccc......................................aaa######................................................aa#####........................................aa#####.................................................",
-"................................cccccccaaaa......................cccccc......................................aaa######.................................................aa####.........................................aa#####.................................................",
-"...............................ccccccccaaa.....................ccccccc......................................aaaa######................................................aa#####.........................................aa#####.................................................",
-"..............................cccccccccaaa...................cccccccc...a...................................aaa######................................................aaa####.........................................aaa####..................................................",
-".............................ccccccccccca..................ccccccccc..aaa..................................aaa######.................................................aa#####.........................................aaa####..................................................",
-"............................ccccccccccccc................ccccccccccaaaaa..................................aaa#######................................................aa#####..........................................aa#####..................................................",
-"............................cccccccccccccc.............cccccccccccaaaaa...................................aaa######....................................##...........aa#####..........................................aa#####..................................................",
-"...........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................####.........aa#####..........................................aaa#####..................................................",
-"..........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................######.......a######...........................................aaa####...................................................",
-"..........................cccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######..................................a.######......a#######...........................................aa#####...................................................",
-".........................cccccccccccccccccccccccccccccccccccccaaaaa....................................aaa#######..................................a########....########............................................aa#####...................................................",
-".........................cccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################...........................................aaa#####...................................................",
-".........................ccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################............................................aaa#####...................................................",
-".........................ccccccccccccccccccccccccccccccccaaaaaaa.....................................aaa#######..................................a#####################............................................aaa####....................................................",
-".........................cccccccccccccccccccccccccccccaaaaaaaaa.....................................aaa#######..................................a#####################.............................................aaa####....................................................",
-"..........................ccccccccccccccccccccccccccaaaaaaaaaa.....................................aaa########.................................aa####################..............................................aa#####....................................................",
-"..........................acccccccccccccccccccccccaaaaaaaaaa......................................aaa########.................................aa#####################..............................................aa#####....................................................",
-"..........................aaacccccccccccccccccccaaaaaaaaaa........................................aaa#######.................................aa#####################..............................................aaa#####....................................................",
-"..........................aaaaacccccccccccccccaaaaaaaaa..........................................aaa#######..................................aa####################...............................................aaa####.....................................................",
-"...........................aaaaaaaacccccccccaaaaaaaaaa..........................................aaa########.................................aa#####################...............................................aaa####.....................................................",
-"...........................aaaaaaacccccccccaaaaaaaa.............................................aa########.................................aaa####################................cc..............................aaa####.....................................................",
-".............................aaaaccccccccaaaaaaaa..............................................aaa########.................................aa#####################..............cccc..............................aaa####..............ccccccc...............cccccccccc.......",
-"...............................accccccccaaaaaaa...............................................aaa########.................................aaa####################.............ccccc...............................aa#####...........ccccccccc.............cccccccccccc........",
-"..............................ccccccccaaaaaaaa..............................ccccc............aaa#########................ccccccc..........aa####################............cccccc...............................aaa#####........cccccccccc.............cccccccccc............",
-".............................cccccccaaaaaaaa..............................ccccccc...........aaa########c...............cccccccccc........aa######aaa###########..........ccccccc..aa.............................aaa####.......cccccccccc..aaaaaa.....cccccccc....aaaaaaa.....",
-"............................cccccccaaaaaaa..............................cccccccc...........aaaa########cc............cccccccccccc........aa######aaa##########.........ccccccc..aaaa.............................aaa####.....cccccccccc.aaaaaaaa....cccccccc..aaaaaaaaaa......",
-"...........................cccccccaaaaaaa..............................ccccccccc...........aaa#######cccc...........ccccccccccccc.......aa######aaaaa########........ccccccc..aaaaa...cc.........................aaa####...ccccccccc..aaaaaaaa....cccccccc..aaaaaaaaaa........",
-"..........................cccccccaaaaaa..............................ccccccccccaaa........aaa########cccc.........cccccccccccccca.......aa#####aaaaaaa######........ccccccc.aaaaa....cc..........................aaa####.ccccccccc.aaaaaaaaa....cccccccccaaaaaaaaaa...........",
-".........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa#######ccccc.......cccccccccccccccca......aa######.aaaaaaa####.......ccccccc.aaaaa....cccc..........................aaa####ccccccc.aaaaaaaaaa....cccccccccaaaaaaaaa..............",
-"........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa########ccccaa.....cccccccccccccccccaa.....aa#####..aaaaaaaaaa......ccccccccaaaaaa....cccc...........................aaa##ccccccccaaaaaaaaaa....cccccccccaaaaaaaa.................",
-".......................ccccccaaaaaa..............................cccccccccccccaaa.......aaa########cccccaa....cccccccccccccccccaaa....aa#####....aaaaaaaa.....cccccccccaaaaa....ccccc............................aaa#ccccccccaaaaaaaaa.....cccccccccaaaaaaa...................",
-"......................ccccccaaaaa...............................cccccccccccccaaaa......aaa########ccccccaa...ccccccccccccccccccaa....aaa#####.....aaaaaa.....ccccccccaaaaaa....cccccc.aaa........................aaacccccccaaaaaaaaa.....ccccccccccaaaaaa.....................",
-".....................ccccccaaaaa..............................ccccccccccccccaaaa......aaaa########ccccccaa.cccccccccccccccccccaaa....aa#####...............ccccccccaaaaaa....cccccccaaaa.........................aaccccccaaaaaaaaa.....ccccccccccccaaaa.......................",
-"....................ccccccaaaaa..............................cccccccccccccccaaa......aaaa########ccccccaa.ccccccccccccccccccccaaa...aaa####...............cccccccaaaaaa.....ccccccccaaa..........................acccccccaaaaaaa......ccccccccccccccca........................",
-"...................ccccccaaaaa..............................cccccccccccccccaaaa...ccaaaa########cccccccaacccccccaacccccccccccaaa....aa#####..............cccccccaaaaa......ccccccccaaa..........................ccccccccaaaaaa.......ccccccccccccccccccccccccccccccccccc......",
-"..................ccccccaaaaa.............................cccccccacccccccccaaa...ccaaaa########cccccccaaccccccaaaacccccccccccaaa...aaa#####............cccccccaaaaaa......cccccccccaaa.........................ccccccccaaaaa.........ccccccccccccccccccccccccccccccccccccc....",
-".................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaa#########cccccccacccccaaaaaaccccccccccaaa....aa#####............cccccccaaaaa.......cccccccccaaa.........................ccccccccaaaaa..........cccccccccccccccccccccccccccccccccccccc...",
-"................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaaa########cccccccccccccaaaaaaaccccccccccaaa....aa#####..........ccccccccaaaaa.......ccccccccccaaa........................ccccccccaaaaa.............aaaaaaaaaaaaaa.......cccccccccccccccc..",
-"...............ccccccaaaaa.............................ccccccaaaaccccccccaaa..ccccaaa########cccccccccccccaaaaaaaacccccccccaaa....aa#####..........ccccccccaaaaa.......cccccccccccaa........................cccccccccaaaa.............aaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccc..",
-"..............ccccccaaaaa............................cccccccaaaaacccccccaaa..ccccaaa#########ccccccccccccaaaaaa..ccccccccccaaa....aa#####.........ccccccccaaaaa.......cccccccccccaaa.......................cccccccccaaaa..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc.",
-".............ccccccaaaaa............................ccccccaaaaaaccccccccaa.cccccaaa########cccccccccccccaaaaa....ccccccccccaa....aa#####........cccccccccaaaaa........cccccccccccaaa......................cccccccccaaaa................aaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc.",
-"............cccccccaaaa............................ccccccaaaaaaccccccccaaacccccaaaa########ccccccccccccaaaaa....cccccccccccaa....aa#####.......cccccccccaaaaa........ccccccccccccaa......................ccccccccccaaa......................................aaaaaaacccccccccca",
-"...........cccccccaaaa............................ccccccaaaaaa.cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccca....aaa####......ccccccccccaaaaa.........ccccccccccccaa.....................cccccccccccaa..........................................aaaacccccccccca",
-"..........cccccccaaaa............................ccccccaaaaaa.ccccccccaaccccccaaa########cccccccccccccaaaa.....cccccccccccca....aaa####.....cccccccccccaaaa.........cccccccccccccaa....................cccccccccccaaa............................................aacccccccccca",
-"..........cccccccaaa............................ccccccaaaaa..ccccccccaaacccccaaaa########ccccccccccccaaaa......cccccccccccca...aaa####.....cccccccccccaaaa..........cccccccccccccaa...................ccccccccccccaa..............................................acccccccccca",
-".........cccccccaaaa...........................ccccccaaaaa...cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccccc....aaa###.....cccccccccccaaaa..........ccccccccccccccaa..................cccccccccccccaa..............................................acccccccccca",
-".........cccccccaaa..........................cccccccaaaaa...ccccccccaccccccaaaa########.cccccccccccaaaaa......ccccccccccccc....aaa###....ccccccccccccaaa...........ccccccccccccccaa.................ccccccccccccccaa..............................................acccccccccca",
-"........ccccccccaa..........................cccccccaaaa.....cccccccaccccccaaaaa########cccccccccccaaaaa......cccccccccccccc...aaa####..cccc.ccccccccaaaa...........ccccccccccccccaa................cccccccccccccccca..............................................ccccccccccaa",
-"........cccccccaaa.........................ccccccaaaaa.....cccccccaccccccaaaaa########ccccccccccccaaaa.......cccccccccccccc...aaa###.ccccc.ccccccccaaaa...........cccccccccccccccca..............cccccccccccccccccca..............................................ccccccccccaa",
-".......ccccccccaa........................cccccccaaaaa.....ccccccccccccccaaaaa########.cccccccccccaaaa.......cccccccccccccccccaaaa##ccccc..cccccccccaaa............ccccccccccccccccc...........cccccccccccccccccccccc.................c............................cccccccccaaa",
-".......ccccccccaa.......................ccccccaaaaa......cccccccccccccaaaaaa########.cccccccccccaaaa........cccccccccccccccccaaa###cccc...cccccccccaaa............cccccccccccccccccc.......cccccc..cccccccccccccccccc...............cc...........................cccccccccaaa.",
-"......ccccccccca.......................ccccccaaaaa.......ccccccccccccaaaaaa########..ccccccccccaaaaa........cccccccccccccccccaaa###ccc..aacccccccccaa.............cccccccccccccccccccccccccccccc...cccccccccccccccccccc..........cccc...........................ccccccccaaaaa.",
-"......ccccccccca.....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa.........cccccccccccccccccaaa##cc..aacccccccccccaa..ccc........cccccccccccccccccccccccccccc....cccccccccccccccccccccccccccccccc.............................ccccccccaaaaa..",
-".....cccccccccca....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa..........ccccccccccccccccaaa###c.aaaaccccccccccccccccc.........cccccccccccccccccccccccccc....aaccccccccccccccccccccccccccccccc...........c.................ccccccccaaaaa...",
-".....cccccccccca..................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa...........ccccccccccccccccaaa###aaaaaaccccccccccccccc...........ccccccccccccccccccccccccc...aaaaccccccccccccccccccccccccccccc.......aaccccc................cccccccaaaaaa....",
-"....cccccccccccc.................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa............ccccccccccccccccaaa##aaaaaaccccccccccccccc............ccccccccccccccccccccccc..aaaaaa..cccccccccccccccccccccccccc...aaaaaacccccc...............cccccccaaaaaaa.....",
-"....ccccccccccccc.............cccccccccaaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa.............cccccccccccccccaaaa##aaaaaccccccccccccca....aaa.......ccccccccccccccccccccaaaaaaaaa....ccccccccccccccccccccaaaaaaaaaaaaccccccccccc..........ccccccccaaaaaaa.......",
-"...cccccccccccccccc.......ccccccccccccaaaa............cccccccccaaaaaaaaa########..cccccccaaaaa..............cccccccccccccccaaa##aaaa.ccccccccccccccaaaaaaa........cccccccccccccccccccaaaaaaaa......acccccccccccccccccaaaaaaaaaaaaaccccccccccccccccccccccccccccaaaaaaaa........",
-"...ccccccccccccccccccccccccccccccccccaaaa............cccccccccaaaaaaaaa########...ccccccaaaaa...............cccccccccccccccaaaaaaaa..ccccccccccccaaaaaaa...........ccccccccccccccccaaaaaaaaa.......aaccccccccccccaaaaaaaaaaaaaaa..ccccccccccccccccccccccccc.aaaaaaaa..........",
-"..cccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########...ccccccaaaaa.................ccccccccccccaaaaaaaa....cccccccccccaaaaaa.............acccccccccccccaaaaaaaaa..........aaaaaaaaaaaaaaaaaaaaaaaaa..........aacccccccccccccccc.aaaaaaaa............",
-"..ccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########....cccccaaaaa..................ccccccccccaaaaaaaaa.....cccccccccaaaaaaa..............aaacccccccccaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaa..........aaaaaaaacccccccccaaaaaaaaaa..............",
-"..cccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa.aaaa#######....cccccaaaaa...................aaccccccaaaaaaaaaa......cccccccaaaaaaaa...............aaaaaaaaaaaaaaaaaaa..............aaaaaaaaaaaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaaaaaa................",
-"..ccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa..aaa########...cccccaaaaa....................aaaaaaaaaaaaaaaa........ccccccaaaaaaa.................aaaaaaaaaaaaaaaaa.................aaaaaaaaaaaaaa................aaa.....aaaaaaaaaaaaaaaa...................",
-"..ccccccccccccccccccccccccccccaaaaa...............cccccccaaaaa..aaa########.....cccaaaaa......................aaaaaaaaaaaaa...........aaaaaaaaaaa...................aaaaaaaaaaaaaa.....................aaaaaaa................................aaaaaaaaa.......................",
-"..ccccccccccccccccccccccccccaaaaa.................ccccccaaaaa...aaa#######........aaaa........................aaaaaaaaaa..............aaaaaaaaa.......................aaaaaaaaa...............................................................................................",
-"..cccccccccccccccccccccccccaaaaa.................ccccccaaaa....aaa#######........aaaa...........................aaaaa.................aaaaaaa.................................................................................................................................",
-"..cccccccccccccccccccccccaaaaaa..................cccccaaaa.....aaa#######.......aaaa..................................................aaaaaa..................................................................................................................................",
-"...ccccccccccccccccccccaaaaaa....................ccccaaaa.....aaa#######.........a.....................................................aaa....................................................................................................................................",
-"...accccccccccccccccccaaaaaa.......................aaaaa......aaa######.......................................................................................................................................................................................................",
-"...aacccccccccccccccaaaaaaa.......................aaaaa.......aa#######.......................................................................................................................................................................................................",
-"....aaccccccccccccaaaaaaa.........................aaaa.......aaa######........................................................................................................................................................................................................",
-"....aaaaccccccccaaaaaaa..........................aaa.........aaa######........................................................................................................................................................................................................",
-".....aaaaaaaaaaaaaaaaa......................................aaa######.........................................................................................................................................................................................................",
-"......aaaaaaaaaaaaaa........................................aaa####...........................................................................................................................................................................................................",
-".......aaaaaaaaaaa.........................................aaa#####...........................................................................................................................................................................................................",
-".........aaaaaaa...........................................aaa####............................................................................................................................................................................................................",
-"...........................................................aaa####............................................................................................................................................................................................................",
-"..........................................................aaa####.............................................................................................................................................................................................................",
-"..........................................................aaa####.............................................................................................................................................................................................................",
-"..........................................................aaa###..............................................................................................................................................................................................................",
-".........................................................aaa###...............................................................................................................................................................................................................",
-".........................................................aaa###...............................................................................................................................................................................................................",
-".........................................................a.###................................................................................................................................................................................................................",
-".........................................................a.##.................................................................................................................................................................................................................",
-"...........................................................##.................................................................................................................................................................................................................",
-"...........................................................#..................................................................................................................................................................................................................",
-"..........................................................##..................................................................................................................................................................................................................",
-".............................................................................................................................................................................................................................................................................."
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.H
 9 4 w P ! 
0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.w
 : .         , > q 
*.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.>
                     , 2 *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.T J e 6 
3 4 G E 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E
 >                           : e w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^ 8 , .    
         > : 5 W 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J
 :                               . , ~ a.a.a.a.a.a.a.a.a.a.a.a.a.u.I , >        
                 : , T 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.w
 >                                     : K a.a.a.a.a.a.a.a.a.a.a.<.4 :          
                       , 3 
=.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.5
 :                                         > e u.a.a.a.a.a.a.a.a.E >            
                             > q 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.1
 .                                             : 5 q.a.a.a.a.a.u.w >            
                                 . > I 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.>
                                                 . . 1 <.a.a.a.a.r : .          
                                       : 8 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E
 >                                                         , *.a.a.L >          
                                             . , 
>.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J
 :                                                             > T E >          
                                                   > ! 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.w
 : .                                                               > :          
                                                     . : G 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.5
 :                                                                              
                                                         . : 8 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1
 .                 . : , .                                                      
                                                               . 3 
0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.,
 , q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.:                     : 
e -.P 1 > :                                                                     
                                            . , 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J
 : [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U
 : . e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E >                     : 
! a.a.a.a.9.y :                                                                 
                                                  , 
;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.>
   [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.,
     > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y >                   : 4 
9.a.a.a.a.a.a.a.;.3 :                                                           
                                                      : ^ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4
     [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T
 >       , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.3 :                   > r 
u.a.a.a.a.a.a.a.a.a.u.T :                                             , . 2 w e 
4 : > , .                                                 > E 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^
 >     [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.,
         : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T :                     : I 
a.a.a.a.a.a.a.a.a.a.a.a.a.0.4 :                                   . : q 
;.u.a.a.a.a.a.0.;.E r : :                                             : P 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3
       [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E
 >           : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.q > .                   : ~ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 >                               : r 
<.a.a.a.a.a.a.a.a.a.a.a.a.w.I , >                                           > G 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.a.a.a.a.a.!
 ,       [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1
             . : U a.a.a.a.a.a.a.a.a.a.a.u.T > .                   . , 
:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G :                           > ~ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.! 4 >                                         
: q 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8
 E a.a.a.a.1         [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~
 >                 : J y.a.a.a.a.a.a.a.a.^ 1 >                     : 3 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T >                       1 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > .                                 
      : 6 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.!
   ^ a.a.a.W >         [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4
                     : 1 &.a.a.a.a.y.^ 4 >                       , 8 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E >                   > 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.w :                             
          . 2 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.,
 . <.a.a.a.,           [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.>
                         > , e G 3 : >                       . > y 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H :               > 
&.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! , .                       
              . , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.y 
: e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : : 
u.a.a.;.,           [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r
                                                               : T 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.7 .           : H 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.8 :                     
                  > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . 
  H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.:   e 
a.a.a.y         . , [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.:
                                                             : 
*.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1           , 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.y >                 
                      > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.W >   
  , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3   , 
*.a.a.a.>       > 3 < [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T
 :                                                         . 1 
,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.>       , W 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y :               
                        : 3 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J >     
  > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J :   , 
a.a.a.a.:     > G u.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6
                                                         : 4 
q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T >   : 9 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ >           
                              , E u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 >     
    9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.:   . P 
a.a.a.a.K > : ~ a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w
                                                       > w 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e , 0.a.a.I 1 e 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>., .     
                                  > 3 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., :     
    > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.,   . : 
9.a.a.a.a.a.:.9.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.:
                                                   > K 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.1 . 7 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3
 . .                                       > q 9.a.a.a.a.a.a.a.a.a.a.a.a.T :    
         3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.1     . 
y a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q
 .                                             . : ! 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.>   > ! 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9
 :                                           : H 0.a.a.a.a.a.a.a.a.0.w ,        
     , ! a.a.a.a.a.a.a.u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 .     , 
w.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1
 .                                         : 5 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.>     4 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t
 : .                                         : : 4 T :.y.a.u.,.H : :            
   , u.a.a.a.a.a.a.w.6 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1 :     : T 
a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.>
                                       : U 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.>     : 
;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I
 :                                               : , : , : , .   .             
> T a.a.a.a.a.a.a.G   4 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > .       3 
a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.>
                                 : 3 
>.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.,     . r 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.!
 :                                                                           4 
u.a.a.a.a.a.a.<.>   . 5 y.a.a.a.a.a.a.a.a.a.a.a.a.a.<.e :         : 
;.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.3
 :                         : > L 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.>       : 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.,
                                                                       > 
:.a.a.a.a.a.a.a.q       : 3 ,.a.a.a.a.a.a.a.a.a.a.9.r : .         . w 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y
 > .                 > , T 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.>       : E 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.,
                                                                   : H 
a.a.a.a.a.a.a.-.>           > E y.a.a.a.a.a.,.U 3 > .             : 
0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.G
 : , > , , > > 7 ^ 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1       . 6 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.4
 :                                                             . 5 
y.a.a.a.a.a.a.a.4               > : 5 r q 6 , , .                 , ! 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.^
 ~ 
:.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8 . 
      > 
,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.G
 :                                                           1 
w.a.a.a.a.a.a.a.~ >                                             . : r 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r
 >       : L 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.1
 :                                                   . > ,.a.a.a.a.a.a.a.u.1    
                                             1 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U
 ,         1 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.H
 :                                               . , ;.a.a.a.a.a.a.a.a.R >      
                                         > 
>.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^
 >       . > 
=.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.w
 : :                                       : 4 0.a.a.a.a.a.a.a.a.u.,            
                                   , T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.>
         : r 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.U
 1 ,       .                       . > J u.a.a.a.a.a.a.a.a.a.T ,                
                             . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.,
           , 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E
 *.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.r > , .       .      
     , : r 0.a.a.a.a.a.a.a.a.a.a.y.,                                            
 . 3 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6
 .         : ! 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.8 
: , > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.U 0 2 : : > : 
. , r ^ w.a.a.a.a.a.a.a.a.a.a.a.a.~ ,                                           
  3 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K
 >         . 9 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 
.       > t 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y
                                             3 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.>
           : 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 
.           > G 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1
                                         . 2 
q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.>
           > U 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : 
              > H 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.:
                                       : 6 
q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7
 .           3 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , 
                  > ~ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r
                                   . , ! 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L
 >           : 
;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.: 
                      > 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.>
                               : G 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.:
 .         . e 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.-.a.a.a.a.a.0.,   
                      . 6 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.,
 .                     . > 5 
:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.,
             > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.L : . 
8 a.a.a.a.a.8 .                           : U 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.q
 : >           . , , K 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8
 .           : L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ 1 : . 
, E a.a.a.a.U :                             . : 
>.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.W
 8 > 1 5 0 G 
*.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T
 >             1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.9 >   . 
: e a.a.a.a.>.> .                               . 0 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.:
             > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : .     : 
q u.a.a.a.a.5                                     > 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9
 .             4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.8 :     . : 
q u.a.a.a.a.*.:                                     . J 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~
 >             , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q > .       : 
w u.a.a.a.a.a.4                                         > 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.,
               5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.0 >         : w 
u.a.a.a.a.a.a.*., .                                     , 
>.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r
 : .           , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , .         : w 
u.a.a.a.a.a.a.a.a.9.4 :                                   : W 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.>
               4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e >           > K 
a.a.a.a.a.a.a.a.a.a.a.u.y ,                                   G 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1
               > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., .           > W 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.E >                                 4 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J
 >               2 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y :           . : 
=.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.1 .                             . 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.:
               : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > .           : 1 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3 .                           : 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9
 .             . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.q :             : 6 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.4 .                         > 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.>
                 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > .             > y 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.,                         , 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q
                 . P a.a.a.a.a.a.a.a.a.a.a.a.a.<.6 :               : ! 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.>                       , 
,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.>
                 , :.a.a.a.a.a.a.a.a.a.a.a.w.G : .           . : 1 
,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U :                     
, 
:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w
                   : u.a.a.a.a.a.a.a.a.a.y.U > . .             : w 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.,                   
  , 
-.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.>
                   : a.a.a.a.a.a.a.a.a.! , : .               : T 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T :               
    , 
>.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e
                     : 9.a.a.a.a.a.>.J , :                 . , 
;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.:           
        > 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.>
                       4 ^ 9.;.Y 3 , .                   : 8 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4         
          > 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r
 .                         > , , .                       : P 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K .     
            : 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.:
                                                     : 2 
>.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., 
                : 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~
 ,                                                 . : H 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.,
                 , 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w
                                                 : 1 
=.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.,
                 8 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.:
                                               , r 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.:
                 J 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.,
                                           . , ^ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:
               : ! 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~
 >                                         > e 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:
               , 
:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T
 .                                     > 4 
;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a..
               . 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H
                                   : , E 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a..
               1 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.P
                                 > J 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.:
             . J 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&.,
                           > 0 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.:
             , 
;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.>
                     . > 6 
*.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.:
             : 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J
 >               , > J 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.:
             r 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w
 >       : > 6 ~ 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.:
           , 
*.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E
 ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^
 y 0 H T 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a..
           4 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T
 . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:
         , 
=.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.:
   t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.4.+.|
 F M v z c c c c c m | 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:       . 8 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6
   , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.#.)
 m z z v c u u u u u u u u u u u c c v #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,     
. : 
>.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E
 :   : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.o.D
 v z c u u u u u u u u u u u u u u u u u u u u c 
5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1     : 
*.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.:
     8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.+.Z
 c c c u u u u u u u u u u u u u u u u u u u u u u u u z 
X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : : 
:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9
 .   , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.O.V
 z c u u u u u u u u u u u u u u u u u u u u u u u u u u u u c 
X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.W 
0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.!
 >     4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.X.B
 x c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c 
p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.:
     , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i...m
 c x u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x } 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.&.w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e
 .     1 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.F
 c c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c 
t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0 . T 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.>
     : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.#.m
 c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u 
c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > 
*.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.,
       3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.{
 c c u u u u u u u u u u u u u u u u u u u u u u u c c x v V ) S M c u u u u u 
u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! :   1 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J
 :     : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.A
 c z u u u u u u u u u u u u u u u u u u u u u c u m { +.5.p.a.a.a.a.a.2.z u u 
u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.>   : T 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.:
       q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z
 c u u u u u u u u u u u u u u u u u u u u z c c F #.i.a.a.a.a.a.a.a.a.a.a.| z 
u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 .   : 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4
       : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r./
 z u u u u u u u u u u u u u u u u u u u u x M  
.6.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u c 
2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U >   . G 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y
 >     . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.{
 z z u u u u u u u u u u u u u u u u u u c v | 
r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u x b 
7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.>     : 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.>
       > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...c
 z u u u u u u u u u u u u u u u u u c c F 
3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z u u u c B 
i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 .     6 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9
       > R a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b
 c u u u u u u u u u u u u u u u u u c B 
+.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u c { 
p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G :     > ^ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.!
 :       3 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C
 c u u u u u u u u u u u u u u u u u c S 
6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a._ c u u c m 
5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ >       > 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.>
       > 
*.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v
 z u u u u u u u u u u u u u u u u c S 
6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u z } 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.,       . P 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e
 :     . q 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.`
 c u u u u u u u u u u u u u u u u c S 
6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u c m 
7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 .       : 
0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.>
       : 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m
 c u u u u u u u u u u u u u u u c S 
6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u z | 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T ,         
q 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.1
       : J 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c
 u u u u u u u u u u u u u u u c m 
6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M z u c m 
e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.:       
  > 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J
 :       , 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.C
 c u u u u u u u u u u u u u u u z } 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.m x c v 
O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.,     
    > T 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.:
       : E 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b
 z u u u u u u u u u u u u u u z b 
5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.M u v 
o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 . 
        8 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4
 .       3 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.v
 u u u u u u u u u u u u u u u c / 
p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.#.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e
 :         , 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T
 >       > 
>.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c
 u u u u u u u u u u u u u u x c 
1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I
 :         : T 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.:
       : K 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.c
 u u u u u u u u u u u u u u x m 
t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^
 :         . 6 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8
 .       2 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c
 u u u u u u u u u u u u u u z B 
i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.>
 .         : 
9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L
 :       > 
;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z
 u u u u u u u u u u u u u u z B 
p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1
           : T 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.>
       : H 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.u
 u u u u u u u u u u u u u u u n 
p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8
 .         . 5 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.>
 .       1 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.>
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.v
 u u u u u u u u u u u u u u u c 
6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y
 :           > 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ 
q.a.a.a.a.a.a.a.a.a.a.a.u.4         > 
=.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^
 : [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M
 u u u u u u u u u u u u u u u c 
o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T
 :           > T 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ . 3 
w.a.a.a.a.a.a.a.a.a.u.e :       . r 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G
   [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F
 c u u u u u u u u u u u u u u u m 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.>
           . q 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ >   . 4 
y.a.a.a.a.a.a.a.y.7 :         , 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1
 . [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c
 u u u u u u u u u u u u u u u c 
@.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.>
             , 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.>       : 5 
y.a.a.a.a.a.,.3 :         > ^ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.>
   [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c
 u u u u u u u u u u u u u u u u v 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.2
 .         . > 
*.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.,           
. 2 =.u.u.;.0 >           . w 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^
 ,   [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./
 u u u u u u u u u u u u u u u u u / address@hidden/ 
3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 .     
      : K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 . 
            . , > : ,               : 
q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y
     [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c
 u u u u u u u u u u u u u u u u x 
..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.F c c u ` 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J :         
    5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G :     
                                , ! 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1
     [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F
 u u u u u u u u u u u u u u u u u c 
$.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.Z c x u c ) 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! >         
    : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! ,     
                                . 9 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.>
     [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c
 u u u u u u u u u u u u u u u u u v 
1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.V c u u u z 
O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.:       
      > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.:   
                                    > 
0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~
 >     [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c
 u u u u u u u u u u u u u u u u u u A 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.m c u u u u v 
3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.>       
      : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1   
                                    > ~ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J
       [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.'
 u u u u u u u u u u u u u u u u u u u x +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.O.b 
c u u u u c M 
t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 .     
        1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e . 
                                    : y 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9
       [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V
 u u u u u u u u u u u u u u u u u u u u z { p.a.a.a.a.a.a.a.a.a.a.7. .m c c u 
u u u u c _ 
p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e :     
        > :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., 
                                      4 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1
       [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.v
 u u u u u u u u u u u u u u u u u u u u u x x F $.3.2.2.1.1.1.` v c x u u u u 
u u x v 
2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I >   
        . : U 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1             
                          > 
,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.:
       [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.B
 u u u u u u u u u u u u u u u u u u u u u u u u c v c v v v v u u u u u u u u 
u c D 
i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ >   
          : 9 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H :           
                        . > W 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.,
 .     [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.]
 u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x 
c 
#.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> 
              2 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.>           
                          : e 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~
 >       [...]
+"address@hidden u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u 
u u u u u c C 
r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 
              > 
<.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3           
                          . 6 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L
 .       [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b
 u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z v 
#.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6
 .             : 
&.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U >         
  .                         3 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q
       , [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c
 u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c ` 
p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y
 :             , U 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.>           
: 2 :                     1 
0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4
       > [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F
 c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c B 
6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T
 ,             : r 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 .         
: Y u.y >               . , 
,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4
     : W [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./
 c u u u u u u u u u u u u u u u u u u u u u u u u u u z v 
@.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.:
             . 6 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ >         
> U a.a.a.E >         . : 7 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6
     5 a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{
 c u u u u u u u u u u u u u u u u u u u u u u u u c ` 
i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.,
               , 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1         
. e a.a.a.a.a.;., : . : : J 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&.
  3 9.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m
 c u u u u u u u u u u u u u u u u u u u u c B 
5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3
 .             > 
,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E >       
  > y.a.a.a.a.a.a.q.Q G T 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.)
 c c u u u u u u u u u u u u u u u z c 
+.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9
 :             > ^ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.,         
> 
&.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v
 u u u u u u u u u u u u u c ` 
i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K
 >             > U 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I :       
: r 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C
 c u u u u u u u u u u u c V 
7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~
 :             : e 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.:       
  , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3./ M m 
5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v
 u u u u u u u u u u u z b 
1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.6.3.p.a.a.a.a.a.a.a.a.a.:.:
             . 5 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G :     
  > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.} b c u u z 
e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p._
 c u u u u u u u u u u z c 
o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.D c c c D 
a.a.a.a.a.a.a.a.q.,               , 
8.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.1.| / ..$.i.a.a.a.a.a.a.a.<.:     
  : t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F z c u u z v 
5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m
 c u u u u u u u u u u c ` 
t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.M z u u u u 
A a.a.a.a.a.a.a.u.4 .     X $ a d f x c u v / i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.| 
v x c u u u c M p.a.a.a.a.a.a.w .       > 
y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.D x u u u u x F 
t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.z
 u u u u u u u u u u c C 
7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.| v c u u u u 
u c 2.a.a.a.a.a.a.a.e : ; # g k k u u u u u u u z b 6.a.a.a.a.a.a.a.a.a.a.a.2.C 
c z u u u u u u u z ..a.a.a.a.a.>.:       > E 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.A c u u u u c M 
address@hidden z [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.S
 c u u u u u u u u u c n 
1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b z u u u u 
u u u V a.a.a.a.a.a.a.U < a k k u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.6.V 
c u u u u u u u u u u c +.a.a.a.a.a.e .       4 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.C c u u u u c b 
#.a.a.a.a.a.a.e.F m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b 
c u u [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v
 x u u u u u u u u z c 
o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ x u u u u 
u u u u z 5.a.a.a.a.a.a.&.- k u u u u u u u u u u u u u u u F a.a.a.a.a.a.a.t./ 
c u u u u u u u u u u u u v 6.a.a.a.a.w.:       > 
;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.V c u u u u c c  
.p.a.a.a.a.a.i.` x u #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.B 
c u u u u [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{
 c u u u u u u u u u z D 
i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u 
u u u u u D a.a.a.a.a.a.%.h k u u u u u u u u u u u u u u u x ..a.a.a.a.a.a.| z 
x u u u u u u u u u u u u u c p.a.a.a.a.I :     . r 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.B c u u u u u c / t.a.a.a.a.a.a. 
.c z u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u u u 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.M
 c u u u u u u u u u c 
$.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u u 
u u u u u u z e.a.a.a.a.a.[ k u u u u u u u u u u u u u u u u u c 3.a.a.a.a.e.M 
z u u u u u u u u u u u u u u x } a.a.a.a.u.,       : 
w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c u u u u u c B 6.a.a.a.a.a.a.2.v 
c u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b z u u u u u u u 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.v
 u u u u u u u u u c D 
i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.B c u u u u 
u u u u u u z / a.a.a.a.6.n k u u u u u u u u u u u u u u u u u u c a.a.a.a.X.c 
u u u u u u u u u u u u u u u u z i.a.a.a.a.! >     > T 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u z v #.a.a.a.a.a.a.p._ c u 
u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u u u 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c
 u u u u u u u u x v 
1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c x u u u 
u u u u u u u u z r.a.a.a.+.c u u u u u u u u u u u u u u u u u u u u ' a.a.e.V 
c u u u u u u u u u u u u u u u u z ] a.a.a.a.a.4       3 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c x u u u u x x { p.a.a.a.a.a.a.5.b x u 
u u u z 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.m z u u u u u u u u u u 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c
 u u u u u u u u c F 
t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u 
u u u u u u u u c { a.a.a.` c u u u u u u u u u u u u u u u u u u u u c 6.a.O.c 
x u u u u u u u u u u u u u u u u u z r.a.a.a.a.;.,     > 
=.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.m z u u u u u c A e.a.a.a.a.a.a.p.` c u u 
u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b u u u u u u u u u u u 
u [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.`
 z u u u u u u u u c 
#.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u u 
u u u u u u u u u u c i.a.i.C c u u u u u u u u u u u u u u u u u u u u u m t.C 
c u u u u u u c u u u u u u u u u u u x F a.a.a.a.a.w       6 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z c u u u u u c n 1.a.a.a.a.a.a.a.6.m x u u u 
u u u c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u x 
m [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{
 c u u u u u u u u c 
+.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.c u u u u 
u u u u u u u u u u c O.a.6.b u u u u u u u u u u u c x v u u u u u u u u z V c 
u u u u u u c / +.c u u u u u u u u u u x 6.a.a.a.a.w.:     : 
:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.) c u u u u u u c ..a.a.a.a.a.a.a.a.X.c u u u u 
u u u u v a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u z 
B i [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.
 .c u u u u u u u u c 
X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u 
u u u u u u u u u u x M a.$.c u u u u u u u u u k k ( 3.7.{ z u u u u u u u z c 
u u u u u c M e.a.5.v u u u u u u u u u u C a.a.a.a.a.T :     0 
a.a.a.a.a.a.a.a.a.a.a.a.a.p.| c z u u u u u c m e.a.a.a.a.a.a.a.a. .z u u u u u 
u u u c ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u c C 
p.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c
 u u u u u u u u c } 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b c u u u u u 
u u u u u u u u u u x 6.{ z u u u u u u u u k l * ,.a.a.a./ u u u u u u u u u u 
u u u u z { p.a.a.| z u u u u u u u u u c 2.a.a.a.a.a.4     > 
>.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u u u u c F p.a.a.a.a.a.a.a.a.} c u u u u u 
u u u u c i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.c u u u u u u u u u u u u v 
p.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.z
 u u u u u u u u x F 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c b v 
u u u u u u u u u u x / C c u u u u u u u u k p > ^ a.a.a.6.c u u u u u u u u u 
u u u u c +.a.a.a.p.v u u u u u u u u u u m a.a.a.a.a.9.:   . w 
a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u c O.a.a.a.a.a.a.a.a.a.+.z u u u u u u 
u u u u ` a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u u c 
2.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c
 u u u u u u u u u z 
t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u c } 
a.m u u u u u u u u u u u x x u u u u u u u u k & : U a.a.a.a.V u u u u u u u u 
u u u u u z #.a.a.a.a.+.c u u u u u u u u u c +.a.a.a.a.a.I .   > 
<.a.a.a.a.a.a.a.a.a.a.5.n c u u u u u u z n 7.a.a.a.a.a.a.a.a.a.e.z u u u u u u 
u u u u x e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u u u z F 
a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.m 
u u u u u u u u u x } 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c M 
e.a.e.x u u u u u u u u u x u u u u u u u u u u k % : e a.a.a.a.+.c u u u u u u 
u u u u u u z 1.a.a.a.a.a.b u u u u u u u u u u x i.a.a.a.a.a.1   . r 
a.a.a.a.a.a.a.a.a.p._ c u u u u u u u c D p.a.a.a.a.a.a.a.a.a.p.m u u u u u u u 
u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u u u u u u u u u u u c 
r.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F x 
u u u u u u u u u v 
p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u x F 
p.a.a.D u u u u u u u u u u x u u u u u u u u u k @ . 4 y.a.a.a.e.c u u u u u u 
u u u u u u c 2.a.a.a.a.a.1.c u u u u u u u u u u V a.a.a.a.a.>.,   > 
9.a.a.a.a.a.a.a.a.3.b c u u u u u u u c ` a.a.a.a.a.a.a.a.a.a.a.| c u u u u u u 
u u u u u F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u u u u u u u u u c 
a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u 
u u u u u u u u x | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.| c 
u u u u z ..a.a.a.5.c u u u u u u u u u u u u u u u u u u u k O   , 0.a.a.a.a.m 
u u u u u u u u u u u u c 3.a.a.a.a.a.a.V u u u u u u u u u u c O.a.a.a.a.a.H . 
: L a.a.a.a.a.a.a.p.) c u u u u u u u u c S a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u 
u u u u u u z X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.b u u u u u u u u u u u u u 
u C a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u 
u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.M c u 
u u u c 2.a.a.a.a.V u u u u u u u u u u u u u u u u u u u l o   : :.a.a.a.a.{ c 
u u u u u u u u u u u c 3.a.a.a.a.a.a.6.c u u u u u u u u u u z r.a.a.a.a.a.4 . 
1 y.a.a.a.a.a.a.2.b u u u u u u u u u z V p.a.a.a.a.a.a.a.a.a.a.a.` z u u u u u 
u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.S z u u u u u u u u u u u u u 
u { a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C x u u 
u u u u u u u u u p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u 
u c M r.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u f o . : Q a.a.a.a.2.c u 
u u u u u u u u u u c 5.a.a.a.a.a.a.a.F u u u u u u u u u u u M a.a.a.a.a.a.U 8 
q.a.a.a.a.a.i.F c u u u u u u u u u u M p.a.a.a.a.a.a.a.a.a.a.a.i.u u u u u u u 
u u u u u u u | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.} c u u u u u u u u u u u u u u 
u F a.a.a.a.a [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.z u u u 
u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.V c u u u u 
c { a.a.a.a.a.t.v u u u u u u u u u u u u u u u u u k g X   > J a.a.a.a.p.v u u 
u u u u u u u u u c 6.a.a.a.a.a.a.a.r.z u u u u u u u u u u x | 
a.a.a.a.a.a.a.a.a.a.a.a.a.+.v u z u c u u u u u u u b 
r.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u C 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.F c u u u u u u u u u u u u u u u u b a.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u 
u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .c u u u u z c 
2.a.a.a.a.a.a.S u u u u u u u u u u u u u u u u u k i     . 0 a.a.a.a.a.} c u u 
u u u u u u u u c 3.a.a.a.a.a.a.a.a.] z u u u u u u u u u u c 
#.a.a.a.a.a.a.a.a.a.a.a.e.C c u x Z c u u u u u u u c 
2.a.a.a.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u u u c 
t.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u u u u u u u u u u u u u u z p.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.z u u u u 
u u u u u u u u c a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b z u u u u c V 
r.a.a.a.a.a.a.+.c u u u u u u u u u u u u u u u u k s     . 2 y.a.a.a.a.e.x u u 
u u u u u u u u c o.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u c 
7.a.a.a.a.a.a.a.a.a.a.X.c u u c 1.S u u u u u u u u B 
a.a.a.a.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u c B 
p.a.a.a.a.a.a.a.a.a.e.| z u u u u u u u u u u u u u u u u u u u v 1.a.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u 
u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.M c u u u u u c } 
a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u p       > 9.a.a.a.a.a.F u u 
u u u u u u u u c _ a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u 
a.a.a.a.a.a.a.a.a.6.m c u c V t.2.z u u u u u u u c 
o.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u x b 
+.t.a.a.a.r.5.O.B z c u u c z u u u u u u u u u u u u u u u u u v e.a.a.a [...]
+"address@hidden u u u u u u u u u u u u u u { 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.D c u u u u u z b 6.a.a.a.a.a.a.a.a.C u u u u 
u u u u u u u u u u u u k =       > =.a.a.a.a.a.t.c u u u u u u u u u u V 
a.a.a.a.a.a.a.a.a.a.} u u u u u u u u u u u u n a.a.a.a.a.a.a.i._ x u u x  
.a.a.b u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.t.$._ ` } u u u u u u u u u u u u 
u u u u u u c c c c u c c c u u u c n 5.u u u u u u u u u u u u u u u u u u u z 
F 1.5 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.M u u u u u u 
u u u u u u u u u c 7.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c c u u u u u c ) 
p.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u u u k #       > T a.a.a.a.a.a. 
.z u u u u u u u u u b p.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u m 
a.a.a.a.a.a.$.v x u z n 6.a.a.X.z u u u u u u u u c ` a.a.a.a.p.7.#./ b z z u Z 
C u u u u u u u u u u u u u u u u u u u u u u u u u u u u c } a.a.u u u u u u u 
u u u u u u u u u u u u u u c v [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.x u u u u u u 
u u u u u u u u u u b 6.a.a.a.a.a.a.a.a.a.a.3._ c c u u u u u z v 
2.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u u k $       > y 
a.a.a.a.a.a.a.v u u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u 
u u u v a.a.a.a.e.C c u u z ` p.a.a.a.c u u u u u u u u u u c v C m u z c c u u 
u c | a.C u u u u u u u u u u u u u u u u u u u u u u u u u u c C 6.a.a.a.u u u 
u u u u u u u u u u u u u u u u u u u u [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ u u u u u u u 
u u u u u u u u u u u z ) 1.e.a.a.a.p.3.` c v u u u u u u u c D 
i.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u u u u k +       : 6 
u.a.a.a.a.a.a.7.c u u u u u u u u c 1.a.a.a.a.a.a.a.a.a.a.a.t.x u u u u u u u u 
u u u u c 5.a.1.C c u u c m 3.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u 
c Z e.a.a.A u u u u u u u u u u u u u u u u u u u u u u u u c M 2.a.a.a.a.a.b u 
u u u u u u u u u u u u u u u u u u u u u [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u 
u u u u u u u u u u u u u c c z u u x c u u u u u u u u x c 
#.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u u u u u u u u l o         1 
w.a.a.a.a.a.a.a.O.c u u u u u u u u B a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u u 
u u u u u u c u v u u u x } p.a.a.a.a.a.M u u u u u u u u u u u u u u u u u u c 
v 1.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u c b #.a.a.a.a.a.a.a.{ 
z u u u u u u u u u u u u u u u u u u u u u [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z u u u u u u u 
u u u u u u u u u u u u u u u u u u u u u u u u u u u c V 
r.a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u u u u u u u u u z j X .       : 
,.a.a.a.a.a.a.a.a._ u u u u u u u u x 6.a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u 
u u u u u u u u u u u c B e.a.a.a.a.a.a.a.c u u u u u u u u u u u u u u u u u c 
{ p.a.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u x v 
o.a.a.a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u u u u u [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u 
u u u u u u u u u u u u u u u u u u u u u u u u u z c 
X.a.a.a.a.a.a.a.a.a.a.a.a.a.) z u u u u u u u u u u u u c N <         > ^ 
a.a.a.a.a.a.a.a.a._ u u u u u u u x F a.a.a.a.a.a.a.a.a.a.a.a.a.a.v u u u u u u 
u u u u u u u u u x c o.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u u x x ) 
r.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u u u u u c c | 
i.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u u u u u u u u u c [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u 
u u u u u u u u u u u u u u u u u u u u u u u u x D 
r.a.a.a.a.a.a.a.a.a.a.a.a.a.7.z u u u u u u u u u u u u c ) 8         > I 
a.a.a.a.a.a.a.a.a.a. .x u u u u u u x t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u 
u u u u u u u u u c S r.a.a.a.a.a.a.a.a.a.i.z u u u u u u u u u u u u z c ) 
r.a.a.a.a.a.a.a.a.a.a.2.u u u u u u u u u u u u u u c x C 
+.i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c c u u u u u u u u u u u u u c c A O [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u 
u u u u u u u u u u u u u u u u u u u u u u x b 
3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u c ..;.,       : 9 
a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u x { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u 
u u u u u u u c c _ e.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u c v } 
r.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b c u u u u u u u u c u B 
O.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.| V z c v v c c c c u c M } 3.a.a.a 
[...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u 
u u u u u u u u u u u u u u u u u u u u u z } 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u c @.a.8         , 
w.a.a.a.a.a.a.a.a.a.a.a.a.S x u u u u z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b c 
u u u u u u c n O.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.V c u u u u v c c / 
3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.F n z v m B S / address@hidden [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` u u u u u u u u 
u u u u u u u u u u u u u u u u u u u c Z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V 
u u u u u u u u u u u c 3.a.;.,       > *.a.a.a.a.a.a.a.a.a.a.a.a.a.i.V c u u x 
Z a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...M z u x m / 
2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.| { _ { 
$.e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .u u u u u u u u 
u u u u u u u u u u u u u u u u u z b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z 
u u u u u u u u u z n e.a.a.9       > K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b x m 
t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u 
u u u u u u u u u u u u u u u z c { p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v 
u u u u u u u u c Z p.a.a.9.>     . 5 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u 
u u u u u u u u u u u u u c c { t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.c 
u u u u u u u c { a.a.a.a.K :     > 
0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.n u u u u u u u 
u u u u u u u u u u u x c ` t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u 
u u u u u u c #.a.a.a.a.u.>     > ~ 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.z u u u u u u 
u u u u u u u u u u z ` r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ 
c u u u c b 7.a.a.a.a.a.^ ,   : H 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u 
u u u u u u u u c ) 
r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.D c c v 
..p.a.a.a.a.a.a.9   . 6 
u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u u u u u 
u u u u u c c { 
e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.e.a.a.a.a.a.a.a.a.0.>
   , 
0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.v v z u u 
u v c c / 
3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q
 : > 
-.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.1.X.) D 
| 
$.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y
   U 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L
 J 
a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
+"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a
 [...]
 };
diff --git a/etc/images/tree-widget/default/README 
b/etc/images/tree-widget/default/README
index 22e8ab2..22cf6e8 100644
--- a/etc/images/tree-widget/default/README
+++ b/etc/images/tree-widget/default/README
@@ -5,5 +5,5 @@ Files: close.png close.xpm empty.png empty.xpm end-guide.png 
end-guide.xpm
        no-guide.png no-guide.xpm no-handle.png no-handle.xpm open.png
        open.xpm
 Author: David Ponce <address@hidden>
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/tree-widget/folder/README 
b/etc/images/tree-widget/folder/README
index 90fdfe7..7b2d108 100644
--- a/etc/images/tree-widget/folder/README
+++ b/etc/images/tree-widget/folder/README
@@ -5,5 +5,5 @@ Files:  close.png close.xpm empty.png empty.xpm end-guide.png
         leaf.png leaf.xpm no-guide.png no-guide.xpm no-handle.png
         no-handle.xpm open.png open.xpm
 Author: David Ponce <address@hidden>
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/unchecked.xpm b/etc/images/unchecked.xpm
index 815d4c5..e2104d7 100644
--- a/etc/images/unchecked.xpm
+++ b/etc/images/unchecked.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2010-2015 Free Software Foundation, Inc.
  *
  * Author: Chong Yidong <address@hidden>
  *
diff --git a/etc/org/README b/etc/org/README
index d04f434..d37faf9 100644
--- a/etc/org/README
+++ b/etc/org/README
@@ -1,7 +1,7 @@
 The files OrgOdtContentTemplate.xml and OrgOdtStyles.xml have the
 following copyright information:
 
-Copyright (C) 2010-2014 Free Software Foundation, Inc.
+Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 These files are part of GNU Emacs.
 
diff --git a/etc/ps-prin0.ps b/etc/ps-prin0.ps
index 446a3d1..0e40ec2 100644
--- a/etc/ps-prin0.ps
+++ b/etc/ps-prin0.ps
@@ -1,7 +1,7 @@
 % === BEGIN ps-print prologue 0
 % version: 6.0
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % This file is part of GNU Emacs.
 
diff --git a/etc/ps-prin1.ps b/etc/ps-prin1.ps
index ca5aea9..0cd3396 100644
--- a/etc/ps-prin1.ps
+++ b/etc/ps-prin1.ps
@@ -1,7 +1,7 @@
 % === BEGIN ps-print prologue 1
 % version: 6.1
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % This file is part of GNU Emacs.
 
diff --git a/etc/publicsuffix.txt b/etc/publicsuffix.txt
index fd84dc6..5c0baaf 100644
--- a/etc/publicsuffix.txt
+++ b/etc/publicsuffix.txt
@@ -404,7 +404,7 @@ mil.bo
 tv.bo
 
 // br : http://registro.br/dominio/categoria.html
-// Submitted by registry <address@hidden> 2014-03-04
+// Submitted by registry <address@hidden> 2014-08-11
 br
 adm.br
 adv.br
@@ -452,7 +452,7 @@ mil.br
 mp.br
 mus.br
 net.br
-nom.br
+*.nom.br
 not.br
 ntr.br
 odo.br
@@ -818,7 +818,14 @@ gob.es
 edu.es
 
 // et : http://en.wikipedia.org/wiki/.et
-*.et
+et
+com.et
+gov.et
+org.et
+edu.et
+biz.et
+name.et
+info.et
 
 // eu : http://en.wikipedia.org/wiki/.eu
 eu
@@ -1591,7 +1598,7 @@ jobs
 
 // jp : http://en.wikipedia.org/wiki/.jp
 // http://jprs.co.jp/en/jpdomain.html
-// Submitted by registry <address@hidden> 2014-02-28
+// Submitted by registry <address@hidden> 2014-10-30
 jp
 // jp organizational type names
 ac.jp
@@ -1603,7 +1610,7 @@ gr.jp
 lg.jp
 ne.jp
 or.jp
-// jp preficture type names
+// jp prefecture type names
 aichi.jp
 akita.jp
 aomori.jp
@@ -1651,6 +1658,53 @@ wakayama.jp
 yamagata.jp
 yamaguchi.jp
 yamanashi.jp
+栃木.jp
+愛知.jp
+愛媛.jp
+兵庫.jp
+熊本.jp
+茨城.jp
+北海道.jp
+千葉.jp
+和歌山.jp
+長崎.jp
+長野.jp
+新潟.jp
+青森.jp
+静岡.jp
+東京.jp
+石川.jp
+埼玉.jp
+三重.jp
+京都.jp
+佐賀.jp
+大分.jp
+大阪.jp
+奈良.jp
+宮城.jp
+宮崎.jp
+富山.jp
+山口.jp
+山形.jp
+山梨.jp
+岩手.jp
+岐阜.jp
+岡山.jp
+島根.jp
+広島.jp
+徳島.jp
+沖縄.jp
+滋賀.jp
+神奈川.jp
+福井.jp
+福岡.jp
+福島.jp
+秋田.jp
+群馬.jp
+香川.jp
+高知.jp
+鳥取.jp
+鹿児島.jp
 // jp geographic type names
 // http://jprs.jp/doc/rule/saisoku-1.html
 *.kawasaki.jp
@@ -5249,27 +5303,30 @@ gop.pk
 gos.pk
 info.pk
 
-// pl : http://www.dns.pl/english/
+// pl http://www.dns.pl/english/index.html
+// confirmed on 26.09.2014 from Bogna Tchórzewska <address@hidden>
 pl
-// NASK functional domains (nask.pl / dns.pl) : 
http://www.dns.pl/english/dns-funk.html
+com.pl
+net.pl
+org.pl
+info.pl
+waw.pl
+gov.pl
+// pl functional domains (http://www.dns.pl/english/index.html)
 aid.pl
 agro.pl
 atm.pl
 auto.pl
 biz.pl
-com.pl
 edu.pl
 gmina.pl
 gsm.pl
-info.pl
 mail.pl
 miasta.pl
 media.pl
 mil.pl
-net.pl
 nieruchomosci.pl
 nom.pl
-org.pl
 pc.pl
 powiat.pl
 priv.pl
@@ -5285,12 +5342,7 @@ tm.pl
 tourism.pl
 travel.pl
 turystyka.pl
-// ICM functional domains (icm.edu.pl)
-6bone.pl
-art.pl
-mbone.pl
 // Government domains (administred by ippt.gov.pl)
-gov.pl
 uw.gov.pl
 um.gov.pl
 ug.gov.pl
@@ -5300,11 +5352,7 @@ so.gov.pl
 sr.gov.pl
 po.gov.pl
 pa.gov.pl
-// other functional domains
-ngo.pl
-irc.pl
-usenet.pl
-// NASK geographical domains : http://www.dns.pl/english/dns-regiony.html
+// pl regional domains (http://www.dns.pl/english/index.html)
 augustow.pl
 babia-gora.pl
 bedzin.pl
@@ -5390,7 +5438,6 @@ rybnik.pl
 rzeszow.pl
 sanok.pl
 sejny.pl
-siedlce.pl
 slask.pl
 slupsk.pl
 sosnowiec.pl
@@ -5412,7 +5459,6 @@ ustka.pl
 walbrzych.pl
 warmia.pl
 warszawa.pl
-waw.pl
 wegrow.pl
 wielun.pl
 wlocl.pl
@@ -5425,18 +5471,6 @@ zagan.pl
 zarow.pl
 zgora.pl
 zgorzelec.pl
-// TASK geographical domains (www.task.gda.pl/uslugi/dns)
-gda.pl
-gdansk.pl
-gdynia.pl
-med.pl
-sopot.pl
-// other geographical domains
-gliwice.pl
-krakow.pl
-poznan.pl
-wroc.pl
-zakopane.pl
 
 // pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf
 pm
@@ -5621,7 +5655,7 @@ mari.ru
 mari-el.ru
 marine.ru
 mordovia.ru
-mosreg.ru
+// mosreg.ru  Bug 1090800 - removed at request of Aleksey Konstantinov 
<address@hidden>
 msk.ru
 murmansk.ru
 nalchik.ru
@@ -6005,11 +6039,35 @@ mil.to
 // Submitted by Ryan Sleevi <address@hidden> 2014-01-03
 tp
 
-// tr : http://en.wikipedia.org/wiki/.tr
-*.tr
-!nic.tr
-// Used by government in the TRNC
-// http://en.wikipedia.org/wiki/.nc.tr
+// subTLDs: https://www.nic.tr/forms/eng/policies.pdf
+//     and: https://www.nic.tr/forms/politikalar.pdf
+// Submitted by <address@hidden> 2014-07-19
+tr
+com.tr
+info.tr
+biz.tr
+net.tr
+org.tr
+web.tr
+gen.tr
+tv.tr
+av.tr
+dr.tr
+bbs.tr
+name.tr
+tel.tr
+gov.tr
+bel.tr
+pol.tr
+mil.tr
+k12.tr
+edu.tr
+kep.tr
+
+// Used by Northern Cyprus
+nc.tr
+
+// Used by government agencies of Northern Cyprus
 gov.nc.tr
 
 // travel : http://en.wikipedia.org/wiki/.travel
@@ -6284,7 +6342,7 @@ k12.mo.us
 k12.ms.us
 k12.mt.us
 k12.nc.us
-k12.nd.us
+// k12.nd.us  Bug 1028347 - Removed at request of Travis Rosso <address@hidden>
 k12.ne.us
 k12.nh.us
 k12.nj.us
@@ -6309,7 +6367,6 @@ k12.wa.us
 k12.wi.us
 // k12.wv.us  Bug 947705 - Removed at request of Verne Britton <address@hidden>
 k12.wy.us
-
 cc.ak.us
 cc.al.us
 cc.ar.us
@@ -6365,7 +6422,6 @@ cc.wa.us
 cc.wi.us
 cc.wv.us
 cc.wy.us
-
 lib.ak.us
 lib.al.us
 lib.ar.us
@@ -6421,7 +6477,6 @@ lib.wa.us
 lib.wi.us
 // lib.wv.us  Bug 941670 - Removed at request of Larry W Arnold 
<address@hidden>
 lib.wy.us
-
 // k12.ma.us contains school districts in Massachusetts. The 4LDs are
 //  managed indepedently except for private (PVT), charter (CHTR) and
 //  parochial (PAROCH) schools.  Those are delegated dorectly to the
@@ -6725,1268 +6780,2173 @@ xxx
 *.zw
 
 
-// xn--80asehdb : 2013-07-14 CORE Association
-онлайн
+// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 
2014-12-22T18:02:07Z
 
-// xn--80aswg : 2013-07-14 CORE Association
-сайт
+// abb : 2014-10-24 ABB Ltd
+abb
 
-// xn--ngbc5azd : 2013-07-14 International Domain Registry Pty. Ltd.
-شبكة
+// abbott : 2014-07-24 Abbott Laboratories, Inc.
+abbott
 
-// xn--unup4y : 2013-07-14 Spring Fields, LLC
-游戏
+// abogado : 2014-04-24 Top Level Domain Holdings Limited
+abogado
 
-// xn--vhquv : 2013-08-28 Dash McCook, LLC
-企业
+// academy : 2013-11-07 Half Oaks, LLC
+academy
 
-// camera : 2013-08-28 Atomic Maple, LLC
-camera
+// accenture : 2014-08-15 Accenture plc
+accenture
 
-// clothing : 2013-08-28 Steel Lake, LLC
-clothing
+// accountant : 2014-11-20 dot Accountant Limited
+accountant
 
-// lighting : 2013-08-28 John McCook, LLC
-lighting
+// accountants : 2014-03-20 Knob Town, LLC
+accountants
 
-// singles : 2013-08-28 Fern Madison, LLC
-singles
+// active : 2014-05-01 The Active Network, Inc
+active
 
-// ventures : 2013-08-28 Binky Lake, LLC
-ventures
+// actor : 2013-12-12 United TLD Holdco Ltd.
+actor
 
-// voyage : 2013-08-28 Ruby House, LLC
-voyage
+// ads : 2014-12-04 Charleston Road Registry Inc.
+ads
 
-// guru : 2013-08-28 Pioneer Cypress, LLC
-guru
+// adult : 2014-10-16 ICM Registry AD LLC
+adult
 
-// holdings : 2013-08-28 John Madison, LLC
-holdings
+// afl : 2014-10-02 Australian Football League
+afl
 
-// equipment : 2013-08-28 Corn Station, LLC
-equipment
+// africa : 2014-03-24 ZA Central Registry NPC trading as Registry.Africa
+africa
 
-// bike : 2013-08-28 Grand Hollow, LLC
-bike
+// agency : 2013-11-14 Steel Falls, LLC
+agency
 
-// estate : 2013-08-28 Trixy Park, LLC
-estate
+// aig : 2014-12-18 American International Group, Inc.
+aig
 
-// tattoo : 2013-08-30 Uniregistry,Corp.
-tattoo
+// airforce : 2014-03-06 United TLD Holdco Ltd.
+airforce
 
-// xn--3ds443g : 2013-09-09 TLD Registry Limited
-在线
+// airtel : 2014-10-24 Bharti Airtel Limited
+airtel
 
-// xn--fiq228c5hs : 2013-09-09 TLD Registry Limited
-中文网
+// allfinanz : 2014-07-03 Allfinanz Deutsche Vermögensberatung 
Aktiengesellschaft
+allfinanz
 
-// land : 2013-09-10 Pine Moon, LLC
-land
+// alsace : 2014-07-02 REGION D ALSACE
+alsace
 
-// plumbing : 2013-09-10 Spring Tigers, LLC
-plumbing
+// amsterdam : 2014-07-24 Gemeente Amsterdam
+amsterdam
 
-// contractors : 2013-09-10 Magic Woods, LLC
-contractors
+// analytics : 2014-12-18 Campus IP LLC
+analytics
 
-// sexy : 2013-09-11 Uniregistry,Corp.
-sexy
+// android : 2014-08-07 Charleston Road Registry Inc.
+android
 
-// menu : 2013-09-11 Wedding TLD2, LLC
-menu
+// apartments : 2014-12-11 June Maple, LLC
+apartments
 
-// xn--rhqv96g : 2013-09-11 Stable Tone Limited
-世界
+// aquarelle : 2014-07-24 Aquarelle.com
+aquarelle
 
-// uno : 2013-09-11 Dot Latin, LLC
-uno
+// aramco : 2014-11-20 Aramco Services Company
+aramco
 
-// gallery : 2013-09-13 Sugar House, LLC
-gallery
+// archi : 2014-02-06 STARTING DOT LIMITED
+archi
 
-// technology : 2013-09-13 Auburn Falls
-technology
+// army : 2014-03-06 United TLD Holdco Ltd.
+army
 
-// xn--3bst00m : 2013-09-13 Eagle Horizon Limited
-集团
+// arte : 2014-12-11 Association Relative à la Télévision Européenne G.E.I.E.
+arte
 
-// reviews : 2013-09-13 Extra Cover, LLC
-reviews
+// associates : 2014-03-06 Baxter Hill, LLC
+associates
 
-// guide : 2013-09-13 Snow Moon, LLC
-guide
+// attorney : 2014-03-20
+attorney
 
-// xn--6qq986b3x1 : 2013-09-13 Tycoon Treasure Limited
-我爱你
+// auction : 2014-03-20
+auction
 
-// graphics : 2013-09-13 Over Madison, LLC
-graphics
+// audio : 2014-03-20 Uniregistry, Corp.
+audio
 
-// construction : 2013-09-13 Fox Dynamite, LLC
-construction
+// author : 2014-12-18 Amazon EU S.à r.l.
+author
 
-// onl : 2013-09-16 I-Registry Ltd.
-onl
+// auto : 2014-11-13 Uniregistry, Corp.
+auto
 
-// xn--q9jyb4c : 2013-09-17 Charleston Road Registry
-みんな
+// autos : 2014-01-09 DERAutos, LLC
+autos
 
-// diamonds : 2013-09-23 John Edge, LLC
-diamonds
+// axa : 2013-12-19 AXA SA
+axa
 
-// kiwi : 2013-09-23 Dot Kiwi Limited
-kiwi
+// azure : 2014-12-18 Microsoft Corporation
+azure
 
-// enterprises : 2013-09-23 Snow Oaks LLC
-enterprises
+// band : 2014-06-12
+band
 
-// today : 2013-09-23 Pearl Woods, LLC
-today
+// bank : 2014-09-25 fTLD Registry Services LLC
+bank
 
-// futbol : 2013-09-23 Atomic Falls, LLC
-futbol
+// bar : 2013-12-12 Punto 2012 Sociedad Anonima Promotora de Inversion de 
Capital Variable
+bar
 
-// photography : 2013-09-23 Sugar Glen, LLC
-photography
+// barcelona : 2014-07-24 Municipi de Barcelona
+barcelona
 
-// tips : 2013-09-23 Corn Willow, LLC
-tips
+// barclaycard : 2014-11-20 Barclays Bank PLC
+barclaycard
 
-// directory : 2013-09-23 Extra Madison, LLC
-directory
+// barclays : 2014-11-20 Barclays Bank PLC
+barclays
 
-// kitchen : 2013-09-23 Just Goodbye, LLC
-kitchen
+// bargains : 2013-11-14 Half Hallow, LLC
+bargains
 
-// xn--6frz82g : 2013-09-24 Afilias Limited
-移动
+// bauhaus : 2014-04-17 Werkhaus GmbH
+bauhaus
 
-// kim : 2013-09-24 Afilias Limited
-kim
+// bayern : 2014-01-23 Bayern Connect GmbH
+bayern
 
-// xn--cg4bki : 2013-09-27 Samsung SDS Co., LTD
-삼성
+// bbc : 2014-12-18 British Broadcasting Corporation
+bbc
 
-// monash : 2013-10-01 Monash University
-monash
+// bbva : 2014-10-02 BANCO BILBAO VIZCAYA ARGENTARIA, S.A.
+bbva
 
-// wed : 2013-10-02 Atgron, Inc.
-wed
+// bcn : 2014-07-24 Municipi de Barcelona
+bcn
 
-// pink : 2013-10-02 Afilias Limited
-pink
+// beer : 2014-01-09 Top Level Domain Holdings Limited
+beer
 
-// ruhr : 2013-10-02 regiodot GmbH & Co. KG
-ruhr
+// bentley : 2014-12-18 Bentley Motors Limited
+bentley
 
-// buzz : 2013-10-03 DOTSTRATEGY CO.
-buzz
+// berlin : 2013-10-31 dotBERLIN GmbH & Co. KG
+berlin
 
-// careers : 2013-10-03 Wild Corner, LLC
-careers
+// best : 2013-12-19 BestTLD Pty Ltd
+best
 
-// shoes : 2013-10-03 Binky Galley, LLC
-shoes
+// bharti : 2014-01-09 Bharti Enterprises (Holding) Private Limited
+bharti
 
-// xn--4gbrim : 2013-10-07 Suhub Electronic Establishment
-موقع
+// bible : 2014-06-19 American Bible Society
+bible
 
-// career : 2013-10-09 dotCareer, LLC
-career
+// bid : 2013-12-19 dot Bid Limited
+bid
 
-// otsuka : 2013-10-11 Otsuka Holdings Co. Ltd.
-otsuka
+// bike : 2013-08-27 Grand Hollow, LLC
+bike
 
-// xn--fiQ64b : 2013-10-14 CITIC Group Corporation
-中信
+// bing : 2014-12-18 Microsoft Corporation
+bing
 
-// gift : 2013-10-18 Uniregistry Corp.
-gift
+// bingo : 2014-12-04 Sand Cedar, LLC
+bingo
 
-// recipes : 2013-10-18 Grand Island, LLC
-recipes
+// bio : 2014-03-06 STARTING DOT LIMITED
+bio
 
-// coffee : 2013-10-18 Trixy Cover, LLC
-coffee
+// black : 2014-01-16 Afilias Limited
+black
 
-// luxury : 2013-10-18 Luxury Partners, LLC
-luxury
+// blackfriday : 2014-01-16 Uniregistry, Corp.
+blackfriday
 
-// domains : 2013-10-18 Sugar Cross, LLC
-domains
+// bloomberg : 2014-07-17 Bloomberg IP Holdings LLC
+bloomberg
 
-// photos : 2013-10-18 Sea Corner, LLC
-photos
+// blue : 2013-11-07 Afilias Limited
+blue
 
-// limo : 2013-10-18 Hidden Frostbite, LLC
-limo
+// bms : 2014-10-30 Bristol-Myers Squibb Company
+bms
 
-// viajes : 2013-10-18 Black Madison, LLC
-viajes
+// bmw : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft
+bmw
 
-// wang : 2013-10-24 Zodiac Leo Limited
-wang
+// bnl : 2014-07-24 Banca Nazionale del Lavoro
+bnl
 
-// democrat : 2013-10-24 United TLD Holdco Ltd.
-democrat
+// bnpparibas : 2014-05-29 BNP Paribas
+bnpparibas
 
-// mango : 2013-10-25 PUNTO FA S.L.
-mango
+// boats : 2014-12-04 DERBoats, LLC
+boats
 
-// cab : 2013-10-25 Half Sunset, LLC
-cab
+// bom : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br
+bom
 
-// support : 2013-10-25 Grand Orchard, LLC
-support
+// bond : 2014-06-05 Bond University Limited
+bond
 
-// dance : 2013-10-25 United TLD Holdco Ltd.
-dance
+// boo : 2014-01-30 Charleston Road Registry Inc.
+boo
 
-// nagoya : 2013-10-25 GMO Registry, Inc.
-nagoya
+// bot : 2014-12-18 Amazon EU S.à r.l.
+bot
 
-// computer : 2013-10-25 Pine Mill, LLC
-computer
+// boutique : 2013-11-14 Over Galley, LLC
+boutique
 
-// wien : 2013-10-28 punkt.wien GmbH
-wien
+// bradesco : 2014-12-18 Banco Bradesco S.A.
+bradesco
 
-// berlin : 2013-10-31 dotBERLIN GmbH & Co. KG
-berlin
+// bridgestone : 2014-12-18 Bridgestone Corporation
+bridgestone
 
-// codes : 2013-10-31 Puff Willow, LLC
-codes
+// broker : 2014-12-11 IG Group Holdings PLC
+broker
 
-// email : 2013-10-31 Spring Madison, LLC
-email
+// brussels : 2014-02-06 DNS.be vzw
+brussels
 
-// xn--mgbab2bd : 2013-10-31 CORE Association
-بازار
+// budapest : 2013-11-21 Top Level Domain Holdings Limited
+budapest
 
-// repair : 2013-11-07 Lone Sunset, LLC
-repair
+// build : 2013-11-07 Plan Bee LLC
+build
 
-// holiday : 2013-11-07 Goose Woods, LLC
-holiday
+// builders : 2013-11-07 Atomic Madison, LLC
+builders
 
-// center : 2013-11-07 Tin Mill, LLC
-center
+// business : 2013-11-07 Spring Cross, LLC
+business
 
-// systems : 2013-11-07 Dash Cypress, LLC
-systems
+// buy : 2014-12-18 Amazon EU S.à r.l.
+buy
 
-// wiki : 2013-11-07 Top Level Design, LLC
-wiki
+// buzz : 2013-10-02 DOTSTRATEGY CO.
+buzz
 
-// ceo : 2013-11-07 CEOTLD Pty Ltd
-ceo
+// bzh : 2014-02-27 Association www.bzh
+bzh
 
-// international : 2013-11-07 Wild Way, LLC
-international
+// cab : 2013-10-24 Half Sunset, LLC
+cab
 
-// solar : 2013-11-07 Ruby Town, LLC
-solar
+// cal : 2014-07-24 Charleston Road Registry Inc.
+cal
 
-// company : 2013-11-07 Silver Avenue, LLC
-company
+// call : 2014-12-18 Amazon EU S.à r.l.
+call
 
-// education : 2013-11-07 Brice Way, LLC
-education
+// camera : 2013-08-27 Atomic Maple, LLC
+camera
 
-// training : 2013-11-07 Wild Willow, LLC
-training
+// camp : 2013-11-07 Delta Dynamite, LLC
+camp
 
-// academy : 2013-11-07 Half Oaks, LLC
-academy
+// cancerresearch : 2014-05-15 Australian Cancer Research Foundation
+cancerresearch
 
-// marketing : 2013-11-07 Fern Pass, LLC
-marketing
+// canon : 2014-09-12 Canon Inc.
+canon
 
-// florist : 2013-11-08 Half Cypress, LLC
-florist
+// capetown : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
+capetown
 
-// solutions : 2013-11-07 Silver Cover, LLC
-solutions
+// capital : 2014-03-06 Delta Mill, LLC
+capital
 
-// build : 2013-11-07 Plan Bee LLC
-build
+// caravan : 2013-12-12 Caravan International, Inc.
+caravan
 
-// institute : 2013-11-07 Outer Maple, LLC
-institute
+// cards : 2013-12-05 Foggy Hollow, LLC
+cards
 
-// builders : 2013-11-07 Atomic Madison, LLC
-builders
+// care : 2014-03-06 Goose Cross
+care
 
-// red : 2013-11-07 Afilias Limited
-red
+// career : 2013-10-09 dotCareer LLC
+career
 
-// blue : 2013-11-07 Afilias Limited
-blue
+// careers : 2013-10-02 Wild Corner, LLC
+careers
 
-// ninja : 2013-11-07 United TLD Holdco Ltd.
-ninja
+// cars : 2014-11-13 Uniregistry, Corp.
+cars
 
-// business : 2013-11-07 Spring Cross, LLC
-business
+// cartier : 2014-06-23 Richemont DNS Inc.
+cartier
 
-// gal : 2013-11-07 Asociación puntoGAL
-gal
+// casa : 2013-11-21 Top Level Domain Holdings Limited
+casa
 
-// social : 2013-11-07 United TLD Holdco Ltd.
-social
+// cash : 2014-03-06 Delta Lake, LLC
+cash
 
-// house : 2013-11-07 Sugar Park, LLC
-house
+// casino : 2014-12-18 Binky Sky, LLC
+casino
 
-// camp : 2013-11-07 Delta Dynamite, LLC
-camp
+// catering : 2013-12-05 New Falls. LLC
+catering
+
+// cba : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA
+cba
+
+// cbn : 2014-08-22 The Christian Broadcasting Network, Inc.
+cbn
+
+// center : 2013-11-07 Tin Mill, LLC
+center
+
+// ceo : 2013-11-07 CEOTLD Pty Ltd
+ceo
+
+// cern : 2014-06-05 European Organization for Nuclear Research (\
+cern
+
+// cfa : 2014-08-28 CFA Institute
+cfa
+
+// cfd : 2014-12-11 IG Group Holdings PLC
+cfd
+
+// channel : 2014-05-08 Charleston Road Registry Inc.
+channel
+
+// chat : 2014-12-04 Sand Fields, LLC
+chat
+
+// cheap : 2013-11-14 Sand Cover, LLC
+cheap
+
+// chloe : 2014-10-16 Richemont DNS Inc.
+chloe
+
+// christmas : 2013-11-21 Uniregistry, Corp.
+christmas
+
+// chrome : 2014-07-24 Charleston Road Registry Inc.
+chrome
+
+// church : 2014-02-06 Holly Fileds, LLC
+church
+
+// circle : 2014-12-18 Amazon EU S.à r.l.
+circle
+
+// citic : 2014-01-09 CITIC Group Corporation
+citic
+
+// city : 2014-05-29 Snow Sky, LLC
+city
+
+// cityeats : 2014-12-11 Lifestyle Domain Holdings, Inc.
+cityeats
+
+// claims : 2014-03-20 Black Corner, LLC
+claims
+
+// cleaning : 2013-12-05 Fox Shadow, LLC
+cleaning
+
+// click : 2014-06-05 Uniregistry, Corp.
+click
+
+// clinic : 2014-03-20 Goose Park, LLC
+clinic
+
+// clothing : 2013-08-27 Steel Lake, LLC
+clothing
+
+// club : 2013-11-08 .CLUB DOMAINS, LLC
+club
+
+// coach : 2014-10-09 Koko Island, LLC
+coach
+
+// codes : 2013-10-31 Puff Willow, LLC
+codes
+
+// coffee : 2013-10-17 Trixy Cover, LLC
+coffee
+
+// college : 2014-01-16 XYZ.COM LLC
+college
+
+// cologne : 2014-02-05 NetCologne Gesellschaft für Telekommunikation mbH
+cologne
+
+// commbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA
+commbank
+
+// community : 2013-12-05 Fox Orchard, LLC
+community
+
+// company : 2013-11-07 Silver Avenue, LLC
+company
+
+// computer : 2013-10-24 Pine Mill, LLC
+computer
+
+// condos : 2013-12-05 Pine House, LLC
+condos
+
+// construction : 2013-09-16 Fox Dynamite, LLC
+construction
+
+// consulting : 2013-12-05
+consulting
+
+// contractors : 2013-09-10 Magic Woods, LLC
+contractors
+
+// cooking : 2013-11-21 Top Level Domain Holdings Limited
+cooking
+
+// cool : 2013-11-14 Koko Lake, LLC
+cool
+
+// corsica : 2014-09-25 Collectivité Territoriale de Corse
+corsica
+
+// country : 2013-12-19 Top Level Domain Holdings Limited
+country
+
+// courses : 2014-12-04 OPEN UNIVERSITIES AUSTRALIA PTY LTD
+courses
+
+// credit : 2014-03-20 Snow Shadow, LLC
+credit
+
+// creditcard : 2014-03-20 Binky Frostbite, LLC
+creditcard
+
+// cricket : 2014-10-09 dot Cricket Limited
+cricket
+
+// crown : 2014-10-24 Crown Equipment Corporation
+crown
+
+// crs : 2014-04-03 Federated Co-operatives Limited
+crs
+
+// cruises : 2013-12-05 Spring Way, LLC
+cruises
+
+// csc : 2014-09-25 Alliance-One Services, Inc.
+csc
+
+// cuisinella : 2014-04-03 SALM S.A.S.
+cuisinella
+
+// cymru : 2014-05-08 Nominet UK
+cymru
+
+// dabur : 2014-02-06 Dabur India Limited
+dabur
+
+// dad : 2014-01-23 Charleston Road Registry Inc.
+dad
+
+// dance : 2013-10-24 United TLD Holdco Ltd.
+dance
+
+// date : 2014-11-20 dot Date Limited
+date
+
+// dating : 2013-12-05 Pine Fest, LLC
+dating
+
+// datsun : 2014-03-27 NISSAN MOTOR CO., LTD.
+datsun
+
+// day : 2014-01-30 Charleston Road Registry Inc.
+day
+
+// dclk : 2014-11-20 Charleston Road Registry Inc.
+dclk
+
+// deals : 2014-05-22 Sand Sunset, LLC
+deals
+
+// degree : 2014-03-06
+degree
+
+// delivery : 2014-09-11 Steel Station, LLC
+delivery
+
+// dell : 2014-10-24 Dell Inc.
+dell
+
+// democrat : 2013-10-24 United TLD Holdco Ltd.
+democrat
+
+// dental : 2014-03-20 Tin Birch, LLC
+dental
+
+// dentist : 2014-03-20
+dentist
+
+// desi : 2013-11-14 Desi Networks LLC
+desi
+
+// design : 2014-11-07 Top Level Design, LLC
+design
+
+// dev : 2014-10-16 Charleston Road Registry Inc.
+dev
+
+// diamonds : 2013-09-22 John Edge, LLC
+diamonds
+
+// diet : 2014-06-26 Uniregistry, Corp.
+diet
+
+// digital : 2014-03-06 Dash Park, LLC
+digital
+
+// direct : 2014-04-10 Half Trail, LLC
+direct
+
+// directory : 2013-09-20 Extra Madison, LLC
+directory
+
+// discount : 2014-03-06 Holly Hill, LLC
+discount
+
+// dnp : 2013-12-13 Dai Nippon Printing Co., Ltd.
+dnp
+
+// docs : 2014-10-16 Charleston Road Registry Inc.
+docs
+
+// dog : 2014-12-04 Koko Mill, LLC
+dog
+
+// doha : 2014-09-18 Communications Regulatory Authority (CRA)
+doha
+
+// domains : 2013-10-17 Sugar Cross, LLC
+domains
+
+// doosan : 2014-04-03 Doosan Corporation
+doosan
+
+// download : 2014-11-20 dot Support Limited
+download
+
+// durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
+durban
+
+// dvag : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG
+dvag
+
+// earth : 2014-12-04 Interlink Co., Ltd.
+earth
+
+// eat : 2014-01-23 Charleston Road Registry Inc.
+eat
+
+// edeka : 2014-12-18 EDEKA Verband kaufmännischer Genossenschaften e.V.
+edeka
+
+// education : 2013-11-07 Brice Way, LLC
+education
+
+// email : 2013-10-31 Spring Madison, LLC
+email
+
+// emerck : 2014-04-03 Merck KGaA
+emerck
+
+// energy : 2014-09-11 Binky Birch, LLC
+energy
+
+// engineer : 2014-03-06 United TLD Holdco Ltd.
+engineer
+
+// engineering : 2014-03-06 Romeo Canyon
+engineering
+
+// enterprises : 2013-09-20 Snow Oaks, LLC
+enterprises
+
+// epson : 2014-12-04 Seiko Epson Corporation
+epson
+
+// equipment : 2013-08-27 Corn Station, LLC
+equipment
+
+// erni : 2014-04-03 ERNI Group Holding AG
+erni
+
+// esq : 2014-05-08 Charleston Road Registry Inc.
+esq
+
+// estate : 2013-08-27 Trixy Park, LLC
+estate
+
+// eurovision : 2014-04-24 European Broadcasting Union (EBU)
+eurovision
+
+// eus : 2013-12-12 Puntueus Fundazioa
+eus
+
+// events : 2013-12-05 Pioneer Maple, LLC
+events
+
+// everbank : 2014-05-15 EverBank
+everbank
+
+// exchange : 2014-03-06 Spring Falls, LLC
+exchange
+
+// expert : 2013-11-21 Magic Pass, LLC
+expert
+
+// exposed : 2013-12-05 Victor Beach, LLC
+exposed
+
+// fage : 2014-12-18 Fage International S.A.
+fage
+
+// fail : 2014-03-06 Atomic Pipe, LLC
+fail
+
+// fairwinds : 2014-11-13 FairWinds Partners, LLC
+fairwinds
+
+// faith : 2014-11-20 dot Faith Limited
+faith
+
+// fan : 2014-03-06
+fan
+
+// fans : 2014-11-07 Asiamix Digital Limited
+fans
+
+// farm : 2013-11-07 Just Maple, LLC
+farm
+
+// fashion : 2014-07-03 Top Level Domain Holdings Limited
+fashion
+
+// fast : 2014-12-18 Amazon EU S.à r.l.
+fast
+
+// feedback : 2013-12-19 Top Level Spectrum, Inc.
+feedback
+
+// ferrero : 2014-12-18 Ferrero Trading Lux S.A.
+ferrero
+
+// final : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br
+final
+
+// finance : 2014-03-20 Cotton Cypress, LLC
+finance
+
+// financial : 2014-03-06 Just Cover, LLC
+financial
+
+// firestone : 2014-12-18 Bridgestone Corporation
+firestone
+
+// firmdale : 2014-03-27 Firmdale Holdings Limited
+firmdale
+
+// fish : 2013-12-12 Fox Woods, LLC
+fish
+
+// fishing : 2013-11-21 Top Level Domain Holdings Limited
+fishing
+
+// fit : 2014-11-07 Top Level Domain Holdings Limited
+fit
+
+// fitness : 2014-03-06 Brice Orchard, LLC
+fitness
+
+// flights : 2013-12-05 Fox Station, LLC
+flights
+
+// florist : 2013-11-07 Half Cypress, LLC
+florist
+
+// flowers : 2014-10-09 Uniregistry, Corp.
+flowers
+
+// flsmidth : 2014-07-24 FLSmidth A/S
+flsmidth
+
+// fly : 2014-05-08 Charleston Road Registry Inc.
+fly
+
+// foo : 2014-01-23 Charleston Road Registry Inc.
+foo
+
+// football : 2014-12-18 Foggy Farms, LLC
+football
+
+// ford : 2014-11-13 Ford Motor Company
+ford
+
+// forex : 2014-12-11 IG Group Holdings PLC
+forex
+
+// forsale : 2014-05-22
+forsale
+
+// foundation : 2013-12-05 John Dale, LLC
+foundation
+
+// frl : 2014-05-15 FRLregistry B.V.
+frl
+
+// frogans : 2013-12-19 OP3FT
+frogans
+
+// fund : 2014-03-20 John Castle, LLC
+fund
+
+// furniture : 2014-03-20 Lone Fields, LLC
+furniture
+
+// futbol : 2013-09-20
+futbol
+
+// gal : 2013-11-07 Asociación puntoGAL
+gal
+
+// gallery : 2013-09-13 Sugar House, LLC
+gallery
+
+// garden : 2014-06-26 Top Level Domain Holdings Limited
+garden
+
+// gbiz : 2014-07-17 Charleston Road Registry Inc.
+gbiz
+
+// gdn : 2014-07-31 Joint Stock Company \
+gdn
+
+// gea : 2014-12-04 GEA Group Aktiengesellschaft
+gea
+
+// gent : 2014-01-23 COMBELL GROUP NV/SA
+gent
+
+// ggee : 2014-01-09 GMO Internet, Inc.
+ggee
+
+// gift : 2013-10-17 Uniregistry, Corp.
+gift
+
+// gifts : 2014-07-03 Goose Sky, LLC
+gifts
+
+// gives : 2014-03-06 United TLD Holdco Ltd.
+gives
+
+// giving : 2014-11-13 Giving Limited
+giving
+
+// glass : 2013-11-07 Black Cover, LLC
+glass
+
+// gle : 2014-07-24 Charleston Road Registry Inc.
+gle
+
+// global : 2014-04-17 Dot GLOBAL AS
+global
+
+// globo : 2013-12-19 Globo Comunicação e Participações S.A
+globo
+
+// gmail : 2014-05-01 Charleston Road Registry Inc.
+gmail
+
+// gmo : 2014-01-09 GMO Internet, Inc.
+gmo
+
+// gmx : 2014-04-24 1&1 Mail & Media GmbH
+gmx
+
+// goldpoint : 2014-11-20 YODOBASHI CAMERA CO.,LTD.
+goldpoint
+
+// golf : 2014-12-18 Lone falls, LLC
+golf
+
+// goo : 2014-12-18 NTT Resonant Inc.
+goo
+
+// goog : 2014-11-20 Charleston Road Registry Inc.
+goog
+
+// google : 2014-07-24 Charleston Road Registry Inc.
+google
+
+// gop : 2014-01-16 Republican State Leadership Committee, Inc.
+gop
+
+// got : 2014-12-18 Amazon EU S.à r.l.
+got
+
+// graphics : 2013-09-13 Over Madison, LLC
+graphics
+
+// gratis : 2014-03-20 Pioneer Tigers, LLC
+gratis
+
+// green : 2014-05-08 Afilias Limited
+green
+
+// gripe : 2014-03-06 Corn Sunset, LLC
+gripe
+
+// group : 2014-08-15 Romeo Town, LLC
+group
+
+// gucci : 2014-11-13 Guccio Gucci S.p.a.
+gucci
+
+// guge : 2014-08-28 Charleston Road Registry Inc.
+guge
+
+// guide : 2013-09-13 Snow Moon, LLC
+guide
+
+// guitars : 2013-11-14 Uniregistry, Corp.
+guitars
+
+// guru : 2013-08-27 Pioneer Cypress, LLC
+guru
+
+// hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH
+hamburg
+
+// hangout : 2014-11-13 Charleston Road Registry Inc.
+hangout
+
+// haus : 2013-12-05
+haus
+
+// healthcare : 2014-06-12 Silver Glen, LLC
+healthcare
+
+// help : 2014-06-26 Uniregistry, Corp.
+help
+
+// here : 2014-02-06 Charleston Road Registry Inc.
+here
+
+// hermes : 2014-07-10 HERMES INTERNATIONAL
+hermes
+
+// hiphop : 2014-03-06 Uniregistry, Corp.
+hiphop
+
+// hitachi : 2014-10-31 Hitachi, Ltd.
+hitachi
+
+// hiv : 2014-03-13 dotHIV gemeinnuetziger e.V.
+hiv
+
+// holdings : 2013-08-27 John Madison, LLC
+holdings
+
+// holiday : 2013-11-07 Goose Woods, LLC
+holiday
+
+// homes : 2014-01-09 DERHomes, LLC
+homes
+
+// honda : 2014-12-18 Honda Motor Co., Ltd.
+honda
+
+// horse : 2013-11-21 Top Level Domain Holdings Limited
+horse
+
+// host : 2014-04-17 DotHost Inc.
+host
+
+// hosting : 2014-05-29 Uniregistry, Corp.
+hosting
+
+// hotmail : 2014-12-18 Microsoft Corporation
+hotmail
+
+// house : 2013-11-07 Sugar Park, LLC
+house
+
+// how : 2014-01-23 Charleston Road Registry Inc.
+how
+
+// hsbc : 2014-10-24 HSBC Holdings PLC
+hsbc
+
+// ibm : 2014-07-31 International Business Machines Corporation
+ibm
+
+// ice : 2014-10-30 IntercontinentalExchange, Inc.
+ice
+
+// ifm : 2014-01-30 ifm electronic gmbh
+ifm
+
+// iinet : 2014-07-03 Connect West Pty. Ltd.
+iinet
+
+// immo : 2014-07-10 Auburn Bloom, LLC
+immo
 
 // immobilien : 2013-11-07 United TLD Holdco Ltd.
 immobilien
 
-// moda : 2013-11-07 United TLD Holdco Ltd.
-moda
+// industries : 2013-12-05 Outer House, LLC
+industries
+
+// infiniti : 2014-03-27 NISSAN MOTOR CO., LTD.
+infiniti
+
+// ing : 2014-01-23 Charleston Road Registry Inc.
+ing
+
+// ink : 2013-12-05 Top Level Design, LLC
+ink
+
+// institute : 2013-11-07 Outer Maple, LLC
+institute
+
+// insure : 2014-03-20 Pioneer Willow, LLC
+insure
+
+// international : 2013-11-07 Wild Way, LLC
+international
+
+// investments : 2014-03-20 Holly Glen, LLC
+investments
+
+// ipiranga : 2014-08-28 Ipiranga Produtos de Petroleo S.A.
+ipiranga
+
+// irish : 2014-08-07 Dot-Irish LLC
+irish
+
+// ist : 2014-08-28 Istanbul Metropolitan Municipality
+ist
+
+// istanbul : 2014-08-28 Istanbul Metropolitan Municipality
+istanbul
+
+// itau : 2014-10-02 Itau Unibanco Holding S.A.
+itau
+
+// iwc : 2014-06-23 Richemont DNS Inc.
+iwc
+
+// jaguar : 2014-11-13 Jaguar Land Rover Ltd
+jaguar
+
+// java : 2014-06-19 Oracle Corporation
+java
+
+// jcb : 2014-11-20 JCB Co., Ltd.
+jcb
+
+// jetzt : 2014-01-09 New TLD Company AB
+jetzt
+
+// jlc : 2014-12-04 Richemont DNS Inc.
+jlc
+
+// joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
+joburg
+
+// jot : 2014-12-18 Amazon EU S.à r.l.
+jot
+
+// joy : 2014-12-18 Amazon EU S.à r.l.
+joy
+
+// jprs : 2014-09-18 Japan Registry Services Co., Ltd.
+jprs
+
+// juegos : 2014-03-20 Uniregistry, Corp.
+juegos
+
+// kaufen : 2013-11-07 United TLD Holdco Ltd.
+kaufen
+
+// kddi : 2014-09-12 KDDI CORPORATION
+kddi
+
+// kfh : 2014-12-04 Kuwait Finance House
+kfh
+
+// kim : 2013-09-23 Afilias Limited
+kim
+
+// kinder : 2014-11-07 Ferrero Trading Lux S.A.
+kinder
+
+// kitchen : 2013-09-20 Just Goodbye, LLC
+kitchen
+
+// kiwi : 2013-09-20 DOT KIWI LIMITED
+kiwi
+
+// koeln : 2014-01-09 NetCologne Gesellschaft für Telekommunikation mbH
+koeln
+
+// krd : 2013-12-05 KRG Department of Information Technology
+krd
+
+// kred : 2013-12-19 KredTLD Pty Ltd
+kred
+
+// kyoto : 2014-11-07 Academic Institution: Kyoto Jyoho Gakuen
+kyoto
+
+// lacaixa : 2014-01-09 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA
+lacaixa
+
+// land : 2013-09-10 Pine Moon, LLC
+land
+
+// landrover : 2014-11-13 Jaguar Land Rover Ltd
+landrover
+
+// lat : 2014-10-16 ECOM-LAC Federaciòn de Latinoamèrica y el Caribe para 
Internet y el Comercio Electrònico
+lat
+
+// latrobe : 2014-06-16 La Trobe University
+latrobe
+
+// lawyer : 2014-03-20
+lawyer
+
+// lds : 2014-03-20 IRI Domain Management, LLC (\
+lds
+
+// lease : 2014-03-06 Victor Trail, LLC
+lease
+
+// leclerc : 2014-08-07 A.C.D. LEC Association des Centres Distributeurs 
Edouard Leclerc
+leclerc
+
+// legal : 2014-10-16 Blue Falls, LLC
+legal
+
+// lgbt : 2014-05-08 Afilias Limited
+lgbt
+
+// liaison : 2014-10-02 Liaison Technologies, Incorporated
+liaison
+
+// lidl : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG
+lidl
+
+// life : 2014-02-06 Trixy Oaks, LLC
+life
+
+// lifestyle : 2014-12-11 Lifestyle Domain Holdings, Inc.
+lifestyle
+
+// lighting : 2013-08-27 John McCook, LLC
+lighting
+
+// like : 2014-12-18 Amazon EU S.à r.l.
+like
+
+// limited : 2014-03-06 Big Fest, LLC
+limited
+
+// limo : 2013-10-17 Hidden Frostbite, LLC
+limo
+
+// lincoln : 2014-11-13 Ford Motor Company
+lincoln
+
+// linde : 2014-12-04 Linde Aktiengesellschaft
+linde
+
+// link : 2013-11-14 Uniregistry, Corp.
+link
+
+// live : 2014-12-04 Half Woods, LLC
+live
+
+// loan : 2014-11-20 dot Loan Limited
+loan
+
+// loans : 2014-03-20 June Woods, LLC
+loans
+
+// london : 2013-11-14 Dot London Domains Limited
+london
+
+// lotte : 2014-11-07 Lotte Holdings Co., Ltd.
+lotte
+
+// lotto : 2014-04-10 Afilias Limited
+lotto
+
+// ltd : 2014-09-25 Over Corner, LLC
+ltd
+
+// ltda : 2014-04-17 DOMAIN ROBOT SERVICOS DE HOSPEDAGEM NA INTERNET LTDA
+ltda
+
+// lupin : 2014-11-07 LUPIN LIMITED
+lupin
+
+// luxe : 2014-01-09 Top Level Domain Holdings Limited
+luxe
+
+// luxury : 2013-10-17 Luxury Partners, LLC
+luxury
+
+// madrid : 2014-05-01 Comunidad de Madrid
+madrid
+
+// maif : 2014-10-02 Mutuelle Assurance Instituteur France (MAIF)
+maif
+
+// maison : 2013-12-05 Victor Frostbite, LLC
+maison
+
+// man : 2014-12-04 MAN SE
+man
+
+// management : 2013-11-07 John Goodbye, LLC
+management
+
+// mango : 2013-10-24 PUNTO FA S.L.
+mango
+
+// market : 2014-03-06
+market
+
+// marketing : 2013-11-07 Fern Pass, LLC
+marketing
+
+// markets : 2014-12-11 IG Group Holdings PLC
+markets
+
+// marriott : 2014-10-09 Marriott Worldwide Corporation
+marriott
+
+// media : 2014-03-06 Grand Glen, LLC
+media
+
+// meet : 2014-01-16 Afilias Limited
+meet
+
+// melbourne : 2014-05-29 The Crown in right of the State of Victoria, 
represented by its Department of State Development, Business and Innovation
+melbourne
 
-// glass : 2013-11-07 Black Cover, LLC
-glass
+// meme : 2014-01-30 Charleston Road Registry Inc.
+meme
 
-// management : 2013-11-07 John Goodbye, LLC
-management
+// memorial : 2014-10-16 Dog Beach, LLC
+memorial
 
-// kaufen : 2013-11-07 United TLD Holdco Ltd.
-kaufen
+// menu : 2013-09-11 Wedding TLD2, LLC
+menu
 
-// farm : 2013-11-07 Just Maple, LLC
-farm
+// meo : 2014-11-07 PT Comunicacoes S.A.
+meo
 
-// xn--55qw42g : 2013-11-08 China Organizational Name Administration Center
-公益
+// miami : 2013-12-19 Top Level Domain Holdings Limited
+miami
 
-// xn--zfr164b : 2013-11-08 China Organizational Name Administration Center
-政务
+// microsoft : 2014-12-18 Microsoft Corporation
+microsoft
 
-// club : 2013-11-08 .CLUB DOMAINS, LLC
-club
+// mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft
+mini
 
-// voting : 2013-11-13 Valuetainment Corp.
-voting
+// mma : 2014-11-07 MMA IARD
+mma
 
-// TOKYO : 2013-11-13 GMO Registry, Inc.
-tokyo
+// mobily : 2014-12-18 GreenTech Consultancy Company W.L.L.
+mobily
+
+// moda : 2013-11-07 United TLD Holdco Ltd.
+moda
 
 // moe : 2013-11-13 Interlink Co., Ltd.
 moe
 
-// guitars : 2013-11-14 Uniregistry, Corp.
-guitars
+// moi : 2014-12-18 Amazon EU S.à r.l.
+moi
 
-// bargains : 2013-11-14 Half Hallow, LLC
-bargains
+// monash : 2013-09-30 Monash University
+monash
 
-// xn--nqv7fs00ema : 2013-11-14 Public Interest Registry
-组织机构
+// money : 2014-10-16 Outer McCook, LLC
+money
 
-// desi : 2013-11-14 Desi Networks LLC
-desi
+// montblanc : 2014-06-23 Richemont DNS Inc.
+montblanc
 
-// cool : 2013-11-14 Koko Lake, LLC
-cool
+// mormon : 2013-12-05 IRI Domain Management, LLC (\
+mormon
 
-// boutique : 2013-11-14 Over Galley, LLC
-boutique
+// mortgage : 2014-03-20
+mortgage
 
-// pics : 2013-11-14 Uniregistry, Corp.
-pics
+// moscow : 2013-12-19 Foundation for Assistance for Internet Technologies and 
Infrastructure Development (FAITID)
+moscow
 
-// xn--c1avg : 2013-11-14 Public Interest Registry
-орг
+// motorcycles : 2014-01-09 DERMotorcycles, LLC
+motorcycles
 
-// xn--55qx5d : 2013-11-14 Computer Network Information Center of Chinese 
Academy of Sciences (China Internet Network Information Center)
-公司
+// mov : 2014-01-30 Charleston Road Registry Inc.
+mov
 
-// xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese 
Academy of Sciences (China Internet Network Information Center)
-网络
+// movistar : 2014-10-16 Telefónica S.A.
+movistar
 
-// cheap : 2013-11-14 Sand Cover, LLC
-cheap
+// mtn : 2014-12-04 MTN Dubai Limited
+mtn
 
-// xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd.
-广东
+// mtpc : 2014-11-20 Mitsubishi Tanabe Pharma Corporation
+mtpc
 
-// photo : 2013-11-14 Uniregistry, Corp.
-photo
+// nadex : 2014-12-11 IG Group Holdings PLC
+nadex
 
-// network : 2013-11-14 Trixy Manor, LLC
-network
+// nagoya : 2013-10-24 GMO Registry, Inc.
+nagoya
 
-// zone : 2013-11-14 Outer Falls, LLC
-zone
+// navy : 2014-03-06 United TLD Holdco Ltd.
+navy
 
-// xn--nqv7f : 2013-11-14 Public Interest Registry
-机构
+// netbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA
+netbank
 
-// link : 2013-11-14 Uniregistry, Corp.
-link
+// network : 2013-11-14 Trixy Manor, LLC
+network
 
-// QPON : 2013-11-14 dotCOOL, Inc.
-qpon
+// neustar : 2013-12-05 NeuStar, Inc.
+neustar
 
-// xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry
-संगठन
+// new : 2014-01-30 Charleston Road Registry Inc.
+new
 
-// agency : 2013-11-14 Steel Falls, LLC
-agency
+// news : 2014-12-18 Hidden Bloom, LLC
+news
 
-// tienda : 2013-11-14 Victor Manor, LLC
-tienda
+// nexus : 2014-07-24 Charleston Road Registry Inc.
+nexus
 
-// works : 2013-11-14 Little Dynamite, LLC
-works
+// ngo : 2014-03-06 Public Interest Registry
+ngo
 
-// london : 2013-11-14 Dot London Domains Limited
-london
+// nhk : 2014-02-13 Japan Broadcasting Corporation (NHK)
+nhk
 
-// watch : 2013-11-14 Sand Shadow, LLC
-watch
+// nico : 2014-12-04 DWANGO Co., Ltd.
+nico
 
-// rocks : 2013-11-14 Ruby Moon, LLC
-rocks
+// ninja : 2013-11-07 United TLD Holdco Ltd.
+ninja
 
-// SHIKSHA : 2013-11-14 Afilias Limited
-shiksha
+// nissan : 2014-03-27 NISSAN MOTOR CO., LTD.
+nissan
 
-// xn--d1acj3b : 2013-11-21 The Foundation for Network Initiatives “The Smart 
Internet”
-дети
+// norton : 2014-12-04 Symantec Corporation
+norton
 
-// budapest : 2013-11-21 Top Level Domain Holdings Limited
-budapest
+// nowruz : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+nowruz
+
+// nra : 2014-05-22 NRA Holdings Company, INC.
+nra
 
 // nrw : 2013-11-21 Minds + Machines GmbH
 nrw
 
-// VOTE : 2013-11-21 Monolith Registry LLC
-vote
+// ntt : 2014-10-31 NIPPON TELEGRAPH AND TELEPHONE CORPORATION
+ntt
 
-// fishing : 2013-11-21 Top Level Domain Holdings Limited
-fishing
+// nyc : 2014-01-23 The City of New York by and through the New York City 
Department of Information Technology & Telecommunications
+nyc
 
-// expert : 2013-11-21 Magic Pass, LLC
-expert
+// obi : 2014-09-25 OBI Group Holding SE & Co. KGaA
+obi
 
-// horse : 2013-11-21 Top Level Domain Holdings Limited
-horse
+// okinawa : 2013-12-05 BusinessRalliart Inc.
+okinawa
 
-// christmas : 2013-11-21 Uniregistry, Corp.
-christmas
+// one : 2014-11-07 One.com A/S
+one
 
-// cooking : 2013-11-21 Top Level Domain Holdings Limited
-cooking
+// ong : 2014-03-06 Public Interest Registry
+ong
 
-// xn--czru2d : 2013-11-21 Zodiac Capricorn Limited
-商城
+// onl : 2013-09-16 I-Registry Ltd.
+onl
 
-// casa : 2013-11-21 Top Level Domain Holdings Limited
-casa
+// ooo : 2014-01-09 INFIBEAM INCORPORATION LIMITED
+ooo
 
-// rich : 2013-11-21 I-REGISTRY Ltd., Niederlassung Deutschland
-rich
+// oracle : 2014-06-19 Oracle Corporation
+oracle
 
-// VOTO : 2013-11-21 Monolith Registry LLC
-voto
+// organic : 2014-03-27 Afilias Limited
+organic
 
-// tools : 2013-11-21 Pioneer North, LLC
-tools
+// osaka : 2014-09-04 Interlink Co., Ltd.
+osaka
 
-// xn--45q11c : 2013-11-21 Zodiac Scorpio Limited
-八卦
+// otsuka : 2013-10-11 Otsuka Holdings Co., Ltd.
+otsuka
 
-// praxi : 2013-12-05 Praxi S.p.A.
-praxi
+// ovh : 2014-01-16 OVH SAS
+ovh
 
-// events : 2013-12-05 Pioneer Maple, LLC
-events
+// page : 2014-12-04 Charleston Road Registry Inc.
+page
 
-// flights : 2013-12-05 Fox Station, LLC
-flights
+// panerai : 2014-11-07 Richemont DNS Inc.
+panerai
 
-// report : 2013-12-05 Binky Glen, LLC
-report
+// paris : 2014-01-30 City of Paris
+paris
+
+// pars : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+pars
 
 // partners : 2013-12-05 Magic Glen, LLC
 partners
 
-// neustar : 2013-12-05 NeuStar, Inc.
-neustar
+// parts : 2013-12-05 Sea Goodbye, LLC
+parts
 
-// rentals : 2013-12-05 Big Hollow,LLC
-rentals
+// party : 2014-09-11 Blue Sky Registry Limited
+party
 
-// catering : 2013-12-05 New Falls. LLC
-catering
+// pharmacy : 2014-06-19 National Association of Boards of Pharmacy
+pharmacy
 
-// community : 2013-12-05 Fox Orchard, LLC
-community
+// philips : 2014-11-07 Koninklijke Philips N.V.
+philips
 
-// maison : 2013-12-05 Victor Frostbite, LLC
-maison
+// photo : 2013-11-14 Uniregistry, Corp.
+photo
 
-// parts : 2013-12-05 Sea Goodbye, LLC
-parts
+// photography : 2013-09-20 Sugar Glen, LLC
+photography
 
-// cleaning : 2013-12-05 Fox Shadow, LLC
-cleaning
+// photos : 2013-10-17 Sea Corner, LLC
+photos
 
-// okinawa : 2013-12-05 BusinessRalliart inc.
-okinawa
+// physio : 2014-05-01 PhysBiz Pty Ltd
+physio
 
-// foundation : 2013-12-05 John Dale, LLC
-foundation
+// piaget : 2014-10-16 Richemont DNS Inc.
+piaget
 
-// properties : 2013-12-05 Big Pass, LLC
-properties
+// pics : 2013-11-14 Uniregistry, Corp.
+pics
 
-// vacations : 2013-12-05 Atomic Tigers, LLC
-vacations
+// pictet : 2014-06-26 Pictet Europe S.A.
+pictet
 
-// productions : 2013-12-05 Magic Birch, LLC
-productions
+// pictures : 2014-03-06 Foggy Sky, LLC
+pictures
 
-// industries : 2013-12-05 Outer House, LLC
-industries
+// pin : 2014-12-18 Amazon EU S.à r.l.
+pin
 
-// haus : 2013-12-05 Pixie Edge, LLC
-haus
+// pink : 2013-10-01 Afilias Limited
+pink
 
-// vision : 2013-12-05 Koko Station, LLC
-vision
+// pizza : 2014-06-26 Foggy Moon, LLC
+pizza
 
-// mormon : 2013-12-05 IRI Domain Management, LLC (""Applicant"")
-mormon
+// place : 2014-04-24 Snow Galley, LLC
+place
 
-// cards : 2013-12-05 Foggy Hollow, LLC
-cards
+// plumbing : 2013-09-10 Spring Tigers, LLC
+plumbing
 
-// ink : 2013-12-05 Top Level Design, LLC
-ink
+// pohl : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG
+pohl
 
-// villas : 2013-12-05 New Sky, LLC
-villas
+// poker : 2014-07-03 Afilias Domains No. 5 Limited
+poker
 
-// consulting : 2013-12-05 Pixie Station, LLC
-consulting
+// porn : 2014-10-16 ICM Registry PN LLC
+porn
 
-// cruises : 2013-12-05 Spring Way, LLC
-cruises
+// praxi : 2013-12-05 Praxi S.p.A.
+praxi
 
-// krd : 2013-12-05 KRG Department of Information Technology
-krd
+// press : 2014-04-03 DotPress Inc.
+press
 
-// xyz : 2013-12-05 XYZ.COM LLC
-xyz
+// prod : 2014-01-23 Charleston Road Registry Inc.
+prod
 
-// dating : 2013-12-05 Pine Fest, LLC
-dating
+// productions : 2013-12-05 Magic Birch, LLC
+productions
 
-// exposed : 2013-12-05 Victor Beach, LLC
-exposed
+// prof : 2014-07-24 Charleston Road Registry Inc.
+prof
 
-// condos : 2013-12-05 Pine House, LLC
-condos
+// promo : 2014-12-18 Play.PROMO Oy
+promo
 
-// eus : 2013-12-12 Puntueus Fundazioa
-eus
+// properties : 2013-12-05 Big Pass, LLC
+properties
 
-// Caravan : 2013-12-12 Caravan International, Inc.
-caravan
+// property : 2014-05-22 Uniregistry, Corp.
+property
 
-// actor : 2013-12-12 United TLD Holdco Ltd.
-actor
+// pub : 2013-12-12 United TLD Holdco Ltd.
+pub
 
-// saarland : 2013-12-12 dotSaarland GmbH
-saarland
+// qpon : 2013-11-14 dotCOOL, Inc.
+qpon
 
-// yokohama : 2013-12-12 GMO Registry, Inc.
-yokohama
+// quebec : 2013-12-19 PointQuébec Inc
+quebec
 
-// pub : 2013-12-12 United TLD Holdco Ltd.
-pub
+// racing : 2014-12-04 Premier Registry Limited
+racing
 
-// xn--p1acf : 2013-12-12 Rusnames Limited
-рус
+// read : 2014-12-18 Amazon EU S.à r.l.
+read
 
-// ren : 2013-12-12 Beijing Qianxiang Wangjing Technology Development Co., Ltd.
-ren
+// realtor : 2014-05-29 Real Estate Domains LLC
+realtor
 
-// fish : 2013-12-12 Fox Woods, LLC
-fish
+// recipes : 2013-10-17 Grand Island, LLC
+recipes
 
-// BAR : 2013-12-12 Punto 2012 Sociedad Anonima Promotora de Inversion de 
Capital Variable
-bar
+// red : 2013-11-07 Afilias Limited
+red
+
+// redstone : 2014-10-31 Redstone Haute Couture Co., Ltd.
+redstone
+
+// rehab : 2014-03-06 United TLD Holdco Ltd.
+rehab
+
+// reise : 2014-03-13 dotreise GmbH
+reise
+
+// reisen : 2014-03-06 New Cypress, LLC
+reisen
+
+// reit : 2014-09-04 National Association of Real Estate Investment Trusts, 
Inc.
+reit
+
+// ren : 2013-12-12 Beijing Qianxiang Wangjing Technology Development Co., Ltd.
+ren
 
-// DNP : 2013-12-13 Dai Nippon Printing Co., Ltd.
-dnp
+// rent : 2014-12-04 DERRent, LLC
+rent
 
-// bid : 2013-12-19 dot Bid Limited
-bid
+// rentals : 2013-12-05 Big Hollow,LLC
+rentals
 
-// supply : 2013-12-19 Half Falls, LLC
-supply
+// repair : 2013-11-07 Lone Sunset, LLC
+repair
 
-// Miami : 2013-12-19 Top Level Domain Holdings Limited
-miami
+// report : 2013-12-05 Binky Glen, LLC
+report
 
-// supplies : 2013-12-19 Atomic Fields, LLC
-supplies
+// republican : 2014-03-20 United TLD Holdco Ltd.
+republican
 
-// quebec : 2013-12-19 PointQuébec Inc
-quebec
+// rest : 2013-12-19 Punto 2012 Sociedad Anonima Promotora de Inversion de 
Capital Variable
+rest
 
-// MOSCOW : 2013-12-19 Foundation for Assistance for Internet Technologies and 
Infrastructure Development (FAITID)
-moscow
+// restaurant : 2014-07-03 Snow Avenue, LLC
+restaurant
 
-// globo : 2013-12-19 Globo Comunicação e Participações S.A
-globo
+// review : 2014-11-20 dot Review Limited
+review
 
-// AXA : 2013-12-19 AXA SA
-axa
+// reviews : 2013-09-13
+reviews
 
-// xn--80adxhks : 2013-12-19 Foundation for Assistance for Internet 
Technologies and Infrastructure Development (FAITID)
-москва
+// rich : 2013-11-21 I-Registry Ltd.
+rich
 
-// xn--czrs0t : 2013-12-19 Wild Island, LLC
-商店
+// ricoh : 2014-11-20 Ricoh Company, Ltd.
+ricoh
 
-// vodka : 2013-12-19 Top Level Domain Holdings Limited
-vodka
+// rio : 2014-02-27 Empresa Municipal de Informática SA - IPLANRIO
+rio
 
-// REST : 2013-12-19 Punto 2012 Sociedad Anonima Promotora de Inversion de 
Capital Variable
-rest
+// rip : 2014-07-10 United TLD Holdco Ltd.
+rip
 
-// frogans : 2013-12-19 OP3FT
-frogans
+// rocher : 2014-12-18 Ferrero Trading Lux S.A.
+rocher
 
-// WTC : 2013-12-19 World Trade Centers Association, Inc.
-wtc
+// rocks : 2013-11-14
+rocks
 
 // rodeo : 2013-12-19 Top Level Domain Holdings Limited
 rodeo
 
-// sohu : 2013-12-19 Sohu.com Limited
-sohu
+// room : 2014-12-18 Amazon EU S.à r.l.
+room
 
-// BEST : 2013-12-19 BestTLD Pty Ltd
-best
+// rsvp : 2014-05-08 Charleston Road Registry Inc.
+rsvp
 
-// country : 2013-12-19 Top Level Domain Holdings Limited
-country
+// ruhr : 2013-10-02 regiodot GmbH & Co. KG
+ruhr
 
-// KRED : 2013-12-19 KredTLD Pty Ltd
-kred
+// ryukyu : 2014-01-09 BusinessRalliart Inc.
+ryukyu
 
-// feedback : 2013-12-19 Top Level Spectrum, Inc.
-feedback
+// saarland : 2013-12-12 dotSaarland GmbH
+saarland
 
-// work : 2013-12-19 Top Level Domain Holdings Limited
-work
+// safe : 2014-12-18 Amazon EU S.à r.l.
+safe
 
-// luxe : 2014-01-09 Top Level Domain Holdings Limited
-luxe
+// sakura : 2014-12-18 SAKURA Internet Inc.
+sakura
 
-// ryukyu : 2014-01-09 BusinessRalliart inc.
-ryukyu
+// sale : 2014-10-16
+sale
 
-// autos : 2014-01-09 DERAutos, LLC
-autos
+// salon : 2014-12-11 Outer Orchard, LLC
+salon
 
-// homes : 2014-01-09 DERHomes, LLC
-homes
+// samsung : 2014-04-03 SAMSUNG SDS CO., LTD
+samsung
 
-// jetzt : 2014-01-09 New TLD Company AB
-jetzt
+// sandvik : 2014-11-13 Sandvik AB
+sandvik
 
-// yachts : 2014-01-09 DERYachts, LLC
-yachts
+// sandvikcoromant : 2014-11-07 Sandvik AB
+sandvikcoromant
 
-// motorcycles : 2014-01-09 DERMotorcycles, LLC
-motorcycles
+// sanofi : 2014-10-09 Sanofi
+sanofi
 
-// mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft
-mini
+// sap : 2014-03-27 SAP AG
+sap
 
-// ggee : 2014-01-09 GMO Internet, Inc.
-ggee
+// sapo : 2014-11-07 PT Comunicacoes S.A.
+sapo
 
-// beer : 2014-01-09 Top Level Domain Holdings Limited
-beer
+// sarl : 2014-07-03 Delta Orchard, LLC
+sarl
 
-// xn--1qqw23a : 2014-01-13 Guangzhou YU Wei Information Technology Co., Ltd.
-佛山
+// saxo : 2014-10-31 Saxo Bank A/S
+saxo
 
-// college : 2014-01-16 XYZ.COM LLC
-college
+// sbs : 2014-11-07 SPECIAL BROADCASTING SERVICE CORPORATION
+sbs
 
-// ovh : 2014-01-16 OVH SAS
-ovh
+// sca : 2014-03-13 SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ)
+sca
 
-// meet : 2014-01-16 Afilias Limited
-meet
+// scb : 2014-02-20 The Siam Commercial Bank Public Company Limited (\
+scb
 
-// xn--ses554g : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) 
COMPANY. HONGKONG LIMITED
-网址
+// schmidt : 2014-04-03 SALM S.A.S.
+schmidt
 
-// gop : 2014-01-16 Republican State Leadership Committee, Inc.
-gop
+// scholarships : 2014-04-24 Scholarships.com, LLC
+scholarships
 
-// blackfriday : 2014-01-16 Uniregistry, Corp.
-blackfriday
+// school : 2014-12-18 Little Galley, LLC
+school
 
-// lacaixa : 2014-01-16 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA
-lacaixa
+// schule : 2014-03-06 Outer Moon, LLC
+schule
 
-// xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES(HOLDING) 
COMPANY.HONGKONG LIMITED
-商标
+// schwarz : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG
+schwarz
 
-// vegas : 2014-01-16 Dot Vegas, Inc.
-vegas
+// science : 2014-09-11 dot Science Limited
+science
 
-// black : 2014-01-16 Afilias Limited
-black
+// scor : 2014-10-31 SCOR SE
+scor
 
-// soy : 2014-01-23 Charleston Road Registry Inc.
-soy
+// scot : 2014-01-23 Dot Scot Registry Limited
+scot
 
-// trade : 2014-01-23 Elite Registry Limited
-trade
+// seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal)
+seat
 
-// gent : 2014-01-23 COMBELL GROUP NV/SA
-gent
+// seek : 2014-12-04 Seek Limited
+seek
 
-// ing : 2014-01-23 Charleston Road Registry Inc.
-ing
+// sener : 2014-10-24 Sener Ingeniería y Sistemas, S.A.
+sener
 
-// dad : 2014-01-23 Charleston Road Registry Inc.
-dad
+// services : 2014-02-27 Fox Castle, LLC
+services
 
-// shriram : 2014-01-23 Shriram Capital Ltd.
-shriram
+// sew : 2014-07-17 SEW-EURODRIVE GmbH & Co KG
+sew
 
-// bayern : 2014-01-23 Bayern Connect GmbH
-bayern
+// sex : 2014-11-13 ICM Registry SX LLC
+sex
 
-// scot : 2014-01-23 Dot Scot Registry Limited
-scot
+// sexy : 2013-09-11 Uniregistry, Corp.
+sexy
 
-// webcam : 2014-01-23 dot Webcam Limited
-webcam
+// sharp : 2014-05-01 Sharp Corporation
+sharp
 
-// foo : 2014-01-23 Charleston Road Registry Inc.
-foo
+// shia : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+shia
 
-// eat : 2014-01-23 Charleston Road Registry Inc.
-eat
+// shiksha : 2013-11-14 Afilias Limited
+shiksha
 
-// nyc : 2014-01-23 The City of New York
-nyc
+// shoes : 2013-10-02 Binky Galley, LLC
+shoes
 
-// prod : 2014-01-23 Charleston Road Registry Inc.
-prod
+// shriram : 2014-01-23 Shriram Capital Ltd.
+shriram
 
-// how : 2014-01-23 Charleston Road Registry Inc.
-how
+// singles : 2013-08-27 Fern Madison, LLC
+singles
 
-// day : 2014-01-30 Charleston Road Registry Inc.
-day
+// sky : 2014-06-19 Sky IP International Ltd, a company incorporated in 
England and Wales, operating via its registered Swiss branch
+sky
 
-// meme : 2014-01-30 Charleston Road Registry Inc.
-meme
+// skype : 2014-12-18 Microsoft Corporation
+skype
 
-// mov : 2014-01-30 Charleston Road Registry Inc.
-mov
+// smile : 2014-12-18 Amazon EU S.à r.l.
+smile
 
-// paris : 2014-01-30 City of Paris
-paris
+// social : 2013-11-07 United TLD Holdco Ltd.
+social
 
-// boo : 2014-01-30 Charleston Road Registry Inc.
-boo
+// software : 2014-03-20
+software
 
-// new : 2014-01-30 Charleston Road Registry Inc.
-new
+// sohu : 2013-12-19 Sohu.com Limited
+sohu
 
-// ifm : 2014-01-30 ifm electronic gmbh
-ifm
+// solar : 2013-11-07 Ruby Town, LLC
+solar
 
-// life : 2014-02-06 Trixy Oaks, LLC
-life
+// solutions : 2013-11-07 Silver Cover, LLC
+solutions
 
-// archi : 2014-02-06 STARTING DOT LIMITED
-archi
+// soy : 2014-01-23 Charleston Road Registry Inc.
+soy
+
+// space : 2014-04-03 DotSpace Inc.
+space
 
-// spiegel : 2014-02-06 SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG
+// spiegel : 2014-02-05 SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG
 spiegel
 
-// brussels : 2014-02-06 DNS.be vzw
-brussels
+// spreadbetting : 2014-12-11 IG Group Holdings PLC
+spreadbetting
 
-// church : 2014-02-06 Holly Fileds, LLC
-church
+// stada : 2014-11-13 STADA Arzneimittel AG
+stada
 
-// here : 2014-02-06 Charleston Road Registry Inc.
-here
+// statoil : 2014-12-04 Statoil ASA
+statoil
 
-// dabur : 2014-02-06 Dabur India Limited
-dabur
+// stc : 2014-10-09 Saudi Telecom Company
+stc
 
-// vlaanderen : 2014-02-06 DNS.be vzw
-vlaanderen
+// stcgroup : 2014-10-09 Saudi Telecom Company
+stcgroup
 
-// cologne : 2014-02-06 NetCologne Gesellschaft für Telekommunikation mbH
-cologne
+// stockholm : 2014-12-18 Stockholms kommun
+stockholm
 
-// xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd
-手机
+// study : 2014-12-11 OPEN UNIVERSITIES AUSTRALIA PTY LTD
+study
 
-// wme : 2014-02-13 William Morris Endeavor Entertainment, LLC
-wme
+// style : 2014-12-04 Binky Moon, LLC
+style
 
-// nhk : 2014-02-13 Japan Broadcasting Corporation (NHK)
-nhk
+// supplies : 2013-12-19 Atomic Fields, LLC
+supplies
+
+// supply : 2013-12-19 Half Falls, LLC
+supply
+
+// support : 2013-10-24 Grand Orchard, LLC
+support
+
+// surf : 2014-01-09 Top Level Domain Holdings Limited
+surf
+
+// surgery : 2014-03-20 Tin Avenue, LLC
+surgery
 
 // suzuki : 2014-02-20 SUZUKI MOTOR CORPORATION
 suzuki
 
-// whoswho : 2014-02-20 Who's Who Registry
-whoswho
+// swiss : 2014-10-16 Swiss Confederation
+swiss
 
-// scb : 2014-02-20 The Siam Commercial Bank Public Company Limited ("SCB""\)
-scb
+// sydney : 2014-09-18 State of New South Wales, Department of Premier and 
Cabinet
+sydney
 
-// hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH
-hamburg
+// symantec : 2014-12-04 Symantec Corporation
+symantec
 
-// services : 2014-02-27 Fox Castle, LLC
-services
+// systems : 2013-11-07 Dash Cypress, LLC
+systems
 
-// bzh : 2014-02-27 Association www.bzh
-bzh
+// tab : 2014-12-04 Tabcorp Holdings Limited
+tab
 
-// rio : 2014-02-27 Empresa Municipal de Informática SA - IPLANRIO
-rio
+// taipei : 2014-07-10 Taipei City Government
+taipei
 
-// cash : 2014-03-07 Delta Lake, LLC
-cash
+// tatar : 2014-04-24 Limited Liability Company \
+tatar
 
-// gives : 2014-03-07 United TLD Holdco Ltd.
-gives
+// tattoo : 2013-08-30 Uniregistry, Corp.
+tattoo
 
-// hiphop : 2014-03-07 Uniregistry, Corp.
-hiphop
+// tax : 2014-03-20 Storm Orchard, LLC
+tax
 
-// degree : 2014-03-07 Puff House, LLC
-degree
+// tci : 2014-09-12 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+tci
 
-// digital : 2014-03-07 Dash Park, LLC
-digital
+// technology : 2013-09-13 Auburn Falls
+technology
 
-// rehab : 2014-03-07 United TLD Holdco Ltd.
-rehab
+// telefonica : 2014-10-16 Telefónica S.A.
+telefonica
 
-// wtf : 2014-03-07 Hidden Way, LLC
-wtf
+// temasek : 2014-08-07 Temasek Holdings (Private) Limited
+temasek
 
-// financial : 2014-03-07 Just Cover, LLC
-financial
+// tennis : 2014-12-04 Cotton Bloom, LLC
+tennis
 
-// limited : 2014-03-07 Big Fest, LLC
-limited
+// tienda : 2013-11-14 Victor Manor, LLC
+tienda
 
-// discount : 2014-03-07 Holly Hill, LLC
-discount
+// tips : 2013-09-20 Corn Willow, LLC
+tips
 
-// fail : 2014-03-07 Atomic Pipe, LLC
-fail
+// tires : 2014-11-07 Dog Edge, LLC
+tires
 
-// vet : 2014-03-07 Wild Dale, LLC
-vet
+// tirol : 2014-04-24 punkt Tirol GmbH
+tirol
 
-// ngo : 2014-03-07 Public Interest Registry
-ngo
+// today : 2013-09-20 Pearl Woods, LLC
+today
 
-// fitness : 2014-03-07 Brice Orchard, LLC
-fitness
+// tokyo : 2013-11-13 GMO Registry, Inc.
+tokyo
 
-// schule : 2014-03-07 Outer Moon, LLC
-schule
+// tools : 2013-11-21 Pioneer North, LLC
+tools
 
-// navy : 2014-03-07 United TLD Holdco Ltd.
-navy
+// top : 2014-03-20 Jiangsu Bangning Science & Technology Co.,Ltd.
+top
 
-// bio : 2014-03-07 STARTING DOT LIMITED
-bio
+// toray : 2014-12-18 Toray Industries, Inc.
+toray
 
-// ong : 2014-03-07 Public Interest Registry
-ong
+// toshiba : 2014-04-10 TOSHIBA Corporation
+toshiba
 
-// town : 2014-03-07 Koko Moon, LLC
+// town : 2014-03-06 Koko Moon, LLC
 town
 
-// toys : 2014-03-07 Pioneer Orchard, LLC
+// toys : 2014-03-06 Pioneer Orchard, LLC
 toys
 
-// army : 2014-03-07 United TLD Holdco Ltd.
-army
-
-// engineering : 2014-03-07 Romeo Canyon
-engineering
+// trade : 2014-01-23 Elite Registry Limited
+trade
 
-// capital : 2014-03-07 Delta Mill, LLC
-capital
+// trading : 2014-12-11 IG Group Holdings PLC
+trading
 
-// exchange : 2014-03-07 Spring Falls, LLC
-exchange
+// training : 2013-11-07 Wild Willow, LLC
+training
 
-// fan : 2014-03-07 Goose Glen, LLC
-fan
+// trust : 2014-10-16
+trust
 
-// market : 2014-03-07 Victor Way, LLC
-market
+// tui : 2014-07-03 TUI AG
+tui
 
-// media : 2014-03-07 Grand Glen, LLC
-media
+// tushu : 2014-12-18 Amazon EU S.à r.l.
+tushu
 
-// lease : 2014-03-07 Victor Trail, LLC
-lease
+// ubs : 2014-12-11 UBS AG
+ubs
 
-// university : 2014-03-07 Little Station, LLC
+// university : 2014-03-06 Little Station, LLC
 university
 
-// reisen : 2014-03-07 New Cypress, LLC
-reisen
+// uno : 2013-09-11 Dot Latin LLC
+uno
 
-// airforce : 2014-03-07 United TLD Holdco Ltd.
-airforce
+// uol : 2014-05-01 UBN INTERNET LTDA.
+uol
 
-// pictures : 2014-03-07 Foggy Sky, LLC
-pictures
+// vacations : 2013-12-05 Atomic Tigers, LLC
+vacations
 
-// gripe : 2014-03-07 Corn Sunset, LLC
-gripe
+// vana : 2014-12-11 Lifestyle Domain Holdings, Inc.
+vana
 
-// engineering : 2014-03-07 United TLD Holdco Ltd.
-engineering
+// vegas : 2014-01-16 Dot Vegas, Inc.
+vegas
 
-// associates : 2014-03-07 Baxter Hill, LLC
-associates
+// ventures : 2013-08-27 Binky Lake, LLC
+ventures
 
-// xn--mxtq1m : 2014-03-07 Net-Chinese Co., Ltd.
-政府
+// versicherung : 2014-03-20 dotversicherung-registry GmbH
+versicherung
 
-// williamhill : 2014-03-13 William Hill Organization Limited
-williamhill
+// vet : 2014-03-06
+vet
 
-// hiv : 2014-03-13 dotHIV gemeinnuetziger e.V.
-hiv
+// viajes : 2013-10-17 Black Madison, LLC
+viajes
 
-// sca : 2014-03-13 SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ)
-sca
+// video : 2014-10-16
+video
 
-// reise : 2014-03-13 dotreise GmbH 
-reise
+// villas : 2013-12-05 New Sky, LLC
+villas
 
-// accountants : 2014-03-20 Knob Town, LLC 
-accountants
+// virgin : 2014-09-25 Virgin Enterprises Limited
+virgin
 
-// clinic : 2014-03-20 Goose Park, LLC 
-clinic
+// vision : 2013-12-05 Koko Station, LLC
+vision
 
-// versicherung : 2014-03-20 dotversicherung-registry GmbH 
-versicherung
+// vista : 2014-09-18 Vistaprint Limited
+vista
 
-// top : 2014-03-20 Jiangsu Bangning Science & Technology Co.,Ltd. 
-top
+// vistaprint : 2014-09-18 Vistaprint Limited
+vistaprint
 
-// furniture : 2014-03-20 Lone Fields, LLC 
-furniture
+// viva : 2014-11-07 Saudi Telecom Company
+viva
 
-// dental : 2014-03-20 Tin Birch, LLC 
-dental
+// vlaanderen : 2014-02-06 DNS.be vzw
+vlaanderen
 
-// fund : 2014-03-20 John Castle, LLC 
-fund
+// vodka : 2013-12-19 Top Level Domain Holdings Limited
+vodka
 
-// creditcard : 2014-03-20 Binky Frostbite, LLC 
-creditcard
+// vote : 2013-11-21 Monolith Registry LLC
+vote
 
-// insure : 2014-03-20 Pioneer Willow, LLC 
-insure
+// voting : 2013-11-13 Valuetainment Corp.
+voting
 
-// audio : 2014-03-20 Uniregistry, Corp. 
-audio
+// voto : 2013-11-21 Monolith Registry LLC
+voto
 
-// claims : 2014-03-20 Black Corner, LLC 
-claims
+// voyage : 2013-08-27 Ruby House, LLC
+voyage
 
-// loans : 2014-03-20 June Woods, LLC 
-loans
+// wales : 2014-05-08 Nominet UK
+wales
 
-// auction : 2014-03-20 Sand Galley, LLC 
-auction
+// walter : 2014-11-13 Sandvik AB
+walter
 
-// attorney : 2014-03-20 Victor North, LLC 
-attorney
+// wang : 2013-10-24 Zodiac Leo Limited
+wang
 
-// finance : 2014-03-20 Cotton Cypress, LLC 
-finance
+// wanggou : 2014-12-18 Amazon EU S.à r.l.
+wanggou
 
-// investments : 2014-03-20 Holly Glen, LLC 
-investments
+// watch : 2013-11-14 Sand Shadow, LLC
+watch
 
-// juegos : 2014-03-20 Uniregistry, Corp. 
-juegos
+// webcam : 2014-01-23 dot Webcam Limited
+webcam
 
-// dentist : 2014-03-20 Outer Lake, LLC 
-dentist
+// website : 2014-04-03 DotWebsite Inc.
+website
 
-// lds : 2014-03-20 IRI Domain Management, LLC 
-lds
+// wed : 2013-10-01 Atgron, Inc.
+wed
 
-// lawyer : 2014-03-20 Atomic Station, LLC 
-lawyer
+// wedding : 2014-04-24 Top Level Domain Holdings Limited
+wedding
 
-// surgery : 2014-03-20 Tin Avenue, LLC 
-surgery
+// whoswho : 2014-02-20 Who's Who Registry
+whoswho
 
-// gratis : 2014-03-20 Pioneer Tigers, LLC 
-gratis
+// wien : 2013-10-28 punkt.wien GmbH
+wien
 
-// software : 2014-03-20 Over Birch, LLC 
-software
+// wiki : 2013-11-07 Top Level Design, LLC
+wiki
 
-// mortgage : 2014-03-20 Outer Gardens, LLC 
-mortgage
+// williamhill : 2014-03-13 William Hill Organization Limited
+williamhill
 
-// republican : 2014-03-20 United TLD Holdco Ltd. 
-republican
+// win : 2014-11-20 First Registry Limited
+win
 
-// credit : 2014-03-20 Snow Shadow, LLC 
-credit
+// windows : 2014-12-18 Microsoft Corporation
+windows
 
-// tax : 2014-03-20 Storm Orchard, LLC 
-tax
+// wme : 2014-02-13 William Morris Endeavor Entertainment, LLC
+wme
 
-// africa : 2014-03-24 ZA Central Registry NPC trading as Registry.Africa 
-africa
+// work : 2013-12-19 Top Level Domain Holdings Limited
+work
 
-// joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry 
-joburg
+// works : 2013-11-14 Little Dynamite, LLC
+works
 
-// durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry 
-durban
+// world : 2014-06-12 Bitter Fields, LLC
+world
 
-// capetown : 2014-03-24 ZA Central Registry NPC trading as ZA Central 
Registry 
-capetown
+// wtc : 2013-12-19 World Trade Centers Association, Inc.
+wtc
 
-// sap : 2014-03-27 SAP AG 
-sap
+// wtf : 2014-03-06 Hidden Way, LLC
+wtf
 
-// datsun : 2014-03-27 NISSAN MOTOR CO., LTD. 
-datsun
+// xbox : 2014-12-18 Microsoft Corporation
+xbox
 
-// infiniti : 2014-03-27 NISSAN MOTOR CO., LTD. 
-infiniti
+// xerox : 2014-10-24 Xerox DNHC LLC
+xerox
 
-// firmdale : 2014-03-27 Firmdale Holdings Limited 
-firmdale
+// xin : 2014-12-11 Elegant Leader Limited
+xin
 
-// organic : 2014-03-27 Afilias Limited 
-organic
+// xn--1qqw23a : 2014-01-09 Guangzhou YU Wei Information Technology Co., Ltd.
+佛山
 
-// nissan : 2014-03-27 NISSAN MOTOR CO., LTD. 
-nissan
+// xn--30rr7y : 2014-06-12 Excellent First Limited
+慈善
 
-// website : 2014-04-03 DotWebsite Inc. 
-website
+// xn--3bst00m : 2013-09-13 Eagle Horizon Limited
+集团
 
-// space : 2014-04-03 DotSpace Inc. 
-space
+// xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED
+在线
 
-// schmidt : 2014-04-03 SALM S.A.S. 
-schmidt
+// xn--45q11c : 2013-11-21 Zodiac Scorpio Limited
+八卦
 
-// cuisinella : 2014-04-03 SALM S.A.S. 
-cuisinella
+// xn--4gbrim : 2013-10-04 Suhub Electronic Establishment
+موقع
 
-// samsung : 2014-04-03 SAMSUNG SDS CO., LTD 
-samsung
+// xn--55qw42g : 2013-11-08 China Organizational Name Administration Center
+公益
 
-// crs : 2014-04-03 Federated Co operatives Limited 
-crs
+// xn--55qx5d : 2013-11-14 Computer Network Information Center of Chinese 
Academy of Sciences (China Internet Network Information Center)
+公司
 
-// doosan : 2014-04-03 Doosan Corporation 
-doosan
+// xn--6frz82g : 2013-09-23 Afilias Limited
+移动
 
-// press : 2014-04-03 DotPress Inc. 
-press
+// xn--6qq986b3xl : 2013-09-13 Tycoon Treasure Limited
+我爱你
 
-// emerck : 2014-04-03 Merck KGaA 
-emerck
+// xn--80adxhks : 2013-12-19 Foundation for Assistance for Internet 
Technologies and Infrastructure Development (FAITID)
+москва
 
-// erni : 2014-04-03 ERNI Group Holding AG 
-erni
+// xn--80asehdb : 2013-07-14 CORE Association
+онлайн
 
-// direct : 2014-04-10 Half Trail, LLC 
-direct
+// xn--80aswg : 2013-07-14 CORE Association
+сайт
 
-// yandex : 2014-04-10 YANDEX, LLC 
-yandex
+// xn--9et52u : 2014-06-12 RISE VICTORY LIMITED
+时尚
 
-// lotto : 2014-04-10 Afilias Limited 
-lotto
+// xn--b4w605ferd : 2014-08-07 Temasek Holdings (Private) Limited
+淡马锡
 
-// toshiba : 2014-04-10 TOSHIBA Corporation 
-toshiba
+// xn--c1avg : 2013-11-14 Public Interest Registry
+орг
 
-// bauhaus : 2014-04-17 Werkhaus GmbH 
-bauhaus
+// xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD
+삼성
 
-// host : 2014-04-17 DotHost Inc. 
-host
+// xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES(HOLDING) 
COMPANY.HONGKONG LIMITED
+商标
 
-// ltda : 2014-04-17 DOMAIN ROBOT SERVICOS DE HOSPEDAGEM NA INTERNET LTDA 
-ltda
+// xn--czrs0t : 2013-12-19 Wild Island, LLC
+商店
 
-// global : 2014-04-17 Dot GLOBAL AS 
-global
+// xn--czru2d : 2013-11-21 Zodiac Capricorn Limited
+商城
 
-// abogado : 2014-04-24 Top Level Domain Holdings Limited 
-abogado
+// xn--d1acj3b : 2013-11-20 The Foundation for Network Initiatives “The Smart 
Internet”
+дети
 
-// place : 2014-04-24 Snow Galley, LLC 
-place
+// xn--eckvdtc9d : 2014-12-18 Amazon EU S.à r.l.
+ポイント
 
-// tirol : 2014-04-24 punkt Tirol GmbH 
-tirol
+// xn--efvy88h : 2014-08-22 Xinhua News Agency Guangdong Branch 新华通讯社广东分社
+新闻
 
-// gmx : 2014-04-24 1&1 Mail & Media GmbH 
-gmx
+// xn--fiq228c5hs : 2013-09-08 TLD REGISTRY LIMITED
+中文网
 
-// tatar : 2014-04-24 Limited Liability Company "Coordination Center of 
Regional Domain of Tatarstan Republic" 
-tatar
+// xn--fiq64b : 2013-10-14 CITIC Group Corporation
+中信
 
-// scholarships : 2014-04-24 Scholarships.com, LLC 
-scholarships
+// xn--fjq720a : 2014-05-22 Will Bloom, LLC
+娱乐
 
-// eurovision : 2014-04-24 European Broadcasting Union (EBU) 
-eurovision
+// xn--flw351e : 2014-07-31 Charleston Road Registry Inc.
+谷歌
 
-// wedding : 2014-04-24 Top Level Domain Holdings Limited 
-wedding
+// xn--hxt814e : 2014-05-15 Zodiac Libra Limited
+网店
 
-// active : 2014-05-01 The Active Network, Inc 
-active
+// xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry
+संगठन
 
-// madrid : 2014-05-01 Comunidad de Madrid 
-madrid
+// xn--imr513n : 2014-12-11 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) 
COMPANY. HONGKONG LIMITED
+餐厅
 
-// youtube : 2014-05-01 Charleston Road Registry Inc. 
-youtube
+// xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese 
Academy of Sciences (China Internet Network Information Center)
+网络
 
-// sharp : 2014-05-01 Sharp Corporation 
-sharp
+// xn--kcrx77d1x4a : 2014-11-07 Koninklijke Philips N.V.
+飞利浦
 
-// uol : 2014-05-01 UBN INTERNET LTDA. 
-uol
+// xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd
+手机
 
-// physio : 2014-05-01 PhysBiz Pty Ltd 
-physio
+// xn--mgba3a3ejt : 2014-11-20 Aramco Services Company
+ارامكو
 
-// gmail : 2014-05-01 Charleston Road Registry Inc. 
-gmail
+// xn--mgbab2bd : 2013-10-31 CORE Association
+بازار
 
-// channel : 2014-05-08 Charleston Road Registry Inc. 
-channel
+// xn--mgbb9fbpob : 2014-12-18 GreenTech Consultancy Company W.L.L.
+موبايلي
 
-// fly : 2014-05-08 Charleston Road Registry Inc. 
-fly
+// xn--mgbt3dhd : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. 
Sti.
+همراه
 
-// zip : 2014-05-08 Charleston Road Registry Inc. 
-zip
+// xn--mxtq1m : 2014-03-06 Net-Chinese Co., Ltd.
+政府
 
-// esq : 2014-05-08 Charleston Road Registry Inc. 
-esq
+// xn--ngbc5azd : 2013-07-13 International Domain Registry Pty. Ltd.
+شبكة
 
-// rsvp : 2014-05-08 Charleston Road Registry Inc. 
-rsvp
+// xn--ngbe9e0a : 2014-12-04 Kuwait Finance House
+بيتك
 
-// wales : 2014-05-08 Nominet UK 
-wales
+// xn--nqv7f : 2013-11-14 Public Interest Registry
+机构
 
-// cymru : 2014-05-08 Nominet UK 
-cymru
+// xn--nqv7fs00ema : 2013-11-14 Public Interest Registry
+组织机构
 
-// green : 2014-05-08 Afilias Limited 
-green
+// xn--nyqy26a : 2014-11-07 Stable Tone Limited
+健康
 
-// lgbt : 2014-05-08 Afilias Limited 
-lgbt
+// xn--p1acf : 2013-12-12 Rusnames Limited
+рус
 
-// xn--hxt814e : 2014-05-15 Zodiac Libra Limited 
-网店
+// xn--q9jyb4c : 2013-09-17 Charleston Road Registry Inc.
+みんな
 
-// cancerresearch : 2014-05-15 Australian Cancer Research Foundation 
-cancerresearch
+// xn--qcka1pmc : 2014-07-31 Charleston Road Registry Inc.
+グーグル
 
-// everbank : 2014-05-15 EverBank 
-everbank
+// xn--rhqv96g : 2013-09-11 Stable Tone Limited
+世界
 
-// frl : 2014-05-15 FRLregistry B.V. 
-frl
+// xn--ses554g : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) 
COMPANY. HONGKONG LIMITED
+网址
 
-// property : 2014-05-22 Uniregistry, Corp. 
-property
+// xn--unup4y : 2013-07-14 Spring Fields, LLC
+游戏
 
-// forsale : 2014-05-22 Sea Oaks, LLC 
-forsale
+// xn--vermgensberater-ctb : 2014-06-23 Deutsche Vermögensberatung 
Aktiengesellschaft DVAG
+vermögensberater
 
-// seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal) 
-seat
+// xn--vermgensberatung-pwb : 2014-06-23 Deutsche Vermögensberatung 
Aktiengesellschaft DVAG
+vermögensberatung
 
-// deals : 2014-05-22 Sand Sunset, LLC 
-deals
+// xn--vhquv : 2013-08-27 Dash McCook, LLC
+企业
 
-// nra : 2014-05-22 NRA Holdings Company, INC. 
-nra
+// xn--vuq861b : 2014-10-16 Beijing Tele-info Network Technology Co., Ltd.
+信息
 
-// xn--fjq720a : 2014-05-22 Will Bloom, LLC 
-娱乐
+// xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd.
+广东
 
-// realtor : 2014-05-29 Real Estate Domains LLC 
-realtor
+// xn--zfr164b : 2013-11-08 China Organizational Name Administration Center
+政务
 
-// bnpparibas : 2014-05-29 BNP Paribas 
-bnpparibas
+// xyz : 2013-12-05 XYZ.COM LLC
+xyz
 
-// melbourne : 2014-05-29 The Crown in right of the State of Victoria, 
represented by its Department of State Development, Business and Innovation 
-melbourne
+// yachts : 2014-01-09 DERYachts, LLC
+yachts
 
-// hosting : 2014-05-29 Uniregistry, Corp. 
-hosting
+// yamaxun : 2014-12-18 Amazon EU S.à r.l.
+yamaxun
+
+// yandex : 2014-04-10 YANDEX, LLC
+yandex
 
-// yoga : 2014-05-29 Top Level Domain Holdings Limited 
+// yodobashi : 2014-11-20 YODOBASHI CAMERA CO.,LTD.
+yodobashi
+
+// yoga : 2014-05-29 Top Level Domain Holdings Limited
 yoga
 
-// city : 2014-05-29 Snow Sky, LLC 
-city
+// yokohama : 2013-12-12 GMO Registry, Inc.
+yokohama
 
-// bond : 2014-06-05 Bond University Limited 
-bond
+// youtube : 2014-05-01 Charleston Road Registry Inc.
+youtube
 
-// click : 2014-06-05 Uniregistry, Corp. 
-click
+// zara : 2014-11-07 Industria de Diseño Textil, S.A. (INDITEX, S.A.)
+zara
 
-// cern : 2014-06-05 European Organization for Nuclear Research ("CERN") 
-cern
+// zero : 2014-12-18 Amazon EU S.à r.l.
+zero
+
+// zip : 2014-05-08 Charleston Road Registry Inc.
+zip
+
+// zone : 2013-11-14 Outer Falls, LLC
+zone
+
+// zuerich : 2014-11-07 Kanton Zürich (Canton of Zurich)
+zuerich
 
 // ===END ICANN DOMAINS===
 // ===BEGIN PRIVATE DOMAINS===
@@ -7996,7 +8956,7 @@ cern
 cloudfront.net
 
 // Amazon Elastic Compute Cloud: https://aws.amazon.com/ec2/
-// Submitted by Osman Surkatty <address@hidden> 2014-05-20
+// Submitted by Osman Surkatty <address@hidden> 2014-12-16
 ap-northeast-1.compute.amazonaws.com
 ap-southeast-1.compute.amazonaws.com
 ap-southeast-2.compute.amazonaws.com
@@ -8005,6 +8965,7 @@ compute.amazonaws.cn
 compute.amazonaws.com
 compute-1.amazonaws.com
 eu-west-1.compute.amazonaws.com
+eu-central-1.compute.amazonaws.com
 sa-east-1.compute.amazonaws.com
 us-east-1.amazonaws.com
 us-gov-west-1.compute.amazonaws.com
@@ -8414,6 +9375,10 @@ global.prod.fastly.net
 // Submitted by Chris Raynor <address@hidden> 2014-01-21
 firebaseapp.com
 
+// Flynn : https://flynn.io
+// Submitted by Jonathan Rudenberg <address@hidden> 2014-07-12
+flynnhub.com
+
 // GitHub, Inc.
 // Submitted by Ben Toews <address@hidden> 2014-02-06
 github.io
@@ -8424,8 +9389,9 @@ githubusercontent.com
 ro.com
 
 // Google, Inc.
-// Submitted by Eduardo Vela <address@hidden> 2012-10-24
+// Submitted by Eduardo Vela <address@hidden> 2014-12-19
 appspot.com
+blogspot.ae
 blogspot.be
 blogspot.bj
 blogspot.ca
@@ -8440,6 +9406,7 @@ blogspot.com.ar
 blogspot.com.au
 blogspot.com.br
 blogspot.com.es
+blogspot.com.tr
 blogspot.cv
 blogspot.cz
 blogspot.de
@@ -8461,6 +9428,7 @@ blogspot.no
 blogspot.pt
 blogspot.re
 blogspot.ro
+blogspot.ru
 blogspot.se
 blogspot.sg
 blogspot.sk
@@ -8469,6 +9437,7 @@ blogspot.tw
 codespot.com
 googleapis.com
 googlecode.com
+pagespeedmobilizer.com
 withgoogle.com
 
 // Heroku : https://www.heroku.com/
@@ -8513,14 +9482,44 @@ operaunite.com
 // Submitted by Duarte Santos <address@hidden> 2014-03-11
 outsystemscloud.com
 
+// .pl domains (grandfathered)
+art.pl
+gliwice.pl
+krakow.pl
+poznan.pl
+wroc.pl
+zakopane.pl
+
 // Red Hat, Inc. OpenShift : https://openshift.redhat.com/
 // Submitted by Tim Kramer <address@hidden> 2012-10-24
 rhcloud.com
 
+// GDS : 
https://www.gov.uk/service-manual/operations/operating-servicegovuk-subdomains
+// Submitted by David Illsley <address@hidden> 2014-08-28
+service.gov.uk
+
 // priv.at : http://www.nic.priv.at/
 // Submitted by registry <address@hidden> 2008-06-09
 priv.at
 
+// TASK geographical domains (www.task.gda.pl/uslugi/dns)
+gda.pl
+gdansk.pl
+gdynia.pl
+med.pl
+sopot.pl
+
+// UDR Limited : http://www.udr.hk.com
+// Submitted by registry <address@hidden> 2014-11-07
+hk.com
+hk.org
+ltd.hk
+inc.hk
+
+// Yola : https://www.yola.com/
+// Submitted by Stefano Rivera <address@hidden> 2014-07-09
+yolasite.com
+
 // ZaNiC : http://www.za.net/
 // Submitted by registry <address@hidden> 2009-10-03
 za.net
diff --git a/etc/refcards/Makefile b/etc/refcards/Makefile
index 6bfa362..11c4ca8 100644
--- a/etc/refcards/Makefile
+++ b/etc/refcards/Makefile
@@ -1,6 +1,6 @@
 ### Makefile for Emacs refcards
 
-## Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+## Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 #
diff --git a/etc/refcards/README b/etc/refcards/README
index 99eec9b..57069ad 100644
--- a/etc/refcards/README
+++ b/etc/refcards/README
@@ -1,4 +1,4 @@
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
@@ -32,7 +32,7 @@ it is reproduced here for convenience.
 
 File: gnus-logo.eps, gnus-logo.pdf
   Author: Luis Fernandes <address@hidden>
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
   License: GNU General Public License version 3 or later (see COPYING)
 
 
diff --git a/etc/refcards/calccard.tex b/etc/refcards/calccard.tex
index 03bc37d..828c0dd 100644
--- a/etc/refcards/calccard.tex
+++ b/etc/refcards/calccard.tex
@@ -20,7 +20,7 @@
 % Typical command to format:  tex calccard.tex
 % Typical command to print (3 cols):  dvips -t landscape calccard.dvi
 
-% Copyright (C) 1987, 1992, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1987, 1992, 2001-2015 Free Software Foundation, Inc.
 
 % This file is part of GNU Emacs.
 
diff --git a/etc/refcards/cs-dired-ref.tex b/etc/refcards/cs-dired-ref.tex
index 0663bf2..29a9b09 100644
--- a/etc/refcards/cs-dired-ref.tex
+++ b/etc/refcards/cs-dired-ref.tex
@@ -1,9 +1,9 @@
-% Reference Card for Dired -*- coding: iso-latin-2 -*-
+% Reference Card for Dired
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % Author: Evgeny Roubinchtein <address@hidden>
-% Czech translation: Pavel Jan�k <address@hidden>, March 2001
+% Czech translation: Pavel Janík <address@hidden>, March 2001
 
 % This file is part of GNU Emacs.
 
@@ -31,11 +31,6 @@
 % Czech hyphenation rules applied
 \chyph
 
-% Without this, pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
-% aborts with: "! UTF-8 INPUT IS CORRUPTED !
-% May be you are using another input encoding"
-\input utf8off
-
 % This file can be printed with 1, 2, or 3 columns per page.
 % Specify how many you want here.
 \newcount\columnsperpage
@@ -60,7 +55,7 @@
 \centerline{For GNU Emacs version \versionemacs}
 \centerline{Originally written May 2000 by Evgeny Roubinchtein,}
 \centerline{using refcard layout designed by Stephen Gildea.}
-\centerline{Translated by Pavel Jan�k.}
+\centerline{Translated by Pavel Janík.}
 
 Permission is granted to make and distribute copies of
 this card provided the copyright notice and this permission notice
@@ -252,10 +247,10 @@ For copies of the GNU Emacs manual, see:
 %**end of header
 
 
-\title{Referen�n� karta pro Dired}
+\title{Referenční karta pro Dired}
 
-\centerline{(ur�eno pro Dired v GNU Emacsu \versionemacs)}
-\centerline{P��kazy ozna�en� \dx{} vy�aduj� dired-x}
+\centerline{(určeno pro Dired v GNU Emacsu \versionemacs)}
+\centerline{Příkazy označené \dx{} vyžadují dired-x}
 
 % trim this down to fit everything on one page
 % \section{General}
@@ -284,119 +279,119 @@ For copies of the GNU Emacs manual, see:
 % When editing several directories in one buffer, each directory acts as a
 % page, so C-x [ and C-x ] can be used to move between directories.
 
-\section{Spu�t�n� a ukon�en� Dired}
+\section{Spuštění a ukončení Dired}
 
-\key{spu�t�n� dired}{C-x d}
-\key{spu�t�n� dired v adres��i s aktu�ln�m souborem}{C-x C-j \dx}
-\key{ukon�en� dired}{q}
+\key{spuštění dired}{C-x d}
+\key{spuštění dired v adresáři s aktuálním souborem}{C-x C-j \dx}
+\key{ukončení dired}{q}
 
-\section{P��kazy pro p�esuny}
+\section{Příkazy pro přesuny}
 
-\key{zp�t na p�edchoz� ��dku}{p}
-\key{vp�ed na n�sleduj�c� ��dku}{n}
-\key{nahoru na p�edchoz� adres��}{<}
-\key{dol� na n�sleduj�c� adres��}{>}
-\key{na dal�� ozna�en� soubor}{M-\}}
-\key{na p�edchoz� ozna�en� soubor}{M-\{}
-\key{zp�t na p�edchoz� podadres��}{M-C-p}
-\key{vp�ed na dal�� podadres��}{M-C-n}
-\key{na nad�azen� adres��}{^}
-\key{jdi na prvn� podadres��}{M-C-d}
+\key{zpět na předchozí řádku}{p}
+\key{vpřed na následující řádku}{n}
+\key{nahoru na předchozí adresář}{<}
+\key{dolů na následující adresář}{>}
+\key{na další označený soubor}{M-\}}
+\key{na předchozí označený soubor}{M-\{}
+\key{zpět na předchozí podadresář}{M-C-p}
+\key{vpřed na další podadresář}{M-C-n}
+\key{na nadřazený adresář}{^}
+\key{jdi na první podadresář}{M-C-d}
 
-\section{P��kazy pomoc� my�i}
-\metax{otev�i soubor}{Mouse_Button_2}
+\section{Příkazy pomocí myši}
+\metax{otevři soubor}{Mouse_Button_2}
 \metax{zobraz menu}{Control-Mouse_Button_3}
 
-\section{Okam�it� akce nad soubory}
-
-\key{otev�i aktu�ln� soubor}{f}
-\key{otev�i aktu�ln� soubor pouze pro �ten�}{v}
-\key{otev�i aktu�ln� soubor v jin�m okn�}{o}
-%%\key{otev�i aktu�ln� soubor v jin�m r�mci}{w}
-%%\key{zobraz aktu�ln� soubor}{C-u o}
-\key{vytvo� nov� podadres��}{+}
-\key{porovnej soubor pod kurzorem s ozna�en�m}{=}
-
-\section{Zna�en� a odzna�en� soubor�}
-
-\key{ozna� soubor nebo podadres�� pro dal�� p��kazy}{m}
-\key{odzna� soubor nebo soubory podadres��e}{u}
-\key{zru� ozna�en� v�ech soubor� v bufferu}{M-delete}
-\key{ozna� soubory se zadanou p��ponou}{* .}
-\key{ozna� v�echny adres��e}{* /}
-\key{ozna� v�echny symbolick� odkazy}{* @}
-\key{ozna� v�echny spustiteln� soubory}{* *}
-\key{invertuj ozna�en�}{* t}
-\key{ozna� v�echny soubory v aktu�ln�m podadres��i}{* s}
-\key{ozna� soubory vyhovuj�c� regul�rn�mu v�razu}{* \%}
-\key{zm�� zna�ku na jin� p�smeno}{* c}
-\key{ozna� soubory, pro kter� elispov� v�raz vrac� t}{* ( \dx}
+\section{Okamžité akce nad soubory}
+
+\key{otevři aktuální soubor}{f}
+\key{otevři aktuální soubor pouze pro čtení}{v}
+\key{otevři aktuální soubor v jiném okně}{o}
+%%\key{otevři aktuální soubor v jiném rámci}{w}
+%%\key{zobraz aktuální soubor}{C-u o}
+\key{vytvoř nový podadresář}{+}
+\key{porovnej soubor pod kurzorem s označeným}{=}
+
+\section{Značení a odznačení souborů}
+
+\key{označ soubor nebo podadresář pro další příkazy}{m}
+\key{odznač soubor nebo soubory podadresáře}{u}
+\key{zruš označení všech souborů v bufferu}{M-delete}
+\key{označ soubory se zadanou příponou}{* .}
+\key{označ všechny adresáře}{* /}
+\key{označ všechny symbolické odkazy}{* @}
+\key{označ všechny spustitelné soubory}{* *}
+\key{invertuj označení}{* t}
+\key{označ všechny soubory v aktuálním podadresáři}{* s}
+\key{označ soubory vyhovující regulárnímu výrazu}{* \%}
+\key{změň značku na jiné písmeno}{* c}
+\key{označ soubory, pro které elispový výraz vrací t}{* ( \dx}
 
 \section{Modifikace Dired bufferu}
 
-\key{vlo� do tohoto bufferu podadres��}{i}
-\key{odstra� ozna�en� soubory z bufferu}{k}
-\key{odstra� z bufferu v�pis podadres��e}{C-u k}
-\key{znovu na�ti adres��e (zna�ky se zachovaj�)}{g}
-\key{p�epni t��d�n� adres��e podle jm�na/data}{s}
-\key{uprav volby p��kazu ls}{C-u s}
-\key{obnov zna�ky, skryt� ��dky apod.}{C-_}
-\key{skryj v�echny podadres��e}{M-\$}
-\key{skryj nebo odkryj v�echny podadres��e}{\$}
-
-\section{P��kazy nad ozna�en�mi soubory}
-
-\key{kop�ruj soubor(y)}{C}
-\key{p�ejmenuj soubor nebo p�esu� soubory}{R}
-\key{zm�� vlastn�ka souboru(�)}{O}
-\key{zm�� skupinu souboru(�)}{G}
-\key{zm�� p��stupov� pr�va souboru(�)}{M}
+\key{vlož do tohoto bufferu podadresář}{i}
+\key{odstraň označené soubory z bufferu}{k}
+\key{odstraň z bufferu výpis podadresáře}{C-u k}
+\key{znovu načti adresáře (značky se zachovají)}{g}
+\key{přepni třídění adresáře podle jména/data}{s}
+\key{uprav volby příkazu ls}{C-u s}
+\key{obnov značky, skryté řádky apod.}{C-_}
+\key{skryj všechny podadresáře}{M-\$}
+\key{skryj nebo odkryj všechny podadresáře}{\$}
+
+\section{Příkazy nad označenými soubory}
+
+\key{kopíruj soubor(y)}{C}
+\key{přejmenuj soubor nebo přesuň soubory}{R}
+\key{změň vlastníka souboru(ů)}{O}
+\key{změň skupinu souboru(ů)}{G}
+\key{změň přístupová práva souboru(ů)}{M}
 \key{vytiskni soubor(y)}{P}
-\key{zm�� n�zev souboru(�) na mal� p�smena}{\% l}
-\key{zm�� n�zev souboru(�) na velk� p�smena}{\% u}
-\key{sma� ozna�en� soubory}{D}
-%%\key{prove� uuencode nebo uudecode souboru(�)}{U}
+\key{změň název souboru(ů) na malá písmena}{\% l}
+\key{změň název souboru(ů) na velká písmena}{\% u}
+\key{smaž označené soubory}{D}
+%%\key{proveď uuencode nebo uudecode souboru(ů)}{U}
 \key{zkomprimuj nebo dekomprimuj soubor(y)}{Z}
-\key{spus� info na soubor}{I \dx}
-\key{vytvo� symbolick�(�) odkaz(y)}{S}
-\key{vytvo� relativn� symbolick� odkazy}{Y}
-\key{vytvo� pevn� odkaz}{H}
-\key{prohledej soubory na regul�rn� v�raz}{A}
-\key{nahra� regul�rn� v�razy}{Q}
-\key{p�elo� soubory (byte-compile)}{B}
-\key{na�ti soubory (load-file)}{L}
-\key{spus� p��kaz na soubor(y)}{!}
-
-\section{Ozna�en� soubor� pro smaz�n�}
-\leftline{\bf Odzna�uj�c� p��kazy ma�ou zna�ku pro smaz�n�}
-\key{ozna� soubor pro smaz�n�}{d}
-%%\key{odstra� zna�ku pro smaz�n�}{delete}
-\key{ozna� v�echny z�lohy (soubory kon��c� na \~{})}{\~{}}
-\key{ozna� v�echny z�lohy (auto-save)}{\#}
-\key{ozna� r�zn� do�asn� soubory}{\% \&}
-\key{ozna� ��slovan� z�lohy (kon��c� na .\~{}1\~{} apod.)}{.}
-\key{prove� v�maz soubor� ozna�en�ch ke smaz�n�}{x}
-\key{ozna� soubory vyhovuj�c� regul�rn�mu v�razu}{\% d}
-
-\section{P��kazy s regul�rn�mi v�razy}
-
-\key{ozna� soubory vyhovuj�c� regul�rn�mu v�razu}{\% m}
-\key{kop�ruj ozna�en� soubory obsahuj�c� regexp}{\% C}
-\key{p�ejmenuj ozna�en� soubory vyhovuj�c� regexp}{\% R}
-\key{pevn� odkaz}{\% H}
-\key{symbolick� odkaz}{\% S}
-\key{symbolick� odkaz s relativn� cestou}{\% Y}
-\key{ozna� pro smaz�n�}{\% d}
+\key{spusť info na soubor}{I \dx}
+\key{vytvoř symbolický(é) odkaz(y)}{S}
+\key{vytvoř relativní symbolické odkazy}{Y}
+\key{vytvoř pevný odkaz}{H}
+\key{prohledej soubory na regulární výraz}{A}
+\key{nahraď regulární výrazy}{Q}
+\key{přelož soubory (byte-compile)}{B}
+\key{načti soubory (load-file)}{L}
+\key{spusť příkaz na soubor(y)}{!}
+
+\section{Označení souborů pro smazání}
+\leftline{\bf Odznačující příkazy mažou značku pro smazání}
+\key{označ soubor pro smazání}{d}
+%%\key{odstraň značku pro smazání}{delete}
+\key{označ všechny zálohy (soubory končící na \~{})}{\~{}}
+\key{označ všechny zálohy (auto-save)}{\#}
+\key{označ různé dočasné soubory}{\% \&}
+\key{označ číslované zálohy (končící na .\~{}1\~{} apod.)}{.}
+\key{proveď výmaz souborů označených ke smazání}{x}
+\key{označ soubory vyhovující regulárnímu výrazu}{\% d}
+
+\section{Příkazy s regulárními výrazy}
+
+\key{označ soubory vyhovující regulárnímu výrazu}{\% m}
+\key{kopíruj označené soubory obsahující regexp}{\% C}
+\key{přejmenuj označené soubory vyhovující regexp}{\% R}
+\key{pevný odkaz}{\% H}
+\key{symbolický odkaz}{\% S}
+\key{symbolický odkaz s relativní cestou}{\% Y}
+\key{označ pro smazání}{\% d}
 
 \section{Dired a Find}
-\metax{otev�i v dired soubory vyhovuj�c� vzorku}{M-x find-name-dired}
-\metax{otev�i v dired soubory obsahuj�c� vzorek}{M-x find-grep-dired}
-\metax{otev�i v dired soubory podle v�stupu \kbd{find}}{M-x find-dired}
+\metax{otevři v dired soubory vyhovující vzorku}{M-x find-name-dired}
+\metax{otevři v dired soubory obsahující vzorek}{M-x find-grep-dired}
+\metax{otevři v dired soubory podle výstupu \kbd{find}}{M-x find-dired}
 
-\section{N�pov�da}
+\section{Nápověda}
 
-\key{zobraz n�pov�du}{h}
-\key{p�ehled p��kaz� dired}{?}
+\key{zobraz nápovědu}{h}
+\key{přehled příkazů dired}{?}
 
 \copyrightnotice
 
diff --git a/etc/refcards/cs-refcard.tex b/etc/refcards/cs-refcard.tex
index 1da9b25..29ea258 100644
--- a/etc/refcards/cs-refcard.tex
+++ b/etc/refcards/cs-refcard.tex
@@ -1,12 +1,12 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996-1997, 2001-2014 Free Software
+% Copyright (C) 1987, 1993, 1996-1997, 2001-2015 Free Software
 % Foundation, Inc.
 
 % Author: Stephen Gildea <address@hidden>
 % Czech translation: Jan Buchal <address@hidden>, January 1999
 %      Milan Zamazal <address@hidden>, August 1999
-%      Pavel Jan�k <address@hidden>, November 2000 (Emacs 21)
+%      Pavel Janík <address@hidden>, November 2000 (Emacs 21)
 
 % This file is part of GNU Emacs.
 
@@ -49,11 +49,6 @@
 % Czech hyphenation rules applied
 \chyph
 
-% Without this, pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
-% aborts with: "! UTF-8 INPUT IS CORRUPTED !
-% May be you are using another input encoding"
-\input utf8off
-
 % This file can be printed with 1, 2, or 3 columns per page.
 % Specify how many you want here.
 \newcount\columnsperpage
@@ -77,7 +72,7 @@
 \centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.}
 \centerline{For GNU Emacs version \versionemacs}
 \centerline{Designed by Stephen Gildea}
-\centerline{Translated by Jan Buchal, Milan Zamazal, Pavel Jan�k}
+\centerline{Translated by Jan Buchal, Milan Zamazal, Pavel Janík}
 
 Permission is granted to make and distribute copies of
 this card provided the copyright notice and this permission notice
@@ -264,68 +259,68 @@ For copies of the GNU Emacs manual, see:
 %**end of header
 
 
-\title{GNU Emacs -- Referen�n� karta}
+\title{GNU Emacs -- Referenční karta}
 
 \centerline{(pro verzi \versionemacs)}
 
-\section{Spu�t�n� Emacsu}
+\section{Spuštění Emacsu}
 
-Pro vstup do GNU~Emacsu~\versionemacs{} napi�te jeho jm�no: \kbd{emacs}
+Pro vstup do GNU~Emacsu~\versionemacs{} napište jeho jméno: \kbd{emacs}
 
-Jak na��tat a editovat soubory se dozv�te n�e v~odd�le Soubory.
+Jak načítat a editovat soubory se dozvíte níže v~oddíle Soubory.
 
 
-\section{Opu�t�n� Emacsu}
+\section{Opuštění Emacsu}
 
-\key{pozastaven� Emacsu (ikonizace v~X11)}{C-z}
-\key{definitivn� odchod z~Emacsu}{C-x C-c}
+\key{pozastavení Emacsu (ikonizace v~X11)}{C-z}
+\key{definitivní odchod z~Emacsu}{C-x C-c}
 
 \section{Soubory}
 
-\key{{\bf na��st} souboru do Emacsu}{C-x C-f}
-\key{{\bf ulo�it} soubor zp�t na disk}{C-x C-s}
-\key{ulo�it {\bf v�echny} soubory}{C-x s}
-\key{{\bf vlo�it} obsahu jin�ho souboru do bufferu}{C-x i}
-\key{zam�nit tento soubor jin�m souborem}{C-x C-v}
-\key{zapsat buffer do zadan�ho souboru}{C-x C-w}
-\key{vlo�it do syst�mu spr�vy verz�}{C-x C-q}
+\key{{\bf načíst} souboru do Emacsu}{C-x C-f}
+\key{{\bf uložit} soubor zpět na disk}{C-x C-s}
+\key{uložit {\bf všechny} soubory}{C-x s}
+\key{{\bf vložit} obsahu jiného souboru do bufferu}{C-x i}
+\key{zaměnit tento soubor jiným souborem}{C-x C-v}
+\key{zapsat buffer do zadaného souboru}{C-x C-w}
+\key{vložit do systému správy verzí}{C-x C-q}
 
-\section{Pou��v�n� n�pov�dy}
+\section{Používání nápovědy}
 
-Syst�m n�pov�dy je snadn�. Stiskn�te \kbd{C-h} (nebo \kbd{F1}) a sledujte
-instrukce. �vodn� {\bf tutori�l} lze spustit pomoc� \kbd{C-h t}.
+Systém nápovědy je snadný. Stiskněte \kbd{C-h} (nebo \kbd{F1}) a sledujte
+instrukce. Úvodní {\bf tutoriál} lze spustit pomocí \kbd{C-h t}.
 
-\key{odstranit okno s~n�pov�dou}{C-x 1}
-\key{rolovat okno s~n�pov�dou}{C-M-v}
+\key{odstranit okno s~nápovědou}{C-x 1}
+\key{rolovat okno s~nápovědou}{C-M-v}
 
-\key{apropos: p��kazy odpov�daj�c� �et�zci}{C-h a}
-\key{zobrazit funkci dan� kl�vesy}{C-h c}
+\key{apropos: příkazy odpovídající řetězci}{C-h a}
+\key{zobrazit funkci dané klávesy}{C-h c}
 \key{zobrazit popis funkce}{C-h f}
-\key{zobrazit informace o~aktu�ln�ch m�dech}{C-h m}
+\key{zobrazit informace o~aktuálních módech}{C-h m}
 
 \section{Opravy chyb}
 
-\key{{\bf p�eru�it} zad�van� nebo vykon�van� p��kaz}{C-g}
-\metax{{\bf obnovit} soubor ztracen� p�dem syst�mu}{M-x recover-file}
-\key{{\bf zru�it} necht�nou zm�nu}{C-x u {\it n.} C-_}
-\metax{vr�tit p�vodn� obsah bufferu}{M-x revert-buffer}
-\key{p�ekreslit \uv{rozpadlou} obrazovku}{C-l}
+\key{{\bf přerušit} zadávaný nebo vykonávaný příkaz}{C-g}
+\metax{{\bf obnovit} soubor ztracený pádem systému}{M-x recover-file}
+\key{{\bf zrušit} nechtěnou změnu}{C-x u {\it n.} C-_}
+\metax{vrátit původní obsah bufferu}{M-x revert-buffer}
+\key{překreslit \uv{rozpadlou} obrazovku}{C-l}
 
-\section{P��r�stkov� vyhled�v�n�}
+\section{Přírůstkové vyhledávání}
 
-\key{vyhledat dop�edu}{C-s}
+\key{vyhledat dopředu}{C-s}
 \key{vyhledat dozadu}{C-r}
-\key{vyhledat regul�rn� v�raz}{C-M-s}
-\key{vyhledat regul�rn� v�raz dozadu}{C-M-r}
+\key{vyhledat regulární výraz}{C-M-s}
+\key{vyhledat regulární výraz dozadu}{C-M-r}
 
-\key{p�edchoz� vyhled�van� �et�zec}{M-p}
-\key{n�sleduj�c� nov�j�� vyhled�van� �et�zec}{M-n}
-\key{ukon�it inkrement�ln� vyhled�v�n�}{RET}
-\key{zru�it efekt posledn�ho zadan�ho znaku}{DEL}
-\key{p�eru�it prob�haj�c� vyhled�v�n�}{C-g}
+\key{předchozí vyhledávaný řetězec}{M-p}
+\key{následující novější vyhledávaný řetězec}{M-n}
+\key{ukončit inkrementální vyhledávání}{RET}
+\key{zrušit efekt posledního zadaného znaku}{DEL}
+\key{přerušit probíhající vyhledávání}{C-g}
 
-Dal�� \kbd{C-s} nebo \kbd{C-r} zopakuje vyhled�n� v~dan�m sm�ru. Pokud
-Emacs vyhled�v�, \kbd{C-g} zru�� pouze nenalezenou ��st �et�zce.
+Další \kbd{C-s} nebo \kbd{C-r} zopakuje vyhledání v~daném směru. Pokud
+Emacs vyhledává, \kbd{C-g} zruší pouze nenalezenou část řetězce.
 
 
 \shortcopyrightnotice
@@ -333,311 +328,311 @@ Emacs vyhled
 \section{Pohyb}
 
 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
-\threecol{{\bf posun o }}{{\bf dozadu}}{{\bf dop�edu}}
+\threecol{{\bf posun o }}{{\bf dozadu}}{{\bf dopředu}}
 \threecol{znak}{C-b}{C-f}
 \threecol{slovo}{M-b}{M-f}
-\threecol{��dek}{C-p}{C-n}
-\threecol{na za��tek nebo konec ��dku}{C-a}{C-e}
-\threecol{v�tu}{M-a}{M-e}
+\threecol{řádek}{C-p}{C-n}
+\threecol{na začátek nebo konec řádku}{C-a}{C-e}
+\threecol{větu}{M-a}{M-e}
 \threecol{odstavec}{M-\{}{M-\}}
-\threecol{str�nku}{C-x [}{C-x ]}
-\threecol{symbolick� v�raz}{C-M-b}{C-M-f}
+\threecol{stránku}{C-x [}{C-x ]}
+\threecol{symbolický výraz}{C-M-b}{C-M-f}
 \threecol{funkci}{C-M-a}{C-M-e}
-\threecol{na za��tek nebo konec bufferu}{M-<}{M->}
+\threecol{na začátek nebo konec bufferu}{M-<}{M->}
 }
 
-\key{rolovat na dal�� obrazovku}{C-v}
-\key{rolovat na p�edchoz� obrazovku}{M-v}
+\key{rolovat na další obrazovku}{C-v}
+\key{rolovat na předchozí obrazovku}{M-v}
 \key{rolovat vlevo}{C-x <}
 \key{rolovat vpravo}{C-x >}
-\key{aktu�ln� ��dek do st�edu obrazovky}{C-u C-l}
+\key{aktuální řádek do středu obrazovky}{C-u C-l}
 
-\section{Ru�en� a maz�n�}
+\section{Rušení a mazání}
 
 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
-\threecol{{\bf ru�en� objekt }}{{\bf dozadu}}{{\bf dop�edu}}
-\threecol{znak (maz�n�, ne ru�en�)}{DEL}{C-d}
+\threecol{{\bf rušený objekt }}{{\bf dozadu}}{{\bf dopředu}}
+\threecol{znak (mazání, ne rušení)}{DEL}{C-d}
 \threecol{slovo}{M-DEL}{M-d}
-\threecol{��dek (do konce)}{M-0 C-k}{C-k}
-\threecol{v�ta}{C-x DEL}{M-k}
-\threecol{symbolick� v�raz}{M-- C-M-k}{C-M-k}
+\threecol{řádek (do konce)}{M-0 C-k}{C-k}
+\threecol{věta}{C-x DEL}{M-k}
+\threecol{symbolický výraz}{M-- C-M-k}{C-M-k}
 }
 
-\key{zru�it {\bf oblast}}{C-w}
-\key{zkop�rovat oblast do schr�nky}{M-w}
-\key{zru�it a� po nejbli��� v�skyt znaku {\it znak}}{M-z {\it znak}}
+\key{zrušit {\bf oblast}}{C-w}
+\key{zkopírovat oblast do schránky}{M-w}
+\key{zrušit až po nejbližší výskyt znaku {\it znak}}{M-z {\it znak}}
 
-\key{vhodit naposledy zru�en� objekt}{C-y}
-\key{nahradit vhozen� objekt p�edchoz�m zru�en�m}{M-y}
+\key{vhodit naposledy zrušený objekt}{C-y}
+\key{nahradit vhozený objekt předchozím zrušeným}{M-y}
 
-\section{Ozna�ov�n�}
+\section{Označování}
 
-\key{vlo�it zna�ku}{C-@ {\it n.} C-SPC}
-\key{prohodit kurzor a zna�ku}{C-x C-x}
+\key{vložit značku}{C-@ {\it n.} C-SPC}
+\key{prohodit kurzor a značku}{C-x C-x}
 
-\key{ozna�it zadan� po�et {\bf address@hidden
-\key{ozna�it {\bf odstavec}}{M-h}
-\key{ozna�it {\bf str�nku}}{C-x C-p}
-\key{ozna�it {\bf symbolick� address@hidden
-\key{ozna�it {\bf funkci}}{C-M-h}
-\key{ozna�it cel� {\bf buffer}}{C-x h}
+\key{označit zadaný počet {\bf address@hidden
+\key{označit {\bf odstavec}}{M-h}
+\key{označit {\bf stránku}}{C-x C-p}
+\key{označit {\bf symbolický address@hidden
+\key{označit {\bf funkci}}{C-M-h}
+\key{označit celý {\bf buffer}}{C-x h}
 
-\section{Interaktivn� nahrazov�n�}
+\section{Interaktivní nahrazování}
 
-\key{interaktivn� nahradit textov� �et�zec}{M-\%}
-\metax{s~u�it�m regul�rn�ho v�razu}{M-x query-replace-regexp}
+\key{interaktivně nahradit textový řetězec}{M-\%}
+\metax{s~užitím regulárního výrazu}{M-x query-replace-regexp}
 
-Platn� odpov�di v~m�du query-replace jsou
+Platné odpovědi v~módu query-replace jsou
 
-\key{{\bf z�m�nu prov�st} a j�t na dal��}{SPC}
-\key{z�m�nu prov�st a z�stat na m�st�}{,}
-\key{{\bf sko�it} na dal�� bez proveden� z�m�ny}{DEL}
-\key{zam�nit v�echny zb�vaj�c� v�skyty}{!}
-\key{{\bf zp�t} na p�edchoz� v�skyt �et�zce}{^}
-\key{{\bf konec} nahrazov�n�}{RET}
-\key{rekurzivn� editace (ukon�� se \kbd{C-M-c})}{C-r}
+\key{{\bf záměnu provést} a jít na další}{SPC}
+\key{záměnu provést a zůstat na místě}{,}
+\key{{\bf skočit} na další bez provedení záměny}{DEL}
+\key{zaměnit všechny zbývající výskyty}{!}
+\key{{\bf zpět} na předchozí výskyt řetězce}{^}
+\key{{\bf konec} nahrazování}{RET}
+\key{rekurzivní editace (ukončí se \kbd{C-M-c})}{C-r}
 
 \section{Okna}
 
-Jestli�e jsou zobrazeny dva p��kazy, pak ten druh� plat� pro X okno.
+Jestliže jsou zobrazeny dva příkazy, pak ten druhý platí pro X okno.
 
-\key{zru�it v�echna ostatn� okna}{C-x 1}
+\key{zrušit všechna ostatní okna}{C-x 1}
 
 {\setbox0=\hbox{\kbd{0}}\advance\hsize by 0\wd0
 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
-\threecol{rozd�lit okno na horn� a doln�}{C-x 2\ \ \ \ }{C-x 5 2}
-\threecol{zru�it toto okno}{C-x 0\ \ \ \ }{C-x 5 0}
+\threecol{rozdělit okno na horní a dolní}{C-x 2\ \ \ \ }{C-x 5 2}
+\threecol{zrušit toto okno}{C-x 0\ \ \ \ }{C-x 5 0}
 }}
-\key{rozd�lit okno na lev� a prav�}{C-x 3}
+\key{rozdělit okno na levé a pravé}{C-x 3}
 
-\key{rolovat jin� okno}{C-M-v}
+\key{rolovat jiné okno}{C-M-v}
 
 {\setbox0=\hbox{\kbd{0}}\advance\hsize by 2\wd0
 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
-\threecol{p�epnout kurzor do jin�ho okna}{C-x o}{C-x 5 o}
-
-\threecol{vybrat buffer v~jin�m okn�}{C-x 4 b}{C-x 5 b}
-\threecol{zobrazit buffer v~jin�m okn�}{C-x 4 C-o}{C-x 5 C-o}
-\threecol{otev��t soubor v~jin�m okn�}{C-x 4 f}{C-x 5 f}
-\threecol{otev��t soubor jen pro �ten� v~jin�m okn�}{C-x 4 r}{C-x 5 r}
-\threecol{spustit Dired v~jin�m okn�}{C-x 4 d}{C-x 5 d}
-\threecol{naj�t tag v~jin�m okn�}{C-x 4 .}{C-x 5 .}
+\threecol{přepnout kurzor do jiného okna}{C-x o}{C-x 5 o}
+
+\threecol{vybrat buffer v~jiném okně}{C-x 4 b}{C-x 5 b}
+\threecol{zobrazit buffer v~jiném okně}{C-x 4 C-o}{C-x 5 C-o}
+\threecol{otevřít soubor v~jiném okně}{C-x 4 f}{C-x 5 f}
+\threecol{otevřít soubor jen pro čtení v~jiném okně}{C-x 4 r}{C-x 5 r}
+\threecol{spustit Dired v~jiném okně}{C-x 4 d}{C-x 5 d}
+\threecol{najít tag v~jiném okně}{C-x 4 .}{C-x 5 .}
 }}
 
-\key{zv�t�it okno}{C-x ^}
-\key{z��it okno}{C-x \{}
-\key{roz���it okno}{C-x \}}
+\key{zvětšit okno}{C-x ^}
+\key{zúžit okno}{C-x \{}
+\key{rozšířit okno}{C-x \}}
 
-\section{Form�tov�n�}
+\section{Formátování}
 
-\key{odsadit aktu�ln� {\bf ��dek} (dle m�du)}{TAB}
-\key{odsadit {\bf oblast} (dle m�du)}{C-M-\\}
-\key{odsadit {\bf symbolick� v�raz} (dle m�du)}{C-M-q}
-\key{odsadit oblast napevno o~{\it argument\/} sloupc�}{C-x TAB}
+\key{odsadit aktuální {\bf řádek} (dle módu)}{TAB}
+\key{odsadit {\bf oblast} (dle módu)}{C-M-\\}
+\key{odsadit {\bf symbolický výraz} (dle módu)}{C-M-q}
+\key{odsadit oblast napevno o~{\it argument\/} sloupců}{C-x TAB}
 
-\key{vlo�it znak nov�ho ��dku za kurzor}{C-o}
-\key{posunout zbytek ��dku svisle dol�}{C-M-o}
-\key{smazat pr�zdn� ��dky okolo kurzoru}{C-x C-o}
-\key{spojit ��dek s~p�edchoz�m (s~arg.~s~n�sl.)}{M-^}
-\key{smazat pr�zdn� m�sto kolem kurzoru}{M-\\}
-\key{nechat p�esn� jednu mezeru kolem kurzoru}{M-SPC}
+\key{vložit znak nového řádku za kurzor}{C-o}
+\key{posunout zbytek řádku svisle dolů}{C-M-o}
+\key{smazat prázdné řádky okolo kurzoru}{C-x C-o}
+\key{spojit řádek s~předchozím (s~arg.~s~násl.)}{M-^}
+\key{smazat prázdné místo kolem kurzoru}{M-\\}
+\key{nechat přesně jednu mezeru kolem kurzoru}{M-SPC}
 
 \key{zalomit odstavec}{M-q}
-\key{nastavit sloupec pro zalamov�n�}{C-x f}
-\key{nastavit prefix, kter�m za��naj� ��dky}{C-x .}
+\key{nastavit sloupec pro zalamování}{C-x f}
+\key{nastavit prefix, kterým začínají řádky}{C-x .}
 \key{nastavit font}{M-g}
 
-\section{Zm�na velikosti p�smen}
+\section{Změna velikosti písmen}
 
-\key{zm�nit p�smena slova na velk�}{M-u}
-\key{zm�nit p�smena slova na mal�}{M-l}
-\key{zm�nit po��te�n� p�smeno slova na velk�}{M-c}
+\key{změnit písmena slova na velká}{M-u}
+\key{změnit písmena slova na malá}{M-l}
+\key{změnit počáteční písmeno slova na velké}{M-c}
 
-\key{zm�nit p�smena oblasti na velk�}{C-x C-u}
-\key{zm�nit p�smena oblasti na mal�}{C-x C-l}
+\key{změnit písmena oblasti na velká}{C-x C-u}
+\key{změnit písmena oblasti na malá}{C-x C-l}
 
 \section{Minibuffer}
 
-N�sleduj�c� kl�vesy jsou platn� pro minibuffer.
+Následující klávesy jsou platné pro minibuffer.
 
-\key{doplnit z~nab�dky}{TAB}
-\key{doplnit do nejbli���ho slova}{SPC}
+\key{doplnit z~nabídky}{TAB}
+\key{doplnit do nejbližšího slova}{SPC}
 \key{doplnit a vykonat}{RET}
-\key{zobrazit mo�n� dopln�n�}{?}
-\key{p�edchoz� p��kaz z~minibufferu}{M-p}
-\key{nov�j�� nebo implicitn� p��kaz z~minibufferu}{M-n}
-\key{vyhledat regul�rn� v�raz v~historii vzad}{M-r}
-\key{vyhledat regul�rn� v�raz v~historii vp�ed}{M-s}
-\key{zru�it p��kaz}{C-g}
+\key{zobrazit možná doplnění}{?}
+\key{předchozí příkaz z~minibufferu}{M-p}
+\key{novější nebo implicitní příkaz z~minibufferu}{M-n}
+\key{vyhledat regulární výraz v~historii vzad}{M-r}
+\key{vyhledat regulární výraz v~historii vpřed}{M-s}
+\key{zrušit příkaz}{C-g}
 
-Stiskn�te \kbd{C-x ESC ESC} pro editaci a zopakov�n� posledn�ho p��kazu
-z~minibufferu.  Stiskn�te \kbd{F10} pro aktivaci menu v~minibufferu.
+Stiskněte \kbd{C-x ESC ESC} pro editaci a zopakování posledního příkazu
+z~minibufferu.  Stiskněte \kbd{F10} pro aktivaci menu v~minibufferu.
 
 \newcolumn
-\title{GNU Emacs -- Referen�n� karta}
+\title{GNU Emacs -- Referenční karta}
 
 \section{Buffery}
 
-\key{vybrat jin� buffer}{C-x b}
-\key{seznam v�ech buffer�}{C-x C-b}
-\key{zru�it buffer}{C-x k}
+\key{vybrat jiný buffer}{C-x b}
+\key{seznam všech bufferů}{C-x C-b}
+\key{zrušit buffer}{C-x k}
 
-\section{V�m�ny}
+\section{Výměny}
 
-\key{p�ehodit {\bf znaky}}{C-t}
-\key{p�ehodit {\bf slova}}{M-t}
-\key{p�ehodit {\bf ��dky}}{C-x C-t}
-\key{p�ehodit {\bf symbolick� v�razy}}{C-M-t}
+\key{přehodit {\bf znaky}}{C-t}
+\key{přehodit {\bf slova}}{M-t}
+\key{přehodit {\bf řádky}}{C-x C-t}
+\key{přehodit {\bf symbolické výrazy}}{C-M-t}
 
 \section{Kontrola pravopisu}
 
-\key{kontrola pravopisu aktu�ln�ho slova}{M-\$}
-\metax{kontrola pravopisu v�ech slov v  oblasti}{M-x ispell-region}
-\metax{kontrola pravopisu cel�ho bufferu}{M-x ispell-buffer}
+\key{kontrola pravopisu aktuálního slova}{M-\$}
+\metax{kontrola pravopisu všech slov v  oblasti}{M-x ispell-region}
+\metax{kontrola pravopisu celého bufferu}{M-x ispell-buffer}
 
 \section{Tagy}
 
-\key{naj�t tag (definici)}{M-.}
-\key{naj�t dal�� v�skyt tagu}{C-u M-.}
-\metax{zadat soubor s nov�mi tagy}{M-x visit-tags-table}
+\key{najít tag (definici)}{M-.}
+\key{najít další výskyt tagu}{C-u M-.}
+\metax{zadat soubor s novými tagy}{M-x visit-tags-table}
 
-\metax{vyhledat reg.\ v�raz v~souborech s~tagy}{M-x tags-search}
-\metax{spustit nahrazov�n� pro ony soubory}{M-x tags-query-replace}
-\key{pokra�ovat v~prohled�v�n� nebo nahrazov�n�}{M-,}
+\metax{vyhledat reg.\ výraz v~souborech s~tagy}{M-x tags-search}
+\metax{spustit nahrazování pro ony soubory}{M-x tags-query-replace}
+\key{pokračovat v~prohledávání nebo nahrazování}{M-,}
 
-\section{P��kazov� interpret}
+\section{Příkazový interpret}
 
-\key{vykonat shellov� p��kaz}{M-!}
-\key{vykonat shellov� p��kaz na oblast}{M-|}
-\key{zfiltrovat oblast shellov�m p��kazem}{C-u M-|}
-\key{spustit shell v okn� \kbd{*shell*}}{M-x shell}
+\key{vykonat shellový příkaz}{M-!}
+\key{vykonat shellový příkaz na oblast}{M-|}
+\key{zfiltrovat oblast shellovým příkazem}{C-u M-|}
+\key{spustit shell v okně \kbd{*shell*}}{M-x shell}
 
-\section{Obd�ln�ky}
+\section{Obdélníky}
 
-\key{zkop�rovat obd�ln�k do registru}{C-x r r}
-\key{zru�it obd�ln�k}{C-x r k}
-\key{vhodit obd�ln�k}{C-x r y}
-\key{vlo�it obd�ln�k mezer}{C-x r o}
-\key{nahradit obd�ln�k obd�ln�kem mezer}{C-x r c}
-\key{nahradit ��dky obd�ln�ku zadan�m �et�zcem}{C-x r t}
+\key{zkopírovat obdélník do registru}{C-x r r}
+\key{zrušit obdélník}{C-x r k}
+\key{vhodit obdélník}{C-x r y}
+\key{vložit obdélník mezer}{C-x r o}
+\key{nahradit obdélník obdélníkem mezer}{C-x r c}
+\key{nahradit řádky obdélníku zadaným řetězcem}{C-x r t}
 
 \section{Zkratky}
 
-\key{p�idat glob�ln� zkratku}{C-x a g}
-\key{p�idat lok�ln� zkratku}{C-x a l}
-\key{p�idat glob�ln� expanzi pro zkratku }{C-x a i g}
-\key{p�idat lok�ln� expanzi pro zkratku}{C-x a i l}
+\key{přidat globální zkratku}{C-x a g}
+\key{přidat lokální zkratku}{C-x a l}
+\key{přidat globální expanzi pro zkratku }{C-x a i g}
+\key{přidat lokální expanzi pro zkratku}{C-x a i l}
 \key{expandovat zkratku}{C-x a e}
 
-\key{dynamick� expanze p�edch�zej�c�ho slova}{M-/}
+\key{dynamická expanze předcházejícího slova}{M-/}
 
-\section{Regul�rn� v�razy}
+\section{Regulární výrazy}
 
-\key{libovoln� znak krom� nov�ho ��dku}{. {\rm(te�ka)}}
-\key{��dn� nebo n�kolik opakov�n�}{*}
-\key{jedno nebo v�ce opakov�n�}{+}
-\key{��dn� nebo jedno opakov�n�}{?}
-\key{zru�it zvl�tn� v�znam znaku {\it c\/} ve v�razu}{\\{\it c}}
+\key{libovolný znak kromě nového řádku}{. {\rm(tečka)}}
+\key{žádné nebo několik opakování}{*}
+\key{jedno nebo více opakování}{+}
+\key{žádné nebo jedno opakování}{?}
+\key{zrušit zvláštní význam znaku {\it c\/} ve výrazu}{\\{\it c}}
 \key{alternativa (\uv{nebo})}{\\|}
 \key{skupina}{\\( {\rm$\ldots$} \\)}
-\key{stejn� text jako {\it n\/}-t� skupina}{\\{\it n}}
+\key{stejný text jako {\it n\/}-tá skupina}{\\{\it n}}
 \key{hranice slova}{\\b}
 \key{nikoliv hranice slova}{\\B}
 
 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
-\threecol{{\bf element}}{{\bf za��tek}}{{\bf konec}}
-\threecol{��dek}{^}{\$}
+\threecol{{\bf element}}{{\bf začátek}}{{\bf konec}}
+\threecol{řádek}{^}{\$}
 \threecol{slovo}{\\<}{\\>}
 \threecol{buffer}{\\`}{\\'}
 
-\threecol{{\bf t��da znak�}}{{\bf odpov�d�}}{{\bf neodpov�d�}}
-\threecol{explicitn� mno�ina}{[ {\rm$\ldots$} ]}{[^ {\rm$\ldots$} ]}
-\threecol{slovotvorn� znak}{\\w}{\\W}
-\threecol{znak se syntax� {\it c}}{\\s{\it c}}{\\S{\it c}}
+\threecol{{\bf třída znaků}}{{\bf odpovídá}}{{\bf neodpovídá}}
+\threecol{explicitní množina}{[ {\rm$\ldots$} ]}{[^ {\rm$\ldots$} ]}
+\threecol{slovotvorný znak}{\\w}{\\W}
+\threecol{znak se syntaxí {\it c}}{\\s{\it c}}{\\S{\it c}}
 }
 
-\section{Mezin�rodn� znakov� sady}
+\section{Mezinárodní znakové sady}
 
-\metax{zadat hlavn� jazyk}{M-x set-language-environment}
-\metax{zobrazit v�echny vstupn� metody}{M-x list-input-methods}
-\key{zapnout nebo vypnout vstupn� metodu}{C-\\}
-\key{zadat k�dov�n� pro n�sleduj�c� p��kaz}{C-x RET c}
-\metax{zobrazit v�echna k�dov�n�}{M-x list-coding-systems}
-\metax{zm�nit preferovan� k�dov�n�}{M-x prefer-coding-system}
+\metax{zadat hlavní jazyk}{M-x set-language-environment}
+\metax{zobrazit všechny vstupní metody}{M-x list-input-methods}
+\key{zapnout nebo vypnout vstupní metodu}{C-\\}
+\key{zadat kódování pro následující příkaz}{C-x RET c}
+\metax{zobrazit všechna kódování}{M-x list-coding-systems}
+\metax{změnit preferované kódování}{M-x prefer-coding-system}
 
 \section{Info}
 
 \key{spustit Info}{C-h i}
-\key{naj�t zadanou funkci nebo prom�nnou v~Info}{C-h C-i}
+\key{najít zadanou funkci nebo proměnnou v~Info}{C-h C-i}
 \beginindentedkeys
 
-Pohyb uvnit� uzl�:
+Pohyb uvnitř uzlů:
 
-\key{rolov�n� vp�ed}{SPC}
-\key{rolov�n� zp�t}{DEL}
-\key{na za��tek uzlu}{. {\rm (te�ka)}}
+\key{rolování vpřed}{SPC}
+\key{rolování zpět}{DEL}
+\key{na začátek uzlu}{. {\rm (tečka)}}
 
 Pohyb mezi uzly:
 
-\key{{\bf dal��} uzel}{n}
-\key{{\bf p�edchoz�} uzel}{p}
-\key{{\bf nad�azen�} uzel}{u}
-\key{vybrat z~menu podle n�zvu}{m}
-\key{vybrat {\it n\/}-tou polo�ku menu (1--9)}{{\it n}}
-\key{nejbli��� p��t� k��ov� odkaz (n�vrat \kbd{l})}{f}
-\key{vr�tit se do naposledy prohl�en�ho uzlu}{l}
-\key{vr�tit se do adres��e uzl�}{d}
-\key{p�ej�t do kter�hokoliv uzlu podle jm�na}{g}
+\key{{\bf další} uzel}{n}
+\key{{\bf předchozí} uzel}{p}
+\key{{\bf nadřazený} uzel}{u}
+\key{vybrat z~menu podle názvu}{m}
+\key{vybrat {\it n\/}-tou položku menu (1--9)}{{\it n}}
+\key{nejbližší příští křížový odkaz (návrat \kbd{l})}{f}
+\key{vrátit se do naposledy prohlíženého uzlu}{l}
+\key{vrátit se do adresáře uzlů}{d}
+\key{přejít do kteréhokoliv uzlu podle jména}{g}
 
-Dal��:
+Další:
 
-\key{spustit {\bf tutori�l} k~Info}{h}
+\key{spustit {\bf tutoriál} k~Info}{h}
 % \key{look up a subject in the indices}{i} % FIXME
-\key{prohledat uzly na �et�zec}{M-s}
-\key{{\bf ukon�it} Info}{q}
+\key{prohledat uzly na řetězec}{M-s}
+\key{{\bf ukončit} Info}{q}
 
 \endindentedkeys
 
 \section{Registry}
 
-\key{ulo�it oblast do registru}{C-x r s}
-\key{vlo�it obsah registru do bufferu}{C-x r i}
+\key{uložit oblast do registru}{C-x r s}
+\key{vložit obsah registru do bufferu}{C-x r i}
 
-\key{ulo�it pozici kurzoru do registru}{C-x r SPC}
-\key{sko�it na pozici ulo�enou v~registru}{C-x r j}
+\key{uložit pozici kurzoru do registru}{C-x r SPC}
+\key{skočit na pozici uloženou v~registru}{C-x r j}
 
-\section{Kl�vesov� makra}
+\section{Klávesová makra}
 
-\key{{\bf zah�jit} definov�n� kl�vesov�ho makra}{C-x (}
-\key{{\bf zakon�it} definov�n� kl�vesov�ho makra}{C-x )}
-\key{{\bf vykonat} posledn� definovan� makro}{C-x e}
-\key{p�ipojit k~posledn�mu kl�vesov�mu makru}{C-u C-x (}
-\metax{pojmenovat posledn� makro}{M-x name-last-kbd-macro}
-\metax{vlo�it do bufferu lispovou definici}{M-x insert-kbd-macro}
+\key{{\bf zahájit} definování klávesového makra}{C-x (}
+\key{{\bf zakončit} definování klávesového makra}{C-x )}
+\key{{\bf vykonat} poslední definované makro}{C-x e}
+\key{připojit k~poslednímu klávesovému makru}{C-u C-x (}
+\metax{pojmenovat poslední makro}{M-x name-last-kbd-macro}
+\metax{vložit do bufferu lispovou definici}{M-x insert-kbd-macro}
 
-\section{P��kazy souvisej�c� s~Emacs Lispem}
+\section{Příkazy související s~Emacs Lispem}
 
-\key{vyhodnotit {\bf v�raz} p�ed kurzorem}{C-x C-e}
+\key{vyhodnotit {\bf výraz} před kurzorem}{C-x C-e}
 \key{vyhodnotit {\bf funkci} pod kurzorem}{C-M-x}
 \metax{vyhodnotit {\bf oblast}}{M-x eval-region}
-\key{na��st a vyhodnotit v�raz v~minibufferu}{M-:}
-\metax{na��st soubor ze syst�mov�ho adres��e}{M-x load-library}
+\key{načíst a vyhodnotit výraz v~minibufferu}{M-:}
+\metax{načíst soubor ze systémového adresáře}{M-x load-library}
 
-\section{Jednoduch� p�izp�soben�}
+\section{Jednoduchá přizpůsobení}
 
-\metax{nastavit prom�nn� a faces}{M-x customize}
+\metax{nastavit proměnné a faces}{M-x customize}
 
 % The intended audience here is the person who wants to make simple
 % customizations and knows Lisp syntax.
 
-Definice obecn� kl�vesov� zkratky v~Emacs Lispu (p��klad):
+Definice obecné klávesové zkratky v~Emacs Lispu (příklad):
 
 \beginexample%
 (global-set-key "\\C-cg" 'goto-line)
 (global-set-key "\\M-\#" 'query-replace-regexp)
 \endexample
 
-\section{Z�pis p��kaz�}
+\section{Zápis příkazů}
 
 \beginexample%
 (defun \<command-name> (\<args>)
@@ -645,7 +640,7 @@ Definice obecn
   \<body>)
 \endexample
 
-P��klad:
+Příklad:
 
 \beginexample%
 (defun this-line-to-top-of-window (line)
@@ -657,8 +652,8 @@ With ARG, put point on line ARG."
               (prefix-numeric-value line))))
 \endexample
 
-Specifikace \kbd{interactive} ��k�, jak interaktivn� na��st ar\-gu\-men\-ty.
-V�ce se dozv�te po proveden� \kbd{C-h f interactive}.
+Specifikace \kbd{interactive} říká, jak interaktivně načíst ar\-gu\-men\-ty.
+Více se dozvíte po provedení \kbd{C-h f interactive}.
 
 \copyrightnotice
 
@@ -666,5 +661,4 @@ V
 
 % Local variables:
 % compile-command: "csplain cs-refcard"
-% coding: iso-latin-2
 % End:
diff --git a/etc/refcards/cs-survival.tex b/etc/refcards/cs-survival.tex
index 75235ed..72162c3 100644
--- a/etc/refcards/cs-survival.tex
+++ b/etc/refcards/cs-survival.tex
@@ -1,9 +1,9 @@
 % Title:  GNU Emacs Survival Card
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % Author: Wlodek Bzyl <address@hidden>
-% Czech translation: Pavel Jan�k <address@hidden>, March 2001
+% Czech translation: Pavel Janík <address@hidden>, March 2001
 
 % This file is part of GNU Emacs.
 
@@ -54,11 +54,6 @@
 % Czech hyphenation rules applied
 \chyph
 
-% Without this, pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
-% aborts with: "! UTF-8 INPUT IS CORRUPTED !
-% May be you are using another input encoding"
-\input utf8off
-
 \input emacsver.tex
 
 \def\copyrightnotice{\penalty-1\vfill
@@ -66,11 +61,11 @@
     Copyright \copyright\ \year\ Free Software Foundation, Inc.\break
     Pro GNU Emacs \versionemacs\break
     W{\l}odek Bzyl (address@hidden)\break
-    Do �e�tiny p�elo�il Pavel Jan�k (address@hidden)
+    Do češtiny přeložil Pavel Janík (address@hidden)
 
-    Kopie tohoto dokumentu m��ete vytv��et a ���it
-    za p�edpokladu, �e budou obsahovat tuto pozn�mku
-    o autorsk�ch pr�vech.\par}}
+    Kopie tohoto dokumentu můžete vytvářet a šířit
+    za předpokladu, že budou obsahovat tuto poznámku
+    o autorských právech.\par}}
 
 \hsize 3.2in
 \vsize 7.95in
@@ -173,243 +168,243 @@
 %**end of header
 
 
-\title{Karta\ \ pro\ \ p�e�it�\ \ s\ \ GNU\ \ Emacsem}{pro verzi \versionemacs}
+\title{Karta\ \ pro\ \ přežití\ \ s\ \ GNU\ \ Emacsem}{pro verzi \versionemacs}
 
-V~n�sleduj�c�m textu \kbd{C-z} znamen�: stiskn�te kl�vesu `\kbd{z}' a
-sou�asn� p�idr�te stisknutou kl�vesu {\it Ctrl}. \kbd{M-z} znamen�, �e
-sou�asn� s kl�vesou `\kbd{z}' p�idr��te kl�vesu {\it Meta\/} (v�t�inou
-ozna�enou {\it Alt\/}) nebo ji stisknete po stisknut� kl�vesy {\it Esc\/}.
+V~následujícím textu \kbd{C-z} znamená: stiskněte klávesu `\kbd{z}' a
+současně přidržte stisknutou klávesu {\it Ctrl}. \kbd{M-z} znamená, že
+současně s klávesou `\kbd{z}' přidržíte klávesu {\it Meta\/} (většinou
+označenou {\it Alt\/}) nebo ji stisknete po stisknutí klávesy {\it Esc\/}.
 
 
-\section{Spu�t�n� Emacsu}
+\section{Spuštění Emacsu}
 
-Pro spu�t�n� GNU Emacsu jednodu�e napi�te jeho jm�no: \kbd{emacs}.
-Emacs rozd�luje r�mec na n�kolik ��st�:
-  ��dek menu,
-  buffer s editovan�m textem,
-  tzv. mode line popisuj�c� buffer nad n�
-  a minibuffer v posledn� ��dce.
+Pro spuštění GNU Emacsu jednoduše napište jeho jméno: \kbd{emacs}.
+Emacs rozděluje rámec na několik částí:
+  řádek menu,
+  buffer s editovaným textem,
+  tzv. mode line popisující buffer nad ní
+  a minibuffer v poslední řádce.
 \askip
-\key{C-x C-c} ukon�en� Emacsu
-\key{C-x C-f} editace souboru; tento p��kaz vyu��v� minibuffer k p�e�ten�
-              jm�na souboru; tento p��kaz pou�ijte i tehdy, chcete-li
-              vytvo�it nov� soubor zadan�ho jm�na
-\key{C-x C-s} ulo�it soubor
-\key{C-x k} zav��t buffer
-\key{C-g} ve v�t�in� situac�: zastaven� aktu�ln� prov�d�n� �innosti,
-              zru�en� zad�v�n� p��kazu apod.
+\key{C-x C-c} ukončení Emacsu
+\key{C-x C-f} editace souboru; tento příkaz využívá minibuffer k přečtení
+              jména souboru; tento příkaz použijte i tehdy, chcete-li
+              vytvořit nový soubor zadaného jména
+\key{C-x C-s} uložit soubor
+\key{C-x k} zavřít buffer
+\key{C-g} ve většině situací: zastavení aktuálně prováděné činnosti,
+              zrušení zadávání příkazu apod.
 \key{C-x u} obnovit
 
 \section{Pohyb}
 
-\key{C-l} p�esun aktu�ln� ��dky do st�edu okna
-\key{C-x b} p�epnut� do jin�ho bufferu
-\key{M-<} p�esun na za��tek bufferu
-\key{M->} p�esun na konec bufferu
-\key{M-x goto-line} p�esun na ��dek zadan�ho ��sla
+\key{C-l} přesun aktuální řádky do středu okna
+\key{C-x b} přepnutí do jiného bufferu
+\key{M-<} přesun na začátek bufferu
+\key{M->} přesun na konec bufferu
+\key{M-x goto-line} přesun na řádek zadaného čísla
 
-\section{V�ce oken}
+\section{Více oken}
 
-\key{C-x 0} odstran�n� aktu�ln�ho okna
-\key{C-x 1} aktu�ln� okno se stane jedin�m oknem
-\key{C-x 2} rozd�len� okna horizont�ln�
-\key{C-x 3} rozd�len� okna vertik�ln�
-\key{C-x o} p�esun do jin�ho okna
+\key{C-x 0} odstranění aktuálního okna
+\key{C-x 1} aktuální okno se stane jediným oknem
+\key{C-x 2} rozdělení okna horizontálně
+\key{C-x 3} rozdělení okna vertikálně
+\key{C-x o} přesun do jiného okna
 
 \section{Regiony}
 
-Emacs definuje `region' jako prostor mezi {\it zna�kou\/} a
-{\it bodem}. Zna�ka je nastavena pomoc� \kbd{C-{\it space}}.
-Bod je v m�st� aktu�ln� pozice kurzoru.
+Emacs definuje `region' jako prostor mezi {\it značkou\/} a
+{\it bodem}. Značka je nastavena pomocí \kbd{C-{\it space}}.
+Bod je v místě aktuální pozice kurzoru.
 \askip
-\key{M-h} ozna� cel� odstavec
-\key{C-x h} ozna� cel� buffer
+\key{M-h} označ celý odstavec
+\key{C-x h} označ celý buffer
 
-\section{Vyjmut� a kop�rov�n�}
+\section{Vyjmutí a kopírování}
 
 \key{C-w} vyjmi region
-\key{M-w} zkop�ruj region do kill-ringu
-\key{C-k} vyjmi text od kurzoru do konce ��dku
+\key{M-w} zkopíruj region do kill-ringu
+\key{C-k} vyjmi text od kurzoru do konce řádku
 \key{M-DEL} vyjmi slovo
-\key{C-y} vlo� zp�t posledn� vyjmut� text (kombinace kl�ves \kbd{C-w C-y}
-          m��e b�t pou�ita pro p�esuny text�)
-\key{M-y} nahra� posledn� vlo�en� text p�edchoz�m vyjmut�m textem
+\key{C-y} vlož zpět poslední vyjmutý text (kombinace kláves \kbd{C-w C-y}
+          může být použita pro přesuny textů)
+\key{M-y} nahraď poslední vložený text předchozím vyjmutým textem
 
-\section{Vyhled�v�n�}
+\section{Vyhledávání}
 
-\key{C-s} hledej �et�zec
-\key{C-r} hledej �et�zec zp�t
-\key{RET} ukon�i hled�n�
-\key{M-C-s} hledej regul�rn� v�raz
-\key{M-C-r} hledej regul�rn� v�raz zp�t
+\key{C-s} hledej řetězec
+\key{C-r} hledej řetězec zpět
+\key{RET} ukonči hledání
+\key{M-C-s} hledej regulární výraz
+\key{M-C-r} hledej regulární výraz zpět
 \askip
-Kombinace \kbd{C-s} nebo \kbd{C-r} m��ete pou��t i k opakov�n� hled�n�
-jin�m sm�rem.
+Kombinace \kbd{C-s} nebo \kbd{C-r} můžete použít i k opakování hledání
+jiným směrem.
 
-\section{Zna�ky (tags)}
+\section{Značky (tags)}
 
-Tabulky zna�ek (tags) zaznamen�vaj� polohu funkc� a procedur, glob�ln�ch
-prom�nn�ch, datov�ch typ� a dal��ho. Pro vytvo�en� tabulky zna�ek spus�te
-p��kaz `{\tt etags} {\it vstupn�\_soubory}' v p��kazov�m interpretu.
+Tabulky značek (tags) zaznamenávají polohu funkcí a procedur, globálních
+proměnných, datových typů a dalšího. Pro vytvoření tabulky značek spusťte
+příkaz `{\tt etags} {\it vstupní\_soubory}' v příkazovém interpretu.
 \askip
 \key{M-.} najdi definici
-\key{C-u M-.} najdi dal�� v�skyt definice
-\key{M-*} b� tam, odkud byla vol�na posledn� \kbd{M-.}
-\mkey{M-x tags-query-replace} spus� query-replace na v�ech souborech
-zaznamenan�ch v tabulce zna�ek.
-\key{M-,} pokra�uj v posledn�m hled�n� zna�ky nebo query-replace
-
-\section{P�eklady}
-
-\key{M-x compile} p�elo� k�d v aktivn�m okn�
-\key{C-c C-c} b� na posledn� chybu p�eklada�e, v okn� p�ekladu
-\key{C-x `} v okn� se zdrojov�m textem
-
-\section{Dired, editor adres���}
-
-\key{C-x d} spus� Dired
-\key{d} ozna� tento soubor pro smaz�n�
-\key{\~{}} ozna� v�echny z�lohy ke smaz�n�
-\key{u} odstra� v�echny zna�ky pro smaz�n�
-\key{x} sma� soubory ozna�en� pro smaz�n�
-\key{C} kop�ruj soubor
+\key{C-u M-.} najdi další výskyt definice
+\key{M-*} běž tam, odkud byla volána poslední \kbd{M-.}
+\mkey{M-x tags-query-replace} spusť query-replace na všech souborech
+zaznamenaných v tabulce značek.
+\key{M-,} pokračuj v posledním hledání značky nebo query-replace
+
+\section{Překlady}
+
+\key{M-x compile} přelož kód v aktivním okně
+\key{C-c C-c} běž na poslední chybu překladače, v okně překladu
+\key{C-x `} v okně se zdrojovým textem
+
+\section{Dired, editor adresářů}
+
+\key{C-x d} spusť Dired
+\key{d} označ tento soubor pro smazání
+\key{\~{}} označ všechny zálohy ke smazání
+\key{u} odstraň všechny značky pro smazání
+\key{x} smaž soubory označené pro smazání
+\key{C} kopíruj soubor
 \key{g} obnov buffer Diredu
-\key{f} nav�tiv soubor v aktu�ln� ��dce
-\key{s} p�epni mezi �azen�m podle abecedy a data/�asu
+\key{f} navštiv soubor v aktuální řádce
+\key{s} přepni mezi řazením podle abecedy a data/času
 
-\section{�ten� a pos�l�n� po�ty}
+\section{Čtení a posílání pošty}
 
-\key{M-x rmail} za�ni ��st po�tu
-\key{q} ukon�i �ten� po�ty
-\key{h} uka� hlavi�ky
-\key{d} ozna� aktu�ln� zpr�vu ke smaz�n�
-\key{x} sma� v�echny zpr�vy ozna�en� ke smaz�n�
+\key{M-x rmail} začni číst poštu
+\key{q} ukonči čtení pošty
+\key{h} ukaž hlavičky
+\key{d} označ aktuální zprávu ke smazání
+\key{x} smaž všechny zprávy označené ke smazání
 
-\key{C-x m} nov� zpr�va
-\key{C-c C-c} po�li zpr�vu a p�epni do jin�ho bufferu
-\key{C-c C-f C-c} p�esu� se na hlavi�ku `CC' a pokud neexistuje, tak ji
-vytvo�
+\key{C-x m} nová zpráva
+\key{C-c C-c} pošli zprávu a přepni do jiného bufferu
+\key{C-c C-f C-c} přesuň se na hlavičku `CC' a pokud neexistuje, tak ji
+vytvoř
 
-\section{R�zn�}
+\section{Různé}
 
 \key{M-q} zarovnej odstavec
-\key{M-/} dopl� dynamicky p�edchoz� slovo
-\key{C-z} ikonizuj (p�eru�) Emacs
-\mkey{M-x revert-buffer} nahra� text editovan�ho souboru t�mt� souborem z disku
+\key{M-/} doplň dynamicky předchozí slovo
+\key{C-z} ikonizuj (přeruš) Emacs
+\mkey{M-x revert-buffer} nahraď text editovaného souboru tímtéž souborem z 
disku
 
-\section{Nahrazov�n�}
+\section{Nahrazování}
 
-\key{M-\%} interaktivn� hledej a nahrazuj
-\key{M-C-\%} za pou�it� regul�rn�ch v�raz�
+\key{M-\%} interaktivně hledej a nahrazuj
+\key{M-C-\%} za použití regulárních výrazů
 \askip
-Mo�n� odpov�di v m�du hled�n� jsou
+Možné odpovědi v módu hledání jsou
 \askip
-\key{SPC} nahra� tento v�skyt; b� na dal��
-\key{,} nahra� tento v�skyt; necho� d�le
-\key{DEL} tento v�skyt nenahrazuj a b� d�l
-\key{!} nahra� v�echny dal�� v�skyty
-\key{\^{}} zp�t na p�edchoz� v�skyt
-\key{RET} ukon�i query-replace
-\key{C-r} za�ni rekurzivn� editaci (\kbd{M-C-c} ji ukon��)
-
-\section{Regul�rn� v�razy}
-
-\key{. {\rm(te�ka)}} libovoln� znak krom� znaku nov�ho ��dku
-\key{*} ��dn� nebo mnoho opakov�n�
-\key{+} jedno nebo mnoho opakov�n�
-\key{?} ��dn� nebo jedno opakov�n�
-\key{[$\ldots$]} ozna�uje t��du znak�
-\key{[\^{}$\ldots$]} neguje t��du znak�
-
-\key{\\{\it c}} uvozen� znaku, kter� by m�l jinak speci�ln� v�znam v
-regul�rn�m v�razu
-
-\key{$\ldots$\\|$\ldots$\\|$\ldots$} vyhovuje jedn� z alternativ (\uv{nebo})
-\key{\\( $\ldots$ \\)} seskupen� n�kolika vzork� do jednoho
-\key{\\{\it n}} tot� jako {\it n\/}-t� skupina
-
-\key{\^{}} vyhovuje na za��tku ��dku
-\key{\$} vyhovuje na konci ��dku
-
-\key{\\w} vyhovuje znaku, kter� m��e b�t sou��st� slova
-\key{\\W} vyhovuje znaku, kter� nem��e b�t sou��st� slova
-\key{\\<} vyhovuje na za��tku slova
+\key{SPC} nahraď tento výskyt; běž na další
+\key{,} nahraď tento výskyt; nechoď dále
+\key{DEL} tento výskyt nenahrazuj a běž dál
+\key{!} nahraď všechny další výskyty
+\key{\^{}} zpět na předchozí výskyt
+\key{RET} ukonči query-replace
+\key{C-r} začni rekurzivní editaci (\kbd{M-C-c} ji ukončí)
+
+\section{Regulární výrazy}
+
+\key{. {\rm(tečka)}} libovolný znak kromě znaku nového řádku
+\key{*} žádné nebo mnoho opakování
+\key{+} jedno nebo mnoho opakování
+\key{?} žádné nebo jedno opakování
+\key{[$\ldots$]} označuje třídu znaků
+\key{[\^{}$\ldots$]} neguje třídu znaků
+
+\key{\\{\it c}} uvození znaku, který by měl jinak speciální význam v
+regulárním výrazu
+
+\key{$\ldots$\\|$\ldots$\\|$\ldots$} vyhovuje jedné z alternativ (\uv{nebo})
+\key{\\( $\ldots$ \\)} seskupení několika vzorků do jednoho
+\key{\\{\it n}} totéž jako {\it n\/}-tá skupina
+
+\key{\^{}} vyhovuje na začátku řádku
+\key{\$} vyhovuje na konci řádku
+
+\key{\\w} vyhovuje znaku, který může být součástí slova
+\key{\\W} vyhovuje znaku, který nemůže být součástí slova
+\key{\\<} vyhovuje na začátku slova
 \key{\\>} vyhovuje na konci slova
-\key{\\b} vyhovuje mezislovn�m mezer�m
-\key{\\B} vyhovuje mezer�m, kter� nejsou mezislovn�
+\key{\\b} vyhovuje mezislovním mezerám
+\key{\\B} vyhovuje mezerám, které nejsou mezislovní
 
 \section{Registry}
 
-\key{C-x r s} ulo� region do registru
-\key{C-x r i} vlo� obsah registru do bufferu
+\key{C-x r s} ulož region do registru
+\key{C-x r i} vlož obsah registru do bufferu
 
-\key{C-x r SPC} ulo� aktu�ln� pozici kurzoru do registru
-\key{C-x r j} sko� na pozici kurzoru ulo�enou v registru
+\key{C-x r SPC} ulož aktuální pozici kurzoru do registru
+\key{C-x r j} skoč na pozici kurzoru uloženou v registru
 
-\section{Obd�ln�ky}
+\section{Obdélníky}
 
-\key{C-x r r} zkop�ruj obd�ln�k do registru
-\key{C-x r k} vyjmi obd�ln�k
-\key{C-x r y} vlo� obd�ln�k
-\key{C-x r t} uvozen� ka�d�ho ��dku �et�zcem
+\key{C-x r r} zkopíruj obdélník do registru
+\key{C-x r k} vyjmi obdélník
+\key{C-x r y} vlož obdélník
+\key{C-x r t} uvození každého řádku řetězcem
 
-\key{C-x r o} otev�i obd�ln�k, posu� text vpravo
-\key{C-x r c} vypr�zdni obd�ln�k
+\key{C-x r o} otevři obdélník, posuň text vpravo
+\key{C-x r c} vyprázdni obdélník
 
-\section{P��kazov� interpret}
+\section{Příkazový interpret}
 
-\key{M-x shell} spus� p��kazov� interpret v Emacsu
-\key{M-!} spus� p��kaz p��kazov�ho interpretu
-\key{M-|} spus� p��kaz p��kazov�ho interpretu na region
-\key{C-u M-|} filtruj region p�es p��kaz p��kazov�ho interpretu
+\key{M-x shell} spusť příkazový interpret v Emacsu
+\key{M-!} spusť příkaz příkazového interpretu
+\key{M-|} spusť příkaz příkazového interpretu na region
+\key{C-u M-|} filtruj region přes příkaz příkazového interpretu
 
 \section{Kontrola pravopisu}
 
 \key{M-\$} zkontroluj pravopis slova pod kurzorem
-\mkey{M-x ispell-region} zkontroluj pravopis v�ech slov v regionu
+\mkey{M-x ispell-region} zkontroluj pravopis všech slov v regionu
 \mkey{M-x ispell-buffer} zkontroluj pravopis v bufferu
 
-\section{Mezin�rodn� znakov� sady}
+\section{Mezinárodní znakové sady}
 
-\key{C-x RET C-\\} zvol a aktivuj vstupn� metodu pro aktu�ln� buffer
-\key{C-\\} aktivuj nebo deaktivuj vstupn� metodu
-\mkey{M-x list-input-methods} zobraz seznam v�ech vstupn�ch metod
-\mkey{M-x set-language-environment} specifikuj hlavn� jazyk
+\key{C-x RET C-\\} zvol a aktivuj vstupní metodu pro aktuální buffer
+\key{C-\\} aktivuj nebo deaktivuj vstupní metodu
+\mkey{M-x list-input-methods} zobraz seznam všech vstupních metod
+\mkey{M-x set-language-environment} specifikuj hlavní jazyk
 
-\key{C-x RET c} nastav k�dovac� syst�m pro n�sleduj�c� p��kaz
-\mkey{M-x find-file-literally} edituj soubor bez jak�chkoli konverz�
+\key{C-x RET c} nastav kódovací systém pro následující příkaz
+\mkey{M-x find-file-literally} edituj soubor bez jakýchkoli konverzí
 
-\mkey{M-x list-coding-systems} uka� v�echny k�dovac� syst�my
-\mkey{M-x prefer-coding-system} zvol preferovan� k�dovac� syst�m
+\mkey{M-x list-coding-systems} ukaž všechny kódovací systémy
+\mkey{M-x prefer-coding-system} zvol preferovaný kódovací systém
 
-\section{Kl�vesov� makra}
+\section{Klávesová makra}
 
-\key{C-x (} za�ni definici kl�vesov�ho makra
-\key{C-x )} ukon�i definici kl�vesov�ho makra
-\key{C-x e} spus� naposledy definovan� kl�vesov� makro
-\key{C-u C-x (} p�idej do posledn� definovan�ho kl�vesov�ho makra
-\mkey{M-x name-last-kbd-macro} pojmenuj naposledy definovan� makro
+\key{C-x (} začni definici klávesového makra
+\key{C-x )} ukonči definici klávesového makra
+\key{C-x e} spusť naposledy definované klávesové makro
+\key{C-u C-x (} přidej do posledně definovaného klávesového makra
+\mkey{M-x name-last-kbd-macro} pojmenuj naposledy definované makro
 
-\section{Jednoduch� nastaven�}
+\section{Jednoduché nastavení}
 
-\key{M-x customize} jednoduch� nastaven�
+\key{M-x customize} jednoduché nastavení
 
 \section{Pomoc}
 
-Emacs dopl�uje p��kazy. Stisknete-li \kbd{M-x} {\it tab\/} nebo {\it
-space\/} dostanete seznam p��kaz� Emacsu.
+Emacs doplňuje příkazy. Stisknete-li \kbd{M-x} {\it tab\/} nebo {\it
+space\/} dostanete seznam příkazů Emacsu.
 \askip
-\key{C-h} n�pov�da Emacsu
-\key{C-h t} spust� tutori�l Emacsu
-\key{C-h i} spust� Info, prohl�e� dokumentace
-\key{C-h a} uk�e p��kazy vyhovuj�c� zadan�mu �et�zci (apropos)
-\key{C-h k} zobraz� dokumentaci funkce spu�t�n� pomoc� zadan� kl�vesy
+\key{C-h} nápověda Emacsu
+\key{C-h t} spustí tutoriál Emacsu
+\key{C-h i} spustí Info, prohlížeč dokumentace
+\key{C-h a} ukáže příkazy vyhovující zadanému řetězci (apropos)
+\key{C-h k} zobrazí dokumentaci funkce spuštěné pomocí zadané klávesy
 \askip
-Emacs pracuje v r�zn�ch {\it m�dech}, kter� upravuj� chov�n�
-Emacsu pro editovan� text dan�ho typu. Mode line obsahuje jm�na aktu�ln�ch
-m�d� v z�vork�ch.
+Emacs pracuje v různých {\it módech}, které upravují chování
+Emacsu pro editovaný text daného typu. Mode line obsahuje jména aktuálních
+módů v závorkách.
 \askip
-\key{C-h m} zobraz dokumentaci aktu�ln�ch m�d�.
+\key{C-h m} zobraz dokumentaci aktuálních módů.
 
 \copyrightnotice
 
@@ -417,5 +412,4 @@ m
 
 % Local variables:
 % compile-command: "csplain survival"
-% coding: iso-latin-2
 % End:
diff --git a/etc/refcards/de-refcard.tex b/etc/refcards/de-refcard.tex
index 7b10b21..7b7506b 100644
--- a/etc/refcards/de-refcard.tex
+++ b/etc/refcards/de-refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996, 2000-2014 Free Software Foundation,
+% Copyright (C) 1987, 1993, 1996, 2000-2015 Free Software Foundation,
 % Inc.
 
 % Author: Stephen Gildea <address@hidden>
diff --git a/etc/refcards/dired-ref.tex b/etc/refcards/dired-ref.tex
index 49b82c5..4d49c41 100644
--- a/etc/refcards/dired-ref.tex
+++ b/etc/refcards/dired-ref.tex
@@ -1,6 +1,6 @@
 % Reference Card for Dired
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % Author: Evgeny Roubinchtein <address@hidden>
 
diff --git a/etc/refcards/emacsver.tex.in b/etc/refcards/emacsver.tex.in
index 911121c..ddc6c10 100644
--- a/etc/refcards/emacsver.tex.in
+++ b/etc/refcards/emacsver.tex.in
@@ -2,4 +2,4 @@
 address@hidden@}           % major version of emacs
 %% This one should not be automatically updated;
 %% M-x set-copyright in admin.el handles it.
-\def\year{2014}                             % latest copyright year
+\def\year{2015}                             % latest copyright year
diff --git a/etc/refcards/fr-dired-ref.tex b/etc/refcards/fr-dired-ref.tex
index 4a53ec8..7c154ba 100644
--- a/etc/refcards/fr-dired-ref.tex
+++ b/etc/refcards/fr-dired-ref.tex
@@ -1,6 +1,6 @@
 % Reference Card for Dired -*- coding: utf-8 -*-
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % Author: Evgeny Roubinchtein <address@hidden>
 % French translation: Eric Jacoboni
diff --git a/etc/refcards/fr-refcard.tex b/etc/refcards/fr-refcard.tex
index e775c0e..76ea87f 100644
--- a/etc/refcards/fr-refcard.tex
+++ b/etc/refcards/fr-refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996-1997, 2001-2014 Free Software
+% Copyright (C) 1987, 1993, 1996-1997, 2001-2015 Free Software
 % Foundation, Inc.
 
 % Author: Stephen Gildea <address@hidden>
diff --git a/etc/refcards/fr-survival.tex b/etc/refcards/fr-survival.tex
index 1dfed07..3b6fad7 100644
--- a/etc/refcards/fr-survival.tex
+++ b/etc/refcards/fr-survival.tex
@@ -1,7 +1,7 @@
 %&tex
 % Title:  GNU Emacs Survival Card
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % Author: Wlodek Bzyl <address@hidden>
 % French translation:  \'Eric Jacoboni <address@hidden>, November 2001
diff --git a/etc/refcards/gnus-logo.eps b/etc/refcards/gnus-logo.eps
index d41ef17..3653aec 100644
--- a/etc/refcards/gnus-logo.eps
+++ b/etc/refcards/gnus-logo.eps
@@ -1,5 +1,5 @@
 %!PS-Adobe-2.0 EPSF-2.0
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 %
 % Author: Luis Fernandes <address@hidden>
 %
diff --git a/etc/refcards/gnus-refcard.tex b/etc/refcards/gnus-refcard.tex
index 6b46834..fb8890e 100644
--- a/etc/refcards/gnus-refcard.tex
+++ b/etc/refcards/gnus-refcard.tex
@@ -120,7 +120,7 @@
 %% Gnus logo by Luis Fernandes.
 \newcommand{\Copyright}{%
   \begin{center}
-    Copyright \copyright\ 1995, 2000, 2002--2014 Free Software Foundation, 
Inc.\\*
+    Copyright \copyright\ 1995, 2000, 2002--2015 Free Software Foundation, 
Inc.\\*
   \end{center}
 
   Permission is granted to make and distribute copies of this reference
diff --git a/etc/refcards/orgcard.tex b/etc/refcards/orgcard.tex
index 30470cc..647147c 100644
--- a/etc/refcards/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -17,7 +17,7 @@
 \pdflayout=(0l)
 
 % Nothing else needs to be changed below this line.
-% Copyright (C) 1987, 1993, 1996-1997, 2001-2014 Free Software
+% Copyright (C) 1987, 1993, 1996-1997, 2001-2015 Free Software
 % Foundation, Inc.
 
 % This file is part of GNU Emacs.
diff --git a/etc/refcards/pdflayout.sty b/etc/refcards/pdflayout.sty
index d0e62a4..2243f2f 100644
--- a/etc/refcards/pdflayout.sty
+++ b/etc/refcards/pdflayout.sty
@@ -1,4 +1,4 @@
-% Copyright (C) 2007-2014 Free Software Foundation, Inc.
+% Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 % This file is part of GNU Emacs.
 
diff --git a/etc/refcards/pl-refcard.tex b/etc/refcards/pl-refcard.tex
index 8ad7640..ddbb777 100644
--- a/etc/refcards/pl-refcard.tex
+++ b/etc/refcards/pl-refcard.tex
@@ -1,7 +1,7 @@
 %&mex
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 
 % Author: Stephen Gildea <address@hidden>
 % Polish translation: W{\l}odek Bzyl <address@hidden>
diff --git a/etc/refcards/pt-br-refcard.tex b/etc/refcards/pt-br-refcard.tex
index 24c045a..0af9b7f 100644
--- a/etc/refcards/pt-br-refcard.tex
+++ b/etc/refcards/pt-br-refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996-1997, 2002-2004, 2006-2014 Free
+% Copyright (C) 1987, 1993, 1996-1997, 2002-2004, 2006-2015 Free
 % Software Foundation, Inc.
 
 % Author: Stephen Gildea <address@hidden>
diff --git a/etc/refcards/refcard.tex b/etc/refcards/refcard.tex
index c4abd08..c59f407 100644
--- a/etc/refcards/refcard.tex
+++ b/etc/refcards/refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996-1997, 2001-2014 Free Software
+% Copyright (C) 1987, 1993, 1996-1997, 2001-2015 Free Software
 % Foundation, Inc.
 
 % Author: Stephen Gildea <address@hidden>
diff --git a/etc/refcards/ru-refcard.tex b/etc/refcards/ru-refcard.tex
index 0458ccb..486acf1 100644
--- a/etc/refcards/ru-refcard.tex
+++ b/etc/refcards/ru-refcard.tex
@@ -1,4 +1,4 @@
-% Copyright (C) 1997, 2002-2014 Free Software Foundation, Inc.
+% Copyright (C) 1997, 2002-2015 Free Software Foundation, Inc.
 
 % Author: Stephen Gildea <address@hidden>
 % Russian translation: Alex Ott <address@hidden>
@@ -22,7 +22,7 @@
 \setlength{\ColThreeWidth}{25mm}
 
 \newcommand{\versionemacs}[0]{25} % version of Emacs this is for
-\newcommand{\cyear}[0]{2014}       % copyright year
+\newcommand{\cyear}[0]{2015}       % copyright year
 
 \newcommand\shortcopyrightnotice[0]{\vskip 1ex plus 2 fill
   \centerline{\footnotesize \copyright\ \cyear\ Free Software Foundation, Inc.
diff --git a/etc/refcards/sk-dired-ref.tex b/etc/refcards/sk-dired-ref.tex
index 5304726..8f89856 100644
--- a/etc/refcards/sk-dired-ref.tex
+++ b/etc/refcards/sk-dired-ref.tex
@@ -1,9 +1,9 @@
 % Reference Card for Dired
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % Author: Evgeny Roubinchtein <address@hidden>
-% Czech translation: Pavel Jan�k <address@hidden>, March 2001
+% Czech translation: Pavel Janík <address@hidden>, March 2001
 % Slovak translation: Miroslav Vasko <address@hidden>, March 2001
 
 % This file is part of GNU Emacs.
@@ -32,11 +32,6 @@
 % Slovak hyphenation rules applied
 \shyph
 
-% Without this, pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
-% aborts with: "! UTF-8 INPUT IS CORRUPTED !
-% May be you are using another input encoding"
-\input utf8off
-
 % This file can be printed with 1, 2, or 3 columns per page.
 % Specify how many you want here.
 \newcount\columnsperpage
@@ -61,7 +56,7 @@
 \centerline{For GNU Emacs version \versionemacs}
 \centerline{Originally written May 2000 by Evgeny Roubinchtein,}
 \centerline{using refcard layout designed by Stephen Gildea.}
-\centerline{Translated by Miroslav Va�ko.}
+\centerline{Translated by Miroslav Vaško.}
 
 Permission is granted to make and distribute copies of
 this card provided the copyright notice and this permission notice
@@ -255,10 +250,10 @@ For copies of the GNU Emacs manual, see:
 %**end of header
 
 
-\title{Referen�n� karta pre Dired}
+\title{Referenčná karta pre Dired}
 
-\centerline{(ur�en� pre Dired v GNU Emacse \versionemacs)}
-\centerline{Pr�kazy ozna�en� \dx{} vy�aduj� dired-x}
+\centerline{(určené pre Dired v GNU Emacse \versionemacs)}
+\centerline{Príkazy označené \dx{} vyžadujú dired-x}
 
 % trim this down to fit everything on one page
 % \section{General}
@@ -287,120 +282,120 @@ For copies of the GNU Emacs manual, see:
 % When editing several directories in one buffer, each directory acts as a
 % page, so C-x [ and C-x ] can be used to move between directories.
 
-\section{Spustenie a ukon�enie Dired}
+\section{Spustenie a ukončenie Dired}
 
 \key{spustenie dired}{C-x d}
-\key{spustenie dired v adres�ri s aktu�lnym s�borom}{C-x C-j \dx}
-\key{ukon�enie dired}{q}
-
-\section{Pr�kazy pre presuny}
-
-\key{sp� na predch�dzaj�ci riadok}{p}
-\key{vpred na nasleduj�ci riadok}{n}
-\key{hore na predch�dzaj�ci adres�r}{<}
-\key{dole na nasleduj�ci adres�r}{>}
-\key{na �al�� ozna�en� s�bor}{M-\}}
-\key{na predch�dzaj�ci ozna�en� s�bor}{M-\{}
-\key{sp� na predch�dzaj�ci podadres�r}{M-C-p}
-\key{vpred na �al�� podadres�r}{M-C-n}
-\key{na nadraden� adres�r}{^}
-\key{cho� na prv� podadres�r}{M-C-d}
-
-\section{Pr�kazy pomocou my�i}
-\metax{otvor s�bor}{Mouse_Button_2}
+\key{spustenie dired v adresári s aktuálnym súborom}{C-x C-j \dx}
+\key{ukončenie dired}{q}
+
+\section{Príkazy pre presuny}
+
+\key{späť na predchádzajúci riadok}{p}
+\key{vpred na nasledujúci riadok}{n}
+\key{hore na predchádzajúci adresár}{<}
+\key{dole na nasledujúci adresár}{>}
+\key{na ďalší označený súbor}{M-\}}
+\key{na predchádzajúci označený súbor}{M-\{}
+\key{späť na predchádzajúci podadresár}{M-C-p}
+\key{vpred na ďalší podadresár}{M-C-n}
+\key{na nadradený adresár}{^}
+\key{choď na prvý podadresár}{M-C-d}
+
+\section{Príkazy pomocou myši}
+\metax{otvor súbor}{Mouse_Button_2}
 \metax{zobraz menu}{Control-Mouse_Button_3}
 
-\section{Okam�it� akcie nad s�bormi}
-
-\key{otvor aktu�lny s�bor}{f}
-\key{otvor aktu�lny s�bor iba pre ��tanie}{v}
-\key{otvor aktu�lny s�bor v inom okne}{o}
-%%\key{otvor aktu�lny s�bor v inom r�mci}{w}
-%%\key{zobraz aktu�lny s�bor}{C-u o}
-\key{vytvor nov� podadres�r}{+}
-\key{porovnaj s�bor pod kurzorom s ozna�en�m}{=}
-
-\section{Ozna�ovanie a odzna�ovanie s�borov}
-
-\key{ozna� s�bor alebo podadres�r pre �al�ie pr�kazy}{m}
-\key{odzna� s�bor alebo s�bory podadres�re}{u}
-\key{zru� ozna�enie v�etk�ch s�borov v bufferi}{M-delete}
-\key{ozna� s�bory so zadanou pr�ponou}{* .}
-\key{ozna� v�etky adres�re}{* /}
-\key{ozna� v�etky symbolick� odkazy}{* @}
-\key{ozna� v�etky spustite�n� s�bory}{* *}
-\key{invertuj ozna�enie}{* t}
-\key{ozna� v�etky s�bory v aktu�lnom podadres�ri}{* s}
-\key{ozna� s�bory vyhovuj�ce regul�rnemu v�razu}{* \%}
-\key{zme� zna�ku na in� p�smeno}{* c}
-\key{ozna� s�bory, pre ktor� elispov� v�raz vrac� t}{* ( \dx}
-
-\section{Modifik�cia Dired bufferu}
-
-\key{vlo� do tohto bufferu podadres�r}{i}
-\key{odstr�� ozna�en� s�bory z bufferu}{k}
-\key{odstr�� z bufferu v�pis podadres�ra}{C-u k}
-\key{znovu na��taj adres�r (zna�ky sa zachovaj�)}{g}
-\key{prepni triedenie adres�ra pod�a mena/d�tumu}{s}
-\key{uprav vo�by pr�kazu ls}{C-u s}
-\key{obnov zna�ky, skryt� riadky a~pod.}{C-_}
-\key{skry v�etky podadres�re}{M-\$}
-\key{skry alebo odkry v�etky podadres�re}{\$}
-
-\section{Pr�kazy nad ozna�en�mi s�bormi}
-
-\key{kop�ruj s�bor(y)}{C}
-\key{premenuj s�bor alebo presu� s�bory}{R}
-\key{zme� vlastn�ka s�boru(ov)}{O}
-\key{zme� skupinu s�boru(ov)}{G}
-\key{zme� pr�stupov� pr�va s�boru(ov)}{M}
-\key{vytla� s�bor(y)}{P}
-\key{zme� n�zov s�boru(ov) na mal� p�smen�}{\% l}
-\key{zme� n�zov s�boru(ov) na ve�k� p�smen�}{\% u}
-\key{zma� ozna�en� s�bory}{D}
-%%\key{vykonaj uuencode alebo uudecode s�boru(ov)}{U}
-\key{skomprimuj alebo dekomprimuj s�bor(y)}{Z}
-\key{spusti info na s�bore}{I \dx}
-\key{vytvor symbolick�(�) odkaz(y)}{S}
-\key{vytvor relat�vne symbolick� odkazy}{Y}
-\key{vytvor pevn� odkaz}{H}
-\key{preh�adaj s�bory -- h�adaj regul�rny v�raz}{A}
-\key{nahra� regul�rne v�razy}{Q}
-\key{prelo� s�bory (byte-compile)}{B}
-\key{na��taj s�bory (load-file)}{L}
-\key{spusti pr�kaz nad s�borom(mi)}{!}
-
-\section{Ozna�enie s�borov pre zmazanie}
-
-\leftline{\bf Odzna�uj�ce pr�kazy ma�� zna�ku pre zmazanie}
-\key{ozna� s�bor pre zmazanie}{d}
-%%\key{odstr�� zna�ku pre zmazanie}{delete}
-\key{ozna� v�etky z�lohy (s�bory kon�iace na \~{})}{\~{}}
-\key{ozna� v�etky z�lohy (auto-save)}{\#}
-\key{ozna� r�zne do�asn� s�bory}{\% \&}
-\key{ozna� ��slovan� z�lohy (kon�iace na .\~{}1\~{} a~pod.)}{.}
-\key{vyma� s�bory ozna�en� na zmazanie}{x}
-\key{ozna� s�bory vyhovuj�ce regul�rnemu v�razu}{\% d}
-
-\section{Pr�kazy s regul�rnymi v�razmi}
-
-\key{ozna� s�bory vyhovuj�ce regul�rnemu v�razu}{\% m}
-\key{skop�ruj ozna�en� s�bory obsahuj�ce regexp}{\% C}
-\key{premenuj ozna�en� s�bory vyhovuj�ce regexp}{\% R}
-\key{pevn� odkaz}{\% H}
-\key{symbolick� odkaz}{\% S}
-\key{symbolick� odkaz s relat�vnou cestou}{\% Y}
-\key{ozna� pre zmazanie}{\% d}
+\section{Okamžité akcie nad súbormi}
+
+\key{otvor aktuálny súbor}{f}
+\key{otvor aktuálny súbor iba pre čítanie}{v}
+\key{otvor aktuálny súbor v inom okne}{o}
+%%\key{otvor aktuálny súbor v inom rámci}{w}
+%%\key{zobraz aktuálny súbor}{C-u o}
+\key{vytvor nový podadresár}{+}
+\key{porovnaj súbor pod kurzorom s označeným}{=}
+
+\section{Označovanie a odznačovanie súborov}
+
+\key{označ súbor alebo podadresár pre ďalšie príkazy}{m}
+\key{odznač súbor alebo súbory podadresáre}{u}
+\key{zruš označenie všetkých súborov v bufferi}{M-delete}
+\key{označ súbory so zadanou príponou}{* .}
+\key{označ všetky adresáre}{* /}
+\key{označ všetky symbolické odkazy}{* @}
+\key{označ všetky spustiteľné súbory}{* *}
+\key{invertuj označenie}{* t}
+\key{označ všetky súbory v aktuálnom podadresári}{* s}
+\key{označ súbory vyhovujíce regulárnemu výrazu}{* \%}
+\key{zmeň značku na iné písmeno}{* c}
+\key{označ súbory, pre ktoré elispový výraz vrací t}{* ( \dx}
+
+\section{Modifikácia Dired bufferu}
+
+\key{vlož do tohto bufferu podadresár}{i}
+\key{odstráň označené súbory z bufferu}{k}
+\key{odstráň z bufferu výpis podadresára}{C-u k}
+\key{znovu načítaj adresár (značky sa zachovajú)}{g}
+\key{prepni triedenie adresára podľa mena/dátumu}{s}
+\key{uprav voľby príkazu ls}{C-u s}
+\key{obnov značky, skryté riadky a~pod.}{C-_}
+\key{skry všetky podadresáre}{M-\$}
+\key{skry alebo odkry všetky podadresáre}{\$}
+
+\section{Príkazy nad označenými súbormi}
+
+\key{kopíruj súbor(y)}{C}
+\key{premenuj súbor alebo presuň súbory}{R}
+\key{zmeň vlastníka súboru(ov)}{O}
+\key{zmeň skupinu súboru(ov)}{G}
+\key{zmeň prístupové práva súboru(ov)}{M}
+\key{vytlač súbor(y)}{P}
+\key{zmeň názov súboru(ov) na malé písmená}{\% l}
+\key{zmeň názov súboru(ov) na veľké písmená}{\% u}
+\key{zmaž označené súbory}{D}
+%%\key{vykonaj uuencode alebo uudecode súboru(ov)}{U}
+\key{skomprimuj alebo dekomprimuj súbor(y)}{Z}
+\key{spusti info na súbore}{I \dx}
+\key{vytvor symbolický(é) odkaz(y)}{S}
+\key{vytvor relatívne symbolické odkazy}{Y}
+\key{vytvor pevný odkaz}{H}
+\key{prehľadaj súbory -- hľadaj regulárny výraz}{A}
+\key{nahraď regulárne výrazy}{Q}
+\key{prelož súbory (byte-compile)}{B}
+\key{načítaj súbory (load-file)}{L}
+\key{spusti príkaz nad súborom(mi)}{!}
+
+\section{Označenie súborov pre zmazanie}
+
+\leftline{\bf Odznačujúce príkazy mažú značku pre zmazanie}
+\key{označ súbor pre zmazanie}{d}
+%%\key{odstráň značku pre zmazanie}{delete}
+\key{označ všetky zálohy (súbory končiace na \~{})}{\~{}}
+\key{označ všetky zálohy (auto-save)}{\#}
+\key{označ rôzne dočasné súbory}{\% \&}
+\key{označ číslované zálohy (končiace na .\~{}1\~{} a~pod.)}{.}
+\key{vymaž súbory označené na zmazanie}{x}
+\key{označ súbory vyhovujúce regulárnemu výrazu}{\% d}
+
+\section{Príkazy s regulárnymi výrazmi}
+
+\key{označ súbory vyhovujúce regulárnemu výrazu}{\% m}
+\key{skopíruj označené súbory obsahujúce regexp}{\% C}
+\key{premenuj označené súbory vyhovujúce regexp}{\% R}
+\key{pevný odkaz}{\% H}
+\key{symbolický odkaz}{\% S}
+\key{symbolický odkaz s relatívnou cestou}{\% Y}
+\key{označ pre zmazanie}{\% d}
 
 \section{Dired a Find}
-\metax{otvor v dired s�bory vyhovuj�ce vzorke}{M-x find-name-dired}
-\metax{otvor v dired s�bory obsahuj�ce vzorku}{M-x find-grep-dired}
-\metax{otvor v dired s�bory pod�a v�stupu \kbd{find}}{M-x find-dired}
+\metax{otvor v dired súbory vyhovujúce vzorke}{M-x find-name-dired}
+\metax{otvor v dired súbory obsahujúce vzorku}{M-x find-grep-dired}
+\metax{otvor v dired súbory podľa výstupu \kbd{find}}{M-x find-dired}
 
-\section{N�poveda}
+\section{Nápoveda}
 
-\key{zobraz n�povedu}{h}
-\key{preh�ad pr�kazov dired}{?}
+\key{zobraz nápovedu}{h}
+\key{prehľad príkazov dired}{?}
 
 \copyrightnotice
 
@@ -408,5 +403,4 @@ For copies of the GNU Emacs manual, see:
 
 % Local variables:
 % compile-command: "csplain sk-dired-ref"
-% coding: iso-latin-2
 % End:
diff --git a/etc/refcards/sk-refcard.tex b/etc/refcards/sk-refcard.tex
index 9a11299..a8d0760 100644
--- a/etc/refcards/sk-refcard.tex
+++ b/etc/refcards/sk-refcard.tex
@@ -1,13 +1,13 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996-1997, 2001-2014 Free Software
+% Copyright (C) 1987, 1993, 1996-1997, 2001-2015 Free Software
 % Foundation, Inc.
 
 % Author: Stephen Gildea <address@hidden>
 % Czech translation: Jan Buchal <address@hidden>, January 1999
 %      Milan Zamazal <address@hidden>, August 1999
-%      Pavel Jan�k <address@hidden>, November 2000 (Emacs 21)
-% Slozak translation: Miroslav Va�ko <address@hidden>, March 2001
+%      Pavel Janík <address@hidden>, November 2000 (Emacs 21)
+% Slovak translation: Miroslav Vaško <address@hidden>, March 2001
 
 % This file is part of GNU Emacs.
 
@@ -50,11 +50,6 @@
 % Slovak hyphenation rules applied
 \shyph
 
-% Without this, pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
-% aborts with: "! UTF-8 INPUT IS CORRUPTED !
-% May be you are using another input encoding"
-\input utf8off
-
 % This file can be printed with 1, 2, or 3 columns per page.
 % Specify how many you want here.
 \newcount\columnsperpage
@@ -78,7 +73,7 @@
 \centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.}
 \centerline{For GNU Emacs version \versionemacs}
 \centerline{Designed by Stephen Gildea}
-\centerline{Translated by Miroslav Va�ko}
+\centerline{Translated by Miroslav Vaško}
 
 Permission is granted to make and distribute copies of
 this card provided the copyright notice and this permission notice
@@ -265,67 +260,67 @@ For copies of the GNU Emacs manual, see:
 %**end of header
 
 
-\title{GNU Emacs -- Referen�n� karta}
+\title{GNU Emacs -- Referenčná karta}
 
 \centerline{(pre verziu \versionemacs)}
 
 \section{Spustenie Emacsu}
 
-Pre spustenie GNU~Emacsu~\versionemacs{} nap�te jeho meno: \kbd{emacs}
+Pre spustenie GNU~Emacsu~\versionemacs{} napíšte jeho meno: \kbd{emacs}
 
-Ako na��ta� a editova� s�bory sa dozviete ni��ie v~oddiele S�bory.
+Ako načítať a editovať súbory sa dozviete nižšie v~oddiele Súbory.
 
 
-\section{Ukon�enie Emacsu}
+\section{Ukončenie Emacsu}
 
-\key{pozastavenie (zmen�enie do ikony v~X11)}{C-z}
-\key{definit�vny odchod z~Emacsu}{C-x C-c}
+\key{pozastavenie (zmenšenie do ikony v~X11)}{C-z}
+\key{definitívny odchod z~Emacsu}{C-x C-c}
 
-\section{S�bory}
+\section{Súbory}
 
-\key{{\bf na��ta�} s�bor do Emacsu}{C-x C-f}
-\key{{\bf ulo�i�} s�bor sp� na disk}{C-x C-s}
-\key{ulo�i� {\bf v�etky} s�bory}{C-x s}
-\key{{\bf vlo�i�} obsah in�ho s�boru do bufferu}{C-x i}
-\key{zameni� tento s�bor in�m s�borom}{C-x C-v}
-\key{zap�sa� buffer do zadan�ho s�boru}{C-x C-w}
-\key{vlo�i� do syst�mu spr�vy verzi�}{C-x C-q}
+\key{{\bf načítať} súbor do Emacsu}{C-x C-f}
+\key{{\bf uložiť} súbor späť na disk}{C-x C-s}
+\key{uložiť {\bf všetky} súbory}{C-x s}
+\key{{\bf vložiť} obsah iného súboru do bufferu}{C-x i}
+\key{zameniť tento súbor iným súborom}{C-x C-v}
+\key{zapísať buffer do zadaného súboru}{C-x C-w}
+\key{vložiť do systému správy verzií}{C-x C-q}
 
-\section{Pou��vanie n�povedy}
+\section{Používanie nápovedy}
 
-Syst�m n�povedy je jednoduch�. Stla�te \kbd{C-h} (alebo \kbd{F1}) a sledujte
-in�trukcie. �vodn� {\bf t�torial} je mo�n� spusti� pomocou \kbd{C-h t}.
+Systém nápovedy je jednoduchý. Stlačte \kbd{C-h} (alebo \kbd{F1}) a sledujte
+inštrukcie. Úvodný {\bf tútorial} je možné spustiť pomocou \kbd{C-h t}.
 
-\key{odstr�ni� okno s~n�povedou}{C-x 1}
-\key{rolova� okno s~n�povedou}{C-M-v}
+\key{odstrániť okno s~nápovedou}{C-x 1}
+\key{rolovať okno s~nápovedou}{C-M-v}
 
-\key{apropos: pr�kazy zodpovedaj�ce re�azcu}{C-h a}
-\key{zobrazi� funkciu danej kl�vesy}{C-h c}
-\key{zobrazi� popis funkcie}{C-h f}
-\key{zobrazi� inform�cie o~aktu�lnych m�doch}{C-h m}
+\key{apropos: príkazy zodpovedajúce reťazcu}{C-h a}
+\key{zobraziť funkciu danej klávesy}{C-h c}
+\key{zobraziť popis funkcie}{C-h f}
+\key{zobraziť informácie o~aktuálnych módoch}{C-h m}
 
-\section{Opravy ch�b}
+\section{Opravy chýb}
 
-\key{{\bf preru�i�} vkladan� alebo vykon�van� pr�kaz}{C-g}
-\metax{{\bf obnovi�} s�bor straten� p�dom syst�mu}{M-x recover-file}
-\key{{\bf zru�i�} nechcen� zmenu}{C-x u {\it n.} C-_}
-\metax{vr�ti� p�vodn� obsah bufferu}{M-x revert-buffer}
-\key{prekresli� \uv{rozpadnut�} obrazovku}{C-l}
+\key{{\bf prerušiť} vkladaný alebo vykonávaný príkaz}{C-g}
+\metax{{\bf obnoviť} súbor stratený pádom systému}{M-x recover-file}
+\key{{\bf zrušiť} nechcenú zmenu}{C-x u {\it n.} C-_}
+\metax{vrátiť pôvodný obsah bufferu}{M-x revert-buffer}
+\key{prekresliť \uv{rozpadnutú} obrazovku}{C-l}
 
-\section{Inkrement�lne vyh�ad�vanie}
+\section{Inkrementálne vyhľadávanie}
 
-\key{vyh�ada� vpred}{C-s}
-\key{vyh�ada� vzad}{C-r}
-\key{vyh�ada� regul�rny v�raz}{C-M-s}
-\key{vyh�ada� regul�rny v�raz dozadu}{C-M-r}
-\key{predch�dzaj�ci vyh�ad�van� re�azec}{M-p}
-\key{nasleduj�c� nov�� vyh�ad�van� re�azec}{M-n}
-\key{ukon�i� inkrement�lne vyh�ad�vanie}{RET}
-\key{zru�i� efekt posledn�ho zadan�ho znaku}{DEL}
-\key{preru�i� prebiehaj�ce vyh�ad�vanie}{C-g}
+\key{vyhľadať vpred}{C-s}
+\key{vyhľadať vzad}{C-r}
+\key{vyhľadať regulárny výraz}{C-M-s}
+\key{vyhľadať regulárny výraz dozadu}{C-M-r}
+\key{predchádzajúci vyhľadávaný reťazec}{M-p}
+\key{nasledujúcí novší vyhľadávaný reťazec}{M-n}
+\key{ukončiť inkrementálne vyhľadávanie}{RET}
+\key{zrušiť efekt posledného zadaného znaku}{DEL}
+\key{prerušiť prebiehajúce vyhľadávanie}{C-g}
 
-�al�ie \kbd{C-s} alebo \kbd{C-r} zopakuje vyh�ad�vanie v~danom smere. Ak
-Emacs vyh�ad�va, \kbd{C-g} zru�� iba nen�jden� �as� re�azca.
+Ďalšie \kbd{C-s} alebo \kbd{C-r} zopakuje vyhľadávanie v~danom smere. Ak
+Emacs vyhľadáva, \kbd{C-g} zruší iba nenájdenú časť reťazca.
 
 
 \shortcopyrightnotice
@@ -337,307 +332,307 @@ Emacs vyh
 \threecol{znak}{C-b}{C-f}
 \threecol{slovo}{M-b}{M-f}
 \threecol{riadok}{C-p}{C-n}
-\threecol{na za�iatok alebo koniec riadku}{C-a}{C-e}
+\threecol{na začiatok alebo koniec riadku}{C-a}{C-e}
 \threecol{vetu}{M-a}{M-e}
 \threecol{odstavec}{M-\{}{M-\}}
-\threecol{str�nku}{C-x [}{C-x ]}
-\threecol{symbolick� v�raz}{C-M-b}{C-M-f}
+\threecol{stránku}{C-x [}{C-x ]}
+\threecol{symbolický výraz}{C-M-b}{C-M-f}
 \threecol{funkciu}{C-M-a}{C-M-e}
-\threecol{na za�iatok alebo koniec bufferu}{M-<}{M->}
+\threecol{na začiatok alebo koniec bufferu}{M-<}{M->}
 }
 
-\key{rolova� na �al�iu obrazovku}{C-v}
-\key{rolova� na predch�dzaj�cu obrazovku}{M-v}
-\key{rolova� v�avo}{C-x <}
-\key{rolova� vpravo}{C-x >}
-\key{aktu�lny riadok do stredu obrazovky}{C-u C-l}
+\key{rolovať na ďalšiu obrazovku}{C-v}
+\key{rolovať na predchádzajúcu obrazovku}{M-v}
+\key{rolovať vľavo}{C-x <}
+\key{rolovať vpravo}{C-x >}
+\key{aktuálny riadok do stredu obrazovky}{C-u C-l}
 
-\section{Ru�enie a mazanie}
+\section{Rušenie a mazanie}
 
 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
-\threecol{{\bf ru�en� objekt }}{{\bf vzad}}{{\bf vpred}}
-\threecol{znak (mazanie, nie ru�enie)}{DEL}{C-d}
+\threecol{{\bf rušený objekt }}{{\bf vzad}}{{\bf vpred}}
+\threecol{znak (mazanie, nie rušenie)}{DEL}{C-d}
 \threecol{slovo}{M-DEL}{M-d}
 \threecol{riadok (do konca)}{M-0 C-k}{C-k}
 \threecol{veta}{C-x DEL}{M-k}
-\threecol{symbolick� v�raz}{M-- C-M-k}{C-M-k}
+\threecol{symbolický výraz}{M-- C-M-k}{C-M-k}
 }
 
-\key{zru�i� {\bf oblas�}}{C-w}
-\key{skop�rova� oblas� do schr�nky}{M-w}
-\key{zru�i� a� po najbli��� v�skyt znaku {\it znak}}{M-z {\it znak}}
+\key{zrušiť {\bf oblasť}}{C-w}
+\key{skopírovať oblasť do schránky}{M-w}
+\key{zrušiť až po najbližší výskyt znaku {\it znak}}{M-z {\it znak}}
 
-\key{vhodi� naposledy zru�en� objekt}{C-y}
-\key{nahradi� vhoden� objekt predch�dzaj�cim zru�en�m}{M-y}
+\key{vhodiť naposledy zrušený objekt}{C-y}
+\key{nahradiť vhodený objekt predchádzajúcim zrušeným}{M-y}
 
-\section{Ozna�ovanie}
+\section{Označovanie}
 
-\key{vlo�i� zna�ku}{C-@ {\it n.} C-SPC}
-\key{prehodi� kurzor a zna�ku}{C-x C-x}
+\key{vložiť značku}{C-@ {\it n.} C-SPC}
+\key{prehodiť kurzor a značku}{C-x C-x}
 
-\key{ozna�i� zadan� po�et {\bf address@hidden
-\key{ozna�i� {\bf odstavec}}{M-h}
-\key{ozna�i� {\bf str�nku}}{C-x C-p}
-\key{ozna�i� {\bf symbolick� address@hidden
-\key{ozna�i� {\bf funkciu}}{C-M-h}
-\key{ozna�i� cel� {\bf buffer}}{C-x h}
+\key{označiť zadaný počet {\bf address@hidden
+\key{označiť {\bf odstavec}}{M-h}
+\key{označiť {\bf stránku}}{C-x C-p}
+\key{označiť {\bf symbolický address@hidden
+\key{označiť {\bf funkciu}}{C-M-h}
+\key{označiť celý {\bf buffer}}{C-x h}
 
-\section{Interakt�vne nahradzovanie}
+\section{Interaktívne nahradzovanie}
 
-\key{interakt�vne nahradi� textov� re�azec}{M-\%}
-\metax{s~pou�it�m regul�rneho v�razu}{M-x query-replace-regexp}
+\key{interaktívne nahradiť textový reťazec}{M-\%}
+\metax{s~použitím regulárneho výrazu}{M-x query-replace-regexp}
 
-Platn� odpovede v~m�de query-replace s�
+Platné odpovede v~móde query-replace sú
 
-\key{{\bf nahradi�} a �s� na �al�ie}{SPC}
-\key{nahradi� a zosta� na mieste}{,}
-\key{{\bf sko�i�} na �al�ie bez nahradenia}{DEL}
-\key{zameni� v�etky zost�vaj�ce v�skyty}{!}
-\key{{\bf sp�} na predch�dzaj�ci v�skyt re�azca}{^}
+\key{{\bf nahradiť} a ísť na ďalšie}{SPC}
+\key{nahradiť a zostať na mieste}{,}
+\key{{\bf skočiť} na ďalšie bez nahradenia}{DEL}
+\key{zameniť všetky zostávajúce výskyty}{!}
+\key{{\bf späť} na predchádzajúci výskyt reťazca}{^}
 \key{{\bf koniec} nahradzovania}{RET}
-\key{rekurz�vne editovanie (ukon�� sa \kbd{C-M-c})}{C-r}
+\key{rekurzívne editovanie (ukončí sa \kbd{C-M-c})}{C-r}
 
-\section{Okn�}
+\section{Okná}
 
-Ak s� zobrazen� dva pr�kazy, potom ten druh� plat� pre Xov� okno.
+Ak sú zobrazené dva príkazy, potom ten druhý platí pre Xové okno.
 
-\key{zru�i� v�etky ostatn� okn�}{C-x 1}
+\key{zrušiť všetky ostatné okná}{C-x 1}
 
 {\setbox0=\hbox{\kbd{0}}\advance\hsize by 0\wd0
 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
-\threecol{rozdeli� okno na horn� a doln�}{C-x 2\ \ \ \ }{C-x 5 2}
-\threecol{zru�i� toto okno}{C-x 0\ \ \ \ }{C-x 5 0}
+\threecol{rozdeliť okno na horné a dolné}{C-x 2\ \ \ \ }{C-x 5 2}
+\threecol{zrušiť toto okno}{C-x 0\ \ \ \ }{C-x 5 0}
 }}
-\key{rozdeli� okno na �av� a prav�}{C-x 3}
+\key{rozdeliť okno na ľavé a pravé}{C-x 3}
 
-\key{rolova� in� okno}{C-M-v}
+\key{rolovať iné okno}{C-M-v}
 
 {\setbox0=\hbox{\kbd{0}}\advance\hsize by 2\wd0
 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
-\threecol{prepn�� kurzor do in�ho okna}{C-x o}{C-x 5 o}
-
-\threecol{vybra� buffer v~inom okne}{C-x 4 b}{C-x 5 b}
-\threecol{zobrazi� buffer v~inom okne}{C-x 4 C-o}{C-x 5 C-o}
-\threecol{otvori� s�bor v~inom okne}{C-x 4 f}{C-x 5 f}
-\threecol{otvori� s�bor iba pre ��tanie v~inom okne}{C-x 4 r}{C-x 5 r}
-\threecol{spusti� Dired v~inom okne}{C-x 4 d}{C-x 5 d}
-\threecol{n�js� tag v~inom okne}{C-x 4 .}{C-x 5 .}
+\threecol{prepnúť kurzor do iného okna}{C-x o}{C-x 5 o}
+
+\threecol{vybrať buffer v~inom okne}{C-x 4 b}{C-x 5 b}
+\threecol{zobraziť buffer v~inom okne}{C-x 4 C-o}{C-x 5 C-o}
+\threecol{otvoriť súbor v~inom okne}{C-x 4 f}{C-x 5 f}
+\threecol{otvoriť súbor iba pre čítanie v~inom okne}{C-x 4 r}{C-x 5 r}
+\threecol{spustiť Dired v~inom okne}{C-x 4 d}{C-x 5 d}
+\threecol{nájsť tag v~inom okne}{C-x 4 .}{C-x 5 .}
 }}
 
-\key{zv��i� okno}{C-x ^}
-\key{z��i� okno}{C-x \{}
-\key{roz��ri� okno}{C-x \}}
+\key{zväčšiť okno}{C-x ^}
+\key{zúžiť okno}{C-x \{}
+\key{rozšíriť okno}{C-x \}}
 
-\section{Form�tovanie}
+\section{Formátovanie}
 
-\key{odsadi� aktu�lny {\bf riadok} (pod�a m�du)}{TAB}
-\key{odsadi� {\bf oblas�} (pod�a m�du)}{C-M-\\}
-\key{odsadi� {\bf symbolick� v�raz} (pod�a m�du)}{C-M-q}
-\key{odsadi� oblas� napevno o~{\it argument\/} st�pcov}{C-x TAB}
+\key{odsadiť aktuálny {\bf riadok} (podľa módu)}{TAB}
+\key{odsadiť {\bf oblasť} (podľa módu)}{C-M-\\}
+\key{odsadiť {\bf symbolický výraz} (podľa módu)}{C-M-q}
+\key{odsadiť oblasť napevno o~{\it argument\/} stĺpcov}{C-x TAB}
 
-\key{vlo�i� znak nov�ho riadku za kurzor}{C-o}
-\key{posun�� zbytok riadku zvisle dole}{C-M-o}
-\key{zmaza� pr�zdne riadky okolo kurzoru}{C-x C-o}
-\key{spoji� riadok s~predch�dzaj�cim (s~arg.~s~nasl.)}{M-^}
-\key{zmaza� pr�zdne miesto okolo kurzoru}{M-\\}
-\key{necha� presne jednu medzeru okolo kurzoru}{M-SPC}
+\key{vložiť znak nového riadku za kurzor}{C-o}
+\key{posunúť zbytok riadku zvisle dole}{C-M-o}
+\key{zmazať prázdne riadky okolo kurzoru}{C-x C-o}
+\key{spojiť riadok s~predchádzajúcim (s~arg.~s~nasl.)}{M-^}
+\key{zmazať prázdne miesto okolo kurzoru}{M-\\}
+\key{nechať presne jednu medzeru okolo kurzoru}{M-SPC}
 
-\key{zalomi� odstavec}{M-q}
-\key{nastavi� st�pec pre zalamovanie}{C-x f}
-\key{nastavi� prefix, ktor�m za��naj� riadky}{C-x .}
-\key{nastavi� font}{M-g}
+\key{zalomiť odstavec}{M-q}
+\key{nastaviť stĺpec pre zalamovanie}{C-x f}
+\key{nastaviť prefix, ktorým začínajú riadky}{C-x .}
+\key{nastaviť font}{M-g}
 
-\section{Zmena ve�kosti p�smen}
+\section{Zmena veľkosti písmen}
 
-\key{zmeni� p�smen� slova na ve�k�}{M-u}
-\key{zmeni� p�smen� slova na mal�}{M-l}
-\key{zmeni� za�iato�n� p�smeno slova na ve�k�}{M-c}
+\key{zmeniť písmená slova na veľké}{M-u}
+\key{zmeniť písmená slova na malé}{M-l}
+\key{zmeniť začiatočné písmeno slova na veľké}{M-c}
 
-\key{zmeni� p�smen� oblasti na ve�k�}{C-x C-u}
-\key{zmeni� p�smen� oblasti na mal�}{C-x C-l}
+\key{zmeniť písmená oblasti na veľké}{C-x C-u}
+\key{zmeniť písmená oblasti na malé}{C-x C-l}
 
 \section{Minibuffer}
 
-Nasleduj�ce kl�vesy s� platn� pre minibuffer.
+Nasledujúce klávesy sú platné pre minibuffer.
 
-\key{doplni� z~ponuky}{TAB}
-\key{doplni� do najbli��ieho slova}{SPC}
-\key{doplni� a vykona�}{RET}
-\key{zobrazi� mo�n� doplnenia}{?}
-\key{predch�dzaj�ci pr�kaz z~minibufferu}{M-p}
-\key{nov�� alebo implicitn� pr�kaz z~minibufferu}{M-n}
-\key{vyh�ada� regul�rny v�raz v~hist�rii vzad}{M-r}
-\key{vyh�ada� regul�rny v�raz v~hist�rii vpred}{M-s}
-\key{zru�i� pr�kaz}{C-g}
+\key{doplniť z~ponuky}{TAB}
+\key{doplniť do najbližšieho slova}{SPC}
+\key{doplniť a vykonať}{RET}
+\key{zobraziť možné doplnenia}{?}
+\key{predchádzajúci príkaz z~minibufferu}{M-p}
+\key{novší alebo implicitný príkaz z~minibufferu}{M-n}
+\key{vyhľadať regulárny výraz v~histórii vzad}{M-r}
+\key{vyhľadať regulárny výraz v~histórii vpred}{M-s}
+\key{zrušiť príkaz}{C-g}
 
-Stla�te \kbd{C-x ESC ESC} pre editovanie a zopakovanie posledn�ho pr�kazu
-z~minibufferu.  Stla�te \kbd{F10} pre aktiv�ciu menu v~minibufferi.
+Stlačte \kbd{C-x ESC ESC} pre editovanie a zopakovanie posledného príkazu
+z~minibufferu.  Stlačte \kbd{F10} pre aktiváciu menu v~minibufferi.
 
 \newcolumn
-\title{GNU Emacs -- Referen�n� karta}
+\title{GNU Emacs -- Referenčná karta}
 
 \section{Buffery}
 
-\key{vybra� in� buffer}{C-x b}
-\key{zoznam v�etk�ch bufferov}{C-x C-b}
-\key{zru�i� buffer}{C-x k}
+\key{vybrať iný buffer}{C-x b}
+\key{zoznam všetkých bufferov}{C-x C-b}
+\key{zrušiť buffer}{C-x k}
 
-\section{V�meny}
+\section{Výmeny}
 
-\key{prehodi� {\bf znaky}}{C-t}
-\key{prehodi� {\bf slov�}}{M-t}
-\key{prehodi� {\bf riadky}}{C-x C-t}
-\key{prehodi� {\bf symbolick� v�razy}}{C-M-t}
+\key{prehodiť {\bf znaky}}{C-t}
+\key{prehodiť {\bf slová}}{M-t}
+\key{prehodiť {\bf riadky}}{C-x C-t}
+\key{prehodiť {\bf symbolické výrazy}}{C-M-t}
 
 \section{Kontrola pravopisu}
 
-\key{kontrola pravopisu aktu�lneho slova}{M-\$}
-\metax{kontrola pravopisu v�etk�ch slov v  oblasti}{M-x ispell-region}
-\metax{kontrola pravopisu cel�ho bufferu}{M-x ispell-buffer}
+\key{kontrola pravopisu aktuálneho slova}{M-\$}
+\metax{kontrola pravopisu všetkých slov v  oblasti}{M-x ispell-region}
+\metax{kontrola pravopisu celého bufferu}{M-x ispell-buffer}
 
 \section{Tagy}
 
-\key{n�js� tag (defin�ciu)}{M-.}
-\key{n�js� �al�� v�skyt tagu}{C-u M-.}
-\metax{zada� s�bor s nov�mi tagmi}{M-x visit-tags-table}
+\key{nájsť tag (definíciu)}{M-.}
+\key{nájsť ďalší výskyt tagu}{C-u M-.}
+\metax{zadať súbor s novými tagmi}{M-x visit-tags-table}
 
-\metax{vyh�ada� reg.\ v�raz v~s�boroch s~tagmi}{M-x tags-search}
-\metax{spusti� nahradzovanie pre doty�n� s�bory}{M-x tags-query-replace}
-\key{pokra�ova� v~preh�ad�van� alebo nahradzovan�}{M-,}
+\metax{vyhľadať reg.\ výraz v~súboroch s~tagmi}{M-x tags-search}
+\metax{spustiť nahradzovanie pre dotyčné súbory}{M-x tags-query-replace}
+\key{pokračovať v~prehľadávaní alebo nahradzovaní}{M-,}
 
-\section{Pr�kazov� interpr�t}
+\section{Príkazový interprét}
 
-\key{vykona� shellovsk� pr�kaz}{M-!}
-\key{vykona� shellovsk� pr�kaz nad oblas�ou}{M-|}
-\key{prefiltrova� oblas� shellovsk�m pr�kazom}{C-u M-|}
-\key{spusti� shell v okne \kbd{*shell*}}{M-x shell}
+\key{vykonať shellovský príkaz}{M-!}
+\key{vykonať shellovský príkaz nad oblasťou}{M-|}
+\key{prefiltrovať oblasť shellovským príkazom}{C-u M-|}
+\key{spustiť shell v okne \kbd{*shell*}}{M-x shell}
 
-\section{Obd�niky}
+\section{Obdĺžniky}
 
-\key{skop�rova� obd�nik do registra}{C-x r r}
-\key{zru�i� obd�nik}{C-x r k}
-\key{vhodi� obd�nik}{C-x r y}
-\key{vlo�i� obd�nik medzier}{C-x r o}
-\key{nahradi� obd�nik obd�nikom medzier}{C-x r c}
-\key{nahradi� riadky obd�niku zadan�m re�azcom}{C-x r t}
+\key{skopírovať obdĺžnik do registra}{C-x r r}
+\key{zrušiť obdĺžnik}{C-x r k}
+\key{vhodiť obdĺžnik}{C-x r y}
+\key{vložiť obdĺžnik medzier}{C-x r o}
+\key{nahradiť obdĺžnik obdĺžnikom medzier}{C-x r c}
+\key{nahradiť riadky obdĺžniku zadaným reťazcom}{C-x r t}
 
 \section{Skratky}
 
-\key{prida� glob�lnu skratku}{C-x a g}
-\key{prida� lok�lnu skratku}{C-x a l}
-\key{prida� glob�lnu expanziu pre skratku }{C-x a i g}
-\key{prida� lok�lnu expanziu pre skratku}{C-x a i l}
-\key{expandova� skratku}{C-x a e}
+\key{pridať globálnu skratku}{C-x a g}
+\key{pridať lokálnu skratku}{C-x a l}
+\key{pridať globálnu expanziu pre skratku }{C-x a i g}
+\key{pridať lokálnu expanziu pre skratku}{C-x a i l}
+\key{expandovať skratku}{C-x a e}
 
-\key{dynamick� expanzia predch�dzaj�ceho slova}{M-/}
+\key{dynamická expanzia predchádzajúceho slova}{M-/}
 
-\section{Regul�rne v�razy}
+\section{Regulárne výrazy}
 
-\key{�ubovo�n� znak okrem nov�ho riadku}{. {\rm(te�ka)}}
-\key{�iadne alebo nieko�ko opakovan�}{*}
-\key{jedno alebo viac opakovan�}{+}
-\key{�iadne alebo jedno opakovanie}{?}
-\key{zru�i� zvl�tny v�znam znaku {\it c\/} vo v�raze}{\\{\it c}}
-\key{alternat�va (\uv{alebo})}{\\|}
+\key{ľubovoľný znak okrem nového riadku}{. {\rm(tečka)}}
+\key{žiadne alebo niekoľko opakovaní}{*}
+\key{jedno alebo viac opakovaní}{+}
+\key{žiadne alebo jedno opakovanie}{?}
+\key{zrušiť zvláštny význam znaku {\it c\/} vo výraze}{\\{\it c}}
+\key{alternatíva (\uv{alebo})}{\\|}
 \key{skupina}{\\( {\rm$\ldots$} \\)}
-\key{rovnak� text ako {\it n\/}-t� skupina}{\\{\it n}}
+\key{rovnaký text ako {\it n\/}-tá skupina}{\\{\it n}}
 \key{hranice slova}{\\b}
 \key{nie hranice slova}{\\B}
 
 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
-\threecol{{\bf element}}{{\bf za�iatok}}{{\bf koniec}}
+\threecol{{\bf element}}{{\bf začiatok}}{{\bf koniec}}
 \threecol{riadok}{^}{\$}
 \threecol{slovo}{\\<}{\\>}
 \threecol{buffer}{\\`}{\\'}
 
-\threecol{{\bf trieda znakov}}{{\bf zodpoved�}}{{\bf nezodpoved�}}
-\threecol{explicitn� mno�ina}{[ {\rm$\ldots$} ]}{[^ {\rm$\ldots$} ]}
-\threecol{slovotvorn� znak}{\\w}{\\W}
+\threecol{{\bf trieda znakov}}{{\bf zodpovedá}}{{\bf nezodpovedá}}
+\threecol{explicitná množina}{[ {\rm$\ldots$} ]}{[^ {\rm$\ldots$} ]}
+\threecol{slovotvorný znak}{\\w}{\\W}
 \threecol{znak so syntaxou {\it c}}{\\s{\it c}}{\\S{\it c}}
 }
 
-\section{Medzin�rodn� znakov� sady}
+\section{Medzinárodné znakové sady}
 
-\metax{zada� hlavn� jazyk}{M-x set-language-environment}
-\metax{zobrazi� v�etky vstupn� met�dy}{M-x list-input-methods}
-\key{zapn�� alebo vypn�� vstupn� met�du}{C-\\}
-\key{zada� k�dovanie pre nasleduj�ci pr�kaz}{C-x RET c}
-\metax{zobrazi� v�etky k�dovania}{M-x list-coding-systems}
-\metax{zmeni� preferovan� k�dovanie}{M-x prefer-coding-system}
+\metax{zadať hlavný jazyk}{M-x set-language-environment}
+\metax{zobraziť všetky vstupné metódy}{M-x list-input-methods}
+\key{zapnúť alebo vypnúť vstupnú metódu}{C-\\}
+\key{zadať kódovanie pre nasledujúci príkaz}{C-x RET c}
+\metax{zobraziť všetky kódovania}{M-x list-coding-systems}
+\metax{zmeniť preferované kódovanie}{M-x prefer-coding-system}
 
 \section{Info}
 
-\key{spusti� Info}{C-h i}
-\key{n�js� zadan� funkciu alebo premenn� v~Info}{C-h C-i}
+\key{spustiť Info}{C-h i}
+\key{nájsť zadanú funkciu alebo premennú v~Info}{C-h C-i}
 \beginindentedkeys
 
-Pohyb vo vn�tri uzlov:
+Pohyb vo vnútri uzlov:
 
 \key{rolovanie vpred}{SPC}
 \key{rolovanie vzad}{DEL}
-\key{na za�iatok uzla}{. {\rm (te�ka)}}
+\key{na začiatok uzla}{. {\rm (tečka)}}
 
 Pohyb medzi uzlami:
 
-\key{{\bf �al��} uzol}{n}
-\key{{\bf predch�dzaj�ci} uzol}{p}
-\key{{\bf nadraden�} uzol}{u}
-\key{vybra� z~menu pod�a n�zvu}{m}
-\key{vybra� {\it n\/}-t� polo�ku menu (1--9)}{{\it n}}
-\key{najbli��� nasleduj�ci kr�ov� odkaz (n�vrat \kbd{l})}{f}
-\key{vr�ti� sa do naposledy prezeran�ho uzlu}{l}
-\key{vr�ti� sa do adres�ra uzlov}{d}
-\key{prejs� do ktor�hoko�vek uzlu pod�a mena}{g}
+\key{{\bf ďalší} uzol}{n}
+\key{{\bf predchádzajúci} uzol}{p}
+\key{{\bf nadradený} uzol}{u}
+\key{vybrať z~menu podľa názvu}{m}
+\key{vybrať {\it n\/}-tú položku menu (1--9)}{{\it n}}
+\key{najbližší nasledujúci krížový odkaz (návrat \kbd{l})}{f}
+\key{vrátiť sa do naposledy prezeraného uzlu}{l}
+\key{vrátiť sa do adresára uzlov}{d}
+\key{prejsť do ktoréhokoľvek uzlu podľa mena}{g}
 
-�al�ie:
+Ďalšie:
 
-\key{spusti� {\bf t�torial} k~Infu}{h}
+\key{spustiť {\bf tútorial} k~Infu}{h}
 % \key{look up a subject in the indices}{i} % FIXME
-\key{vyh�ada� re�azec v uzloch}{M-s}
-\key{{\bf skon�i�} Info}{q}
+\key{vyhľadať reťazec v uzloch}{M-s}
+\key{{\bf skončiť} Info}{q}
 
 \endindentedkeys
 
 \section{Registre}
 
-\key{ulo�i� oblas� do registra}{C-x r s}
-\key{vlo�i� obsah registra do buffera}{C-x r i}
+\key{uložiť oblasť do registra}{C-x r s}
+\key{vložiť obsah registra do buffera}{C-x r i}
 
-\key{ulo�i� poz�ciu kurzoru do registra}{C-x r SPC}
-\key{sko�i� na poz�ciu ulo�en� v~registri}{C-x r j}
+\key{uložiť pozíciu kurzoru do registra}{C-x r SPC}
+\key{skočiť na pozíciu uloženú v~registri}{C-x r j}
 
-\section{Kl�vesov� makr�}
+\section{Klávesové makrá}
 
-\key{{\bf za�a�} definovanie kl�vesov�ho makra}{C-x (}
-\key{{\bf skon�i�} definovanie kl�vesov�ho makra}{C-x )}
-\key{{\bf vykona�} naposledy definovan� makro}{C-x e}
-\key{pripoji� k~posledn�mu kl�vesov�mu makru}{C-u C-x (}
-\metax{pomenova� posledn� makro}{M-x name-last-kbd-macro}
-\metax{vlo�i� do buffera lispov� defin�ciu}{M-x insert-kbd-macro}
+\key{{\bf začať} definovanie klávesového makra}{C-x (}
+\key{{\bf skončiť} definovanie klávesového makra}{C-x )}
+\key{{\bf vykonať} naposledy definované makro}{C-x e}
+\key{pripojiť k~poslednému klávesovému makru}{C-u C-x (}
+\metax{pomenovať posledné makro}{M-x name-last-kbd-macro}
+\metax{vložiť do buffera lispovú definíciu}{M-x insert-kbd-macro}
 
-\section{Pr�kazy s�visiace s~Emacs Lispom}
+\section{Príkazy súvisiace s~Emacs Lispom}
 
-\key{vyhodnoti� {\bf v�raz} pred kurzorom}{C-x C-e}
-\key{vyhodnoti� {\bf funkciu} pod kurzorom}{C-M-x}
-\metax{vyhodnoti� {\bf oblas�}}{M-x eval-region}
-\key{na��ta� a vyhodnoti� v�raz v~minibufferi}{M-:}
-\metax{na��ta� s�bor zo syst�mov�ho adres�ra}{M-x load-library}
+\key{vyhodnotiť {\bf výraz} pred kurzorom}{C-x C-e}
+\key{vyhodnotiť {\bf funkciu} pod kurzorom}{C-M-x}
+\metax{vyhodnotiť {\bf oblasť}}{M-x eval-region}
+\key{načítať a vyhodnotiť výraz v~minibufferi}{M-:}
+\metax{načítať súbor zo systémového adresára}{M-x load-library}
 
-\section{Jednoduch� prisp�sobenia}
+\section{Jednoduché prispôsobenia}
 
-\metax{nastavi� premenn� a faces}{M-x customize}
+\metax{nastaviť premenné a faces}{M-x customize}
 
 % The intended audience here is the person who wants to make simple
 % customizations and knows Lisp syntax.
 
-Defin�cia v�eobecnej kl�vesovej skratky v~Emacs Lispe (pr�klad):
+Definícia všeobecnej klávesovej skratky v~Emacs Lispe (príklad):
 
 \beginexample%
 (global-set-key "\\C-cg" 'goto-line)
 (global-set-key "\\M-\#" 'query-replace-regexp)
 \endexample
 
-\section{Z�pis pr�kazov}
+\section{Zápis príkazov}
 
 \beginexample%
 (defun \<command-name> (\<args>)
@@ -645,7 +640,7 @@ Defin
   \<body>)
 \endexample
 
-Pr�klad:
+Príklad:
 
 \beginexample%
 (defun this-line-to-top-of-window (line)
@@ -657,8 +652,8 @@ With ARG, put point on line ARG."
               (prefix-numeric-value line))))
 \endexample
 
-�pecifik�cia \kbd{interactive} vrav�, ako interakt�vne na��ta� ar\-gu\-men\-ty.
-Viac sa dozviete po vykonan� \kbd{C-h f interactive}.
+Špecifikácia \kbd{interactive} vraví, ako interaktívne načítať ar\-gu\-men\-ty.
+Viac sa dozviete po vykonaní \kbd{C-h f interactive}.
 
 \copyrightnotice
 
@@ -666,6 +661,4 @@ Viac sa dozviete po vykonan
 
 % Local variables:
 % compile-command: "csplain sk-refcard"
-% coding: iso-latin-2
 % End:
-
diff --git a/etc/refcards/sk-survival.tex b/etc/refcards/sk-survival.tex
index b7e3594..363716c 100644
--- a/etc/refcards/sk-survival.tex
+++ b/etc/refcards/sk-survival.tex
@@ -1,9 +1,9 @@
 % Title:  GNU Emacs Survival Card
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % Author: Wlodek Bzyl <address@hidden>
-% Czech translation: Pavel Jan�k <address@hidden>, March 2001
+% Czech translation: Pavel Janík <address@hidden>, March 2001
 % Slovak translation: Miroslav Vasko <address@hidden>, March 2001
 
 % This file is part of GNU Emacs.
@@ -55,11 +55,6 @@
 % Slovak hyphenation rules applied
 \shyph
 
-% Without this, pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
-% aborts with: "! UTF-8 INPUT IS CORRUPTED !
-% May be you are using another input encoding"
-\input utf8off
-
 \input emacsver.tex
 
 \def\copyrightnotice{\penalty-1\vfill
@@ -67,12 +62,12 @@
     Copyright \copyright\ \year\ Free Software Foundation, Inc.\break
     Pre GNU Emacs \versionemacs\break
     W{\l}odek Bzyl (address@hidden)\break
-    Do �e�tiny prelo�il Pavel Jan�k (address@hidden)\break
-    Do sloven�iny prelo�il Miroslav Va�ko (address@hidden)
+    Do češtiny preložil Pavel Janík (address@hidden)\break
+    Do slovenčiny preložil Miroslav Vaško (address@hidden)
 
-    K�pie tohto dokumentu m�ete vytv�ra� a ��ri�
-    za predpokladu, �e bud� obsahova� t�to pozn�mku
-    o autorsk�ch pr�vach.\par}}
+    Kópie tohto dokumentu môžete vytvárať a šíriť
+    za predpokladu, že budú obsahovať túto poznámku
+    o autorských právach.\par}}
 
 \hsize 3.2in
 \vsize 7.95in
@@ -175,244 +170,244 @@
 %**end of header
 
 
-\title{Karta\ \ pre\ \ pre�itie\ \ s\ \ GNU\ \ Emacsom}{pre verziu 
\versionemacs}
+\title{Karta\ \ pre\ \ prežitie\ \ s\ \ GNU\ \ Emacsom}{pre verziu 
\versionemacs}
 
-V~nasleduj�com texte \kbd{C-z} znamen�: stla�te kl�vesu {\it Ctrl}, dr�te ju
-a s��asne stla�te kl�vesu `\kbd{z}'. \kbd{M-z} znamen�, �e
-s��asne s kl�vesou {\it Meta\/} stla��te kl�vesu `\kbd{z}' ({\it Meta\/} je
-v��inou ozna�en� ako {\it Alt\/}) alebo m�ete pou�i� stla�enie
-kl�vesy {\it Esc\/} a potom `\kbd{z}'.
+V~nasledujúcom texte \kbd{C-z} znamená: stlačte klávesu {\it Ctrl}, držte ju
+a súčasne stlačte klávesu `\kbd{z}'. \kbd{M-z} znamená, že
+súčasne s klávesou {\it Meta\/} stlačíte klávesu `\kbd{z}' ({\it Meta\/} je
+väčšinou označená ako {\it Alt\/}) alebo môžete použiť stlačenie
+klávesy {\it Esc\/} a potom `\kbd{z}'.
 
 
 \section{Spustenie Emacsu}
 
-Pre spustenie GNU Emacsu jednoducho nap�te jeho meno: \kbd{emacs}.
-Emacs rozde�uje r�mec na nieko�ko �ast�:
+Pre spustenie GNU Emacsu jednoducho napíšte jeho meno: \kbd{emacs}.
+Emacs rozdeľuje rámec na niekoľko častí:
   riadok menu,
-  buffer s editovan�m textom,
-  tzv. mode line popisuj�ca buffer nad �ou
+  buffer s editovaným textom,
+  tzv. mode line popisujúca buffer nad ňou
   a minibuffer v poslednom riadku.
 \askip
-\key{C-x C-c} ukon�enie Emacsu
-\key{C-x C-f} editovanie s�boru; tento pr�kaz vyu��va minibuffer na pre��tanie
-              mena s�boru; tento pr�kaz pou�ite aj vtedy, ak chcete
-              vytvori� nov� s�bor zadan�ho mena
-\key{C-x C-s} ulo�i� s�bor
-\key{C-x k} zatvori� buffer
-\key{C-g} vo v��ine situ�ci�: zastavenie pr�ve vykon�vanej �innosti,
-              zru�enie zad�vania pr�kazu a~pod.
-\key{C-x u} obnovi�
+\key{C-x C-c} ukončenie Emacsu
+\key{C-x C-f} editovanie súboru; tento príkaz využíva minibuffer na prečítanie
+              mena súboru; tento príkaz použite aj vtedy, ak chcete
+              vytvoriť nový súbor zadaného mena
+\key{C-x C-s} uložiť súbor
+\key{C-x k} zatvoriť buffer
+\key{C-g} vo väčšine situácií: zastavenie práve vykonávanej činnosti,
+              zrušenie zadávania príkazu a~pod.
+\key{C-x u} obnoviť
 
 \section{Pohyb}
 
-\key{C-l} presun aktu�lneho riadku do stredu okna
-\key{C-x b} prepnutie do in�ho bufferu
-\key{M-<} presun na za�iatok bufferu
+\key{C-l} presun aktuálneho riadku do stredu okna
+\key{C-x b} prepnutie do iného bufferu
+\key{M-<} presun na začiatok bufferu
 \key{M->} presun na koniec bufferu
-\key{M-x goto-line} presun na riadok zadan�ho ��sla
+\key{M-x goto-line} presun na riadok zadaného čísla
 
 \section{Viac okien}
 
-\key{C-x 0} odstr�nenie aktu�lneho okna
-\key{C-x 1} aktu�lne okno sa stane jedin�m oknom
-\key{C-x 2} rozdelenie okna horizont�lne
-\key{C-x 3} rozdelenie okna vertik�lne
-\key{C-x o} presun do in�ho okna
+\key{C-x 0} odstránenie aktuálneho okna
+\key{C-x 1} aktuálne okno sa stane jediným oknom
+\key{C-x 2} rozdelenie okna horizontálne
+\key{C-x 3} rozdelenie okna vertikálne
+\key{C-x o} presun do iného okna
 
-\section{Regi�ny}
+\section{Regióny}
 
-Emacs definuje `regi�n' ako priestor medzi {\it zna�kou\/} a
-{\it bodom}. Zna�ka je nastaven� pomocou \kbd{C-{\it space}}.
-Bod je v mieste aktu�lnej poz�cie kurzoru.
+Emacs definuje `región' ako priestor medzi {\it značkou\/} a
+{\it bodom}. Značka je nastavená pomocou \kbd{C-{\it space}}.
+Bod je v mieste aktuálnej pozície kurzoru.
 \askip
-\key{M-h} ozna� cel� odstavec
-\key{C-x h} ozna� cel� buffer
+\key{M-h} označ celý odstavec
+\key{C-x h} označ celý buffer
 
-\section{Vystrihnutie a kop�rovanie}
+\section{Vystrihnutie a kopírovanie}
 
-\key{C-w} vystrihni regi�n
-\key{M-w} skop�ruj regi�n do kill-ringu
+\key{C-w} vystrihni región
+\key{M-w} skopíruj región do kill-ringu
 \key{C-k} vystrihni text od kurzora do konca riadku
 \key{M-DEL} vystrihni slovo
-\key{C-y} vlo� sp� posledn� vystrihnut� text (kombin�cia kl�ves \kbd{C-w C-y}
-          m�e by� pou�it� pre presuny textov)
-\key{M-y} nahra� naposledy vlo�en� text predch�dzaj�cim vystrihnut�m textom
+\key{C-y} vlož späť posledný vystrihnutý text (kombinácia kláves \kbd{C-w C-y}
+          môže byť použitá pre presuny textov)
+\key{M-y} nahraď naposledy vložený text predchádzajúcim vystrihnutým textom
 
-\section{Vyh�ad�vanie}
+\section{Vyhľadávanie}
 
-\key{C-s} h�adaj re�azec
-\key{C-r} h�adaj re�azec smerom vzad
-\key{RET} ukon�i h�adanie
-\key{M-C-s} h�adaj regul�rny v�raz
-\key{M-C-r} h�adaj regul�rny v�raz smerom vzad
+\key{C-s} hľadaj reťazec
+\key{C-r} hľadaj reťazec smerom vzad
+\key{RET} ukonči hľadanie
+\key{M-C-s} hľadaj regulárny výraz
+\key{M-C-r} hľadaj regulárny výraz smerom vzad
 \askip
-Kombin�ciu \kbd{C-s} alebo \kbd{C-r} m�ete pou�i� aj na opakovan� h�adanie
-t�m ist�m smerom.
+Kombináciu \kbd{C-s} alebo \kbd{C-r} môžete použiť aj na opakované hľadanie
+tým istým smerom.
 
-\section{Zna�ky (tags)}
+\section{Značky (tags)}
 
-Tabu�ky zna�iek (tags) zaznamen�vaj� polohu funkci� a proced�r, glob�lnych
-premenn�ch, d�tov�ch typov a in�ch. Pre vytvorenie tabu�ky zna�iek spustite
-pr�kaz `{\tt etags} {\it vstupn�\_s�bory}' v pr�kazovom interpr�tereri.
+Tabuľky značiek (tags) zaznamenávajú polohu funkcií a procedúr, globálnych
+premenných, dátových typov a iných. Pre vytvorenie tabuľky značiek spustite
+príkaz `{\tt etags} {\it vstupné\_súbory}' v príkazovom interprétereri.
 \askip
-\key{M-.} n�jdi defin�cu
-\key{C-u M-.} n�jdi �al�� v�skyt defin�cie
-\key{M-*} cho� tam, odkia� bola volan� posledn� \kbd{M-.}
-\mkey{M-x tags-query-replace} spusti query-replace na v�etk�ch s�boroch
-zaznamenan�ch v tabu�ke zna�iek.
-\key{M-,} pokra�uj v poslednom h�adan� zna�ky alebo query-replace
+\key{M-.} nájdi definícu
+\key{C-u M-.} nájdi ďalší výskyt definície
+\key{M-*} choď tam, odkiaľ bola volaná posledná \kbd{M-.}
+\mkey{M-x tags-query-replace} spusti query-replace na všetkých súboroch
+zaznamenaných v tabuľke značiek.
+\key{M-,} pokračuj v poslednom hľadaní značky alebo query-replace
 
 \section{Preklady}
 
-\key{M-x compile} prelo� k�d v akt�vnom okne
-\key{C-c C-c} cho� na posledn� chybu preklada�a, v okne prekladu
-\key{C-x `} v okne so zdrojov�m textom
+\key{M-x compile} prelož kód v aktívnom okne
+\key{C-c C-c} choď na poslednú chybu prekladača, v okne prekladu
+\key{C-x `} v okne so zdrojovým textom
 
-\section{Dired, editor adres�rov}
+\section{Dired, editor adresárov}
 
 \key{C-x d} spusti Dired
-\key{d} ozna� tento s�bor na zmazanie
-\key{\~{}} ozna� v�etky z�lohy na zmazanie
-\key{u} odstr�� v�etky zna�ky na zmazanie
-\key{x} zma� s�bory ozna�en� na zmazanie
-\key{C} kop�ruj s�bor
+\key{d} označ tento súbor na zmazanie
+\key{\~{}} označ všetky zálohy na zmazanie
+\key{u} odstráň všetky značky na zmazanie
+\key{x} zmaž súbory označené na zmazanie
+\key{C} kopíruj súbor
 \key{g} obnov buffer Diredu
-\key{f} otvor� s�bor v aktu�lnom riadku
-\key{s} prepni medzi trieden�m pod�a abecedy a d�tumu/�asu
+\key{f} otvorí súbor v aktuálnom riadku
+\key{s} prepni medzi triedením podľa abecedy a dátumu/času
 
-\section{��tanie a posielanie po�ty}
+\section{Čítanie a posielanie pošty}
 
-\key{M-x rmail} za�ni ��ta� po�tu
-\key{q} skon�i ��tanie po�ty
-\key{h} uk� hlavi�ky
-\key{d} ozna� aktu�lnu spr�vu na zmazanie
-\key{x} zma� v�etky spr�vy ozna�en� na zmazanie
+\key{M-x rmail} začni čítať poštu
+\key{q} skonči čítanie pošty
+\key{h} ukáž hlavičky
+\key{d} označ aktuálnu správu na zmazanie
+\key{x} zmaž všetky správy označené na zmazanie
 
-\key{C-x m} nov� spr�va
-\key{C-c C-c} po�li spr�vu a prepni sa do in�ho bufferu
-\key{C-c C-f C-c} presu� sa na hlavi�ku `CC', a ak neexistuje, tak ju
+\key{C-x m} nová správa
+\key{C-c C-c} pošli správu a prepni sa do iného bufferu
+\key{C-c C-f C-c} presuň sa na hlavičku `CC', a ak neexistuje, tak ju
 vytvor
 
-\section{R�zne}
+\section{Rôzne}
 
 \key{M-q} zarovnaj odstavec
-\key{M-/} dopl� dynamicky predch�dzaj�ce slovo
-\key{C-z} ikonizuj (preru�) Emacs
-\mkey{M-x revert-buffer} nahra� text editovan�ho s�boru t�m ist�m s�borom 
z~disku
+\key{M-/} doplň dynamicky predchádzajúce slovo
+\key{C-z} ikonizuj (preruš) Emacs
+\mkey{M-x revert-buffer} nahraď text editovaného súboru tým istým súborom 
z~disku
 
 \section{Nahradzovanie}
 
-\key{M-\%} interakt�vne h�adaj a nahradzuj
-\key{M-C-\%} s pou�it�m regul�rnych v�razov
+\key{M-\%} interaktívne hľadaj a nahradzuj
+\key{M-C-\%} s použitím regulárnych výrazov
 \askip
-Mo�n� odpovede v m�de h�adania s�
+Možné odpovede v móde hľadania sú
 \askip
-\key{SPC} nahra� tento v�skyt; cho� na �al��
-\key{,} nahra� tento v�skyt a skon�i
-\key{DEL} tento v�skyt nenahradzuj a cho� �alej
-\key{!} nahra� v�etky �al�ie v�skyty
-\key{\^{}} sp� na predch�dzaj�ci v�skyt
-\key{RET} skon�i query-replace
-\key{C-r} za�ni rekurz�vne editovanie (\kbd{M-C-c} ho skon��)
-
-\section{Regul�rne v�razy}
-
-\key{. {\rm(te�ka)}} �ubovo�n� znak okrem znaku nov�ho riadku
-\key{*} �iadne alebo viac opakovan�
-\key{+} jedno alebo viac opakovan�
-\key{?} �iadne alebo jedno opakovanie
-\key{[$\ldots$]} ozna�uje triedu znakov
+\key{SPC} nahraď tento výskyt; choď na ďalší
+\key{,} nahraď tento výskyt a skonči
+\key{DEL} tento výskyt nenahradzuj a choď ďalej
+\key{!} nahraď všetky ďalšie výskyty
+\key{\^{}} späť na predchádzajúci výskyt
+\key{RET} skonči query-replace
+\key{C-r} začni rekurzívne editovanie (\kbd{M-C-c} ho skončí)
+
+\section{Regulárne výrazy}
+
+\key{. {\rm(tečka)}} ľubovoľný znak okrem znaku nového riadku
+\key{*} žiadne alebo viac opakovaní
+\key{+} jedno alebo viac opakovaní
+\key{?} žiadne alebo jedno opakovanie
+\key{[$\ldots$]} označuje triedu znakov
 \key{[\^{}$\ldots$]} neguje triedu znakov
 
-\key{\\{\it c}} uvedenie znaku, ktor� by mal inak �peci�lny v�znam
-v~regul�rnom v�raze
+\key{\\{\it c}} uvedenie znaku, ktorý by mal inak špeciálny význam
+v~regulárnom výraze
 
-\key{$\ldots$\\|$\ldots$\\|$\ldots$} vyhovuje jednej z alternat�v (\uv{alebo})
-\key{\\( $\ldots$ \\)} zoskupenie nieko�k�ch vzorkov do jedn�ho
-\key{\\{\it n}} to ist� ako {\it n\/}-t� skupina
+\key{$\ldots$\\|$\ldots$\\|$\ldots$} vyhovuje jednej z alternatív (\uv{alebo})
+\key{\\( $\ldots$ \\)} zoskupenie niekoľkých vzorkov do jedného
+\key{\\{\it n}} to isté ako {\it n\/}-tá skupina
 
-\key{\^{}} vyhovuje na za�iatku riadku
+\key{\^{}} vyhovuje na začiatku riadku
 \key{\$} vyhovuje na konci riadku
 
-\key{\\w} vyhovuje znaku, ktor� m�e by� s��as�ou slova
-\key{\\W} vyhovuje znaku, ktor� nem�e by� s��as�ou slova
-\key{\\<} vyhovuje na za�iatku slova
+\key{\\w} vyhovuje znaku, ktorý môže byť súčasťou slova
+\key{\\W} vyhovuje znaku, ktorý nemôže byť súčasťou slova
+\key{\\<} vyhovuje na začiatku slova
 \key{\\>} vyhovuje na konci slova
-\key{\\b} vyhovuje medzislovn�m medzer�m
-\key{\\B} vyhovuje medzer�m, ktor� nie s� medzislovn�
+\key{\\b} vyhovuje medzislovným medzerám
+\key{\\B} vyhovuje medzerám, ktoré nie sú medzislovné
 
 \section{Registre}
 
-\key{C-x r s} ulo� regi�n do registra
-\key{C-x r i} vlo� obsah registra do bufferu
+\key{C-x r s} ulož región do registra
+\key{C-x r i} vlož obsah registra do bufferu
 
-\key{C-x r SPC} ulo� aktu�lnu poz�ciu kurzora do registra
-\key{C-x r j} sko� na poz�ciu kurzoru ulo�en� v registri
+\key{C-x r SPC} ulož aktuálnu pozíciu kurzora do registra
+\key{C-x r j} skoč na pozíciu kurzoru uloženú v registri
 
-\section{Obd�niky}
+\section{Obdĺžniky}
 
-\key{C-x r r} skop�ruj obd�nik do registra
-\key{C-x r k} vystrihni obd�nik
-\key{C-x r y} vlo� obd�nik
-\key{C-x r t} uvedenie ka�d�ho riadku re�azcom
+\key{C-x r r} skopíruj obdĺžnik do registra
+\key{C-x r k} vystrihni obdĺžnik
+\key{C-x r y} vlož obdĺžnik
+\key{C-x r t} uvedenie každého riadku reťazcom
 
-\key{C-x r o} otvor obd�nik, posu� text vpravo
-\key{C-x r c} vypr�zdni obd�nik
+\key{C-x r o} otvor obdĺžnik, posuň text vpravo
+\key{C-x r c} vyprázdni obdĺžnik
 
-\section{Pr�kazov� interpr�ter}
+\section{Príkazový interpréter}
 
-\key{M-x shell} spusti pr�kazov� interpr�ter v Emacsu
-\key{M-!} spusti pr�kaz pr�kazov�ho interpr�tera
-\key{M-|} spusti pr�kaz pr�kazov�ho interpr�tera na regi�ne
-\key{C-u M-|} filtruj regi�n cez pr�kaz pr�kazov�ho interpr�tera
+\key{M-x shell} spusti príkazový interpréter v Emacsu
+\key{M-!} spusti príkaz príkazového interprétera
+\key{M-|} spusti príkaz príkazového interprétera na regióne
+\key{C-u M-|} filtruj región cez príkaz príkazového interprétera
 
 \section{Kontrola pravopisu}
 
 \key{M-\$} skontroluj pravopis slova pod kurzorom
-\mkey{M-x ispell-region} skontroluj pravopis v�etk�ch slov v regi�ne
+\mkey{M-x ispell-region} skontroluj pravopis všetkých slov v regióne
 \mkey{M-x ispell-buffer} skontroluj pravopis v bufferi
 
-\section{Mezin�rodn� znakov� sady}
+\section{Mezinárodné znakové sady}
 
-\key{C-x RET C-\\} zvo� a aktivuj vstupn� met�du pre aktu�lny buffer
-\key{C-\\} aktivuj alebo deaktivuj vstupn� met�du
-\mkey{M-x list-input-methods} zobraz zoznam v�etk�ch vstupn�ch met�d
-\mkey{M-x set-language-environment} �pecifikuj hlavn� jazyk
+\key{C-x RET C-\\} zvoľ a aktivuj vstupnú metódu pre aktuálny buffer
+\key{C-\\} aktivuj alebo deaktivuj vstupnú metódu
+\mkey{M-x list-input-methods} zobraz zoznam všetkých vstupných metód
+\mkey{M-x set-language-environment} špecifikuj hlavný jazyk
 
-\key{C-x RET c} nastav k�dovac� syst�m pre nasleduj�ci pr�kaz
-\mkey{M-x find-file-literally} edituj s�bor bez ak�chko�vek konverzi�
+\key{C-x RET c} nastav kódovací systém pre nasledujúci príkaz
+\mkey{M-x find-file-literally} edituj súbor bez akýchkoľvek konverzií
 
-\mkey{M-x list-coding-systems} uk� v�etky k�dovacie syst�my
-\mkey{M-x prefer-coding-system} zvo� preferovan� k�dovac� syst�m
+\mkey{M-x list-coding-systems} ukáž všetky kódovacie systémy
+\mkey{M-x prefer-coding-system} zvoľ preferovaný kódovací systém
 
-\section{Kl�vesov� makr�}
+\section{Klávesové makrá}
 
-\key{C-x (} za�ni defin�ciu kl�vesov�ho makra
-\key{C-x )} ukon�i defin�ciu kl�vesov�ho makra
-\key{C-x e} spusti naposledy definovan� kl�vesov� makro
-\key{C-u C-x (} pridaj do naposledy definovan�ho kl�vesov�ho makra
-\mkey{M-x name-last-kbd-macro} pomenuj naposledy definovan� makro
+\key{C-x (} začni definíciu klávesového makra
+\key{C-x )} ukonči definíciu klávesového makra
+\key{C-x e} spusti naposledy definované klávesové makro
+\key{C-u C-x (} pridaj do naposledy definovaného klávesového makra
+\mkey{M-x name-last-kbd-macro} pomenuj naposledy definované makro
 
-\section{Jednoduch� nastavenie}
+\section{Jednoduché nastavenie}
 
-\key{M-x customize} jednoduch� nastavenie
+\key{M-x customize} jednoduché nastavenie
 
-\section{N�poveda}
+\section{Nápoveda}
 
-Emacs dop��a pr�kazy. Ak stla��te \kbd{M-x} {\it tab\/} alebo {\it
-space\/}, dostanete zoznam pr�kazov Emacsu.
+Emacs dopĺňa príkazy. Ak stlačíte \kbd{M-x} {\it tab\/} alebo {\it
+space\/}, dostanete zoznam príkazov Emacsu.
 \askip
-\key{C-h} n�poveda Emacsu
-\key{C-h t} spust� t�torial Emacsu
-\key{C-h i} spust� Info, prezera� dokument�cie
-\key{C-h a} uk�e pr�kazy vyhovuj�ce zadan�mu re�azcu (apropos)
-\key{C-h k} zobraz� dokument�ciu funkcie spustenej pomocou zadanej kl�vesy
+\key{C-h} nápoveda Emacsu
+\key{C-h t} spustí tútorial Emacsu
+\key{C-h i} spustí Info, prezerač dokumentácie
+\key{C-h a} ukáže príkazy vyhovujúce zadanému reťazcu (apropos)
+\key{C-h k} zobrazí dokumentáciu funkcie spustenej pomocou zadanej klávesy
 \askip
-Emacs pracuje v r�znych {\it m�doch}, ktor� upravuj� chovanie
-Emacsu pre editovan� text dan�ho typu. Mode line obsahuje men� aktu�lnych
-m�dov v z�tvork�ch.
+Emacs pracuje v rôznych {\it módoch}, ktoré upravujú chovanie
+Emacsu pre editovaný text daného typu. Mode line obsahuje mená aktuálnych
+módov v zátvorkách.
 \askip
-\key{C-h m} zobraz dokument�ciu aktu�lnych m�dov.
+\key{C-h m} zobraz dokumentáciu aktuálnych módov.
 
 \copyrightnotice
 
@@ -420,5 +415,4 @@ m
 
 % Local variables:
 % compile-command: "csplain sk-survival"
-% coding: iso-latin-2
 % End:
diff --git a/etc/refcards/survival.tex b/etc/refcards/survival.tex
index f77a746..da41617 100644
--- a/etc/refcards/survival.tex
+++ b/etc/refcards/survival.tex
@@ -1,7 +1,7 @@
 %&tex
 % Title:  GNU Emacs Survival Card
 
-% Copyright (C) 2000-2014 Free Software Foundation, Inc.
+% Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 % Author: Wlodek Bzyl <address@hidden>
 
diff --git a/etc/refcards/vipcard.tex b/etc/refcards/vipcard.tex
index 23f2632..fc0d6b4 100644
--- a/etc/refcards/vipcard.tex
+++ b/etc/refcards/vipcard.tex
@@ -1,6 +1,6 @@
 % Quick Reference Card for VIP
 
-% Copyright (C) 1987, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1987, 2001-2015 Free Software Foundation, Inc.
 
 % Author: Masahiko Sato <address@hidden>, <address@hidden>
 
diff --git a/etc/refcards/viperCard.tex b/etc/refcards/viperCard.tex
index ac51912..5a29449 100644
--- a/etc/refcards/viperCard.tex
+++ b/etc/refcards/viperCard.tex
@@ -1,6 +1,6 @@
 % ViperCard -- The Reference Card for Viper under GNU Emacs and XEmacs
 
-% Copyright (C) 1995-1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995-1997, 2001-2015 Free Software Foundation, Inc.
 
 % Author: Michael Kifer <address@hidden> (Viper)
 %      Aamod Sane <address@hidden> (VIP 4.3)
diff --git a/etc/schema/locate.rnc b/etc/schema/locate.rnc
index d44fb83..a67fa9e 100644
--- a/etc/schema/locate.rnc
+++ b/etc/schema/locate.rnc
@@ -1,4 +1,4 @@
-# Copyright (C) 2003-2004, 2007-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2004, 2007-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/etc/schema/relaxng.rnc b/etc/schema/relaxng.rnc
index b5bf09a..6527756 100644
--- a/etc/schema/relaxng.rnc
+++ b/etc/schema/relaxng.rnc
@@ -1,6 +1,6 @@
 # RELAX NG XML syntax expressed in RELAX NG Compact syntax.
 
-# Copyright (C) 2003-2004, 2007-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2004, 2007-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/etc/schema/schemas.xml b/etc/schema/schemas.xml
index b23913b..d164c15 100644
--- a/etc/schema/schemas.xml
+++ b/etc/schema/schemas.xml
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2003-2004, 2007-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 2003-2004, 2007-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/etc/ses-example.ses b/etc/ses-example.ses
index 81c39fd..9e36b6f 100644
--- a/etc/ses-example.ses
+++ b/etc/ses-example.ses
@@ -205,7 +205,7 @@ Sales summary - Acme fundraising
 ;;; ses--symbolic-formulas: (("Eastern area") ("West-district") 
("North&South") ("Other"))
 ;;; End:
 
-;;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;;; COPYING PERMISSIONS:
 ;;; 
diff --git a/etc/srecode/c.srt b/etc/srecode/c.srt
index e7eafed..18dcc91 100644
--- a/etc/srecode/c.srt
+++ b/etc/srecode/c.srt
@@ -1,6 +1,6 @@
 ;;; c.srt --- SRecode templates for c-mode
 
-;; Copyright (C) 2007-2010, 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2010, 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/cpp.srt b/etc/srecode/cpp.srt
index c75fafc..e325039 100644
--- a/etc/srecode/cpp.srt
+++ b/etc/srecode/cpp.srt
@@ -1,6 +1,6 @@
 ;;; cpp.srt --- SRecode templates for c++-mode
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/default.srt b/etc/srecode/default.srt
index 3271850..4d2128b 100644
--- a/etc/srecode/default.srt
+++ b/etc/srecode/default.srt
@@ -1,6 +1,6 @@
 ;;; default.srt --- SRecode templates for srecode-template-mode
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/doc-cpp.srt b/etc/srecode/doc-cpp.srt
index 60f0947..791f0b5 100644
--- a/etc/srecode/doc-cpp.srt
+++ b/etc/srecode/doc-cpp.srt
@@ -1,6 +1,6 @@
 ;; doc-c.srt --- SRecode templates for "document" applications
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/doc-default.srt b/etc/srecode/doc-default.srt
index 3ce3a64..646b141 100644
--- a/etc/srecode/doc-default.srt
+++ b/etc/srecode/doc-default.srt
@@ -1,6 +1,6 @@
 ;; doc-default.srt --- SRecode templates for "document" applications
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/doc-java.srt b/etc/srecode/doc-java.srt
index 1f5443a..d05f46a 100644
--- a/etc/srecode/doc-java.srt
+++ b/etc/srecode/doc-java.srt
@@ -1,6 +1,6 @@
 ;; doc-java.srt --- SRecode templates for "document" applications
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/ede-autoconf.srt b/etc/srecode/ede-autoconf.srt
index 13e8614..82c5a84 100644
--- a/etc/srecode/ede-autoconf.srt
+++ b/etc/srecode/ede-autoconf.srt
@@ -1,6 +1,6 @@
 ;;; ede/templates/autoconf.srt --- Templates for autoconf used by EDE
 
-;; Copyright (C) 2010, 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010, 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/ede-make.srt b/etc/srecode/ede-make.srt
index f5233be..7f7f47a 100644
--- a/etc/srecode/ede-make.srt
+++ b/etc/srecode/ede-make.srt
@@ -1,6 +1,6 @@
 ;; ede-make.srt --- SRecode templates for Makefiles used by EDE.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/el.srt b/etc/srecode/el.srt
index 197209d..14cd738 100644
--- a/etc/srecode/el.srt
+++ b/etc/srecode/el.srt
@@ -1,6 +1,6 @@
 ;;; el.srt --- SRecode templates for Emacs Lisp mode
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Ludlam <address@hidden>
 
diff --git a/etc/srecode/getset-cpp.srt b/etc/srecode/getset-cpp.srt
index 81913e3..4b9d99e 100644
--- a/etc/srecode/getset-cpp.srt
+++ b/etc/srecode/getset-cpp.srt
@@ -1,6 +1,6 @@
 ;;; getset-cpp.srt --- SRecode templates for C++ class getter/setters.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/java.srt b/etc/srecode/java.srt
index 65cd3a5..be63e6b 100644
--- a/etc/srecode/java.srt
+++ b/etc/srecode/java.srt
@@ -1,6 +1,6 @@
 ;; java.srt
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/make.srt b/etc/srecode/make.srt
index 806453c..79d9fea 100644
--- a/etc/srecode/make.srt
+++ b/etc/srecode/make.srt
@@ -1,6 +1,6 @@
 ;; make.srt
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/template.srt b/etc/srecode/template.srt
index 67615bc..430b78a 100644
--- a/etc/srecode/template.srt
+++ b/etc/srecode/template.srt
@@ -1,6 +1,6 @@
 ;;; template.srt --- Templates for Semantic Recoders
 
-;; Copyright (C) 2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Ludlam <address@hidden>
 
diff --git a/etc/srecode/test.srt b/etc/srecode/test.srt
index 1a1cd62..c76915a 100644
--- a/etc/srecode/test.srt
+++ b/etc/srecode/test.srt
@@ -1,6 +1,6 @@
 ;; test.srt --- SRecode templates for testing
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/texi.srt b/etc/srecode/texi.srt
index 0ed2224..aa6fa08 100644
--- a/etc/srecode/texi.srt
+++ b/etc/srecode/texi.srt
@@ -1,6 +1,6 @@
 ;; texi.srt --- SRecode templates for Texinfo
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/srecode/wisent.srt b/etc/srecode/wisent.srt
index 45405ed..71fb759 100644
--- a/etc/srecode/wisent.srt
+++ b/etc/srecode/wisent.srt
@@ -1,6 +1,6 @@
 ;; wisent.srt --- SRecode templates for Emacs/WISENT grammar files.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/etc/themes/adwaita-theme.el b/etc/themes/adwaita-theme.el
index 8810aaf..f2f9963 100644
--- a/etc/themes/adwaita-theme.el
+++ b/etc/themes/adwaita-theme.el
@@ -1,6 +1,6 @@
 ;;; adwaita-theme.el --- Tango-based custom theme for faces
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: William Stevenson <address@hidden>
 
diff --git a/etc/themes/deeper-blue-theme.el b/etc/themes/deeper-blue-theme.el
index 3b5ab4c..929cba3 100644
--- a/etc/themes/deeper-blue-theme.el
+++ b/etc/themes/deeper-blue-theme.el
@@ -1,6 +1,6 @@
 ;;; deeper-blue-theme.el --- Custom theme for faces
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Scott Frazer <address@hidden>
 
diff --git a/etc/themes/dichromacy-theme.el b/etc/themes/dichromacy-theme.el
index 9b68a6b..a11d372 100644
--- a/etc/themes/dichromacy-theme.el
+++ b/etc/themes/dichromacy-theme.el
@@ -1,6 +1,6 @@
 ;;; dichromacy-theme.el --- color theme suitable for color-blind users
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <address@hidden>
 
diff --git a/etc/themes/leuven-theme.el b/etc/themes/leuven-theme.el
index 40304c8..f6cf0e9 100644
--- a/etc/themes/leuven-theme.el
+++ b/etc/themes/leuven-theme.el
@@ -1,6 +1,6 @@
 ;;; leuven-theme.el --- Awesome Emacs color theme on white background
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Fabrice Niessen <(concat "fniessen" at-sign "pirilampo.org")>
 ;; URL: https://github.com/fniessen/emacs-leuven-theme
diff --git a/etc/themes/light-blue-theme.el b/etc/themes/light-blue-theme.el
index 2b46ec7..c10aaa8 100644
--- a/etc/themes/light-blue-theme.el
+++ b/etc/themes/light-blue-theme.el
@@ -1,6 +1,6 @@
 ;;; light-blue-theme.el --- Custom theme for faces
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Drew Adams <address@hidden>
 
diff --git a/etc/themes/manoj-dark-theme.el b/etc/themes/manoj-dark-theme.el
index 61ee3ea..add3ed8 100644
--- a/etc/themes/manoj-dark-theme.el
+++ b/etc/themes/manoj-dark-theme.el
@@ -1,6 +1,6 @@
 ;;; manoj-dark.el --- A dark theme from Manoj
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Manoj Srivastava <address@hidden>
 ;; Keywords: lisp, faces
diff --git a/etc/themes/misterioso-theme.el b/etc/themes/misterioso-theme.el
index a937799..a5ffbf3 100644
--- a/etc/themes/misterioso-theme.el
+++ b/etc/themes/misterioso-theme.el
@@ -1,6 +1,6 @@
 ;;; misterioso-theme.el --- Custom face theme for Emacs
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Sebastian Hermida
 
diff --git a/etc/themes/tango-dark-theme.el b/etc/themes/tango-dark-theme.el
index 098379c..fba579f 100644
--- a/etc/themes/tango-dark-theme.el
+++ b/etc/themes/tango-dark-theme.el
@@ -1,6 +1,6 @@
 ;;; tango-dark-theme.el --- Tango-based custom theme for faces
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Authors: Chong Yidong <address@hidden>
 ;;          Jan Moringen <address@hidden>
diff --git a/etc/themes/tango-theme.el b/etc/themes/tango-theme.el
index 4e40eb0..97eee1c 100644
--- a/etc/themes/tango-theme.el
+++ b/etc/themes/tango-theme.el
@@ -1,6 +1,6 @@
 ;;; tango-theme.el --- Tango-based custom theme for faces
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Authors: Chong Yidong <address@hidden>
 ;;          Jan Moringen <address@hidden>
diff --git a/etc/themes/tsdh-dark-theme.el b/etc/themes/tsdh-dark-theme.el
index 5909fad..1d4326e 100644
--- a/etc/themes/tsdh-dark-theme.el
+++ b/etc/themes/tsdh-dark-theme.el
@@ -1,6 +1,6 @@
 ;;; tsdh-dark-theme.el --- Tassilo's dark custom theme
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/etc/themes/tsdh-light-theme.el b/etc/themes/tsdh-light-theme.el
index 7036ce4..f85f2ba 100644
--- a/etc/themes/tsdh-light-theme.el
+++ b/etc/themes/tsdh-light-theme.el
@@ -1,6 +1,6 @@
 ;;; tsdh-light-theme.el --- Tassilo's light custom theme
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/etc/themes/wheatgrass-theme.el b/etc/themes/wheatgrass-theme.el
index 4ecdbf5..08f7c44 100644
--- a/etc/themes/wheatgrass-theme.el
+++ b/etc/themes/wheatgrass-theme.el
@@ -1,6 +1,6 @@
 ;;; wheatgrass-theme.el --- custom theme for faces
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/etc/themes/whiteboard-theme.el b/etc/themes/whiteboard-theme.el
index 6685ec6..7642d72 100644
--- a/etc/themes/whiteboard-theme.el
+++ b/etc/themes/whiteboard-theme.el
@@ -1,6 +1,6 @@
 ;;; whiteboard-theme.el --- Custom theme for faces
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Scott Frazer <address@hidden>
 
diff --git a/etc/themes/wombat-theme.el b/etc/themes/wombat-theme.el
index 45b3a9d..d49f9bf 100644
--- a/etc/themes/wombat-theme.el
+++ b/etc/themes/wombat-theme.el
@@ -1,6 +1,6 @@
 ;;; wombat-theme.el --- Custom face theme for Emacs  -*-coding: utf-8 -*-
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Kristoffer Grönlund <address@hidden>
 
diff --git a/etc/tutorials/TUTORIAL b/etc/tutorials/TUTORIAL
index d755122..9ac2281 100644
--- a/etc/tutorials/TUTORIAL
+++ b/etc/tutorials/TUTORIAL
@@ -1110,7 +1110,7 @@ starting with the one written by Stuart Cracraft for the 
original Emacs.
 This version of the tutorial is a part of GNU Emacs.  It is copyrighted
 and comes with permission to distribute copies on certain conditions:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.bg b/etc/tutorials/TUTORIAL.bg
index 88ddf95..54e14a5 100644
--- a/etc/tutorials/TUTORIAL.bg
+++ b/etc/tutorials/TUTORIAL.bg
@@ -1162,7 +1162,7 @@ Dired ви позволява да гледате списъка от файло
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.cn b/etc/tutorials/TUTORIAL.cn
index 6c3e295..8dc0294 100644
--- a/etc/tutorials/TUTORIAL.cn
+++ b/etc/tutorials/TUTORIAL.cn
@@ -987,7 +987,7 @@ starting with the one written by Stuart Cracraft for the 
original Emacs.
 This version of the tutorial is a part of GNU Emacs.  It is copyrighted
 and comes with permission to distribute copies on certain conditions:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
@@ -1016,7 +1016,7 @@ using, writing, and sharing free software!
 
 本篇指南是 GNU Emacs 的一部分,并允许在下列条件的约束下发行其拷贝:
 
-   Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation,
+   Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation,
    Inc.
 
    本文件为 GNU Emacs 的一部分。
diff --git a/etc/tutorials/TUTORIAL.cs b/etc/tutorials/TUTORIAL.cs
index 6090360..615a187 100644
--- a/etc/tutorials/TUTORIAL.cs
+++ b/etc/tutorials/TUTORIAL.cs
@@ -1015,7 +1015,7 @@ tutoriálem napsaným Stuartem Cracraftem pro původní Emacs.
 Tato verze tutoriálu je, podobně jako GNU Emacs, chráněna copyrightem a
 je šířena se svolením distribuovat kopie za jistých podmínek:
 
-Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
    Každému je zaručeno právo vytvářet a distribuovat přesné kopie tohoto
    dokumentu tak, jak jej obdržel, na jakémkoliv médiu, s tím, že bude
diff --git a/etc/tutorials/TUTORIAL.de b/etc/tutorials/TUTORIAL.de
index b65631a..861a889 100644
--- a/etc/tutorials/TUTORIAL.de
+++ b/etc/tutorials/TUTORIAL.de
@@ -1458,7 +1458,7 @@ Beachten Sie bitte, dass im Zweifelsfalle das englische 
Original
 dieser Urheberrechtsnotiz gültig ist (zu finden in der Datei
 TUTORIAL).
 
-   Copyright (C) 1985, 1996-1997, 2001-2014 Free Software Foundation,
+   Copyright (C) 1985, 1996-1997, 2001-2015 Free Software Foundation,
    Inc.
 
    Diese Datei ist ein Bestandteil von GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.eo b/etc/tutorials/TUTORIAL.eo
index 17effb9..d0d237e 100644
--- a/etc/tutorials/TUTORIAL.eo
+++ b/etc/tutorials/TUTORIAL.eo
@@ -1081,7 +1081,7 @@ la dosiero verkita de Stuart Cracraft por la originala 
Emakso.
 kopirajton, kaj venas kun permeso por disdoni kopiojn se certaj
 kondiĉoj estas observataj:
 
-   Copyright (C) 1985, 1999, 2001-2002, 2005, 2007-2014 Free Software
+   Copyright (C) 1985, 1999, 2001-2002, 2005, 2007-2015 Free Software
    Foundation, Inc.
 
    Ĉi tiu dosiero estas parto de "GNU Emacs".
diff --git a/etc/tutorials/TUTORIAL.es b/etc/tutorials/TUTORIAL.es
index 604aaf7..cdbffde 100644
--- a/etc/tutorials/TUTORIAL.es
+++ b/etc/tutorials/TUTORIAL.es
@@ -16,7 +16,7 @@ ocasión, usaremos las siguientes abreviaturas.
 Nota importante: para terminar la sesión de Emacs teclee C-x C-c (dos
 caracteres).  Para cancelar un comando parcialmente introducido,
 teclee C-g.
-Los caracteres ">>" en el margen izquierdo indican instrucciones para
+Los caracteres «>>» en el margen izquierdo indican instrucciones para
 que usted trate de usar un comando.  Por ejemplo:
 <<Blank lines inserted around following line by help-with-tutorial>>
 [Mitad de página en blanco para propósitos didácticos.  El texto continúa 
abajo]
@@ -67,11 +67,11 @@ Es útil moverse de una pantalla completa a otra pero, ¿cómo 
moverse a
 un lugar específico dentro del texto en la pantalla?
 
 Puede hacerlo de diversas formas.  Puede usar las teclas de flechas,
-pero es mas eficiente mantener las manos en la posición estándar y
+pero es más eficiente mantener las manos en la posición estándar y
 usar los comandos C-p, C-b, C-f, y C-n.  Estos caracteres son
 equivalentes a las cuatro teclas de flechas, de esta manera:
 
-                       Línea anterior, C-P
+                       Línea anterior, C-p
                                :
                                :
    Atrás, C-b.... Posición actual del cursor .... Adelante, C-f
@@ -111,7 +111,7 @@ C-f puede moverse a través de una nueva línea igual que C-b.
 
 Cuando pase el tope o el final de la pantalla, se mostrará el texto
 más allá del borde de la pantalla.  Esto recibe el nombre de
-"desplazamiento".  Esto le permite a Emacs mover el cursor al lugar
+«desplazamiento».  Esto le permite a Emacs mover el cursor al lugar
 especificado en el texto sin moverlo fuera de la pantalla.
 
 >> Intente mover el cursor fuera del borde de la pantalla con C-n, y
@@ -133,10 +133,10 @@ dirección opuesta.
 
 Note el paralelo entre C-f y C-b de un lado y M-f y M-b del otro.  Muy
 frecuentemente los caracteres Meta se usan para operaciones
-relacionadas, con las unidades definidas por el lenguaje (palabras,
+relacionadas con las unidades definidas por el lenguaje (palabras,
 oraciones y párrafos), mientras los caracteres Control operan sobre
 unidades básicas que son independientes de lo que está editando
-(caracteres, líneas, etc).
+(caracteres, líneas, etc.).
 
 Este paralelo se aplica entre líneas y oraciones: C-a y C-e para
 moverse al comienzo o al final de la línea; y M-a y M-e para mover al
@@ -149,7 +149,7 @@ Vea cómo la repetición de C-a no hace nada, pero la 
repetición de M-a
 sigue moviendo una oración más.  Aunque no son muy análogas, cada una
 parece natural.
 
-La ubicación del cursor en el texto se llama también "punto".  En
+La ubicación del cursor en el texto se llama también «punto».  En
 otras palabras, el cursor muestra sobre la pantalla donde está
 situado el punto dentro del texto.
 
@@ -178,7 +178,7 @@ Otros dos comandos importantes de movimiento del cursor son 
M-< (META
 Menor que), el cual se mueve al comienzo del texto entero, y M-> (META
 Mayor que), el cual se mueve al final del texto entero.
 
-En la mayoría de las terminales, el "<" está sobre la coma, por lo
+En la mayoría de las terminales, el «<» está sobre la coma, por lo
 tanto tiene que usar la tecla shift para teclearlo.  En estas
 terminales tendrá que usar la tecla shift también al teclear M-<; sin
 la tecla shift, usted estaría escribiendo M-coma.
@@ -207,7 +207,7 @@ una tecla META (o EDIT o ALT), hay una manera alternativa 
para
 ingresar un argumento numérico: teclear los dígitos mientras presiona
 la tecla META.  Recomendamos aprender el método C-u porque éste
 funciona en cualquier terminal.  El argumento numérico es también
-llamado un "argumento prefijo", porque usted teclea el argumento antes
+llamado un «argumento prefijo», porque usted teclea el argumento antes
 del comando al que se aplica.
 
 Por ejemplo, C-u 8 C-f mueve hacia adelante ocho caracteres.
@@ -253,7 +253,7 @@ comienzo de un comando que no quiere finalizar.
 
 >> Escriba C-u 100 para hacer un argumento numérico de 100, y luego
    pruebe C-g.
-   Ahora pruebe C-f.  Esto deberá mover sólo un carácter, ya que
+   Ahora pruebe C-f.  Esto deberá mover solo un carácter, ya que
    canceló el argumento con C-g.
 
 Si ha tecleado <ESC> por error, puede desecharlo con un C-g.
@@ -262,7 +262,7 @@ Si ha tecleado <ESC> por error, puede desecharlo con un C-g.
 * COMANDOS DESACTIVADOS
 -----------------------
 
-Algunos comandos de Emacs están "desactivados" de manera que los
+Algunos comandos de Emacs están «desactivados» de manera que los
 usuarios principiantes no puedan usarlos accidentalmente.
 
 Si teclea uno de los comandos desactivados, Emacs muestra un mensaje
@@ -271,7 +271,7 @@ continuar y ejecutar el comando.
 
 Si realmente quiere intentar el comando, teclee Espacio como repuesta
 a la pregunta.  Normalmente, si no quiere ejecutar el comando
-desactivado, conteste la pregunta con "n".
+desactivado, conteste la pregunta con «n».
 
 >> Escriba C-x C-l (que es un comando desactivado), a continuación
    escriba n para responder la pregunta.
@@ -280,7 +280,7 @@ desactivado, conteste la pregunta con "n".
 * VENTANAS
 ----------
 
-Emacs puede tener varias "ventanas", cada una mostrando su propio texto.
+Emacs puede tener varias «ventanas», cada una mostrando su propio texto.
 Explicaremos después cómo usar múltiples ventanas.  Ahora mismo
 queremos explicar cómo deshacerse de ventanas adicionales y volver a
 la edición básica en una ventana.  Es sencillo:
@@ -310,15 +310,15 @@ cuatro caracteres.
 
 Si quiere insertar un texto, basta con que lo teclee.  Los caracteres
 normales, como A, 7, *, etc. se insertan nada más teclearlos.  Teclee
-<Return> (la tecla "Enter" o "Intro") para insertar un carácter de
+<Return> (la tecla «Enter» o «Intro») para insertar un carácter de
 nueva línea.
 
 Para borrar el carácter que precede al cursor, oprima <DEL>. Es una
-tecla alargada, normalmente etiquetada como "Backspace" o "Del", o con
+tecla alargada, normalmente etiquetada como «Backspace» o «Del», o con
 una flecha apuntando a la izquierda; la misma que suele utilizar fuera
 de Emacs para borrar el último carácter introducido.
 
-Puede haber otra tecla llamada "Del" o "Supr" en otra parte, pero ésa
+Puede haber otra tecla llamada «Del» o «Supr» en otra parte, pero ésa
 no es <DEL>.
 
 >> Haga esto ahora: teclee unos pocos caracteres, después bórrelos
@@ -327,9 +327,9 @@ no es <DEL>.
    personal de él.
 
 Cuando una línea de texto se hace muy grande para una sola línea de la
-pantalla, la línea de texto "continúa" en una segunda línea en la
+pantalla, la línea de texto «continúa» en una segunda línea en la
 pantalla. Si está usando un entorno gráfico, se mostrarán pequeñas
-flechas curvas en las estrechas franjas vacías (los "márgenes" derecho
+flechas curvas en las estrechas franjas vacías (los «márgenes» derecho
 e izquierdo) a cada lado del área de texto, para indicar que la línea
 continúa. Si está utilizando una terminal, la continuación se señala
 mediante una barra invertida («\») en la última columna de la derecha.
@@ -357,13 +357,13 @@ circundante, puede además insertar espacio en blanco tras 
el carácter
 de fin de línea, de forma que, al seguir tecleando en la línea recién
 creada, el texto que tecleamos quede alineado con el de la línea
 anterior.  Este comportamiento (que la pulsación de una tecla no solo
-inserte el carácter correspondiente) se denomina "eléctrico".
+inserte el carácter correspondiente) se denomina «eléctrico».
 
->> Veamos un ejemplo de comportamiento "eléctrico" de <Return>
+>> Veamos un ejemplo de comportamiento «eléctrico» de <Return>
    Teclee <Return> al final de esta línea.
 
 Fíjese que, tras insertar el carácter de nueva línea, Emacs inserta
-también espacios para que el cursor se sitúe bajo la "T" de "Teclee".
+también espacios para que el cursor se sitúe bajo la «T» de «Teclee».
 
 Recuerde que a la mayoría de los comandos de Emacs se les puede dar un
 factor de repetición; esto incluye los caracteres de texto.  Repetir
@@ -375,7 +375,7 @@ Ya ha aprendido la manera más básica de teclear algo en 
Emacs y
 corregir errores.  Puede borrar por palabras o por líneas.  He aquí un
 resumen de las operaciones de borrado:
 
-       <DEL>           borra el carácter justo antes que el cursor
+       <DEL>           borra el carácter justo antes del cursor
        C-d             borra el siguiente carácter después del cursor
 
        M-<DEL>         Elimina la palabra inmediatamente antes del
@@ -389,29 +389,29 @@ Note que <DEL> y C-d, comparados con M-<DEL> y M-d, 
extienden el
 paralelismo iniciado por C-f y M-f (bien, <DEL> no es realmente una
 tecla de control, pero no nos preocuparemos de eso ahora).  C-k y M-k,
 en cierta forma, son como C-e y M-e, en que las líneas de unos
-corresponden a sentencias en los otros.
+corresponden a oraciones en los otros.
 
 También puede eliminar un segmento contiguo de texto con un método
 uniforme.  Muévase a un extremo de ese segmento de texto, y teclee C-@
-o C-SPC (cualquiera de los dos).  (SPC es la barra espaciadora.)
+o C-<SPC> (cualquiera de los dos).  (<SPC> es la barra espaciadora.)
 Luego, mueva el cursor al otro extremo del texto que desea eliminar.
 Al hacerlo, Emacs resaltará el texto situado entre el cursor y la
-posición en la que tecleó C-SPC.  Finalmente, teclee C-w.  Eso elimina
+posición en la que tecleó C-<SPC>.  Finalmente, teclee C-w.  Eso elimina
 todo el texto entre las dos posiciones.
 
 >> Mueva el cursor a la letra T del inicio del párrafo anterior.
->> Teclee C-SPC.  Emacs debe mostrar el mensaje "Mark set" en la parte
+>> Teclee C-<SPC>.  Emacs debe mostrar el mensaje «Mark set» en la parte
    de abajo de la pantalla.
->> Mueva el cursor a la x en "extremo", en la segunda línea del
+>> Mueva el cursor a la x en «extremo», en la segunda línea del
    párrafo.
 >> Teclee C-w.  Esto eliminará el texto que comienza desde la T, y
    termina justo antes de la x.
 
-La diferencia entre "eliminar" y "borrar" es que el texto "eliminado"
+La diferencia entre «eliminar» y «borrar» es que el texto «eliminado»
 puede ser reinsertado (en cualquier posición), mientras que las cosas
-"borradas" no pueden ser reinsertadas (sin embargo, es posible
+«borradas» no pueden ser reinsertadas (sin embargo, es posible
 deshacer el borrado; ver más abajo).  La reinserción de texto
-eliminado se llama "yanking" o "pegar".  Generalmente, los comandos
+eliminado se llama «yanking» o «pegar».  Generalmente, los comandos
 que pueden quitar mucho texto lo eliminan (para que pueda pegarlo de
 nuevo) mientras que los comandos que quitan solo un carácter, o solo
 líneas en blanco y espacios, borran (y por tanto no se puede pegar lo
@@ -426,17 +426,17 @@ borran.  Con un argumento, eliminan.
 Note que al teclear C-k una sola vez elimina el contenido de la línea,
 y un segundo C-k elimina la línea misma, y hace que todas las otras
 líneas se muevan hacia arriba.  C-k trata un argumento numérico
-especialmente: Elimina ese número de líneas y TAMBIÉN sus
+especialmente: elimina ese número de líneas y TAMBIÉN sus
 contenidos.  Esto no es una simple repetición.  C-u 2 C-k elimina dos
 líneas y sus nuevas líneas, tecleando C-k dos veces no hace esto.
 
-Reinsertar texto eliminado se denomina "yanking" o "pegar".  (Piense
+Reinsertar texto eliminado se denomina «yanking» o «pegar».  (Piense
 en ello como pegar de nuevo, o traer de vuelta, algún texto que le fue
 quitado.)  Puede pegar el texto eliminado, ya sea el lugar en que fue
 eliminado, o en otra parte del buffer, o hasta en un archivo
 diferente.  Puede pegar el texto varias veces, lo que hace varias
 copias de él.  Algunos editores se refieren a eliminar y reinsertar
-como "cortar" y "pegar" (consulte el Glosario en el manual de Emacs).
+como «cortar» y «pegar» (consulte el Glosario en el manual de Emacs).
 
 El comando para pegar es C-y.  Reinserta el último texto eliminado, en
 la posición actual del cursor.
@@ -460,7 +460,7 @@ Después de haber tecleado C-y para conseguir la eliminación 
más
 reciente, tecleando M-y reemplaza el texto pegado con la eliminación
 previa.  Tecleando M-y una y otra vez traerá las eliminaciones
 anteriores.  Cuando haya encontrado el texto que buscaba, no tiene que
-hacer nada para conservarlo.  Sólo siga con su edición, dejando el
+hacer nada para conservarlo.  Solo siga con su edición, dejando el
 texto pegado en donde está.
 
 Si teclea M-y suficientes veces, regresa al punto inicial (la
@@ -513,29 +513,29 @@ si puede pegarlo con C-y; no hay diferencia alguna para 
deshacer.
 
 Para que pueda hacer permanente el texto que edite, lo debe colocar en
 un archivo.  De otra manera, éste se perderá cuando cierre Emacs.
-Para poder poner su texto en un archivo, debe "encontrar" el archivo
-antes de ingresar el texto.  (Esto se llama también "visitar" el
+Para poder poner su texto en un archivo, debe «encontrar» el archivo
+antes de ingresar el texto.  (Esto se llama también «visitar» el
 archivo.)
 
 Encontrar un archivo significa que puede ver su contenido dentro de
 Emacs.  En cierta forma, es como si estuviera editando el archivo
 mismo.  Sin embargo los cambios que haga mediante Emacs no serán
-permanentes hasta que "guarde" el archivo.  Esto es para evitar dejar
+permanentes hasta que «guarde» el archivo.  Esto es para evitar dejar
 un archivo a medio cambiar en el sistema cuando no quiera.  Incluso
 cuando guarde, Emacs dejará el archivo original bajo un nombre
 cambiado en caso de que luego decida que sus cambios fueron un error.
 
 Si mira cerca del final de la pantalla podrá ver una línea que
-comienza con guiones, y empieza con " -:--- TUTORIAL.es" o algo así.
+comienza con guiones, y empieza con « U:--- TUTORIAL.es» o algo así.
 Esta parte de la pantalla normalmente muestra el nombre del archivo
 que está visitando.  En este momento está visitando su propia copia
-del tutorial de Emacs, que se llama "TUTORIAL.es".  Cuando encuentre
+del tutorial de Emacs, que se llama «TUTORIAL.es».  Cuando encuentre
 un archivo con Emacs, el nombre de ese archivo aparecerá en ese mismo
 punto.
 
-Una cosa especial acerca del comando para encontrar un archivo, es que
+Una cosa especial acerca del comando para encontrar un archivo es que
 tendrá que decir qué nombre de archivo desea.  Decimos que el comando
-"lee un argumento" (en este caso, el argumento es el nombre del
+«lee un argumento» (en este caso, el argumento es el nombre del
 archivo).  Después de teclear el comando:
 
        C-x C-f   Encontrar un archivo
@@ -565,19 +565,19 @@ comando
 
 Esto copia el texto dentro de Emacs al archivo.  La primera vez que
 haga esto, Emacs renombrará el archivo original con un nuevo nombre
-para que éste no se pierda.  El nuevo nombre se hace agregando "~" al
+para que éste no se pierda.  El nuevo nombre se hace agregando «~» al
 final del nombre del archivo original. Cuando guardar haya terminado,
 Emacs mostrará el nombre del archivo escrito.
 
 >> Teclee C-x C-s TUTORIAL.es <Return>
    Esto guardará el tutorial en un archivo llamado TUTORIAL.es, y
-   mostrará "Wrote ...TUTORIAL.es" al final de la pantalla.
+   mostrará «Wrote ...TUTORIAL.es» al final de la pantalla.
 
 Puede encontrar un archivo existente, para verlo o editarlo.  También
 puede hacerlo con un archivo que no exista.  Ésta es la forma de crear
 un archivo en Emacs: encuentre el archivo, que está inicialmente vacío,
 luego comience a insertar el texto para ese archivo.  Cuando invoque
-"guardar" el archivo, Emacs creará realmente el archivo con el texto
+«guardar» el archivo, Emacs creará realmente el archivo con el texto
 que ha insertado.  De ahí en adelante, puede considerar que está
 editando un archivo existente.
 
@@ -591,7 +591,7 @@ C-f.  De esta forma puede mantener un gran número de 
archivos dentro
 de Emacs.
 
 Emacs almacena cada texto del archivo dentro de un objeto llamado
-"buffer".  Al encontrar un archivo se crea un nuevo buffer dentro de
+«buffer».  Al encontrar un archivo se crea un nuevo buffer dentro de
 Emacs.  Para mirar la lista de los buffers que existen actualmente,
 teclee:
 
@@ -605,14 +605,14 @@ una ventana de Emacs es siempre parte de algún buffer.
 
 >> Teclee C-x 1 para deshacerse de la lista de buffers.
 
-Cuando tenga varios buffers, solo uno de ellos es "actual" en algún
+Cuando tenga varios buffers, solo uno de ellos es «actual» en algún
 momento.  Ese buffer es el que actualmente edita.  Si quiere editar
-otro buffer, necesita "cambiar" a él.  Si quiere cambiar a un buffer
+otro buffer, necesita «cambiar» a él.  Si quiere cambiar a un buffer
 que corresponde a un archivo, puede hacerlo visitando el archivo de
 nuevo con C-x C-f.  Pero existe una manera más rápida: use el comando
 C-x b.  En ese comando, necesita teclear el nombre de buffer.
 
->> Cree un archivo llamado "foo" tecleando C-x C-f foo <Return>.
+>> Cree un archivo llamado «foo» tecleando C-x C-f foo <Return>.
    Después teclee C-x b TUTORIAL.es <Return> para regresar a este
    tutorial.
 
@@ -622,12 +622,12 @@ esto no es así siempre.  La lista de buffers que hace con 
C-x C-b
 muestra el nombre de cada buffer y de su archivo correspondiente.
 
 Algunos buffers no corresponden a un archivo.  El buffer llamado
-"*Buffer List*", que contiene la lista de buffers que ha creado con
+«*Buffer List*», que contiene la lista de buffers que ha creado con
 C-x C-b, no tiene archivo.  Este buffer TUTORIAL.es al principio no
 tenía archivo, pero ahora sí, porque en la sección anterior tecleó
 C-x C-s y lo guardó en un archivo.
 
-El buffer llamado "*Messages*" tampoco tiene un archivo
+El buffer llamado «*Messages*» tampoco tiene un archivo
 correspondiente.  Este buffer contiene los mensajes que han aparecido
 en la línea de abajo durante su sesión de Emacs.
 
@@ -649,7 +649,7 @@ guardado.  Le pregunta, por cada buffer, si quiere 
guardarlo o no.
 
 >> Inserte una línea de texto, luego teclee C-x s.
    Debería preguntarle si desea guardar el buffer llamado TUTORIAL.es.
-   Conteste si a la pregunta tecleando "y".
+   Conteste «sí» a la pregunta tecleando «y».
 
 
 * EXTENDER EL CONJUNTO DE COMANDOS
@@ -675,14 +675,14 @@ Si está utilizando una pantalla gráfica, no necesita 
ningún comando
 especial para cambiar de Emacs a otra aplicación.  Puede hacerlo con
 el ratón, o mediante el gestor de ventanas.  Sin embargo, si está
 usando una terminal que solo puede mostrar una aplicación a la vez,
-tendrá que "suspender" Emacs para poder acceder a otras aplicaciones.
+tendrá que «suspender» Emacs para poder acceder a otras aplicaciones.
 
 C-z es el comando para salir de Emacs *temporalmente*: para que pueda
 regresar a la misma sesión de Emacs después.  Cuando Emacs está
-ejecutándose en una terminal, C-z "suspende" Emacs; esto es, se
+ejecutándose en una terminal, C-z «suspende» Emacs; esto es, se
 regresa al intérprete de comandos pero no se destruye Emacs.  En los
 intérpretes de comandos más comunes, puede reanudar Emacs con el
-comando "fg" o con "%emacs".
+comando «fg» o con «%emacs».
 
 El momento para usar C-x C-c es cuando está listo para salir del
 sistema.  Es además el paso correcto para salir de un Emacs invocado
@@ -706,7 +706,7 @@ con menos frecuencia, o únicamente en ciertos modos.  Un 
ejemplo es el
 comando replace-string, el cual substituye una cadena de caracteres
 por otra en todo el buffer.  Cuando teclea M-x, Emacs le pregunta al
 final de la pantalla con M-x y debe escribir el nombre del comando; en
-este caso "replace-string".  Solo teclee "repl s<TAB>" y Emacs
+este caso «replace-string».  Solo teclee «repl s<TAB>» y Emacs
 completará el nombre.  (<TAB> es la tecla del tabulador, que
 habitualmenté está situada sobre la tecla de bloquear mayúsculas o la
 de shift, en el lado izquierdo del teclado.)  Para aceptar el comando
@@ -721,7 +721,7 @@ Debe terminar cada argumento con <Return>.
    M-x repl s<Return>cambiado<Return>alterado<Return>.
 
    Note cómo ha cambiado la línea: ha substituido la palabra
-   "cambiado" por "alterado" en cada ocurrencia, después de la
+   «cambiado» por «alterado» en cada ocurrencia, después de la
    posición inicial del cursor.
 
 
@@ -730,10 +730,10 @@ Debe terminar cada argumento con <Return>.
 
 Si ha hecho cambios en un archivo, pero no los ha guardado, éstos
 podrían perderse si su computadora falla.  Para protegerlo de esto,
-Emacs periódicamente escribe un archivo "auto guardado" para cada
+Emacs escribe periódicamente un archivo «auto guardado» para cada
 archivo que está editando.  El nombre del archivo auto guardado tiene
 un # al principio y al final; por ejemplo, si su archivo se llama
-"hola.c", su archivo auto guardado es "#hola.c#".  Cuando guarda por
+«hola.c», su archivo auto guardado es «#hola.c#».  Cuando guarda por
 la vía normal, Emacs borra su archivo de auto guardado.
 
 Si la computadora falla, puede recuperar su edición de auto guardado
@@ -748,16 +748,16 @@ para seguir adelante y recuperar la información de auto 
guardado.
 
 Si Emacs ve que usted está tecleando comandos de multicaracteres
 lentamente, se los muestra al final de la pantalla en un área llamada
-"área de eco".  El área de eco contiene la línea final de la pantalla.
+«área de eco».  El área de eco contiene la línea final de la pantalla.
 
 
 * LÍNEA DE MODO
 ---------------
 
 La línea inmediatamente encima del área de eco recibe el nombre de
-"línea de modo" o "mode line".  La línea de modo dice algo así:
+«línea de modo» o «mode line».  La línea de modo dice algo así:
 
- -:**-  TUTORIAL.es       63% L749    (Fundamental)
+ U:**-  TUTORIAL.es       63% L749    (Fundamental)
 
 Esta línea da información útil acerca del estado de Emacs y del texto
 que está editando.
@@ -766,9 +766,9 @@ Ya sabe qué significa el nombre del archivo: es el archivo 
que usted
 ha encontrado.  NN% indica su posición actual en el texto; esto
 significa que NN por ciento del texto está encima de la parte superior
 de la pantalla.  Si el principio del archivo está en la pantalla, éste
-dirá "Top" en vez de " 0%".  Si el final del texto está en la
-pantalla, dirá "Bot".  Si está mirando un texto tan pequeño que cabe
-entero en la pantalla, el modo de línea dirá "All".
+dirá «Top» en vez de « 0%».  Si el final del texto está en la
+pantalla, dirá «Bot».  Si está mirando un texto tan pequeño que cabe
+entero en la pantalla, el modo de línea dirá «All».
 
 La L y los dígitos señalan la posición de otra forma: indican el
 número de línea actual del punto.
@@ -780,13 +780,13 @@ parte de la línea de modo no muestra asteriscos, solo 
guiones.
 La parte de la línea de modo dentro de los paréntesis es para
 indicarle en qué modo de edición está.  El modo por omisión es
 Fundamental, el cual está usando ahora.  Éste es un ejemplo de un
-"modo mayor".
+«modo mayor».
 
 Emacs tiene diferentes modos mayores.  Algunos están hechos para
 editar diferentes lenguajes y/o clases de texto, tales como modo de
 Lisp, modo de Texto, etc.  En cualquier momento uno y solo un modo
 mayor está activo, y su nombre siempre se puede encontrar en la línea
-de modo, justo en donde "Fundamental" está ahora.
+de modo, justo en donde «Fundamental» está ahora.
 
 Cada modo mayor hace que algunos comandos actúen diferente.  Por
 ejemplo, hay comandos para crear comentarios en un programa, y como
@@ -808,7 +808,7 @@ modo Fundamental, M-f y M-b trataban los apóstrofes como 
separadores
 de palabras.
 
 Los modos mayores normalmente hacen cambios sutiles como el anterior:
-la mayoría de comandos hacen "el mismo trabajo" en cada modo mayor,
+la mayoría de comandos hacen «el mismo trabajo» en cada modo mayor,
 pero funcionan de forma un poco diferente.
 
 Para ver la documentación del modo mayor actual, teclee C-h m.
@@ -840,11 +840,11 @@ Puede activar el modo Auto Fill al hacer M-x 
auto-fill-mode <Return>.
 Cuando el modo esté activado, puede desactivarlo nuevamente usando M-x
 auto-fill-mode <Return>.  Si el modo está desactivado, este comando lo
 activa, y si el modo está activado, este comando lo desactiva.
-Decimos que el comando "cambia el modo".
+Decimos que el comando «cambia el modo».
 
 >> teclee M-x auto-fill-mode <Return> ahora.  Luego inserte una línea
-   de "asdf " repetidas veces hasta que la vea dividida en dos líneas.
-   Debe intercalar espacios porque Auto Fill sólo rompe líneas en los
+   de «asdf » repetidas veces hasta que la vea dividida en dos líneas.
+   Debe intercalar espacios porque Auto Fill solo rompe líneas en los
    espacios.
 
 El margen está normalmente puesto en 70 caracteres, pero puede
@@ -867,48 +867,48 @@ ese párrafo.
 * BUSCAR
 --------
 
-Emacs puede hacer búsquedas de cadenas (una "cadena" es un grupo de
+Emacs puede hacer búsquedas de cadenas (una «cadena» es un grupo de
 caracteres contiguos) hacia adelante a través del texto o hacia atrás
 en el mismo.  La búsqueda de una cadena es un comando de movimiento de
 cursor; mueve el cursor al próximo lugar donde esa cadena aparece.
 
-El comando de búsqueda de Emacs es "incremental".  Esto significa que
+El comando de búsqueda de Emacs es «incremental».  Esto significa que
 la búsqueda ocurre mientras teclea la cadena para buscarla.
 
 El comando para iniciar una búsqueda es C-s para búsqueda hacia
 adelante, y C-r para la búsqueda hacia atrás.  ¡PERO ESPERE!  No los
 intente aún.
 
-Cuando teclee C-s verá que la cadena "I-search" aparece como una
+Cuando teclee C-s verá que la cadena «I-search» aparece como una
 petición en el área de eco.  Esto le indica que Emacs está en lo que
 se conoce como búsqueda incremental, esperando que teclee lo que
 quiere buscar.  <Return> termina una búsqueda.
 
 >> Ahora teclee C-s para comenzar la búsqueda.  LENTAMENTE, una letra
-   a la vez, teclee la palabra "cursor", haciendo pausa después de
+   a la vez, teclee la palabra «cursor», haciendo pausa después de
    cada carácter para notar lo que pasa con el cursor.
-   Ahora ha buscado "cursor", una vez.
+   Ahora ha buscado «cursor», una vez.
 >> Teclee C-s de nuevo, para buscar la siguiente ocurrencia de
-   "cursor".
+   «cursor».
 >> Ahora teclee <DEL> cuatro veces y vea como se mueve el cursor.
 >> Teclee <Return> para terminar la búsqueda.
 
-¿Vió lo que ocurrió?  Emacs, en una búsqueda incremental, trata de ir
+¿Vio lo que ocurrió?  Emacs, en una búsqueda incremental, trata de ir
 a la ocurrencia de la cadena que ha tecleado hasta el momento.  Para
-ir a la próxima ocurrencia de "cursor" solo teclee C-s de nuevo.  Si
+ir a la próxima ocurrencia de «cursor» solo teclee C-s de nuevo.  Si
 tal ocurrencia no existe, Emacs pita y le dice que la búsqueda actual
-está fallando ("failing").  C-g también termina la búsqueda.
+está fallando («failing»).  C-g también termina la búsqueda.
 
 Si se encuentra en medio de una búsqueda incremental y teclea <DEL>,
-la búsqueda "vuelve" a un punto anterior.  Si teclea <DEL> justo
+la búsqueda «vuelve» a un punto anterior.  Si teclea <DEL> justo
 después de teclear C-s para avanzar hasta la siguiente ocurrencia de
 la cadena buscada, el cursor retrocede a una ocurrencia previa.  Si no
 hay ocurrencias previas, <DEL> borra el último carácter de la cadena
-buscada.  Por ejemplo, suponga que ha tecleado "c", para buscar la
-primera ocurrencia de "c".  Ahora, si teclea "u", el cursor se moverá
-a la primera ocurrencia de "cu".  Ahora teclee <DEL>.  Esto borra la
-"u" de la cadena buscada, y el cursor vuelve a la primera ocurrencia
-de "c".
+buscada.  Por ejemplo, suponga que ha tecleado «c», para buscar la
+primera ocurrencia de «c».  Ahora, si teclea «u», el cursor se moverá
+a la primera ocurrencia de «cu».  Ahora teclee <DEL>.  Esto borra la
+«u» de la cadena buscada, y el cursor vuelve a la primera ocurrencia
+de «c».
 
 Si está en medio de una búsqueda y teclea un carácter control o meta
 (con algunas pocas excepciones: los caracteres que son especiales en
@@ -926,8 +926,8 @@ la búsqueda se invierte.
 
 Una de las características agradables de Emacs es que se puede mostrar
 más de una ventana en la pantalla al mismo tiempo.  (Note que Emacs
-usa el término "marcos", descrito en la siguiente sección, para
-referirse a lo que otras aplicaciones llaman "ventanas".  El manual de
+usa el término «marcos», descrito en la siguiente sección, para
+referirse a lo que otras aplicaciones llaman «ventanas».  El manual de
 Emacs contiene un Glosario de términos.)
 
 >> Mueva el cursor a esta línea y teclee C-l C-l.
@@ -939,7 +939,7 @@ Emacs contiene un Glosario de términos.)
 >> Teclee C-M-v para desplazar la ventana inferior.
    (Si no tiene una tecla META real, teclee ESC C-v.)
 
->> Teclee C-x o ("o" para "otro") para mover el cursor a la ventana
+>> Teclee C-x o («o» para «otro») para mover el cursor a la ventana
    inferior.
 >> Use C-v y M-v en la ventana inferior para desplazarla.
    Siga leyendo estas direcciones en la ventana superior.
@@ -949,7 +949,7 @@ Emacs contiene un Glosario de términos.)
    El cursor en la ventana superior está justo donde estaba antes.
 
 Puede continuar usando C-x o para cambiar entre las ventanas.  La
-"ventana seleccionada", donde tiene lugar casi toda la edición, es la
+«ventana seleccionada», donde tiene lugar casi toda la edición, es la
 que tiene un cursor muy visible que parpadea cuando usted no está
 tecleando.  Las otras ventanas tienen su propia posición del cursor;
 si está ejecutando Emacs en una pantalla gráfica, esos cursores se
@@ -962,7 +962,7 @@ C-M-v.
 
 C-M-v es un ejemplo de un carácter CONTROL-META.  Si tiene una tecla
 META (o Alt), puede teclear C-M-v pulsando a la vez CONTROL y META
-mientras teclea v.  No importa qué tecla "vaya primero", CONTROL o
+mientras teclea v.  No importa qué tecla «vaya primero», CONTROL o
 META, porque las dos teclas actúan modificando los caracteres que
 teclea.
 
@@ -975,8 +975,8 @@ sí mismo, no es una tecla modificadora.
    ventana de abajo.
 
 (Si hubiera tecleado C-x 1 en la ventana inferior, esto eliminaría la
-superior.  Piense en este comando como "mantener sólo una
-ventana--aquella en la cual estoy.")
+superior.  Piense en este comando como «mantener solo una
+ventana —aquella en la cual estoy—».)
 
 No tiene por qué mostrarse el mismo buffer en ambas ventanas.  Si usa
 C-x C-f para encontrar un archivo en una ventana, la otra ventana no
@@ -997,10 +997,10 @@ diferentes:
 * MÚLTIPLES MARCOS
 ------------------
 
-Emacs puede crear también múltiples "marcos".  Marco es como
-denominamos a un grupo de ventanas, junto con sus menus, barras de
+Emacs puede crear también múltiples «marcos».  Marco es como
+denominamos a un grupo de ventanas, junto con sus menús, barras de
 desplazamiento, áreas de eco, etc.  En entornos gráficos, lo que Emacs
-denomina "marco" es lo que otras aplicaciones llaman "ventana".  En
+denomina «marco» es lo que otras aplicaciones llaman «ventana».  En
 entornos gráficos, es posible mostrar varios marcos al mismo tiempo.
 En una terminal, solo se puede mostrar un marco a la vez.
 
@@ -1015,7 +1015,7 @@ El primer marco no tiene nada de especial.
 
 También puede destruir un marco mediante el método normal que ofrezca
 el entorno gráfico (a menudo, pinchando con el ratón en un botón
-etiquetado como "X" en alguna de las esquinas superiores del marco).
+etiquetado como «X» en alguna de las esquinas superiores del marco).
 Si al hacer eso destruye el último marco de Emacs, la aplicación
 termina.
 
@@ -1023,24 +1023,24 @@ termina.
 * NIVELES RECURSIVOS DE EDICIÓN
 --------------------------------
 
-Algunas veces entrará a lo que es llamado un "nivel recursivo de
-edición".  Esto se indica en la línea de modo mediante corchetes en la
+Algunas veces entrará a lo que es llamado un «nivel recursivo de
+edición».  Esto se indica en la línea de modo mediante corchetes en la
 línea de modo, rodeando los paréntesis del nombre del modo mayor.  Por
 ejemplo, probablemente vea [(Fundamental)] en vez de (Fundamental).
 
 Para salir de los niveles recursivos de edición, teclee ESC ESC ESC.
-Éste es un comando de "salida" para todo propósito.  También lo puede
+Éste es un comando de «salida» para todo propósito.  También lo puede
 usar para eliminar ventanas extras, y salir del minibuffer.
 
 >> Teclee M-x para entrar a un minibuffer; luego teclee ESC ESC ESC
    para salir.
 
-No se puede usar C-g para salir de los "niveles recursivos de
-edición".  Esto es porque C-g es usado para cancelar comandos y
+No se puede usar C-g para salir de los «niveles recursivos de
+edición».  Esto es porque C-g es usado para cancelar comandos y
 argumentos DENTRO del nivel recursivo de edición.
 
 
-* CONSEGUIR MAS AYUDA
+* CONSEGUIR MÁS AYUDA
 ---------------------
 
 En este tutorial hemos tratado de ofrecer suficiente información para
@@ -1048,8 +1048,8 @@ que empiece a usar Emacs.  Hay tanto disponible en Emacs 
que sería
 imposible explicar todo aquí.  Sin embargo, quizá desee aprender más
 sobre Emacs, ya que tiene muchas otras características útiles.  Emacs
 provee comandos para leer documentación acerca de los comandos de
-Emacs.  Todos estos comandos de "ayuda" comienzan con el carácter
-Control-h, que es llamado "el carácter de Ayuda (Help)".
+Emacs.  Todos estos comandos de «ayuda» comienzan con el carácter
+Control-h, que es llamado «el carácter de Ayuda (Help)».
 
 Para usar las funciones de ayuda, teclee el carácter C-h, y luego un
 carácter que especifica qué tipo de ayuda quiere.  Si está REALMENTE
@@ -1069,12 +1069,12 @@ una descripción muy breve del comando.
 
          C-p runs the command previous-line
 
-Esto le dice el "nombre de la función".  Ya que los nombres de las
+Esto le dice el «nombre de la función».  Ya que los nombres de las
 funciones se eligen para indicar lo que hace el comando, pueden servir
 como una breve documentación: suficiente para recordarle los comandos
 que ha aprendido.
 
-Los comandos de múltiples caracteres tales como C-x C-s y (sí no tiene
+Los comandos de múltiples caracteres tales como C-x C-s y (si no tiene
 las teclas META o EDIT o ALT) <ESC>v también están permitidos después
 de C-h c.
 
@@ -1113,7 +1113,7 @@ pregunte por ella.
 >> Teclee C-h a file <Return>.
 
 Esto muestra en otra ventana una lista de todos los comandos M-x con
-la palabra "file" en sus nombres.  Verá los comandos de caracteres
+la palabra «file» en sus nombres.  Verá los comandos de caracteres
 listados junto a los nombres de los comandos correspondientes (por
 ejemplo, C-x C-f junto a find-file).
 
@@ -1123,7 +1123,7 @@ ejemplo, C-x C-f junto a find-file).
 >> Teclee C-x 1 para borrar la ventana de ayuda.
 
    C-h i        Leer los manuales incluidos (alias Info).  Este comando
-                lo pone en un buffer especial llamado "*info*" donde
+                lo pone en un buffer especial llamado «*info*» donde
                 puede leer manuales de los paquetes instalados en su
                 sistema. Teclee m emacs <Return> para leer el manual
                 de Emacs.  Si nunca ha usado Info, teclee ? y Emacs y
@@ -1137,22 +1137,22 @@ ejemplo, C-x C-f junto a find-file).
 ---------------------
 
 Puede aprender más acerca de Emacs leyendo su manual, ya sea como
-libro o en el propio Emacs (use el menú Ayuda, "Help", o teclee C-h
+libro o en el propio Emacs (use el menú Ayuda, «Help», o teclee C-h
 r).  Dos características que pueden gustarle son la completación, que
 ahorra teclear, y dired, que simplifica el manejo de archivos.
 
 La completación es una manera de ahorrar teclear innecesariamente.
-Por ejemplo, si quiere cambiarse al buffer "*Messages*", puede teclear
+Por ejemplo, si quiere cambiarse al buffer «*Messages*», puede teclear
 C-x b *M<Tab> y Emacs encontrará el resto del nombre del buffer tan
 lejos como pueda determinar de lo que ya haya tecleado.  La
 completación también funciona con nombres de comandos y de archivos.
 La completación se describe en el Info del manual de Emacs en el nodo
-llamado "Completion".
+llamado «Completion».
 
 Dired le permite listar los archivos en un directorio (y opcionalmente
 sus subdirectorios), moverse alrededor de esa lista, visitar,
 renombrar, borrar y aparte de eso operar en los archivos.  Dired está
-descrito en el manual de Emacs en el nodo llamado "Dired".
+descrito en el manual de Emacs en el nodo llamado «Dired».
 
 El manual también describe otras características de Emacs.
 
@@ -1164,7 +1164,7 @@ Para salir permanentemente de Emacs use C-x C-c.
 
 Este tutorial intenta ser comprensible para todos los usuarios nuevos,
 así que si encuentra algo que no esté claro, no se quede parado
-culpándose a sí mismo: ¡Quéjese!
+culpándose a sí mismo: ¡quéjese!
 
 
 * COPIA
@@ -1200,11 +1200,11 @@ La versión en español ha sido actualizada por:
        Rafael Sepúlveda <address@hidden>
        Juanma Barranquero <address@hidden>
 
-Por favor, en caso de duda, sólo es válido el original en inglés de la
+Por favor, en caso de duda, solo es válido el original en inglés de la
 siguiente nota de derechos de reproducción (que puede encontrar en el
 archivo TUTORIAL).
 
-Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
    Se permite a cualquiera hacer o distribuir copias literales de este
    documento como se recibe, en cualquier medio, siempre que la nota
@@ -1220,7 +1220,7 @@ Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software 
Foundation, Inc.
 Las condiciones para copiar Emacs mismo son más complejas, pero con el
 mismo espíritu.  Por favor lea el archivo COPYING y luego distribuya
 copias de GNU Emacs a sus amigos.  ¡Ayude a erradicar el
-obstruccionismo del software ("propietariedad") usando, escribiendo, y
+obstruccionismo del software («propietariedad») usando, escribiendo, y
 compartiendo software libre!
 
 --- end of TUTORIAL.es ---
diff --git a/etc/tutorials/TUTORIAL.fr b/etc/tutorials/TUTORIAL.fr
index 30a5c71..ab6394b 100644
--- a/etc/tutorials/TUTORIAL.fr
+++ b/etc/tutorials/TUTORIAL.fr
@@ -1202,7 +1202,7 @@ Cette version du didacticiel, comme GNU Emacs, est placée 
sous
 droit d'auteur, et vous pouvez en distribuer des copies sous certaines
 conditions :
 
-Copyright (C) 1985, 1996, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 2001-2015 Free Software Foundation, Inc.
 
    Chacun peut créer ou distribuer des copies de ce document tel qu'il
    l'a reçu, sur n'importe quel support, pourvu que la note de
diff --git a/etc/tutorials/TUTORIAL.he b/etc/tutorials/TUTORIAL.he
index 9a4430b..beb406e 100644
--- a/etc/tutorials/TUTORIAL.he
+++ b/etc/tutorials/TUTORIAL.he
@@ -14,10 +14,10 @@
 כדי להפסיק פקודה באמצע ההקשה, יש להקיש C-g.
 המחרוזת ">>" בקצה הימני מסמנת הוראות עבורכם כדי לנסות להשתמש בפקודה כלשהי.
 לדוגמה:
-<<שורות ריקות תתווספנה סביב השורה הבאה ע"י help-with-tutorial>>
+<<שורות ריקות תתווספנה סביב השורה הבאה ע״י help-with-tutorial>>
 [אמצע העמוד הושאר ריק למטרות לימודיות. הטקסט ממשיך להלן]
 >>  הקישו עתה C-v (הצג העמוד הבא) על־מנת להתקדם לעמוד הבא. (קדימה, נסו
-    זאת ע"י לחיצה והחזקה של מקש CONTROL והקשה על v.)
+    זאת ע״י לחיצה והחזקה של מקש CONTROL והקשה על v.)
     מעתה והלאה, עליכם לעשות זאת בכל פעם שתסיימו לקרוא את המוצג על המסך.
 
 שימו לב לחפיפה של שתי שורות כאשר אתם עוברים ממסך למשך, מה שמבטיח רציפות
@@ -99,7 +99,7 @@ P מ־previous (קודם), N מ־Next (הבא), B מ־Backward (אחורה)
 לתצוגה. לזה קוראים "גלילה". גלילה מאפשרת ל־Emacs להניע את הסמן למקום
 כלשהו בטקסט מבלי שהסמן ייעלם מהתצוגה.
 
->> נסו להניע את הסמן אל מחוץ לתצוגה ע"י הקשת C-n ושימו לב למה שקורה.
+>> נסו להניע את הסמן אל מחוץ לתצוגה ע״י הקשת C-n ושימו לב למה שקורה.
 
 אם תנועה תו־תו איטית מדי, תוכלו לנוע מילים שלמות. M-f ‏(META-f) מזיז
 את הסמן מילה אחת קדימה ואילו M-b זז מילה אחורה.
@@ -196,18 +196,18 @@ argument) משום מקישים אותו לפני הפקודה אליה הוא 
 >> נסו עתה להקיש C-u 8 C-v.
 
 כתוצאה, התצוגה היתה צריכה לזוז ב־8 שורות. אם ברצונכם לגלול בחזרה,
-אפשר להשיג זאת ע"י מתן ארגומנט ל־M-v.
+אפשר להשיג זאת ע״י מתן ארגומנט ל־M-v.
 
 אם הפעלתם את Emacs על־גבי תצוגה גרפית כגון X או MS-Windows, אתם
 צריכים לראות פס צר וגבוה, ששמו פס גלילה (scroll bar) בצידו של החלון
-של Emacs. ניתן לגלול את הטקסט ע"י הקלקת עכבר בתוך פס הגלילה.
+של Emacs. ניתן לגלול את הטקסט ע״י הקלקת עכבר בתוך פס הגלילה.
 
 אם העכבר שלכם מצויד בגלגל, תוכלו להשתמש גם בו לגלילת הטקסט.
 
 * אם Emacs מפסיק להגיב
 ----------------------
 
-אם Emacs מפסיק להגיב לפקודות, תוכלו להפסיק אותו בבטחה ע"י הקשת C-g.
+אם Emacs מפסיק להגיב לפקודות, תוכלו להפסיק אותו בבטחה ע״י הקשת C-g.
 פקודות שביצוען מתארך אף הן ניתנות להפסקה בעזרת C-g.
 
 בנוסף, תגרום הקשת C-g לביטול הארגומנט הנומרי או תחילת הפקודה שטרם
@@ -272,7 +272,7 @@ argument) משום מקישים אותו לפני הפקודה אליה הוא 
 יתכן שבמקלדת שלכם קיים מקש שעליו רשום <Delete>, אך זה אינו המקש שאנו
 קוראים לו <DEL>.
 
->> הקישו עתה מספר תוים, ואחר־כך מחקו אותם ע"י הקשות אחדות
+>> הקישו עתה מספר תוים, ואחר־כך מחקו אותם ע״י הקשות אחדות
    על <DEL>. אל תחששו לשנות את הקובץ הזה -- העותק המקורי
    של השיעור יישאר ללא שינוי. אתם עובדים על העותק האישי שלכם.
 
@@ -402,7 +402,7 @@ argument) משום מקישים אותו לפני הפקודה אליה הוא 
 אם שיניתם את הטקסט ואז החלטתם שהשינוי היה טעות, תוכלו לבטל את השינוי
 בעזרת פקודת הביטול, ‪C-/‬.
 
-בדרך כלל,‪C-/‬ מבטל את השינויים שבוצעו ע"י פקודה אחת. הפעלה חוזרת של
+בדרך כלל,‪C-/‬ מבטל את השינויים שבוצעו ע״י פקודה אחת. הפעלה חוזרת של
 ‪C-/‬ ברצף מבטלת שינויים של פקודות קודמות, אחת אחרי השניה.
 
 שני יוצאים מהכלל הזה: פקודות שאינן משנות טקסט (למשל פקודות הנעת הסמן
@@ -468,7 +468,7 @@ C-x u, אם־כי היא פחות נוחה להקשה מספר פעמים בזו
 
 פקודה זו שומרת בקובץ את הטקסט המוחזק בתוך Emacs. בפעם הראשונה שתפעילו
 פקודה זו, Emacs משנה את שם הקובץ המקורי לשם חדש כך שהמקור לא ילך
-לאיבוד. השם החדש נוצר ע"י הוספת "~" בסוף השם המקורי של הקובץ.
+לאיבוד. השם החדש נוצר ע״י הוספת "~" בסוף השם המקורי של הקובץ.
 
 כשהשמירה מסתיימת, Emacs מציג בשורה התחתונה את שם הקובץ שנשמר. נסו
 לשמור לעתים מזומנות על־מנת להימנע מלאבד יותר מדי מהעבודה שלכם אם המחשב
@@ -489,7 +489,7 @@ Emacs ייצור את הקובץ עם הטקסט שהקשתם. מאותו רגע
 --------
 
 אם תפתחו קובץ נוסף עם C-x C-f, הקובץ הראשון עדיין נשאר פתוח ב־Emacs.
-תוכלו לחזור אליו ע"י C-x C-f. כך תוכלו לפתוח מספר רב של קבצים.
+תוכלו לחזור אליו ע״י C-x C-f. כך תוכלו לפתוח מספר רב של קבצים.
 
 ‏Emacs מחזיק כל קובץ בתוך יישות בשם "חוצץ" ("buffer"). פתיחת קובץ יוצרת
 חוצץ חדש בתוך Emacs. כדי לראות את רשימת החוצצים הקיימים בתוך Emacs,
@@ -508,19 +508,19 @@ Emacs ייצור את הקובץ עם הטקסט שהקשתם. מאותו רגע
 כשקיימים מספר חוצצים, רק אחד מהם יכול להיות החוצץ "הנוכחי" בכל רגע
 נתון. זהו החוצץ בו אתם מבצעים עריכה באותו רגע. אם ברצונכם לערוך חוצץ
 אחר, עליכם "לעבור" חוצץ. עבור חוצצים שמתאימים לקבצים, ניתן לעשות זאת
-ע"י C-x C-f שיפקוד את הקובץ בשנית. אבל קיימת דרך פשוטה יותר: שימוש
+ע״י C-x C-f שיפקוד את הקובץ בשנית. אבל קיימת דרך פשוטה יותר: שימוש
 בפקודה C-x b. פקודה זו תחייב אותכם להקיש את שם החוצץ.
 
->> ניצור עתה קובץ בשם "foo" ע"י הקשת C-x C-f foo <Return>‎.
+>> ניצור עתה קובץ בשם "foo" ע״י הקשת C-x C-f foo <Return>‎.
    עתה חזרו לשיעור זה בעזרת C-x b TUTORIAL.he <Return>‎.
 
 ברוב המקרים שם החוצץ זהה לשם הקובץ (ללא שם התיקיה שלו). אבל אין זה
-תמיד כך. רשימת החוצצים שנוצרת ע"י C-x C-b תציג הן את שם החוצץ והן את
+תמיד כך. רשימת החוצצים שנוצרת ע״י C-x C-b תציג הן את שם החוצץ והן את
 שם הקובץ עבור כל החוצצים הקיימים ב־Emacs.
 
 כל טקסט שמוצג בחלון של Emacs הינו תמיד חלק של חוצץ כלשהו. קיימים
 חוצצים שאינם קשורים לשום קובץ. לדוגמא, החוצץ בשם "*Buffer List*"
-המחזיק את רשימת החוצצים שנוצרה ע"י C-x C-b אינו מציג שום קובץ. גם
+המחזיק את רשימת החוצצים שנוצרה ע״י C-x C-b אינו מציג שום קובץ. גם
 לחוצץ הנוכחי ששמו TUTORIAL.he לא היה קובץ עד שהקשתם על C-x C-s כדי
 לשמור אותו בקובץ.
 
@@ -545,18 +545,18 @@ C-x C-s. לכן קיימת פקודה
 
 >> הכניסו שורה של טקסט ואחר־כך הקישו C-x s.
    הוא צריך לשאול האם לשמור חוצץ בשם TUTORIAL.he.
-   השיבו בחיוב ע"י הקשה על "y".
+   השיבו בחיוב ע״י הקשה על "y".
 
 
 * הרחבת אוסף הפקודות
 --------------------
 
-מספר הפקודות ב־Emacs גדול בהרבה ממה שניתן להפעיל ע"י כל תוי ה־control
+מספר הפקודות ב־Emacs גדול בהרבה ממה שניתן להפעיל ע״י כל תוי ה־control
 וה־meta. כדי להתגבר על בעיה זו, Emacs משתמש בפקודות X המרחיבות (eXtend)
 את אוסף הפקודות הרגיל. פקודות הרחבה אלו הן שתים:
 
        ‏C-x     הרחבת תו. תו בודד שבא אחריו משלים את הפקודה.
-       ‏M-x     הרחבה ע"י שם הפקודה. אחריו בא שם ארוך של פקודה.
+       ‏M-x     הרחבה ע״י שם הפקודה. אחריו בא שם ארוך של פקודה.
 
 בעזרת שתי אלו ניתן להפעיל פקודות שימושיות שבהן משתמשים לעתים רחוקות
 יותר מאשר פקודות שלמדתם עד עכשיו. כמה מהן כבר ראיתם: C-x C-f לפתיחת
@@ -577,7 +577,7 @@ Emacs: הוא מחזיר אתכם לשורת הפקודות הבסיסית של
 תצטרכו להקיש את הפקודה "fg" או ‪"%emacs"‬.
 
 הרגע הנכון להשתמש ב־C-x C-c הוא כאשר אתם עומדים להתנתק (log out).
-כמו־כן, תצטרכו להשתמש בו כדי לצאת מ־Emacs שהופעל ע"י תוכניות אחרות
+כמו־כן, תצטרכו להשתמש בו כדי לצאת מ־Emacs שהופעל ע״י תוכניות אחרות
 כגון קריאת דואר אלקטרוני.
 
 קיימות פקודות C-x רבות מאד. להלן רשימת אלו שכבר למדתם:
@@ -591,17 +591,17 @@ Emacs: הוא מחזיר אתכם לשורת הפקודות הבסיסית של
        ‏C-x 1          השאר רק חלון אחד ומחק כל השאר
        ‏C-x u          בטל פקודה אחרונה
 
-הרחבה ע"י שם הפקודה שימושית עם פקודות עוד יותר נדירות או פקודות
+הרחבה ע״י שם הפקודה שימושית עם פקודות עוד יותר נדירות או פקודות
 ספציפיות רק לאופני פעולה (modes) מיוחדים. דוגמא לכך היא פקודה
 replace-string (החלף מחרוזת) אשר מחליפה מחרוזת אחת במשנה בכל החוצץ.
 אחרי שתקישו M-x, ‏Emacs מציג M-x בתחתית התצוגה ומחכה שתקישו את שם
 הפקודה, במקרה זה "replace-string". מספיק שתקישו "repl s<TAB>‎" ו־Emacs
 ישלים את השם המלא. (<TAB> הוא מקש Tab, בדרך כלל תמצאו אותו מעל מקש
 ה־CapsLock או Shift, ליד הקצה השמאלי של המקלדת.) סיימו את הזנת הפקודה
-ע"י הקשת <Return>.
+ע״י הקשת <Return>.
 
 הפקודה להחלפת מחרוזת זקוקה לשני ארגומנטים -- המחרוזת שתוחלף וזו שתחליף
-אותה. סיימו הקשה של כל אחת מהן ע"י <Return>.
+אותה. סיימו הקשה של כל אחת מהן ע״י <Return>.
 
 >> הביאו את הסמן שתי שורות מתחת לשורה זו.
    עתה הקישו M-x repl s<Return>changed<Return>altered<Return>‎.
@@ -703,7 +703,7 @@ Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פות
 בסיום מילה אם הטקסט שהקשתם ארוך מדי בשביל שורה אחת.
 
 להפעלת Auto Fill mode יש להקיש M-x auto-fill-mode <Return>‎. כאשר אופן
-זה מופעל, ניתן לבטלו ע"י M-x auto-fill-mode <Return>‎. זאת אומרת, פקודה
+זה מופעל, ניתן לבטלו ע״י M-x auto-fill-mode <Return>‎. זאת אומרת, פקודה
 זו מפעילה את האופן כשאינו פעיל ומבטלת אותו כשהוא פעיל. לפעולה זו
 קוראים "מיתוג" -- הפקודה "ממתגת" את האופן.
 
@@ -717,7 +717,7 @@ Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פות
 
 >> הקישו C-x f עם ארגומנט של 20. (C-u 2 0 C-x f). אחר־כך הקישו טקסט
    כלשהו ושימו לב ש־Emacs פותח שורות חדשות אחרי 20 תווים לכל היותר.
-   לבסוף, החזירו את הגדרת השוליים ל־70 ע"י שימוש חוזר ב־C-x f.
+   לבסוף, החזירו את הגדרת השוליים ל־70 ע״י שימוש חוזר ב־C-x f.
 
 אם ערכתם שינויים באמצע פסקה, Auto Fill mode לא ימלא שורות מחדש באופן
 אוטומטי.
@@ -766,7 +766,7 @@ Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פות
 נמצא "סמ". עתה הקישו <DEL>. ה־"מ" נמחק מהמחרוזת והסמן חוזר למקום בו
 הוא מצא את "ס" לראשונה.
 
-אם במהלך החיפוש תפעילו פקודה כלשהי ע"י הקשה על מקש תוך לחיצה על
+אם במהלך החיפוש תפעילו פקודה כלשהי ע״י הקשה על מקש תוך לחיצה על
 CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מכלל זה -- אלו תווים
 מיוחדים בעת חיפוש, כדוגמת C-s ו־C-r.)
 
@@ -800,7 +800,7 @@ CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מ
    הסמן בחלון העליון יישאר במקום בו הוא היה לפני־כן.
 
 תוכלו להמשיך להשתמש ב־C-x o כדי לדלג בין החלונות. "החלון הנבחר", אותו
-חלון בו הנכם עורכים טקסט, מזוהה ע"י סמן בולט שמהבהב בזמן שאינכם
+חלון בו הנכם עורכים טקסט, מזוהה ע״י סמן בולט שמהבהב בזמן שאינכם
 מקלידים. לכל החלונות האחרים מיקום סמן משלהם; אם הפעלתם את Emacs על צג
 גרפי, מיקום הסמן בחלונות האחרים מוצג כתיבה ריקה שאינה מהבהבת.
 
@@ -809,9 +809,9 @@ CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מ
 הנבחר.
 
 ‏C-M-v היא דוגמא אחת של פקודת CONTROL-META. אם במקלדת שלכם קיים מקש
-META (או Alt) אמיתי, תוכלו להקיש את הפקודה ע"י לחיצה והחזקה של מקשי
+META (או Alt) אמיתי, תוכלו להקיש את הפקודה ע״י לחיצה והחזקה של מקשי
 CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו על CONTROL ו־META
-אינו משנה כי שני המקשים הללו פועלים ע"י שינוי התו המוקש יחד איתם.
+אינו משנה כי שני המקשים הללו פועלים ע״י שינוי התו המוקש יחד איתם.
 
 אם אין במקלדת מקש META אמיתי ואתם משתמשים ב־<ESC> כתחליף, הסדר כן
 משנה: חייבים להקיש <ESC> ורק לאחר מכן CONTROL-v, וזאת משום
@@ -854,8 +854,8 @@ CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו ע
 >> הקישו M-x delete-frame <Return>‎.
    התבנית שבה הקשתם את הפקודה תיסגר ותיעלם מהמסך.
 
-כמו־כן, ניתן לסגור תבנית בדרך הרגילה הנתמכת ע"י התצוגה הגרפית של
-המערכת שלכם (בדרך־כלל, ע"י הקלקה על הכפתור המסומן ב־"X" בפינה עליונה
+כמו־כן, ניתן לסגור תבנית בדרך הרגילה הנתמכת ע״י התצוגה הגרפית של
+המערכת שלכם (בדרך־כלל, ע״י הקלקה על הכפתור המסומן ב־"X" בפינה עליונה
 של התבנית.) שום מידע אינו הולך לעיבוד כאשר סוגרים תבנית (או חלון).
 המידע הזה פשוט יורד מהתצוגה, אבל ניתן לאחזרו מאוחר יותר.
 
@@ -863,7 +863,7 @@ CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו ע
 * רמות עריכה רקורסיביות
 -----------------------
 
-יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין זאת ע"י
+יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין זאת ע״י
 סוגריים מרובעים בשורת הסטטוס מסביב לשם האופן הראשי. למשל, יוצג שם
 [(Fundamental)] במקום (Fundamental).
 
@@ -910,7 +910,7 @@ M-x help <Return>‎ כתחליף.)
 לציין מה הן עושות, השמות עשויים לשמש כתיעוד מקוצר -- מספיק כדי להזכיר
 לכם את הפקודות שלמדתם בעבר.
 
-ניתן לציין אחרי C-h c גם פקודות שמופעלות ע"י סדרת מקשים באורך גדול
+ניתן לציין אחרי C-h c גם פקודות שמופעלות ע״י סדרת מקשים באורך גדול
 מאחד, כגון C-x C-s או (אם אין מקש META או EDIT או ALT) ‏‎<ESC> v.
 
 לקבלת מידע מפורט יותר על פקודה, השתמשו בפקודה C-h k במקום C-h c.
@@ -934,7 +934,7 @@ M-x help <Return>‎ כתחליף.)
 
     ‏C-h a     פקודות בנוגע לנושא מסויים. הקישו מילת מפתח ו־Emacs
                יציג את רשימת הפקודות ששמותיהן מכילות את מילת המפתח.
-               כל הפקודות הללו ניתנות להפעלה ע"י META-x. עבור חלק
+               כל הפקודות הללו ניתנות להפעלה ע״י META-x. עבור חלק
                מהפקודות תוצג גם סדרת מקשים שמפעילה את הפקודה.
 
 >> הקישו C-h a file <Return>‎.
@@ -960,9 +960,9 @@ find-file.
 * עוד תכונות
 ------------
 
-תוכלו ללמוד עוד על־אודות Emacs ע"י קריאה במדריך למשתמש שלו, אם כספר
+תוכלו ללמוד עוד על־אודות Emacs ע״י קריאה במדריך למשתמש שלו, אם כספר
 מודפס או בגירסה מקוונת בתוך Emacs עצמו. (תוכלו להגיע אל המדריך דרך
-תפריט Help או ע"י הקשה על C-h r.) אולם שתי תכונות שבוודאי ימצאו חן
+תפריט Help או ע״י הקשה על C-h r.) אולם שתי תכונות שבוודאי ימצאו חן
 בעיניכם הן השלמה אשר חוסכת הקשות, ו־dired שמאפשרת טיפול נוח בקבצים.
 
 השלמה היא דרך להימנע מהקשות מיותרות. למשל, אם ברצונכם לעבור לחוצץ
@@ -991,15 +991,15 @@ find-file.
 --------------
 
 שיעור זה הינו צאצא של שורה ארוכה של שיעורים בשימוש ב־Emacs, החל מהגרסה
-הראשונה שנכתבה ע"י Stuart Cracraft עבור גירסת ה־Emacs המקורית.
+הראשונה שנכתבה ע״י Stuart Cracraft עבור גירסת ה־Emacs המקורית.
 
 גירסה זו של השיעור הינה חלק מחבילת GNU Emacs. היא מוגנת בזכויות יוצרים
 וניתנת להעתקה והפצת עותקים בתנאים מסויימים כדלקמן:
 
-                       Copyright (C) 2010-2014 Free Software Foundation, Inc.
+                       Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ‏GNU Emacs הינו תכנה חפשית; זכותכם להפיצו ו\או לשנותו בכפוף לתנאי
-הרשיון GNU General Public License, כפי שהוא יוצא לאור ע"י Free
+הרשיון GNU General Public License, כפי שהוא יוצא לאור ע״י Free
 Software Foundation, אם בגרסא 3 של הרשיון, ואם (כאופציה השמורה לכם)
 בכל גרסא מאוחרת יותר.
 
@@ -1012,7 +1012,7 @@ Software Foundation, אם בגרסא 3 של הרשיון, ואם (כאופציה
 
 הנכם מוזמנים לקרוא את הקובץ COPYING ואז אכן לחלק עותקים של GNU Emacs
 לחבריכם. עזרו לנו לחסל את "הבעלות" על תוכנה שאינה אלא חבלה בתוכנה,
-וזאת ע"י שימוש, כתיבה ושיתוף של תוכנה חופשית!
+וזאת ע״י שימוש, כתיבה ושיתוף של תוכנה חופשית!
 
 
 
diff --git a/etc/tutorials/TUTORIAL.it b/etc/tutorials/TUTORIAL.it
index b0a5bc1..300fd22 100644
--- a/etc/tutorials/TUTORIAL.it
+++ b/etc/tutorials/TUTORIAL.it
@@ -1085,7 +1085,7 @@ distribuito con il permesso di farne copie a determinate 
condizioni:
    indicativo, restando comunque inteso il fatto che è quella originale a
    fare fede.
 
-Copyright (C) 2003-2014 Free Software Foundation, Inc.
+Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
    È permesso a chiunque copiare e distribuire attraverso ogni mezzo copie
    fedeli di questo documento così come viene ricevuto, a condizione che
diff --git a/etc/tutorials/TUTORIAL.ja b/etc/tutorials/TUTORIAL.ja
index c4d2d4e..c090027 100644
--- a/etc/tutorials/TUTORIAL.ja
+++ b/etc/tutorials/TUTORIAL.ja
@@ -1062,7 +1062,7 @@ starting with the one written by Stuart Cracraft for the 
original Emacs.
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/etc/tutorials/TUTORIAL.ko b/etc/tutorials/TUTORIAL.ko
index 5664022..57bfadd 100644
--- a/etc/tutorials/TUTORIAL.ko
+++ b/etc/tutorials/TUTORIAL.ko
@@ -981,7 +981,7 @@ C-x C-s와 (META쇠나 EDIT쇠 혹은 교체쇠가 있으면) <ESC>v와 같은 
 GNU 이맥스와 같이 이 지침서 판은 저작권이 있으며 특정한 조건을 만족할
 때에 복사본을 배포할 수 있는 허가를 갖고 나온 것이다:
 
-Copyright (C) 1985, 1996, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 2001-2015 Free Software Foundation, Inc.
 
    이 문서는 이 저작권 공고와 허용 공고가 그대로 유지되고, 배포자가
    수취자에게 이 공고에 따라 허용되는 것처럼 또 재분배하는 것을
diff --git a/etc/tutorials/TUTORIAL.nl b/etc/tutorials/TUTORIAL.nl
index eebcacc..8155ee4 100644
--- a/etc/tutorials/TUTORIAL.nl
+++ b/etc/tutorials/TUTORIAL.nl
@@ -1209,7 +1209,7 @@ Deze versie van de inleiding is onderdeel van GNU Emacs.  
Het valt
 onder copyright.  Je mag deze inleiding verspreiden onder bepaalde
 voorwaarden:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation,
   Inc.
 
   Dit bestand is onderdeel van GNU Emacs.
@@ -1239,7 +1239,7 @@ Engels origineel van de copyrightmelding en condities:
 This version of the tutorial is a part of GNU Emacs.  It is copyrighted
 and comes with permission to distribute copies on certain conditions:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.pl b/etc/tutorials/TUTORIAL.pl
index 9f2bbb5..f9f1318 100644
--- a/etc/tutorials/TUTORIAL.pl
+++ b/etc/tutorials/TUTORIAL.pl
@@ -1209,7 +1209,7 @@ z pomocą Ryszarda Kubiaka i Janusza S. Bienia 
<address@hidden>.
 Ta wersja samouczka, podobnie jak GNU Emacs, jest chroniona prawem
 autorskim, ale wolno ją kopiować pod następującymi warunkami:
 
-Copyright (C) 1985, 1994, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1994, 2001-2015 Free Software Foundation, Inc.
 
 Zezwala się na wykonywanie lub rozpowszechnianie
 wiernych kopii tego dokumentu w otrzymanej formie, na dowolnym
diff --git a/etc/tutorials/TUTORIAL.pt_BR b/etc/tutorials/TUTORIAL.pt_BR
index 086a364..619f4fc 100644
--- a/etc/tutorials/TUTORIAL.pt_BR
+++ b/etc/tutorials/TUTORIAL.pt_BR
@@ -1056,7 +1056,7 @@ Essa versão do tutorial foi originalmente traduzida por 
Marcelo Toledo
 <address@hidden> e como o GNU Emacs, tem um copyright, e vem
 com uma permissão de distribuição de cópias nas seguintes condições:
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
    Permissão é garantida a qualquer um para fazer ou distribuir cópias
    integrais deste documento como recebido, em qualquer meio, deixando
diff --git a/etc/tutorials/TUTORIAL.ro b/etc/tutorials/TUTORIAL.ro
index ec43796..7bf675e 100644
--- a/etc/tutorials/TUTORIAL.ro
+++ b/etc/tutorials/TUTORIAL.ro
@@ -4,7 +4,7 @@ Mulţumiri Aidei Hulubei <address@hidden> pentru corecturi şi 
sugestii.
 
 Această versiune a fost produsă plecând de la versiunea în limba
 engleză, care este
-Copyright (c) 1985, 2013-2014 Free Software Foundation, Inc.
+Copyright (c) 1985, 2013-2015 Free Software Foundation, Inc.
 
 Citiţi acum versiunea românească a tutorialului de Emacs.
 
@@ -1082,7 +1082,7 @@ continuare noţita de copyright originală în limba engleză.
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/etc/tutorials/TUTORIAL.ru b/etc/tutorials/TUTORIAL.ru
index ff898bc..d490c78 100644
--- a/etc/tutorials/TUTORIAL.ru
+++ b/etc/tutorials/TUTORIAL.ru
@@ -1105,7 +1105,7 @@ Dired позволяет вам отображать список файлов 
 (copyrighted) и приходит с ограничениями распространения копий со
 следующими соглашениями:
 
-Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/etc/tutorials/TUTORIAL.sk b/etc/tutorials/TUTORIAL.sk
index 0a963d0..9528064 100644
--- a/etc/tutorials/TUTORIAL.sk
+++ b/etc/tutorials/TUTORIAL.sk
@@ -1074,7 +1074,7 @@ tútorialom napísaným Stuartom Cracraftom pre pôvodný 
Emacs.
 Táto verzia tútorialu je, podobne ako GNU Emacs, chránená copyrightom
 a je šírená s povolením distribuovať kópie za istých podmienok:
 
-Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
    Každému je zaručené právo vytvárať a distribuovať presné kópie tohto
    dokumentu tak, ako ho dostal, na akomkoľvek médiu, s tým, že bude
diff --git a/etc/tutorials/TUTORIAL.sl b/etc/tutorials/TUTORIAL.sl
index 65df52e..8fb5113 100644
--- a/etc/tutorials/TUTORIAL.sl
+++ b/etc/tutorials/TUTORIAL.sl
@@ -1119,7 +1119,7 @@ Emacs. V slovenščino ga je prevedel Primož Peterlin.
 To besedilo, kot sam GNU Emacs, je avtorsko delo, in njegovo
 razmnoževanje in razširjanje je dovoljeno pod naslednjimi pogoji:
 
-Copyright © 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright © 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
   Ta datoteka je del paketa GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.sv b/etc/tutorials/TUTORIAL.sv
index aa574e0..8acb6ec 100644
--- a/etc/tutorials/TUTORIAL.sv
+++ b/etc/tutorials/TUTORIAL.sv
@@ -1117,7 +1117,7 @@ Lidell översatte den till Svenska.
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.th b/etc/tutorials/TUTORIAL.th
index 77e8cfb..64b50b1 100644
--- a/etc/tutorials/TUTORIAL.th
+++ b/etc/tutorials/TUTORIAL.th
@@ -964,7 +964,7 @@ starting with the one written by Stuart Cracraft for the 
original Emacs.
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-Copyright (C) 1985, 1996, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 2001-2015 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/etc/tutorials/TUTORIAL.zh b/etc/tutorials/TUTORIAL.zh
index 8658705..95084b4 100644
--- a/etc/tutorials/TUTORIAL.zh
+++ b/etc/tutorials/TUTORIAL.zh
@@ -1049,7 +1049,7 @@ issue here>」。
 這個版本的快速指南和 GNU Emacs 一樣都是版權化的,並且允許在某些條件下
 散佈其拷貝:
 
-Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/leim/.gitignore b/leim/.gitignore
deleted file mode 100644
index 02175a1..0000000
--- a/leim/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.elc
-leim-list.el
diff --git a/leim/ChangeLog b/leim/ChangeLog
index 93c3386..4bda9a6 100644
--- a/leim/ChangeLog
+++ b/leim/ChangeLog
@@ -1,3 +1,16 @@
+2015-01-04  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for leim
+       * Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
+       (am__v_GEN_0, am__v_GEN_1, AM_V_at, am__v_at_, am__v_at_0)
+       (am__v_at_1): New macros, from src/Makefile.in.
+       (${leimdir}/quail/%.el, misc_convert, ${leimdir}/leim-list.el)
+       (${leimdir}/ja-dic/ja-dic.el): Use them.
+
+2014-12-14  Paul Eggert  <address@hidden>
+
+       * SKK-DIC/SKK-JISYO.L: Update to version 1.1216.
+
 2014-10-20  Glenn Morris  <address@hidden>
 
        * Merge in all changes up to 24.4 release.
@@ -2558,7 +2571,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1997-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1997-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/leim/Makefile.in b/leim/Makefile.in
index 16f3917..573acf7 100644
--- a/leim/Makefile.in
+++ b/leim/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2015 Free Software Foundation, Inc.
 # Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 #   2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -29,6 +29,19 @@ address@hidden@
 # Where the generated files go.
 leimdir = ${srcdir}/../lisp/leim
 
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 =
+
 # Prevent any settings in the user environment causing problems.
 unexport EMACSDATA EMACSDOC EMACSPATH
 
@@ -88,11 +101,12 @@ ${leimdir}/quail ${leimdir}/ja-dic:
 
 ## All of TIT_GB and TIT_BIG5.
 ${leimdir}/quail/%.el: ${srcdir}/CXTERM-DIC/%.tit
-       ${RUN_EMACS} -l titdic-cnv \
+       $(AM_V_GEN)${RUN_EMACS} -l titdic-cnv \
          -f batch-titdic-convert -dir ${leimdir}/quail $<
 
 
-misc_convert = ${RUN_EMACS} -l titdic-cnv -f batch-miscdic-convert -dir 
${leimdir}/quail
+misc_convert = $(AM_V_GEN)${RUN_EMACS} \
+  -l titdic-cnv -f batch-miscdic-convert -dir ${leimdir}/quail
 
 ## CTLau.el, CTLau-b5.el.
 ${leimdir}/quail/CT%.el: ${srcdir}/MISC-DIC/CT%.html
@@ -114,16 +128,16 @@ ${leimdir}/quail/tsang-%.el ${leimdir}/quail/quick-%.el: 
${srcdir}/MISC-DIC/cang
 leim-list.el: ${leimdir}/leim-list.el
 
 ${leimdir}/leim-list.el: ${srcdir}/leim-ext.el ${TIT_MISC}
-       rm -f $@
-       ${RUN_EMACS} -l international/quail \
+       $(AM_V_GEN)rm -f $@
+       $(AM_V_at)${RUN_EMACS} -l international/quail \
          --eval "(update-leim-list-file (unmsys--file-name \"${leimdir}\"))"
-       sed -n -e '/^[^;]/p' -e 's/^;\(;*\)inc /;\1 /p' < $< >> $@
+       $(AM_V_at)sed -n -e '/^[^;]/p' -e 's/^;\(;*\)inc /;\1 /p' < $< >> $@
 
 
 ${leimdir}/ja-dic/ja-dic.el: | $(leimdir)/ja-dic
 
 ${leimdir}/ja-dic/ja-dic.el: $(srcdir)/SKK-DIC/SKK-JISYO.L
-       $(RUN_EMACS) -batch -l ja-dic-cnv \
+       $(AM_V_GEN)$(RUN_EMACS) -batch -l ja-dic-cnv \
          -f batch-skkdic-convert -dir "$(leimdir)/ja-dic" "$<"
 
 
diff --git a/leim/README b/leim/README
index 27d5339..6a1fb32 100644
--- a/leim/README
+++ b/leim/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/leim/SKK-DIC/SKK-JISYO.L b/leim/SKK-DIC/SKK-JISYO.L
index e81ccde..44d8644 100644
--- a/leim/SKK-DIC/SKK-JISYO.L
+++ b/leim/SKK-DIC/SKK-JISYO.L
@@ -13,9 +13,9 @@
 ;; SKK Development Team <address@hidden>
 ;;
 ;; Maintainer: SKK Development Team <address@hidden>
-;; Version: $Id: SKK-JISYO.L,v 1.1164 2013/12/21 00:10:02 czkmt Exp $
+;; Version: $Id: SKK-JISYO.L,v 1.1216 2014/12/13 00:10:02 czkmt Exp $
 ;; Keywords: japanese
-;; Last Modified: $Date: 2013/12/21 00:10:02 $
+;; Last Modified: $Date: 2014/12/13 00:10:02 $
 ;;
 ;; This dictionary is free software; you can redistribute it and/or
 ;; modify it under the terms of the GNU General Public License as
@@ -53846,7 +53846,7 @@ zyklus /
 ���ˤä� /������/
 ���ˤ� /����/
 ���̤��������ۡ��� /�Σȣ˥ۡ���/
-���̤��ä��� / n �ѷ�/
+���̤��ä��� /�γѷ�/
 ���̤��礦 /�ζ�/
 ���̤��礯 /�ζ�/N��;north pole. �����̼��ˤ�-��/
 ���̤� /�θ�/
@@ -69555,7 +69555,7 @@ zyklus /
 ���Ф� /����;��base.�ּҲ�-��/����;��board.��PC��-��/����/
 ���Ф󤬤� /���ij�/
 ���Ф󤳤����� /���׸�/
-���Ф󤴤� /���ֹ�;(concat 
"http:057057www.boj.or.jp057oshiete057money05705200002.htm")/
+���Ф󤴤� /���ֹ�;(concat 
"http:\057\057www.boj.or.jp\057announcements\057education\057oshiete\057money\057c14.htm\057")/
 ���Ф� /��Ⱦ��/
 ���Ф󤸤礦 /���ľ�/���׾�/
 ���Ф󤻤��� /��������/
@@ -80531,7 +80531,7 @@ zyklus /
 ����狼��� /���²λ�/
 ����勞 /����/����/
 ����勞�Ƥ� /����Ū/
-�� /��/��/��/��/��/ʴ/��;arc/��/��/��/��/��;(�����) =��/Ф;(�����) 
=��,��/��;(�����) 
�ָġפ�ά��/��;ưʪ�λ�/��/ѻ;�ֻ��פε��(��̾�Ѵ���)/̼;���ƻ�/��/��;�ƾ�/��;�Ǹ�/��;���夦�Ȥ�/��;�ϻ�/��;�Ƶ�/��;�ȸ�/��/��;����/��;��������/�;����/��;���(����)/��;����/��;���(���㤳)/��;�Τ�/��;����/ܵ/��;�ˤ�ˤ�/��;��ij/�;��/��;������/��;����/��;������/��;����/��;lone/��;fox/��;����/��;��(�ֻҤε㤭��)/��;�����Ť�/�;���/��;�Ȥ�/��;�ָספΰ��λ�/��;����/��;�Ȥ餫����/��;����פε��(��̾�Ѵ���)/��;����פΰ��λ�/��;�Ĥ�/��;����פΰ��λ�/��;����/��;����/��/��
 [...]
+�� /��/��/��/��/��/ʴ/��;arc/��/��/��/��/��;(�����) =��/Ф;(�����) 
=��,��/��;(�����) 
�ָġפ�ά��/��;ưʪ�λ�/��/ѻ;�ֻ��פε��(��̾�Ѵ���)/̼;���ƻ�/��/��;�ƾ�/��;�Ǹ�/��;���夦�Ȥ�/��;�ϻ�/��;�յ�/��;�ȸ�/��/��;����/��;��������/�;����/��;���(����)/��;����/��;���(���㤳)/��;�Τ�/��;����/ܵ/��;�ˤ�ˤ�/��;��ij/�;��/��;������/��;����/��;������/��;����/��;lone/��;fox/��;����/��;��(�ֻҤε㤭��)/��;�����Ť�/�;���/��;�Ȥ�/��;�ָספΰ��λ�/��;����/��;�Ȥ餫����/��;����פε��(��̾�Ѵ���)/��;����פΰ��λ�/��;�Ĥ�/��;����פΰ��λ�/��;����/��;����/��/��
 [...]
 ��> /��;small/��;(child) ����,�ҥ饤����,�ҥ᡼����/��;(ưʪ�λ�) ��ǭ/��;late/��;(old) 
�Ű���Τ/��;(lone) �ɷ�,��ij/
 ���������� /��ú�/
 ���������礦 /��������/
@@ -138286,7 +138286,7 @@ zyklus /
 �ˤ������� /�󼡵���/
 �ˤ������������� /�󼡵�������/
 �ˤ����礯���� /�󼡶���/
-�ˤ����礯��� /��������/ 2 ������/
+�ˤ����礯��� /��������/2������/
 �ˤ��� /��/
 �ˤ������ä��礦 /�󼴷뾽/
 �ˤ����� /2����/
diff --git a/leim/ja-dic/.gitignore b/leim/ja-dic/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/leim/ja-dic/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/leim/leim-ext.el b/leim/leim-ext.el
index 27729cd..d3cd3c6 100644
--- a/leim/leim-ext.el
+++ b/leim/leim-ext.el
@@ -1,6 +1,6 @@
 ;; leim-ext.el -- extra leim configuration     -*- coding:utf-8; -*-
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H13PRO009
diff --git a/leim/makefile.w32-in b/leim/makefile.w32-in
index 10948e6..c9bc419 100644
--- a/leim/makefile.w32-in
+++ b/leim/makefile.w32-in
@@ -1,6 +1,6 @@
 # -*- Makefile -*- for leim subdirectory in GNU Emacs on the Microsoft Windows 
API.
 
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015 Free Software Foundation, Inc.
 # Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 #   2006, 2007
 #   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lib-src/.gitignore b/lib-src/.gitignore
deleted file mode 100644
index c931a15..0000000
--- a/lib-src/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-DOC
-ctags.c
-stamp_BLD
-echolisp.tmp
-
-oo/
-oo-spd/
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 0093abe..8d2c95e 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,152 @@
+2015-01-24  Paul Eggert  <address@hidden>
+
+       Fix a couple of AM_V_GEN bugs
+       * Makefile.in (AM_V_GEN, am__v_GEN_, am__v_GEN_0, am__v_GEN_1)
+       (AM_V_at, am__v_at_, am__v_at_0, am__v_at_1):
+       New macros, copied from ../src/Makefile.in.
+
+2015-01-22  Paul Eggert  <address@hidden>
+
+       Check exit statuses in lib-src/Makefile
+       * Makefile.in ($(DESTDIR)${archlibdir}, install, uninstall)
+       (mostlyclean, clean, distclean, extraclean):
+       Check exit statuses more carefully.  Reindent to fit in 80 chars.
+       (bootstrap-clean maintainer-clean): Remove unnecessary 'true'.
+
+2015-01-22  Ulrich Müller  <address@hidden>
+
+       * Makefile.in ($(DESTDIR)${archlibdir}): Don't fail if the chown
+       or chgrp command is unsuccessful; the 'update-game-score' program
+       has a fallback for this at runtime.
+
+2015-01-21  Ulrich Müller  <address@hidden>
+
+       * update-game-score.c: Allow the program to run sgid instead
+       of suid, in order to match common practice for most games.
+       (main): Check if we are running sgid.  Pass appropriate file
+       permission bits to 'write_scores'.
+       (write_scores): New 'mode' argument, instead of hardcoding 0644.
+       (get_prefix): Update error message.
+       * Makefile.in (gamegroup): New variable, set by configure.
+       ($(DESTDIR)${archlibdir}): Handle both suid or sgid when
+       installing the 'update-game-score' program.
+
+2015-01-16  Eli Zaretskii  <address@hidden>
+
+       * Makefile.in (AM_V_RC, am__v_RC_, am__v_RC_0, am__v_RC_1): New
+       macros.
+       (emacsclient.res): Use $(AM_V_RC).
+
+2015-01-16  Paul Eggert  <address@hidden>
+
+       Give up on -Wsuggest-attribute=const
+       * make-docfile.c (write_globals):
+       Remove special hack for Fnext_read_file_uses_dialog_p
+
+2015-01-13  Paul Eggert  <address@hidden>
+
+       Don't say Fnext_read_file_uses_dialog_p is const
+       * make-docfile.c (write_globals):
+       Add a special hack for Fnext_read_file_uses_dialog_p.
+
+2015-01-13  Dmitry Antipov  <address@hidden>
+
+       Support DEFUN attributes.
+       * make-docfile.c (struct global): New field 'flags'.
+       (DEFUN_noreturn, DEFUN_const): New enum bitfields.
+       (add_global): Now return pointer to global.
+       (write_globals): Add _Noreturn and ATTRIBUTE_CONST attributes
+       if requested by global's flags.
+       (stream_match): New function.
+       (scan_c_stream): Recognize 'attributes:' of DEFUN.
+
+2015-01-10  Paul Eggert  <address@hidden>
+
+       Port to 32-bit --with-wide-int
+       * make-docfile.c (write_globals): Define and use symbols like
+       iQnil (a small integer, like 0) rather than aQnil (an address
+       constant).
+
+       Port to 32-bit Sun C 5.12 sparc
+       * make-docfile.c (close_emacs_globals): Align lispsym to GCALIGNMENT.
+       The alignment is required on all platforms; it just happens to have
+       been properly aligned on the previous platforms we tested.
+
+2015-01-05  Paul Eggert  <address@hidden>
+
+       Use 0 for Qnil
+       * make-docfile.c (compare_globals): Consider 'nil' to be the least.
+
+       Compute C decls for DEFSYMs automatically
+       Fixes Bug#15880.
+       * make-docfile.c: Revamp to generate table of symbols, too.
+       Include <stdbool.h>.
+       (xstrdup): New function.
+       (main): Don't process the same file twice.
+       (SYMBOL): New constant in enum global_type.
+       (struct symbol): Turn 'value' member into a union, either v.value
+       for int or v.svalue for string.  All uses changed.
+       (add_global): New arg svalue, which overrides value, so that globals
+       can have a string value.
+       (close_emacs_global): New arg num_symbols; all uses changed.
+       Output lispsym decl.
+       (write_globals): Output symbol globals too.  Output more
+       ATTRIBUTE_CONST, now that Qnil etc. are C constants.
+       Output defsym_name table.
+       (scan_c_file): Move most of guts into ...
+       (scan_c_stream): ... new function.  Scan for DEFSYMs and
+       record symbols found.  Don't read past EOF if file doesn't
+       end in newline.
+
+2015-01-04  Paul Eggert  <address@hidden>
+
+       'temacs -nw' should not call missing functions
+       * make-docfile.c (write_globals):
+       Declare Fframe_windows_min_size with ATTRIBUTE_CONST, too.  Sort.
+
+       Less 'make' chatter for lib-src
+       * Makefile.in (blessmail): Less 'make' chatter here.
+
+2014-12-27  Eli Zaretskii  <address@hidden>
+
+       * Makefile.in (etags_libs, ebrowse${EXEEXT}, profile${EXEEXT})
+       (make-docfile${EXEEXT}, movemail${EXEEXT})
+       (update-game-score${EXEEXT}): Put $(NTLIB) before $(LOADLIBES),
+       since GCC sometimes calls stpcpy when it sees strcpy, under
+       optimization switches.
+
+2014-12-25  Paul Eggert  <address@hidden>
+
+       * ebrowse.c (sym_scope_1, operator_name, open_file):
+       * emacsclient.c (get_server_config, set_local_socket)
+       (start_daemon_and_retry_set_socket):
+       * etags.c (main, C_entries, relative_filename):
+       * pop.c (sendline):
+       * update-game-score.c (main):
+       Rewrite to avoid the need for strcat, typically by using stpcpy
+       and/or lispstpcpy.  strcat tends to be part of O(N**2) algorithms.
+
+2014-12-14  Paul Eggert  <address@hidden>
+
+       * etags.c (analyze_regex): Rename from analyse_regex.
+
+2014-12-14  Glenn Morris  <address@hidden>
+
+       * grep-changelog: Remove file.
+       * Makefile.in (INSTALLABLE_SCRIPTS): Remove.
+       (all, install, uninstall): Remove INSTALLABLE_SCRIPTS.
+
+2014-11-23  Glenn Morris  <address@hidden>
+
+       * Makefile.in (emacsclient.res): Fix yesterday's thinko.
+
+2014-11-22  Glenn Morris  <address@hidden>
+
+       * Makefile.in (emacsclient.res): Update deps for nt/emacsclient.rc
+       now being in the build directory, not the source directory.
+
+       * Makefile.in (emacsclient.res): Add dependency on icons/emacs.ico.
+
 2014-10-20  Glenn Morris  <address@hidden>
 
        * Merge in all changes up to 24.4 release.
@@ -106,8 +255,7 @@
 
 2014-05-26  Paul Eggert  <address@hidden>
 
-       Fix rcs2log problems with CVS.
-       Problem reported by Glenn Morris in
+       Fix rcs2log problems with CVS.  Reported by Glenn Morris in
        <http://lists.gnu.org/archive/html/emacs-devel/2014-05/msg00277.html>.
        Plus, fix some security and filename quoting problems.
        * rcs2log (logdir): Prefer mktemp if available.
@@ -3000,7 +3148,7 @@
        filter), show help instead of blindingly dumping every single
        ChangeLog available.  Doc fix.  Update version.
 
-2006-11-02  Tim Van Holder  <address@hidden>  (tiny change)
+2006-11-02  Tim Van Holder  <address@hidden>
 
        * emacsclient.c [WINDOWSNT]: Define HAVE_INET_SOCKETS.
        [!WINDOWSNT]: Include <netinet/in.h> if available.
@@ -3025,7 +3173,7 @@
        (set_tcp_socket): Prefer O_NONBLOCK, then O_NDELAY, then FIONBIO
        to set the socket in non-blocking mode.
 
-2006-10-31  Tim Van Holder  <address@hidden>  (tiny change)
+2006-10-31  Tim Van Holder  <address@hidden>
 
        * emacsclient.c [!WINDOWSNT]: Include <netinet/in.h> and <sys/ioctl.h>.
        (INVALID_SOCKET): Define.
@@ -3462,7 +3610,7 @@
 2004-04-17  Paul Eggert  <address@hidden>
 
        * rcs2log (Help): Clarify wording of the usage message.
-       Problem reported by Alan Mackenzie in
+       Reported by Alan Mackenzie in
        <http://mail.gnu.org/archive/html/bug-gnu-emacs/2004-04/msg00188.html>.
 
 2004-04-07  Stefan Monnier  <address@hidden>
@@ -8388,7 +8536,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1988-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1988-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index fe10104..d2705e7 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -1,7 +1,7 @@
 ### @configure_input@
 
-# Copyright (C) 1985, 1987-1988, 1993-1994, 2001-2014
-#   Free Software Foundation, Inc.
+# Copyright (C) 1985, 1987-1988, 1993-1994, 2001-2015 Free Software
+# Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -58,6 +58,21 @@ am__v_CCLD_ = $(address@hidden@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 =
 
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+AM_V_RC = $(address@hidden@)
+am__v_RC_ = $(address@hidden@)
+am__v_RC_0 = @echo "  RC      " $@;
+am__v_RC_1 =
+
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 =
+
 # ==================== Where To Install Things ====================
 
 # Location to install Emacs.app under GNUstep / Mac OS X.
@@ -117,6 +132,7 @@ address@hidden@
 
 address@hidden@
 address@hidden@
address@hidden@
 
 # ==================== Utility Programs for the Build =================
 
@@ -137,8 +153,6 @@ CLIENTW = @CLIENTW@
 INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} $(CLIENTW) \
                ebrowse${EXEEXT}
 
-INSTALLABLE_SCRIPTS = grep-changelog
-
 # Things that Emacs runs internally, or during the build process,
 #  which should not be installed in bindir.
 UTILITIES = profile${EXEEXT} movemail${EXEEXT} hexl${EXEEXT} \
@@ -215,7 +229,7 @@ CPP_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} 
${CFLAGS}
 # Configuration files for .o files to depend on.
 config_h = ../src/config.h $(srcdir)/../src/conf_post.h
 
-all: ${EXE_FILES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS}
+all: ${EXE_FILES} ${SCRIPTS}
 
 .PHONY: all need-blessmail maybe-blessmail
 
@@ -225,8 +239,8 @@ $(EXE_FILES): ../lib/libgnu.a
 ## Only used if we need blessmail, but no harm in always defining.
 ## This makes the actual blessmail executable.
 blessmail: $(srcdir)/../lisp/mail/blessmail.el
-       $(EMACS) $(EMACSOPT) -l $<
-       chmod +x $@
+       $(AM_V_GEN)$(EMACS) $(EMACSOPT) -l $<
+       $(AM_V_at)chmod +x $@
 
 ## This checks if we need to run blessmail.
 ## Do not charge ahead and do it!  Let the installer decide.
@@ -250,24 +264,41 @@ maybe-blessmail: $(BLESSMAIL_TARGET)
 $(DESTDIR)${archlibdir}: all
        @echo
        @echo "Installing utilities run internally by Emacs."
-       umask 022; ${MKDIR_P} "$(DESTDIR)${archlibdir}"
-       exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd`; \
+       umask 022 && ${MKDIR_P} "$(DESTDIR)${archlibdir}"
+       exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd` && \
        if [ "$$exp_archlibdir" != "`/bin/pwd`" ]; then \
          for file in ${UTILITIES}; do \
-           $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file 
"$(DESTDIR)${archlibdir}/$$file" ; \
+           $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file \
+             "$(DESTDIR)${archlibdir}/$$file" || exit; \
          done ; \
         fi
-       umask 022; ${MKDIR_P} "$(DESTDIR)${gamedir}"; \
-       touch "$(DESTDIR)${gamedir}/snake-scores"; \
-       touch "$(DESTDIR)${gamedir}/tetris-scores"
-       -if chown ${gameuser} 
"$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && chmod u+s 
"$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; then \
-         chown ${gameuser} "$(DESTDIR)${gamedir}"; \
+       umask 022 && ${MKDIR_P} "$(DESTDIR)${gamedir}" && \
+       touch "$(DESTDIR)${gamedir}/snake-scores" \
+             "$(DESTDIR)${gamedir}/tetris-scores"
+ifneq ($(gameuser),)
+       if chown ${gameuser} \
+            "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && \
+          chmod u+s,go-r \
+            "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; \
+       then \
+         chown ${gameuser} "$(DESTDIR)${gamedir}" && \
+         chmod u=rwx,g=rx,o=rx "$(DESTDIR)${gamedir}"; \
+       fi
+else ifneq ($(gamegroup),)
+       if chgrp ${gamegroup} \
+            "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && \
+          chmod g+s,o-r \
+            "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; \
+       then \
+         chgrp ${gamegroup} "$(DESTDIR)${gamedir}" && \
          chmod u=rwx,g=rwx,o=rx "$(DESTDIR)${gamedir}"; \
        fi
-       exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd`; \
+endif
+       exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd` && \
        if [ "$$exp_archlibdir" != "`cd ${srcdir} && /bin/pwd`" ]; then \
          for file in ${SCRIPTS}; do \
-           $(INSTALL_SCRIPT) ${srcdir}/$$file 
"$(DESTDIR)${archlibdir}/$$file"; \
+           $(INSTALL_SCRIPT) ${srcdir}/$$file \
+             "$(DESTDIR)${archlibdir}/$$file" || exit; \
          done ; \
        fi
 
@@ -277,40 +308,38 @@ $(DESTDIR)${archlibdir}: all
 install: $(DESTDIR)${archlibdir}
        @echo
        @echo "Installing utilities for users to run."
-       umask 022; ${MKDIR_P} "$(DESTDIR)${bindir}"
+       umask 022 && ${MKDIR_P} "$(DESTDIR)${bindir}"
        for file in ${INSTALLABLES} ; do \
-         $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} 
"$(DESTDIR)${bindir}"/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e 
'$(TRANSFORM)'`${EXEEXT} ; \
-       done
-       for file in ${INSTALLABLE_SCRIPTS} ; do \
-         $(INSTALL_SCRIPT) ${srcdir}/$${file} "$(DESTDIR)${bindir}"/`echo 
$${file} | sed '$(TRANSFORM)'`  ; \
+         $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} \
+           "$(DESTDIR)${bindir}"/` \
+             echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)' \
+           `${EXEEXT} || exit; \
        done
 
 uninstall:
        for file in ${INSTALLABLES}; do \
-         rm -f "$(DESTDIR)${bindir}"/`echo $${file} | sed -e 's/${EXEEXT}$$//' 
-e '$(TRANSFORM)'`${EXEEXT} ; \
-       done
-       for file in ${INSTALLABLE_SCRIPTS}; do \
-         rm -f "$(DESTDIR)${bindir}"/`echo $${file} | sed '$(TRANSFORM)'` ; \
+         rm -f "$(DESTDIR)${bindir}"/` \
+           echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)' \
+         `${EXEEXT}; \
        done
        if [ -d "$(DESTDIR)${archlibdir}" ]; then \
-         (cd "$(DESTDIR)${archlibdir}" && rm -f ${UTILITIES} ${SCRIPTS}) \
+         cd "$(DESTDIR)${archlibdir}" && \
+         rm -f ${UTILITIES} ${SCRIPTS}; \
        fi
 
 mostlyclean:
-       -rm -f core *.o *.res
+       rm -f core *.o *.res
 
 clean: mostlyclean
-       -rm -f ${EXE_FILES}
+       rm -f ${EXE_FILES}
 
 distclean: clean
-       -rm -f TAGS
-       -rm -f Makefile blessmail
+       rm -f TAGS Makefile blessmail
 
 bootstrap-clean maintainer-clean: distclean
-       true
 
 extraclean: maintainer-clean
-       -rm -f *~ \#*
+       rm -f *~ \#*
 
 ## Test the contents of the directory.
 check:
@@ -329,7 +358,7 @@ regex.o: $(srcdir)/../src/regex.c $(srcdir)/../src/regex.h 
$(config_h)
 
 etags_deps = ${srcdir}/etags.c regex.o $(NTLIB) $(config_h)
 etags_cflags = -DEMACS_NAME="\"GNU Emacs\"" -DVERSION="\"${version}\"" -o $@
-etags_libs = regex.o $(LOADLIBES) $(NTLIB)
+etags_libs = regex.o $(NTLIB) $(LOADLIBES)
 
 etags${EXEEXT}: ${etags_deps}
        $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $(etags_cflags) $< $(etags_libs)
@@ -344,18 +373,18 @@ ctags${EXEEXT}: ${srcdir}/ctags.c ${etags_deps}
 ebrowse${EXEEXT}: ${srcdir}/ebrowse.c ${srcdir}/../lib/min-max.h $(NTLIB) \
                    $(config_h)
        $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} -DVERSION="\"${version}\"" \
-         $< $(LOADLIBES) $(NTLIB) -o $@
+         $< $(NTLIB) $(LOADLIBES) -o $@
 
 profile${EXEEXT}: ${srcdir}/profile.c $(NTLIB) $(config_h)
        $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< \
-         $(LOADLIBES) $(NTLIB) $(LIB_CLOCK_GETTIME) -o $@
+         $(NTLIB) $(LOADLIBES) $(LIB_CLOCK_GETTIME) -o $@
 
 make-docfile${EXEEXT}: ${srcdir}/make-docfile.c $(NTLIB) $(config_h)
-       $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(LOADLIBES) $(NTLIB) -o $@
+       $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(NTLIB) $(LOADLIBES) -o $@
 
 movemail${EXEEXT}: ${srcdir}/movemail.c pop.o $(NTLIB) $(config_h)
        $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} ${MOVE_FLAGS} $< pop.o \
-         $(LOADLIBES) $(NTLIB) $(LIBS_MOVE) -o $@
+         $(NTLIB) $(LOADLIBES) $(LIBS_MOVE) -o $@
 
 pop.o: ${srcdir}/pop.c ${srcdir}/pop.h ${srcdir}/../lib/min-max.h $(config_h)
        $(AM_V_CC)$(CC) -c ${CPP_CFLAGS} ${MOVE_FLAGS} $<
@@ -386,9 +415,9 @@ hexl${EXEEXT}: ${srcdir}/hexl.c $(NTLIB) $(config_h)
 update-game-score${EXEEXT}: ${srcdir}/update-game-score.c $(NTLIB) $(config_h)
        $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} \
          -DHAVE_SHARED_GAME_DIR="\"$(gamedir)\"" \
-         $< $(LOADLIBES) $(NTLIB) -o $@
+         $< $(NTLIB) $(LOADLIBES) -o $@
 
-emacsclient.res: $(NTINC)/../emacsclient.rc
-       $(WINDRES) -O coff --include-dir=$(NTINC)/.. -o $@ $<
+emacsclient.res: ../nt/emacsclient.rc $(NTINC)/../icons/emacs.ico
+       $(AM_V_RC)$(WINDRES) -O coff --include-dir=$(NTINC)/.. -o $@ $<
 
 ## Makefile ends here.
diff --git a/lib-src/ebrowse.c b/lib-src/ebrowse.c
index 29a88e8..d16c9ae 100644
--- a/lib-src/ebrowse.c
+++ b/lib-src/ebrowse.c
@@ -1,6 +1,6 @@
 /* ebrowse.c --- parsing files for the ebrowse C++ browser
 
-Copyright (C) 1992-2014 Free Software Foundation, Inc.
+Copyright (C) 1992-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1150,19 +1150,19 @@ sym_scope_1 (struct sym *p)
   if (*scope_buffer)
     {
       ensure_scope_buffer_room (3);
-      strcat (scope_buffer, "::");
+      strcpy (scope_buffer + scope_buffer_len, "::");
       scope_buffer_len += 2;
     }
 
   len = strlen (p->name);
   ensure_scope_buffer_room (len + 1);
-  strcat (scope_buffer, p->name);
+  strcpy (scope_buffer + scope_buffer_len, p->name);
   scope_buffer_len += len;
 
   if (HAS_FLAG (p->flags, F_TEMPLATE))
     {
       ensure_scope_buffer_room (3);
-      strcat (scope_buffer, "<>");
+      strcpy (scope_buffer + scope_buffer_len, "<>");
       scope_buffer_len += 2;
     }
 
@@ -2797,24 +2797,25 @@ operator_name (int *sc)
       s = token_string (LA1);
       MATCH ();
 
-      len = strlen (s) + 10;
+      ptrdiff_t slen = strlen (s);
+      len = slen + 10;
       if (len > id_size)
        {
          size_t new_size = max (len, 2 * id_size);
          id = (char *) xrealloc (id, new_size);
          id_size = new_size;
        }
-      strcpy (id, s);
+      char *z = stpcpy (id, s);
 
       /* Vector new or delete?  */
       if (LOOKING_AT ('['))
        {
-         strcat (id, "[");
+         z = stpcpy (z, "[");
          MATCH ();
 
          if (LOOKING_AT (']'))
            {
-             strcat (id, "]");
+             strcpy (z, "]");
              MATCH ();
            }
        }
@@ -2830,7 +2831,7 @@ operator_name (int *sc)
          id = (char *) xrealloc (id, new_size);
          id_size = new_size;
        }
-      strcpy (id, "operator");
+      char *z = stpcpy (id, "operator");
 
       /* Beware access declarations of the form "X::f;" Beware of
         `operator () ()'.  Yet another difficulty is found in
@@ -2842,14 +2843,16 @@ operator_name (int *sc)
          len += strlen (s) + 2;
          if (len > id_size)
            {
+             ptrdiff_t idlen = z - id;
              size_t new_size = max (len, 2 * id_size);
              id = (char *) xrealloc (id, new_size);
              id_size = new_size;
+             z = id + idlen;
            }
 
          if (*s != ')' && *s != ']')
-           strcat (id, " ");
-          strcat (id, s);
+           *z++ = ' ';
+          z = stpcpy (z, s);
           MATCH ();
 
          /* If this is a simple operator like `+', stop now.  */
@@ -3462,9 +3465,9 @@ open_file (char *file)
          buffer = (char *) xrealloc (buffer, buffer_size);
        }
 
-      strcpy (buffer, path->path);
-      strcat (buffer, "/");
-      strcat (buffer, file);
+      char *z = stpcpy (buffer, path->path);
+      *z++ = '/';
+      strcpy (z, file);
       fp = fopen (buffer, "r");
     }
 
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index ddc1b6d..a04dda6 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -1,6 +1,6 @@
 /* Client process that communicates with GNU Emacs acting as server.
 
-Copyright (C) 1986-1987, 1994, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1986-1987, 1994, 1999-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -905,9 +905,9 @@ get_server_config (const char *config_file, struct 
sockaddr_in *server,
         {
          char *path = xmalloc (strlen (home) + strlen (config_file)
                                + EXTRA_SPACE);
-         strcpy (path, home);
-         strcat (path, "/.emacs.d/server/");
-         strcat (path, config_file);
+         char *z = stpcpy (path, home);
+         z = stpcpy (z, "/.emacs.d/server/");
+         strcpy (z, config_file);
           config = fopen (path, "rb");
          free (path);
         }
@@ -916,9 +916,9 @@ get_server_config (const char *config_file, struct 
sockaddr_in *server,
         {
          char *path = xmalloc (strlen (home) + strlen (config_file)
                                + EXTRA_SPACE);
-         strcpy (path, home);
-         strcat (path, "/.emacs.d/server/");
-         strcat (path, config_file);
+         char *z = stpcpy (path, home);
+         z = stpcpy (z, "/.emacs.d/server/");
+         strcpy (z, config_file);
           config = fopen (path, "rb");
          free (path);
         }
@@ -1193,7 +1193,6 @@ set_local_socket (const char *local_socket_name)
       {
        /* socket_name is a file name component.  */
        long uid = geteuid ();
-       ptrdiff_t tmpdirlen;
        use_tmpdir = 1;
        tmpdir = egetenv ("TMPDIR");
        if (!tmpdir)
@@ -1212,12 +1211,11 @@ set_local_socket (const char *local_socket_name)
 #endif
               tmpdir = "/tmp";
           }
-       tmpdirlen = strlen (tmpdir);
        socket_name_storage =
-         xmalloc (tmpdirlen + strlen (server_name) + EXTRA_SPACE);
-       strcpy (socket_name_storage, tmpdir);
-       sprintf (socket_name_storage + tmpdirlen, "/emacs%ld/", uid);
-       strcat (socket_name_storage + tmpdirlen, server_name);
+         xmalloc (strlen (tmpdir) + strlen (server_name) + EXTRA_SPACE);
+       char *z = stpcpy (socket_name_storage, tmpdir);
+       z += sprintf (z, "/emacs%ld/", uid);
+       strcpy (z, server_name);
        local_socket_name = socket_name_storage;
       }
 
@@ -1253,12 +1251,12 @@ set_local_socket (const char *local_socket_name)
              {
                /* We're running under su, apparently. */
                long uid = pw->pw_uid;
-               ptrdiff_t tmpdirlen = strlen (tmpdir);
                char *user_socket_name
-                 = xmalloc (tmpdirlen + strlen (server_name) + EXTRA_SPACE);
-               strcpy (user_socket_name, tmpdir);
-               sprintf (user_socket_name + tmpdirlen, "/emacs%ld/", uid);
-               strcat (user_socket_name + tmpdirlen, server_name);
+                 = xmalloc (strlen (tmpdir) + strlen (server_name)
+                            + EXTRA_SPACE);
+               char *z = stpcpy (user_socket_name, tmpdir);
+               z += sprintf (z, "/emacs%ld/", uid);
+               strcpy (z, server_name);
 
                if (strlen (user_socket_name) < sizeof (server.sun_path))
                  strcpy (server.sun_path, user_socket_name);
@@ -1507,8 +1505,7 @@ start_daemon_and_retry_set_socket (void)
          const char *deq = "--daemon=";
          char *daemon_arg = xmalloc (strlen (deq)
                                      + strlen (socket_name) + 1);
-         strcpy (daemon_arg, deq);
-         strcat (daemon_arg, socket_name);
+         strcpy (stpcpy (daemon_arg, deq), socket_name);
          d_argv[1] = daemon_arg;
        }
       execvp ("emacs", d_argv);
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 84ed03e..dc2ced5 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -28,7 +28,7 @@ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
SOFTWARE, EVEN
 IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2014 Free Software
+Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2015 Free Software
 Foundation, Inc.
 
 This file is not considered part of GNU Emacs.
@@ -314,7 +314,7 @@ static long readline_internal (linebuffer *, FILE *);
 static bool nocase_tail (const char *);
 static void get_tag (char *, char **);
 
-static void analyse_regex (char *);
+static void analyze_regex (char *);
 static void free_regexps (void);
 static void regex_tag_multiline (void);
 static void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
@@ -1207,7 +1207,7 @@ main (int argc, char **argv)
          lang = argbuffer[i].lang;
          break;
        case at_regexp:
-         analyse_regex (argbuffer[i].what);
+         analyze_regex (argbuffer[i].what);
          break;
        case at_filename:
              this_file = argbuffer[i].what;
@@ -1277,13 +1277,13 @@ main (int argc, char **argv)
            default:
              continue;         /* the for loop */
            }
-         strcpy (cmd, "mv ");
-         strcat (cmd, tagfile);
-         strcat (cmd, " OTAGS;fgrep -v '\t");
-         strcat (cmd, argbuffer[i].what);
-         strcat (cmd, "\t' OTAGS >");
-         strcat (cmd, tagfile);
-         strcat (cmd, ";rm OTAGS");
+         char *z = stpcpy (cmd, "mv ");
+         z = stpcpy (z, tagfile);
+         z = stpcpy (z, " OTAGS;fgrep -v '\t");
+         z = stpcpy (z, argbuffer[i].what);
+         z = stpcpy (z, "\t' OTAGS >");
+         z = stpcpy (z, tagfile);
+         strcpy (z, ";rm OTAGS");
          if (system (cmd) != EXIT_SUCCESS)
            fatal ("failed to execute shell command", (char *)NULL);
        }
@@ -1307,10 +1307,10 @@ main (int argc, char **argv)
        /* Maybe these should be used:
           setenv ("LC_COLLATE", "C", 1);
           setenv ("LC_ALL", "C", 1); */
-       strcpy (cmd, "sort -u -o ");
-       strcat (cmd, tagfile);
-       strcat (cmd, " ");
-       strcat (cmd, tagfile);
+       char *z = stpcpy (cmd, "sort -u -o ");
+       z = stpcpy (z, tagfile);
+       *z++ = ' ';
+       strcpy (z, tagfile);
        exit (system (cmd));
       }
   return EXIT_SUCCESS;
@@ -3427,8 +3427,9 @@ C_entries (int c_ext, FILE *inf)
            case omethodtag:
            case omethodparm:
              objdef = omethodcolon;
-             linebuffer_setlen (&token_name, token_name.len + 1);
-             strcat (token_name.buffer, ":");
+             int toklen = token_name.len;
+             linebuffer_setlen (&token_name, toklen + 1);
+             strcpy (token_name.buffer + toklen, ":");
              break;
            }
          if (structdef == stagseen)
@@ -5573,7 +5574,7 @@ scan_separators (char *name)
 /* Look at the argument of --regex or --no-regex and do the right
    thing.  Same for each line of a regexp file. */
 static void
-analyse_regex (char *regex_arg)
+analyze_regex (char *regex_arg)
 {
   if (regex_arg == NULL)
     {
@@ -5604,7 +5605,7 @@ analyse_regex (char *regex_arg)
          pfatal (regexfile);
        linebuffer_init (&regexbuf);
        while (readline_internal (&regexbuf, regexfp) > 0)
-         analyse_regex (regexbuf.buffer);
+         analyze_regex (regexbuf.buffer);
        free (regexbuf.buffer);
        fclose (regexfp);
       }
@@ -6362,12 +6363,12 @@ relative_filename (char *file, char *dir)
   while ((dp = strchr (dp + 1, '/')) != NULL)
     i += 1;
   res = xnew (3*i + strlen (fp + 1) + 1, char);
-  res[0] = '\0';
+  char *z = res;
   while (i-- > 0)
-    strcat (res, "../");
+    z = stpcpy (z, "../");
 
   /* Add the file name relative to the common root of file and dir. */
-  strcat (res, fp + 1);
+  strcpy (z, fp + 1);
   free (afn);
 
   return res;
diff --git a/lib-src/grep-changelog b/lib-src/grep-changelog
deleted file mode 100755
index ab8c5e3..0000000
--- a/lib-src/grep-changelog
+++ /dev/null
@@ -1,265 +0,0 @@
-#! /usr/bin/perl
-
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
-#
-# 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
-
-
-# Extract entries from ChangeLogs matching specified criteria.
-# Optionally format the resulting output to a form suitable for RCS
-# logs, like they are used in Emacs, for example.  In this format,
-# author lines, leading spaces, and file names are removed.
-
-require 5;
-use strict;
-
-# Parse command line options.
-
-use vars qw($author $regexp $exclude $from_date $to_date
-            $rcs_log $with_date $version $help $reverse
-            @entries);
-
-use Getopt::Long;
-
-my $result;
-
-if (@ARGV == 0) {
-
-    # No arguments cannot possibly mean "show everything"!!
-    $result = 0;
-
-} else {
-
-    $result = GetOptions ("author=s" => \$author,
-                          "text=s"  => \$regexp,
-                          "exclude=s"  => \$exclude,
-                          "from-date=s" => \$from_date,
-                          "to-date=s" => \$to_date,
-                          "rcs-log" => \$rcs_log,
-                          "with-date" => \$with_date,
-                          "reverse!" => \$reverse,
-                          "version" => \$version,
-                          "help"    => \$help);
-
-    # If date options are specified, check that they have the format
-    # YYYY-MM-DD.
-
-    $result = 0 if $from_date && $from_date !~ /^\d\d\d\d-\d\d-\d\d$/;
-    $result = 0 if $to_date && $to_date !~ /^\d\d\d\d-\d\d-\d\d$/;
-}
-
-# Print usage information and exit when necessary.
-
-if ($result == 0 || $help) {
-    print <<USAGE;
-
-Usage: $0 [options] [CHANGELOG...]
-
-Print entries in ChangeLogs matching various criteria.
-Valid options are:
-
-  --author=AUTHOR         Match entries whose author line matches
-                         regular expression AUTHOR
-  --text=TEXT             Match entries whose text matches regular
-                         expression TEXT
-  --exclude=TEXT         Exclude entries matching TEXT
-  --from-date=YYYY-MM-DD  Match entries not older than given date
-  --to-date=YYYY-MM-DD    Match entries not younger than given date
-  --rcs-log              Format output suitable for RCS log entries
-  --with-date            Print short date line in RCS log
-  --reverse               Show entries in reverse (chronological) order
-  --version              Print version info
-  --help                 Print this help
-
-If no CHANGELOG is specified scan the files "ChangeLog" and
-"ChangeLog.N+" in the current directory.  Old-style dates in ChangeLogs
-are not recognized.
-USAGE
-    exit !$help;
-}
-
-# Print version info and exit if `--version' was specified.
-
-if ($version) {
-    print "0.3\n";
-    exit 0;
-}
-
-
-# Value is non-zero if HEADER matches according to command line
-# options specified, i.e. it matches $author, and its date is in
-# the range $from_date <= date <= $to_date.
-
-sub header_match_p {
-    my $header = shift;
-
-    return 0 unless $header;
-
-    # No match if AUTHOR-regexp specified and doesn't match.
-    return 0 if $author && $header !~ /$author/;
-
-    # Check that the date of the entry matches if date options
-    # `--from-date' and/or `--to-date' were specified .  Old-style
-    # dates in ChangeLogs are not recognized, and never match.
-    if ($from_date || $to_date) {
-       if ($header =~ /^(\d\d\d\d-\d\d-\d\d)/) {
-           my $date = $1;
-           return 0 if $from_date && $date lt $from_date;
-           return 0 if $to_date && $date gt $to_date;
-       } else {
-           # Don't bother recognizing old-style dates.
-           return 0;
-       }
-    }
-
-    return 1;
-}
-
-
-# Value is non-zero if ENTRY matches the criteria specified on the
-# command line, i.e. it matches $regexp, and it doesn't match
-# $exclude.
-
-sub entry_match_p {
-    my $entry = shift;
-
-    return 0 unless $entry;
-
-    if ($regexp) {
-       return 1 if ($entry =~ /$regexp/
-                    && (!$exclude || $entry !~ $exclude));
-    } else {
-       return 1 if !$exclude || $entry !~ $exclude;
-    }
-
-    return 0;
-}
-
-
-# Print HEADER and/or ENTRY in a format suitable for what was
-# specified on the command line.  If $rcs_log is specified, author
-# lines are not printed, and leading spaces and file names are removed
-# from ChangeLog entries.
-
-sub print_log {
-    my ($header, $entry) = @_;
-    my $output = '';
-
-    if ($rcs_log) {
-       # Remove leading whitespace from entry.
-       $entry =~ s/^\s+//mg;
-       # Remove file name parts.
-       $entry =~ s/^\*.*\(/(/mg;
-       # Remove file name parts, 2.
-       $entry =~ s/^\*.*://mg;
-        if ($with_date) {
-           $header =~ /(\d\d\d\d-\d\d-\d\d)/;
-           $output = "!changelog-date $1\n";
-       }
-       $output .= $entry;
-    } else {
-       $output .= $header . $entry;
-    }
-
-    if ($reverse) {
-        push @entries, $output;
-    } else {
-        print $output;
-    }
-}
-
-# Scan LOG for matching entries, and print them to standard output.
-
-sub parse_changelog {
-    my $log = shift;
-    my $entry = undef;
-    my $header = undef;
-
-    @entries = () if $reverse;
-
-    # Open the ChangeLog.
-    open (IN, "< $log") || die "Cannot open $log: $!";
-
-    while (defined(my $line = <IN>)) {
-       if ($line =~ /^\S/) {
-           # Line is an author-line.  Print previous entry if
-           # it matches.
-           print_log ($header, $entry)
-               if header_match_p ($header) && entry_match_p ($entry);
-
-           $entry = "";
-           $header = $line;
-
-           # Add empty lines below the header.
-           while (defined($line = <IN>) && $line =~ /^\s*$/) {
-               $header = "$header$line";
-           }
-        }
-
-        last unless defined $line;
-
-       if ($line =~ /^\s*\*/) {
-           # LINE is the first line of a ChangeLog entry.  Print
-           # previous entry if it matches.
-           print_log ($header, $entry)
-               if header_match_p ($header) && entry_match_p ($entry);
-           $entry = $line;
-       } else {
-           # Add LINE to the current entry.
-           $entry = "$entry$line";
-       }
-    }
-
-    # Print last entry if it matches.
-    print_log ($header, $entry)
-       if header_match_p ($header) && entry_match_p ($entry);
-
-    close IN;
-
-    if ($reverse) {
-        for (my $entry = @entries; $entry; $entry--) {
-            print $entries[$entry-1];
-        }
-    }
-}
-
-
-# Main program.  Process ChangeLogs.
-
-# If files were specified on the command line, parse those files in the
-# order supplied by the user; otherwise parse default files ChangeLog and
-# ChangeLog.NNN according to $reverse.
-unless (@ARGV > 0) {
-    @ARGV = ("ChangeLog");
-
-    push @ARGV,
-      map {"ChangeLog.$_"}
-        sort {$b <=> $a}
-          map {/\.(\d+)$/; $1}
-            do {
-                opendir D, '.';
-                grep /^ChangeLog\.\d+$/, readdir D;
-            };
-
-    @ARGV = reverse @ARGV if $reverse;
-}
-
-while (defined (my $log = shift @ARGV)) {
-    parse_changelog ($log) if -f $log;
-}
-
-
-# grep-changelog ends here.
diff --git a/lib-src/hexl.c b/lib-src/hexl.c
index 51744ab..490f727 100644
--- a/lib-src/hexl.c
+++ b/lib-src/hexl.c
@@ -1,5 +1,5 @@
 /* Convert files for Emacs Hexl mode.
-   Copyright (C) 1989, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1989, 2001-2015 Free Software Foundation, Inc.
 
 Author: Keith Gabryelski
 (according to authors.el)
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index 884b6c1..79d421a 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -1,6 +1,6 @@
 /* Generate doc-string file for GNU Emacs from source files.
 
-Copyright (C) 1985-1986, 1992-1994, 1997, 1999-2014 Free Software
+Copyright (C) 1985-1986, 1992-1994, 1997, 1999-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -36,6 +36,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>   /* config.h unconditionally includes this anyway */
 
@@ -63,6 +64,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 static int scan_file (char *filename);
 static int scan_lisp_file (const char *filename, const char *mode);
 static int scan_c_file (char *filename, const char *mode);
+static int scan_c_stream (FILE *infile);
 static void start_globals (void);
 static void write_globals (void);
 
@@ -106,6 +108,17 @@ xmalloc (unsigned int size)
   return result;
 }
 
+/* Like strdup, but get fatal error if memory is exhausted.  */
+
+static char *
+xstrdup (char *s)
+{
+  char *result = strdup (s);
+  if (! result)
+    fatal ("virtual memory exhausted", 0);
+  return result;
+}
+
 /* Like realloc but get fatal error if memory is exhausted.  */
 
 static void *
@@ -123,7 +136,6 @@ main (int argc, char **argv)
 {
   int i;
   int err_count = 0;
-  int first_infile;
 
   progname = argv[0];
 
@@ -167,16 +179,21 @@ main (int argc, char **argv)
   if (generate_globals)
     start_globals ();
 
-  first_infile = i;
-  for (; i < argc; i++)
+  if (argc <= i)
+    scan_c_stream (stdin);
+  else
     {
-      int j;
-      /* Don't process one file twice.  */
-      for (j = first_infile; j < i; j++)
-       if (! strcmp (argv[i], argv[j]))
-         break;
-      if (j == i)
-       err_count += scan_file (argv[i]);
+      int first_infile = i;
+      for (; i < argc; i++)
+       {
+         int j;
+         /* Don't process one file twice.  */
+         for (j = first_infile; j < i; j++)
+           if (strcmp (argv[i], argv[j]) == 0)
+             break;
+         if (j == i)
+           err_count += scan_file (argv[i]);
+       }
     }
 
   if (err_count == 0 && generate_globals)
@@ -528,13 +545,15 @@ write_c_args (char *func, char *buf, int minargs, int 
maxargs)
 }
 
 /* The types of globals.  These are sorted roughly in decreasing alignment
-   order to avoid allocation gaps, except that functions are last.  */
+   order to avoid allocation gaps, except that symbols and functions
+   are last.  */
 enum global_type
 {
   INVALID,
   LISP_OBJECT,
   EMACS_INTEGER,
   BOOLEAN,
+  SYMBOL,
   FUNCTION
 };
 
@@ -543,17 +562,25 @@ struct global
 {
   enum global_type type;
   char *name;
-  int value;
+  int flags;
+  union
+  {
+    int value;
+    char const *svalue;
+  } v;
 };
 
+/* Bit values for FLAGS field from the above.  Applied for DEFUNs only.  */
+enum { DEFUN_noreturn = 1, DEFUN_const = 2 };
+
 /* All the variable names we saw while scanning C sources in `-g'
    mode.  */
 int num_globals;
 int num_globals_allocated;
 struct global *globals;
 
-static void
-add_global (enum global_type type, char *name, int value)
+static struct global *
+add_global (enum global_type type, char *name, int value, char const *svalue)
 {
   /* Ignore the one non-symbol that can occur.  */
   if (strcmp (name, "..."))
@@ -574,8 +601,14 @@ add_global (enum global_type type, char *name, int value)
 
       globals[num_globals - 1].type = type;
       globals[num_globals - 1].name = name;
-      globals[num_globals - 1].value = value;
+      if (svalue)
+       globals[num_globals - 1].v.svalue = svalue;
+      else
+       globals[num_globals - 1].v.value = value;
+      globals[num_globals - 1].flags = 0;
+      return globals + num_globals - 1;
     }
+  return NULL;
 }
 
 static int
@@ -587,21 +620,58 @@ compare_globals (const void *a, const void *b)
   if (ga->type != gb->type)
     return ga->type - gb->type;
 
+  /* Consider "nil" to be the least, so that iQnil is zero.  That
+     way, Qnil's internal representation is zero, which is a bit faster.  */
+  if (ga->type == SYMBOL)
+    {
+      bool a_nil = strcmp (ga->name, "Qnil") == 0;
+      bool b_nil = strcmp (gb->name, "Qnil") == 0;
+      if (a_nil | b_nil)
+       return b_nil - a_nil;
+    }
+
   return strcmp (ga->name, gb->name);
 }
 
 static void
-close_emacs_globals (void)
+close_emacs_globals (int num_symbols)
 {
-  puts ("};");
-  puts ("extern struct emacs_globals globals;");
+  printf (("};\n"
+          "extern struct emacs_globals globals;\n"
+          "\n"
+          "#ifndef DEFINE_SYMBOLS\n"
+          "extern\n"
+          "#endif\n"
+          "struct Lisp_Symbol alignas (GCALIGNMENT) lispsym[%d];\n"),
+         num_symbols);
 }
 
 static void
 write_globals (void)
 {
-  int i, seen_defun = 0;
+  int i, j;
+  bool seen_defun = false;
+  int symnum = 0;
+  int num_symbols = 0;
   qsort (globals, num_globals, sizeof (struct global), compare_globals);
+
+  j = 0;
+  for (i = 0; i < num_globals; i++)
+    {
+      while (i + 1 < num_globals
+            && strcmp (globals[i].name, globals[i + 1].name) == 0)
+       {
+         if (globals[i].type == FUNCTION
+             && globals[i].v.value != globals[i + 1].v.value)
+           error ("function '%s' defined twice with differing signatures",
+                  globals[i].name);
+         i++;
+       }
+      num_symbols += globals[i].type == SYMBOL;
+      globals[j++] = globals[i];
+    }
+  num_globals = j;
+
   for (i = 0; i < num_globals; ++i)
     {
       char const *type = 0;
@@ -617,12 +687,13 @@ write_globals (void)
        case LISP_OBJECT:
          type = "Lisp_Object";
          break;
+       case SYMBOL:
        case FUNCTION:
          if (!seen_defun)
            {
-             close_emacs_globals ();
+             close_emacs_globals (num_symbols);
              putchar ('\n');
-             seen_defun = 1;
+             seen_defun = true;
            }
          break;
        default:
@@ -635,50 +706,49 @@ write_globals (void)
          printf ("#define %s globals.f_%s\n",
                  globals[i].name, globals[i].name);
        }
+      else if (globals[i].type == SYMBOL)
+       printf (("DEFINE_LISP_SYMBOL_BEGIN (%s)\n"
+                "#define i%s %d\n"
+                "#define %s builtin_lisp_symbol (i%s)\n"
+                "DEFINE_LISP_SYMBOL_END (%s)\n\n"),
+               globals[i].name, globals[i].name, symnum++,
+               globals[i].name, globals[i].name, globals[i].name);
       else
        {
-         /* It would be nice to have a cleaner way to deal with these
-            special hacks.  */
-         if (strcmp (globals[i].name, "Fthrow") == 0
-             || strcmp (globals[i].name, "Ftop_level") == 0
-             || strcmp (globals[i].name, "Fkill_emacs") == 0
-             || strcmp (globals[i].name, "Fexit_recursive_edit") == 0
-             || strcmp (globals[i].name, "Fabort_recursive_edit") == 0)
+         if (globals[i].flags & DEFUN_noreturn)
            fputs ("_Noreturn ", stdout);
 
          printf ("EXFUN (%s, ", globals[i].name);
-         if (globals[i].value == -1)
+         if (globals[i].v.value == -1)
            fputs ("MANY", stdout);
-         else if (globals[i].value == -2)
+         else if (globals[i].v.value == -2)
            fputs ("UNEVALLED", stdout);
          else
-           printf ("%d", globals[i].value);
+           printf ("%d", globals[i].v.value);
          putchar (')');
 
-         /* It would be nice to have a cleaner way to deal with these
-            special hacks, too.  */
-         if (strcmp (globals[i].name, "Fbyteorder") == 0
-             || strcmp (globals[i].name, "Ftool_bar_height") == 0
-             || strcmp (globals[i].name, "Fmax_char") == 0
-             || strcmp (globals[i].name, "Fidentity") == 0)
+         if (globals[i].flags & DEFUN_const)
            fputs (" ATTRIBUTE_CONST", stdout);
 
          puts (";");
        }
-
-      while (i + 1 < num_globals
-            && !strcmp (globals[i].name, globals[i + 1].name))
-       {
-         if (globals[i].type == FUNCTION
-             && globals[i].value != globals[i + 1].value)
-           error ("function '%s' defined twice with differing signatures",
-                  globals[i].name);
-         ++i;
-       }
     }
 
   if (!seen_defun)
-    close_emacs_globals ();
+    close_emacs_globals (num_symbols);
+
+  puts ("#ifdef DEFINE_SYMBOLS");
+  puts ("static char const *const defsym_name[] = {");
+  for (int i = 0; i < num_globals; i++)
+    {
+      if (globals[i].type == SYMBOL)
+       printf ("\t\"%s\",\n", globals[i].v.svalue);
+      while (i + 1 < num_globals
+            && strcmp (globals[i].name, globals[i + 1].name) == 0)
+       i++;
+    }
+  puts ("};");
+  puts ("#endif");
 }
 
 
@@ -691,9 +761,6 @@ static int
 scan_c_file (char *filename, const char *mode)
 {
   FILE *infile;
-  register int c;
-  register int commas;
-  int minargs, maxargs;
   int extension = filename[strlen (filename) - 1];
 
   if (extension == 'o')
@@ -719,8 +786,32 @@ scan_c_file (char *filename, const char *mode)
 
   /* Reset extension to be able to detect duplicate files.  */
   filename[strlen (filename) - 1] = extension;
+  return scan_c_stream (infile);
+}
+
+/* Return 1 if next input from INFILE is equal to P, -1 if EOF,
+   0 if input doesn't match.  */
+
+static int
+stream_match (FILE *infile, const char *p)
+{
+  for (; *p; p++)
+    {
+      int c = getc (infile);
+      if (c == EOF)
+       return -1;
+      if (c != *p)
+       return 0;
+    }
+  return 1;
+}
+
+static int
+scan_c_stream (FILE *infile)
+{
+  int commas, minargs, maxargs;
+  int c = '\n';
 
-  c = '\n';
   while (!feof (infile))
     {
       int doc_keyword = 0;
@@ -749,37 +840,53 @@ scan_c_file (char *filename, const char *mode)
          if (c != 'F')
            continue;
          c = getc (infile);
-         if (c != 'V')
-           continue;
-         c = getc (infile);
-         if (c != 'A')
-           continue;
-         c = getc (infile);
-         if (c != 'R')
-           continue;
-         c = getc (infile);
-         if (c != '_')
-           continue;
-
-         defvarflag = 1;
-
-         c = getc (infile);
-         defvarperbufferflag = (c == 'P');
-         if (generate_globals)
+         if (c == 'S')
            {
-             if (c == 'I')
-               type = EMACS_INTEGER;
-             else if (c == 'L')
-               type = LISP_OBJECT;
-             else if (c == 'B')
-               type = BOOLEAN;
+             c = getc (infile);
+             if (c != 'Y')
+               continue;
+             c = getc (infile);
+             if (c != 'M')
+               continue;
+             c = getc (infile);
+             if (c != ' ' && c != '\t' && c != '(')
+               continue;
+             type = SYMBOL;
            }
+         else if (c == 'V')
+           {
+             c = getc (infile);
+             if (c != 'A')
+               continue;
+             c = getc (infile);
+             if (c != 'R')
+               continue;
+             c = getc (infile);
+             if (c != '_')
+               continue;
 
-         c = getc (infile);
-         /* We need to distinguish between DEFVAR_BOOL and
-            DEFVAR_BUFFER_DEFAULTS.  */
-         if (generate_globals && type == BOOLEAN && c != 'O')
-           type = INVALID;
+             defvarflag = 1;
+
+             c = getc (infile);
+             defvarperbufferflag = (c == 'P');
+             if (generate_globals)
+               {
+                 if (c == 'I')
+                   type = EMACS_INTEGER;
+                 else if (c == 'L')
+                   type = LISP_OBJECT;
+                 else if (c == 'B')
+                   type = BOOLEAN;
+               }
+
+             c = getc (infile);
+             /* We need to distinguish between DEFVAR_BOOL and
+                DEFVAR_BUFFER_DEFAULTS.  */
+             if (generate_globals && type == BOOLEAN && c != 'O')
+               type = INVALID;
+           }
+         else
+           continue;
        }
       else if (c == 'D')
        {
@@ -796,7 +903,7 @@ scan_c_file (char *filename, const char *mode)
 
       if (generate_globals
          && (!defvarflag || defvarperbufferflag || type == INVALID)
-         && !defunflag)
+         && !defunflag && type != SYMBOL)
        continue;
 
       while (c != '(')
@@ -806,15 +913,19 @@ scan_c_file (char *filename, const char *mode)
          c = getc (infile);
        }
 
-      /* Lisp variable or function name.  */
-      c = getc (infile);
-      if (c != '"')
-       continue;
-      c = read_c_string_or_comment (infile, -1, 0, 0);
+      if (type != SYMBOL)
+       {
+         /* Lisp variable or function name.  */
+         c = getc (infile);
+         if (c != '"')
+           continue;
+         c = read_c_string_or_comment (infile, -1, 0, 0);
+       }
 
       if (generate_globals)
        {
          int i = 0;
+         char const *svalue = 0;
 
          /* Skip "," and whitespace.  */
          do
@@ -826,6 +937,8 @@ scan_c_file (char *filename, const char *mode)
          /* Read in the identifier.  */
          do
            {
+             if (c < 0)
+               goto eof;
              input_buffer[i++] = c;
              c = getc (infile);
            }
@@ -836,13 +949,27 @@ scan_c_file (char *filename, const char *mode)
          name = xmalloc (i + 1);
          memcpy (name, input_buffer, i + 1);
 
+         if (type == SYMBOL)
+           {
+             do
+               c = getc (infile);
+             while (c == ' ' || c == '\t' || c == '\n' || c == '\r');
+             if (c != '"')
+               continue;
+             c = read_c_string_or_comment (infile, -1, 0, 0);
+             svalue = xstrdup (input_buffer);
+           }
+
          if (!defunflag)
            {
-             add_global (type, name, 0);
+             add_global (type, name, 0, svalue);
              continue;
            }
        }
 
+      if (type == SYMBOL)
+       continue;
+
       /* DEFVAR_LISP ("name", addr, "doc")
         DEFVAR_LISP ("name", addr /\* doc *\/)
         DEFVAR_LISP ("name", addr, doc: /\* doc *\/)  */
@@ -895,7 +1022,63 @@ scan_c_file (char *filename, const char *mode)
 
       if (generate_globals)
        {
-         add_global (FUNCTION, name, maxargs);
+         struct global *g = add_global (FUNCTION, name, maxargs, 0);
+
+         /* The following code tries to recognize function attributes
+            specified after the docstring, e.g.:
+
+            DEFUN ("foo", Ffoo, Sfoo, X, Y, Z,
+                  doc: /\* doc *\/
+                  attributes: attribute1 attribute2 ...)
+              (Lisp_Object arg...)
+
+            Now only 'noreturn' and 'const' attributes are used.  */
+
+         /* Advance to the end of docstring.  */
+         c = getc (infile);
+         if (c == EOF)
+           goto eof;
+         int d = getc (infile);
+         if (d == EOF)
+           goto eof;
+         while (1)
+           {
+             if (c == '*' && d == '/')
+               break;
+             c = d, d = getc (infile);
+             if (d == EOF)
+               goto eof;
+           }
+         /* Skip spaces, if any.  */
+         do
+           {
+             c = getc (infile);
+             if (c == EOF)
+               goto eof;
+           }
+         while (c == ' ' || c == '\n' || c == '\r' || c == '\t');
+         /* Check for 'attributes:' token.  */
+         if (c == 'a' && stream_match (infile, "ttributes:"))
+           {
+             char *p = input_buffer;
+             /* Collect attributes up to ')'.  */
+             while (1)
+               {
+                 c = getc (infile);
+                 if (c == EOF)
+                   goto eof;
+                 if (c == ')')
+                   break;
+                 if (p - input_buffer > sizeof (input_buffer))
+                   abort ();
+                 *p++ = c;
+               }
+             *p = 0;
+             if (strstr (input_buffer, "noreturn"))
+               g->flags |= DEFUN_noreturn;
+             if (strstr (input_buffer, "const"))
+               g->flags |= DEFUN_const;
+           }
          continue;
        }
 
diff --git a/lib-src/makefile.w32-in b/lib-src/makefile.w32-in
index 773c897..a81a011 100644
--- a/lib-src/makefile.w32-in
+++ b/lib-src/makefile.w32-in
@@ -1,5 +1,5 @@
 #  -*- Makefile -*- for GNU Emacs on the Microsoft Windows API.
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/lib-src/movemail.c b/lib-src/movemail.c
index b0196b3..5008c9b 100644
--- a/lib-src/movemail.c
+++ b/lib-src/movemail.c
@@ -1,7 +1,7 @@
 /* movemail foo bar -- move file foo to file bar,
    locking file foo the way /bin/mail respects.
 
-Copyright (C) 1986, 1992-1994, 1996, 1999, 2001-2014 Free Software
+Copyright (C) 1986, 1992-1994, 1996, 1999, 2001-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/lib-src/ntlib.c b/lib-src/ntlib.c
index 23d7ba7..7d9dff9 100644
--- a/lib-src/ntlib.c
+++ b/lib-src/ntlib.c
@@ -1,6 +1,6 @@
 /* Utility and Unix shadow routines for GNU Emacs support programs on NT.
 
-Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 Author: Geoff Voelker (address@hidden)
 Created: 10-8-94
diff --git a/lib-src/ntlib.h b/lib-src/ntlib.h
index 40ef9fa..787a65d 100644
--- a/lib-src/ntlib.h
+++ b/lib-src/ntlib.h
@@ -1,5 +1,5 @@
 /* Utility and Unix shadow routines for GNU Emacs support programs on NT.
-   Copyright (C) 1994, 2002-2014 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2002-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/pop.c b/lib-src/pop.c
index ffe16c5..c6deaf7 100644
--- a/lib-src/pop.c
+++ b/lib-src/pop.c
@@ -1,6 +1,6 @@
 /* pop.c: client routines for talking to a POP3-protocol post-office server
 
-Copyright (C) 1991, 1993, 1996-1997, 1999, 2001-2014 Free Software
+Copyright (C) 1991, 1993, 1996-1997, 1999, 2001-2015 Free Software
 Foundation, Inc.
 
 Author: Jonathan Kamens <address@hidden>
@@ -1397,8 +1397,7 @@ sendline (popserver server, const char *line)
      over a few dozen messages, and is a big chunk of the time we
      spend fetching mail from a server close by.  */
   buf = alloca (strlen (line) + 3);
-  strcpy (buf, line);
-  strcat (buf, "\r\n");
+  strcpy (stpcpy (buf, line), "\r\n");
   ret = fullwrite (server->file, buf, strlen (buf));
 
   if (ret < 0)
diff --git a/lib-src/pop.h b/lib-src/pop.h
index 51eaa81..cd81969 100644
--- a/lib-src/pop.h
+++ b/lib-src/pop.h
@@ -1,5 +1,5 @@
 /* pop.h: Header file for the "pop.c" client POP3 protocol.
-   Copyright (C) 1991, 1993, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1993, 2001-2015 Free Software Foundation, Inc.
 
 Author:  Jonathan Kamens <address@hidden>
 
diff --git a/lib-src/profile.c b/lib-src/profile.c
index e159a92..ffaa225 100644
--- a/lib-src/profile.c
+++ b/lib-src/profile.c
@@ -1,5 +1,5 @@
 /* profile.c --- generate periodic events for profiling of Emacs Lisp code.
-   Copyright (C) 1992, 1994, 1999, 2001-2014 Free Software Foundation,
+   Copyright (C) 1992, 1994, 1999, 2001-2015 Free Software Foundation,
    Inc.
 
 Author: Boaz Ben-Zvi <address@hidden>
diff --git a/lib-src/rcs2log b/lib-src/rcs2log
index 8dd9cdc..2427603 100755
--- a/lib-src/rcs2log
+++ b/lib-src/rcs2log
@@ -2,7 +2,7 @@
 
 # RCS to ChangeLog generator
 
-# Copyright (C) 1992-1998, 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 1992-1998, 2001-2015 Free Software Foundation, Inc.
 
 # Author: Paul Eggert <address@hidden>
 
@@ -20,7 +20,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-Copyright='Copyright (C) 2014 Free Software Foundation, Inc.
+Copyright='Copyright (C) 2015 Free Software Foundation, Inc.
 This program comes with NO WARRANTY, to the extent permitted by law.
 You may redistribute copies of this program
 under the terms of the GNU General Public License.
diff --git a/lib-src/update-game-score.c b/lib-src/update-game-score.c
index 7a64cd0..4f15483 100644
--- a/lib-src/update-game-score.c
+++ b/lib-src/update-game-score.c
@@ -1,6 +1,6 @@
 /* update-game-score.c --- Update a score file
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 Author: Colin Walters <address@hidden>
 
@@ -21,8 +21,8 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 
 /* This program allows a game to securely and atomically update a
-   score file.  It should be installed setuid, owned by an appropriate
-   user like `games'.
+   score file.  It should be installed either setuid or setgid, owned
+   by an appropriate user or group like `games'.
 
    Alternatively, it can be compiled without HAVE_SHARED_GAME_DIR
    defined, and in that case it will store scores in the user's home
@@ -88,7 +88,7 @@ static int push_score (struct score_entry **scores, ptrdiff_t 
*count,
                       ptrdiff_t *size, struct score_entry const *newscore);
 static void sort_scores (struct score_entry *scores, ptrdiff_t count,
                         bool reverse);
-static int write_scores (const char *filename,
+static int write_scores (const char *filename, mode_t mode,
                         const struct score_entry *scores, ptrdiff_t count);
 
 static _Noreturn void
@@ -122,18 +122,19 @@ get_user_id (void)
 }
 
 static const char *
-get_prefix (bool running_suid, const char *user_prefix)
+get_prefix (bool privileged, const char *user_prefix)
 {
-  if (!running_suid && user_prefix == NULL)
-    lose ("Not using a shared game directory, and no prefix given.");
-  if (running_suid)
+  if (privileged)
     {
 #ifdef HAVE_SHARED_GAME_DIR
       return HAVE_SHARED_GAME_DIR;
 #else
-      lose ("This program was compiled without HAVE_SHARED_GAME_DIR,\n and 
should not be suid.");
+      lose ("This program was compiled without HAVE_SHARED_GAME_DIR,\n"
+           "and should not run with elevated privileges.");
 #endif
     }
+  if (user_prefix == NULL)
+    lose ("Not using a shared game directory, and no prefix given.");
   return user_prefix;
 }
 
@@ -173,7 +174,7 @@ int
 main (int argc, char **argv)
 {
   int c;
-  bool running_suid;
+  bool running_suid, running_sgid;
   void *lockstate;
   char *scorefile;
   char *end, *nl, *user, *data;
@@ -214,16 +215,19 @@ main (int argc, char **argv)
     usage (EXIT_FAILURE);
 
   running_suid = (getuid () != geteuid ());
+  running_sgid = (getgid () != getegid ());
+  if (running_suid && running_sgid)
+    lose ("This program can run either suid or sgid, but not both.");
 
-  prefix = get_prefix (running_suid, user_prefix);
+  prefix = get_prefix (running_suid || running_sgid, user_prefix);
 
   scorefile = malloc (strlen (prefix) + strlen (argv[optind]) + 2);
   if (!scorefile)
     lose_syserr ("Couldn't allocate score file");
 
-  strcpy (scorefile, prefix);
-  strcat (scorefile, "/");
-  strcat (scorefile, argv[optind]);
+  char *z = stpcpy (scorefile, prefix);
+  *z++ = '/';
+  strcpy (z, argv[optind]);
 
   newscore.score = normalize_integer (argv[optind + 1]);
   if (! newscore.score)
@@ -270,7 +274,8 @@ main (int argc, char **argv)
        scores += scorecount - max_scores;
       scorecount = max_scores;
     }
-  if (write_scores (scorefile, scores, scorecount) < 0)
+  if (write_scores (scorefile, running_sgid ? 0664 : 0644,
+                   scores, scorecount) < 0)
     {
       unlock_file (scorefile, lockstate);
       lose_syserr ("Failed to write scores file");
@@ -421,8 +426,8 @@ sort_scores (struct score_entry *scores, ptrdiff_t count, 
bool reverse)
 }
 
 static int
-write_scores (const char *filename, const struct score_entry *scores,
-             ptrdiff_t count)
+write_scores (const char *filename, mode_t mode,
+             const struct score_entry *scores, ptrdiff_t count)
 {
   int fd;
   FILE *f;
@@ -430,13 +435,12 @@ write_scores (const char *filename, const struct 
score_entry *scores,
   char *tempfile = malloc (strlen (filename) + strlen (".tempXXXXXX") + 1);
   if (!tempfile)
     return -1;
-  strcpy (tempfile, filename);
-  strcat (tempfile, ".tempXXXXXX");
+  strcpy (stpcpy (tempfile, filename), ".tempXXXXXX");
   fd = mkostemp (tempfile, 0);
   if (fd < 0)
     return -1;
 #ifndef DOS_NT
-  if (fchmod (fd, 0644) != 0)
+  if (fchmod (fd, mode) != 0)
     return -1;
 #endif
   f = fdopen (fd, "w");
@@ -462,8 +466,7 @@ lock_file (const char *filename, void **state)
   char *lockpath = malloc (strlen (filename) + strlen (lockext) + 60);
   if (!lockpath)
     return -1;
-  strcpy (lockpath, filename);
-  strcat (lockpath, lockext);
+  strcpy (stpcpy (lockpath, filename), lockext);
   *state = lockpath;
 
   while ((fd = open (lockpath, O_CREAT | O_EXCL, 0600)) < 0)
diff --git a/lib/acl-errno-valid.c b/lib/acl-errno-valid.c
index 3287382..a64d3d3 100644
--- a/lib/acl-errno-valid.c
+++ b/lib/acl-errno-valid.c
@@ -1,6 +1,6 @@
 /* Test whether ACLs are well supported on this system.
 
-   Copyright 2013-2014 Free Software Foundation, Inc.
+   Copyright 2013-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/acl-internal.h b/lib/acl-internal.h
index b238006..243ca32 100644
--- a/lib/acl-internal.h
+++ b/lib/acl-internal.h
@@ -1,6 +1,6 @@
 /* Internal implementation of access control lists.
 
-   Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/acl.h b/lib/acl.h
index f67e350..88ea08d 100644
--- a/lib/acl.h
+++ b/lib/acl.h
@@ -1,6 +1,6 @@
 /* acl.c - access control lists
 
-   Copyright (C) 2002, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/acl_entries.c b/lib/acl_entries.c
index 39d6b28..936a131 100644
--- a/lib/acl_entries.c
+++ b/lib/acl_entries.c
@@ -1,6 +1,6 @@
 /* Return the number of entries in an ACL.
 
-   Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/alloca.in.h b/lib/alloca.in.h
index 5de9aaa..906fe92 100644
--- a/lib/alloca.in.h
+++ b/lib/alloca.in.h
@@ -1,6 +1,6 @@
 /* Memory allocation on the stack.
 
-   Copyright (C) 1995, 1999, 2001-2004, 2006-2014 Free Software Foundation,
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2015 Free Software Foundation,
    Inc.
 
    This program is free software; you can redistribute it and/or modify it
diff --git a/lib/allocator.h b/lib/allocator.h
index 0904b32..c7c851f 100644
--- a/lib/allocator.h
+++ b/lib/allocator.h
@@ -1,6 +1,6 @@
 /* Memory allocators such as malloc+free.
 
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/at-func.c b/lib/at-func.c
index c8ee073..bbbe458 100644
--- a/lib/at-func.c
+++ b/lib/at-func.c
@@ -1,5 +1,5 @@
 /* Define at-style functions like fstatat, unlinkat, fchownat, etc.
-   Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/binary-io.h b/lib/binary-io.h
index 7928f8c..f5b66c7 100644
--- a/lib/binary-io.h
+++ b/lib/binary-io.h
@@ -1,5 +1,5 @@
 /* Binary mode I/O.
-   Copyright (C) 2001, 2003, 2005, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003, 2005, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/byteswap.in.h b/lib/byteswap.in.h
index 5d1592a..db885d8 100644
--- a/lib/byteswap.in.h
+++ b/lib/byteswap.in.h
@@ -1,5 +1,5 @@
 /* byteswap.h - Byte swapping
-   Copyright (C) 2005, 2007, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2009-2015 Free Software Foundation, Inc.
    Written by Oskar Liljeblad <address@hidden>, 2005.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/c-ctype.c b/lib/c-ctype.c
index 48c6478..1fb5fe6 100644
--- a/lib/c-ctype.c
+++ b/lib/c-ctype.c
@@ -1,6 +1,6 @@
 /* Character handling in C locale.
 
-   Copyright 2000-2003, 2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright 2000-2003, 2006, 2009-2015 Free Software Foundation, Inc.
 
 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
diff --git a/lib/c-ctype.h b/lib/c-ctype.h
index b465277..4764473 100644
--- a/lib/c-ctype.h
+++ b/lib/c-ctype.h
@@ -5,7 +5,7 @@
    <ctype.h> functions' behaviour depends on the current locale set via
    setlocale.
 
-   Copyright (C) 2000-2003, 2006, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2006, 2008-2015 Free Software Foundation, Inc.
 
 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
diff --git a/lib/c-strcase.h b/lib/c-strcase.h
index 8e66044..f25bcca 100644
--- a/lib/c-strcase.h
+++ b/lib/c-strcase.h
@@ -1,5 +1,5 @@
 /* Case-insensitive string comparison functions in C locale.
-   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2014 Free Software
+   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2015 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c
index b9b26a4..6deb6d1 100644
--- a/lib/c-strcasecmp.c
+++ b/lib/c-strcasecmp.c
@@ -1,5 +1,5 @@
 /* c-strcasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c
index 972eb80..b98e368 100644
--- a/lib/c-strncasecmp.c
+++ b/lib/c-strncasecmp.c
@@ -1,5 +1,5 @@
 /* c-strncasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/careadlinkat.c b/lib/careadlinkat.c
index b36fea2..f2f5da2 100644
--- a/lib/careadlinkat.c
+++ b/lib/careadlinkat.c
@@ -1,6 +1,6 @@
 /* Read symbolic links into a buffer without size limitation, relative to fd.
 
-   Copyright (C) 2001, 2003-2004, 2007, 2009-2014 Free Software Foundation,
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2015 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/careadlinkat.h b/lib/careadlinkat.h
index 704f815..4eb9fcc 100644
--- a/lib/careadlinkat.h
+++ b/lib/careadlinkat.h
@@ -1,6 +1,6 @@
 /* Read symbolic links into a buffer without size limitation, relative to fd.
 
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/close-stream.c b/lib/close-stream.c
index 87921d4..6e3d865 100644
--- a/lib/close-stream.c
+++ b/lib/close-stream.c
@@ -1,6 +1,6 @@
 /* Close a stream, with nicer error checking than fclose's.
 
-   Copyright (C) 1998-2002, 2004, 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004, 2006-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/count-one-bits.h b/lib/count-one-bits.h
index 97b0f8a..d54397f 100644
--- a/lib/count-one-bits.h
+++ b/lib/count-one-bits.h
@@ -1,5 +1,5 @@
 /* count-one-bits.h -- counts the number of 1-bits in a word.
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/count-trailing-zeros.h b/lib/count-trailing-zeros.h
index 8b65301..83ce2fb 100644
--- a/lib/count-trailing-zeros.h
+++ b/lib/count-trailing-zeros.h
@@ -1,5 +1,5 @@
 /* count-trailing-zeros.h -- counts the number of trailing 0 bits in a word.
-   Copyright 2013-2014 Free Software Foundation, Inc.
+   Copyright 2013-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/dirent.in.h b/lib/dirent.in.h
index 4822d6b..ddd3b84 100644
--- a/lib/dirent.in.h
+++ b/lib/dirent.in.h
@@ -1,5 +1,5 @@
 /* A GNU-like <dirent.h>.
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/dosname.h b/lib/dosname.h
index b92adfa..893baf6 100644
--- a/lib/dosname.h
+++ b/lib/dosname.h
@@ -1,6 +1,6 @@
 /* File names on MS-DOS/Windows systems.
 
-   Copyright (C) 2000-2001, 2004-2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001, 2004-2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/dtotimespec.c b/lib/dtotimespec.c
index 57a0cee..c28d219 100644
--- a/lib/dtotimespec.c
+++ b/lib/dtotimespec.c
@@ -1,6 +1,6 @@
 /* Convert double to timespec.
 
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/dup2.c b/lib/dup2.c
index 7de6805..0e13214 100644
--- a/lib/dup2.c
+++ b/lib/dup2.c
@@ -1,6 +1,6 @@
 /* Duplicate an open file descriptor to a specified file descriptor.
 
-   Copyright (C) 1999, 2004-2007, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2004-2007, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/errno.in.h b/lib/errno.in.h
index 832afc8..affbb97 100644
--- a/lib/errno.in.h
+++ b/lib/errno.in.h
@@ -1,6 +1,6 @@
 /* A POSIX-like <errno.h>.
 
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/euidaccess.c b/lib/euidaccess.c
index 363e6fe..c7e6cfb 100644
--- a/lib/euidaccess.c
+++ b/lib/euidaccess.c
@@ -1,6 +1,6 @@
 /* euidaccess -- check if effective user id can access file
 
-   Copyright (C) 1990-1991, 1995, 1998, 2000, 2003-2006, 2008-2014 Free
+   Copyright (C) 1990-1991, 1995, 1998, 2000, 2003-2006, 2008-2015 Free
    Software Foundation, Inc.
 
    This file is part of the GNU C Library.
diff --git a/lib/execinfo.in.h b/lib/execinfo.in.h
index 5d10aec..4773d38 100644
--- a/lib/execinfo.in.h
+++ b/lib/execinfo.in.h
@@ -1,6 +1,6 @@
 /* Information about executables.
 
-   Copyright (C) 2012-2014 Free Software Foundation, Inc.
+   Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/faccessat.c b/lib/faccessat.c
index 44a38ae..5bd7ecf 100644
--- a/lib/faccessat.c
+++ b/lib/faccessat.c
@@ -1,5 +1,5 @@
 /* Check the access rights of a file relative to an open directory.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/fcntl.c b/lib/fcntl.c
index 1e35dd1..23b73e9 100644
--- a/lib/fcntl.c
+++ b/lib/fcntl.c
@@ -1,6 +1,6 @@
 /* Provide file descriptor control.
 
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h
index f63cd6a..e288018 100644
--- a/lib/fcntl.in.h
+++ b/lib/fcntl.in.h
@@ -1,6 +1,6 @@
 /* Like <fcntl.h>, but with non-working flags defined to 0.
 
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/fdatasync.c b/lib/fdatasync.c
index 688543f..bbc3039 100644
--- a/lib/fdatasync.c
+++ b/lib/fdatasync.c
@@ -1,6 +1,6 @@
 /* Emulate fdatasync on platforms that lack it.
 
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public
diff --git a/lib/fdopendir.c b/lib/fdopendir.c
index b6c94a0..9dc1e7b 100644
--- a/lib/fdopendir.c
+++ b/lib/fdopendir.c
@@ -1,5 +1,5 @@
 /* provide a replacement fdopendir function
-   Copyright (C) 2004-2014 Free Software Foundation, Inc.
+   Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c
index 5104a41..2ef4e8b 100644
--- a/lib/file-has-acl.c
+++ b/lib/file-has-acl.c
@@ -1,6 +1,6 @@
 /* Test whether a file has a nontrivial access control list.
 
-   Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/filemode.c b/lib/filemode.c
index 3e2f8c0..3b19507 100644
--- a/lib/filemode.c
+++ b/lib/filemode.c
@@ -1,6 +1,6 @@
 /* filemode.c -- make a string describing file modes
 
-   Copyright (C) 1985, 1990, 1993, 1998-2000, 2004, 2006, 2009-2014 Free
+   Copyright (C) 1985, 1990, 1993, 1998-2000, 2004, 2006, 2009-2015 Free
    Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/filemode.h b/lib/filemode.h
index c51e6a3..ff0460a 100644
--- a/lib/filemode.h
+++ b/lib/filemode.h
@@ -1,6 +1,6 @@
 /* Make a string describing file modes.
 
-   Copyright (C) 1998-1999, 2003, 2006, 2009-2014 Free Software Foundation,
+   Copyright (C) 1998-1999, 2003, 2006, 2009-2015 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/fpending.c b/lib/fpending.c
index 31aba1a..c4b4a51 100644
--- a/lib/fpending.c
+++ b/lib/fpending.c
@@ -1,5 +1,5 @@
 /* fpending.c -- return the number of pending output bytes on a stream
-   Copyright (C) 2000, 2004, 2006-2007, 2009-2014 Free Software Foundation,
+   Copyright (C) 2000, 2004, 2006-2007, 2009-2015 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/fpending.h b/lib/fpending.h
index dd607fe..5a1b2ad 100644
--- a/lib/fpending.h
+++ b/lib/fpending.h
@@ -1,6 +1,6 @@
 /* Declare __fpending.
 
-   Copyright (C) 2000, 2003, 2005-2006, 2009-2014 Free Software Foundation,
+   Copyright (C) 2000, 2003, 2005-2006, 2009-2015 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/fstatat.c b/lib/fstatat.c
index 44e3266..6a9e862 100644
--- a/lib/fstatat.c
+++ b/lib/fstatat.c
@@ -1,6 +1,6 @@
 /* Work around an fstatat bug on Solaris 9.
 
-   Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/fsync.c b/lib/fsync.c
index b09a8e6..b51d654 100644
--- a/lib/fsync.c
+++ b/lib/fsync.c
@@ -7,7 +7,7 @@
 
    Written by Richard W.M. Jones <rjones.at.redhat.com>
 
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public
diff --git a/lib/ftoastr.c b/lib/ftoastr.c
index 7780d00..5cdaedf 100644
--- a/lib/ftoastr.c
+++ b/lib/ftoastr.c
@@ -1,6 +1,6 @@
 /* floating point to accurate string
 
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/ftoastr.h b/lib/ftoastr.h
index 26cad73..970c3b1 100644
--- a/lib/ftoastr.h
+++ b/lib/ftoastr.h
@@ -1,6 +1,6 @@
 /* floating point to accurate string
 
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/getdtablesize.c b/lib/getdtablesize.c
index f0c6271..59b9736 100644
--- a/lib/getdtablesize.c
+++ b/lib/getdtablesize.c
@@ -1,5 +1,5 @@
 /* getdtablesize() function for platforms that don't have it.
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
    Written by Bruno Haible <address@hidden>, 2008.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/getgroups.c b/lib/getgroups.c
index 91a340f..5563dfb 100644
--- a/lib/getgroups.c
+++ b/lib/getgroups.c
@@ -1,6 +1,6 @@
 /* provide consistent interface to getgroups for systems that don't allow N==0
 
-   Copyright (C) 1996, 1999, 2003, 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1999, 2003, 2006-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/getloadavg.c b/lib/getloadavg.c
index cdba525..0cbca26 100644
--- a/lib/getloadavg.c
+++ b/lib/getloadavg.c
@@ -1,6 +1,6 @@
 /* Get the system load averages.
 
-   Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2014 Free Software
+   Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2015 Free Software
    Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with gnulib.
diff --git a/lib/getopt.c b/lib/getopt.c
index 7d950af..3b9c585 100644
--- a/lib/getopt.c
+++ b/lib/getopt.c
@@ -2,7 +2,7 @@
    NOTE: getopt is part of the C library, so if you don't know what
    "Keep this file name-space clean" means, talk to address@hidden
    before changing it!
-   Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2014 Free Software
+   Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2015 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/getopt.in.h b/lib/getopt.in.h
index 7ab99fb..9248f76 100644
--- a/lib/getopt.in.h
+++ b/lib/getopt.in.h
@@ -1,5 +1,5 @@
 /* Declarations for getopt.
-   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2014 Free Software
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2015 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/getopt1.c b/lib/getopt1.c
index a184865..2b1feb6 100644
--- a/lib/getopt1.c
+++ b/lib/getopt1.c
@@ -1,5 +1,5 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2014 Free Software
+   Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2015 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/getopt_.h b/lib/getopt_.h
index 6c356c3..6c719ee 100644
--- a/lib/getopt_.h
+++ b/lib/getopt_.h
@@ -1,5 +1,5 @@
 /* Declarations for getopt.
-   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2014 Free
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2015 Free
    Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -130,7 +130,7 @@
 
 /* The definition of _GL_ARG_NONNULL is copied here.  */
 /* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/lib/getopt_int.h b/lib/getopt_int.h
index 24ed672..e893a6e 100644
--- a/lib/getopt_int.h
+++ b/lib/getopt_int.h
@@ -1,5 +1,5 @@
 /* Internal declarations for getopt.
-   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2014 Free Software
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2015 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/gettext.h b/lib/gettext.h
index c7d6fd3..599a14e 100644
--- a/lib/gettext.h
+++ b/lib/gettext.h
@@ -1,5 +1,5 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2014 Free Software
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2015 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/lib/gettime.c b/lib/gettime.c
index 1b4ca8d..1c47e3b 100644
--- a/lib/gettime.c
+++ b/lib/gettime.c
@@ -1,6 +1,6 @@
 /* gettime -- get the system clock
 
-   Copyright (C) 2002, 2004-2007, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004-2007, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c
index 8b2058e..e0e2e69 100644
--- a/lib/gettimeofday.c
+++ b/lib/gettimeofday.c
@@ -1,6 +1,6 @@
 /* Provide gettimeofday for systems that don't have it or for which it's 
broken.
 
-   Copyright (C) 2001-2003, 2005-2007, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2007, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/gnulib.mk b/lib/gnulib.mk
index 6437a9d..1b671e7 100644
--- a/lib/gnulib.mk
+++ b/lib/gnulib.mk
@@ -1,6 +1,6 @@
 ## DO NOT EDIT! GENERATED AUTOMATICALLY!
 ## Process this file with automake to produce Makefile.in.
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # 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
@@ -21,7 +21,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux 
--avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix 
--avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die 
--avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select 
--avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib 
--makefile-name=gnulib.mk --conditional-dependencies --no-libtool --ma [...]
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux 
--avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix 
--avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die 
--avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select 
--avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib 
--makefile-name=gnulib.mk --conditional-dependencies --no-libtool --ma [...]
 
 
 MOSTLYCLEANFILES += core *.stackdump
@@ -915,6 +915,7 @@ stddef.h: stddef.in.h $(top_builddir)/config.status
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
              -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+             -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
              -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
              -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
              < $(srcdir)/stddef.in.h; \
@@ -1213,6 +1214,15 @@ EXTRA_DIST += stdlib.in.h
 
 ## end   gnulib module stdlib
 
+## begin gnulib module stpcpy
+
+
+EXTRA_DIST += stpcpy.c
+
+EXTRA_libgnu_a_SOURCES += stpcpy.c
+
+## end   gnulib module stpcpy
+
 ## begin gnulib module strftime
 
 libgnu_a_SOURCES += strftime.c
@@ -1568,6 +1578,7 @@ time.h: time.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H) $(
              -e 
's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g'
 \
              -e 
's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g'
 \
              -e 
's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+             -e 
's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g'
 \
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
diff --git a/lib/group-member.c b/lib/group-member.c
index e869dca..23074e4 100644
--- a/lib/group-member.c
+++ b/lib/group-member.c
@@ -1,6 +1,6 @@
 /* group-member.c -- determine whether group id is in calling user's group list
 
-   Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2014 Free Software
+   Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2015 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/intprops.h b/lib/intprops.h
index d0bb7a6..f85ccad 100644
--- a/lib/intprops.h
+++ b/lib/intprops.h
@@ -1,6 +1,6 @@
 /* intprops.h -- properties of integer types
 
-   Copyright (C) 2001-2005, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2005, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/inttypes.in.h b/lib/inttypes.in.h
index 4b2a13b..13a72be 100644
--- a/lib/inttypes.in.h
+++ b/lib/inttypes.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2015 Free Software Foundation, Inc.
    Written by Paul Eggert, Bruno Haible, Derek Price.
    This file is part of gnulib.
 
diff --git a/lib/lstat.c b/lib/lstat.c
index f70fd43..31dee13 100644
--- a/lib/lstat.c
+++ b/lib/lstat.c
@@ -1,6 +1,6 @@
 /* Work around a bug of lstat on some systems
 
-   Copyright (C) 1997-2006, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 1997-2006, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/makefile.w32-in b/lib/makefile.w32-in
index bf624e6..8424fd6 100644
--- a/lib/makefile.w32-in
+++ b/lib/makefile.w32-in
@@ -1,5 +1,5 @@
 # -*- Makefile -*- for GNU Emacs on the Microsoft Windows API.
-# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/lib/md5.c b/lib/md5.c
index ece24ac..30525dc 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -1,6 +1,6 @@
 /* Functions to compute MD5 message digest of files or memory blocks.
    according to the definition of MD5 in RFC 1321 from April 1992.
-   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2014 Free Software
+   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2015 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/md5.h b/lib/md5.h
index 1d6974a..43add99 100644
--- a/lib/md5.h
+++ b/lib/md5.h
@@ -1,6 +1,6 @@
 /* Declaration of functions and data types used for MD5 sum computing
    library functions.
-   Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2014 Free Software
+   Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2015 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/memrchr.c b/lib/memrchr.c
index 742a0c9..3827208 100644
--- a/lib/memrchr.c
+++ b/lib/memrchr.c
@@ -1,6 +1,6 @@
 /* memrchr -- find the last occurrence of a byte in a memory block
 
-   Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2014 Free Software
+   Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2015 Free Software
    Foundation, Inc.
 
    Based on strlen implementation by Torbjorn Granlund (address@hidden),
diff --git a/lib/mkostemp.c b/lib/mkostemp.c
index 94e5788..47ff9d3 100644
--- a/lib/mkostemp.c
+++ b/lib/mkostemp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2014 Free Software
+/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2015 Free Software
    Foundation, Inc.
    This file is derived from the one in the GNU C Library.
 
diff --git a/lib/mktime.c b/lib/mktime.c
index 48b3a40..580bc8e 100644
--- a/lib/mktime.c
+++ b/lib/mktime.c
@@ -1,5 +1,5 @@
 /* Convert a 'struct tm' to a time_t value.
-   Copyright (C) 1993-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Paul Eggert <address@hidden>.
 
diff --git a/lib/openat-priv.h b/lib/openat-priv.h
index 326c739..f5a3690 100644
--- a/lib/openat-priv.h
+++ b/lib/openat-priv.h
@@ -1,6 +1,6 @@
 /* Internals for openat-like functions.
 
-   Copyright (C) 2005-2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/openat-proc.c b/lib/openat-proc.c
index 7b40bb8..4e1d341 100644
--- a/lib/openat-proc.c
+++ b/lib/openat-proc.c
@@ -1,6 +1,6 @@
 /* Create /proc/self/fd-related names for subfiles of open directories.
 
-   Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/openat.h b/lib/openat.h
index 29e23a5..f148adf 100644
--- a/lib/openat.h
+++ b/lib/openat.h
@@ -1,5 +1,5 @@
 /* provide a replacement openat function
-   Copyright (C) 2004-2006, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2004-2006, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/pathmax.h b/lib/pathmax.h
index 33fc355..2f3b64f 100644
--- a/lib/pathmax.h
+++ b/lib/pathmax.h
@@ -1,5 +1,5 @@
 /* Define PATH_MAX somehow.  Requires sys/types.h.
-   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2014 Free Software
+   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2015 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/lib/pipe2.c b/lib/pipe2.c
index 61c42a0..89b982b 100644
--- a/lib/pipe2.c
+++ b/lib/pipe2.c
@@ -1,5 +1,5 @@
 /* Create a pipe, with specific opening flags.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/pselect.c b/lib/pselect.c
index 695a3e8..0a23fdf 100644
--- a/lib/pselect.c
+++ b/lib/pselect.c
@@ -1,6 +1,6 @@
 /* pselect - synchronous I/O multiplexing
 
-   Copyright 2011-2014 Free Software Foundation, Inc.
+   Copyright 2011-2015 Free Software Foundation, Inc.
 
    This file is part of gnulib.
 
diff --git a/lib/pthread_sigmask.c b/lib/pthread_sigmask.c
index 1943934..982ae60 100644
--- a/lib/pthread_sigmask.c
+++ b/lib/pthread_sigmask.c
@@ -1,5 +1,5 @@
 /* POSIX compatible signal blocking for threads.
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/putenv.c b/lib/putenv.c
index b9f5079..925bb2f 100644
--- a/lib/putenv.c
+++ b/lib/putenv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2014 Free Software
+/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2015 Free Software
    Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C
diff --git a/lib/qcopy-acl.c b/lib/qcopy-acl.c
index 4e53b63..aac76a1 100644
--- a/lib/qcopy-acl.c
+++ b/lib/qcopy-acl.c
@@ -1,6 +1,6 @@
 /* copy-acl.c - copy access control list from one file to another file
 
-   Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/qset-acl.c b/lib/qset-acl.c
index 7d9af57..bb4b0b2 100644
--- a/lib/qset-acl.c
+++ b/lib/qset-acl.c
@@ -1,6 +1,6 @@
 /* qset-acl.c - set access control list equivalent to a mode
 
-   Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/readlink.c b/lib/readlink.c
index 4c49639..965c3e2 100644
--- a/lib/readlink.c
+++ b/lib/readlink.c
@@ -1,5 +1,5 @@
 /* Stub for readlink().
-   Copyright (C) 2003-2007, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2003-2007, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/readlinkat.c b/lib/readlinkat.c
index 83ea0af..f4826f9 100644
--- a/lib/readlinkat.c
+++ b/lib/readlinkat.c
@@ -1,5 +1,5 @@
 /* Read a symlink relative to an open directory.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/root-uid.h b/lib/root-uid.h
index 39e3c99..d263f4d 100644
--- a/lib/root-uid.h
+++ b/lib/root-uid.h
@@ -1,6 +1,6 @@
 /* The user ID that always has appropriate privileges in the POSIX sense.
 
-   Copyright 2012-2014 Free Software Foundation, Inc.
+   Copyright 2012-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/save-cwd.c b/lib/save-cwd.c
index 833783c..d13a743 100644
--- a/lib/save-cwd.c
+++ b/lib/save-cwd.c
@@ -1,6 +1,6 @@
 /* save-cwd.c -- Save and restore current working directory.
 
-   Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2014 Free Software
+   Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2015 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/save-cwd.h b/lib/save-cwd.h
index 6b84e46..36e0b10 100644
--- a/lib/save-cwd.h
+++ b/lib/save-cwd.h
@@ -1,7 +1,7 @@
 /* Save and restore current working directory.
 
-   Copyright (C) 1995, 1997-1998, 2003, 2009-2014 Free Software Foundation,
-   Inc.
+   Copyright (C) 1995, 1997-1998, 2003, 2009-2015 Free Software
+   Foundation, Inc.
 
    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
diff --git a/lib/secure_getenv.c b/lib/secure_getenv.c
index 32819e6..31aad1f 100644
--- a/lib/secure_getenv.c
+++ b/lib/secure_getenv.c
@@ -1,6 +1,6 @@
 /* Look up an environment variable more securely.
 
-   Copyright 2013-2014 Free Software Foundation, Inc.
+   Copyright 2013-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/lib/sha1.c b/lib/sha1.c
index 0ea35b0..4411cee 100644
--- a/lib/sha1.c
+++ b/lib/sha1.c
@@ -1,7 +1,7 @@
 /* sha1.c - Functions to compute SHA1 message digest of files or
    memory blocks according to the NIST specification FIPS-180-1.
 
-   Copyright (C) 2000-2001, 2003-2006, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001, 2003-2006, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sha1.h b/lib/sha1.h
index 4fd7d66..b907416 100644
--- a/lib/sha1.h
+++ b/lib/sha1.h
@@ -1,6 +1,6 @@
 /* Declarations of functions and data types used for SHA1 sum
    library functions.
-   Copyright (C) 2000-2001, 2003, 2005-2006, 2008-2014 Free Software
+   Copyright (C) 2000-2001, 2003, 2005-2006, 2008-2015 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
diff --git a/lib/sha256.c b/lib/sha256.c
index a07e4f9..9ac8173 100644
--- a/lib/sha256.c
+++ b/lib/sha256.c
@@ -1,7 +1,7 @@
 /* sha256.c - Functions to compute SHA256 and SHA224 message digest of files or
    memory blocks according to the NIST specification FIPS-180-2.
 
-   Copyright (C) 2005-2006, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sha256.h b/lib/sha256.h
index 92c0b95..dae84f5 100644
--- a/lib/sha256.h
+++ b/lib/sha256.h
@@ -1,6 +1,6 @@
 /* Declarations of functions and data types used for SHA256 and SHA224 sum
    library functions.
-   Copyright (C) 2005-2006, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sha512.c b/lib/sha512.c
index 5d3a172..f48e74b 100644
--- a/lib/sha512.c
+++ b/lib/sha512.c
@@ -1,7 +1,7 @@
 /* sha512.c - Functions to compute SHA512 and SHA384 message digest of files or
    memory blocks according to the NIST specification FIPS-180-2.
 
-   Copyright (C) 2005-2006, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sha512.h b/lib/sha512.h
index 17aeea6..d540887 100644
--- a/lib/sha512.h
+++ b/lib/sha512.h
@@ -1,6 +1,6 @@
 /* Declarations of functions and data types used for SHA512 and SHA384 sum
    library functions.
-   Copyright (C) 2005-2006, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sig2str.c b/lib/sig2str.c
index 119006a..58154da 100644
--- a/lib/sig2str.c
+++ b/lib/sig2str.c
@@ -1,6 +1,6 @@
 /* sig2str.c -- convert between signal names and numbers
 
-   Copyright (C) 2002, 2004, 2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sig2str.h b/lib/sig2str.h
index fc90b72..ac2f67a 100644
--- a/lib/sig2str.h
+++ b/lib/sig2str.h
@@ -1,6 +1,6 @@
 /* sig2str.h -- convert between signal names and numbers
 
-   Copyright (C) 2002, 2005, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/signal.in.h b/lib/signal.in.h
index 925e16f..0f2ff5a 100644
--- a/lib/signal.in.h
+++ b/lib/signal.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <signal.h>.
 
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/stat-time.h b/lib/stat-time.h
index b3df6eb..b67d179 100644
--- a/lib/stat-time.h
+++ b/lib/stat-time.h
@@ -1,6 +1,6 @@
 /* stat-related time functions.
 
-   Copyright (C) 2005, 2007, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2009-2015 Free Software Foundation, Inc.
 
    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
@@ -54,7 +54,7 @@ _GL_INLINE_HEADER_BEGIN
 #endif
 
 /* Return the nanosecond component of *ST's access time.  */
-_GL_STAT_TIME_INLINE long int
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
 get_stat_atime_ns (struct stat const *st)
 {
 # if defined STAT_TIMESPEC
@@ -67,7 +67,7 @@ get_stat_atime_ns (struct stat const *st)
 }
 
 /* Return the nanosecond component of *ST's status change time.  */
-_GL_STAT_TIME_INLINE long int
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
 get_stat_ctime_ns (struct stat const *st)
 {
 # if defined STAT_TIMESPEC
@@ -80,7 +80,7 @@ get_stat_ctime_ns (struct stat const *st)
 }
 
 /* Return the nanosecond component of *ST's data modification time.  */
-_GL_STAT_TIME_INLINE long int
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
 get_stat_mtime_ns (struct stat const *st)
 {
 # if defined STAT_TIMESPEC
@@ -93,7 +93,7 @@ get_stat_mtime_ns (struct stat const *st)
 }
 
 /* Return the nanosecond component of *ST's birth time.  */
-_GL_STAT_TIME_INLINE long int
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
 get_stat_birthtime_ns (struct stat const *st)
 {
 # if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
@@ -108,7 +108,7 @@ get_stat_birthtime_ns (struct stat const *st)
 }
 
 /* Return *ST's access time.  */
-_GL_STAT_TIME_INLINE struct timespec
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
 get_stat_atime (struct stat const *st)
 {
 #ifdef STAT_TIMESPEC
@@ -122,7 +122,7 @@ get_stat_atime (struct stat const *st)
 }
 
 /* Return *ST's status change time.  */
-_GL_STAT_TIME_INLINE struct timespec
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
 get_stat_ctime (struct stat const *st)
 {
 #ifdef STAT_TIMESPEC
@@ -136,7 +136,7 @@ get_stat_ctime (struct stat const *st)
 }
 
 /* Return *ST's data modification time.  */
-_GL_STAT_TIME_INLINE struct timespec
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
 get_stat_mtime (struct stat const *st)
 {
 #ifdef STAT_TIMESPEC
@@ -151,7 +151,7 @@ get_stat_mtime (struct stat const *st)
 
 /* Return *ST's birth time, if available; otherwise return a value
    with tv_sec and tv_nsec both equal to -1.  */
-_GL_STAT_TIME_INLINE struct timespec
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
 get_stat_birthtime (struct stat const *st)
 {
   struct timespec t;
diff --git a/lib/stat.c b/lib/stat.c
index 35f4b0b..2209826 100644
--- a/lib/stat.c
+++ b/lib/stat.c
@@ -1,5 +1,5 @@
 /* Work around platform bugs in stat.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/stdalign.in.h b/lib/stdalign.in.h
index dcaab55..a990050 100644
--- a/lib/stdalign.in.h
+++ b/lib/stdalign.in.h
@@ -1,6 +1,6 @@
 /* A substitute for ISO C11 <stdalign.h>.
 
-   Copyright 2011-2014 Free Software Foundation, Inc.
+   Copyright 2011-2015 Free Software Foundation, Inc.
 
    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
@@ -95,7 +95,10 @@
 #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112
 # if defined __cplusplus && 201103 <= __cplusplus
 #  define _Alignas(a) alignas (a)
-# elif (__GNUC__ || __HP_cc || __HP_aCC || __IBMC__ || __IBMCPP__ \
+# elif ((defined __APPLE__ && defined __MACH__                  \
+         ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__)                 \
+         : __GNUC__)                                            \
+        || __HP_cc || __HP_aCC || __IBMC__ || __IBMCPP__        \
         || __ICC || 0x5110 <= __SUNPRO_C)
 #  define _Alignas(a) __attribute__ ((__aligned__ (a)))
 # elif 1300 <= _MSC_VER
diff --git a/lib/stddef.in.h b/lib/stddef.in.h
index f5c0e05..44db241 100644
--- a/lib/stddef.in.h
+++ b/lib/stddef.in.h
@@ -1,6 +1,6 @@
 /* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
 
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    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
@@ -39,7 +39,6 @@
 
 # if !(defined address@hidden@_STDDEF_H && defined _GL_STDDEF_WINT_T)
 #  ifdef __need_wint_t
-#   undef address@hidden@_STDDEF_H
 #   define _GL_STDDEF_WINT_T
 #  endif
 #  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
@@ -54,33 +53,45 @@
 
 #  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
 
-#  ifndef address@hidden@_STDDEF_H
-#   define address@hidden@_STDDEF_H
-
 /* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
-#if @REPLACE_NULL@
-# undef NULL
-# ifdef __cplusplus
+#  if (@REPLACE_NULL@ \
+       && (!defined address@hidden@_STDDEF_H || defined _GL_STDDEF_WINT_T))
+#   undef NULL
+#   ifdef __cplusplus
    /* ISO C++ says that the macro NULL must expand to an integer constant
       expression, hence '((void *) 0)' is not allowed in C++.  */
-#  if __GNUG__ >= 3
+#    if __GNUG__ >= 3
     /* GNU C++ has a __null macro that behaves like an integer ('int' or
        'long') but has the same size as a pointer.  Use that, to avoid
        warnings.  */
-#   define NULL __null
-#  else
-#   define NULL 0L
+#     define NULL __null
+#    else
+#     define NULL 0L
+#    endif
+#   else
+#    define NULL ((void *) 0)
+#   endif
 #  endif
-# else
-#  define NULL ((void *) 0)
-# endif
-#endif
+
+#  ifndef address@hidden@_STDDEF_H
+#   define address@hidden@_STDDEF_H
 
 /* Some platforms lack wchar_t.  */
 #if address@hidden@
 # define wchar_t int
 #endif
 
+/* Some platforms lack max_align_t.  */
+#if address@hidden@
+typedef union
+{
+  char *__p;
+  double __d;
+  long double __ld;
+  long int __i;
+} max_align_t;
+#endif
+
 #  endif /* address@hidden@_STDDEF_H */
 # endif /* address@hidden@_STDDEF_H */
 #endif /* __need_XXX */
diff --git a/lib/stdint.in.h b/lib/stdint.in.h
index 247f0d8..378de2e 100644
--- a/lib/stdint.in.h
+++ b/lib/stdint.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2002, 2004-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2002, 2004-2015 Free Software Foundation, Inc.
    Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
    This file is part of gnulib.
 
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
index 1e1fe84..759c94d 100644
--- a/lib/stdio.in.h
+++ b/lib/stdio.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <stdio.h>.
 
-   Copyright (C) 2004, 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2007-2015 Free Software Foundation, Inc.
 
    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
@@ -84,8 +84,13 @@
    except that it indicates to GCC that the supported format string directives
    are the ones of the system printf(), rather than the ones standardized by
    ISO C99 and POSIX.  */
-#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, 
first_argument) \
+#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU
+# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, 
first_argument) \
+  _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument)
+#else
+# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, 
first_argument) \
   _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+#endif
 
 /* _GL_ATTRIBUTE_FORMAT_SCANF
    indicates to GCC that the function takes a format string and arguments,
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
index ee64324..428a119 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <stdlib.h>.
 
-   Copyright (C) 1995, 2001-2004, 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2004, 2006-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/strtoull.c b/lib/stpcpy.c
similarity index 52%
copy from lib/strtoull.c
copy to lib/stpcpy.c
index 30e6e02..559d2f2 100644
--- a/lib/strtoull.c
+++ b/lib/stpcpy.c
@@ -1,7 +1,9 @@
-/* Function to parse an 'unsigned long long int' from text.
-   Copyright (C) 1995-1997, 1999, 2009-2014 Free Software Foundation, Inc.
-   NOTE: The canonical source of this file is maintained with the GNU C
-   Library.  Bugs can be reported to address@hidden
+/* stpcpy.c -- copy a string and return pointer to end of new string
+   Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2015 Free Software
+   Foundation, Inc.
+
+   NOTE: The canonical source of this file is maintained with the GNU C 
Library.
+   Bugs can be reported to address@hidden
 
    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
@@ -16,11 +18,32 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#define QUAD 1
+#include <config.h>
 
-#include "strtoul.c"
+#include <string.h>
 
+#undef __stpcpy
 #ifdef _LIBC
-strong_alias (__strtoull_internal, __strtouq_internal)
-weak_alias (strtoull, strtouq)
+# undef stpcpy
+#endif
+
+#ifndef weak_alias
+# define __stpcpy stpcpy
+#endif
+
+/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
+char *
+__stpcpy (char *dest, const char *src)
+{
+  register char *d = dest;
+  register const char *s = src;
+
+  do
+    *d++ = *s;
+  while (*s++ != '\0');
+
+  return d - 1;
+}
+#ifdef weak_alias
+weak_alias (__stpcpy, stpcpy)
 #endif
diff --git a/lib/strftime.c b/lib/strftime.c
index 857cca5..2426aae 100644
--- a/lib/strftime.c
+++ b/lib/strftime.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2001, 2003-2007, 2009-2014 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C 
Library.
    Bugs can be reported to address@hidden
diff --git a/lib/strftime.h b/lib/strftime.h
index be016ea..3967afc 100644
--- a/lib/strftime.h
+++ b/lib/strftime.h
@@ -1,6 +1,6 @@
 /* declarations for strftime.c
 
-   Copyright (C) 2002, 2004, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2008-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/string.in.h b/lib/string.in.h
index 9062142..ebd727e 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <string.h>.
 
-   Copyright (C) 1995-1996, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1995-1996, 2001-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/strtoimax.c b/lib/strtoimax.c
index 2c33d58..8ff65ce 100644
--- a/lib/strtoimax.c
+++ b/lib/strtoimax.c
@@ -1,6 +1,6 @@
 /* Convert string representation of a number into an intmax_t value.
 
-   Copyright (C) 1999, 2001-2004, 2006, 2009-2014 Free Software Foundation,
+   Copyright (C) 1999, 2001-2004, 2006, 2009-2015 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/strtol.c b/lib/strtol.c
index 2e015dc..1bc1439 100644
--- a/lib/strtol.c
+++ b/lib/strtol.c
@@ -1,6 +1,6 @@
 /* Convert string representation of a number into an integer value.
 
-   Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2014 Free Software
+   Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2015 Free Software
    Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C
diff --git a/lib/strtoll.c b/lib/strtoll.c
index 47dfaa0..d712349 100644
--- a/lib/strtoll.c
+++ b/lib/strtoll.c
@@ -1,5 +1,5 @@
 /* Function to parse a 'long long int' from text.
-   Copyright (C) 1995-1997, 1999, 2001, 2009-2014 Free Software Foundation,
+   Copyright (C) 1995-1997, 1999, 2001, 2009-2015 Free Software Foundation,
    Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/strtoul.c b/lib/strtoul.c
index 4c5ceaf..2051777 100644
--- a/lib/strtoul.c
+++ b/lib/strtoul.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1997, 2009-2014 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1997, 2009-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/strtoull.c b/lib/strtoull.c
index 30e6e02..5cd2554 100644
--- a/lib/strtoull.c
+++ b/lib/strtoull.c
@@ -1,5 +1,5 @@
 /* Function to parse an 'unsigned long long int' from text.
-   Copyright (C) 1995-1997, 1999, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 1995-1997, 1999, 2009-2015 Free Software Foundation, Inc.
    NOTE: The canonical source of this file is maintained with the GNU C
    Library.  Bugs can be reported to address@hidden
 
diff --git a/lib/symlink.c b/lib/symlink.c
index 0e3fae2..14356c3 100644
--- a/lib/symlink.c
+++ b/lib/symlink.c
@@ -1,5 +1,5 @@
 /* Stub for symlink().
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sys_select.in.h b/lib/sys_select.in.h
index 58508b0..fd7a291 100644
--- a/lib/sys_select.in.h
+++ b/lib/sys_select.in.h
@@ -1,5 +1,5 @@
 /* Substitute for <sys/select.h>.
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h
index b47a7ff..9f5e853 100644
--- a/lib/sys_stat.in.h
+++ b/lib/sys_stat.in.h
@@ -1,5 +1,5 @@
 /* Provide a more complete sys/stat header file.
-   Copyright (C) 2005-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sys_time.in.h b/lib/sys_time.in.h
index 30057ad..c556c5d 100644
--- a/lib/sys_time.in.h
+++ b/lib/sys_time.in.h
@@ -1,6 +1,6 @@
 /* Provide a more complete sys/time.h.
 
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/sys_types.in.h b/lib/sys_types.in.h
index deb5d67..814bc17 100644
--- a/lib/sys_types.in.h
+++ b/lib/sys_types.in.h
@@ -1,6 +1,6 @@
 /* Provide a more complete sys/types.h.
 
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/tempname.c b/lib/tempname.c
index 9b713cb..088b224 100644
--- a/lib/tempname.c
+++ b/lib/tempname.c
@@ -1,6 +1,6 @@
 /* tempname.c - generate the name of a temporary file.
 
-   Copyright (C) 1991-2003, 2005-2007, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 1991-2003, 2005-2007, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/tempname.h b/lib/tempname.h
index 44d5f04..b560ee5 100644
--- a/lib/tempname.h
+++ b/lib/tempname.h
@@ -1,6 +1,6 @@
 /* Create a temporary file or directory.
 
-   Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/time.in.h b/lib/time.in.h
index 81abdf4..1a6b746 100644
--- a/lib/time.in.h
+++ b/lib/time.in.h
@@ -1,6 +1,6 @@
 /* A more-standard <time.h>.
 
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    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
@@ -55,6 +55,8 @@
 #   include <sys/time.h>
 #  elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
 #   include <pthread.h>
+#  elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+#   include <unistd.h>
 #  else
 
 #   ifdef __cplusplus
diff --git a/lib/time_r.c b/lib/time_r.c
index a848d54..0b512de 100644
--- a/lib/time_r.c
+++ b/lib/time_r.c
@@ -1,6 +1,6 @@
 /* Reentrant time functions like localtime_r.
 
-   Copyright (C) 2003, 2006-2007, 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006-2007, 2010-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/timespec-add.c b/lib/timespec-add.c
index 3f734a6..255489e 100644
--- a/lib/timespec-add.c
+++ b/lib/timespec-add.c
@@ -1,6 +1,6 @@
 /* Add two struct timespec values.
 
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/timespec-sub.c b/lib/timespec-sub.c
index ecffdc7..c574375 100644
--- a/lib/timespec-sub.c
+++ b/lib/timespec-sub.c
@@ -1,6 +1,6 @@
 /* Subtract two struct timespec values.
 
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/timespec.h b/lib/timespec.h
index 872cbb7..9ec495a 100644
--- a/lib/timespec.h
+++ b/lib/timespec.h
@@ -1,6 +1,6 @@
 /* timespec -- System time interface
 
-   Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2014 Free Software
+   Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2015 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -74,7 +74,7 @@ make_timespec (time_t s, long int ns)
 
    The (int) cast avoids a gcc -Wconversion warning.  */
 
-_GL_TIMESPEC_INLINE int
+_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE
 timespec_cmp (struct timespec a, struct timespec b)
 {
   return (a.tv_sec < b.tv_sec ? -1
@@ -84,7 +84,7 @@ timespec_cmp (struct timespec a, struct timespec b)
 
 /* Return -1, 0, 1, depending on the sign of A.  A.tv_nsec must be
    nonnegative.  */
-_GL_TIMESPEC_INLINE int
+_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE
 timespec_sign (struct timespec a)
 {
   return a.tv_sec < 0 ? -1 : a.tv_sec || a.tv_nsec;
diff --git a/lib/u64.h b/lib/u64.h
index ee3bfcd..0e569d0 100644
--- a/lib/u64.h
+++ b/lib/u64.h
@@ -1,6 +1,6 @@
 /* uint64_t-like operations that work even on hosts lacking uint64_t
 
-   Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index 219f43d..958fea2 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -1,5 +1,5 @@
 /* Substitute for and wrapper around <unistd.h>.
-   Copyright (C) 2003-2014 Free Software Foundation, Inc.
+   Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
    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
@@ -402,7 +402,7 @@ _GL_WARN_ON_USE (dup3, "dup3 is unportable - "
    "VARIABLE=VALUE", terminated with a NULL.  */
 #  if defined __APPLE__ && defined __MACH__
 #   include <TargetConditionals.h>
-#   if !defined TARGET_OS_IPHONE && !defined TARGET_IPHONE_SIMULATOR
+#   if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
 #    define _GL_USE_CRT_EXTERNS
 #   endif
 #  endif
diff --git a/lib/unsetenv.c b/lib/unsetenv.c
index 53721fc..87f41d5 100644
--- a/lib/unsetenv.c
+++ b/lib/unsetenv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1995-2002, 2005-2014 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1995-2002, 2005-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/utimens.c b/lib/utimens.c
index dd3ec66..7386dcf 100644
--- a/lib/utimens.c
+++ b/lib/utimens.c
@@ -1,6 +1,6 @@
 /* Set file access and modification times.
 
-   Copyright (C) 2003-2014 Free Software Foundation, Inc.
+   Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
    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
@@ -24,7 +24,6 @@
 #define _GL_UTIMENS_INLINE _GL_EXTERN_INLINE
 #include "utimens.h"
 
-#include <assert.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <stdbool.h>
@@ -87,7 +86,6 @@ validate_timespec (struct timespec timespec[2])
 {
   int result = 0;
   int utime_omit_count = 0;
-  assert (timespec);
   if ((timespec[0].tv_nsec != UTIME_NOW
        && timespec[0].tv_nsec != UTIME_OMIT
        && ! (0 <= timespec[0].tv_nsec
diff --git a/lib/utimens.h b/lib/utimens.h
index faaf3c7..cbd06cc 100644
--- a/lib/utimens.h
+++ b/lib/utimens.h
@@ -1,6 +1,6 @@
 /* Set file access and modification times.
 
-   Copyright 2012-2014 Free Software Foundation, Inc.
+   Copyright 2012-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/verify.h b/lib/verify.h
index a25e514..60eba49 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -1,6 +1,6 @@
 /* Compile-time assert-like macros.
 
-   Copyright (C) 2005-2006, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/vla.h b/lib/vla.h
index 05125a7..9e46a2f 100644
--- a/lib/vla.h
+++ b/lib/vla.h
@@ -1,6 +1,6 @@
 /* vla.h - variable length arrays
 
-   Copyright 2014 Free Software Foundation, Inc.
+   Copyright 2014-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h
index f332922..f0e9778 100644
--- a/lib/xalloc-oversized.h
+++ b/lib/xalloc-oversized.h
@@ -1,6 +1,6 @@
 /* xalloc-oversized.h -- memory allocation size checking
 
-   Copyright (C) 1990-2000, 2003-2004, 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2003-2004, 2006-2015 Free Software Foundation, Inc.
 
    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
diff --git a/lisp/.gitignore b/lisp/.gitignore
deleted file mode 100644
index 6d5166e..0000000
--- a/lisp/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*.elc
-*-loaddefs.el
-loaddefs.el
-subdirs.el
-finder-inf.el
-cus-load.el
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index adf8273..0a3c7c9 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,8 +1,3145 @@
+2015-01-31  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio.el (defclass): Use new eieio-make-class-predicate
+       and eieio-make-child-predicate.
+       (eieio-class-parents): Use eieio--class-object.
+       (slot-boundp, find-class, eieio-override-prin1): Avoid class-p.
+       (slot-exists-p): Use find-class.
+
+       * emacs-lisp/eieio-opt.el (eieio-help-class, eieio-help-constructor):
+       Use find-lisp-object-file-name, help-fns-short-filename and new calling
+       convention for eieio-class-def.
+       (eieio-build-class-list): Remove function, unused.
+       (eieio-method-def): Remove button type, unused.
+       (eieio-class-def): Inherit from help-function-def.
+       (eieio--defclass-regexp): New constant.
+       (find-function-regexp-alist): Use it.
+       (eieio--specializers-apply-to-class-p): Handle eieio--static as well.
+       (eieio-help-find-method-definition, eieio-help-find-class-definition):
+       Remove functions.
+
+       * emacs-lisp/eieio-core.el (eieio--check-type): Remove.
+       Use cl-check-type everywhere instead.
+       (eieio-class-object): Remove, use find-class instead when needed.
+       (class-p): Don't inline.
+       (eieio-object-p): Check more thoroughly, so we don't treat cl-structs,
+       such as eieio classes, as objects.  Don't inline.
+       (object-p): Mark as obsolete.
+       (eieio-defclass-autoload, eieio-defclass-internal, eieio-oref)
+       (eieio--generic-tagcode): Avoid `class-p'.
+       (eieio-make-class-predicate, eieio-make-child-predicate): New functions.
+       (eieio-defclass-internal): Use current-load-list rather than
+       `class-location'.
+
+       * emacs-lisp/cl-generic.el (cl--generic-search-method): Fix regexp.
+
+2015-01-30  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/backquote.el (backquote-delay-process): Don't reuse `s'
+       since it may be "equivalent" in some sense, yet different (bug#19734).
+
+2015-01-30  Oleh Krehel  <address@hidden>
+
+       * outline.el (outline-font-lock-face): Add docstring.
+       (outline-invisible-p): Improve docstring.
+       (outline-invent-heading): Add docstring.
+       (outline-promote): Improve docstring.
+       (outline-demote): Improve docstring.
+       (outline-head-from-level): Improve docstring.
+       (outline-end-of-heading): Add docstring.
+       (outline-next-visible-heading): Improve docstring.
+       (outline-previous-visible-heading): Improve docstring.
+       (outline-hide-region-body): Improve docstring.
+       (outline-flag-subtree): Add docstring.
+       (outline-end-of-subtree): Add docstring.
+       (outline-headers-as-kill): Improve docstring.
+
+2015-01-30  Oleh Krehel  <address@hidden>
+
+       * outline.el (outline-hide-entry): Rename from `hide-entry'.
+       (hide-entry): Declare as obsolete.
+       (outline-show-entry): Rename from `show-entry'.
+       (show-entry): Declare as obsolete.
+       (outline-hide-body): Rename from `hide-body'.
+       (hide-body): Declare as obsolete.
+       (outline-hide-region-body): Rename from `hide-region-body'.
+       (hide-region-body): Declare as obsolete.
+       (outline-show-all): Rename from `show-all'.
+       (show-all): Declare as obsolete.
+       (outline-hide-subtree): Rename from `hide-subtree'.
+       (hide-subtree): Declare as obsolete.
+       (outline-hide-leaves): Rename from `hide-leaves'.
+       (hide-leaves): Declare as obsolete.
+       (outline-show-subtree): Rename from `show-subtree'.
+       (show-subtree): Declare as obsolete.
+       (outline-hide-sublevels): Rename from `hide-sublevels'.
+       (hide-sublevels): Declare as obsolete.
+       (outline-hide-other): Rename from `hide-other'.
+       (hide-other): Declare as obsolete.
+       (outline-show-children): Rename from `show-children'.
+       (show-children): Declare as obsolete.
+       (outline-show-branches): Rename from `show-branches'.
+       (show-branches): Declare as obsolete.
+
+2015-01-30  Oleh Krehel  <address@hidden>
+
+       * outline.el (outline-mode): Clean up docstring.
+       (font-lock-warning-face): Remove obsolete declaration.
+       (outline-font-lock-face): Remove obsolete comment.
+
+2015-01-30  Oleh Krehel  <address@hidden>
+
+       * lisp/custom.el (defface): Set `indent' to 1.
+
+2015-01-30  Oleh Krehel  <address@hidden>
+
+       * emacs-lisp/easy-mmode.el (define-minor-mode): Set `indent' to 1.
+
+2015-01-30  Michal Nazarewicz  <address@hidden>
+
+       * lisp/files.el (save-buffers-kill-emacs): If `confirm-kill-emacs'
+       is set, but user has just been asked whether they really want to
+       kill Emacs (for example with a ‘Modified buffers exist; exit
+       anyway?’ prompt), do not ask them for another confirmation.
+
+2015-01-29  Jay Belanger  <address@hidden>
+
+       * lisp/calc/calc-units.el (calc-convert-exact-units): New function.
+       (calc-convert-units): Check for missing units.
+       (math-consistent-units-p): Strengthen the test for consistent units.
+
+       * lisp/calc/calc-ext.el (calc-init-extensions):  Autoload
+       `calc-convert-exact-units' and assign it a keybinding.
+
+       * lisp/calc/calc-help (calc-u-prefix-help): Add help for the
+       "un" keybinding.
+
+2015-01-28  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/cl.el (cl--function-convert): Simplify.
+
+2015-01-28  Tassilo Horn  <address@hidden>
+
+       * textmodes/reftex.el (reftex-syntax-table-for-bib): Give ( and )
+       punctuation syntax since to allow bibtex fields with values such
+       as {Test 1) and 2)} (bug#19205, bug#19707).
+       (reftex--prepare-syntax-tables): New function.
+       (reftex-mode): Use it.
+
+2015-01-28  Fabián Ezequiel Gallina  <address@hidden>
+
+       python.el: New non-global state dependent indentation engine.
+       (Bug#18319, Bug#19595)
+       * progmodes/python.el (python-syntax-comment-or-string-p):
+       Accept PPSS as argument.
+       (python-syntax-closing-paren-p): New function.
+       (python-indent-current-level)
+       (python-indent-levels): Mark obsolete.
+       (python-indent-context): Return more context cases.
+       (python-indent--calculate-indentation)
+       (python-indent--calculate-levels): New functions.
+       (python-indent-calculate-levels): Use them.
+       (python-indent-calculate-indentation, python-indent-line):
+       (python-indent-line-function): Rewritten to use new API.
+       (python-indent-dedent-line): Simplify logic.
+       (python-indent-dedent-line-backspace): Use `unless`.
+       (python-indent-toggle-levels): Delete function.
+
+2015-01-28  Daniel Koning  <address@hidden>  (tiny change)
+
+       * subr.el (posnp): Correct docstring of `posnp'.
+       (posn-col-row): Make it work with all mouse position objects.
+       * textmodes/artist.el (artist-mouse-draw-continously):
+       Cancel timers if an error occurs during continuous drawing.  (Bug#6130)
+
+2015-01-28  Eli Zaretskii  <address@hidden>
+
+       * button.el (button-activate, push-button): Doc fix.  (Bug#19628)
+
+2015-01-28  Michael Albinus  <address@hidden>
+
+       * filenotify.el (file-notify-descriptors, file-notify-handle-event):
+       Adapt docstring.
+       (file-notify--descriptor): New defun.
+       (file-notify-callback, file-notify-add-watch, file-notify-rm-watch):
+       Adapt docstring.  Handle multiple values for
+       `file-notify-descriptors' entries.  (Bug#18880)
+
+       * net/tramp.el (tramp-handle-file-notify-rm-watch): Do not check
+       `file-notify-descriptors', the implementation has been changed.
+
+2015-01-28  Eli Zaretskii  <address@hidden>
+
+       * net/net-utils.el (net-utils-run-program, net-utils-run-simple):
+       On MS-Windows, bind coding-system-for-read to the console output
+       codepage.  (Bug#19458)
+
+2015-01-28  Dmitry Gutov  <address@hidden>
+
+       Unbreak `mouse-action' property in text buttons.
+       * button.el (push-button): Fix regression from 2012-12-06.
+
+2015-01-28  Glenn Morris  <address@hidden>
+
+       * progmodes/sh-script.el (sh-mode): Doc fix.
+       (sh-basic-indent-line): Handle electric newline.  (Bug#18756)
+
+2015-01-28  Paul Eggert  <address@hidden>
+
+       Fix dired quoting bug with "Hit`N`Hide".  Fixes Bug#19498.
+       * files.el (shell-quote-wildcard-pattern): Also quote "`".
+
+2015-01-28  Stefan Monnier  <address@hidden>
+
+       Tighten up the tagcode used for eieio and cl-struct objects.
+       * loadup.el: Load cl-preloaded.
+       * emacs-lisp/eieio-core.el (eieio-defclass-internal): Set the function
+       slot of the tag symbol to :quick-object-witness-check.
+       (eieio-object-p): Use :quick-object-witness-check.
+       (eieio--generic-tagcode): Use cl--generic-struct-tag.
+       * emacs-lisp/cl-preloaded.el: New file.
+       * emacs-lisp/cl-macs.el (cl--bind-inits): Remove, unused.
+       (cl--transform-lambda, cl-destructuring-bind): Remove cl--bind-inits.
+       (cl--make-usage-args): Strip away &aux args.
+       (cl-case, cl-typecase, cl--parse-loop-clause): Use macroexp-let2.
+       (cl-the, cl-check-type): Use macroexp-let2 and cl-typep.
+       (cl-defstruct): Use `declare' and cl-struct-define.
+       * emacs-lisp/cl-generic.el (cl--generic-struct-tag): New function.
+       (cl--generic-struct-tagcode): Use it to tighten the tagcode.
+
+2015-01-27  Katsumi Yamaoka  <address@hidden>
+
+       * emacs-lisp/cl.el (cl--function-convert):
+       Merge cache that cl--labels-convert adds (bug#19699).
+
+2015-01-27  Ivan Shmakov  <address@hidden>
+
+       * tar-mode.el: Allow for adding new archive members.  (Bug#19274)
+       (tar-new-regular-file-header, tar--pad-to, tar--put-at)
+       (tar-header-serialize): New functions.
+       (tar-current-position): Split from tar-current-descriptor.
+       (tar-current-descriptor): Use it.
+       (tar-new-entry): New command.
+       (tar-mode-map): Bind it.
+
+2015-01-27  Sam Steingold  <address@hidden>
+
+       * progmodes/python.el (python-check-custom-command): Buffer local
+       because it usually includes the buffer name.
+       (python-check-command): Set to epylint when pyflakes is not available.
+
+2015-01-27  Artur Malabarba  <address@hidden>
+
+       * isearch.el (isearch-process-search-char): Add docstring.
+
+2015-01-27  Oleh Krehel  <address@hidden>
+
+       * emacs-lisp/derived.el (define-derived-mode): Declare indent 3.
+
+2015-01-27  Katsumi Yamaoka  <address@hidden>
+
+       * emacs-lisp/cl.el (cl--function-convert): Run cl--labels-convert
+       for the case cl-flet or cl-labels form is wrapped with lexical-let
+       (bug#19613).
+
+2015-01-26  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/cl-generic.el (cl--generic-method): New struct.
+       (cl--generic): The method-table is now a (list-of cl--generic-method).
+       (cl--generic-member-method): New function.
+       (cl-generic-define-method): Use it.
+       (cl--generic-build-combined-method, cl--generic-cache-miss):
+       Adapt to new method-table.
+       (cl--generic-no-next-method-function): Add `method' argument.
+       (cl-generic-call-method): Adapt to new method representation.
+       (cl--generic-cnm-sample, cl--generic-nnm-sample): Adjust.
+       (cl-find-method, cl-method-qualifiers): New functions.
+       (cl--generic-method-info): Adapt to new method representation.
+       Return a string for the qualifiers.
+       (cl--generic-describe):
+       * emacs-lisp/eieio-opt.el (eieio-help-class): Adjust accordingly.
+       (eieio-all-generic-functions, eieio-method-documentation):
+       Adjust to new method representation.
+
+       * emacs-lisp/eieio-compat.el (eieio--defmethod): Use cl-find-method.
+
+2015-01-26  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/cl-generic.el: Add a method-combination hook.
+       (cl-generic-method-combination-function): New var.
+       (cl--generic-lambda): Remove `with-cnm' arg.
+       (cl-defmethod): Change accordingly.
+       (cl-generic-define-method): Don't check qualifiers validity.
+       Preserve all qualifiers in `method-table'.
+       (cl-generic-call-method): New function.
+       (cl--generic-nest): Remove (morph into cl-generic-call-method).
+       (cl--generic-build-combined-method): Adjust to new format of 
method-table
+       and use cl-generic-method-combination-function.
+       (cl--generic-standard-method-combination): New function, extracted from
+       cl--generic-build-combined-method.
+       (cl--generic-cnm-sample): Adjust to new format of method-table.
+
+       * emacs-lisp/eieio-compat.el (eieio--defmethod): Use () qualifiers
+       instead of :primary.
+
+       * emacs-lisp/eieio-datadebug.el (eieio-debug-methodinvoke):
+       Remove obsolete function.
+
+2015-01-26  Lars Ingebrigtsen  <address@hidden>
+
+       * net/shr.el (shr-make-table-1): Fix colspan typo.
+       (shr-make-table-1): Add comments.
+       (shr-make-table-1): Make colspan display more sensibly.
+
+       * net/eww.el (eww-add-bookmark): Fix prompt and clean up the code
+       slightly.
+
+2015-01-25  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/cl-generic.el (cl--generic-no-next-method-function): New 
fun.
+       (cl--generic-build-combined-method, cl--generic-nnm-sample): Use it
+       (bug#19672).
+       (cl--generic-typeof-types): Add support for `sequence'.
+       (cl-defmethod): Add non-keywords in the qualifiers.
+
+2015-01-25  Dmitry Gutov  <address@hidden>
+
+       * emacs-lisp/find-func.el (find-function-regexp): Don't match
+       `defgroup' (regression from the previous change here).
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/ldap.el (ldap-search-internal): Mention binddn in invalid
+       credentials error message.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/ldap.el (ldap-password-read): Validate password before
+       caching it.
+       (ldap-search-internal): Handle ldapsearch error conditions.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/ldap.el (ldap-password-read): Handle password-cache being nil.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/eudc.el (eudc-expand-inline): Always restore former server
+       and protocol.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/eudcb-ldap.el: Don't nag the user in case a default base is
+       provided by the LDAP system configuration file.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/eudc.el (eudc-format-query): Preserve the
+       eudc-inline-query-format ordering of attributes in the returned list.
+       * net/eudcb-ldap.el (eudc-ldap-format-query-as-rfc1558):
+       Append the LDAP wildcard character to the last attribute value.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/eudcb-ldap.el (eudc-ldap-cleanup-record-simple):
+       Downcase field names of LDAP results.
+       (eudc-ldap-cleanup-record-filtering-addresses): Likewise.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/ldap.el (ldap-ldapsearch-password-prompt): New defcustom.
+       (ldap-search-internal): Send password to ldapsearch through a pipe
+       instead of via the command line.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/ldap.el: Require password-cache.
+       (ldap-password-read): New function.
+       (ldap-search-internal): Call ldap-password-read when it is
+       configured to be called.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/eudc-vars.el (eudc-expansion-overwrites-query):
+       Change default to nil.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/eudc.el (eudc-expand-inline): Ignore text properties of
+       string-to-expand.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/eudc-vars.el (eudc-inline-expansion-format): Default to a
+       format that includes first name and surname.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/eudc-vars.el (eudc-inline-query-format): Change default to
+       query email and first name instead of surname.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/ldap.el (ldap-search-internal): Support new-style LDAP URIs.
+
+2015-01-23  Thomas Fitzsimmons  <address@hidden>
+
+       * net/eudc-vars.el (eudc-server): Adjust docstring to mention
+       eudc-server-hotlist.
+       (eudc-server-hotlist): Move from eudc.el and make defcustom.
+       * net/eudc.el (eudc-server-hotlist): Move to eudc-vars.el.
+       (eudc-set-server): Allow setting protocol to nil.
+       (eudc-expand-inline): Support hotlist-only expansions when server
+       is not set.
+
+2015-01-23  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/cl-generic.el (cl-no-primary-method): New fun and error.
+       (cl--generic-build-combined-method): Use it.
+
+2015-01-22  Paul Eggert  <address@hidden>
+
+       Don't downcase system diagnostics' first letters
+       * emacs-lisp/bytecomp.el (byte-compile-file):
+       * ffap.el (find-file-at-point):
+       * files.el (insert-file-1):
+       * net/ange-ftp.el (ange-ftp-barf-if-not-directory)
+       (ange-ftp-copy-file-internal):
+       * progmodes/etags.el (visit-tags-table):
+       Keep diagnostics consistent with system's.
+       * ffap.el (ffap-machine-p):
+       Ignore case while comparing diagnostics.
+
+2015-01-22  Stefan Monnier  <address@hidden>
+
+       * help.el (help-make-usage): Don't turn a "_" arg into an empty-string
+       arg (bug#19645).
+       * emacs-lisp/cl-generic.el (cl--generic-lambda): Don't confuse a string
+       body with a docstring.
+
+2015-01-22  Dmitry Gutov  <address@hidden>
+
+       * progmodes/xref.el (xref-location-marker, xref-location-group):
+       Use `cl-defgeneric' and `cl-defmethod' instead of the EIEIO
+       counterparts.
+
+       * progmodes/etags.el (xref-location-marker): Same.
+
+       * progmodes/xref.el (xref--current): Rename from `xref--selected'.
+       (xref--inhibit-mark-current): Rename from
+       `xref--inhibit-mark-selected'.  Update the usages.
+       (xref-quit): Reword the docstring.  Kill buffers after quitting
+       windows instead of before.
+       (xref--insert-xrefs): Tweak help-echo.
+       (xref--read-identifier-history, xref--read-pattern-history):
+       New variables.
+       (xref--read-identifier, xref-find-apropos): Use them.
+
+2015-01-21  Ulrich Müller  <address@hidden>
+
+       * play/gamegrid.el (gamegrid-add-score-with-update-game-score):
+       Allow the 'update-game-score' helper program to run suid or sgid.
+
+2015-01-21  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio.el: Use cl-defmethod.
+       (defclass): Generate cl-defmethod calls; use setf methods for :accessor.
+       (eieio-object-name-string): Declare as obsolete.
+
+       * emacs-lisp/eieio-opt.el: Adapt to cl-generic.
+       (eieio--specializers-apply-to-class-p): New function.
+       (eieio-all-generic-functions): Use it.
+       (eieio-method-documentation): Use it as well as cl--generic-method-info.
+       Change format of return value.
+       (eieio-help-class): Adapt accordingly.
+
+       * emacs-lisp/eieio-compat.el (eieio--defmethod): Avoid no-next-method
+       errors when there's a `before' but no `primary' (bug#19645).
+       (next-method-p): Return nil rather than signal an error.
+       (eieio-defgeneric): Remove bogus (fboundp 'method).
+
+       * emacs-lisp/eieio-speedbar.el:
+       * emacs-lisp/eieio-datadebug.el:
+       * emacs-lisp/eieio-custom.el:
+       * emacs-lisp/eieio-base.el: Use cl-defmethod.
+
+       * emacs-lisp/cl-generic.el (cl-defgeneric): Add support for `declare'.
+       (cl--generic-setf-rewrite): Setup the setf expander right away.
+       (cl-defmethod): Make sure the setf expander is setup before we expand
+       the body.
+       (cl-defmethod): Silence byte-compiler warnings.
+       (cl-generic-define-method): Shuffle code to change return value.
+       (cl--generic-method-info): New function, extracted from
+       cl--generic-describe.
+       (cl--generic-describe): Use it.
+
+2015-01-21  Dmitry Gutov  <address@hidden>
+
+       * progmodes/xref.el (xref--xref-buffer-mode-map): Define before
+       the major mode.  Remap `quit-window' to `xref-quit'.
+       (xref--xref-buffer-mode): Inherit from special-mode.
+
+       xref: Keep track of temporary buffers  (bug#19466).
+       * progmodes/xref.el (xref--temporary-buffers, xref--selected)
+       (xref--inhibit-mark-selected): New variables.
+       (xref--mark-selected): New function.
+       (xref--show-location): Maybe add the buffer to
+       `xref--temporary-buffers', add `xref--mark-selected' to
+       `buffer-list-update-hook' there.
+       (xref--window): Add docstring.
+       (xref-quit): Rename from `xref--quit'.  Update both references.
+       Add KILL argument.  When it's non-nil, kill the temporary buffers
+       that haven't been selected by the user.
+       (xref--show-xref-buffer): Change the second argument to alist,
+       extract the values for `xref--window' and
+       `xref--temporary-buffers' from it.  Add `xref--mark-selected' to
+       `buffer-list-update-hook' to each buffer in the list.
+       (xref--show-xrefs): Move the logic of calling `xref-find-function'
+       here.  Save the difference between buffer lists before and after
+       it's called as "temporary buffers", and `pass it to
+       `xref-show-xrefs-function'.
+       (xref--find-definitions, xref-find-references)
+       (xref-find-apropos): Update accordingly.
+
+2015-01-20  Artur Malabarba  <address@hidden>
+
+       * emacs-lisp/package.el (package-dir-info): Fix `while' logic.
+
+2015-01-20  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio-generic.el: Remove.
+       (defgeneric, defmethod): Move to eieio-compat.el.  Mark obsolete.
+       * emacs-lisp/eieio-compat.el: New file.
+       * emacs-lisp/eieio.el: Don't require eieio-generic any more.
+       * emacs-lisp/eieio-core.el (eieio--slot-originating-class-p):
+       Remove unused function.
+       (eieio-defclass): Move to eieio-compat.el.
+       * emacs-lisp/macroexp.el (macroexp-macroexpand): New function.
+       (macroexp--expand-all): Use it.
+       * emacs-lisp/bytecomp.el (byte-compile-recurse-toplevel): Here too.
+
+2015-01-20  Michal Nazarewicz  <address@hidden>
+
+       * emacs-lisp/eldoc.el (eldoc-documentation-function): Describe how
+       major modes should use `add-function' to alter value of the variable.
+       * hexl.el (hexl-mode):
+       * ielm.el (inferior-emacs-lisp-mode):
+       * progmodes/cfengine.el (cfengine3-mode):
+       * progmodes/elisp-mode (emacs-lisp-mode):
+       * progmodes/octave.el (octave-mode):
+       * progmodes/python.el (python-mode):
+       * simple.el (read--expression): Set `eldoc-documentation-function'
+       using `add-function' so the default value is always used.
+
+       * descr-text.el (describe-char-eldoc): New function returning
+       basic Unicode codepoint information (e.g. name) about character
+       at point.  It is meant to be used as a default value of the
+       `eldoc-documentation-function' variable.
+       (describe-char-eldoc--format, describe-char-eldoc--truncate):
+       New helper functions for `describe-char-eldoc' function.
+
+2015-01-20  Michal Nazarewicz  <address@hidden>
+
+       * textmodes/paragraphs.el (sentence-end-base): Include an
+       ellipsis (…) and interrobang (‽) characters as end of a sentence,
+       and a closing single quote (’) as an end of a quote.
+
+2015-01-20  Michal Nazarewicz  <address@hidden>
+
+       * textmodes/tildify.el (tildify-double-space-undos): A new
+       variable specifying whether pressing space in `tildify-mode' after
+       a space has been replaced with hard space undos the substitution.
+       (tildify-space): Add code branch for handling `tildify-doule-space'.
+
+       * textmodes/tildify.el (tildify-space): A new function
+       which can be used as a `post-self-insert-hook' to automatically
+       convert spaces into hard spaces.
+       (tildify-space-pattern): A new variable specifying pattern where
+       `tildify-space' should take effect.
+       (tildify-space-predicates): A new variable specifying list of
+       predicate functions that all must return non-nil for
+       `tildify-space' to take effect.
+       (tildify-space-region-predicate): A new functions meant to be
+       used as a predicate in `tildify-space-predicates' list.
+       (tildify-mode): A new minor mode enabling `tildify-space' as a
+       `post-self-insert-hook'
+
+2015-01-20  Daniel Colascione  <address@hidden>
+
+       * vc/vc-dir.el (vc-dir): Default to repository root, not
+       default-directory.
+
+2015-01-20  Dmitry Gutov  <address@hidden>
+
+       * progmodes/etags.el (xref-etags-location): New class.
+       (xref-make-etags-location): New function.
+       (etags--xref-find-definitions): Use it.
+       (xref-location-marker): New method implementation.
+
+       * progmodes/xref.el: Mention that xref-location is an EIEIO class.
+       (xref--insert-xrefs): Expand help-echo string.
+
+2015-01-19  Dmitry Gutov  <address@hidden>
+
+       * ido.el: Update Customization instructions.
+
+2015-01-19  Jonas Bernoulli  <address@hidden>
+
+       Define Ido keymaps once (bug#17000).
+       * ido.el (ido-common-completion-map)
+       (ido-file-dir-completion-map)
+       (ido-file-completion-map, ido-buffer-completion-map): Set up key
+       bindings when each variable is defined.
+       (ido-completion-map): Move definition.
+       (ido-init-completion-maps): Noop.
+       (ido-common-initialization): Don't call it.
+       (ido-setup-completion-map): Improve doc-string, cleanup.
+
+2015-01-19  Ivan Shmakov  <address@hidden>
+
+       * cus-dep.el (custom-make-dependencies): Ensure that
+       default-directory is interpreted as a directory (see bug#19140.)
+
+2015-01-19  Dmitry Gutov  <address@hidden>
+
+       * progmodes/xref.el (xref--display-position):
+       Set `other-window-scroll-buffer'.
+       (xref-goto-xref): Use `user-error'.
+
+2015-01-19  Dmitry Gutov  <address@hidden>
+
+       * progmodes/xref.el (xref--display-history): New variable.
+       (xref--window-configuration): Remove.
+       (xref--save-to-history): New function.
+       (xref--display-position): Use it.  Add new argument.
+       (xref--restore-window-configuration): Remove.
+       (xref--show-location, xref-show-location-at-point):
+       Update accordingly.
+       (xref--xref-buffer-mode): Don't use `pre-command-hook'.
+       (xref--quit): New command.
+       (xref-goto-xref): Use it.
+       (xref--xref-buffer-mode-map): Bind `q' to it.
+
+2015-01-18  Dmitry Gutov  <address@hidden>
+
+       * progmodes/xref.el (xref-goto-xref): Perform the jump even inside
+       indentation or at eol.
+
+2015-01-18  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio-core.el: Add `subclass' specializer for cl-generic.
+       (eieio--generic-subclass-tagcode, eieio--generic-subclass-tag-types):
+       New functions.
+       (cl-generic-tagcode-function, cl-generic-tag-types-function): Use them.
+
+       * emacs-lisp/eieio.el (defclass): Add obsolescence warning for the
+       `newname' argument.
+
+       * emacs-lisp/cl-generic.el (cl-generic-define-method): Correctly handle
+       introduction of a new dispatch argument.
+       (cl--generic-cache-miss): Handle dispatch on an argument which was not
+       considered as dispatchable for this method.
+       (cl-defmethod): Warn when adding a method to an obsolete generic 
function.
+       (cl--generic-lambda): Make sure it works if cl-lib is not yet loaded.
+
+       * emacs-lisp/eieio-generic.el (eieio--defgeneric-init-form): Use 
autoloadp.
+
+2015-01-18  Artur Malabarba  <address@hidden>
+
+       * emacs-lisp/package.el (package--append-to-alist): Rename from
+       `package--add-to-alist'
+       Updated docstring due to new name.
+
+2015-01-18  Leo Liu  <address@hidden>
+
+       * emacs-lisp/cl-extra.el (cl-subseq): Use seq-subseq and fix
+       multiple evaluation.  (Bug#19519)
+
+       * emacs-lisp/seq.el (seq-subseq): Throw bad bounding indices
+       error.  (Bug#19434)
+
+2015-01-18  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio-core.el: Add `subclass' specializer for cl-generic.
+       (eieio--generic-subclass-tagcode, eieio--generic-subclass-tag-types):
+       New functions.
+       (cl-generic-tagcode-function, cl-generic-tag-types-function): Use them.
+
+       * emacs-lisp/cl-macs.el (cl-defstruct): Minor optimization when include
+       or print is nil.
+       (cl-struct-type-p): New function.
+
+       * emacs-lisp/cl-generic.el: Add support for cl-next-method-p.
+       (cl-defmethod): Add edebug spec.
+       (cl--generic-build-combined-method): Fix call to
+       cl-no-applicable-method.
+       (cl--generic-nnm-sample, cl--generic-cnm-sample): New constant.
+       (cl--generic-isnot-nnm-p): New function.
+       (cl--generic-lambda): Use it to add support for cl-next-method-p.
+       (cl-no-next-method, cl-no-applicable-method): Simplify arg list.
+       (cl-next-method-p): New function.
+
+2015-01-17  Ulrich Müller  <address@hidden>
+
+       * version.el (emacs-repository-get-version): Update docstring.
+
+2015-01-17  Ivan Shmakov  <address@hidden>
+
+       * url/url-cookie.el (url-cookie-write-file): Let-bind print-length
+       and print-level to nil to avoid writing a garbled list.  (Bug#16805)
+
+       * files.el (find-file-other-window, find-file-other-frame):
+       Use mapc instead of mapcar.  (Bug#18175)
+
+       * files.el (dir-locals-collect-variables): Use default-directory
+       in place of the file name while working on non-file buffers, just
+       like hack-dir-local-variables already does.  (Bug#19140)
+
+       * textmodes/enriched.el (enriched-encode):
+       Use inhibit-point-motion-hooks in addition to inhibit-read-only.
+       (Bug#18246)
+
+       * desktop.el (desktop-read): Do not call desktop-clear when no
+       desktop file is found.  (Bug#18371)
+
+       * misearch.el (multi-isearch-unload-function): New function.
+       (misearch-unload-function): New alias.  (Bug#19566)
+
+2015-01-17  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio-core.el (eieio--class-constructor): Rename from
+       class-constructor, and make it an alias for `identity'.
+       Update all callers.
+
+       * emacs-lisp/eieio.el (eieio-constructor): Handle obsolete object name
+       argument here (bug#19620)...
+       (defclass): ...instead of in the constructor here.
+
+2015-01-16  Jorgen Schaefer  <address@hidden>
+
+       * emacs-lisp/package.el (package-archive-priorities):
+       Specify correct type.
+
+2015-01-17  Ulrich Müller  <address@hidden>
+
+       * version.el (emacs-bzr-version-dirstate, emacs-bzr-version-bzr):
+       Remove.
+       (emacs-repository-get-version): Discard the Bazaar case.
+       * vc/vc-bzr.el (vc-bzr-version-dirstate): Rename from
+       emacs-bzr-version-dirstate and move from version.el to here.
+       (vc-bzr-working-revision): Use it.
+
+2015-01-17  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio-generic.el (call-next-method): Don't bother checking
+       eieio--scoped-class any more.
+
+       * emacs-lisp/eieio-core.el (eieio--scoped-class-stack): Remove var.
+       (eieio--scoped-class): Remove function.
+       (eieio--with-scoped-class): Remove macro.  Replace uses with `progn'.
+       (eieio--slot-name-index): Don't check the :protection anymore.
+       (eieio-initializing-object): Remove var.
+       (eieio-set-defaults): Don't let-bind eieio-initializing-object.
+
+2015-01-17  Stefan Monnier  <address@hidden>
+
+       Improve handling of doc-strings and describe-function for cl-generic.
+
+       * help-mode.el (help-function-def): Add optional arg `type'.
+
+       * help-fns.el (find-lisp-object-file-name): Accept any `type' as long
+       as it's a symbol.
+       (help-fns-short-filename): New function.
+       (describe-function-1): Use it.  Use autoload-do-load.
+
+       * emacs-lisp/find-func.el: Use lexical-binding.
+       (find-function-regexp): Don't rule out `defgeneric'.
+       (find-function-regexp-alist): Document new possibility of including
+       a function instead of a regexp.
+       (find-function-search-for-symbol): Implement that new possibility.
+       (find-function-library): Don't assume that `function' is a symbol.
+       (find-function-do-it): Remove unused var `orig-buf'.
+
+       * emacs-lisp/eieio-generic.el (eieio--defalias): Move from eieio-core.
+       (eieio--defgeneric-init-form): Don't throw away a previous docstring.
+       (eieio--method-optimize-primary): Don't mess with the docstring.
+       (defgeneric): Keep the `args' in the docstring.
+       (defmethod): Don't use the method's docstring for the generic
+       function's docstring.
+
+       * emacs-lisp/eieio-core.el (eieio--defalias): Move to eieio-generic.el.
+       (eieio-defclass-autoload): Don't record the superclasses any more.
+       (eieio-defclass-internal): Reuse the old class object if it was just an
+       autoload stub.
+       (eieio--class-precedence-list): Load the class if it's autoloaded.
+
+       * emacs-lisp/cl-generic.el (cl-generic-ensure-function): It's OK to
+       override an autoload.
+       (cl-generic-current-method-specializers): Replace dyn-bind variable
+       with a lexically-scoped macro.
+       (cl--generic-lambda): Update accordingly.
+       (cl-generic-define-method): Record manually in the load-history with
+       type `cl-defmethod'.
+       (cl--generic-get-dispatcher): Minor optimization.
+       (cl--generic-search-method): New function.
+       (find-function-regexp-alist): Add entry for `cl-defmethod' type.
+       (cl--generic-search-method): Add hyperlinks for methods.  Merge the
+       specializers and the function's arguments.
+
+2015-01-16  Artur Malabarba  <address@hidden>
+
+       * emacs-lisp/package.el (package--read-pkg-desc):
+       New function. Read a `define-package' form in current buffer.
+       Return the pkg-desc, with desc-kind set to KIND.
+       (package-dir-info): New function. Find package information for a
+       directory. The return result is a `package-desc'.
+       (package-install-from-buffer): Install packages from dired buffer.
+       (package-install-file): Install packages from directory.
+       (package-desc-suffix)
+       (package-install-from-archive)
+       * emacs-lisp/package-x.el (package-upload-buffer-internal):
+       Ensure all remaining instances of `package-desc-kind' handle the 'dir
+       value.
+
+2015-01-16  Jorgen Schaefer  <address@hidden>
+
+       * emacs-lisp/package.el: Provide repository priorities.
+       (package-archive-priorities): New variable.
+       (package--add-to-alist): New function.
+       (package--add-to-archive-contents): Use it.
+       (package-menu--find-upgrades): Use it as well. Small clean up to
+       make the use of the package name here explicit.
+       (package-archive-priority): New function.
+       (package-desc-priority-version): New function.
+
+2015-01-16  Daniel Colascione  <address@hidden>
+
+       * cus-start.el (all): Make `ring-bell-function' customizable.
+
+2015-01-16  Dmitry Gutov  <address@hidden>
+
+       * vc/vc-svn.el (vc-svn-dir-status-files): Pass t as
+       vc-svn-after-dir-status's second argument.  (Bug#19429)
+
+2015-01-16  Samer Masterson  <address@hidden>  (tiny change)
+
+       * pcomplete.el (pcomplete-parse-arguments): Parse arguments
+       regardless of pcomplete-cycle-completions's value.  (Bug#18950)
+
+2015-01-16  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * dom.el (dom-strings): New function.
+
+       * files.el (directory-files-recursively): Don't use the word
+       "path" for a file name.
+
+2015-01-15  Wolfgang Jenkner  <address@hidden>
+
+       * calc/calc-units.el (math-units-in-expr-p)
+       (math-single-units-in-expr-p, math-find-compatible-unit-rec)
+       (math-extract-units): Handle the `neg' operator.  (Bug#19582)
+
+2015-01-15  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/cl-macs.el (cl--labels-magic): New constant.
+       (cl--labels-convert): Use it to ask the macro what is its replacement
+       in the #'f case.
+
+       * emacs-lisp/cl-generic.el (cl--generic-build-combined-method):
+       Return the value of the primary rather than the after method.
+
+       * emacs-lisp/eieio-core.el: Provide support for cl-generic.
+       (eieio--generic-tagcode): New function.
+       (cl-generic-tagcode-function): Use it.
+       (eieio--generic-tag-types): New function.
+       (cl-generic-tag-types-function): Use it.
+       (eieio-object-p): Tighten up the test.
+
+       * emacs-lisp/cl-generic.el (cl-generic-define-method): Fix paren typo.
+
+2015-01-14  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/cl-generic.el: New file.
+
+       * emacs-lisp/cl-macs.el (cl-flet): Allow (FUN EXP) forms.
+       (cl-load-time-value, cl-labels): Use closures rather than
+       backquoted lambdas.
+       (cl-macrolet): Use `eval' to create the function value, and support CL
+       style arguments in for the defined macros.
+
+2015-01-14  Stefan Monnier  <address@hidden>
+
+       * net/eww.el: Use lexical-binding.
+       (eww-links-at-point): Remove unused arg.
+       (eww-mode-map): Inherit from special-mode-map.
+       (eww-mode): Derive from special-mode.  Don't use `setq' on a hook.
+
+2015-01-13  Alan Mackenzie  <address@hidden>
+
+       Allow compilation during loading of CC Mode-derived modes (bug#19206).
+       * progmodes/cc-bytecomp.el (cc-bytecomp-compiling-or-loading):
+       New function which walks the stack to discover whether we're compiling
+       or loading.
+       (cc-bytecomp-is-compiling): Reformulate, and move towards beginning.
+       (cc-bytecomp-is-loading): New defsubst.
+       (cc-bytecomp-setup-environment, cc-bytecomp-restore-environment):
+       Use the above defsubsts.
+       (cc-require-when-compile, cc-bytecomp-defvar)
+       (cc-bytecomp-defun): Simplify conditionals.
+       * progmodes/cc-defs.el (cc-bytecomp-compiling-or-loading):
+       "Borrow" this function from cc-bytecomp.el.
+       (c-get-current-file): Reformulate using the above.
+       (c-lang-defconst): Prevent duplicate entries of file names in a
+       symbol's 'source property.
+       (c-lang-const): Use cc-bytecomp-is-compiling.
+       * progmodes/cc-langs.el (c-make-init-lang-vars-fun):
+       Use cc-bytecomp-is-compiling.
+
+2015-01-13  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio-core.el (eieio-defclass): Fix call to `defclass'
+       (bug#19552).
+
+2015-01-13  Dmitry Gutov  <address@hidden>
+
+       * menu-bar.el (menu-bar-goto-menu): Before calling
+       `xref-marker-stack-empty-p', first check that `xref' is loaded.
+       (Bug#19554)
+
+2015-01-12  Martin Rudalics  <address@hidden>
+
+       * progmodes/xref.el (xref-marker-stack-empty-p): Add autoload
+       cookie (Bug#19554).
+
+       * frame.el (frame-notice-user-settings): Remove code dealing with
+       frame-initial-frame-tool-bar-height.  Turn off `tool-bar-mode'
+       only if `window-system-frame-alist' or `default-frame-alist' ask
+       for it.
+       (make-frame): Update frame-adjust-size-history if needed.
+
+2015-01-12  Paul Eggert  <address@hidden>
+
+       Have 'make' output better GEN names
+       * Makefile.in (PHONY_EXTRAS): New macro.
+       (.PHONY): Depend on it, and on $(lisp)/loaddefs.el, so that the
+       relevant files' time stamps are ignored.
+       (custom-deps, $(lisp)/cus-load.el, finder-data)
+       ($(lisp)/finder-inf.el): Use PHONY_EXTRAS.
+       (custom-deps, $(lisp)/cus-load.el, finder-data)
+       ($(lisp)/finder-inf.el, autoloads, $(lisp)/loaddefs.el)
+       ($(lisp)/subdirs.el, update-subdirs):
+       Output more-accurate destination names with GEN.
+
+       Say "ELC foo.elc" instead of "GEN foo.elc"
+       * Makefile.in (AM_V_ELC, am__v_ELC_, am__v_ELC_0, am__v_ELC_1):
+       New macros.
+       ($(THEFILE)c, .el.elc): Use them.
+
+2015-01-11  Michael Albinus  <address@hidden>
+
+       * files.el (directory-files-recursively): Do not include
+       superfluous remote file names.
+
+2015-01-11  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww): Interpret anything that looks like a protocol
+       designator as a full URL.
+
+2015-01-10  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/shr.el (shr-urlify): Don't bother the user about
+       invalidly-encoded display strings.
+
+2015-01-10  Ivan Shmakov  <address@hidden>
+
+       * net/shr.el (shr-urlify): Decode URLs before using them as titles
+       (bug#19555).
+
+2015-01-10  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww): Always interpret URLs that start with https?:
+       as plain URLs, even if they have spaces in them (bug#19556).
+       (eww): Also interpret things like "en.wikipedia.org/wiki/Free
+       software" as an URL.
+       (eww): Don't interpret "org/foo" as an URL.
+       (eww): Clear the title when loading so that we don't display
+       misleading information.
+
+2015-01-10  Daniel Colascione  <address@hidden>
+
+       * vc/vc-hooks.el (vc-prefix-map): Bind vc-delete-file to C-x v x,
+       by analogy with dired.
+
+2015-01-09  Daniel Colascione  <address@hidden>
+
+       * progmodes/js.el (js--function-heading-1-re)
+       (js--function-prologue-beginning): Parse ES6 generator function
+       declarations.  (That is, "function* name()").
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio.el (defclass): Move from eieio-defclass all the code
+       that creates functions, and most of the sanity checks.
+       Mark as obsolete the <class>-child-p function.
+       * emacs-lisp/eieio-core.el (eieio--define-field-accessors): Remove.
+       (eieio--class, eieio--object): Use cl-defstruct.
+       (eieio--object-num-slots): Define manually.
+       (eieio-defclass-autoload): Use eieio--class-make.
+       (eieio-defclass-internal): Rename from eieio-defclass.  Move all the
+       `(lambda...) definitions and most of the sanity checks to `defclass'.
+       Mark as obsolete the <class>-list-p function, the <class> variable and
+       the <initarg> variables.  Use pcase-dolist.
+       (eieio-defclass): New compatibility function.
+       * emacs-lisp/eieio-opt.el (eieio-build-class-alist)
+       (eieio-class-speedbar): Don't use eieio-default-superclass var.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio-generic.el: New file.
+       * emacs-lisp/eieio-core.el: Move all generic function code to
+       eieio-generic.el.
+       (eieio--defmethod): Declare.
+
+       * emacs-lisp/eieio.el: Require eieio-generic.  Move all generic
+       function code to eieio-generic.el.
+       * emacs-lisp/eieio-opt.el (eieio-help-generic): Move to
+       eieio-generic.el.
+       * emacs-lisp/eieio-datadebug.el (eieio-debug-methodinvoke): Update call
+       to eieio--generic-call.
+       * emacs-lisp/eieio-base.el (eieio-instance-inheritor): Don't use
+       <class>-child type.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/chart.el (chart-add-sequence, chart-bar-quickie):
+       Don't use <class> as a variable.
+
+       * emacs-lisp/eieio.el (same-class-p): Accept class object as well.
+       (call-next-method): Simplify.
+       (clone): Obey eieio-backward-compatibility.
+
+       * emacs-lisp/eieio-opt.el (eieio-read-generic-p): Remove.
+       (eieio-read-generic): Use `generic-p' instead.
+
+       * emacs-lisp/eieio-core.el (eieio-backward-compatibility): New var.
+       (eieio-defclass-autoload): Obey it.
+       (eieio--class-object): Improve error behavior.
+       (eieio-class-children-fast, same-class-fast-p): Remove.  Inline at
+       every use site.
+       (eieio--defgeneric-form-primary-only): Rename from
+       eieio-defgeneric-form-primary-only; update all callers.
+       (eieio--defgeneric-form-primary-only-one): Rename from
+       eieio-defgeneric-form-primary-only-one; update all callers.
+       (eieio-defgeneric-reset-generic-form)
+       (eieio-defgeneric-reset-generic-form-primary-only)
+       (eieio-defgeneric-reset-generic-form-primary-only-one): Remove.
+       (eieio--method-optimize-primary): New function to replace them.
+       (eieio--defmethod, eieio-defmethod): Use it.
+       (eieio--perform-slot-validation): Rename from
+       eieio-perform-slot-validation; update all callers.
+       (eieio--validate-slot-value): Rename from eieio-validate-slot-value.
+       Change `class' to be a class object.  Update all callers.
+       (eieio--validate-class-slot-value): Rename from
+       eieio-validate-class-slot-value.  Change `class' to be a class object.
+       Update all callers.
+       (eieio-oset-default): Accept class object as well.
+       (eieio--generic-call-primary-only): Rename from
+       eieio-generic-call-primary-only.  Update all callers.
+
+       * emacs-lisp/eieio-base.el (eieio-persistent-validate/fix-slot-value):
+       Improve error messages.
+       (eieio-persistent-slot-type-is-class-p): Handle `list-of' types, as
+       well as user-defined types.  Emit errors for legacy types like
+       <class>-child and <class>-list, if not eieio-backward-compatibility.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio.el (eieio-class-parents): Accept class objects.
+       (eieio--class-slot-initarg): Rename from class-slot-initarg.
+       Change `class' arg to be a class object.  Update all callers.
+       (call-next-method): Adjust to new return value of `eieio-generic-form'.
+       (eieio-default-superclass): Set var to the class object.
+       (eieio-edebug-prin1-to-string): Fix recursive call for lists.
+       Change print behavior to affect class objects rather than
+       class symbols.
+
+       * emacs-lisp/eieio-core.el (eieio-class-object): New function.
+       (eieio-class-parents-fast): Remove macro.
+       (eieio--class-option-assoc): Rename from class-option-assoc.
+       Update all callers.
+       (eieio--class-option): Rename from class-option.  Change `class' arg to
+       be a class object.  Update all callers.
+       (eieio--class-method-invocation-order): Rename from
+       class-method-invocation-order.  Change `class' arg to be a class
+       object.  Update all callers.
+       (eieio-defclass-autoload, eieio-defclass): Set the `parent' field to
+       a list of class objects rather than names.
+       (eieio-defclass): Remove redundant quotes.  Use `eieio-oref-default'
+       for accessors to class allocated slots.
+       (eieio--perform-slot-validation-for-default): Rename from
+       eieio-perform-slot-validation-for-default.  Update all callers.
+       (eieio--add-new-slot): Rename from eieio-add-new-slot.
+       Update all callers.  Use push.
+       (eieio-copy-parents-into-subclass): Adjust to new content of
+       `parent' field.  Use dolist.
+       (eieio-oref): Remove support for providing a class rather than
+       an object.
+       (eieio-oref-default): Prefer class objects over class names.
+       (eieio--slot-originating-class-p): Rename from
+       eieio-slot-originating-class-p.  Update all callers.  Use `or'.
+       (eieio--slot-name-index): Turn check into assertion.
+       (eieio--class-slot-name-index): Rename from
+       eieio-class-slot-name-index.  Change `class' arg to be a class object.
+       Update all callers.
+       (eieio-attribute-to-initarg): Move to eieio-test-persist.el.
+       (eieio--c3-candidate): Rename from eieio-c3-candidate.
+       Update all callers.
+       (eieio--c3-merge-lists): Rename from eieio-c3-merge-lists.
+       Update all callers.
+       (eieio--class-precedence-c3): Rename from eieio-class-precedence-c3.
+       Update all callers.
+       (eieio--class-precedence-dfs): Rename from eieio-class-precedence-dfs.
+       Update all callers.
+       (eieio--class-precedence-bfs): Rename from eieio-class-precedence-bfs.
+       Update all callers.  Adjust to new `parent' content.
+       (eieio--class-precedence-list): Rename from -class-precedence-list.
+       Update all callers.
+       (eieio-generic-call): Use autoloadp and autoload-do-load.
+       Slight simplification.
+       (eieio-generic-call, eieio-generic-call-primary-only): Adjust to new
+       return value of `eieio-generic-form'.
+       (eieiomt-add): Index the hashtable with class objects rather than
+       class names.
+       (eieio-generic-form): Accept class objects as well.
+
+       * emacs-lisp/eieio-base.el (eieio-persistent-convert-list-to-object):
+       Adjust to new convention for eieio-persistent-validate/fix-slot-value.
+       (eieio-persistent-validate/fix-slot-value):
+       Change `class' arg to be a class object.  Update all callers.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio.el (child-of-class-p): Make it accept class objects
+       additionally to class names.
+
+       * emacs-lisp/eieio-core.el (eieio--with-scoped-class): Use let-binding.
+       (object): Remove first (constant) slot; rename second to `class-tag'.
+       (eieio--object-class-object, eieio--object-class-name): New funs
+       to replace eieio--object-class.
+       (eieio--class-object, eieio--class-p): New functions.
+       (same-class-fast-p): Make it a defsubst, change its implementation
+       to check the class objects rather than their names.
+       (eieio-object-p): Rewrite.
+       (eieio-defclass): Adjust the object initialization according to the new
+       object layout.
+       (eieio--scoped-class): Declare it returns a class object (not a class
+       name any more).  Adjust calls accordingly (along with calls to
+       eieio--with-scoped-class).
+       (eieio--slot-name-index): Rename from eieio-slot-name-index and change
+       its class arg to be a class object.  Adjust callers accordingly.
+       (eieio-slot-originating-class-p): Make its start-class arg a class
+       object.  Adjust all callers.
+       (eieio--initarg-to-attribute): Rename from eieio-initarg-to-attribute.
+       Make its `class' arg a class object.  Adjust all callers.
+
+       * emacs-lisp/eieio-base.el (eieio-persistent-validate/fix-slot-value):
+       Use eieio--slot-name-index rather than eieio-slot-name-index.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio.el (make-instance): Simplify by not adding an object
+       name argument.
+       (eieio-object-name): Use eieio-object-name-string.
+       (eieio--object-names): New const.
+       (eieio-object-name-string, eieio-object-set-name-string): Re-implement
+       using a hashtable rather than a built-in slot.
+       (eieio-constructor): Rename from `constructor'.  Remove `newname' arg.
+       (clone): Don't mess with the object's "name".
+
+       * emacs-lisp/eieio-custom.el (eieio-widget-test): Remove dummy arg.
+       (eieio-object-value-get): Use eieio-object-set-name-string.
+
+       * emacs-lisp/eieio-core.el (eieio--defalias): Follow aliases.
+       (eieio--object): Remove `name' field.
+       (eieio-defclass): Adjust to new convention where constructors don't
+       take an "object name" any more.
+       (eieio--defgeneric-init-form, eieio--defmethod): Follow aliases.
+       (eieio-validate-slot-value, eieio-oset-default)
+       (eieio-slot-name-index): Don't hardcode eieio--object-num-slots.
+       (eieio-generic-call-primary-only): Simplify.
+
+       * emacs-lisp/eieio-base.el (clone) <eieio-instance-inheritor>:
+       Use call-next-method.
+       (eieio-constructor): Rename from `constructor'.
+       (eieio-persistent-convert-list-to-object): Drop objname.
+       (eieio-persistent-validate/fix-slot-value): Don't hardcode
+       eieio--object-num-slots.
+       (eieio-named): Use a normal slot.
+       (slot-missing) <eieio-named>: Remove.
+       (eieio-object-name-string, eieio-object-set-name-string, clone)
+       <eieio-named>: New methods.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio-core.el (eieio--class-v): Rename from class-v.
+       (method-*): Add a "eieio--" prefix to those constants.
+
+       * emacs-lisp/eieio.el: Move edebug specs to the corresponding macro.
+
+       * emacs-lisp/eieio-speedbar.el: Use lexical-binding.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio.el (child-of-class-p): Fix case where `class' is
+       `eieio-default-superclass'.
+
+       * emacs-lisp/eieio-datadebug.el: Use lexical-binding.
+
+       * emacs-lisp/eieio-custom.el: Use lexical-binding.
+       (eieio-object-value-to-abstract): Simplify.
+
+       * emacs-lisp/eieio-opt.el (eieio-build-class-list): Use cl-mapcan.
+       (eieio-build-class-alist): Use dolist.
+       (eieio-all-generic-functions): Adjust to use of hashtables.
+
+       * emacs-lisp/eieio-core.el (class): Rename field symbol-obarray to
+       symbol-hashtable.  It contains a hashtable instead of an obarray.
+       (generic-p): Use symbol property `eieio-method-hashtable' instead of
+       `eieio-method-obarray'.
+       (generic-primary-only-p, generic-primary-only-one-p):
+       Slight optimization.
+       (eieio-defclass-autoload-map): Use a hashtable instead of an obarray.
+       (eieio-defclass-autoload, eieio-defclass): Adjust/simplify accordingly.
+       (eieio-class-un-autoload): Use autoload-do-load.
+       (eieio-defclass): Use dolist, cl-pushnew, cl-callf.
+       Use new cl-deftype-satisfies.  Adjust to use of hashtables.
+       Don't hardcode the value of eieio--object-num-slots.
+       (eieio-defgeneric-form-primary-only-one): Remove `doc-string' arg.
+       Use a closure rather than a backquoted lambda.
+       (eieio--defmethod): Adjust call accordingly.  Set doc-string via the
+       function-documentation property.
+       (eieio-slot-originating-class-p, eieio-slot-name-index)
+       (eieiomt--optimizing-hashtable, eieiomt-install, eieiomt-add)
+       (eieio-generic-form): Adjust to use of hashtables.
+       (eieiomt--sym-optimize): Rename from eieiomt-sym-optimize; take
+       additional class argument.
+       (eieio-generic-call-methodname): Remove, unused.
+
+       * emacs-lisp/eieio-base.el (eieio-persistent-slot-type-is-class-p):
+       Prefer \' to $.
+
+2015-01-08  Eli Zaretskii  <address@hidden>
+
+       * simple.el (line-move-visual): When converting X pixel coordinate
+       to temporary-goal-column, adjust the value for right-to-left
+       screen lines.  This fixes vertical-motion, next/prev-line, etc.
+
+2015-01-08  Glenn Morris  <address@hidden>
+
+       * files.el (file-tree-walk): Remove; of unknown authorship.  (Bug#19325)
+
+2015-01-07  K. Handa  <address@hidden>
+
+       * international/ccl.el (define-ccl-program): Improve the docstring.
+
+2015-01-06  Sam Steingold  <address@hidden>
+
+       * shell.el (shell-display-buffer-actions): Remove,
+       use `display-buffer-alist' instead.
+
+2015-01-05  Dmitry Gutov  <address@hidden>
+
+       * progmodes/xref.el (xref--insert-xrefs): Add `help-echo' property
+       to the references.
+
+2015-01-05  Stefan Monnier  <address@hidden>
+
+       * minibuffer.el (completion-category-defaults): New var.
+       Set unicode-name to use substring completion.
+       (completion-category-defaults): Set it to nil.
+
+2015-01-04  Dmitry Gutov  <address@hidden>
+
+       Add mouse interaction to xref.
+       * progmodes/xref.el (xref--button-map): New variable.
+       (xref--mouse-2): New command.
+       (xref--insert-xrefs): Add `mouse-face' and `keymap' properties to
+       the inserted references.
+
+2015-01-04  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for lisp dir
+       * Makefile.in (THEFILE): Define to be 'no-such-file' by default,
+       to make it clearer that the caller must specify it.
+       (compile-onefile): Remove, replacing by ...
+       ($(THEFILE)c): ... new rule.  This lets us use AM_V_GEN here.
+       ($(THEFILE)c, .el.elc, $(MH_E_DIR)/mh-loaddefs.el)
+       ($(TRAMP_DIR)/tramp-loaddefs.el, $(CAL_DIR)/cal-loaddefs.el)
+       ($(CAL_DIR)/diary-loaddefs.el, $(CAL_DIR)/hol-loaddefs.el):
+       Use AM_V_GEN to lessen 'make' chatter.
+       (.el.elc): Omit duplicate comment.
+
+       Less 'make' chatter in batch mode
+       * emacs-lisp/autoload.el (autoload-generate-file-autoloads):
+       * emacs-lisp/bytecomp.el (byte-compile-file):
+       * files.el (save-buffer, basic-save-buffer):
+       * international/quail.el (quail-update-leim-list-file):
+       Don't output messages like "Generating ..." in batch mode.
+
+2015-01-04  Dmitry Gutov  <address@hidden>
+
+       Unbreak `mouse-action' property in text buttons.
+       * button.el (push-button): Fix regression from 2012-12-06.
+
+2015-01-03  Dmitry Gutov  <address@hidden>
+
+       * progmodes/xref.el (xref-marker-stack-empty-p): New function.
+
+       * menu-bar.el (menu-bar-goto-menu): Use it.
+
+2015-01-03  Dmitry Gutov  <address@hidden>
+
+       * progmodes/xref.el (xref--window-configuration): New variable.
+       (xref-show-location-at-point): New command.
+       (xref--restore-window-configuration): New function.
+       (xref-next-line, xref-prev-line): Delegate to
+       `xref-show-location-at-point'.
+       (xref--location-at-point): Don't signal the error.
+       (xref-goto-xref): Do that here instead.
+       (xref--xref-buffer-mode): Add `xref--restore-window-configuration'
+       to `pre-command-hook'.
+       (xref--xref-buffer-mode-map): Don't remap `next-line' and
+       `previous-line'.  Additionally bind `xref-next-line' and
+       `xref-prev-line' to `n' and `p' respectively.
+       Bind `xref-show-location-at-point' to `C-o'.
+
+2015-01-01  Eli Zaretskii  <address@hidden>
+
+       * tool-bar.el (tool-bar-local-item)
+       (tool-bar-local-item-from-menu): Call force-mode-line-update to
+       make sure the tool-bar changes show on display.
+
+2015-01-01  Michael Albinus  <address@hidden>
+
+       Sync with Tramp 2.2.11.
+
+       * net/tramp-compat.el (top): Require cl-macs for Emacs 22.
+       Make an alias for `default-toplevel-value' if it doesn't exist.
+
+       * net/tramp-smb.el (tramp-smb-handle-copy-directory):
+       Use `tramp-compat-delete-directory'.
+
+       * net/trampver.el: Update release number.
+
+2015-01-01  Filipp Gunbin  <address@hidden>
+
+       * autorevert.el (auto-revert-handler): Fix auto-revert-tail-mode
+       for remote files.  (Bug#19449)
+
+2015-01-01  Simen Heggestøyl  <address@hidden>  (tiny change)
+
+       * textmodes/css-mode.el (scss-mode): Fix typo (bug#19446).
+
+2014-12-31  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter in lisp directory
+       * Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
+       (am__v_GEN_0, am__v_GEN_1): New macros, from ../src/Makefile.in.
+       (custom-deps, finder-data, autoloads, update-subdirs): Use them.
+
+2014-12-31  Filipp Gunbin  <address@hidden>
+
+       * info.el (info-display-manual): Limit the completion alternatives
+       to currently visited manuals if prefix argument is non-nil.
+
+2014-12-30  Paul Eggert  <address@hidden>
+
+       * Makefile.in (semantic): Simplify.
+
+2014-12-30  Juri Linkov  <address@hidden>
+
+       * net/eww.el (eww-isearch-next-buffer): New function.
+       (eww-mode): Set multi-isearch-next-buffer-function to it.
+
+2014-12-30  Dmitry Gutov  <address@hidden>
+
+       * progmodes/xref.el (xref-find-definitions): Mention "no
+       identifier at point" case in the docstring.
+
+       * menu-bar.el (menu-bar-goto-uses-etags-p): New function.
+       (menu-bar-goto-menu): Use it to show or hide the `set-tags-name'
+       and `separator-tag-file' items.
+
+2014-12-29  Paul Eggert  <address@hidden>
+
+       * obsolete/pc-select.el (pc-selection-mode): Use system-type.
+       This is instead of system-name, which is both wrong here and obsolete.
+       * desktop.el (desktop-save-frameset):
+       * dnd.el (dnd-get-local-file-uri):
+       * nxml/rng-uri.el (rng-uri-file-name-1):
+       Prefer (system-name) to system-name, and avoid naming
+       locals 'system-name'.
+       * startup.el (system-name): Now an obsolete variable.  (Bug#19438)
+
+2014-12-29  Dmitry Gutov  <address@hidden>
+
+       * menu-bar.el (menu-bar-next-tag-other-window)
+       (menu-bar-next-tag): Remove.
+
+2014-12-29  K. Handa  <address@hidden>
+
+       * international/mule.el (make-translation-table-from-alist):
+       Accept nil or zero-length vector for FROM and TO.
+
+2014-12-29  Lars Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-mode): Truncate overlong lines for prettier
+       display when resizing.
+
+       * net/shr.el (shr-width): Default to using the window width when
+       rendering.
+
+2014-12-29  Dmitry Gutov  <address@hidden>
+
+       Unbreak jumping to an alias's definition.
+       * emacs-lisp/find-func.el (find-function-library): Return a pair
+       (ORIG-FUNCTION . LIBRARY) instead of just its second element.
+       (find-function-noselect): Use it.
+       * progmodes/elisp-mode.el (elisp--xref-identifier-file): Rename to
+       `elisp--xref-identifier-location', incorporate logic from
+       `elisp--xref-find-definitions', use the changed
+       `find-function-library' return value.
+
+2014-12-29  Juri Linkov  <address@hidden>
+
+       * comint.el (comint-history-isearch-message): Use field-beginning
+       instead of comint-line-beginning-position - that's more fixes for
+       http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00305.html
+       (comint-history-isearch-message): Fix args of isearch-message-prefix.
+
+2014-12-29  Juri Linkov  <address@hidden>
+
+       * vc/vc-dir.el (vc-dir-display-file): New command (bug#19450).
+       (vc-dir-mode-map): Bind it to "\C-o".
+       (vc-dir-menu-map): Add it to menu.
+
+2014-12-29  Dmitry Gutov  <address@hidden>
+
+       * progmodes/etags.el (find-tag-other-window)
+       (find-tag-other-frame, find-tag-regexp, tags-loop-continue)
+       (tags-apropos): Declare obsolete.
+
+       * menu-bar.el (menu-bar-goto-menu): Replace all but one etags item
+       with xref ones.
+
+2014-12-28  Eli Zaretskii  <address@hidden>
+
+       * international/mule.el (define-coding-system): Fix typos in the
+       doc string.
+
+2014-12-28  Kenichi Handa  <address@hidden>
+
+       * international/mule.el (define-coding-system): Improve the doc
+       string.
+
+2014-12-28  Ivan Shmakov  <address@hidden>
+
+       * net/shr.el (shr-tag-table): Fix handling of tbody/header/footer
+       elements in tables (bug#19444).
+
+       * net/eww.el (eww-handle-link): Fix typo in "up" rel handling
+       (bug#19445).
+
+2014-12-28  Juri Linkov  <address@hidden>
+
+       * vc/compare-w.el: Require diff-mode for diff faces.
+       (compare-windows-removed, compare-windows-added): New faces
+       inheriting from diff faces.
+       (compare-windows): Define obsolete face alias.
+       (compare-windows-highlight): Replace face `compare-windows' with
+       new faces `compare-windows-added' and `compare-windows-removed'
+       (bug#19451).
+       (compare-windows-get-recent-window): Signal an error when
+       no other window is found (bug#19170).
+
+2014-12-27  Dmitry Gutov  <address@hidden>
+
+       * progmodes/elisp-mode.el (elisp--xref-identifier-file):
+       Skip features that have no sources.
+
+       * simple.el (execute-extended-command):
+       When `suggest-key-bindings' is nil, don't.
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       python.el: Native readline completion.
+       * progmodes/python.el 
(python-shell-completion-native-disabled-interpreters)
+       (python-shell-completion-native-enable)
+       (python-shell-completion-native-output-timeout): New defcustoms.
+       (python-shell-completion-native-interpreter-disabled-p)
+       (python-shell-completion-native-try)
+       (python-shell-completion-native-setup)
+       (python-shell-completion-native-turn-off)
+       (python-shell-completion-native-turn-on)
+       (python-shell-completion-native-turn-on-maybe)
+       (python-shell-completion-native-turn-on-maybe-with-msg)
+       (python-shell-completion-native-toggle): New functions.
+       (python-shell-completion-native-get-completions): New function.
+       (python-shell-completion-at-point): Use it.
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       python.el: Enhance shell user interaction and deprecate
+       python-shell-get-or-create-process.
+       * progmodes/python.el (python-shell-get-process-or-error):
+       New function.
+       (python-shell-with-shell-buffer): Use it.
+       (python-shell-send-string, python-shell-send-region)
+       (python-shell-send-buffer, python-shell-send-defun)
+       (python-shell-send-file, python-shell-switch-to-shell): Use it.
+       Add argument MSG to display user-friendly message when no process
+       is running.
+       (python-shell-switch-to-shell): Call pop-to-buffer with NORECORD.
+       (python-shell-make-comint): Rename argument SHOW from POP.
+       Use display-buffer instead of pop-to-buffer.
+       (run-python): Doc fix.  Return process.
+       (python-shell-get-or-create-process): Make obsolete.
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       * progmodes/python.el (python-shell-buffer-substring):
+       Handle cornercase when region sent starts at point-min.
+
+2014-12-27  Eli Zaretskii  <address@hidden>
+
+       * language/misc-lang.el (composition-function-table): Add Syriac
+       characters and also ZWJ/ZWNJ.
+       See 
http://lists.gnu.org/archive/html/help-gnu-emacs/2014-12/msg00248.html
+       for the details.
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       python.el: Fix message when sending region.
+       * progmodes/python.el (python-shell-send-region): Rename argument
+       send-main from nomain.  Fix message.
+       (python-shell-send-buffer): Rename argument send-main from arg.
+
+       python.el: Cleanup temp files even with eval errors.
+       * progmodes/python.el (python-shell-send-file): Make file-name
+       mandatory.  Fix temp file removal in the majority of cases.
+
+       python.el: Handle file encoding for shell.
+       * progmodes/python.el (python-rx-constituents): Add coding-cookie.
+       (python-shell--save-temp-file): Write file with proper encoding.
+       (python-shell-buffer-substring): Add coding cookie for detected
+       encoding to generated content.  Fix blank lines when removing
+       if-name-main block.
+       (python-shell-send-file): Handle file encoding.
+       (python-info-encoding-from-cookie)
+       (python-info-encoding): New functions.
+
+2014-12-27  Michael Albinus  <address@hidden>
+
+       * net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band):
+       Use `tramp-rsh-end-of-line', it ought to be more robust.
+
+2014-12-27  Stefan Monnier  <address@hidden>
+
+       * progmodes/js.el (js-syntax-propertize): "return" can't be divided
+       (bug#19397).
+
+2014-12-27  Michael Albinus  <address@hidden>
+
+       * net/tramp.el (tramp-read-passwd): Ignore errors from `auth-source-*'.
+
+       * net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band): Use "\n"
+       as end-of-line delimeter for passwords, when running on MS Windows.
+
+2014-12-27  Stefan Monnier  <address@hidden>
+
+       * progmodes/sh-script.el (sh-set-shell): Don't change the global value
+       of indent-line-function (bug#19433).
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       Fix line numbers on Python shell.
+       * progmodes/python.el (python-shell--save-temp-file): Do not
+       append coding cookie.
+       (python-shell-send-string): Generalize for
+       python-shell-send-region.
+       (python--use-fake-loc): Delete var.
+       (python-shell-buffer-substring): Cleanup fake-loc logic.
+       (python-shell-send-region): Remove fake-loc logic, simplify.
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       * progmodes/python.el (python-indent-post-self-insert-function):
+       Make colon to re-indent only for dedenters, handling
+       multiline-statements gracefully.
+
+2014-12-27  Michael Albinus  <address@hidden>
+
+       * net/tramp.el (tramp-handle-insert-file-contents):
+       Set `find-file-not-found-functions' in case of errors.  (Bug#18623)
+
+2014-12-27  Michael Albinus  <address@hidden>
+
+       * net/tramp-sh.el (tramp-send-command-and-read): New optional
+       arg MARKER.
+       (tramp-get-remote-path): Use it.
+
+2014-12-27  Stefan Monnier  <address@hidden>
+
+       * subr.el (redisplay-dont-pause): Mark as obsolete.
+
+2014-12-27  Michael Albinus  <address@hidden>
+
+       * net/tramp.el (tramp-error-with-buffer): Call `message' properly.
+       (tramp-accept-process-output): Use nil as argument for
+       `accept-process-output', when there is a gateway prepended.
+
+       * net/tramp-gw.el (tramp-gw-open-connection): Suppress traces in
+       wrong debug buffer.
+       (tramp-gw-open-connection): Set process coding system 'binary.
+       (tramp-gw-open-network-stream): Handle HTTP error 403.
+
+       * net/tramp-sh.el (tramp-compute-multi-hops): Suppress traces in
+       wrong debug buffer.
+       (tramp-maybe-open-connection): Set connection property "gateway".
+
+2014-12-27  Stefan Monnier  <address@hidden>
+
+       * subr.el (sit-for): Tweak docstring (bug#19381).
+
+2014-12-27  Dmitry Gutov  <address@hidden>
+
+       * vc/vc-git.el (vc-git-after-dir-status-stage): Move `up-to-date'
+       stage to after `diff-index' (bug#19386).
+
+2014-12-27  João Távora  <address@hidden>
+
+       * textmodes/tex-mode.el (tex-insert-quote): Consider and respect
+       `electric-pair-mode' (bug#19356).
+
+2014-12-27  Dmitry Gutov  <address@hidden>
+
+       elisp-xref-find: Don't create buffers eagerly.
+
+       * progmodes/elisp-mode.el (elisp--identifier-location): Fold back
+       into `elisp--company-location'.
+       (elisp--identifier-completion-table): Rename to
+       `elisp--identifier-completion-table', and do not include just any
+       symbols with a property list.
+       (elisp-completion-at-point): Revert the 2014-12-25 change.
+       (elisp--xref-identifier-file): New function.
+       (elisp--xref-find-definitions): Use it.
+
+       * emacs-lisp/find-func.el (find-function-library): New function,
+       extracted from `find-function-noselect'.
+
+       * progmodes/xref.el (xref-elisp-location): New class.
+       (xref-make-elisp-location): New function.
+       (xref-location-marker): New implementation.
+
+2014-12-27  Juri Linkov  <address@hidden>
+
+       * minibuffer.el (minibuffer-completion-help):
+       Use shrink-window-if-larger-than-buffer in window-height
+       when temp-buffer-resize-mode is nil.
+
+       * window.el (with-displayed-buffer-window): Remove window-height
+       from the action alist in the temp-buffer-window-show call
+       when window-height is handled explicitly afterwards (bug#19355).
+
+2014-12-27  Juri Linkov  <address@hidden>
+
+       Support subdirectories when saving places in dired.
+       * saveplace.el (toggle-save-place, save-place-to-alist)
+       (save-places-to-alist, save-place-dired-hook):
+       Use dired-current-directory instead of dired-directory (bug#19436).
+       (save-place-dired-hook): Add check for alist to make the new
+       format future-proof to allow other possible formats.
+
+2014-12-26  Fabián Ezequiel Gallina  <address@hidden>
+
+       python.el: Generate clearer shell buffer names.
+       * progmodes/python.el (python-shell-get-process-name)
+       (python-shell-internal-get-process-name): Use `buffer-name`.
+       (python-shell-internal-get-or-create-process): Simplify.
+
+2014-12-26  Dmitry Gutov  <address@hidden>
+
+       Add basic xref apropos implementation to elisp-mode.
+
+       * progmodes/elisp-mode.el (elisp--xref-find-definitions):
+       Filter out nil results.
+       (elisp--xref-find-apropos): New function.
+       (elisp-xref-find): Use it.
+
+       * progmodes/xref.el (xref--show-xrefs): Use `user-error'.
+
+2014-12-25  Filipp Gunbin  <address@hidden>
+
+       * dired-aux.el (dired-maybe-insert-subdir):
+       Make dired-maybe-insert-subdir always skip trivial files.
+
+2014-12-25  Helmut Eller  <address@hidden>
+            Dmitry Gutov  <address@hidden>
+
+       Consolidate cross-referencing commands.
+
+       Move autoloaded bindings for `M-.', `M-,', `C-x 4 .' and
+       `C-x 5 .' from etags.el to xref.el.
+
+       * progmodes/xref.el: New file.
+
+       * progmodes/elisp-mode.el (elisp--identifier-types): New variable.
+       (elisp--identifier-location): New function, extracted from
+       `elisp--company-location'.
+       (elisp--company-location): Use it.
+       (elisp--identifier-completion-table): New variable.
+       (elisp-completion-at-point): Use it.
+       (emacs-lisp-mode): Set the local values of `xref-find-function'
+       and `xref-identifier-completion-table-function'.
+       (elisp-xref-find, elisp--xref-find-definitions)
+       (elisp--xref-identifier-completion-table): New functions.
+
+       * progmodes/etags.el (find-tag-marker-ring): Mark obsolete in
+       favor of `xref--marker-ring'.
+       (tags-lazy-completion-table): Autoload.
+       (tags-reset-tags-tables): Use `xref-clear-marker-stack'.
+       (find-tag-noselect): Use `xref-push-marker-stack'.
+       (pop-tag-mark): Make an alias for `xref-pop-marker-stack'.
+       (etags--xref-limit): New constant.
+       (etags-xref-find, etags--xref-find-definitions): New functions.
+
+2014-12-25  Martin Rudalics  <address@hidden>
+
+       * cus-start.el (resize-mini-windows): Make it customizable.
+
+2014-12-24  Stephen Leake  <address@hidden>
+
+       * startup.el (fancy-about-text): Change buttons for etc/CONTRIBUTE
+       to (info "(emacs)Contributing").  (Bug#19299)
+
+2014-12-24  Martin Rudalics  <address@hidden>
+
+       * window.el (mouse-autoselect-window-position-1): New variable.
+       (mouse-autoselect-window-cancel)
+       (mouse-autoselect-window-select, handle-select-window):
+       With delayed autoselection select window only if mouse moves after
+       selecting its frame.
+
+2014-12-24  Michael Albinus  <address@hidden>
+
+       * eshell/esh-ext.el (eshell-find-interpreter): Expand relative
+       remote file names.  (Bug#18782)
+
+2014-12-23  Sam Steingold  <address@hidden>
+
+       * shell.el (shell-display-buffer-actions): New user option.
+       (shell): Pass it to `pop-to-buffer' instead of hard-coding
+       `pop-to-buffer-same-window'.
+
+2014-12-23  Stefan Monnier  <address@hidden>
+
+       * progmodes/js.el (js--syntax-propertize-regexp-syntax-table): New var.
+       (js-syntax-propertize-regexp): Use it to recognize "slash in
+       a character class" (bug#19397).
+
+2014-12-22  Stefan Monnier  <address@hidden>
+
+       * completion.el: Use post-self-insert-hook (bug#19400).
+       (completion-separator-self-insert-command)
+       (completion-separator-self-insert-autofilling): Remove.
+       (completion-separator-chars): New var.
+       (completion-c-mode-hook, completion-setup-fortran-mode): Use it instead
+       of changing the keymap.
+       (completion--post-self-insert): New function.
+       (dynamic-completion-mode): Use it instead of rebinding keys.
+       (cmpl--completion-string): Rename from completion-string.
+       (add-completion-to-head, delete-completion): Let-bind it explicitly.
+
+2014-12-22  Bozhidar Batsov  <address@hidden>
+
+       * progmodes/ruby-mode.el (ruby--string-region): Simplify code
+       by leveraging `syntax-ppss'.
+
+2014-12-22  Artur Malabarba  <address@hidden>
+
+       * let-alist.el (let-alist): Use `make-symbol' instead of `gensym'.
+
+2014-12-20  Michael Albinus  <address@hidden>
+
+       * net/tramp-sh.el (tramp-histfile-override): Add :version.
+
+2014-12-20  Teodor Zlatanov  <address@hidden>
+
+       * net/tramp-sh.el (tramp-histfile-override): Clarify docstring.
+
+2014-12-19  Artur Malabarba  <address@hidden>
+
+       * let-alist.el (let-alist): Enable access to deeper alists by
+       using dots inside the dotted symbols.
+
+2014-12-19  Alan Mackenzie  <address@hidden>
+
+       Make C++11 uniform init syntax work.
+       New keywords "final" and "override".
+       * progmodes/cc-engine.el (c-back-over-member-initializer-braces):
+       New function.
+       (c-guess-basic-syntax): Set `containing-sex' and `lim' using the
+       new function.
+       * progmodes/cc-fonts.el (c-font-lock-declarations): Check more
+       carefully for "are we at a declarator?" using
+       c-back-over-member-initializers.
+       * progmodes/cc-langs.el (c-type-modifier-kwds): Include "final"
+       and "override" in the C++ value.
+
+2014-12-19  Martin Rudalics  <address@hidden>
+
+       * textmodes/ispell.el (ispell-command-loop): Don't use `next-window'.
+
+2014-12-21  Lars Ingebrigtsen  <address@hidden>
+
+       * net/nsm.el (nsm-save-host): Don't save the host name twice
+       (bug#19269).
+
+2014-12-18  Sam Steingold  <address@hidden>
+
+       Keyboard interface (C-f10) to `mouse-buffer-menu' (C-down-mouse-1).
+       * mouse.el (mouse-buffer-menu-map): Extract from `mouse-buffer-menu'.
+       (mouse-buffer-menu): Use `mouse-buffer-menu-map'.
+       * menu-bar.el (menu-bar-buffer-vector): Extract from
+       `menu-bar-update-buffers'.
+       (menu-bar-update-buffers): Use `menu-bar-buffer-vector'.
+       (buffer-menu-open): New user command, bound globally to C-f10,
+       provides a keyboard interface to `mouse-buffer-menu' (C-down-mouse-1).
+       (mouse-buffer-menu-keymap): Use `menu-bar-buffer-vector' to
+       convert the value returned by `mouse-buffer-menu-map' to a list
+       acceptable to `popup-menu' for `buffer-menu-open'.
+
+2014-12-18  Artur Malabarba  <address@hidden>
+
+       * let-alist.el (let-alist): Evaluate the `alist' argument only once.
+
+2014-12-18  Sam Steingold  <address@hidden>
+
+       * emacs-lisp/package.el: Avoid compilation warning by declaring
+       the `find-library-name' function.
+       (package-activate-1): Fix the `with-demoted-errors' calls:
+       the first argument must be a string literal.
+
+2014-12-18  Martin Rudalics  <address@hidden>
+
+       Add code for "preserving" window sizes.
+       * dired.el (dired-pop-to-buffer): Call fit-window-to-buffer with
+       `preserve-size' t.
+       (dired-mark-pop-up): Preserve size of window showing marked files.
+       * electric.el (Electric-pop-up-window):
+       * help.el (resize-temp-buffer-window): Call fit-window-to-buffer
+       with `preserve-size' t.
+       * minibuffer.el (minibuffer-completion-help):
+       Use `resize-temp-buffer-window' instead of `fit-window-to-buffer'
+       (Bug#19355).  Preserve size of completions window.
+       * register.el (register-preview): Preserve size of register
+       preview window.
+       * tmm.el (tmm-add-prompt): Call fit-window-to-buffer
+       with `preserve-size' t (Bug#1291).
+       * window.el (with-displayed-buffer-window): Add calls to
+       `window-preserve-size'.
+       (window-min-pixel-size, window--preservable-size)
+       (window-preserve-size, window-preserved-size)
+       (window--preserve-size, window--min-size-ignore-p): New functions.
+       (window-min-size, window-min-delta, window--resizable)
+       (window--resize-this-window, split-window-below)
+       (split-window-right): Amend doc-string.
+       (window--min-size-1, window-sizable, window--size-fixed-1)
+       (window-size-fixed-p, window--min-delta-1)
+       (frame-windows-min-size, window--max-delta-1, window-resize)
+       (window--resize-child-windows, window--resize-siblings)
+       (enlarge-window, shrink-window, split-window): Handle preserving
+       window sizes.
+       (adjust-window-trailing-edge): Handle preserving window
+       sizes.  Signal user-error instead of an error when there's no
+       window above or below.
+       (window--state-put-2): Handle horizontal scroll bars.
+       (window--display-buffer): Call `preserve-size' if asked for.
+       (display-buffer): Mention `preserve-size' alist member in doc-string.
+       (fit-window-to-buffer): New argument PRESERVE-SIZE.
+       * textmodes/ispell.el (ispell-command-loop): Suppress horizontal
+       scroll bar on ispell's windows.  Don't count window lines and
+       don't deal with dedicated windows.
+       (ispell-show-choices, ispell-help): Let `ispell-display-buffer'
+       do the window handling.
+       (ispell-adjusted-window-height, ispell-overlay-window): Remove.
+       (ispell-display-buffer): New function to reuse, create and fit
+       window to ispell's buffers.  (Bug#3413)
+
+2014-12-18  Dmitry Gutov  <address@hidden>
+
+       * emacs-lisp/package.el (package-activate): Do not re-activate or
+       reload the dependencies (bug#19390).
+
+2014-12-18  Stefan Monnier  <address@hidden>
+
+       * progmodes/cc-cmds.el (c-subword-mode): Alias to subword-mode.
+       (c-update-modeline):
+       * progmodes/cc-langs.el (c-mode-menu): Use c-subword-mode.
+       * progmodes/cc-mode.el (subword-mode): Move autoload to cc-cmds.el.
+       (c-mode-base-map): Use c-subword-mode.
+
+2014-12-18  Eli Zaretskii  <address@hidden>
+
+       * international/mule-diag.el (describe-font-internal):
+       Display additional info returned by font-info.
+
+       * linum.el (linum--face-width): Rename from linum--face-height,
+       and use the new functionality of font-info.
+       (linum-update-window): Use linum--face-width and frame-char-width,
+       instead of approximating with height.
+
+2014-12-18  Dmitry Gutov  <address@hidden>
+
+       * vc/vc-svn.el (vc-svn-dir-status-files): Revert the 2014-12-02
+       change (bug#19387).  Use `apply' on `vc-dir-command'  (bug#19405).
+
+       * emacs-lisp/package.el (package-activate-1): Add RELOAD argument
+       and a docstring.
+       (package-activate): Call itself on dependencies on PACKAGE with
+       the same FORCE argument.  Pass FORCE as RELOAD into
+       `package-activate-1'  (bug#19390).
+
+2014-12-17  Sam Steingold  <address@hidden>
+
+       * emacs-lisp/package.el (package--list-loaded-files):
+       Handle `(nil ...)' elements in `load-history'.
+
+2014-12-17  Teodor Zlatanov  <address@hidden>
+
+       * net/tramp-sh.el (tramp-histfile-override): New variable.
+       (tramp-open-shell, tramp-maybe-open-connection): Use it.
+
+2014-12-17  Dmitry Gutov  <address@hidden>
+
+       * vc/vc.el: Improve `dir-status-files' description.
+
+       * emacs-lisp/package.el (package--list-loaded-files): Don't call
+       file-truename on load-history elements (bug#19390).
+
+2014-12-16  Nicolas Petton <address@hidden>
+
+       * emacs-lisp/seq.el: New file.
+
+2014-12-16  Stefan Monnier  <address@hidden>
+
+       * jit-lock.el (jit-lock-function): Don't defer if jit-lock-defer-time
+       is 0 and there is no input pending.
+
+2014-12-15  Juri Linkov  <address@hidden>
+
+       * replace.el (query-replace-read-from): Use 
query-replace-compile-replacement
+       only on the return value (bug#19383).
+
+2014-12-15  Juri Linkov  <address@hidden>
+
+       * isearch.el (isearch-lazy-highlight-search): Extend the bound of
+       the wrapped search by the length of the search string to be able
+       to lazy-highlight the whole search string at point (bug#19353).
+
+2014-12-15  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/shr.el (shr-fold-text): Don't bug out on zero-length text.
+
+2014-12-14  Alan Mackenzie  <address@hidden>
+
+       * cus-start.el (all): Add fast-but-imprecise-scrolling.
+
+2014-12-14  Artur Malabarba  <address@hidden>
+
+       * let-alist.el: Add lexical binding.
+
+2014-12-14  Steve Purcell  <address@hidden>  (tiny change)
+
+       * emacs-lisp/package.el (package-menu-mode): Use an extra column
+       for the "Version" column, to accomodate date-and-time-based versions.
+
+2014-12-14  Cameron Desautels  <address@hidden>
+
+       * cus-edit.el (custom-unsaved-options): New function, extracted
+       from `customize-unsaved'.
+       (custom-unsaved): Use it.
+       (custom-prompt-customize-unsaved-options): New function.
+       (Bug#19328)
+
+2014-12-14  Dmitry Gutov  <address@hidden>
+
+       * fringe.el (fringe-bitmap-p): Fix 2014-12-05 breakage.
+
+2014-12-14  Dmitry Gutov  <address@hidden>
+
+       Move ASYNC argument to the `diff' VC command to the fifth
+       position, for better compatibility with existing third-party code,
+       and document it.
+
+       * vc/vc.el (vc-diff-internal): Pass `async' argument to the
+       backend `diff' command in the last position.
+
+       * vc/vc-svn.el (vc-svn-diff):
+       * vc/vc-src.el (vc-src-diff):
+       * vc/vc-sccs.el (vc-sccs-diff):
+       * vc/vc-rcs.el (vc-rcs-diff):
+       * vc/vc-mtn.el (vc-mtn-diff):
+       * vc/vc-hg.el (vc-hg-diff):
+       * vc/vc-git.el (vc-git-diff):
+       * vc/vc-dav.el (vc-dav-diff):
+       * vc/vc-cvs.el (vc-cvs-diff):
+       * vc/vc-bzr.el (vc-bzr-diff):
+       * obsolete/vc-arch.el (vc-arch-diff): Move ASYNC argument to the end.
+
+2014-12-14  Paul Eggert  <address@hidden>
+
+       * emacs-lisp/cconv.el (cconv--analyze-use):
+       Rename from cconv--analyse-use.
+       (cconv--analyze-function): Rename from cconv--analyse-function.
+       (cconv-analyze-form): Rename from cconv-analyse-form.
+
+2014-12-13  Andreas Schwab  <address@hidden>
+
+       * net/shr.el (shr-next-link): Don't error out at eob.
+
+2014-12-05  Nicolas Richard  <address@hidden>
+
+       * isearch.el (isearch-open-necessary-overlays): Open overlay
+       ending at point (bug#19333).
+
+2014-12-13  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/shr.el (shr-fold-text): New function.
+       (shr-show-alt-text, shr-urlify, shr-tag-img): Use it to fold long
+       alt/title texts.
+       (shr-fold-text): Inhibit state from being altered.
+
+       * files.el (directory-files-recursively): Really check whether
+       files are symlinks.
+       (directory-name-p): New function.
+       (directory-files-recursively): Use it.
+
+2014-12-13  Artur Malabarba  <address@hidden>
+
+       * emacs-lisp/package.el (package--list-loaded-files): New function
+       to list files in a given directory which correspond to already
+       loaded files.
+       (package-activate-1): Reload files given by 
`package--list-loaded-files'.
+       Fix bug#10125, bug#18443, and bug#18448.
+
+2014-12-13  Eric S. Raymond  <address@hidden>
+
+       * vc/vc-svn.el (vc-svn-diff): Fix bug #19312.
+
+2014-12-13  Michael Albinus  <address@hidden>
+
+       * simple.el (password-word-equivalents): Add "passcode", used for
+       numeric secrets like PINs or RSA tokens.
+
+2014-12-13  Michael Albinus  <address@hidden>
+
+       * net/tramp-sh.el (tramp-get-remote-path): Use a login shell in
+       order to determine `tramp-own-remote-path'.
+
+2014-12-13  Fabián Ezequiel Gallina  <address@hidden>
+
+       * progmodes/python.el (python-shell-parse-command):
+       Quote `python-shell-interpreter`.  (Bug#19289)
+
+2014-12-12  Stefan Monnier  <address@hidden>
+
+       * progmodes/python.el (python-indent-line): Use `noindent' in strings.
+       (python-indent-levels): Document extra value.
+       (python-indent-calculate-indentation): Return `noindent' in strings.
+       (python-indent-post-self-insert-function)
+       (python-indent-calculate-levels): Handle new value.
+
+2014-12-12  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/network-stream.el (network-stream-open-starttls): No need to
+       check for the availability of `gnutls-available-p'.
+
+       * files.el (directory-files-recursively): Don't follow symlinks to
+       other directories.
+
+2014-12-12  Eric S. Raymond  <address@hidden>
+
+       * vc/vc-dav.el, vc/vc-git.el, vc/vc-hg.el, vc/vc-src.el:
+       * vc/vc.el: latest-on-branch-p is no longer a public method.
+
+       * vc/vc.el, vc/vc-hg.el, vc/vc-git.el, vc/vc-hooks.el:
+       * vc/vc-mtn.el, vc/vc-rcs.el, vc/vc-sccs.el, vc/vc-src.el:
+       Remove `rollback' method, to be replaced in the future by uncommit.
+
+2014-12-11  Michael Albinus  <address@hidden>
+
+       * vc/vc-hg.el (vc-hg-state): Make FILE absolute.  Handle the case
+       that there is empty output.
+
+2014-12-11  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eldoc.el (eldoc-documentation-function): Change default.
+       (eldoc-mode, eldoc-schedule-timer): Adjust to new default.
+
+2014-12-10  Artur Malabarba  <address@hidden>
+
+       * let-alist.el: Add new package and macro.
+
+2014-12-10  Eric S. Raymond  <address@hidden>
+
+       * vc/vc-dispatcher.el, vc/vc-hooks.el, vc/vc-rcs.el:
+       * vc/vc-sccs.el, vc/vc.el: Righteous featurectomy of vc-keep-workfiles,
+       it's a shoot-self-in-foot archaism.  Workfiles are always kept.
+
+2014-12-10  Rasmus Pank Roulund  <address@hidden>
+
+       * net/ange-ftp.el (ange-ftp-switches-ok): Disallow flags causing
+       trouble with ls over ftp.  These flags result in ls returning no
+       output, causing Tramp-breakage.  (bug#19192)
+
+2014-12-10  Andreas Schwab  <address@hidden>
+
+       * files.el (file-tree-walk): Use file-name-as-directory unconditionally.
+
+2014-12-10  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * files.el (directory-files-recursively):
+       Use `file-name-all-completions' instead of `directory-files' for
+       greater speed.
+
+       * net/shr.el (shr-tag-object): Don't bug out on text elements in
+       <object>.
+
+2014-12-09  Bozhidar Batsov  <address@hidden>
+
+       * progmodes/ruby-mode.el (auto-mode-alist): Add .rabl, Berksfile
+       and Puppetfile.
+       (ruby-toggle-string-quotes): New command that allows you to quickly
+       toggle between single-quoted and double-quoted string literals.
+
+2014-12-09  Eric S. Raymond  <address@hidden>
+
+       * vc/vc-src.el (vc-src-do-comand): Prepend -- to file argument
+       list, avoids problems witt names containing hyphens.
+
+2014-12-09  Wilson Snyder  <address@hidden>
+
+       Sync with upstream verilog-mode revision aa4b777.
+       * progmodes/verilog-mode.el (verilog-mode-version): Update.
+       (verilog-auto-end-comment-lines-re, verilog-end-block-ordered-re)
+       (verilog-set-auto-endcomments): Automatically comment property/
+       endproperty blocks to match other similar blocks like sequence/
+       endsequence, function/endfunction, etc.  Reported by Alex Reed.
+       (verilog-set-auto-endcomments): Fix end comments for functions of
+       type void, etc.  Detect the function- or task-name when
+       auto-commenting blocks that lack an explicit portlist.
+       Reported by Alex Reed.
+       (verilog-nameable-item-re): Fix nameable items that can have an
+       end-identifier to include endchecker, endgroup, endprogram,
+       endproperty, and endsequence.  Reported by Alex Reed.
+       (verilog-preprocessor-re, verilog-beg-of-statement):
+       Fix indentation of property/endproperty around pre-processor
+       directives.  Reported by Alex Reed.
+       (verilog-label-be): When auto-commenting a buffer, consider
+       auto-comments on all known keywords (not just a subset thereof).
+       Reported by Alex Reed.
+       (verilog-beg-of-statement): Fix labeling do-while blocks, bug842.
+       Reported by Alex Reed.
+       (verilog-beg-of-statement-1, verilog-at-constraint-p):
+       Fix hanging with many curly-bracket pairs, bug663.
+       (verilog-do-indent): Fix electric tab deleting form-feeds.
+       Note caused by indent-line-to deleting tabls pre 24.5.
+       (verilog-auto-output, verilog-auto-input, verilog-auto-inout)
+       (verilog-auto-inout-module, verilog-auto-inout-in): Doc fixes.
+       (verilog-read-always-signals, verilog-auto-sense-sigs)
+       (verilog-auto-reset): Fix AUTORESET with always_comb and always_latch,
+       bug844.  Reported by Greg Hilton.
+
+2014-12-09  Alex Reed  <address@hidden>  (tiny change)
+
+       * progmodes/verilog-mode.el (verilog-no-indent-begin-re):
+       Fix `verilog-indent-begin-after-if' nil not honoring 'forever',
+       'foreach', and 'do' keywords.
+       (verilog-endcomment-reason-re, verilog-beg-of-statement):
+       Fix labeling do-while blocks, bug842.
+       (verilog-backward-token): Fix indenting sensitivity lists with
+       named events, bug840.
+
+2014-12-09  Reto Zimmermann  <address@hidden>
+
+       Sync with upstream vhdl mode v3.36.1.
+       * progmodes/vhdl-mode.el (vhdl-version, vhdl-time-stamp): Update.
+       (vhdl-compiler-alist): Anchor all error regexps.
+       (vhdl-compile-use-local-error-regexp): Change default to nil.
+       (vhdl-asort, vhdl-anot-head-p): Remove.
+       (vhdl-aput, vhdl-adelete, vhdl-aget): Simplify.
+       Remove optional argument of vhdl-aget and update all callers.
+       (vhdl-import-project): Also set `vhdl-compiler'.
+
+2014-12-09  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * files.el (find-files): New function.
+
+       * net/shr.el (shr-dom-print): Don't print comments.
+       (shr-tag-svg): Give inline SVG images the right type.
+
+       * net/eww.el (eww-update-header-line-format): Mark valid/invalid
+       certificates in the header line.
+       (eww-invalid-certificate, eww-valid-certificate): New faces.
+
+2014-12-09  Fabián Ezequiel Gallina  <address@hidden>
+
+       * progmodes/python.el (inferior-python-mode):
+       Set `comint-prompt-read-only` to `t` only locally.
+
+2014-12-08  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/nsm.el (nsm-check-protocol): Test for RC4 on `high'.
+       (nsm-format-certificate): Include more data about the connection.
+       (nsm-query): Fill the text to that it looks nicer.
+       (nsm-check-protocol): Also warn if using SSL3 or older.
+
+2014-12-08  Stefan Monnier  <address@hidden>
+
+       * progmodes/gud.el (gud-gdb-completions): Remove unused var `start'.
+
+       * obsolete/gulp.el (gulp-create-m-p-alist): Remove unused var `mnt-tm'.
+
+       * net/tramp.el (tramp-handle-make-symbolic-link): Mark unused arg.
+
+       * info.el (Info-mode-map): Remove left-over binding.
+
+       * emacs-lisp/avl-tree.el: Use lexical-binding and cl-lib.
+       (avl-tree--root): Remove redundant defsetf.
+
+2014-12-08  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/nsm.el (network-security-level): Remove the detailed
+       description, which was already outdated, and refer the users to
+       the manual.
+       (nsm-check-protocol): Check for weak Diffie-Hellman prime bits
+       (bug#19153).
+
+2014-12-06  Andrey Kotlarski  <address@hidden>
+
+       * net/eww.el (eww-buffers-mode): New major mode.
+       (eww-list-buffers, eww-buffer-select, eww-buffer-show-next)
+       (eww-buffer-show-previous, eww-buffer-kill, eww-buffer-show):
+       New commands/functions (bug#19131).
+
+2014-12-08  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/gnutls.el (gnutls-negotiate): Ignore files found via
+       'file-name-handler-alist' since the gnutls library can't use those
+       (bug#15866).
+
+2014-12-08  Dmitry Gutov  <address@hidden>
+
+       * vc/vc-hg.el (vc-hg-dir-status-files): Only include ignores files
+       when FILES is non-nil (bug#19304).
+
+2014-12-08  Eric S. Raymond  <address@hidden>
+
+       * vc/vc-arch.el: Move to obsolete directory so a test framework
+       won't trip over bit-rot in it.  There has been no Arch snapshot
+       for nine years.
+
+2014-12-07  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-follow-link): Revert prefix behaviour to
+       previous behavior.
+       (eww-copy-page-url): Add doc string.
+
+2014-12-07  Ivan Shmakov  <address@hidden>
+
+       * net/eww.el (eww): Move history recording here...
+       (eww-browse-url): ... from here (bug#19253).
+
+       * net/eww.el (eww-browse-url): Use generate-new-buffer (was:
+       iterating over possible buffer names.)
+
+2014-12-07  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-reload): Take a prefix to work locally (bug#19086).
+       (eww-current-buffer): Compilation fix for bug#18550 patch.
+
+2014-12-07  Ivan Shmakov  <address@hidden>
+
+       * net/eww.el (eww-list-histories): Restore the history in the
+       correct buffer (bug#18550).
+
+2014-12-07  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-bookmark-prepare): Display URLs in first by
+       displaying shortened titles first (bug#16398).
+
+2014-12-07  Tom Willemse  <address@hidden>  (tiny change)
+
+       * progmodes/python.el: Recognize docstrings.
+       (python-docstring-at-p, python-font-lock-syntactic-face-function):
+       New functions.
+       (python-mode): Use them.
+
+2014-12-06  Ulf Jasper  <address@hidden>
+
+       * net/newst-treeview.el (newsticker--treeview-list-add-item)
+       (newsticker--treeview-propertize-tag): Bind tree menu to mouse-3.
+       (newsticker--treeview-create-groups-menu)
+       (newsticker--treeview-create-tree-menu): Remove.
+       (newsticker--treeview-tree-open-menu): New.
+       (newsticker-treeview-tree-click): Pass event to
+       `newsticker-treeview-tree-do-click'.
+       (newsticker-treeview-tree-do-click): Open treemenu on mouse-3.
+
+2014-12-05  Juri Linkov  <address@hidden>
+
+       * comint.el (comint-history-isearch-search)
+       (comint-history-isearch-wrap): Use field-beginning instead of
+       comint-line-beginning-position.
+       (comint-send-input): Go to the end of the field instead of the end
+       of the line to accept whole multi-line input.
+       http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00305.html
+
+2014-12-05  Juri Linkov  <address@hidden>
+
+       * minibuffer.el (minibuffer-completion-help):
+       Compare selected-window with minibuffer-window to check whether
+       completions should be displayed near the minibuffer.  (Bug#17809)
+       http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00311.html
+
+2014-12-05  Michael Albinus  <address@hidden>
+
+       * vc/vc-mtn.el (vc-mtn-root):
+       * vc/vc-svn.el (vc-svn-registered): Make FILE absolute.
+
+2014-12-05  Stefan Monnier  <address@hidden>
+
+       * progmodes/sh-script.el (sh-smie-sh-rules): Go back to the beginning
+       of the whole pipe when indenting an opening keyword after a |.
+       Generalize this treatment to opening keywords like "while" (bug#18031).
+
+2014-12-05  Stefan Monnier  <address@hidden>
+
+       * simple.el (newline): Place the hook buffer-locally,
+       to make sure it's first.
+
+       * progmodes/prog-mode.el (prettify-symbols--compose-symbol):
+       Fix handling of symbols with different syntax at beginning/end or with
+       symbol rather than word syntax.
+
+2014-12-05  Eli Zaretskii  <address@hidden>
+
+       * simple.el (line-move): If noninteractive, call line-move-1, not
+       forward-line, since the former is compatible with line-move-visual
+       both in terms of the column to which it moves and the return
+       value.  (Bug#19211)
+
+2014-12-05  Stefan Monnier  <address@hidden>
+
+       * vc/ediff-init.el (ediff-odd-p): Remove.
+       (ediff-background-face): Use cl-oddp instead.
+       (ediff-buffer-live-p): Make it a defsubst.
+
+       * tooltip.el (tooltip-region-active-p): Remove.
+
+       * net/shr.el (shr-char-breakable-p, shr-char-kinsoku-bol-p)
+       (shr-char-kinsoku-eol-p, shr-char-nospace-p): Use define-inline.
+
+       * fringe.el (fringe-bitmap-p): Make it a plain function.
+
+       * emacs-lisp/eieio-core.el: Prefer inlinable functions over macros.
+       (class-p, generic-p, eieio-object-p, class-abstract-p):
+       Make them defsubst, so as to avoid corner case problems where
+       the arg might be evaluated in the condition-case, or it can't be passed
+       to higher-order functions like `cl-some'.
+
+2014-12-05  Nicolas Richard  <address@hidden>
+
+       * wid-edit.el (widget-choose): Let numeric keypad work (bug#19268)
+       and remove old menu-related code.
+
+2014-12-05  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-display-pdf): Let mailcap determine how to
+       display PDF files (bug#19270).
+
+2014-12-05  Juri Linkov  <address@hidden>
+
+       Compare with the most recent window by default.
+       * vc/compare-w.el (compare-windows-get-window-function): New defcustom.
+       (compare-windows-get-recent-window)
+       (compare-windows-get-next-window): New functions.
+       (compare-windows, compare-windows-sync-default-function):
+       Use `compare-windows-get-window-function' instead of `next-window'.
+       (compare-windows): Add diff/match messages with region boundaries.
+       (Bug#19170)
+
+2014-12-04  Stefan Monnier  <address@hidden>
+
+       * subr.el (filter): Remove.  Use `cl-remove-if-not' or `seq-filter'.
+
+2014-12-04  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/shr.el (shr--extract-best-source): Ignore non-text children.
+
+2014-12-04  Eli Zaretskii  <address@hidden>
+
+       Implement copying of a buffer portion while preserving visual order.
+       * simple.el (bidi-directional-controls-chars)
+       (bidi-directional-non-controls-chars): New variables.
+       (squeeze-bidi-context-1, squeeze-bidi-context)
+       (line-substring-with-bidi-context)
+       (buffer-substring-with-bidi-context): New functions.
+
+       * files.el (file-tree-walk): Doc fix.
+
+2014-12-04  Rupert Swarbrick  <address@hidden> (tiny change)
+           Rüdiger Sonderfeld  <address@hidden>
+
+       * autoinsert.el (auto-insert-alist): Update C/C++ header and
+       program support to match more extensions.  Replace non-alnum
+       characters when generating include guards (headers) and check for
+       more extensions when generating includes (programs)
+       (bug#19254).
+
+2014-12-03  Eric S. Raymond  <address@hidden>
+
+       * files.el (file-tree-walk): Fix docstring.
+
+2014-12-03  Karl Fogel  <address@hidden>
+
+       Fix bug whereby saving files hung in VC hook.
+
+       Saving a buffer visiting a file under SVN control would hang if
+       the remote repository were unreachable, because the VC hooks tried
+       to run "svn status -u" on the file, where the "-u" tells svn to
+       get update information from the remote repository.
+       http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00174.html
+
+       * vc/vc-svn.el (vc-svn-state): Remove optional `localp'
+       argument and always pass "-v" to "svn status", never "-u".
+
+2014-12-03  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/inline.el: Fix up copyright header.
+       (inline-quote, inline-const-p, inline-const-val, inline-error):
+       Silence compiler warnings.
+       (inline-letevals): Fix edebug spec.
+       (inline--testconst-p): Consider lambda expressions as const-p.
+       (inline--getconst-val): Use inline--testconst-p.
+
+       * minibuffer.el (completion-table-dynamic): Add arg `switch-buffer'
+       and change default to stay in the minibuffer when called from
+       the minibuffer (bug#19250).
+       (lazy-completion-table): Use this new argument to preserve the
+       old behavior.
+
+       * progmodes/elisp-mode.el (elisp--local-variables): Don't burp on
+       incorrect lexical elements (bug#19250).
+
+2014-12-03  A. N. Other  <address@hidden>
+
+       * files.el (file-tree-walk): Lisp translation of ANSI ftw(3).
+
+2014-12-02  Glenn Morris  <address@hidden>
+
+       * whitespace.el (whitespace-big-indent-regexp): Add :version.
+
+2014-12-02  Eric S. Raymond  <address@hidden>
+
+       * subr.el (filter): New macro.  Because it's just silly for a Lisp
+       not to have this in 2014.  And VC needs it.
+
+       * vc.el: All backends: API simplification: Abolish dir-status.
+       It's replaced by dir-status-files.
+
+       * vc.el: All backends: API simplification: Remove 4th
+       'default-state' argument from vc-dir-status files and its backend
+       methods - no backend method ever set it.  It was used only in the
+       fallback method to to set a default of 'up-to-date, though a
+       convoluted call chain obscured this.
+
+       * vc-hooks.el: Bind vc-delete-file to Ctrl-x v delete.
+
+       * vc.el (vc-expand-dirs): Now takes a second BACKEND argument,
+       improving behavior on directories using multiple file-oriented VCSes.
+
+       * vc/vc.el: All backends: API simplification; clear-headers
+       is no longer a public method.  It is now local to the one place
+       it's used, in the RCS steal-lock method.
+
+2014-12-01  Eric S. Raymond  <address@hidden>
+
+       * vc/vc.el: In all backends: API simplification; could-register
+       is no longer a public method.  (vc-cvs.el still has a private
+       implementation.)
+
+       * vc/vc.el: In all backends: API cleanup; the backend diff method
+       takes an explicit async flag.  This eliminates a particularly ugly
+       global.
+
+       * vc-bzr.el: Restore vc-bzr-state-heuristic as a private method.
+       VC randomly/unpredictably fails without it; cause not yet established.
+
+2014-12-01  Stefan Monnier  <address@hidden>
+
+       Merge some of the differences from the standalone CC-mode.
+       The main change is to only use the `category' text-property only when
+       available.  For that many calls are changed to use c-get-char-property,
+       c-next-single-property-change, c-sc-scan-lists,
+       c-sc-parse-partial-sexp, c-unmark-<->-as-paren.
+
+       * progmodes/cc-mode.el (c-just-done-before-change): New var.
+       (c-basic-common-init): Initialize it.
+       (c-common-init): Only use mode-require-final-newline when available.
+       (c-before-change): Check and set c-just-done-before-change.
+       (c-after-change): Re-set c-just-done-before-change.
+       (c-advise-fl-for-region): New macro.
+       (lazy-lock-defer-rest-after-change, lazy-lock-defer-line-after-change)
+       (font-lock-after-change-function, jit-lock-after-change):
+       Advise if needed.
+
+       * progmodes/cc-langs.el (c-modified-constant): New lang var.
+       (c-known-type-key): Don't make a list just to throw it away.
+
+       * progmodes/cc-engine.el (c-invalidate-state-cache, c-parse-state):
+       Handle the case where categories are not available.
+       (c-record-parse-state-state, c-replay-parse-state-state):
+       Handle marker values.
+       (c-before-change-check-<>-operators): Look for the `syntax-table'
+       property rather than for the corresponding `category'.
+       (c-looking-at-decl-block): Remove unused var
+       `c-disallow-comma-in-<>-arglists'.
+       (c-forward-<>-arglist-recur): Remove unused var
+       `orig-record-found-types'.
+
+       * progmodes/cc-defs.el (c-version): Bump up to 5.33.
+       (c-use-category): New const.
+       (c-next-single-property-change): New macro.
+       (c-region-is-active-p): Prefer region-active-p when available.
+       (c-search-backward-char-property): Fix old min/max typo; probably
+       a copy/paste error.
+       (c-mark-<-as-paren, c-mark->-as-paren, c-unmark-<->-as-paren):
+       Turn them into macros that obey c-use-category.
+       (c-sc-scan-lists-no-category+1+1, c-sc-scan-lists-no-category+1-1)
+       (c-sc-scan-lists-no-category-1+1, c-sc-scan-lists-no-category-1-1)
+       (c-sc-scan-lists, c-sc-parse-partial-sexp)
+       (c-looking-at-non-alphnumspace): New macros.
+       (c-sc-parse-partial-sexp-no-category): New function.
+       (c-emacs-features): Add `category-properties' element.
+
+       * progmodes/cc-cmds.el (c-forward-into-nomenclature)
+       (c-backward-into-nomenclature): Use cc-subword if subword-mode is
+       not available.
+       (c-beginning-of-defun, c-end-of-defun, c-mark-function)
+       (c-indent-line-or-region): Use c-region-is-active-p.
+
+       * progmodes/cc-bytecomp.el (cc-bytecomp-unbound-variables)
+       (cc-bytecomp-original-functions, cc-bytecomp-original-properties)
+       (cc-bytecomp-loaded-files): Re-set each time the file is loaded.
+       (cc-bytecomp-obsolete-var, cc-bytecomp-ignore-obsolete)
+       (cc-bytecomp-obsolete-fun): Delete unused functions.
+
+       * progmodes/cc-align.el (c-lineup-respect-col-0): New function.
+
+2014-12-01  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/shr.el (shr-dom-print): Fix up `shr-dom-print' after the
+       dom.el changes.
+
+2014-12-01  Stefan Monnier  <address@hidden>
+
+       * vc/vc.el (vc-find-conflicted-file): Look for conflicted files in the
+       current "project" rather than just the current directory.
+       * vc/vc-git.el (vc-git-conflicted-files): Clarify in which directory
+       the file names make sense.
+
+       * vc/smerge-mode.el (smerge-swap): New command.
+
+       * vc/diff-mode.el (diff-kill-applied-hunks): New command.
+
+2014-12-01  Ulf Jasper  <address@hidden>
+
+       * net/newst-treeview.el (newsticker--treeview-item-show):
+       Check window liveliness before measuring its width.
+
+       * net/newst-backend.el (newsticker--get-news-by-url-callback):
+       Pass correct status to `newsticker--sentinel-work'.
+       (newsticker--sentinel-work): Use "newsticker--download-error" as
+       guid in order to prevent multiple "Could not download..."
+       messages.  Fixes bug#19166.
+
+2014-12-01  Ivan Shmakov  <address@hidden>
+
+       * net/eww.el (eww-render): Call `eww-after-render-hook' in the
+       correct buffer (bug#19225).
+
+2014-12-01  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/nsm.el (network-security-level): Change the default to `medium'.
+
+       * net/eww.el (eww): Leave point in a place that doesn't cause
+       scrolling when displaying "Loading...".
+
+2014-12-01  Eric S. Raymond  <address@hidden>
+
+       * vc/vc.el, vc/vc-cvs.el, vc/vc-rcs.el, vc/vc-svn.el: The 'merge'
+       backend method of RCS/CVS/SVN is now 'merge-file', to contrast with
+       'merge-branch'.  Prompting for merge revisions is pushed down to
+       the back ends; this fixes a layering violation that caused bad
+       behavior with SVN.
+
+       * vc/vc.el, vc-hooks.el: All backends: API simplification;
+       vc-stay-local-p and repository-hostname are no longer public
+       methods.  Only the CVS and SVN backends used these, and the SVN
+       support was conditioned out because svn status -v is too slow.
+       The CVS back end retains this machinery and the vc-stay-local
+       configuration variable now only affects it.
+
+2014-12-01  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/inline.el: New file.
+
+2014-12-01  Eric S. Raymond  <address@hidden>
+
+       * vc/vc.el, vc-hooks.el: All backends: API simplification;
+       vc-state-heuristic is no longer a public method, having been
+       removed where it is redundant, unnecessary, or known buggy.
+       This eliminated all backends except CVS.  Eliminates bug#7850.
+
+       * vc/vc-cvs.el, vc/vc-hooks.el, vc/vc-rcs.el, vc/vc-sccs.el:
+       Eliminate vc-mistrust-permissions.  It was only relevant to the
+       RCS and SCCS back ends and defaulted to t.  Code now always
+       mistrusts permissions - by actual measurement the effect on
+       performance is negligible.  As a side effect bug#11490 is now
+       irrelevant.
+
+       * vc/vc.el, vc-hooks.el: All backends: API simplification;
+       vc-workfile-unchanged-p is no longer a public method (but the RCS
+       and SCCS back ends retain it as a private method used in state
+       computation).  This method was redundant with vc-state and usually
+       implemented as a trivial call to same.  Fixes the failure mode
+       described in bug#694.
+
+       * vc/vc.el: All backends: API simplification; init-revision is
+       gone, and vc-registered functions no longer take an
+       initial-revision argument.
+
+2014-11-29  Glenn Morris  <address@hidden>
+
+       * vc/vc-src.el (vc-src, vc-src-diff-switches)
+       (vc-src-master-templates): Fix :version tags.
+
+2014-11-29  Paul Rankin  <address@hidden>  (tiny change)
+
+       * outline.el (outline-move-subtree-down): Refactor and improve code.
+
+2014-11-29  Stephen Berman  <address@hidden>
+           Stefan Monnier  <address@hidden>
+
+       * outline.el (outline-move-subtree-down): Make sure we can move
+       forward to find the end of the subtree and the insertion point
+       (bug#19102).
+
+2014-11-29  Fabián Ezequiel Gallina  <address@hidden>
+
+       * progmodes/python.el (python-shell-completion-setup-code):
+       Use __builtin__ module (or builtins in Python 3) and catch all errors
+       when importing readline and rlcompleter.
+
+2014-11-29  Stephen Berman  <address@hidden>
+
+       * calendar/todo-mode.el: Handle calling revert-buffer (bug#19187).
+       (todo-revert-buffer): New function.
+       (todo-modes-set-1): Use it as the buffer-local value of
+       revert-buffer-function.
+
+2014-11-29  Stephen Berman  <address@hidden>
+
+       * calendar/todo-mode.el (todo-mode): If called interactively, just
+       display a message saying to call todo-show to enter Todo mode
+       (Bug#19112).
+
+2014-11-29  Dmitry Gutov  <address@hidden>
+
+       * vc/vc-hg.el (vc-hg-dir-status-files): Include ignored files.
+       (Bug#18579)
+
+       * vc/vc-bzr.el (vc-bzr-after-dir-status): Don't skip ignored
+       files.  (Bug#18579)
+
+2014-11-29  Michael Albinus  <address@hidden>
+
+       * textmodes/makeinfo.el (makeinfo-buffer): Make it work also for
+       remote `buffer-file-name'.
+
+2014-11-29  Leo Liu  <address@hidden>
+
+       * calendar/diary-lib.el (calendar-mark-1): Fix thinko.
+
+2014-11-29  Fabián Ezequiel Gallina  <address@hidden>
+
+       Set PYTHONUNBUFFERED on shell startup.
+
+       * progmodes/python.el (python-shell-unbuffered): New var.
+       (python-shell-calculate-process-environment): Use it.
+
+2014-11-29  Michael Albinus  <address@hidden>
+
+       * net/tramp.el (tramp-action-password): Clean password on subsequent
+       attempts even if there was no wrong password indication.  (Bug#19047)
+
+       * net/tramp-sh.el (tramp-get-remote-locale): Return "LC_ALL=C" as
+       fallback.
+       (tramp-open-connection-setup-interactive-shell): No need to check
+       for nil as `tramp-get-remote-locale' return value.
+
+2014-11-29  Eli Zaretskii  <address@hidden>
+
+       * vc/vc-git.el (vc-git-command, vc-git--call):
+       Bind coding-system-for-read and coding-system-for-write to
+       vc-git-commits-coding-system.
+       (vc-git-previous-revision): Use "~1" instead of "^", since the
+       latter is a special character for MS-Windows system shells.
+
+2014-11-29  Michael Albinus  <address@hidden>
+
+       Improve XEmacs compatibility.
+
+       * net/tramp.el (tramp-autoload-file-name-handler):
+       Wrap `temporary-file-directory' by `symbol-value', it doesn't
+       exist in XEmacs.
+       (tramp-read-passwd): Don't use `with-timeout-suspend' and
+       `with-timeout-unsuspend' if they don't exist, like in XEmacs.
+       (tramp-time-less-p, tramp-time-subtract): Remove functions.
+       (tramp-handle-file-newer-than-file-p, tramp-time-diff):
+       * net/tramp-adb.el (tramp-adb-ls-output-time-less-p):
+       * net/tramp-cache.el (tramp-get-file-property):
+       * net/tramp-smb.el (tramp-smb-handle-insert-directory):
+       Use `time-less-p' and `time-subtract, respectively.
+
+       * net/tramp-adb.el (top): Do not require time-date.el.
+
+       * net/tramp-compat.el (top): Require time-date.el for XEmacs.
+
+       * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+       Check, whether `utf-8' is a valid coding system.
+
+2014-11-29  Eli Zaretskii  <address@hidden>
+
+       * vc/vc.el (vc-retrieve-tag): Doc fix.
+
+2014-11-28  Stefan Monnier  <address@hidden>
+
+       * simple.el (execute-extended-command--shorter): Fix the "M-p" case
+       (bug#19152).
+
+2014-11-28  Martin Rudalics  <address@hidden>
+
+       Fix two issues around help-window-select.  (Bug#11039) (Bug#19012)
+       * help.el (help-window-old-frame): New variable.
+       (help-window-select): Default to nil (Bug#11039).
+       Rewrite doc-string.
+       (help-window-setup): When the help window appears on another
+       frame and `help-window-select' is non-nil, give that frame input
+       focus too (Bug#19012).
+       (with-help-window): Store selected frame in
+       help-window-old-frame.
+
+2014-11-28  Ulf Jasper  <address@hidden>
+
+       * net/newst-treeview.el (newsticker--treeview-load): Take care of
+       nil value for `newsticker-groups-filename'.
+
+2014-11-28  Daiki Ueno  <address@hidden>
+
+       * epa.el (epa-sign-file, epa-encrypt-file, epa-decrypt-region)
+       (epa-sign-region, epa-encrypt-region):
+       Use `epg-context-set-{passphrase,progress}-callback', instead of
+       `setf'.  This partially reverts commit 9e48a95c (bug#19150).
+       Reported by José A. Romero L.
+
+2014-11-27  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-restore-history):
+       Bind `inhibit-modification-hooks' instead of `after-change-functions'.
+
+2014-11-27  Ulf Jasper  <address@hidden>
+
+       * net/newst-backend.el (newsticker--parse-atom-1.0):
+       Handle embedded (x)html in summary node.
+
+2014-11-27  Sam Steingold  <address@hidden>
+
+       * menu-bar.el (menu-bar-open): When everything else fails,
+       use (mouse-menu-bar-map).
+
+2014-11-27  Ulf Jasper  <address@hidden>
+
+       * net/newst-treeview.el (newsticker-groups-filename):
+       Change default value to nil.  Point out that variable is obsolete in doc
+       string.
+       (newsticker--treeview-load): Change wording of the questions the
+       user is asked when `newsticker-groups-filename' is found to be
+       used and we offer to read and remove the groups file.  (Bug#19165)
+
+2014-11-27  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww): Record the new URL immediately, so that if the
+       HTTP fetch fails, we have the right URL in the buffer.
+       (eww-process-text-input): Don't shorten the input field if
+       deleting at the last character (bug#19085).
+       (eww-restore-history): Inhibit change functions while restoring
+       the history.
+       (eww-process-text-input): Fix deletion at the start of the field, too.
+       (eww-mode): Revert mistanken removal of `buffer-disable-undo'.
+       (eww-process-text-input): Try to keep track of the size more reliably.
+
+       * dom.el (dom-pp): New function.
+
+2014-11-27  Eli Zaretskii  <address@hidden>
+
+       * vc/vc-bzr.el (vc-bzr-print-log, vc-bzr-expanded-log-entry):
+       Don't assume --long is the default for "bzr log", always specify
+       it explicitly, in case the user defined an alias for 'log' that
+       uses some other format.
+
+2014-11-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       * progmodes/python.el (python-eldoc--get-doc-at-point):
+       Strip shell output before returning.  (bug#18794)
+
+2014-11-27  Dmitry Gutov  <address@hidden>
+
+       Fix indentation before `!=' and after `+='.  Originally reported
+       in https://github.com/mooz/js2-mode/issues/174.
+       * progmodes/js.el (js--indent-operator-re): Make assignments and
+       (in)equality operator a separate case.
+       (js--continued-expression-p): Escape the second `+' in the regexp.
+
+2014-11-27  Stefan Monnier  <address@hidden>
+
+       * window.el (handle-select-window): Deactivate shift-region (bug#19003).
+
+2014-11-26  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/nsm.el (nsm-new-fingerprint-ok-p): Display the certificate
+       when querying about new certificates.
+
+       * net/shr.el (shr-make-table-1): dom.el changes for table rendering.
+
+       * dom.el (dom-by-tag): Use `equal' for comparisons so that tags
+       can be strings.
+       (dom-elements): Protect against non-text nodes.
+       (dom-non-text-children): New function.
+
+       * net/eww.el (eww-tag-title): Use `dom-text'.
+
+2014-11-26  Sam Steingold  <address@hidden>
+
+       * textmodes/sgml-mode.el (sgml-validate-command): Pass -utf8 to tidy.
+
+2014-11-26  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-highest-readability): More dom.el fixes.
+
+2014-11-26  Ulf Jasper  <address@hidden>
+
+       * net/newst-backend.el (newsticker--parse-generic-items):
+       Take care of UIDs when adding elements to cache.
+
+2014-11-26  Alan Mackenzie  <address@hidden>
+
+       Remove spurious reference to symbol category_properties.
+       * progmodes/cc-engine.el (c-state-pp-to-literal): Fix here.
+
+2014-11-26  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el: Use the new dom.el accessors throughout.
+
+       * net/shr.el: Ditto.
+
+       * dom.el: New file.
+
+2014-11-26  Glenn Morris  <address@hidden>
+
+       * arc-mode.el (archive-visit-single-files): Add :version.
+
+2014-11-25  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/nsm.el (nsm-format-certificate): Don't bug out on missing
+       elements.
+       (nsm-warnings-ok-p): The new version of this function always
+       returned nil when everything was OK.
+
+2014-11-25  Teodor Zlatanov  <address@hidden>
+
+       * net/gnutls.el (gnutls): Set :group to 'comm so it's near NSM.
+
+       * net/nsm.el (nsm-check-tls-connection, nsm-save-host)
+       (nsm-warnings-ok-p): Use `gnutls-peer-status-warning-describe'.
+
+2014-11-20  Nicolas Richard  <address@hidden>
+
+       * emacs-lisp/byte-run.el (function-put): Match argument names to
+       docstring.
+
+2014-11-24  Sam Steingold  <address@hidden>
+
+       * vc/vc-hooks.el (vc-directory-exclusion-list):
+       Fix a trivial typo (bug#19171).
+
+2014-11-24  Stefan Monnier  <address@hidden>
+
+       * vc/vc-hooks.el (vc-state-base-face): Don't override
+       mode-line-inactive.
+
+2014-11-24  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-set-character-encoding): Use `read-coding-system'.
+       (eww-process-text-input): Inhibit read only so that input fields
+       don't get shortened (bug#19085).
+
+2014-11-24  Leo Liu  <address@hidden>
+
+       * emacs-lisp/macroexp.el (macroexp-let2*): New macro.
+
+       * window.el (with-temp-buffer-window)
+       (with-current-buffer-window, with-displayed-buffer-window):
+       * emacs-lisp/cl-macs.el (cl--compiler-macro-adjoin):
+       * emacs-lisp/cl-lib.el (substring):
+       * emacs-lisp/cl-extra.el (cl-getf): Use it.
+
+2014-11-24  Eli Zaretskii  <address@hidden>
+
+       * isearch.el (isearch-update): Don't assume
+       pos-visible-in-window-p will return nil when point is hscrolled
+       out of view.  (Bug#19157)
+
+2014-11-20  Andrey Kotlarski  <address@hidden>
+
+       * net/eww.el (eww-browse-url): Optionally create new eww buffer.
+       (eww-follow-link): Follow in new buffer in case of prefix
+       argument, open externally with double prefix (bug#19130).
+
+2014-11-23  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-display-html): Decode the document-defined charset.
+       (eww): Pop to the *eww* buffer immediately after executing the
+       `M-x eww' command to avoid having buffers pop up later.
+       (eww-display-html): Don't pop the *eww* buffer.
+       (eww-display-raw): Ditto.
+       (eww-display-image): Ditto.
+       (eww-follow-link): Make going to #targets in the page work again.
+
+2014-11-23  Ivan Shmakov  <address@hidden>
+
+       * net/eww.el (eww-suggest-uris): New variable.
+       (eww-suggested-uris): New function.
+       (eww): Default to URL under point.
+       (eww-links-at-point): New function.
+
+2014-11-20  Mark Oteiza  <address@hidden>  (tiny change)
+
+       * net/eww.el (eww-add-bookmark): Fix bookmark titles.
+
+2014-11-17  Mark Oteiza  <address@hidden>  (tiny change)
+
+       * net/eww.el (eww-mode-map): Bind backtab to shr-previous-link.
+
+2014-11-23  Kenjiro Nakayama  <address@hidden>
+
+       * net/eww.el (eww-set-character-encoding): New command and keystroke.
+       (eww-display-raw): Use it (bug#16225).
+
+2014-11-23  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/nsm.el (network-security-level): Rename from
+       `nsm-security-level' and documented.
+
+       * mail/smtpmail.el (smtpmail-via-smtp): Warn unless encrypted and
+       we're sending a password.
+
+       * net/nsm.el: New file that implements a Network Security Manager.
+
+       * net/network-stream.el (open-network-stream): Add a new
+       :warn-unless-encrypted parameter.
+       (network-stream-open-plain): Allow warning unless encrypted.
+       (network-stream-open-starttls): Call the Network Security Manager.
+       (network-stream-open-tls): Ditto.
+
+2014-11-23  Leo Liu  <address@hidden>
+
+       * calendar/cal-china.el (calendar-chinese-from-absolute-for-diary)
+       (calendar-chinese-to-absolute-for-diary)
+       (calendar-chinese-mark-date-pattern, diary-chinese-anniversary):
+       Handle leap months in Chinese calendar.  (Bug#18953)
+
+2014-11-22  Alan Mackenzie  <address@hidden>
+
+       Fix error with `mark-defun' and "protected:" in C++ Mode.
+       Fixes: debbugs:19134.
+
+       * progmodes/cc-cmds.el (c-where-wrt-brace-construct): Handle a
+       return code of (label) from c-beginning-of-decl-1.
+
+2014-11-22  Ulf Jasper  <address@hidden>
+
+       * net/newst-backend.el (newsticker--sentinel-work):
+       Tell `libxml-parse-xml-region' to discard comments.  Fixes bug#18787.
+
+2014-11-22  Michael Albinus  <address@hidden>
+
+        * net/tramp-sh.el (tramp-sh-handle-start-file-process)
+       (tramp-sh-handle-process-file): Propagate `process-environment'.
+
+       * vc/vc-hg.el (vc-hg-state): No special handling for remote files;
+       Tramp propagates environment variables now.
+
+2014-11-22  Eric S. Raymond  <address@hidden>
+
+       * vc/vc-filewise.el: New file to isolate code used only by the
+       file-oriented back ends (SCCS/RCS/CVS/SRC) which should not
+       live in vc.el and certainly not in vc-hooks.el.
+
+       * vc/vc-hooks.el, vc-rcs.el, vc-sccs.el: vc-name  -> vc-master-name.
+       This is preparatory to isolating all the 'master' functions
+       used only by the file-oriented back ends.  With this done first,
+       the substantive diffs will be easier to read.
+
+2014-11-21  Rüdiger Sonderfeld  <address@hidden>
+
+       * play/morse.el (nato-alphabet): Mark URL in docstring in a way
+       that is recognized by `help-mode'.
+
+2014-11-21  Stefan Monnier  <address@hidden>
+
+       * desktop.el (desktop-create-buffer): Use activate-mark to set
+       `mark-active' (bug#19058).
+
+2014-11-21  Eric S. Raymond  <address@hidden>
+
+       * vc/vc-src.el (vc-src-state): Fix bug that produced spurious
+       nil state.
+
+2014-11-21  Eli Zaretskii  <address@hidden>
+
+       * vc/vc.el (vc-deduce-fileset): Support invocation from
+       *vc-change-log* buffer.  (Bug#19084)
+
+2014-11-13  Matthew Leach  <address@hidden>
+
+       * arc-mode.el (archive-visit-single-files): New.
+       (archive-mode): Visit file if archive contains a single file.
+       (Bug#1702)
+
+2014-11-21  Ulrich Müller  <address@hidden>
+
+       * vc/vc.el: Fix a typo in the commentary.
+
+2014-11-20  Eric S. Raymond  <address@hidden>
+
+       * vc/vc-src.el, vc/vc.el: Added support for SRC.  Needs more
+       testing and a real log-view mode.
+
+       * vc/vc-bzr.el, vc/vc-cvs.el, vc/vc-dav.el, vc/vc-git.el:
+       * vc/vc-hg.el, vc/vc-mtn.el, vc/vc-rcs.el, vc/vc-sccs.el:
+       * vc/vc-svn.el, vc/vc.el: Remove editable argument from the backend
+       checkout methods; where it matters (which is only in SCCS and RCS)
+       files are always checked out editable.  This may actually have
+       been dynamically true already - it looks like the vc-next-action
+       code evolved past visiting the other case.  Tested with RCS.
+
+       * vc/vc-arch.el, vc/vc-bzr.el, vc/vc-cvs.el, vc/vc-dav.el:
+       * vc/vc-git.el, vc/vc-hg.el, vc/vc-mtn.el, vc/vc-rcs.el:
+       * vc/vc-sccs.el, vc/vc-svn.el, vc/vc.el: Remove never-used rev
+       argument from the backend checkin methods.  Only the RCS, SCCS,
+       and CVS back ends tried to do anything with it, and that code was
+       never exercised.  Chiseling away the cruft of decades...
+
+2014-11-19  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-render): Remove a no-op :title setting.
+
+2014-11-19  Ivan Shmakov  <address@hidden>
+
+       * net/eww.el (eww-history-limit): New variable.
+       (eww-save-history): Use it (bug#19105).
+       (eww-reload): Reload the page in the right buffer.
+
+2014-11-19  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/eww.el (eww-desktop-misc-data): Use `cl-remove-duplicates'.
+
+2014-11-19  Ivan Shmakov  <address@hidden>
+
+       * net/eww.el (eww-desktop-remove-duplicates)
+       (eww-restore-desktop, eww-restore-reload-prompt): New variables.
+       (eww-mode): Set up desktop mode (bug#18010).
+       (eww-desktop-data-save, eww-desktop-data-1)
+       (eww-desktop-history-duplicate, eww-desktop-misc-data)
+       (eww-restore-desktop): New functions.
+
+2014-11-19  Eli Zaretskii  <address@hidden>
+
+       * vc/vc.el (vc-log-internal-common): Turn on log-view-mode in the
+       correct buffer.  (Bug#19101)
+
+2014-11-19  Rüdiger Sonderfeld  <address@hidden>
+
+       * vc/vc-git.el (vc-git-diff): Use "difftool -x diff" with
+       `diff-switches' if `vc-git-diff-switches' is nil.  (Bug#19099)
+
+2014-11-19  Artur Malabarba  <address@hidden>
+
+       * ido.el (ido-bury-buffer-at-head): New command.
+       (ido-buffer-completion-map): Bind it to C-S-b.
+
+2014-11-18  Juri Linkov  <address@hidden>
+
+       * simple.el (next-line-or-history-element): Wrap next-line
+       in with-no-warnings.
+       (previous-line-or-history-element): Wrap previous-line
+       in with-no-warnings.
+
+2014-11-18  Juri Linkov  <address@hidden>
+
+       * progmodes/grep.el (grep-compute-defaults):
+       Compute grep-highlight-matches before its use.
+
+2014-11-18  Juri Linkov  <address@hidden>
+
+       * replace.el (query-replace-from-to-separator): Turn defvar into
+       defcustom.  Wrap char-displayable-p in ignore-errors because an
+       attempt to autoload char-displayable-p fails during pre-loading.
+       Move (propertize "\0" ... 'separator t) out of customizable part
+       to query-replace-read-from.
+       (query-replace-read-from): Call custom-reevaluate-setting on
+       query-replace-from-to-separator to reevaluate the separator
+       depending on the return value of char-displayable-p.
+       http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg00466.html
+
+2014-11-18  Juri Linkov  <address@hidden>
+
+       * bindings.el (minibuffer-local-map): Rebind [down] from
+       next-history-element to next-line-or-history-element, and [up]
+       from previous-history-element to previous-line-or-history-element.
+
+       * simple.el (next-line-or-history-element)
+       (previous-line-or-history-element): New commands.
+       http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg00822.html
+
 2014-11-18  Leo Liu  <address@hidden>
 
        * emacs-lisp/nadvice.el (define-advice): New macro.
-       * emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression): Add
-       define-advice.
+       * emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression):
+       Add define-advice.
        (lisp-font-lock-keywords-1): Add define-advice.
 
 2014-11-18  Daiki Ueno  <address@hidden>
@@ -16,7 +3153,7 @@
 2014-11-18  Paul Eggert  <address@hidden>
 
        Port new time stamp handling to Emacs 23.2.
-       This fix is for Gnus.  Problem reported by Katsumi Yamaoka.
+       This fix is for Gnus.  Reported by Katsumi Yamaoka.
        * calendar/time-date.el (time-add, time-subtract, time-less-p):
        Use eval-and-compile, not eval-when-compile.
 
@@ -44,9 +3181,8 @@
 2014-11-18  Paul Pogonyshev  <address@hidden>
            Rüdiger Sonderfeld  <address@hidden>
 
-       Fix bug#13871 (an alternative version of the patch).
-       * progmodes/cc-langs.el: Support some of the new keywords in
-       C++11.
+       * progmodes/cc-langs.el: Support some of the new keywords in C++11.
+       An alternative version of the patch from bug#13871.
        (c-operators): Add "alignof".
        (c-primitive-type-kwds): Add "char16_t", "char32_t".
        (c-type-modifier-kwds): Add "constexpr", "noexcept".
@@ -81,26 +3217,25 @@
        immediately marked as obsolete, used to handle deprecated
        `tildify-ignored-environments-alist'.
 
-       * textmodes/tex-mode.el (tex-common-initialization): Set
-       `tildify-space-string' and `tildify-foreach-region-function'
+       * textmodes/tex-mode.el (tex-common-initialization):
+       Set `tildify-space-string' and `tildify-foreach-region-function'
        variables in all variants of TeX mode since `tildify-string-alist'
        and `tildify-ignored-environments-alist' are now empty by default.
 
-       * nxml/nxml-mode.el (nxml-mode): Ditto in `nxml-mode'.  If
-       encoding supports it use no-break space instead of character
+       * nxml/nxml-mode.el (nxml-mode): Ditto in `nxml-mode'.
+       If encoding supports it use no-break space instead of character
        entity; this changes previous default which used a numeric
        reference.
 
-       * textmodes/sgml-mode.el (sgml-mode): ditto in `sgml-mode'.  If
-       encoding does not support no-break space, use numeric reference;
+       * textmodes/sgml-mode.el (sgml-mode): ditto in `sgml-mode'.
+       If encoding does not support no-break space, use numeric reference;
        this changes previous default which used named entity (“&nbsp;”)
        in HTML mode.
 
 2014-11-17  Ulf Jasper  <address@hidden>
 
-       Fix bug#5433.
-       * calendar/icalendar.el (icalendar-export-alarms): New
-       customizable variable.
+       * calendar/icalendar.el (icalendar-export-alarms):
+       New customizable variable.  (Bug#5433)
        (icalendar-export-region): Export alarms as specified in
        `icalendar-export-alarms'.
        (icalendar--create-ical-alarm, icalendar--do-create-ical-alarm):
@@ -223,7 +3358,7 @@
 2014-11-16  Oscar Fuentes <address@hidden>
 
        Add faces for the VC modeline state indicator.
-       * lisp/vc/vc-hooks.el:
+       * vc/vc-hooks.el:
        (vc-state-faces, vc-state-base-face)
        (vc-up-to-date-state, vc-needs-update-state)
        (vc-locked-state, vc-locally-added-state)
@@ -917,9 +4052,9 @@
        * ses.el (macroexp): Add require for this package, so that function
        `ses--cell gets macroexp-quote.
        (ses--cell): Makes formula a macroexp-quote of value when formula
-       is nil. The rationale of this changr is to allow in the future
+       is nil.  The rationale of this changr is to allow in the future
        shorter SES files, e.g. we could have only `(ses-cell A1 1.0)'
-       instead of `(ses-cell A1 1.0 1.0 nil REFLIST)'. In such a case
+       instead of `(ses-cell A1 1.0 1.0 nil REFLIST)'.  In such a case
        reference list REFLIST would be re-computed after load --- thus
        trading off load time against file size.
 
@@ -1924,7 +5059,7 @@
        HTML code has become part of the xml parse tree.
        (newsticker--parse-rss-1.0, newsticker--parse-rss-2.0): Take care
        of possibly missing namespace prefixes.
-       (newsticker--parse-generic-items): Code formatting. Typo.
+       (newsticker--parse-generic-items): Code formatting.  Typo.
        (newsticker--images-dir): Add trailing slash.
        (newsticker--image-get): Fix error message.
 
@@ -2089,7 +5224,7 @@
        * vc/add-log.el (change-log-next-buffer): Don't create an empty
        buffer "ChangeLog" when the current buffer doesn't match 
ChangeLog.[0-9].
        Return the current buffer if no files match the default pattern
-       ChangeLog.[0-9].  Signal "end of multi" when file is nil. (Bug#18547)
+       ChangeLog.[0-9].  Signal "end of multi" when file is nil.  (Bug#18547)
 
 2014-09-25  Stefan Monnier  <address@hidden>
 
@@ -2227,7 +5362,7 @@
        * textmodes/reftex-sel.el (reftex-select-label-mode)
        (reftex-select-bib-mode, reftex-insert-docstruct): Derive modes
        from special-mode (instead of fundamental-mode) and propertize
-       with font-lock-face instead of just face. (Bug#18496)
+       with font-lock-face instead of just face.  (Bug#18496)
 
        * textmodes/reftex-toc.el (reftex-toc-mode, reftex-toc): Ditto.
 
@@ -2621,7 +5756,7 @@
        of local overrides.
        (ibuffer): Don't store previous windows configuration.
        Let `quit-window' handle restoring.
-       (ibuffer-quit): Remove function. Use `quit-window' instead.
+       (ibuffer-quit): Remove function.  Use `quit-window' instead.
        (ibuffer-restore-window-config-on-quit): Remove variable.
        (ibuffer-prev-window-config): Remove variable.
 
@@ -2731,8 +5866,7 @@
        (c-typeless-decl-kwds): Append "auto" onto the C++ value.
        (c-not-decl-init-keywords): Also exclude c-typeof-kwds from value.
 
-       Make ">>" act as double template ender in C++ Mode.  Fix
-       bug#11386.
+       Make ">>" act as double template ender in C++ Mode.  (Bug#11386)
        * progmodes/cc-langs.el (c->-op-cont-tokens): New lang-const split
        off from c->-op-cont-re.
        (c->-op-cont-tokens): Change to use the above.
@@ -2876,10 +6010,10 @@
 
 2014-08-11  Ulf Jasper  <address@hidden>
 
-       Newsticker: introduce `newsticker-treeview-date-format'. (Bug#17227)
-
+       Newsticker: introduce `newsticker-treeview-date-format'.  (Bug#17227)
        * net/newst-treeview.el (newsticker-treeview-date-format): New.
-       (newsticker--treeview-list-add-item): Use 
`newsticker-treeview-date-format'.
+       (newsticker--treeview-list-add-item):
+       Use `newsticker-treeview-date-format'.
 
 2014-08-11  Glenn Morris  <address@hidden>
 
@@ -3088,7 +6222,7 @@
 2014-07-30  Christophe Deleuze  <address@hidden>  (tiny change)
 
        * calendar/icalendar.el (icalendar--decode-isodatetime):
-       Use actual current-time-zone when converting to local time. (Bug#15408)
+       Use actual current-time-zone when converting to local time.  (Bug#15408)
 
 2014-07-29  Martin Rudalics  <address@hidden>
 
@@ -3180,12 +6314,6 @@
 
 2014-07-28  Fabián Ezequiel Gallina  <address@hidden>
 
-       Prevent Python process shell buffer to pop twice.
-       * progmodes/python.el (python-shell-switch-to-shell): Do not call
-       pop-to-buffer.
-
-2014-07-28  Fabián Ezequiel Gallina  <address@hidden>
-
        * progmodes/python.el
        (python-shell-with-shell-buffer): New macro.
        (python-shell-font-lock-get-or-create-buffer)
@@ -3477,7 +6605,7 @@
 
 2014-07-12  Fabián Ezequiel Gallina  <address@hidden>
 
-       Fix dedenters and electric colon handling. (Bug#15163)
+       Fix dedenters and electric colon handling.  (Bug#15163)
        * progmodes/python.el
        (python-rx-constituents): Add dedenter and block-ender.
        (python-indent-dedenters, python-indent-block-enders): Delete.
@@ -3725,7 +6853,7 @@
 
        * progmodes/python.el (python-indent-post-self-insert-function):
        Enhancements to electric indentation behavior inside
-       parens. (Bug#17658)
+       parens.  (Bug#17658)
 
 2014-07-03  Stefan Monnier  <address@hidden>
 
@@ -4165,7 +7293,7 @@
        (bug#17818).
 
        * mouse.el (mouse-drag-line): Don't re-add to unread-comment-events,
-       since it's already done inside the loop (bug#17819).
+       since it's already done inside the loop (bug#17819).
 
 2014-06-21  Martin Rudalics  <address@hidden>
 
@@ -4516,7 +7644,7 @@
        * help.el (help--key-binding-keymap): New function.
        (help--binding-locus): New function.
        (describe-key): Mention the keymap in which the binding was
-       found. (bug#13948)
+       found.  (bug#13948)
 
 2014-06-12  Stefan Monnier  <address@hidden>
 
@@ -5197,7 +8325,7 @@
 2014-05-24  Daniel Colascione  <address@hidden>
 
        * progmodes/subword.el (subword-find-word-boundary): Move point to
-       correct spot before search. (Bug#17580)
+       correct spot before search.  (Bug#17580)
 
        * emacs-lisp/nadvice.el (defun): Write in eval-and-compile to avoid
        breaking the build.
@@ -5226,7 +8354,7 @@
        mksh. Improve custom spec; allow regular expressions.
        (sh-shell): Delegate name splitting to `sh-canonicalize-shell'.
        (sh-after-hack-local-variables): New function.
-       (sh-mode): Use it; respect file-local `sh-shell' variable. (bug#17333)
+       (sh-mode): Use it; respect file-local `sh-shell' variable.  (Bug#17333)
        (sh-set-shell): Use `sh-canonicalize-shell' instead of open-coding
        the normalization.
        (sh-canonicalize-shell): Rewrite to support regexes.
@@ -5273,7 +8401,7 @@
        * vc/emerge.el (emerge-make-temp-file): Simplify.
 
 2014-05-14  Stephen Berman <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * minibuffer.el (completion-pcm--merge-try): Merge trailing / with
        suffix (bug#15419).
@@ -6214,7 +9342,7 @@
 2014-04-07  João Távora  <address@hidden>
 
        Fix `electric-pair-delete-adjacent-pairs' in modes binding
-       backspace. (bug#16981)
+       backspace.  (Bug#16981)
        * elec-pair.el (electric-pair-backward-delete-char): Delete.
        (electric-pair-backward-delete-char-untabify): Delete.
        (electric-pair-mode-map): Bind backspace to a menu item filtering
@@ -20984,7 +24112,7 @@ See ChangeLog.16 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2014 Free Software Foundation, Inc.
+  Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.1 b/lisp/ChangeLog.1
index 3b10baf..582b7fa 100644
--- a/lisp/ChangeLog.1
+++ b/lisp/ChangeLog.1
@@ -3244,7 +3244,7 @@
                Set current buffer variables from defaults
                in case user's init file has changed them.
 
-  Copyright (C) 1985-1986, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1985-1986, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.10 b/lisp/ChangeLog.10
index bcd2dac..82d9bf2 100644
--- a/lisp/ChangeLog.10
+++ b/lisp/ChangeLog.10
@@ -8452,7 +8452,7 @@
 
        * vc-sccs.el (vc-sccs-registered): Improve comment.
 
-2002-11-13  Tim Van Holder  <address@hidden>  (tiny change)
+2002-11-13  Tim Van Holder  <address@hidden>
 
        * progmodes/compile.el (compilation-error-regexp-alist):
        Don't include colon and space after a file name as part of the name.
@@ -23541,7 +23541,7 @@ See ChangeLog.9 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.11 b/lisp/ChangeLog.11
index eee8b91..b3cdfa0 100644
--- a/lisp/ChangeLog.11
+++ b/lisp/ChangeLog.11
@@ -14321,7 +14321,7 @@ See ChangeLog.10 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2003-2011, 2013-2014 Free Software Foundation, Inc.
+  Copyright (C) 2003-2011, 2013-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.12 b/lisp/ChangeLog.12
index 5699c90..968658c 100644
--- a/lisp/ChangeLog.12
+++ b/lisp/ChangeLog.12
@@ -32494,7 +32494,7 @@
        (bibtex-field-list, bibtex-find-crossref): Fix typos in error messages.
 
 2005-01-24  Dan Nicolaescu  <address@hidden>
-            Juri Linkov  <address@hidden>
+           Juri Linkov  <address@hidden>
 
        * textmodes/reftex-global.el (reftex-isearch-push-state-function)
        (reftex-isearch-pop-state-function, reftex-isearch-isearch-search)
@@ -33334,7 +33334,7 @@ See ChangeLog.11 for earlier changes.
 ;; add-log-time-zone-rule: t
 ;; End:
 
-    Copyright (C) 2005-2014 Free Software Foundation, Inc.
+    Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.13 b/lisp/ChangeLog.13
index f6bdc43..e88b8a9 100644
--- a/lisp/ChangeLog.13
+++ b/lisp/ChangeLog.13
@@ -3984,7 +3984,7 @@
        * ibuffer.el (ibuffer-mode): Fix typo in previous change.
 
 2008-01-17  Vinicius Jose Latorre  <address@hidden>
-            Miles Bader  <address@hidden>
+           Miles Bader  <address@hidden>
 
        * blank-mode.el: New file.  Minor mode to visualize (HARD) SPACE,
        TAB, NEWLINE.  Miles Bader <address@hidden> wrote the original code
@@ -5480,7 +5480,7 @@
        (verilog-insert-indices): Escape braces in doc strings.
 
 2007-12-08  Michael McNamara  <address@hidden>
-            Wilson Snyder  <address@hidden>
+           Wilson Snyder  <address@hidden>
 
        * progmodes/verilog-mode.el: New file.
 
@@ -13486,7 +13486,7 @@
        Use native Emacs functions, when appropriate.
 
 2007-08-01  Dan Nicolaescu  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * vc.el: Document new VC operation `extra-menu'.
 
@@ -16697,7 +16697,7 @@ See ChangeLog.12 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2007-2014 Free Software Foundation, Inc.
+  Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.14 b/lisp/ChangeLog.14
index 3c2a7ff..a4f3f2f 100644
--- a/lisp/ChangeLog.14
+++ b/lisp/ChangeLog.14
@@ -3016,12 +3016,12 @@
        Don't activate node nil.  (Bug#1569)
 
 2009-01-22  Paul Reilly  <address@hidden>
-            Henrik Enberg  <address@hidden>
-            Alex Schroeder  <address@hidden>
-            Chong Yidong  <address@hidden>
-            Richard M Stallman  <address@hidden>
-            Glenn Morris  <address@hidden>
-            Juanma Barranquero  <address@hidden>
+           Henrik Enberg  <address@hidden>
+           Alex Schroeder  <address@hidden>
+           Chong Yidong  <address@hidden>
+           Richard M Stallman  <address@hidden>
+           Glenn Morris  <address@hidden>
+           Juanma Barranquero  <address@hidden>
 
        * mail/rmail.el: Code implementing Rmail-mbox functionality.
        (rmail-attribute-header, rmail-keyword-header)
@@ -4314,7 +4314,7 @@
        was orderly adjusted, nil otherwise.
 
 2008-12-12  Juanma Barranquero  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * server.el (server-sentinel): Uncomment code to delete connection file.
        (server-start): Save the connection file in the server property list.
@@ -4373,7 +4373,7 @@
        terminal variable assignment.
 
 2008-12-10  Yukihiro Matsumoto  <address@hidden>
-            Nobuyoshi Nakada  <address@hidden>
+           Nobuyoshi Nakada  <address@hidden>
 
        * progmodes/ruby-mode.el: New file.
 
@@ -5603,7 +5603,7 @@
        New aliases, to satisfy `define-derived-mode' expectations.
 
 2008-11-15  Glenn Morris  <address@hidden>
-            Martin Rudalics  <address@hidden>
+           Martin Rudalics  <address@hidden>
 
        * emacs-lisp/find-func.el (find-function-advised-original): New.
        (find-function-C-source, find-function-noselect):
@@ -10312,8 +10312,8 @@
        (newsticker--treeview-propertize-tag): Show item title in tooltip.
 
 2008-06-20  Martin Blais  <address@hidden>
-            Stefan Merten  <address@hidden>
-            David Goodger  <address@hidden>
+           Stefan Merten  <address@hidden>
+           David Goodger  <address@hidden>
 
        * textmodes/rst.el: New file.
 
@@ -10631,7 +10631,7 @@
        * term/linux.el (terminal-init-linux): Load t-mouse.
 
 2008-06-13  Stefan Monnier  <address@hidden>
-            Drew Adams  <address@hidden>
+           Drew Adams  <address@hidden>
 
        * info.el (Info-breadcrumbs-depth): New var.
        (Info-insert-breadcrumbs): New function.
@@ -18798,7 +18798,7 @@
        for useful options.
 
 2008-03-01  Dan Nicolaescu  <address@hidden>
-            Glenn Morris  <address@hidden>
+           Glenn Morris  <address@hidden>
 
        * emacs-lisp/bytecomp.el (byte-recompile-directory)
        (byte-compile-file, batch-byte-compile, batch-byte-compile-file):
@@ -20547,7 +20547,7 @@ See ChangeLog.13 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 2008-2014 Free Software Foundation, Inc.
+    Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.15 b/lisp/ChangeLog.15
index 9c793ff..9adac3c 100644
--- a/lisp/ChangeLog.15
+++ b/lisp/ChangeLog.15
@@ -628,7 +628,7 @@
        (global-auto-revert-ignore-buffer): Remove leading "*" from docs.
 
 2011-02-19  Dmitry Bolshakov  <address@hidden>
-            Dima Kogan  <address@hidden>  (tiny change)
+           Dima Kogan  <address@hidden>  (tiny change)
 
        * progmodes/hideshow.el (hs-find-block-beginning)
        (hs-hide-level-recursive): Ignore comments when parsing braces
@@ -2970,7 +2970,7 @@
        * loadup.el (symbol-file-load-history-loaded): Remove; unused.
 
 2010-12-15  Jari Aalto  <address@hidden>
-            Scott Evans  <address@hidden>
+           Scott Evans  <address@hidden>
 
        * rect.el (rectange--default-line-number-format)
        (rectangle-number-line-callback): New functions.
@@ -7986,7 +7986,7 @@
        * iswitchb.el (iswitchb-kill-buffer): Re-make the list.
 
 2010-08-22  Kirk Kelsey  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * progmodes/make-mode.el (makefile-fill-paragraph): Account for the
        extra backslash added to each line (bug#6890).
@@ -9002,7 +9002,7 @@
        another buffer (e.g gnus-art).
 
 2010-07-13  Karl Fogel  <address@hidden>
-            Thierry Volpiatto  <address@hidden>
+           Thierry Volpiatto  <address@hidden>
 
        Preparation for setting bookmarks in Gnus article buffers (Bug#5975).
 
@@ -10301,7 +10301,7 @@
        (rcirc-user-name-history): Add variable.
 
 2010-05-25  Ryan Yeske  <address@hidden>
-            Jonathan Rockway  <address@hidden>
+           Jonathan Rockway  <address@hidden>
 
        * net/rcirc.el (rcirc-server-alist): Add :pass.
        (rcirc): When prompting for connection parameters, also prompt for
@@ -10969,7 +10969,7 @@
        * Version 23.2 released.
 
 2010-05-07  Deniz Dogan  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        Highlight vendor specific properties.
        * textmodes/css-mode.el (css-proprietary-nmstart-re): New var.
@@ -11162,7 +11162,7 @@
        (filter-buffer-substring): Use it.  Remove unused arg `noprops'.
 
 2010-05-01  Toru TSUNEYOSHI  <address@hidden>
-            Michael Albinus  <address@hidden>
+           Michael Albinus  <address@hidden>
 
        Implement compression for inline methods.
 
@@ -12209,7 +12209,7 @@
        values.
 
 2010-03-29  Phil Hagelberg  <address@hidden>
-            Chong Yidong  <address@hidden>
+           Chong Yidong  <address@hidden>
 
        * subr.el: Extend progress reporters to perform "spinning".
        (progress-reporter-update, progress-reporter-do-update):
@@ -15603,7 +15603,7 @@
        * Makefile.in (ELCFILES): Adapt to subword.el move.
 
 2009-11-21  Thierry Volpiatto  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * bookmark.el (bookmark-bmenu-bookmark-column): Remove var.
        (bookmark-bmenu-list): Save name on `bookmark-name-prop' text-prop.
@@ -19070,7 +19070,7 @@
        indent buffer only if called interactively (Bug#4452).
 
 2009-09-19  Juanma Barranquero  <address@hidden>
-            Eli Zaretskii  <address@hidden>
+           Eli Zaretskii  <address@hidden>
 
        This fixes bug#4197 (merged to bug#865, though not identical).
        * server.el (server-auth-dir): Add docstring note about FAT32.
@@ -19887,7 +19887,7 @@
        Don't call substitute-in-file-name on diary-file.
 
 2009-09-03  Eduard Wiebe  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * mail/footnote.el (footnote-prefix): Make it a defcustom.
        (footnote-mode-map): Move initialization into the declaration.
@@ -20998,7 +20998,7 @@
        * progmodes/hideshow.el (hs-special-modes-alist): Add js-mode entry.
 
 2009-08-14  Daniel Colascione  <address@hidden>
-            Karl Landstrom  <address@hidden>
+           Karl Landstrom  <address@hidden>
 
        * progmodes/js.el: New file.
 
@@ -22765,7 +22765,7 @@
        XZ is the successor to LZMA: <http://tukaani.org/xz/>
 
 2009-06-22  Dmitry Dzhus  <address@hidden>
-            Nick Roberts  <address@hidden>
+           Nick Roberts  <address@hidden>
 
        * progmodes/gdb-mi.el: Pull further modified changes from Dmitry's
        repository (http://sphinx.net.ru/hg/gdb-mi/).
@@ -22802,7 +22802,7 @@ See ChangeLog.14 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2009-2014 Free Software Foundation, Inc.
+  Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.16 b/lisp/ChangeLog.16
index 42f3a3b..14ee914 100644
--- a/lisp/ChangeLog.16
+++ b/lisp/ChangeLog.16
@@ -3340,7 +3340,7 @@
        already registered with a different backend (Bug#10589).
 
 2012-11-29  Jambunathan K  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * icomplete.el: Change separator; add ido-style commands.
        (icomplete-show-key-bindings): Remove custom var.
@@ -4571,7 +4571,7 @@
        to `bookmark' (bug#11131).
 
 2012-10-26  Bastien Guerry  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * face-remap.el: Use lexical-binding.
        (text-scale-adjust): Improve docstring.  Use itself for the temporary
@@ -5879,7 +5879,7 @@
        * international/uni-numeric.el: Regenerate.
 
 2012-09-26  Tomohiro Matsuyama  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * profiler.el: New file.
 
@@ -25224,7 +25224,7 @@ See ChangeLog.15 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2014 Free Software Foundation, Inc.
+  Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.2 b/lisp/ChangeLog.2
index e1e5aa1..e91122a 100644
--- a/lisp/ChangeLog.2
+++ b/lisp/ChangeLog.2
@@ -3992,7 +3992,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-    Copyright (C) 1986-1988, 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 1986-1988, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.3 b/lisp/ChangeLog.3
index c9bd4e7..d8077e1 100644
--- a/lisp/ChangeLog.3
+++ b/lisp/ChangeLog.3
@@ -12433,7 +12433,7 @@ See ChangeLog.2 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 1989, 1993, 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 1989, 1993, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.4 b/lisp/ChangeLog.4
index 434a06c..a02a2cc 100644
--- a/lisp/ChangeLog.4
+++ b/lisp/ChangeLog.4
@@ -8934,7 +8934,7 @@ See ChangeLog.3 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.5 b/lisp/ChangeLog.5
index caa3546..85f8fc1 100644
--- a/lisp/ChangeLog.5
+++ b/lisp/ChangeLog.5
@@ -9268,7 +9268,7 @@ See ChangeLog.4 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 1994-1995, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.6 b/lisp/ChangeLog.6
index dc27221..c140cb5 100644
--- a/lisp/ChangeLog.6
+++ b/lisp/ChangeLog.6
@@ -3687,7 +3687,7 @@
        When changing the environment, avoid need for setenv.
 
 1996-01-05  Karl Eichwalder  <address@hidden>
-            Karl Fogel  <address@hidden>
+           Karl Fogel  <address@hidden>
 
        * bookmark.el: "cyclic.com" addresses changed to "red-bean.com".
        (bookmark-bmenu-mode-map): Don't bind C-k.
@@ -8021,7 +8021,7 @@ See ChangeLog.5 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 1995-1996, 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 1995-1996, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.7 b/lisp/ChangeLog.7
index 093f467..816f614 100644
--- a/lisp/ChangeLog.7
+++ b/lisp/ChangeLog.7
@@ -2749,7 +2749,7 @@
        * abbrev.el: Likewise.
 
 1998-05-26  Emilio Lopes  <address@hidden>
-            Karl Fogel  <address@hidden>
+           Karl Fogel  <address@hidden>
 
        * bookmark.el: Changes so bookmark list mode works with Info:
        (bookmark-jump-noselect): Use an inner save-window-excursion.
@@ -23110,7 +23110,7 @@ See ChangeLog.6 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-       Copyright (C) 1997-1998, 2001-2014 Free Software Foundation,
+       Copyright (C) 1997-1998, 2001-2015 Free Software Foundation,
        Inc.
 
   This file is part of GNU Emacs.
diff --git a/lisp/ChangeLog.8 b/lisp/ChangeLog.8
index f10939e..df0188d 100644
--- a/lisp/ChangeLog.8
+++ b/lisp/ChangeLog.8
@@ -9992,7 +9992,7 @@ See ChangeLog.7 for earlier changes.
 ;; add-log-time-zone-rule: t
 ;; End:
 
-    Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.9 b/lisp/ChangeLog.9
index 5832e6e..d56f90d 100644
--- a/lisp/ChangeLog.9
+++ b/lisp/ChangeLog.9
@@ -20685,7 +20685,7 @@ See ChangeLog.8 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 2000-2011, 2013-2014 Free Software Foundation, Inc.
+    Copyright (C) 2000-2011, 2013-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 84d92c2..7bf5386 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -28,6 +28,19 @@ VPATH = $(srcdir)
 # limitation.
 XARGS_LIMIT = @XARGS_LIMIT@
 
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_ELC = $(address@hidden@)
+am__v_ELC_ = $(address@hidden@)
+am__v_ELC_0 = @echo "  ELC     " $@;
+am__v_ELC_1 =
+
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
 # You can specify a different executable on the make command line,
 # e.g. "make EMACS=../src/emacs ...".
 
@@ -137,7 +150,8 @@ setwins_for_subdirs=for file in `find ${srcdir} -type d 
-print`; do \
 # we add them here to make sure they get built.
 all: compile-main $(lisp)/cus-load.el $(lisp)/finder-inf.el
 
-.PHONY: all custom-deps finder-data autoloads update-subdirs
+PHONY_EXTRAS =
+.PHONY: all custom-deps finder-data autoloads update-subdirs $(PHONY_EXTRAS)
 
 # custom-deps and finder-data both used to scan _all_ the *.el files.
 # This could lead to problems in parallel builds if automatically
@@ -153,19 +167,20 @@ all: compile-main $(lisp)/cus-load.el 
$(lisp)/finder-inf.el
 # Nowadays these commands don't scan automatically generated files,
 # since they will never contain any useful information
 # (see finder-no-scan-regexp and custom-dependencies-no-scan-regexp).
-$(lisp)/cus-load.el:
-       $(MAKE) custom-deps
 custom-deps:
-       $(setwins_almost); \
+       $(AM_V_at)$(MAKE) PHONY_EXTRAS=$(lisp)/cus-load.el $(lisp)/cus-load.el
+$(lisp)/cus-load.el:
+       $(AM_V_GEN)$(setwins_almost); \
        echo Directories: $$wins; \
        $(emacs) -l cus-dep \
          --eval '(setq generated-custom-dependencies-file (unmsys--file-name 
"$(srcdir)/cus-load.el"))' \
          -f custom-make-dependencies $$wins
 
-$(lisp)/finder-inf.el:
-       $(MAKE) finder-data
 finder-data:
-       $(setwins_finder); \
+       $(AM_V_at)$(MAKE) PHONY_EXTRAS=$(lisp)/finder-inf.el \
+         $(lisp)/finder-inf.el
+$(lisp)/finder-inf.el:
+       $(AM_V_GEN)$(setwins_finder); \
        echo Directories: $$wins; \
        $(emacs) -l finder \
          --eval '(setq generated-finder-keywords-file (unmsys--file-name 
"$(srcdir)/finder-inf.el"))' \
@@ -177,21 +192,22 @@ finder-data:
 # Note that we set no-update-autoloads in _generated_ leim files.
 # If you want to allow autoloads in such files, remove that,
 # and make this depend on leim.
-autoloads: $(LOADDEFS)
-       $(setwins_almost); \
+autoloads .PHONY: $(lisp)/loaddefs.el
+$(lisp)/loaddefs.el: $(LOADDEFS)
+       $(AM_V_GEN)$(setwins_almost); \
        echo Directories: $$wins; \
        $(emacs) -l autoload \
            --eval '(setq autoload-ensure-writable t)' \
            --eval '(setq autoload-builtin-package-versions t)' \
-           --eval '(setq generated-autoload-file (expand-file-name 
(unmsys--file-name "$(srcdir)/loaddefs.el")))' \
+           --eval '(setq generated-autoload-file (expand-file-name 
(unmsys--file-name "$@")))' \
            -f batch-update-autoloads $$wins
 
 # This is required by the bootstrap-emacs target in ../src/Makefile, so
 # we know that if we have an emacs executable, we also have a subdirs.el.
 $(lisp)/subdirs.el:
-       $(MAKE) update-subdirs
+       $(AM_V_GEN)$(MAKE) update-subdirs
 update-subdirs:
-       $(setwins_for_subdirs); \
+       $(AM_V_at)$(setwins_for_subdirs); \
        for file in $$wins; do \
           $(srcdir)/../build-aux/update-subdirs $$file; \
        done;
@@ -249,12 +265,10 @@ TAGS: $(lisptagsfiles1) $(lisptagsfiles2) 
$(lisptagsfiles3) $(lisptagsfiles4)
 # src/Makefile.in to rebuild a particular Lisp file, no questions asked.
 # Use byte-compile-refresh-preloaded to try and work around some of
 # the most common problems of not bootstrapping from a clean state.
-.PHONY: compile-onefile
-compile-onefile:
-       @echo Compiling $(THEFILE)
-       @# Use byte-compile-refresh-preloaded to try and work around some of
-       @# the most common bootstrapping problems.
-       @$(emacs) $(BYTE_COMPILE_FLAGS) \
+THEFILE = no-such-file
+.PHONY: $(THEFILE)c
+$(THEFILE)c:
+       $(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) \
                -l bytecomp -f byte-compile-refresh-preloaded \
                -f batch-byte-compile $(THEFILE)
 
@@ -270,12 +284,7 @@ compile-onefile:
 # An old-fashioned suffix rule, which, according to the GNU Make manual,
 # cannot have prerequisites.
 .el.elc:
-       @echo Compiling $<
-       @# The BIG_STACK_OPTS are only needed to byte-compile the byte-compiler
-       @# files, which is normally done in compile-first, but may also be
-       @# recompiled via this rule.
-       @$(emacs) $(BYTE_COMPILE_FLAGS) \
-               -f batch-byte-compile $<
+       $(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) -f batch-byte-compile $<
 
 .PHONY: compile-first compile-main compile compile-always
 
@@ -325,13 +334,8 @@ compile-clean:
 leim:
        $(MAKE) -C ../leim all EMACS="$(EMACS)"
 
-# FIXME.  Yuck.
 semantic:
-       case ${EMACS} in \
-         .*) EMACS="../${EMACS}" ;; \
-          *) EMACS="${EMACS}" ;; \
-       esac; \
-       $(MAKE) -C ../admin/grammars all EMACS="$${EMACS}"
+       $(MAKE) -C ../admin/grammars all EMACS="$(EMACS:.%=../.%)"
 
 # Compile all Lisp files, but don't recompile those that are up to
 # date.  Some .el files don't get compiled because they set the
@@ -401,7 +405,7 @@ MH_E_SRC = $(MH_E_DIR)/mh-acros.el $(MH_E_DIR)/mh-alias.el  
  \
 .PHONY: mh-autoloads
 mh-autoloads: $(MH_E_DIR)/mh-loaddefs.el
 $(MH_E_DIR)/mh-loaddefs.el: $(MH_E_SRC)
-       $(emacs) -l autoload \
+       $(AM_V_GEN)$(emacs) -l autoload \
           --eval "(setq generate-autoload-cookie \";;;###mh-autoload\")" \
           --eval "(setq generated-autoload-file (expand-file-name 
(unmsys--file-name \"address@hidden")))" \
           -f batch-update-autoloads $(MH_E_DIR)
@@ -418,7 +422,7 @@ TRAMP_SRC = $(TRAMP_DIR)/tramp.el    
$(TRAMP_DIR)/tramp-adb.el      \
        $(TRAMP_DIR)/tramp-uu.el     $(TRAMP_DIR)/trampver.el
 
 $(TRAMP_DIR)/tramp-loaddefs.el: $(TRAMP_SRC)
-       $(emacs) -l autoload \
+       $(AM_V_GEN)$(emacs) -l autoload \
           --eval "(setq generate-autoload-cookie \";;;###tramp-autoload\")" \
           --eval "(setq generated-autoload-file (expand-file-name 
(unmsys--file-name \"address@hidden")))" \
           -f batch-update-autoloads $(TRAMP_DIR)
@@ -439,19 +443,19 @@ CAL_SRC = $(CAL_DIR)/cal-bahai.el $(CAL_DIR)/cal-china.el 
 \
        $(CAL_DIR)/solar.el
 
 $(CAL_DIR)/cal-loaddefs.el: $(CAL_SRC)
-       $(emacs) -l autoload \
+       $(AM_V_GEN)$(emacs) -l autoload \
           --eval "(setq generate-autoload-cookie \";;;###cal-autoload\")" \
           --eval "(setq generated-autoload-file (expand-file-name 
(unmsys--file-name \"address@hidden")))" \
           -f batch-update-autoloads $(CAL_DIR)
 
 $(CAL_DIR)/diary-loaddefs.el: $(CAL_SRC) $(CAL_DIR)/cal-loaddefs.el
-       $(emacs) -l autoload \
+       $(AM_V_GEN)$(emacs) -l autoload \
           --eval "(setq generate-autoload-cookie \";;;###diary-autoload\")" \
           --eval "(setq generated-autoload-file (expand-file-name 
(unmsys--file-name \"address@hidden")))" \
           -f batch-update-autoloads $(CAL_DIR)
 
 $(CAL_DIR)/hol-loaddefs.el: $(CAL_SRC) $(CAL_DIR)/diary-loaddefs.el
-       $(emacs) -l autoload \
+       $(AM_V_GEN)$(emacs) -l autoload \
           --eval "(setq generate-autoload-cookie \";;;###holiday-autoload\")" \
           --eval "(setq generated-autoload-file (expand-file-name 
(unmsys--file-name \"address@hidden")))" \
           -f batch-update-autoloads $(CAL_DIR)
@@ -472,6 +476,11 @@ maintainer-clean: distclean bootstrap-clean
 check-declare:
        $(emacs) -l check-declare --eval '(check-declare-directory "$(lisp)")'
 
+check-defun-dups:
+       sed -n -e '/^(defun /s/\(.\)(.*/\1/p' \
+               $$(find . -name '*.el' -print | grep -v 'loaddefs\.el') \
+           | sort | uniq -d
+
 # Dependencies
 
 ## None of the following matters for bootstrap, which is the only way
diff --git a/lisp/abbrev.el b/lisp/abbrev.el
index 9e11ada..7aa46e0 100644
--- a/lisp/abbrev.el
+++ b/lisp/abbrev.el
@@ -1,6 +1,6 @@
 ;;; abbrev.el --- abbrev mode commands for Emacs -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1992, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1992, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/align.el b/lisp/align.el
index 0e6b84d..82a55b0 100644
--- a/lisp/align.el
+++ b/lisp/align.el
@@ -1,6 +1,6 @@
 ;;; align.el --- align text to a specific column, by regexp -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/allout-widgets.el b/lisp/allout-widgets.el
index 25abf3f..164cd31 100644
--- a/lisp/allout-widgets.el
+++ b/lisp/allout-widgets.el
@@ -1,6 +1,6 @@
 ;; allout-widgets.el --- Visually highlight allout outline structure.
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Ken Manheimer <ken dot manheimer at gmail...>
 ;; Maintainer: Ken Manheimer <ken dot manheimer at gmail...>
diff --git a/lisp/allout.el b/lisp/allout.el
index 288fb71..689bed5 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -1,6 +1,6 @@
 ;;; allout.el --- extensive outline mode for use alone and with other modes
 
-;; Copyright (C) 1992-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Ken Manheimer <ken dot manheimer at gmail...>
 ;; Maintainer: Ken Manheimer <ken dot manheimer at gmail...>
diff --git a/lisp/ansi-color.el b/lisp/ansi-color.el
index 4a18c05..5088c3d 100644
--- a/lisp/ansi-color.el
+++ b/lisp/ansi-color.el
@@ -1,6 +1,6 @@
 ;;; ansi-color.el --- translate ANSI escape sequences into faces -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: Alex Schroeder <address@hidden>
diff --git a/lisp/apropos.el b/lisp/apropos.el
index ac76ce2..023ba4b 100644
--- a/lisp/apropos.el
+++ b/lisp/apropos.el
@@ -1,6 +1,6 @@
 ;;; apropos.el --- apropos commands for users and programmers
 
-;; Copyright (C) 1989, 1994-1995, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1989, 1994-1995, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Joe Wells <address@hidden>
diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index a9f0ec7..063e4ba 100644
--- a/lisp/arc-mode.el
+++ b/lisp/arc-mode.el
@@ -1,6 +1,6 @@
 ;;; arc-mode.el --- simple editing of archives
 
-;; Copyright (C) 1995, 1997-1998, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1995, 1997-1998, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Morten Welinder <address@hidden>
@@ -147,6 +147,14 @@ A local copy of the archive will be used when updating."
   "Hook run when an archive member has been extracted."
   :type 'hook
   :group 'archive)
+
+(defcustom archive-visit-single-files nil
+  "If non-nil, opening an archive with a single file visits that file.
+If nil, visiting such an archive displays the archive summary."
+  :version "25.1"
+  :type '(choice (const :tag "Visit the single file" t)
+                 (const :tag "Show the archive summary" nil))
+  :group 'archive)
 ;; ------------------------------
 ;; Arc archive configuration
 
@@ -742,7 +750,12 @@ archive.
       (if (default-value 'enable-multibyte-characters)
          (set-buffer-multibyte 'to))
       (archive-summarize nil)
-      (setq buffer-read-only t))))
+      (setq buffer-read-only t)
+      (when (and archive-visit-single-files
+                 auto-compression-mode
+                 (= (length archive-files) 1))
+        (rename-buffer (concat " " (buffer-name)))
+        (archive-extract)))))
 
 ;; Archive mode is suitable only for specially formatted data.
 (put 'archive-mode 'mode-class 'special)
diff --git a/lisp/array.el b/lisp/array.el
index ba72ad6..86f4152 100644
--- a/lisp/array.el
+++ b/lisp/array.el
@@ -1,6 +1,6 @@
 ;;; array.el --- array editing commands for GNU Emacs
 
-;; Copyright (C) 1987, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: David M. Brown
 ;; Maintainer: address@hidden
diff --git a/lisp/autoarg.el b/lisp/autoarg.el
index 27b6d49..83b4cff 100644
--- a/lisp/autoarg.el
+++ b/lisp/autoarg.el
@@ -1,6 +1,6 @@
 ;;; autoarg.el --- make digit keys supply prefix args
 
-;; Copyright (C) 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author:  Dave Love <address@hidden>
 ;; Created: 1998-09-04
diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el
index 5eb5170..985ae24 100644
--- a/lisp/autoinsert.el
+++ b/lisp/autoinsert.el
@@ -1,6 +1,6 @@
 ;;; autoinsert.el --- automatic mode-dependent insertion of text into new files
 
-;; Copyright (C) 1985-1987, 1994-1995, 1998, 2000-2014 Free Software
+;; Copyright (C) 1985-1987, 1994-1995, 1998, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Charlie Martin <address@hidden>
@@ -91,23 +91,24 @@ If this contains a %s, that will be replaced by the 
matching rule."
 
 
 (defcustom auto-insert-alist
-  '((("\\.\\([Hh]\\|hh\\|hpp\\)\\'" . "C / C++ header")
-     (upcase (concat (file-name-nondirectory
-                     (file-name-sans-extension buffer-file-name))
-                    "_"
-                    (file-name-extension buffer-file-name)))
+  '((("\\.\\([Hh]\\|hh\\|hpp\\|hxx\\|h\\+\\+\\)\\'" . "C / C++ header")
+     (replace-regexp-in-string
+      "[^A-Z0-9]" "_"
+      (replace-regexp-in-string
+       "\\+" "P"
+       (upcase (file-name-nondirectory buffer-file-name))))
      "#ifndef " str \n
      "#define " str "\n\n"
      _ "\n\n#endif")
 
-    (("\\.\\([Cc]\\|cc\\|cpp\\)\\'" . "C / C++ program")
+    (("\\.\\([Cc]\\|cc\\|cpp\\|cxx\\|c\\+\\+\\)\\'" . "C / C++ program")
      nil
      "#include \""
-     (let ((stem (file-name-sans-extension buffer-file-name)))
-       (cond ((file-exists-p (concat stem ".h"))
-             (file-name-nondirectory (concat stem ".h")))
-            ((file-exists-p (concat stem ".hh"))
-             (file-name-nondirectory (concat stem ".hh")))))
+     (let ((stem (file-name-sans-extension buffer-file-name))
+           ret)
+       (dolist (ext '("H" "h" "hh" "hpp" "hxx" "h++") ret)
+         (when (file-exists-p (concat stem "." ext))
+           (setq ret (file-name-nondirectory (concat stem "." ext))))))
      & ?\" | -10)
 
     (("[Mm]akefile\\'" . "Makefile") . "makefile.inc")
@@ -305,6 +306,7 @@ file-name or one relative to `auto-insert-directory' or a 
function to call.
 ACTION may also be a vector containing several successive single actions as
 described above, e.g. [\"header.insert\" date-and-author-update]."
   :type 'sexp
+  :version "25.1"
   :group 'auto-insert)
 
 
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index f1074e2..8c8c617 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -1,6 +1,6 @@
 ;;; autorevert.el --- revert buffers when files on disk change
 
-;; Copyright (C) 1997-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren <address@hidden>
 ;; Keywords: convenience
@@ -589,8 +589,8 @@ This is an internal function used by Auto-Revert Mode."
           ;; the values.
           (remote-file-name-inhibit-cache t)
           (revert
-           (or (and buffer-file-name
-                    (or auto-revert-remote-files
+           (if buffer-file-name
+               (and (or auto-revert-remote-files
                         (not (file-remote-p buffer-file-name)))
                     (or (not auto-revert-use-notify)
                         auto-revert-notify-modified-p)
@@ -603,11 +603,11 @@ This is an internal function used by Auto-Revert Mode."
                       (funcall (or buffer-stale-function
                                     #'buffer-stale--default-function)
                                 t)))
-               (and (or auto-revert-mode
-                        global-auto-revert-non-file-buffers)
-                    (funcall (or buffer-stale-function
-                                  #'buffer-stale--default-function)
-                              t))))
+             (and (or auto-revert-mode
+                      global-auto-revert-non-file-buffers)
+                  (funcall (or buffer-stale-function
+                               #'buffer-stale--default-function)
+                           t))))
           eob eoblist)
       (setq auto-revert-notify-modified-p nil)
       (when revert
@@ -690,8 +690,7 @@ the timer when no buffers need to be checked."
     (let ((bufs (if global-auto-revert-mode
                    (buffer-list)
                  auto-revert-buffer-list))
-         (remaining ())
-         (new ()))
+         remaining new)
       ;; Partition `bufs' into two halves depending on whether or not
       ;; the buffers are in `auto-revert-remaining-buffers'.  The two
       ;; halves are then re-joined with the "remaining" buffers at the
diff --git a/lisp/avoid.el b/lisp/avoid.el
index 680e509..767f6d3 100644
--- a/lisp/avoid.el
+++ b/lisp/avoid.el
@@ -1,6 +1,6 @@
 ;;; avoid.el --- make mouse pointer stay out of the way of editing
 
-;; Copyright (C) 1993-1994, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <address@hidden>
 ;; Keywords: mouse
diff --git a/lisp/battery.el b/lisp/battery.el
index b493634..41e5979 100644
--- a/lisp/battery.el
+++ b/lisp/battery.el
@@ -1,6 +1,6 @@
 ;;; battery.el --- display battery status information  -*- coding: utf-8 -*-
 
-;; Copyright (C) 1997-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Ralph Schleicher <address@hidden>
 ;; Keywords: hardware
diff --git a/lisp/bindings.el b/lisp/bindings.el
index 1107740..883914e 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -1,6 +1,6 @@
 ;;; bindings.el --- define standard key bindings and some variables
 
-;; Copyright (C) 1985-1987, 1992-1996, 1999-2014 Free Software
+;; Copyright (C) 1985-1987, 1992-1996, 1999-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -839,11 +839,11 @@ if `inhibit-field-text-motion' is non-nil."
 (let ((map minibuffer-local-map))
   (define-key map "\en"   'next-history-element)
   (define-key map [next]  'next-history-element)
-  (define-key map [down]  'next-history-element)
+  (define-key map [down]  'next-line-or-history-element)
   (define-key map [XF86Forward] 'next-history-element)
   (define-key map "\ep"   'previous-history-element)
   (define-key map [prior] 'previous-history-element)
-  (define-key map [up]    'previous-history-element)
+  (define-key map [up]    'previous-line-or-history-element)
   (define-key map [XF86Back] 'previous-history-element)
   (define-key map "\es"   'next-matching-history-element)
   (define-key map "\er"   'previous-matching-history-element)
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index 7ea54a8..a49ee7e 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -1,6 +1,6 @@
 ;;; bookmark.el --- set bookmarks, maybe annotate them, jump to them later
 
-;; Copyright (C) 1993-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Karl Fogel <address@hidden>
 ;; Maintainer: Karl Fogel <address@hidden>
diff --git a/lisp/bs.el b/lisp/bs.el
index 5e9c690..c7a20b4 100644
--- a/lisp/bs.el
+++ b/lisp/bs.el
@@ -1,6 +1,6 @@
 ;;; bs.el --- menu for selecting and displaying buffers -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 ;; Author: Olaf Sylvester <address@hidden>
 ;; Maintainer: Olaf Sylvester <address@hidden>
 ;; Keywords: convenience
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index f1772b3..91bc038 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -1,6 +1,6 @@
 ;;; buff-menu.el --- Interface for viewing and manipulating buffers
 
-;; Copyright (C) 1985-1987, 1993-1995, 2000-2014 Free Software
+;; Copyright (C) 1985-1987, 1993-1995, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/button.el b/lisp/button.el
index 7418cb5..e7602dd 100644
--- a/lisp/button.el
+++ b/lisp/button.el
@@ -1,6 +1,6 @@
 ;;; button.el --- clickable buttons
 ;;
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <address@hidden>
 ;; Keywords: extensions
@@ -224,10 +224,10 @@ changes to a supertype are not reflected in its 
subtypes)."
          prop val))))
 
 (defun button-activate (button &optional use-mouse-action)
-  "Call BUTTON's action property.
-If USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action
-instead of its normal action; if the button has no mouse-action,
-the normal action is used instead.
+  "Call BUTTON's `action' property.
+If USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action'
+property instead of `action'; if the button has no `mouse-action',
+the value of `action' is used instead.
 
 The action can either be a marker or a function.  If it's a
 marker then goto it.  Otherwise it it is a function then it is
@@ -429,11 +429,13 @@ instead of starting at the next button."
 (defun push-button (&optional pos use-mouse-action)
   "Perform the action specified by a button at location POS.
 POS may be either a buffer position or a mouse-event.  If
-USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action
-instead of its normal action; if the button has no mouse-action,
-the normal action is used instead.  The action may be either a
-function to call or a marker to display and is invoked using
-`button-activate' (which see).
+USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action'
+property instead of its `action' property; if the button has no
+`mouse-action', the value of `action' is used instead.
+
+The action in both cases may be either a function to call or a
+marker to display and is invoked using `button-activate' (which
+see).
 
 POS defaults to point, except when `push-button' is invoked
 interactively as the result of a mouse-event, in which case, the
@@ -449,7 +451,7 @@ return t."
          (if (posn-string posn)
              ;; mode-line, header-line, or display string event.
              (button-activate (posn-string posn) t)
-           (push-button (posn-point posn)) t)))
+           (push-button (posn-point posn) t))))
     ;; POS is just normal position
     (let ((button (button-at (or pos (point)))))
       (when button
diff --git a/lisp/calc/.gitignore b/lisp/calc/.gitignore
deleted file mode 100644
index a46b68d..0000000
--- a/lisp/calc/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.elc
-calc-loaddefs.el
diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el
index 968d30e..23de53e 100644
--- a/lisp/calc/calc-aent.el
+++ b/lisp/calc/calc-aent.el
@@ -1,6 +1,6 @@
 ;;; calc-aent.el --- algebraic entry functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-alg.el b/lisp/calc/calc-alg.el
index c26b007..ebc5ba6 100644
--- a/lisp/calc/calc-alg.el
+++ b/lisp/calc/calc-alg.el
@@ -1,6 +1,6 @@
 ;;; calc-alg.el --- algebraic functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger  <address@hidden>
diff --git a/lisp/calc/calc-arith.el b/lisp/calc/calc-arith.el
index 3a2d159..de27c56 100644
--- a/lisp/calc/calc-arith.el
+++ b/lisp/calc/calc-arith.el
@@ -1,6 +1,6 @@
 ;;; calc-arith.el --- arithmetic functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-bin.el b/lisp/calc/calc-bin.el
index 8f061b0..9a1e524 100644
--- a/lisp/calc/calc-bin.el
+++ b/lisp/calc/calc-bin.el
@@ -1,6 +1,6 @@
 ;;; calc-bin.el --- binary functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-comb.el b/lisp/calc/calc-comb.el
index 1cec272..4e52a3b 100644
--- a/lisp/calc/calc-comb.el
+++ b/lisp/calc/calc-comb.el
@@ -1,6 +1,6 @@
 ;;; calc-comb.el --- combinatoric functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-cplx.el b/lisp/calc/calc-cplx.el
index 7f1d18a..edcd3c2 100644
--- a/lisp/calc/calc-cplx.el
+++ b/lisp/calc/calc-cplx.el
@@ -1,6 +1,6 @@
 ;;; calc-cplx.el --- Complex number functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-embed.el b/lisp/calc/calc-embed.el
index 52d2f4c..fcb4b03 100644
--- a/lisp/calc/calc-embed.el
+++ b/lisp/calc/calc-embed.el
@@ -1,6 +1,6 @@
 ;;; calc-embed.el --- embed Calc in a buffer
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el
index 885a7f2..67d0c27 100644
--- a/lisp/calc/calc-ext.el
+++ b/lisp/calc/calc-ext.el
@@ -1,6 +1,6 @@
 ;;; calc-ext.el --- various extension functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
@@ -561,6 +561,7 @@
   (define-key calc-mode-map "ud" 'calc-define-unit)
   (define-key calc-mode-map "ue" 'calc-explain-units)
   (define-key calc-mode-map "ug" 'calc-get-unit-definition)
+  (define-key calc-mode-map "un" 'calc-convert-exact-units)
   (define-key calc-mode-map "up" 'calc-permanent-units)
   (define-key calc-mode-map "ur" 'calc-remove-units)
   (define-key calc-mode-map "us" 'calc-simplify-units)
@@ -1176,7 +1177,8 @@ calc-trail-scroll-right calc-trail-yank)
  ("calc-undo" calc-last-args calc-redo)
 
  ("calc-units" calc-autorange-units calc-base-units
-calc-convert-temperature calc-convert-units calc-define-unit
+calc-convert-temperature calc-convert-units 
+calc-convert-exact-units calc-define-unit
 calc-enter-units-table calc-explain-units calc-extract-units
 calc-get-unit-definition calc-permanent-units calc-quick-units
 calc-remove-units calc-simplify-units calc-undefine-unit
diff --git a/lisp/calc/calc-fin.el b/lisp/calc/calc-fin.el
index 32d9597..76c34e6 100644
--- a/lisp/calc/calc-fin.el
+++ b/lisp/calc/calc-fin.el
@@ -1,6 +1,6 @@
 ;;; calc-fin.el --- financial functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-forms.el b/lisp/calc/calc-forms.el
index a48075c..ca6d021 100644
--- a/lisp/calc/calc-forms.el
+++ b/lisp/calc/calc-forms.el
@@ -1,6 +1,6 @@
 ;;; calc-forms.el --- data format conversion functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-frac.el b/lisp/calc/calc-frac.el
index fb8c423..830bafe 100644
--- a/lisp/calc/calc-frac.el
+++ b/lisp/calc/calc-frac.el
@@ -1,6 +1,6 @@
 ;;; calc-frac.el --- fraction functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-funcs.el b/lisp/calc/calc-funcs.el
index ffca70b..51922c8 100644
--- a/lisp/calc/calc-funcs.el
+++ b/lisp/calc/calc-funcs.el
@@ -1,6 +1,6 @@
 ;;; calc-funcs.el --- well-known functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-graph.el b/lisp/calc/calc-graph.el
index 38d75e9..20b0249 100644
--- a/lisp/calc/calc-graph.el
+++ b/lisp/calc/calc-graph.el
@@ -1,6 +1,6 @@
 ;;; calc-graph.el --- graph output functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el
index dfd2923..17e5b0f 100644
--- a/lisp/calc/calc-help.el
+++ b/lisp/calc/calc-help.el
@@ -1,6 +1,6 @@
 ;;; calc-help.el --- help display functions for Calc,
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
@@ -647,7 +647,7 @@ C-w  Describe how there is no warranty for Calc."
 (defun calc-u-prefix-help ()
   (interactive)
   (calc-do-prefix-help
-   '("Simplify, Convert, Temperature-convert, Base-units"
+   '("Simplify, Convert, coNvert exact, Temperature-convert, Base-units"
      "Autorange; Remove, eXtract; Explain; View-table; 0-9"
      "Define, Undefine, Get-defn, Permanent"
      "SHIFT + View-table-other-window"
diff --git a/lisp/calc/calc-incom.el b/lisp/calc/calc-incom.el
index b3f0d73..b2856b9 100644
--- a/lisp/calc/calc-incom.el
+++ b/lisp/calc/calc-incom.el
@@ -1,6 +1,6 @@
 ;;; calc-incom.el --- complex data type input functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-keypd.el b/lisp/calc/calc-keypd.el
index d5021e6..18e900d 100644
--- a/lisp/calc/calc-keypd.el
+++ b/lisp/calc/calc-keypd.el
@@ -1,6 +1,6 @@
 ;;; calc-keypd.el --- mouse-capable keypad input for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-lang.el b/lisp/calc/calc-lang.el
index d02baef..066d781 100644
--- a/lisp/calc/calc-lang.el
+++ b/lisp/calc/calc-lang.el
@@ -1,6 +1,6 @@
 ;;; calc-lang.el --- calc language functions
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-macs.el b/lisp/calc/calc-macs.el
index af61599..9730d30 100644
--- a/lisp/calc/calc-macs.el
+++ b/lisp/calc/calc-macs.el
@@ -1,6 +1,6 @@
 ;;; calc-macs.el --- important macros for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-map.el b/lisp/calc/calc-map.el
index 2c591be..3b5949c 100644
--- a/lisp/calc/calc-map.el
+++ b/lisp/calc/calc-map.el
@@ -1,6 +1,6 @@
 ;;; calc-map.el --- higher-order functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-math.el b/lisp/calc/calc-math.el
index 1487d07..e7d073a 100644
--- a/lisp/calc/calc-math.el
+++ b/lisp/calc/calc-math.el
@@ -1,6 +1,6 @@
 ;;; calc-math.el --- mathematical functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-menu.el b/lisp/calc/calc-menu.el
index 9dbb40a..4408687 100644
--- a/lisp/calc/calc-menu.el
+++ b/lisp/calc/calc-menu.el
@@ -1,6 +1,6 @@
 ;;; calc-menu.el --- a menu for Calc
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: Jay Belanger <address@hidden>
 
diff --git a/lisp/calc/calc-misc.el b/lisp/calc/calc-misc.el
index b21516f..9c5d718 100644
--- a/lisp/calc/calc-misc.el
+++ b/lisp/calc/calc-misc.el
@@ -1,6 +1,6 @@
 ;;; calc-misc.el --- miscellaneous functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-mode.el b/lisp/calc/calc-mode.el
index 244d1f7..be18dcd 100644
--- a/lisp/calc/calc-mode.el
+++ b/lisp/calc/calc-mode.el
@@ -1,6 +1,6 @@
 ;;; calc-mode.el --- calculator modes for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-mtx.el b/lisp/calc/calc-mtx.el
index 4f6dbd2..b8c5ff9 100644
--- a/lisp/calc/calc-mtx.el
+++ b/lisp/calc/calc-mtx.el
@@ -1,6 +1,6 @@
 ;;; calc-mtx.el --- matrix functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-nlfit.el b/lisp/calc/calc-nlfit.el
index 67309fe..8e0eb73 100644
--- a/lisp/calc/calc-nlfit.el
+++ b/lisp/calc/calc-nlfit.el
@@ -1,6 +1,6 @@
 ;;; calc-nlfit.el --- nonlinear curve fitting for Calc
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: Jay Belanger <address@hidden>
 
diff --git a/lisp/calc/calc-poly.el b/lisp/calc/calc-poly.el
index 515c5fc..1dab3c4 100644
--- a/lisp/calc/calc-poly.el
+++ b/lisp/calc/calc-poly.el
@@ -1,6 +1,6 @@
 ;;; calc-poly.el --- polynomial functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-prog.el b/lisp/calc/calc-prog.el
index 156bf4c..2711407 100644
--- a/lisp/calc/calc-prog.el
+++ b/lisp/calc/calc-prog.el
@@ -1,6 +1,6 @@
 ;;; calc-prog.el --- user programmability functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-rewr.el b/lisp/calc/calc-rewr.el
index f622f80..e57a6b4 100644
--- a/lisp/calc/calc-rewr.el
+++ b/lisp/calc/calc-rewr.el
@@ -1,6 +1,6 @@
 ;;; calc-rewr.el --- rewriting functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-rules.el b/lisp/calc/calc-rules.el
index 120421a..4489f66 100644
--- a/lisp/calc/calc-rules.el
+++ b/lisp/calc/calc-rules.el
@@ -1,6 +1,6 @@
 ;;; calc-rules.el --- rules for simplifying algebraic expressions in Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-sel.el b/lisp/calc/calc-sel.el
index b0a2c97..ec104ee 100644
--- a/lisp/calc/calc-sel.el
+++ b/lisp/calc/calc-sel.el
@@ -1,6 +1,6 @@
 ;;; calc-sel.el --- data selection functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-stat.el b/lisp/calc/calc-stat.el
index 2b63821..cf0b3ea 100644
--- a/lisp/calc/calc-stat.el
+++ b/lisp/calc/calc-stat.el
@@ -1,6 +1,6 @@
 ;;; calc-stat.el --- statistical functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-store.el b/lisp/calc/calc-store.el
index 185e4e4..11bf964 100644
--- a/lisp/calc/calc-store.el
+++ b/lisp/calc/calc-store.el
@@ -1,6 +1,6 @@
 ;;; calc-store.el --- value storage functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-stuff.el b/lisp/calc/calc-stuff.el
index a309104..91ef259a 100644
--- a/lisp/calc/calc-stuff.el
+++ b/lisp/calc/calc-stuff.el
@@ -1,6 +1,6 @@
 ;;; calc-stuff.el --- miscellaneous functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-trail.el b/lisp/calc/calc-trail.el
index c3cfad8..9417f7f 100644
--- a/lisp/calc/calc-trail.el
+++ b/lisp/calc/calc-trail.el
@@ -1,6 +1,6 @@
 ;;; calc-trail.el --- functions for manipulating the Calc "trail"
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-undo.el b/lisp/calc/calc-undo.el
index 109f53d..28c1679 100644
--- a/lisp/calc/calc-undo.el
+++ b/lisp/calc/calc-undo.el
@@ -1,6 +1,6 @@
 ;;; calc-undo.el --- undo functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el
index 31efd4b..f3d0234 100644
--- a/lisp/calc/calc-units.el
+++ b/lisp/calc/calc-units.el
@@ -1,6 +1,6 @@
 ;;; calc-units.el --- unit conversion functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
@@ -470,6 +470,8 @@ If COMP or STD is non-nil, put that in the units table 
instead."
                           (if (string-match "\\` */" uoldname)
                               (setq uoldname (concat "1" uoldname)))
                           (math-read-expr uoldname))))))
+         (unless (math-units-in-expr-p uold t)
+           (error "No units specified"))
         (when (eq (car-safe uold) 'error)
           (error "Bad format in units expression: %s" (nth 1 uold)))
         (setq expr (math-mul expr uold))))
@@ -514,6 +516,38 @@ If COMP or STD is non-nil, put that in the units table 
instead."
            (math-put-default-units (if noold units res) (if comp units)))
          (calc-enter-result 1 "cvun" res))))))
 
+(defun calc-convert-exact-units ()
+  (interactive)
+  (calc-slow-wrapper
+   (let* ((expr (calc-top-n 1)))
+     (unless (math-units-in-expr-p expr t)
+       (error "No units in expression."))
+     (let* ((old-units (math-extract-units expr))
+            (defunits (math-get-default-units expr))
+            units
+            (new-units
+             (read-string (concat "New units"
+                                  (if defunits
+                                     (concat
+                                      " (default "
+                                      defunits
+                                      "): ")
+                                   ": ")))))
+       (if (and
+            (string= new-units "")
+            defunits)
+           (setq new-units defunits))
+       (setq units (math-read-expr new-units))
+       (when (eq (car-safe units) 'error)
+         (error "Bad format in units expression: %s" (nth 2 units)))
+       (math-check-unit-consistency old-units units)
+       (let ((res
+              (list '* (math-mul (math-remove-units expr)
+                                 (math-simplify-units
+                                  (math-to-standard-units (list '/ old-units 
units) nil)))
+                    units)))
+         (calc-enter-result 1 "cvxu" res))))))
+
 (defun calc-autorange-units (arg)
   (interactive "P")
   (calc-wrapper
@@ -904,10 +938,12 @@ If COMP or STD is non-nil, put that in the units table 
instead."
   (and (consp expr)
        (if (eq (car expr) 'var)
           (math-check-unit-name expr)
-        (and (or sub-exprs
-                 (memq (car expr) '(* / ^)))
-             (or (math-units-in-expr-p (nth 1 expr) sub-exprs)
-                 (math-units-in-expr-p (nth 2 expr) sub-exprs))))))
+        (if (eq (car expr) 'neg)
+            (math-units-in-expr-p (nth 1 expr) sub-exprs)
+          (and (or sub-exprs
+                   (memq (car expr) '(* / ^)))
+               (or (math-units-in-expr-p (nth 1 expr) sub-exprs)
+                   (math-units-in-expr-p (nth 2 expr) sub-exprs)))))))
 
 (defun math-only-units-in-expr-p (expr)
   (and (consp expr)
@@ -924,6 +960,8 @@ If COMP or STD is non-nil, put that in the units table 
instead."
   (cond ((math-scalarp expr) nil)
        ((eq (car expr) 'var)
         (math-check-unit-name expr))
+       ((eq (car expr) 'neg)
+        (math-single-units-in-expr-p (nth 1 expr)))
        ((eq (car expr) '*)
         (let ((u1 (math-single-units-in-expr-p (nth 1 expr)))
               (u2 (math-single-units-in-expr-p (nth 2 expr))))
@@ -941,7 +979,7 @@ If COMP or STD is non-nil, put that in the units table 
instead."
   (or
    (and (eq (car-safe newunits) 'var)
         (assq (nth 1 newunits) math-standard-units-systems))
-   (math-numberp (math-get-units (list '/ expr newunits)))))
+   (math-numberp (math-get-units (math-to-standard-units (list '/ expr 
newunits) nil)))))
 
 (defun math-check-unit-consistency (expr units)
   "Give an error if EXPR and UNITS do not have consistent units."
@@ -1079,6 +1117,8 @@ If COMP or STD is non-nil, put that in the units table 
instead."
        ((eq (car-safe expr) '/)
         (or (math-find-compatible-unit-rec (nth 1 expr) pow)
             (math-find-compatible-unit-rec (nth 2 expr) (- pow))))
+       ((eq (car-safe expr) 'neg)
+        (math-find-compatible-unit-rec (nth 1 expr) pow))
        ((and (eq (car-safe expr) '^)
              (integerp (nth 2 expr)))
         (math-find-compatible-unit-rec (nth 1 expr) (* pow (nth 2 expr))))
@@ -1497,6 +1537,8 @@ If COMP or STD is non-nil, put that in the units table 
instead."
    ((memq (car-safe expr) '(* /))
     (cons (car expr)
           (mapcar 'math-extract-units (cdr expr))))
+   ((eq (car-safe expr) 'neg)
+    (math-extract-units (nth 1 expr)))
    ((eq (car-safe expr) '^)
     (list '^ (math-extract-units (nth 1 expr)) (nth 2 expr)))
    ((math-check-unit-name expr) expr)
diff --git a/lisp/calc/calc-vec.el b/lisp/calc/calc-vec.el
index d29314e..c1ef895 100644
--- a/lisp/calc/calc-vec.el
+++ b/lisp/calc/calc-vec.el
@@ -1,6 +1,6 @@
 ;;; calc-vec.el --- vector functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc-yank.el b/lisp/calc/calc-yank.el
index 9781d41..726a720 100644
--- a/lisp/calc/calc-yank.el
+++ b/lisp/calc/calc-yank.el
@@ -1,6 +1,6 @@
 ;;; calc-yank.el --- kill-ring functionality for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 85266fb..58bbdb8 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -1,6 +1,6 @@
 ;;; calc.el --- the GNU Emacs calculator
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calcalg2.el b/lisp/calc/calcalg2.el
index 1b86f79..55064a3 100644
--- a/lisp/calc/calcalg2.el
+++ b/lisp/calc/calcalg2.el
@@ -1,6 +1,6 @@
 ;;; calcalg2.el --- more algebraic functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calcalg3.el b/lisp/calc/calcalg3.el
index d84f0de..957f120 100644
--- a/lisp/calc/calcalg3.el
+++ b/lisp/calc/calcalg3.el
@@ -1,6 +1,6 @@
 ;;; calcalg3.el --- more algebraic functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calccomp.el b/lisp/calc/calccomp.el
index f913b66..a3432c1 100644
--- a/lisp/calc/calccomp.el
+++ b/lisp/calc/calccomp.el
@@ -1,6 +1,6 @@
 ;;; calccomp.el --- composition functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calc/calcsel2.el b/lisp/calc/calcsel2.el
index c9ed9ff..ace2684 100644
--- a/lisp/calc/calcsel2.el
+++ b/lisp/calc/calcsel2.el
@@ -1,6 +1,6 @@
 ;;; calcsel2.el --- selection functions for Calc
 
-;; Copyright (C) 1990-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <address@hidden>
 ;; Maintainer: Jay Belanger <address@hidden>
diff --git a/lisp/calculator.el b/lisp/calculator.el
index ad7a7f4..0aef07b 100644
--- a/lisp/calculator.el
+++ b/lisp/calculator.el
@@ -1,6 +1,6 @@
 ;;; calculator.el --- a calculator for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Eli Barzilay <address@hidden>
 ;; Keywords: tools, convenience
@@ -312,8 +312,8 @@ user-defined operators, use `calculator-user-operators' 
instead.")
 
 It it possible have a unary prefix version of a binary operator if it
 comes later in this list.  If the list begins with the symbol 'nobind,
-then no key binding will take place -- this is only useful for predefined
-keys.
+then no key binding will take place -- this is only useful for
+predefined keys.
 
 Use `calculator-user-operators' to add operators to this list, see its
 documentation for an example.")
@@ -1124,9 +1124,15 @@ If optional argument FORCE is non-nil, don't use the 
cached string."
                    " "
                    (and calculator-display-fragile
                         calculator-saved-list
-                        (= (car calculator-stack)
-                           (nth calculator-saved-ptr
-                                calculator-saved-list))
+                        ;; Hack: use `eq' to compare the number: it's a
+                        ;; flonum, so `eq' means that its the actual
+                        ;; number rather than a computation that had an
+                        ;; equal result (eg, enter 1,3,2, use "v" to see
+                        ;; the average -- it now shows "2" instead of
+                        ;; "2 [3]").
+                        (eq (car calculator-stack)
+                            (nth calculator-saved-ptr
+                                 calculator-saved-list))
                         (if (= 0 calculator-saved-ptr)
                           (format "[%s]" (length calculator-saved-list))
                           (format "[%s/%s]"
diff --git a/lisp/calendar/.gitignore b/lisp/calendar/.gitignore
deleted file mode 100644
index d0de296..0000000
--- a/lisp/calendar/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.elc
-cal-loaddefs.el
-diary-loaddefs.el
-hol-loaddefs.el
diff --git a/lisp/calendar/appt.el b/lisp/calendar/appt.el
index 7e32d89..f143b2d 100644
--- a/lisp/calendar/appt.el
+++ b/lisp/calendar/appt.el
@@ -1,6 +1,6 @@
 ;;; appt.el --- appointment notification functions
 
-;; Copyright (C) 1989-1990, 1994, 1998, 2001-2014 Free Software
+;; Copyright (C) 1989-1990, 1994, 1998, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Neil Mager <address@hidden>
diff --git a/lisp/calendar/cal-bahai.el b/lisp/calendar/cal-bahai.el
index 8e82807..180e5f9 100644
--- a/lisp/calendar/cal-bahai.el
+++ b/lisp/calendar/cal-bahai.el
@@ -1,6 +1,6 @@
 ;;; cal-bahai.el --- calendar functions for the Bahá'í calendar.
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Keywords: calendar
diff --git a/lisp/calendar/cal-china.el b/lisp/calendar/cal-china.el
index c586065..b635eb6 100644
--- a/lisp/calendar/cal-china.el
+++ b/lisp/calendar/cal-china.el
@@ -1,6 +1,6 @@
 ;;; cal-china.el --- calendar functions for the Chinese calendar
 
-;; Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
@@ -662,18 +662,30 @@ Echo Chinese date unless NOECHO is non-nil."
 ;;; These two functions convert to and back from this representation.
 (defun calendar-chinese-from-absolute-for-diary (date)
   (pcase-let ((`(,c ,y ,m ,d) (calendar-chinese-from-absolute date)))
-    (list m d (+ (* c 100) y))))
-
-(defun calendar-chinese-to-absolute-for-diary (date)
-  (pcase-let ((`(,m ,d ,y) date))
+    ;; Note: For leap months M is a float.
+    (list (floor m) d (+ (* c 100) y))))
+
+(defun calendar-chinese-to-absolute-for-diary (date &optional prefer-leap)
+  (pcase-let* ((`(,m ,d ,y) date)
+               (cycle (floor y 100))
+               (year (mod y 100))
+               (months (calendar-chinese-months cycle year))
+               (lm (+ (floor m) 0.5)))
     (calendar-chinese-to-absolute
-     (list (floor y 100) (mod y 100) m d))))
+     (if (and prefer-leap (memql lm months))
+         (list cycle year lm d)
+       (list cycle year m d)))))
 
 (defun calendar-chinese-mark-date-pattern (month day year &optional color)
   (calendar-mark-1 month day year
                    #'calendar-chinese-from-absolute-for-diary
                    #'calendar-chinese-to-absolute-for-diary
-                   color))
+                   color)
+  (unless (zerop month)
+    (calendar-mark-1 month day year
+                     #'calendar-chinese-from-absolute-for-diary
+                     (lambda (date) (calendar-chinese-to-absolute-for-diary 
date t))
+                     color)))
 
 ;;;###cal-autoload
 (defun diary-chinese-mark-entries ()
@@ -717,7 +729,10 @@ This function is provided for use with 
`diary-nongregorian-listing-hook'."
                (diff (if (and dc dy)
                          (+ (* 60 (- cc dc)) (- cy dy))
                        100)))
-    (and (> diff 0) (= dm cm) (= dd cd)
+    (and (> diff 0)
+         ;; The Chinese month can differ by 0.5 in a leap month.
+         (or (= dm cm) (= (+ 0.5 dm) cm))
+         (= dd cd)
          (cons mark (format entry diff (diary-ordinal-suffix diff))))))
 
 ;;;###cal-autoload
diff --git a/lisp/calendar/cal-coptic.el b/lisp/calendar/cal-coptic.el
index 54a1fe9..0152dcb 100644
--- a/lisp/calendar/cal-coptic.el
+++ b/lisp/calendar/cal-coptic.el
@@ -1,6 +1,6 @@
 ;;; cal-coptic.el --- calendar functions for the Coptic/Ethiopic calendars
 
-;; Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/cal-dst.el b/lisp/calendar/cal-dst.el
index 2a9cdee..e8d6077 100644
--- a/lisp/calendar/cal-dst.el
+++ b/lisp/calendar/cal-dst.el
@@ -1,6 +1,6 @@
 ;;; cal-dst.el --- calendar functions for daylight saving rules
 
-;; Copyright (C) 1993-1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Paul Eggert <address@hidden>
 ;;         Edward M. Reingold <address@hidden>
diff --git a/lisp/calendar/cal-french.el b/lisp/calendar/cal-french.el
index 3631870..b88adb9 100644
--- a/lisp/calendar/cal-french.el
+++ b/lisp/calendar/cal-french.el
@@ -1,7 +1,7 @@
 ;;; cal-french.el --- calendar functions for the French Revolutionary calendar
 
-;; Copyright (C) 1988-1989, 1992, 1994-1995, 1997, 2001-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1988-1989, 1992, 1994-1995, 1997, 2001-2015 Free
+;; Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/cal-hebrew.el b/lisp/calendar/cal-hebrew.el
index 93ac3b7..8a975d8 100644
--- a/lisp/calendar/cal-hebrew.el
+++ b/lisp/calendar/cal-hebrew.el
@@ -1,6 +1,6 @@
 ;;; cal-hebrew.el --- calendar functions for the Hebrew calendar
 
-;; Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Nachum Dershowitz <address@hidden>
 ;;         Edward M. Reingold <address@hidden>
diff --git a/lisp/calendar/cal-html.el b/lisp/calendar/cal-html.el
index 6d6c805..4bddc38 100644
--- a/lisp/calendar/cal-html.el
+++ b/lisp/calendar/cal-html.el
@@ -1,6 +1,6 @@
 ;;; cal-html.el --- functions for printing HTML calendars
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Anna M. Bigatti <address@hidden>
 ;; Keywords: calendar
diff --git a/lisp/calendar/cal-islam.el b/lisp/calendar/cal-islam.el
index 00e5465..8e28752 100644
--- a/lisp/calendar/cal-islam.el
+++ b/lisp/calendar/cal-islam.el
@@ -1,6 +1,6 @@
 ;;; cal-islam.el --- calendar functions for the Islamic calendar
 
-;; Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/cal-iso.el b/lisp/calendar/cal-iso.el
index 88527cf..f3cc430 100644
--- a/lisp/calendar/cal-iso.el
+++ b/lisp/calendar/cal-iso.el
@@ -1,6 +1,6 @@
 ;;; cal-iso.el --- calendar functions for the ISO calendar
 
-;; Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/cal-julian.el b/lisp/calendar/cal-julian.el
index 481f987..3cfa612 100644
--- a/lisp/calendar/cal-julian.el
+++ b/lisp/calendar/cal-julian.el
@@ -1,6 +1,6 @@
 ;;; cal-julian.el --- calendar functions for the Julian calendar
 
-;; Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/cal-mayan.el b/lisp/calendar/cal-mayan.el
index 17a0165..cf3fc06 100644
--- a/lisp/calendar/cal-mayan.el
+++ b/lisp/calendar/cal-mayan.el
@@ -1,6 +1,6 @@
 ;;; cal-mayan.el --- calendar functions for the Mayan calendars
 
-;; Copyright (C) 1992-1993, 1995, 1997, 2001-2014 Free Software
+;; Copyright (C) 1992-1993, 1995, 1997, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Stewart M. Clamen <address@hidden>
diff --git a/lisp/calendar/cal-menu.el b/lisp/calendar/cal-menu.el
index df16646..7462df8 100644
--- a/lisp/calendar/cal-menu.el
+++ b/lisp/calendar/cal-menu.el
@@ -1,6 +1,6 @@
 ;;; cal-menu.el --- calendar functions for menu bar and popup menu support
 
-;; Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;;         Lara Rios <address@hidden>
diff --git a/lisp/calendar/cal-move.el b/lisp/calendar/cal-move.el
index a72f188..f7bae5f 100644
--- a/lisp/calendar/cal-move.el
+++ b/lisp/calendar/cal-move.el
@@ -1,6 +1,6 @@
 ;;; cal-move.el --- calendar functions for movement in the calendar
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/cal-persia.el b/lisp/calendar/cal-persia.el
index 1a69ade..542dea64 100644
--- a/lisp/calendar/cal-persia.el
+++ b/lisp/calendar/cal-persia.el
@@ -1,6 +1,6 @@
 ;;; cal-persia.el --- calendar functions for the Persian calendar
 
-;; Copyright (C) 1996-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/cal-tex.el b/lisp/calendar/cal-tex.el
index e26734a..d3c503e 100644
--- a/lisp/calendar/cal-tex.el
+++ b/lisp/calendar/cal-tex.el
@@ -1,6 +1,6 @@
 ;;; cal-tex.el --- calendar functions for printing calendars with LaTeX
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Steve Fisk <address@hidden>
 ;;         Edward M. Reingold <address@hidden>
diff --git a/lisp/calendar/cal-x.el b/lisp/calendar/cal-x.el
index 1ed2fa4..22daa46 100644
--- a/lisp/calendar/cal-x.el
+++ b/lisp/calendar/cal-x.el
@@ -1,6 +1,6 @@
 ;;; cal-x.el --- calendar windows in dedicated frames
 
-;; Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;;         Edward M. Reingold <address@hidden>
diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el
index b4df4b3..e42a010 100644
--- a/lisp/calendar/calendar.el
+++ b/lisp/calendar/calendar.el
@@ -1,6 +1,7 @@
 ;;; calendar.el --- calendar functions
 
-;; Copyright (C) 1988-1995, 1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988-1995, 1997, 2000-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el
index 39ba6f4..29364b5 100644
--- a/lisp/calendar/diary-lib.el
+++ b/lisp/calendar/diary-lib.el
@@ -1,6 +1,7 @@
 ;;; diary-lib.el --- diary functions
 
-;; Copyright (C) 1989-1990, 1992-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989-1990, 1992-1995, 2001-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
@@ -1586,8 +1587,7 @@ COLOR is passed to `calendar-mark-visible-date' as MARK."
                     (setq date (calendar-gregorian-from-absolute
                                 (funcall toabs (list month day y)))))
                    (calendar-mark-visible-date date color)))))
-      (calendar-mark-complex month day year
-                             'calendar-bahai-from-absolute color))))
+      (calendar-mark-complex month day year fromabs color))))
 
 
 (defun diary-entry-time (s)
diff --git a/lisp/calendar/holidays.el b/lisp/calendar/holidays.el
index d36764a..8085c1c 100644
--- a/lisp/calendar/holidays.el
+++ b/lisp/calendar/holidays.el
@@ -1,7 +1,7 @@
 ;;; holidays.el --- holiday functions for the calendar package
 
-;; Copyright (C) 1989-1990, 1992-1994, 1997, 2001-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1989-1990, 1992-1994, 1997, 2001-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index 0bd126d..452a672 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -1,6 +1,6 @@
 ;;; icalendar.el --- iCalendar implementation -*-coding: utf-8 -*-
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author:         Ulf Jasper <address@hidden>
 ;; Created:        August 2002
diff --git a/lisp/calendar/lunar.el b/lisp/calendar/lunar.el
index 0b20006..1e0be16 100644
--- a/lisp/calendar/lunar.el
+++ b/lisp/calendar/lunar.el
@@ -1,6 +1,7 @@
 ;;; lunar.el --- calendar functions for phases of the moon
 
-;; Copyright (C) 1992-1993, 1995, 1997, 2001-2014 Free Software Foundation, 
Inc.
+;; Copyright (C) 1992-1993, 1995, 1997, 2001-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/calendar/parse-time.el b/lisp/calendar/parse-time.el
index 142e69e..b2b065a 100644
--- a/lisp/calendar/parse-time.el
+++ b/lisp/calendar/parse-time.el
@@ -1,6 +1,6 @@
 ;;; parse-time.el --- parsing time strings
 
-;; Copyright (C) 1996, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Erik Naggum <address@hidden>
 ;; Keywords: util
diff --git a/lisp/calendar/solar.el b/lisp/calendar/solar.el
index 532a1a5..46cd8d3 100644
--- a/lisp/calendar/solar.el
+++ b/lisp/calendar/solar.el
@@ -1,6 +1,6 @@
 ;;; solar.el --- calendar functions for solar events
 
-;; Copyright (C) 1992-1993, 1995, 1997, 2001-2014 Free Software
+;; Copyright (C) 1992-1993, 1995, 1997, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Edward M. Reingold <address@hidden>
diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el
index e7a8cc7..bb7e97e 100644
--- a/lisp/calendar/time-date.el
+++ b/lisp/calendar/time-date.el
@@ -1,6 +1,6 @@
 ;;; time-date.el --- Date and time handling functions
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     Masanobu Umeda <address@hidden>
diff --git a/lisp/calendar/timeclock.el b/lisp/calendar/timeclock.el
index fb69357..cd79781 100644
--- a/lisp/calendar/timeclock.el
+++ b/lisp/calendar/timeclock.el
@@ -1,6 +1,6 @@
 ;;; timeclock.el --- mode for keeping track of how much you work
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Created: 25 Mar 1999
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index ab12ebc..7ca57a4 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -1,6 +1,6 @@
 ;;; todo-mode.el --- facilities for making and maintaining todo lists
 
-;; Copyright (C) 1997, 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Oliver Seidel <address@hidden>
 ;;     Stephen Berman <address@hidden>
@@ -5194,6 +5194,15 @@ Overrides `diary-goto-entry'."
 
 (add-function :override diary-goto-entry-function #'todo-diary-goto-entry)
 
+(defun todo-revert-buffer (&optional ignore-auto noconfirm)
+  "Call `revert-buffer', preserving buffer's current modes.
+Also preserve category display, if applicable."
+  (interactive (list (not current-prefix-arg)))
+  (let ((revert-buffer-function nil))
+    (revert-buffer ignore-auto noconfirm 'preserve-modes)
+    (when (memq major-mode '(todo-mode todo-archive-mode))
+      (todo-category-select))))
+
 (defun todo-desktop-save-buffer (_dir)
   `((catnum . ,(todo-category-number (todo-current-category)))))
 
@@ -6540,6 +6549,7 @@ Added to `window-configuration-change-hook' in Todo mode."
 (defun todo-modes-set-1 ()
   "Make some settings that apply to multiple Todo modes."
   (setq-local font-lock-defaults '(todo-font-lock-keywords t))
+  (setq-local revert-buffer-function 'todo-revert-buffer)
   (setq-local tab-width todo-indent-to-here)
   (setq-local indent-line-function 'todo-indent)
   (when todo-wrap-lines
@@ -6573,23 +6583,24 @@ Added to `window-configuration-change-hook' in Todo 
mode."
   "Major mode for displaying, navigating and editing todo lists.
 
 \\{todo-mode-map}"
-  ;; (easy-menu-add todo-menu)
-  (todo-modes-set-1)
-  (todo-modes-set-2)
-  (todo-modes-set-3)
-  ;; Initialize todo-current-todo-file.
-  (when (member (file-truename (buffer-file-name))
-               (funcall todo-files-function))
-    (setq-local todo-current-todo-file (file-truename (buffer-file-name))))
-  (setq-local todo-show-done-only nil)
-  (setq-local todo-categories-with-marks nil)
-  ;; (add-hook 'find-file-hook 'todo-add-to-buffer-list nil t)
-  (add-hook 'post-command-hook 'todo-update-buffer-list nil t)
-  (when todo-show-current-file
-    (add-hook 'pre-command-hook 'todo-show-current-file nil t))
-  (add-hook 'window-configuration-change-hook
-           'todo-reset-and-enable-done-separator nil t)
-  (add-hook 'kill-buffer-hook 'todo-reset-global-current-todo-file nil t))
+  (if (called-interactively-p 'any)
+      (message "Type `M-x todo-show' to enter Todo mode")
+    (todo-modes-set-1)
+    (todo-modes-set-2)
+    (todo-modes-set-3)
+    ;; Initialize todo-current-todo-file.
+    (when (member (file-truename (buffer-file-name))
+                 (funcall todo-files-function))
+      (setq-local todo-current-todo-file (file-truename (buffer-file-name))))
+    (setq-local todo-show-done-only nil)
+    (setq-local todo-categories-with-marks nil)
+    ;; (add-hook 'find-file-hook 'todo-add-to-buffer-list nil t)
+    (add-hook 'post-command-hook 'todo-update-buffer-list nil t)
+    (when todo-show-current-file
+      (add-hook 'pre-command-hook 'todo-show-current-file nil t))
+    (add-hook 'window-configuration-change-hook
+             'todo-reset-and-enable-done-separator nil t)
+    (add-hook 'kill-buffer-hook 'todo-reset-global-current-todo-file nil t)))
 
 (put 'todo-archive-mode 'mode-class 'special)
 
diff --git a/lisp/case-table.el b/lisp/case-table.el
index 6a9958c..6193eb8 100644
--- a/lisp/case-table.el
+++ b/lisp/case-table.el
@@ -1,6 +1,6 @@
 ;;; case-table.el --- code to extend the character set and support case tables 
 -*- lexical-binding: t -*-
 
-;; Copyright (C) 1988, 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: address@hidden
diff --git a/lisp/cdl.el b/lisp/cdl.el
index c011e95..5677d9d 100644
--- a/lisp/cdl.el
+++ b/lisp/cdl.el
@@ -1,6 +1,6 @@
 ;;; cdl.el --- Common Data Language (CDL) utility functions for GNU Emacs
 
-;; Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: address@hidden (Ata Etemadi)
 ;; Maintainer: address@hidden
diff --git a/lisp/cedet/.gitignore b/lisp/cedet/.gitignore
deleted file mode 100644
index 976586e..0000000
--- a/lisp/cedet/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-## Generated grammar files.
-semantic/bovine/c-by.el
-semantic/bovine/make-by.el
-semantic/bovine/scm-by.el
-semantic/wisent/javat-wy.el
-semantic/wisent/js-wy.el
-semantic/wisent/python-wy.el
-srecode/srt-wy.el
diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog
index d797132..5c95835 100644
--- a/lisp/cedet/ChangeLog
+++ b/lisp/cedet/ChangeLog
@@ -1,12 +1,90 @@
+2015-01-07  Stefan Monnier  <address@hidden>
+
+       Don't use <class> as a variable and don't assume that <class>-list-p is
+       automatically defined.
+
+       * ede/speedbar.el (ede-speedbar-compile-line)
+       (ede-speedbar-get-top-project-for-line):
+       * ede.el (ede-buffer-belongs-to-target-p)
+       (ede-buffer-belongs-to-project-p, ede-build-forms-menu)
+       (ede-add-project-to-global-list):
+       * semantic/db-typecache.el (semanticdb-get-typecache):
+       * semantic/db-file.el (semanticdb-load-database):
+       * semantic/db-el.el (semanticdb-elisp-sym->tag):
+       * semantic/db-ebrowse.el (semanticdb-ebrowse-load-helper):
+       * ede/project-am.el (project-am-preferred-target-type):
+       * ede/proj.el (ede-proj-load):
+       * ede/custom.el (ede-customize-current-target, ede-customize-target):
+       * semantic/ede-grammar.el ("semantic grammar"):
+       * semantic/scope.el (semantic-scope-reset-cache)
+       (semantic-calculate-scope):
+       * srecode/map.el (srecode-map-update-map):
+       * srecode/insert.el (srecode-insert-show-error-report)
+       (srecode-insert-method, srecode-insert-include-lookup)
+       (srecode-insert-method):
+       * srecode/fields.el (srecode-active-template-region):
+       * srecode/compile.el (srecode-flush-active-templates)
+       (srecode-compile-inserter): Don't use <class> as a variable.
+       Use `oref-default' for class slots.
+
+       * semantic/grammar.el (semantic-grammar-eldoc-last-data): New var.
+       (semantic-grammar-eldoc-get-macro-docstring): Use it instead of
+       eldoc-last-data.
+       * semantic/fw.el (semantic-exit-on-input): Use `declare'.
+       (semantic-throw-on-input): Use `with-current-buffer'.
+       * semantic/db.el (semanticdb-abstract-table-list): Define if not
+       pre-defined.
+       * semantic/db-find.el (semanticdb-find-tags-collector):
+       Use save-current-buffer.
+       (semanticdb-find-tags-collector): Don't use <class> as a variable.
+       * semantic/complete.el (semantic-complete-active-default)
+       (semantic-complete-current-matched-tag): Declare.
+       (semantic-complete-inline-custom-type): Don't use <class> as a variable.
+       * semantic/bovine/make.el (semantic-analyze-possible-completions):
+       Use with-current-buffer.
+       * semantic.el (semantic-parser-warnings): Declare.
+       * ede/base.el (ede-target-list): Define if not pre-defined.
+       (ede-with-projectfile): Prefer find-file-noselect over
+       save-window-excursion.
+
+2014-12-22  Stefan Monnier  <address@hidden>
+
+       * srecode/srt-mode.el (srecode-macro-help): Use eieio-class-children.
+
+       * semantic/db.el (semanticdb-cache-get): Prefer eieio-object-class over
+       eieio--object-class.
+
+       * semantic/db-el.el (semanticdb-elisp-sym->tag): Prefer find-class over
+       class-v.
+
+       * ede/generic.el (ede-find-target): Prefer \` and \' to ^ and $.
+
+2014-12-14  Dmitry Gutov  <address@hidden>
+
+       * semantic.el (semantic-analyze-completion-at-point-function)
+       (semantic-analyze-notc-completion-at-point-function)
+       (semantic-analyze-nolongprefix-completion-at-point-function):
+       Do nothing if the current buffer is not using Semantic (bug#19077).
+
+2014-12-14  Paul Eggert  <address@hidden>
+
+       * semantic/lex-spp.el (semantic-lex-spp-analyzer-do-replace):
+       Rename from semantic-lex-spp-anlyzer-do-replace.
+
+2014-12-08  Matt Curtis  <address@hidden>  (tiny change)
+
+       * pulse.el (pulse-momentary-highlight-one-line): Respect the POINT
+       argument (bug#17260).
+
 2014-11-09  Eric Ludlam  <address@hidden>
 
        * semantic.el (semantic-mode): Add/remove 3
        completion-at-point-functions.
-       (semantic-completion-at-point-function): Removed.
+       (semantic-completion-at-point-function): Remove.
        (semantic-analyze-completion-at-point-function)
        (semantic-analyze-notc-completion-at-point-function)
-       (semantic-analyze-nolongprefix-completion-at-point-function): New
-       completion at point functions.
+       (semantic-analyze-nolongprefix-completion-at-point-function):
+       New completion at point functions.
 
        * semantic/doc.el (semantic-doc-snarf-comment-for-tag): Fix case
        when comment-end is empty string.
@@ -50,18 +128,18 @@
        assignee now must be of class variable.
 
        * semantic/analyze/complete.el
-       (semantic-analyze-possible-completions-default): Add
-       'no-longprefix' flag.  When used, the prefix and prefixtypes are
+       (semantic-analyze-possible-completions-default):
+       Add 'no-longprefix' flag.  When used, the prefix and prefixtypes are
        shortened to just the last symbol.
 
        * semantic/bovine/c.el (semantic-c-do-lex-if): Catch errors from
        'hideif', and push to the parser warning stack.
        (semantic-lex-cpp-define): When a comment is at the end of a
-       macro, do not subtract an extra 1 from the found position.  Fixes
-       bug with: #define foo (a)/**/ adding an extra ')' to the stream.
+       macro, do not subtract an extra 1 from the found position.
+       Fixes bug with: #define foo (a)/**/ adding an extra ')' to the stream.
 
-       * semantic/bovine/scm.el (semantic-lex-scheme-symbol): Allow
-       symbols to be one char long.
+       * semantic/bovine/scm.el (semantic-lex-scheme-symbol):
+       Allow symbols to be one char long.
 
        * semantic/bovine/grammar.el
        (bovine-grammar-calculate-source-on-path): New.
@@ -77,8 +155,8 @@
        (ede-check-project-query-fcn): New variable
        (ede-check-project-directory): Use above when querying the user.
        Added to support unit testing of this security measure.
-       (ede-initialize-state-current-buffer): Use
-       `ede-directory-project-cons' instead of the -detect- fcn to take
+       (ede-initialize-state-current-buffer):
+       Use `ede-directory-project-cons' instead of the -detect- fcn to take
        advantage of the cache.  Pass found project into
        `ede-load-project-file'.
        (ede-load-project-file): Add new input DETECTIN.
@@ -91,18 +169,18 @@
        (ede-global-list-sanity-check): New Testing fcn.
        (ede-parent-project): Replace old code with call to faster
        `ede-find-subproject-for-directory'.
-       (ede-load-project-file): Use
-       `ede-directory-get-toplevel-open-project' instead of above
-       deleted.  Rename "pfc" to "autoloader".  Use
-       `ede-directory-project-cons' to detect a project.  Delete no
+       (ede-load-project-file):
+       Use `ede-directory-get-toplevel-open-project' instead of above
+       deleted.  Rename "pfc" to "autoloader".
+       Use `ede-directory-project-cons' to detect a project.  Delete no
        project found case where we search up the tree.
 
-       * ede/auto.el (ede-project-autoload): Fix doc typo.  Add
-       `:root-only' slot.
+       * ede/auto.el (ede-project-autoload): Fix doc typo.
+       Add `:root-only' slot.
        (ede-auto-load-project): Doc update: warn to not use.
-       (ede-dir-to-projectfile): Deleted.
-       (ede-project-autoload-dirmatch): Add subdir-only slot.  Make
-       configdatastash unbound by default.
+       (ede-dir-to-projectfile): Delete.
+       (ede-project-autoload-dirmatch): Add subdir-only slot.
+       Make configdatastash unbound by default.
        (ede-do-dirmatch): If subdir-only is true, then don't allow exact
        matches.  Account for configdatastash as unbound.  Assume value of
        nil means no tool installed.  Make sure loaded path matches from
@@ -110,7 +188,7 @@
        (ede-project-class-files): Note that makefile and automake are not
        root only.
        (ede-auto-detect-in-dir): New (for use with `ede/detect.el').
-       (ede-project-dirmatch-p): Deleted.
+       (ede-project-dirmatch-p): Delete.
        (ede-project-root-directory): Remove body, return nil.
        (ede-project-autoload): :proj-root-dirmatch can be null & doc fix.
        (ede-auto-detect-in-dir): If there is no :proj-file, check for a
@@ -128,8 +206,8 @@
        (ede-generic-config): Remove slots: c-include-path,
        c-preprocessor-table, c-preprocessor-files, classpath,
        build-command, debug-command, run command.  Inherit from
-       ede-extra-config-build, ede-extra-config-program.  Make
-       run-command :value match :custom so only strings are accepted.
+       ede-extra-config-build, ede-extra-config-program.
+       Make run-command :value match :custom so only strings are accepted.
        Add some more :group slot specifiers.
        (ede-generic-project): Add mixins `ede-project-with-config-c' and
        `ede-project-with-config-java'. Inherit from
@@ -141,15 +219,15 @@
        (ede-generic-target-c-cpp): Add mixin `ede-target-with-config-c'.
        (ede-generic-target-java): Add mixin `ede-target-with-config-java'.
        (ede-preprocessor-map, ede-system-include-path)
-       (edejava-classpath): Deleted, moved to config.el.
+       (edejava-classpath): Delete, moved to config.el.
        (project-compile-project, project-compile-target)
-       (project-debug-target, project-run-target): Deleted.
+       (project-debug-target, project-run-target): Delete.
        (ede-generic-get-configuration, ede-generic-setup-configuration)
        (ede-commit-project, project-rescan)
        (ede-generic-project::ede-customize)
        (ede-generic-target::ede-customize)
        (ede-generic-config::eieio-done-customizing)
-       (ede-generic-config::ede-commit): Deleted.  Subsumed by new
+       (ede-generic-config::ede-commit): Delete.  Subsumed by new
        baseclass.
        (ede-preprocessor-map, ede-system-include-path)
        (project-debug-target, project-run-target): Call new
@@ -158,7 +236,7 @@
 
        * ede/files.el (ede-find-project-root)
        (ede-files-find-existing)
-       (ede-directory-get-toplevel-open-project-new): Deleted.
+       (ede-directory-get-toplevel-open-project-new): Delete.
        (ede-project-root-directory): Use `ede-project-root' first.
        (ede-project-directory-remove-hash)
        (ede--directory-project-from-hash)
@@ -174,24 +252,24 @@
        projects.  When doing directory name matching, save the 'short'
        version of an answer (non-exact match) and eventually select the
        shortest answer at the end.  Expand the filename of tested
-       projects.  Better support for when inodes are disabled.  Add
-       'exact' option so that it will return a project that is an exact
+       projects.  Better support for when inodes are disabled.
+       Add 'exact' option so that it will return a project that is an exact
        match.
        (ede-find-subproject-for-directory): Small optimization to run
        `file-truename' less often.
        (ede-directory-project-p): Move content, then use
-       `ede-directory-project-cons'.  Use
-       `ede-detect-directory-for-project', replacing old detection loop.
+       `ede-directory-project-cons'.
+       Use `ede-detect-directory-for-project', replacing old detection loop.
        (ede-directory-project-cons): New, from above.
-       (ede-toplevel-project): Toss old scanning code.  Use
-       `ede-detect-directory-for-project' instead.
+       (ede-toplevel-project): Toss old scanning code.
+       Use `ede-detect-directory-for-project' instead.
        (ede-directory-get-toplevel-open-project-new): New.
 
-       * ede/linux.el (ede-linux-project-root): Deleted.
+       * ede/linux.el (ede-linux-project-root): Delete.
        (ede-project-autoload): Remove dirmatch entry - it is no longer
        needed.
 
-       * lisp/cedet/ede/proj.el (project-rescan): Replace direct
+       * ede/proj.el (project-rescan): Replace direct
        manipulation of `ede-projects' with equivalent and better
        functions.
        (ede-proj-load): Replace call to test if dir has project to
@@ -208,7 +286,7 @@
        * ede/linux.el (ede-linux-load): Do not add to global list here.
        Don't check for existing anymore.
        (project-rescan): New.
-       (ede-linux-project-list, ede-linux-file-existing): Deleted.
+       (ede-linux-project-list, ede-linux-file-existing): Delete.
        (ede-linux-project-root): Delete body.  Need symbol for autoloads
        for now.
        (ede-linux-project): No longer instance tracker.
@@ -230,7 +308,7 @@
          (ede-cpp-root-file-existing)
        (ede-cpp-root-project-file-for-dir)
        (ede-cpp-root-count, ede-cpp-root-project-root, ede-cpp-root-load)
-       (ede-project-autoload cpp-root): Deleted.
+       (ede-project-autoload cpp-root): Delete.
        (ede-project-root-directory): Return :directory instead of
        calculating from :file.
        (project-rescan): New.
@@ -243,11 +321,10 @@
 
 2014-11-09  David Engster  <address@hidden>
 
-       * lisp/cedet/ede/proj-elisp.el
-       (ede-proj-target-elisp::ede-proj-tweak-autoconf): Kill buffer
-       after saving modified elisp-comp script, as to avoid "file has
-       changed on disk; really edit the buffer" questions when script
-       gets rewritten.
+       * ede/proj-elisp.el (ede-proj-target-elisp::ede-proj-tweak-autoconf):
+       Kill buffer after saving modified elisp-comp script, so as to avoid
+       "file has changed on disk; really edit the buffer" questions when
+       script gets rewritten.
 
 2014-10-29  Paul Eggert  <address@hidden>
 
@@ -3355,7 +3432,7 @@
 ;; coding: utf-8
 ;; End:
 
-       Copyright (C) 2009-2014 Free Software Foundation, Inc.
+       Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/cedet/cedet-cscope.el b/lisp/cedet/cedet-cscope.el
index 08054e4..94b7b07 100644
--- a/lisp/cedet/cedet-cscope.el
+++ b/lisp/cedet/cedet-cscope.el
@@ -1,6 +1,6 @@
 ;;; cedet-cscope.el --- CScope support for CEDET
 
-;;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Package: cedet
diff --git a/lisp/cedet/cedet-files.el b/lisp/cedet/cedet-files.el
index 889b2d6..8e3901a 100644
--- a/lisp/cedet/cedet-files.el
+++ b/lisp/cedet/cedet-files.el
@@ -1,6 +1,6 @@
 ;;; cedet-files.el --- Common routines dealing with file names.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Package: cedet
diff --git a/lisp/cedet/cedet-global.el b/lisp/cedet/cedet-global.el
index 494c41b..99bffcb 100644
--- a/lisp/cedet/cedet-global.el
+++ b/lisp/cedet/cedet-global.el
@@ -1,6 +1,6 @@
 ;;; cedet-global.el --- GNU Global support for CEDET.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Package: cedet
diff --git a/lisp/cedet/cedet-idutils.el b/lisp/cedet/cedet-idutils.el
index ea0ad88..65af51c 100644
--- a/lisp/cedet/cedet-idutils.el
+++ b/lisp/cedet/cedet-idutils.el
@@ -1,6 +1,6 @@
 ;;; cedet-idutils.el --- ID Utils support for CEDET.
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Old-Version: 0.2
diff --git a/lisp/cedet/cedet.el b/lisp/cedet/cedet.el
index d4b6428..facd2bc 100644
--- a/lisp/cedet/cedet.el
+++ b/lisp/cedet/cedet.el
@@ -1,6 +1,6 @@
 ;;; cedet.el --- Setup CEDET environment
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: Eric M. Ludlam  <address@hidden>
diff --git a/lisp/cedet/data-debug.el b/lisp/cedet/data-debug.el
index 338e403..8a8af4e 100644
--- a/lisp/cedet/data-debug.el
+++ b/lisp/cedet/data-debug.el
@@ -1,6 +1,6 @@
 ;;; data-debug.el --- Data structure debugger
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam  <address@hidden>
 ;; Old-Version: 0.2
diff --git a/lisp/cedet/ede.el b/lisp/cedet/ede.el
index 55dff1a..87cfb85 100644
--- a/lisp/cedet/ede.el
+++ b/lisp/cedet/ede.el
@@ -1,6 +1,6 @@
 ;;; ede.el --- Emacs Development Environment gloss
 
-;; Copyright (C) 1998-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
@@ -248,12 +248,12 @@ Argument LIST-O-O is the list of objects to choose from."
   (let ((obj ede-object))
     (if (consp obj)
        (setq obj (car obj)))
-    (and obj (obj-of-class-p obj ede-target))))
+    (and obj (obj-of-class-p obj 'ede-target))))
 
 (defun ede-buffer-belongs-to-project-p ()
   "Return non-nil if this buffer belongs to at least one project."
   (if (or (null ede-object) (consp ede-object)) nil
-    (obj-of-class-p ede-object-project ede-project)))
+    (obj-of-class-p ede-object-project 'ede-project)))
 
 (defun ede-menu-obj-of-class-p (class)
   "Return non-nil if some member of `ede-object' is a child of CLASS."
@@ -281,7 +281,7 @@ Argument MENU-DEF is the menu definition to use."
        ;; First, collect the build items from the project
        (setq newmenu (append newmenu (ede-menu-items-build obj t)))
        ;; Second, declare the current target menu items
-       (if (and ede-obj (ede-menu-obj-of-class-p ede-target))
+       (if (and ede-obj (ede-menu-obj-of-class-p 'ede-target))
            (while ede-obj
              (setq newmenu (append newmenu
                                    (ede-menu-items-build (car ede-obj) t))
@@ -1078,7 +1078,7 @@ On success, return the added project."
     (error "No project created to add to master list"))
   (when (not (eieio-object-p proj))
     (error "Attempt to add non-object to master project list"))
-  (when (not (obj-of-class-p proj ede-project-placeholder))
+  (when (not (obj-of-class-p proj 'ede-project-placeholder))
     (error "Attempt to add a non-project to the ede projects list"))
   (add-to-list 'ede-projects proj)
   proj)
@@ -1099,6 +1099,8 @@ Flush the dead projects from the project cache."
       (ede-delete-project-from-global-list D))
     ))
 
+(defvar ede--disable-inode)             ;Defined in ede/files.el.
+
 (defun ede-global-list-sanity-check ()
   "Perform a sanity check to make sure there are no duplicate projects."
   (interactive)
diff --git a/lisp/cedet/ede/auto.el b/lisp/cedet/ede/auto.el
index 63e0504..769bea4 100644
--- a/lisp/cedet/ede/auto.el
+++ b/lisp/cedet/ede/auto.el
@@ -1,6 +1,6 @@
 ;;; ede/auto.el --- Autoload features for EDE
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/autoconf-edit.el b/lisp/cedet/ede/autoconf-edit.el
index 0e829de..687b8a0 100644
--- a/lisp/cedet/ede/autoconf-edit.el
+++ b/lisp/cedet/ede/autoconf-edit.el
@@ -1,6 +1,6 @@
 ;;; ede/autoconf-edit.el --- Keymap for autoconf
 
-;; Copyright (C) 1998-2000, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2000, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project
diff --git a/lisp/cedet/ede/base.el b/lisp/cedet/ede/base.el
index 4183ff4..ce7857b 100644
--- a/lisp/cedet/ede/base.el
+++ b/lisp/cedet/ede/base.el
@@ -1,6 +1,6 @@
 ;;; ede/base.el --- Baseclasses for EDE.
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -159,6 +159,9 @@ and querying them will cause the actual project to get 
loaded.")
 ;; Projects can also affect how EDE works, by changing what appears in
 ;; the EDE menu, or how some keys are bound.
 ;;
+(unless (fboundp 'ede-target-list-p)
+  (cl-deftype ede-target-list () '(list-of ede-target)))
+
 (defclass ede-project (ede-project-placeholder)
   ((subproj :initform nil
            :type list
@@ -287,16 +290,18 @@ All specific project types must derive from this project."
 ;;
 (defmacro ede-with-projectfile (obj &rest forms)
   "For the project in which OBJ resides, execute FORMS."
-  `(save-window-excursion
-     (let* ((pf (if (obj-of-class-p ,obj ede-target)
-                   (ede-target-parent ,obj)
-                 ,obj))
-           (dbka (get-file-buffer (oref pf file))))
-       (if (not dbka) (find-file (oref pf file))
-        (switch-to-buffer dbka))
+  (declare (indent 1))
+  (unless (symbolp obj)
+    (message "Beware! ede-with-projectfile's first arg is copied: %S" obj))
+  `(let* ((pf (if (obj-of-class-p ,obj 'ede-target)
+                  (ede-target-parent ,obj)
+                ,obj))
+          (dbka (get-file-buffer (oref pf file))))
+     (with-current-buffer
+         (if (not dbka) (find-file-noselect (oref pf file))
+           dbka)
        ,@forms
        (if (not dbka) (kill-buffer (current-buffer))))))
-(put 'ede-with-projectfile 'lisp-indent-function 1)
 
 ;;; The EDE persistent cache.
 ;;
diff --git a/lisp/cedet/ede/config.el b/lisp/cedet/ede/config.el
index 65713d9..e479af0 100644
--- a/lisp/cedet/ede/config.el
+++ b/lisp/cedet/ede/config.el
@@ -1,6 +1,6 @@
 ;;; ede/config.el --- Configuration Handler baseclass
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/cpp-root.el b/lisp/cedet/ede/cpp-root.el
index 0ccdc06..e32066a 100644
--- a/lisp/cedet/ede/cpp-root.el
+++ b/lisp/cedet/ede/cpp-root.el
@@ -1,6 +1,6 @@
 ;;; ede/cpp-root.el --- A simple way to wrap a C++ project with a single root
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/custom.el b/lisp/cedet/ede/custom.el
index ca36e1d..a39b488 100644
--- a/lisp/cedet/ede/custom.el
+++ b/lisp/cedet/ede/custom.el
@@ -1,6 +1,6 @@
 ;;; ede/custom.el --- customization of EDE projects.
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -61,7 +61,7 @@
   "Edit fields of the current target through EIEIO & Custom."
   (interactive)
   (require 'eieio-custom)
-  (if (not (obj-of-class-p ede-object ede-target))
+  (if (not (obj-of-class-p ede-object 'ede-target))
       (error "Current file is not part of a target"))
   (ede-customize-target ede-object))
 
@@ -72,7 +72,7 @@
   "Edit fields of the current target through EIEIO & Custom.
 OBJ is the target object to customize."
   (require 'eieio-custom)
-  (if (and obj (not (obj-of-class-p obj ede-target)))
+  (if (and obj (not (obj-of-class-p obj 'ede-target)))
       (error "No logical target to customize"))
   (ede-customize obj))
 
diff --git a/lisp/cedet/ede/detect.el b/lisp/cedet/ede/detect.el
index cc73104..9761b9e 100644
--- a/lisp/cedet/ede/detect.el
+++ b/lisp/cedet/ede/detect.el
@@ -1,6 +1,6 @@
 ;;; ede/detect.el --- EDE project detection and file associations
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/dired.el b/lisp/cedet/ede/dired.el
index 4c17a91..836a538 100644
--- a/lisp/cedet/ede/dired.el
+++ b/lisp/cedet/ede/dired.el
@@ -1,6 +1,7 @@
 ;;; ede/dired.el --- EDE extensions to dired.
 
-;; Copyright (C) 1998-2000, 2003, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2000, 2003, 2009-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Old-Version: 0.4
diff --git a/lisp/cedet/ede/emacs.el b/lisp/cedet/ede/emacs.el
index 88df1d2..621e895 100644
--- a/lisp/cedet/ede/emacs.el
+++ b/lisp/cedet/ede/emacs.el
@@ -1,6 +1,6 @@
 ;;; ede/emacs.el --- Special project for Emacs
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/files.el b/lisp/cedet/ede/files.el
index f9a8558..a3febfa 100644
--- a/lisp/cedet/ede/files.el
+++ b/lisp/cedet/ede/files.el
@@ -1,6 +1,6 @@
 ;;; ede/files.el --- Associate projects with files and directories.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/generic.el b/lisp/cedet/ede/generic.el
index f0314cb..4d1e0e2 100644
--- a/lisp/cedet/ede/generic.el
+++ b/lisp/cedet/ede/generic.el
@@ -1,6 +1,6 @@
 ;;; ede/generic.el --- Base Support for generic build systems
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -232,7 +232,7 @@ If one doesn't exist, create a new one for this directory."
        (let* ((classsym (intern (car C)))
               (extreg (oref classsym extension)))
          (when (and (not (string= extreg ""))
-                    (string-match (concat "^" extreg "$") ext))
+                    (string-match (concat "\\`\\(?:" extreg "\\)\\'") ext))
            (setq cls classsym)))))
     (when (not cls) (setq cls 'ede-generic-target-misc))
     ;; find a pre-existing matching target
diff --git a/lisp/cedet/ede/linux.el b/lisp/cedet/ede/linux.el
index b28301d..c962724 100644
--- a/lisp/cedet/ede/linux.el
+++ b/lisp/cedet/ede/linux.el
@@ -1,6 +1,6 @@
 ;;; ede/linux.el --- Special project for Linux
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/locate.el b/lisp/cedet/ede/locate.el
index fdc03f6..c0c8ae3 100644
--- a/lisp/cedet/ede/locate.el
+++ b/lisp/cedet/ede/locate.el
@@ -1,6 +1,6 @@
 ;;; ede/locate.el --- Locate support
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/make.el b/lisp/cedet/ede/make.el
index d05e21b..6545bb3 100644
--- a/lisp/cedet/ede/make.el
+++ b/lisp/cedet/ede/make.el
@@ -1,6 +1,6 @@
 ;;; ede/make.el --- General information about "make"
 
-;;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/makefile-edit.el b/lisp/cedet/ede/makefile-edit.el
index 4c4398e..e848d45 100644
--- a/lisp/cedet/ede/makefile-edit.el
+++ b/lisp/cedet/ede/makefile-edit.el
@@ -1,6 +1,6 @@
 ;;; makefile-edit.el --- Makefile editing/scanning commands.
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/pconf.el b/lisp/cedet/ede/pconf.el
index 1fa2a1c..b22cd87 100644
--- a/lisp/cedet/ede/pconf.el
+++ b/lisp/cedet/ede/pconf.el
@@ -1,6 +1,6 @@
 ;;; ede/pconf.el --- configure.ac maintenance for EDE
 
-;;; Copyright (C) 1998-2000, 2005, 2008-2014 Free Software Foundation,
+;;; Copyright (C) 1998-2000, 2005, 2008-2015 Free Software Foundation,
 ;;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/ede/pmake.el b/lisp/cedet/ede/pmake.el
index ec85068..deefb7b 100644
--- a/lisp/cedet/ede/pmake.el
+++ b/lisp/cedet/ede/pmake.el
@@ -1,6 +1,6 @@
 ;;; ede-pmake.el --- EDE Generic Project Makefile code generator.
 
-;; Copyright (C) 1998-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-archive.el b/lisp/cedet/ede/proj-archive.el
index 13a4384..ca729ce 100644
--- a/lisp/cedet/ede/proj-archive.el
+++ b/lisp/cedet/ede/proj-archive.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-archive.el --- EDE Generic Project archive support
 
-;;  Copyright (C) 1998-2001, 2009-2014 Free Software Foundation, Inc.
+;;  Copyright (C) 1998-2001, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-aux.el b/lisp/cedet/ede/proj-aux.el
index fe7d891..266b865 100644
--- a/lisp/cedet/ede/proj-aux.el
+++ b/lisp/cedet/ede/proj-aux.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-aux.el --- EDE Generic Project auxiliary file support
 
-;; Copyright (C) 1998-2000, 2007, 2009-2014 Free Software Foundation,
+;; Copyright (C) 1998-2000, 2007, 2009-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/ede/proj-comp.el b/lisp/cedet/ede/proj-comp.el
index b539842..abe5866 100644
--- a/lisp/cedet/ede/proj-comp.el
+++ b/lisp/cedet/ede/proj-comp.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-comp.el --- EDE Generic Project compiler/rule driver
 
-;; Copyright (C) 1999-2001, 2004-2005, 2007, 2009-2014 Free Software
+;; Copyright (C) 1999-2001, 2004-2005, 2007, 2009-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/ede/proj-elisp.el b/lisp/cedet/ede/proj-elisp.el
index 8d5a174..8e01445 100644
--- a/lisp/cedet/ede/proj-elisp.el
+++ b/lisp/cedet/ede/proj-elisp.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-elisp.el --- EDE Generic Project Emacs Lisp support
 
-;; Copyright (C) 1998-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-info.el b/lisp/cedet/ede/proj-info.el
index 3720e51..692b51b 100644
--- a/lisp/cedet/ede/proj-info.el
+++ b/lisp/cedet/ede/proj-info.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-info.el --- EDE Generic Project texinfo support
 
-;;; Copyright (C) 1998-2001, 2004, 2007-2014 Free Software Foundation,
+;;; Copyright (C) 1998-2001, 2004, 2007-2015 Free Software Foundation,
 ;;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/ede/proj-misc.el b/lisp/cedet/ede/proj-misc.el
index 65d7bdd..3514189 100644
--- a/lisp/cedet/ede/proj-misc.el
+++ b/lisp/cedet/ede/proj-misc.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-misc.el --- EDE Generic Project Emacs Lisp support
 
-;; Copyright (C) 1998-2001, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2001, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-obj.el b/lisp/cedet/ede/proj-obj.el
index a97fc03..b137aee 100644
--- a/lisp/cedet/ede/proj-obj.el
+++ b/lisp/cedet/ede/proj-obj.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-obj.el --- EDE Generic Project Object code generation support
 
-;;; Copyright (C) 1998-2000, 2005, 2008-2014 Free Software Foundation,
+;;; Copyright (C) 1998-2000, 2005, 2008-2015 Free Software Foundation,
 ;;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/ede/proj-prog.el b/lisp/cedet/ede/proj-prog.el
index e29534a..6a5c3c0 100644
--- a/lisp/cedet/ede/proj-prog.el
+++ b/lisp/cedet/ede/proj-prog.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-prog.el --- EDE Generic Project program support
 
-;; Copyright (C) 1998-2001, 2005, 2008-2014 Free Software Foundation,
+;; Copyright (C) 1998-2001, 2005, 2008-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/ede/proj-scheme.el b/lisp/cedet/ede/proj-scheme.el
index 20e8835..b7ba1cf 100644
--- a/lisp/cedet/ede/proj-scheme.el
+++ b/lisp/cedet/ede/proj-scheme.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-scheme.el --- EDE Generic Project scheme (guile) support
 
-;; Copyright (C) 1998-2000, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2000, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make, scheme
diff --git a/lisp/cedet/ede/proj-shared.el b/lisp/cedet/ede/proj-shared.el
index e8a49cc..37999a3 100644
--- a/lisp/cedet/ede/proj-shared.el
+++ b/lisp/cedet/ede/proj-shared.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-shared.el --- EDE Generic Project shared library support
 
-;;; Copyright (C) 1998-2000, 2009-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 1998-2000, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj.el b/lisp/cedet/ede/proj.el
index 7f3b186..fd789b3 100644
--- a/lisp/cedet/ede/proj.el
+++ b/lisp/cedet/ede/proj.el
@@ -1,6 +1,6 @@
 ;;; ede/proj.el --- EDE Generic Project file driver
 
-;; Copyright (C) 1998-2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
@@ -297,7 +297,7 @@ for the tree being read in.  If ROOTPROJ is nil, then 
assume that
 the PROJECT being read in is the root project."
   (save-excursion
     (let ((ret (eieio-persistent-read (concat project "Project.ede")
-                                     ede-proj-project))
+                                     'ede-proj-project))
          (subdirs (directory-files project nil "[^.].*" nil)))
       (if (not (object-of-class-p ret 'ede-proj-project))
          (error "Corrupt project file"))
diff --git a/lisp/cedet/ede/project-am.el b/lisp/cedet/ede/project-am.el
index 3e7a97c..d0ca809 100644
--- a/lisp/cedet/ede/project-am.el
+++ b/lisp/cedet/ede/project-am.el
@@ -1,7 +1,7 @@
 ;;; project-am.el --- A project management scheme based on automake files.
 
-;; Copyright (C) 1998-2000, 2003, 2005, 2007-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1998-2000, 2003, 2005, 2007-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Old-Version: 0.0.3
@@ -853,13 +853,13 @@ Argument FILE is the file to extract the end directory 
name from."
 (defun project-am-preferred-target-type (file)
   "For FILE, return the preferred type for that file."
   (cond ((string-match "\\.texi?\\(nfo\\)$" file)
-        project-am-texinfo)
+        'project-am-texinfo)
        ((string-match "\\.[0-9]$" file)
-        project-am-man)
+        'project-am-man)
        ((string-match "\\.el$" file)
-        project-am-lisp)
+        'project-am-lisp)
        (t
-        project-am-program)))
+        'project-am-program)))
 
 (defmethod ede-buffer-header-file((this project-am-objectcode) buffer)
   "There are no default header files."
diff --git a/lisp/cedet/ede/shell.el b/lisp/cedet/ede/shell.el
index d28977b..e15ca19 100644
--- a/lisp/cedet/ede/shell.el
+++ b/lisp/cedet/ede/shell.el
@@ -1,6 +1,6 @@
 ;;; ede/shell.el --- A shell controlled by EDE.
 ;;
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/simple.el b/lisp/cedet/ede/simple.el
index 87d3691..f958287 100644
--- a/lisp/cedet/ede/simple.el
+++ b/lisp/cedet/ede/simple.el
@@ -1,6 +1,6 @@
 ;;; ede/simple.el --- Overlay an EDE structure on an existing project
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/source.el b/lisp/cedet/ede/source.el
index fa9485f..978315a 100644
--- a/lisp/cedet/ede/source.el
+++ b/lisp/cedet/ede/source.el
@@ -1,6 +1,6 @@
 ;; ede/source.el --- EDE source code object
 
-;; Copyright (C) 2000, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/speedbar.el b/lisp/cedet/ede/speedbar.el
index ded9c78..e08562a 100644
--- a/lisp/cedet/ede/speedbar.el
+++ b/lisp/cedet/ede/speedbar.el
@@ -1,6 +1,6 @@
 ;;; ede/speedbar.el --- Speedbar viewing of EDE projects
 
-;; Copyright (C) 1998-2001, 2003, 2005, 2007-2014 Free Software
+;; Copyright (C) 1998-2001, 2003, 2005, 2007-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
@@ -121,9 +121,9 @@ Argument DIR is the directory from which to derive the list 
of objects."
   (let ((obj (eieio-speedbar-find-nearest-object)))
     (if (not (eieio-object-p obj))
        nil
-      (cond ((obj-of-class-p obj ede-project)
+      (cond ((obj-of-class-p obj 'ede-project)
             (project-compile-project obj))
-           ((obj-of-class-p obj ede-target)
+           ((obj-of-class-p obj 'ede-target)
             (project-compile-target obj))
            (t (error "Error in speedbar structure"))))))
 
@@ -133,9 +133,9 @@ Argument DIR is the directory from which to derive the list 
of objects."
   (let ((obj (eieio-speedbar-find-nearest-object)))
     (if (not (eieio-object-p obj))
        (error "Error in speedbar or ede structure")
-      (if (obj-of-class-p obj ede-target)
+      (if (obj-of-class-p obj 'ede-target)
          (setq obj (ede-target-parent obj)))
-      (if (obj-of-class-p obj ede-project)
+      (if (obj-of-class-p obj 'ede-project)
          obj
        (error "Error in speedbar or ede structure")))))
 
diff --git a/lisp/cedet/ede/srecode.el b/lisp/cedet/ede/srecode.el
index 5a9e63c..3af0372 100644
--- a/lisp/cedet/ede/srecode.el
+++ b/lisp/cedet/ede/srecode.el
@@ -1,6 +1,6 @@
 ;;; ede/srecode.el --- EDE utilities on top of SRecoder
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/ede/system.el b/lisp/cedet/ede/system.el
index 486c875..b78d95c 100644
--- a/lisp/cedet/ede/system.el
+++ b/lisp/cedet/ede/system.el
@@ -1,6 +1,6 @@
 ;;; ede-system.el --- EDE working with the system (VC, FTP, ETC)
 
-;; Copyright (C) 2001-2003, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2003, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make, vc
diff --git a/lisp/cedet/ede/util.el b/lisp/cedet/ede/util.el
index 434c28a..bfde858 100644
--- a/lisp/cedet/ede/util.el
+++ b/lisp/cedet/ede/util.el
@@ -1,6 +1,6 @@
 ;;; ede/util.el --- EDE utilities
 
-;; Copyright (C) 2000, 2005, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2005, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
diff --git a/lisp/cedet/inversion.el b/lisp/cedet/inversion.el
index 0e5bfad..8409b73 100644
--- a/lisp/cedet/inversion.el
+++ b/lisp/cedet/inversion.el
@@ -1,6 +1,6 @@
 ;;; inversion.el --- When you need something in version XX.XX
 
-;;; Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Version: 1.3
diff --git a/lisp/cedet/mode-local.el b/lisp/cedet/mode-local.el
index a483f1c..3c176ae 100644
--- a/lisp/cedet/mode-local.el
+++ b/lisp/cedet/mode-local.el
@@ -1,6 +1,6 @@
 ;;; mode-local.el --- Support for mode local facilities
 ;;
-;; Copyright (C) 2004-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2005, 2007-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/lisp/cedet/pulse.el b/lisp/cedet/pulse.el
index e2a48a4..89d44c2 100644
--- a/lisp/cedet/pulse.el
+++ b/lisp/cedet/pulse.el
@@ -1,6 +1,6 @@
 ;;; pulse.el --- Pulsing Overlays
 
-;;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Version: 1.0
@@ -227,13 +227,15 @@ Optional argument FACE specifies the face to do the 
highlighting."
 (defun pulse-momentary-highlight-one-line (point &optional face)
   "Highlight the line around POINT, unhighlighting before next command.
 Optional argument FACE specifies the face to do the highlighting."
-  (let ((start (point-at-bol))
-       (end (save-excursion
-              (end-of-line)
-              (when (not (eobp))
-                (forward-char 1))
-              (point))))
-    (pulse-momentary-highlight-region start end face)))
+  (save-excursion
+    (goto-char point)
+    (let ((start (point-at-bol))
+          (end (save-excursion
+                 (end-of-line)
+                 (when (not (eobp))
+                   (forward-char 1))
+                 (point))))
+      (pulse-momentary-highlight-region start end face))))
 
 (defun pulse-momentary-highlight-region (start end &optional face)
   "Highlight between START and END, unhighlighting before next command.
diff --git a/lisp/cedet/semantic.el b/lisp/cedet/semantic.el
index 6bd090c..81a9788 100644
--- a/lisp/cedet/semantic.el
+++ b/lisp/cedet/semantic.el
@@ -1,6 +1,6 @@
 ;;; semantic.el --- Semantic buffer evaluator.
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax tools
@@ -573,6 +573,7 @@ string."
 ;; The best way to call the parser from programs is via
 ;; `semantic-fetch-tags'.  This, in turn, uses other internal
 ;; API functions which plug-in parsers can take advantage of.
+(defvar semantic-parser-warnings)
 
 (defun semantic-fetch-tags ()
   "Fetch semantic tags from the current buffer.
@@ -602,49 +603,49 @@ was marked unparseable, then do nothing, and return the 
cache."
      (garbage-collect)
      (cond
 
-;;;; Try the incremental parser to do a fast update.
-     ((semantic-parse-tree-needs-update-p)
-      (setq res (semantic-parse-changes))
-      (if (semantic-parse-tree-needs-rebuild-p)
-          ;; If the partial reparse fails, jump to a full reparse.
-          (semantic-fetch-tags)
-        ;; Clear the cache of unmatched syntax tokens
-        ;;
-        ;; NOTE TO SELF:
-        ;;
-        ;; Move this into the incremental parser.  This is a bug.
-        ;;
-        (semantic-clear-unmatched-syntax-cache)
-        (run-hook-with-args ;; Let hooks know the updated tags
-         'semantic-after-partial-cache-change-hook res))
-      (setq semantic--completion-cache nil))
-
-;;;; Parse the whole system.
-     ((semantic-parse-tree-needs-rebuild-p)
-      ;; Use Emacs's built-in progress-reporter (only interactive).
-      (if noninteractive
-         (setq res (semantic-parse-region (point-min) (point-max)))
-       (let ((semantic--progress-reporter
-              (and (>= (point-max) semantic-minimum-working-buffer-size)
-                   (eq semantic-working-type 'percent)
-                   (make-progress-reporter
-                    (semantic-parser-working-message (buffer-name))
-                    0 100))))
-         (setq res (semantic-parse-region (point-min) (point-max)))
-         (if semantic--progress-reporter
-             (progress-reporter-done semantic--progress-reporter))))
-
-      ;; Clear the caches when we see there were no errors.
-      ;; But preserve the unmatched syntax cache and warnings!
-      (let (semantic-unmatched-syntax-cache
-           semantic-unmatched-syntax-cache-check
-           semantic-parser-warnings)
-       (semantic-clear-toplevel-cache))
-      ;; Set up the new overlays
-      (semantic--tag-link-list-to-buffer res)
-      ;; Set up the cache with the new results
-      (semantic--set-buffer-cache res)
-      ))))
+      ;; Try the incremental parser to do a fast update.
+      ((semantic-parse-tree-needs-update-p)
+       (setq res (semantic-parse-changes))
+       (if (semantic-parse-tree-needs-rebuild-p)
+           ;; If the partial reparse fails, jump to a full reparse.
+           (semantic-fetch-tags)
+         ;; Clear the cache of unmatched syntax tokens
+         ;;
+         ;; NOTE TO SELF:
+         ;;
+         ;; Move this into the incremental parser.  This is a bug.
+         ;;
+         (semantic-clear-unmatched-syntax-cache)
+         (run-hook-with-args ;; Let hooks know the updated tags
+          'semantic-after-partial-cache-change-hook res))
+       (setq semantic--completion-cache nil))
+
+      ;; Parse the whole system.
+      ((semantic-parse-tree-needs-rebuild-p)
+       ;; Use Emacs's built-in progress-reporter (only interactive).
+       (if noninteractive
+           (setq res (semantic-parse-region (point-min) (point-max)))
+         (let ((semantic--progress-reporter
+                (and (>= (point-max) semantic-minimum-working-buffer-size)
+                     (eq semantic-working-type 'percent)
+                     (make-progress-reporter
+                      (semantic-parser-working-message (buffer-name))
+                      0 100))))
+           (setq res (semantic-parse-region (point-min) (point-max)))
+           (if semantic--progress-reporter
+               (progress-reporter-done semantic--progress-reporter))))
+
+       ;; Clear the caches when we see there were no errors.
+       ;; But preserve the unmatched syntax cache and warnings!
+       (let (semantic-unmatched-syntax-cache
+             semantic-unmatched-syntax-cache-check
+             semantic-parser-warnings)
+         (semantic-clear-toplevel-cache))
+       ;; Set up the new overlays
+       (semantic--tag-link-list-to-buffer res)
+       ;; Set up the cache with the new results
+       (semantic--set-buffer-cache res)
+       ))))
 
   ;; Always return the current parse tree.
   semantic--buffer-cache)
@@ -1174,17 +1175,18 @@ Semantic mode.
   "Return possible analysis completions at point.
 The completions provided are via `semantic-analyze-possible-completions'.
 This function can be used by `completion-at-point-functions'."
-  (let* ((ctxt (semantic-analyze-current-context))
-        (possible (semantic-analyze-possible-completions ctxt)))
-
-    ;; The return from this is either:
-    ;; nil - not applicable here.
-    ;; A list: (START END COLLECTION . PROPS)
-    (when possible
-      (list (car (oref ctxt bounds))
-           (cdr (oref ctxt bounds))
-           possible))
-    ))
+  (when (semantic-active-p)
+    (let* ((ctxt (semantic-analyze-current-context))
+           (possible (semantic-analyze-possible-completions ctxt)))
+
+      ;; The return from this is either:
+      ;; nil - not applicable here.
+      ;; A list: (START END COLLECTION . PROPS)
+      (when possible
+        (list (car (oref ctxt bounds))
+              (cdr (oref ctxt bounds))
+              possible))
+      )))
 
 (defun semantic-analyze-notc-completion-at-point-function ()
   "Return possible analysis completions at point.
@@ -1192,14 +1194,15 @@ The completions provided are via 
`semantic-analyze-possible-completions',
 but with the 'no-tc option passed in, which means constraints based
 on what is being assigned to are ignored.
 This function can be used by `completion-at-point-functions'."
-  (let* ((ctxt (semantic-analyze-current-context))
-        (possible (semantic-analyze-possible-completions ctxt 'no-tc)))
+  (when (semantic-active-p)
+    (let* ((ctxt (semantic-analyze-current-context))
+           (possible (semantic-analyze-possible-completions ctxt 'no-tc)))
 
-    (when possible
-      (list (car (oref ctxt bounds))
-           (cdr (oref ctxt bounds))
-           possible))
-    ))
+      (when possible
+        (list (car (oref ctxt bounds))
+              (cdr (oref ctxt bounds))
+              possible))
+      )))
 
 (defun semantic-analyze-nolongprefix-completion-at-point-function ()
   "Return possible analysis completions at point.
@@ -1207,15 +1210,16 @@ The completions provided are via 
`semantic-analyze-possible-completions',
 but with the 'no-tc and 'no-longprefix option passed in, which means
 constraints resulting in a long multi-symbol dereference are ignored.
 This function can be used by `completion-at-point-functions'."
-  (let* ((ctxt (semantic-analyze-current-context))
-        (possible (semantic-analyze-possible-completions
-                   ctxt 'no-tc 'no-longprefix)))
-
-    (when possible
-      (list (car (oref ctxt bounds))
-           (cdr (oref ctxt bounds))
-           possible))
-    ))
+  (when (semantic-active-p)
+    (let* ((ctxt (semantic-analyze-current-context))
+           (possible (semantic-analyze-possible-completions
+                      ctxt 'no-tc 'no-longprefix)))
+
+      (when possible
+        (list (car (oref ctxt bounds))
+              (cdr (oref ctxt bounds))
+              possible))
+      )))
 
 ;;; Autoload some functions that are not in semantic/loaddefs
 
diff --git a/lisp/cedet/semantic/analyze.el b/lisp/cedet/semantic/analyze.el
index 77e0917..846501e 100644
--- a/lisp/cedet/semantic/analyze.el
+++ b/lisp/cedet/semantic/analyze.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze.el --- Analyze semantic tags against local context
 
-;; Copyright (C) 2000-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/analyze/complete.el 
b/lisp/cedet/semantic/analyze/complete.el
index 9fa4001..c47b573 100644
--- a/lisp/cedet/semantic/analyze/complete.el
+++ b/lisp/cedet/semantic/analyze/complete.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze/complete.el --- Smart Completions
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/analyze/debug.el 
b/lisp/cedet/semantic/analyze/debug.el
index 8040c8d..9f9270f 100644
--- a/lisp/cedet/semantic/analyze/debug.el
+++ b/lisp/cedet/semantic/analyze/debug.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze/debug.el --- Debug the analyzer
 
-;;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/analyze/fcn.el 
b/lisp/cedet/semantic/analyze/fcn.el
index e2e570f..4b105c1 100644
--- a/lisp/cedet/semantic/analyze/fcn.el
+++ b/lisp/cedet/semantic/analyze/fcn.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze/fcn.el --- Analyzer support functions.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/analyze/refs.el 
b/lisp/cedet/semantic/analyze/refs.el
index 7a35b50..923163c 100644
--- a/lisp/cedet/semantic/analyze/refs.el
+++ b/lisp/cedet/semantic/analyze/refs.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze/refs.el --- Analysis of the references between tags.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/bovine.el b/lisp/cedet/semantic/bovine.el
index fb4072b..ef28fb9 100644
--- a/lisp/cedet/semantic/bovine.el
+++ b/lisp/cedet/semantic/bovine.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine.el --- LL Parser/Analyzer core.
 
-;; Copyright (C) 1999-2004, 2006-2007, 2009-2014 Free Software
+;; Copyright (C) 1999-2004, 2006-2007, 2009-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/semantic/bovine/c.el b/lisp/cedet/semantic/bovine/c.el
index 9aceca8..aa93e24 100644
--- a/lisp/cedet/semantic/bovine/c.el
+++ b/lisp/cedet/semantic/bovine/c.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/c.el --- Semantic details for C
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/bovine/debug.el 
b/lisp/cedet/semantic/bovine/debug.el
index 5f955cb..465a69a 100644
--- a/lisp/cedet/semantic/bovine/debug.el
+++ b/lisp/cedet/semantic/bovine/debug.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/debug.el --- Debugger support for bovinator
 
-;; Copyright (C) 2003, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/bovine/el.el b/lisp/cedet/semantic/bovine/el.el
index 2cdae01..1b223d2 100644
--- a/lisp/cedet/semantic/bovine/el.el
+++ b/lisp/cedet/semantic/bovine/el.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/el.el --- Semantic details for Emacs Lisp
 
-;; Copyright (C) 1999-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/bovine/gcc.el 
b/lisp/cedet/semantic/bovine/gcc.el
index dfa45b4..19d1491 100644
--- a/lisp/cedet/semantic/bovine/gcc.el
+++ b/lisp/cedet/semantic/bovine/gcc.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/gcc.el --- gcc querying special code for the C parser
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/bovine/grammar.el 
b/lisp/cedet/semantic/bovine/grammar.el
index 55df002..ebe2fd1 100644
--- a/lisp/cedet/semantic/bovine/grammar.el
+++ b/lisp/cedet/semantic/bovine/grammar.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/grammar.el --- Bovine's input grammar mode
 ;;
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/lisp/cedet/semantic/bovine/make.el 
b/lisp/cedet/semantic/bovine/make.el
index 56a5203..c001a4d 100644
--- a/lisp/cedet/semantic/bovine/make.el
+++ b/lisp/cedet/semantic/bovine/make.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/make.el --- Makefile parsing rules.
 
-;; Copyright (C) 2000-2004, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2004, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -178,9 +178,8 @@ This is the same as a regular prototype."
   makefile-mode (context)
   "Return a list of possible completions in a Makefile.
 Uses default implementation, and also gets a list of filenames."
-  (save-excursion
-    (require 'semantic/analyze/complete)
-    (set-buffer (oref context buffer))
+  (require 'semantic/analyze/complete)
+  (with-current-buffer (oref context buffer)
     (let* ((normal (semantic-analyze-possible-completions-default context))
           (classes (oref context :prefixclass))
           (filetags nil))
diff --git a/lisp/cedet/semantic/bovine/scm.el 
b/lisp/cedet/semantic/bovine/scm.el
index 4e01c33..8b99e70 100644
--- a/lisp/cedet/semantic/bovine/scm.el
+++ b/lisp/cedet/semantic/bovine/scm.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/scm.el --- Semantic details for Scheme (guile)
 
-;;; Copyright (C) 2001-2004, 2008-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2001-2004, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/chart.el b/lisp/cedet/semantic/chart.el
index c15329a..51d9e7d 100644
--- a/lisp/cedet/semantic/chart.el
+++ b/lisp/cedet/semantic/chart.el
@@ -1,6 +1,6 @@
 ;;; semantic/chart.el --- Utilities for use with semantic tag tables
 
-;; Copyright (C) 1999-2001, 2003, 2005, 2008-2014 Free Software
+;; Copyright (C) 1999-2001, 2003, 2005, 2008-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/semantic/complete.el b/lisp/cedet/semantic/complete.el
index 91f9daf..3f726ee 100644
--- a/lisp/cedet/semantic/complete.el
+++ b/lisp/cedet/semantic/complete.el
@@ -1,6 +1,6 @@
 ;;; semantic/complete.el --- Routines for performing tag completion
 
-;; Copyright (C) 2003-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
@@ -188,6 +188,8 @@ Value should be a ... what?")
   "Default history variable for any unhistoried prompt.
 Keeps STRINGS only in the history.")
 
+(defvar semantic-complete-active-default)
+(defvar semantic-complete-current-matched-tag)
 
 (defun semantic-complete-read-tag-engine (collector displayor prompt
                                                    default-tag initial-input
@@ -1871,7 +1873,7 @@ completion text in ghost text."
               (list 'const
                     :tag doc1
                     C)))
-          (eieio-build-class-alist semantic-displayor-abstract t))
+          (eieio-build-class-alist 'semantic-displayor-abstract t))
          )
   "Possible options for inline completion displayors.
 Use this to enable custom editing.")
diff --git a/lisp/cedet/semantic/ctxt.el b/lisp/cedet/semantic/ctxt.el
index 01e3b02..456ef8d 100644
--- a/lisp/cedet/semantic/ctxt.el
+++ b/lisp/cedet/semantic/ctxt.el
@@ -1,6 +1,6 @@
 ;;; semantic/ctxt.el --- Context calculations for Semantic tools.
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/db-debug.el b/lisp/cedet/semantic/db-debug.el
index 9f1b6f9..15f5447 100644
--- a/lisp/cedet/semantic/db-debug.el
+++ b/lisp/cedet/semantic/db-debug.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-debug.el --- Extra level debugging routines for Semantic
 
-;;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/db-ebrowse.el 
b/lisp/cedet/semantic/db-ebrowse.el
index f89c6a6..2590dd1 100644
--- a/lisp/cedet/semantic/db-ebrowse.el
+++ b/lisp/cedet/semantic/db-ebrowse.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-ebrowse.el --- Semanticdb backend using ebrowse.
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Authors: Eric M. Ludlam <address@hidden>
 ;;     Joakim Verona
@@ -192,7 +192,7 @@ is specified by `semanticdb-default-save-directory'."
 If DIRECTORY is found to be defunct, it won't load the DB, and will
 warn instead."
   (if (file-directory-p directory)
-      (semanticdb-create-database semanticdb-project-database-ebrowse
+      (semanticdb-create-database 'semanticdb-project-database-ebrowse
                                  directory)
     (let* ((BF (semanticdb-ebrowse-file-for-directory directory))
           (BFL (concat BF "-load.el"))
diff --git a/lisp/cedet/semantic/db-el.el b/lisp/cedet/semantic/db-el.el
index 7ff1538..be9ffe3 100644
--- a/lisp/cedet/semantic/db-el.el
+++ b/lisp/cedet/semantic/db-el.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-el.el --- Semantic database extensions for Emacs Lisp
 
-;;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: tags
@@ -223,7 +223,9 @@ TOKTYPE is a hint to the type of tag desired."
            (symbol-name sym)
            "class"
            (semantic-elisp-desymbolify
-            (eieio--class-public-a (class-v semanticdb-project-database))) ;; 
slots
+             ;; FIXME: This only gives the instance slots and ignores the
+             ;; class-allocated slots.
+            (eieio--class-public-a (find-class 'semanticdb-project-database))) 
;; slots ;FIXME: eieio--
            (semantic-elisp-desymbolify (eieio-class-parents sym)) ;; parents
            ))
          ((not toktype)
diff --git a/lisp/cedet/semantic/db-file.el b/lisp/cedet/semantic/db-file.el
index 785b5c7..0360e06 100644
--- a/lisp/cedet/semantic/db-file.el
+++ b/lisp/cedet/semantic/db-file.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-file.el --- Save a semanticdb to a cache file.
 
-;;; Copyright (C) 2000-2005, 2007-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2000-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: tags
@@ -158,7 +158,8 @@ If DIRECTORY doesn't exist, create a new one."
 (defun semanticdb-load-database (filename)
   "Load the database FILENAME."
   (condition-case foo
-      (let* ((r (eieio-persistent-read filename 
semanticdb-project-database-file))
+      (let* ((r (eieio-persistent-read filename
+                                       'semanticdb-project-database-file))
             (c (semanticdb-get-database-tables r))
             (tv (oref r semantic-tag-version))
             (fv (oref r semanticdb-version))
diff --git a/lisp/cedet/semantic/db-find.el b/lisp/cedet/semantic/db-find.el
index 9134506..dd36cc1 100644
--- a/lisp/cedet/semantic/db-find.el
+++ b/lisp/cedet/semantic/db-find.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-find.el --- Searching through semantic databases.
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: tags
@@ -1114,7 +1114,7 @@ for backward compatibility.
 If optional argument BRUTISH is non-nil, then ignore include statements,
 and search all tables in this project tree."
   (let (found match)
-    (save-excursion
+    (save-current-buffer
       ;; If path is a buffer, set ourselves up in that buffer
       ;; so that the override methods work correctly.
       (when (bufferp path) (set-buffer path))
@@ -1127,7 +1127,7 @@ and search all tables in this project tree."
            ;; databases and not associated with a file.
            (unless (and find-file-match
                         (obj-of-class-p
-                         (car tableandtags) semanticdb-search-results-table))
+                         (car tableandtags) 'semanticdb-search-results-table))
              (when (setq match (funcall function
                                         (car tableandtags) (cdr tableandtags)))
                (when find-file-match
@@ -1144,7 +1144,7 @@ and search all tables in this project tree."
          ;; `semanticdb-search-results-table', since those are system
          ;; databases and not associated with a file.
          (unless (and find-file-match
-                      (obj-of-class-p table semanticdb-search-results-table))
+                      (obj-of-class-p table 'semanticdb-search-results-table))
            (when (and table (setq match (funcall function table nil)))
              (semanticdb-find-log-activity table match)
              (when find-file-match
diff --git a/lisp/cedet/semantic/db-global.el b/lisp/cedet/semantic/db-global.el
index c8a8c70..b042b49 100644
--- a/lisp/cedet/semantic/db-global.el
+++ b/lisp/cedet/semantic/db-global.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-global.el --- Semantic database extensions for GLOBAL
 
-;; Copyright (C) 2002-2006, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2006, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: tags
diff --git a/lisp/cedet/semantic/db-javascript.el 
b/lisp/cedet/semantic/db-javascript.el
index fc8b914..24aa6b7 100644
--- a/lisp/cedet/semantic/db-javascript.el
+++ b/lisp/cedet/semantic/db-javascript.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-javascript.el --- Semantic database extensions for javascript
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Joakim Verona
 
diff --git a/lisp/cedet/semantic/db-mode.el b/lisp/cedet/semantic/db-mode.el
index d57dd18..433d5ae 100644
--- a/lisp/cedet/semantic/db-mode.el
+++ b/lisp/cedet/semantic/db-mode.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-mode.el --- Semanticdb Minor Mode
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/db-ref.el b/lisp/cedet/semantic/db-ref.el
index 0e3444d..d2fe67b 100644
--- a/lisp/cedet/semantic/db-ref.el
+++ b/lisp/cedet/semantic/db-ref.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-ref.el --- Handle cross-db file references
 
-;;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/db-typecache.el 
b/lisp/cedet/semantic/db-typecache.el
index fd45e79..723b7bd 100644
--- a/lisp/cedet/semantic/db-typecache.el
+++ b/lisp/cedet/semantic/db-typecache.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-typecache.el --- Manage Datatypes
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -180,7 +180,7 @@ If there is no table, create one, and fill it in."
 (defmethod semanticdb-get-typecache ((db semanticdb-project-database))
   "Retrieve the typecache from the semantic database DB.
 If there is no table, create one, and fill it in."
-  (semanticdb-cache-get db semanticdb-database-typecache)
+  (semanticdb-cache-get db 'semanticdb-database-typecache)
   )
 
 
diff --git a/lisp/cedet/semantic/db.el b/lisp/cedet/semantic/db.el
index 13e2d1b..b2c1252 100644
--- a/lisp/cedet/semantic/db.el
+++ b/lisp/cedet/semantic/db.el
@@ -1,6 +1,6 @@
 ;;; semantic/db.el --- Semantic tag database manager
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: tags
@@ -330,6 +330,10 @@ Adds the number of tags in this file to the object print 
name."
 
 ;;; DATABASE BASE CLASS
 ;;
+(unless (fboundp 'semanticdb-abstract-table-list-p)
+  (cl-deftype semanticdb-abstract-table-list ()
+    '(list-of semanticdb-abstract-table)))
+
 (defclass semanticdb-project-database (eieio-instance-tracker)
   ((tracking-symbol :initform semanticdb-database-list)
    (reference-directory :type string
@@ -481,7 +485,7 @@ other than :table."
   (let ((cache (oref table cache))
        (obj nil))
     (while (and (not obj) cache)
-      (if (eq (eieio--object-class (car cache)) desired-class)
+      (if (eq (eieio-object-class (car cache)) desired-class)
          (setq obj (car cache)))
       (setq cache (cdr cache)))
     (if obj
@@ -532,7 +536,7 @@ other than :table."
   (let ((cache (oref db cache))
        (obj nil))
     (while (and (not obj) cache)
-      (if (eq (eieio--object-class (car cache)) desired-class)
+      (if (eq (eieio-object-class (car cache)) desired-class)
          (setq obj (car cache)))
       (setq cache (cdr cache)))
     (if obj
diff --git a/lisp/cedet/semantic/debug.el b/lisp/cedet/semantic/debug.el
index 91819b8..9168af5 100644
--- a/lisp/cedet/semantic/debug.el
+++ b/lisp/cedet/semantic/debug.el
@@ -1,6 +1,6 @@
 ;;; semantic/debug.el --- Language Debugger framework
 
-;; Copyright (C) 2003-2005, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2005, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/decorate.el b/lisp/cedet/semantic/decorate.el
index ae6d116..38c359e 100644
--- a/lisp/cedet/semantic/decorate.el
+++ b/lisp/cedet/semantic/decorate.el
@@ -1,6 +1,6 @@
 ;;; semantic/decorate.el --- Utilities for decorating/highlighting tokens.
 
-;;; Copyright (C) 1999-2003, 2005-2007, 2009-2014 Free Software
+;;; Copyright (C) 1999-2003, 2005-2007, 2009-2015 Free Software
 ;;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/semantic/decorate/include.el 
b/lisp/cedet/semantic/decorate/include.el
index 788973a..718669b 100644
--- a/lisp/cedet/semantic/decorate/include.el
+++ b/lisp/cedet/semantic/decorate/include.el
@@ -1,6 +1,6 @@
 ;;; semantic/decorate/include.el --- Decoration modes for include statements
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/decorate/mode.el 
b/lisp/cedet/semantic/decorate/mode.el
index 5cd5e49..2a88eb7 100644
--- a/lisp/cedet/semantic/decorate/mode.el
+++ b/lisp/cedet/semantic/decorate/mode.el
@@ -1,6 +1,6 @@
 ;;; semantic/decorate/mode.el --- Minor mode for decorating tags
 
-;; Copyright (C) 2000-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/dep.el b/lisp/cedet/semantic/dep.el
index 4b14e28..e5e7da1 100644
--- a/lisp/cedet/semantic/dep.el
+++ b/lisp/cedet/semantic/dep.el
@@ -1,6 +1,6 @@
 ;;; semantic/dep.el --- Methods for tracking dependencies (include files)
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/doc.el b/lisp/cedet/semantic/doc.el
index fdaeb95..874763f 100644
--- a/lisp/cedet/semantic/doc.el
+++ b/lisp/cedet/semantic/doc.el
@@ -1,6 +1,6 @@
 ;;; semantic/doc.el --- Routines for documentation strings
 
-;; Copyright (C) 1999-2003, 2005, 2008-2014 Free Software Foundation,
+;; Copyright (C) 1999-2003, 2005, 2008-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
diff --git a/lisp/cedet/semantic/ede-grammar.el 
b/lisp/cedet/semantic/ede-grammar.el
index 679c660..67f0cfe 100644
--- a/lisp/cedet/semantic/ede-grammar.el
+++ b/lisp/cedet/semantic/ede-grammar.el
@@ -1,6 +1,6 @@
 ;;; semantic/ede-grammar.el --- EDE support for Semantic Grammar Files
 
-;; Copyright (C) 2003-2004, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: project, make
@@ -213,7 +213,7 @@ Argument THIS is the target that should insert stuff."
 ;;   "Target class for Emacs/Semantic grammar files." nil nil)
 
 (ede-proj-register-target "semantic grammar"
-                         semantic-ede-proj-target-grammar)
+                         'semantic-ede-proj-target-grammar)
 
 (provide 'semantic/ede-grammar)
 
diff --git a/lisp/cedet/semantic/edit.el b/lisp/cedet/semantic/edit.el
index f5643f7..f207fce 100644
--- a/lisp/cedet/semantic/edit.el
+++ b/lisp/cedet/semantic/edit.el
@@ -1,6 +1,6 @@
 ;;; semantic/edit.el --- Edit Management for Semantic
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/find.el b/lisp/cedet/semantic/find.el
index 9176160..fdd5f52 100644
--- a/lisp/cedet/semantic/find.el
+++ b/lisp/cedet/semantic/find.el
@@ -1,6 +1,6 @@
 ;;; semantic/find.el --- Search routines for Semantic
 
-;; Copyright (C) 1999-2005, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/format.el b/lisp/cedet/semantic/format.el
index 549933d..1184a98 100644
--- a/lisp/cedet/semantic/format.el
+++ b/lisp/cedet/semantic/format.el
@@ -1,6 +1,6 @@
 ;;; semantic/format.el --- Routines for formatting tags
 
-;; Copyright (C) 1999-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/fw.el b/lisp/cedet/semantic/fw.el
index 9545dba..a0c3694 100644
--- a/lisp/cedet/semantic/fw.el
+++ b/lisp/cedet/semantic/fw.el
@@ -1,6 +1,6 @@
 ;;; semantic/fw.el --- Framework for Semantic
 
-;;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -378,11 +378,11 @@ If FORMS includes a call to `semantic-throw-on-input', 
then
 if a user presses any key during execution, this form macro
 will exit with the value passed to `semantic-throw-on-input'.
 If FORMS completes, then the return value is the same as `progn'."
+  (declare (indent 1))
   `(let ((semantic-current-input-throw-symbol ,symbol)
          (semantic--on-input-start-marker (point-marker)))
      (catch ,symbol
        ,@forms)))
-(put 'semantic-exit-on-input 'lisp-indent-function 1)
 
 (defmacro semantic-throw-on-input (from)
   "Exit with `throw' when in `semantic-exit-on-input' on user input.
@@ -391,15 +391,14 @@ to pass to `throw'.  It is recommended to use the name of 
the function
 calling this one."
   `(when (and semantic-current-input-throw-symbol
               (or (input-pending-p)
-                  (save-excursion
-                    ;; Timers might run during accept-process-output.
-                    ;; If they redisplay, point must be where the user
-                    ;; expects. (Bug#15045)
-                    (set-buffer (marker-buffer
-                                 semantic--on-input-start-marker))
-                    (goto-char (marker-position
-                                semantic--on-input-start-marker))
-                    (accept-process-output))))
+                  (with-current-buffer
+                      ;; Timers might run during accept-process-output.
+                      ;; If they redisplay, point must be where the user
+                      ;; expects. (Bug#15045)
+                      (marker-buffer semantic--on-input-start-marker)
+                    (save-excursion
+                      (goto-char semantic--on-input-start-marker)
+                      (accept-process-output)))))
      (throw semantic-current-input-throw-symbol ,from)))
 
 
diff --git a/lisp/cedet/semantic/grammar-wy.el 
b/lisp/cedet/semantic/grammar-wy.el
index beba31e..fba8adf 100644
--- a/lisp/cedet/semantic/grammar-wy.el
+++ b/lisp/cedet/semantic/grammar-wy.el
@@ -1,6 +1,6 @@
 ;;; semantic/grammar-wy.el --- Generated parser support file
 
-;; Copyright (C) 2002-2004, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2009-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el
index 625736d..7a92a12 100644
--- a/lisp/cedet/semantic/grammar.el
+++ b/lisp/cedet/semantic/grammar.el
@@ -1,6 +1,6 @@
 ;;; semantic/grammar.el --- Major mode framework for Semantic grammars
 
-;; Copyright (C) 2002-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
@@ -1665,13 +1665,14 @@ Select the buffer containing the tag's definition, and 
move point there."
 (declare-function eldoc-get-fnsym-args-string "eldoc")
 (declare-function eldoc-get-var-docstring "eldoc")
 
+(defvar semantic-grammar-eldoc-last-data (cons nil nil))
+
 (defun semantic-grammar-eldoc-get-macro-docstring (macro expander)
   "Return a one-line docstring for the given grammar MACRO.
 EXPANDER is the name of the function that expands MACRO."
   (require 'eldoc)
-  (if (and (eq expander (aref eldoc-last-data 0))
-           (eq 'function (aref eldoc-last-data 2)))
-      (aref eldoc-last-data 1)
+  (if (eq expander (car semantic-grammar-eldoc-last-data))
+      (cdr semantic-grammar-eldoc-last-data)
     (let ((doc (help-split-fundoc (documentation expander t) expander)))
       (cond
        (doc
@@ -1684,7 +1685,7 @@ EXPANDER is the name of the function that expands MACRO."
         (setq doc
              (eldoc-docstring-format-sym-doc
               macro (format "==> %s %s" expander doc) 'default))
-        (eldoc-last-data-store expander doc 'function))
+        (setq semantic-grammar-eldoc-last-data (cons expander doc)))
       doc)))
 
 (define-mode-local-override semantic-idle-summary-current-symbol-info
diff --git a/lisp/cedet/semantic/html.el b/lisp/cedet/semantic/html.el
index 386c65b..2194bf5 100644
--- a/lisp/cedet/semantic/html.el
+++ b/lisp/cedet/semantic/html.el
@@ -1,6 +1,6 @@
 ;;; semantic/html.el --- Semantic details for html files
 
-;; Copyright (C) 2004-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/ia-sb.el b/lisp/cedet/semantic/ia-sb.el
index 006e8e8..410d63a 100644
--- a/lisp/cedet/semantic/ia-sb.el
+++ b/lisp/cedet/semantic/ia-sb.el
@@ -1,6 +1,7 @@
 ;;; semantic/ia-sb.el --- Speedbar analysis display interactor
 
-;;; Copyright (C) 2002-2004, 2006, 2008-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2002-2004, 2006, 2008-2015 Free Software Foundation,
+;;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/ia.el b/lisp/cedet/semantic/ia.el
index 8a5cbac..2216fa9 100644
--- a/lisp/cedet/semantic/ia.el
+++ b/lisp/cedet/semantic/ia.el
@@ -1,6 +1,6 @@
 ;;; semantic/ia.el --- Interactive Analysis functions
 
-;;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/idle.el b/lisp/cedet/semantic/idle.el
index f541392..7903153 100644
--- a/lisp/cedet/semantic/idle.el
+++ b/lisp/cedet/semantic/idle.el
@@ -1,6 +1,6 @@
 ;;; idle.el --- Schedule parsing tasks in idle time
 
-;; Copyright (C) 2003-2006, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2006, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/imenu.el b/lisp/cedet/semantic/imenu.el
index 9fd0343..c043125 100644
--- a/lisp/cedet/semantic/imenu.el
+++ b/lisp/cedet/semantic/imenu.el
@@ -1,6 +1,7 @@
 ;;; semantic/imenu.el --- Use Semantic as an imenu tag generator
 
-;; Copyright (C) 2000-2005, 2007-2008, 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2008, 2010-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Maintainer: Eric Ludlam
diff --git a/lisp/cedet/semantic/java.el b/lisp/cedet/semantic/java.el
index 097f42e..7dcd7f1 100644
--- a/lisp/cedet/semantic/java.el
+++ b/lisp/cedet/semantic/java.el
@@ -1,6 +1,6 @@
 ;;; semantic/java.el --- Semantic functions for Java
 
-;;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 
diff --git a/lisp/cedet/semantic/lex-spp.el b/lisp/cedet/semantic/lex-spp.el
index 67f944a..0aa2f95 100644
--- a/lisp/cedet/semantic/lex-spp.el
+++ b/lisp/cedet/semantic/lex-spp.el
@@ -1,6 +1,6 @@
 ;;; semantic/lex-spp.el --- Semantic Lexical Pre-processor
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -823,7 +823,7 @@ ARGVALUES are values for any arg list, or nil."
 ;; An analyzer that will push tokens from a macro in place
 ;; of the macro symbol.
 ;;
-(defun semantic-lex-spp-anlyzer-do-replace (sym val beg end)
+(defun semantic-lex-spp-analyzer-do-replace (sym val beg end)
   "Do the lexical replacement for SYM with VAL.
 Argument BEG and END specify the bounds of SYM in the buffer."
   (if (not val)
@@ -863,6 +863,9 @@ Argument BEG and END specify the bounds of SYM in the 
buffer."
       (setq semantic-lex-end-point end)
       )
     ))
+(define-obsolete-function-alias
+  'semantic-lex-spp-anlyzer-do-replace
+  'semantic-lex-spp-analyzer-do-replace "25.1")
 
 (defvar semantic-lex-spp-replacements-enabled t
   "Non-nil means do replacements when finding keywords.
diff --git a/lisp/cedet/semantic/lex.el b/lisp/cedet/semantic/lex.el
index fc3cf5e..7738e06 100644
--- a/lisp/cedet/semantic/lex.el
+++ b/lisp/cedet/semantic/lex.el
@@ -1,6 +1,6 @@
 ;;; semantic/lex.el --- Lexical Analyzer builder
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/mru-bookmark.el 
b/lisp/cedet/semantic/mru-bookmark.el
index 79fbadf..ddebcd6 100644
--- a/lisp/cedet/semantic/mru-bookmark.el
+++ b/lisp/cedet/semantic/mru-bookmark.el
@@ -1,6 +1,6 @@
 ;;; semantic/mru-bookmark.el --- Automatic bookmark tracking
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/sb.el b/lisp/cedet/semantic/sb.el
index 5020251..295d4e9 100644
--- a/lisp/cedet/semantic/sb.el
+++ b/lisp/cedet/semantic/sb.el
@@ -1,6 +1,6 @@
 ;;; semantic/sb.el --- Semantic tag display for speedbar
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/scope.el b/lisp/cedet/semantic/scope.el
index 396f19c..c56cbc3 100644
--- a/lisp/cedet/semantic/scope.el
+++ b/lisp/cedet/semantic/scope.el
@@ -1,6 +1,6 @@
 ;;; semantic/scope.el --- Analyzer Scope Calculations
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -134,7 +134,7 @@ Saves scoping information between runs of the analyzer.")
   "Get the current cached scope, and reset it."
   (when semanticdb-current-table
     (let ((co (semanticdb-cache-get semanticdb-current-table
-                                   semantic-scope-cache)))
+                                   'semantic-scope-cache)))
       (semantic-reset co))))
 
 (defmethod semantic-scope-set-typecache ((cache semantic-scope-cache)
@@ -706,7 +706,7 @@ The class returned from the scope calculation is variable
       (let* ((TAG  (semantic-current-tag))
             (scopecache
              (semanticdb-cache-get semanticdb-current-table
-                                   semantic-scope-cache))
+                                   'semantic-scope-cache))
             )
        (when (not (semantic-equivalent-tag-p TAG (oref scopecache tag)))
          (semantic-reset scopecache))
diff --git a/lisp/cedet/semantic/senator.el b/lisp/cedet/semantic/senator.el
index 4b4d9ca..c58def6 100644
--- a/lisp/cedet/semantic/senator.el
+++ b/lisp/cedet/semantic/senator.el
@@ -1,6 +1,6 @@
 ;;; semantic/senator.el --- SEmantic NAvigaTOR
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/cedet/semantic/sort.el b/lisp/cedet/semantic/sort.el
index 6bade4a..587d084 100644
--- a/lisp/cedet/semantic/sort.el
+++ b/lisp/cedet/semantic/sort.el
@@ -1,6 +1,6 @@
 ;;; semantic/sort.el --- Utilities for sorting and re-arranging tag tables.
 
-;;; Copyright (C) 1999-2005, 2007-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 1999-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/symref.el b/lisp/cedet/semantic/symref.el
index d951398..170495e 100644
--- a/lisp/cedet/semantic/symref.el
+++ b/lisp/cedet/semantic/symref.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref.el --- Symbol Reference API
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/symref/cscope.el 
b/lisp/cedet/semantic/symref/cscope.el
index 628a2f7..3e8c34b 100644
--- a/lisp/cedet/semantic/symref/cscope.el
+++ b/lisp/cedet/semantic/symref/cscope.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/cscope.el --- Semantic-symref support via cscope.
 
-;;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/symref/filter.el 
b/lisp/cedet/semantic/symref/filter.el
index e77b147..1cfa69f 100644
--- a/lisp/cedet/semantic/symref/filter.el
+++ b/lisp/cedet/semantic/symref/filter.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/filter.el --- Filter symbol reference hits for accuracy.
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/symref/global.el 
b/lisp/cedet/semantic/symref/global.el
index 0648c90..1f5aecb 100644
--- a/lisp/cedet/semantic/symref/global.el
+++ b/lisp/cedet/semantic/symref/global.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/global.el --- Use GNU Global for symbol references
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/symref/grep.el 
b/lisp/cedet/semantic/symref/grep.el
index 42fdd81..f9821b4 100644
--- a/lisp/cedet/semantic/symref/grep.el
+++ b/lisp/cedet/semantic/symref/grep.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/grep.el --- Symref implementation using find/grep
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/symref/idutils.el 
b/lisp/cedet/semantic/symref/idutils.el
index 62e0fe6..5e9a0a4 100644
--- a/lisp/cedet/semantic/symref/idutils.el
+++ b/lisp/cedet/semantic/symref/idutils.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/idutils.el --- Symref implementation for idutils
 
-;;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/symref/list.el 
b/lisp/cedet/semantic/symref/list.el
index 7dea228..c99fc5f 100644
--- a/lisp/cedet/semantic/symref/list.el
+++ b/lisp/cedet/semantic/symref/list.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/list.el --- Symref Output List UI.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/tag-file.el b/lisp/cedet/semantic/tag-file.el
index 18bf93f..fc5af6b 100644
--- a/lisp/cedet/semantic/tag-file.el
+++ b/lisp/cedet/semantic/tag-file.el
@@ -1,6 +1,6 @@
 ;;; semantic/tag-file.el --- Routines that find files based on tags.
 
-;; Copyright (C) 1999-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/tag-ls.el b/lisp/cedet/semantic/tag-ls.el
index a554645..40eafd9 100644
--- a/lisp/cedet/semantic/tag-ls.el
+++ b/lisp/cedet/semantic/tag-ls.el
@@ -1,6 +1,6 @@
 ;;; semantic/tag-ls.el --- Language Specific override functions for tags
 
-;; Copyright (C) 1999-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/tag-write.el b/lisp/cedet/semantic/tag-write.el
index 17d6a7a..9835718 100644
--- a/lisp/cedet/semantic/tag-write.el
+++ b/lisp/cedet/semantic/tag-write.el
@@ -1,6 +1,6 @@
 ;;; semantic/tag-write.el --- Write tags to a text stream
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/tag.el b/lisp/cedet/semantic/tag.el
index 3135484..3ad192b 100644
--- a/lisp/cedet/semantic/tag.el
+++ b/lisp/cedet/semantic/tag.el
@@ -1,6 +1,6 @@
 ;;; semantic/tag.el --- tag creation and access
 
-;; Copyright (C) 1999-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/texi.el b/lisp/cedet/semantic/texi.el
index f30dca8..cf6726e 100644
--- a/lisp/cedet/semantic/texi.el
+++ b/lisp/cedet/semantic/texi.el
@@ -1,6 +1,6 @@
 ;;; semantic/texi.el --- Semantic details for Texinfo files
 
-;; Copyright (C) 2001-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/semantic/util-modes.el 
b/lisp/cedet/semantic/util-modes.el
index 2d3cf68..6914c4b 100644
--- a/lisp/cedet/semantic/util-modes.el
+++ b/lisp/cedet/semantic/util-modes.el
@@ -1,6 +1,6 @@
 ;;; semantic/util-modes.el --- Semantic minor modes
 
-;; Copyright (C) 2000-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Authors: Eric M. Ludlam <address@hidden>
 ;;          David Ponce <address@hidden>
diff --git a/lisp/cedet/semantic/util.el b/lisp/cedet/semantic/util.el
index ea9e158..fedc281 100644
--- a/lisp/cedet/semantic/util.el
+++ b/lisp/cedet/semantic/util.el
@@ -1,6 +1,6 @@
 ;;; semantic/util.el --- Utilities for use with semantic tag tables
 
-;;; Copyright (C) 1999-2005, 2007-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 1999-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/wisent.el b/lisp/cedet/semantic/wisent.el
index bb6f5fc..dfa533c 100644
--- a/lisp/cedet/semantic/wisent.el
+++ b/lisp/cedet/semantic/wisent.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent.el --- Wisent - Semantic gateway
 
-;; Copyright (C) 2001-2007, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2007, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/lisp/cedet/semantic/wisent/comp.el 
b/lisp/cedet/semantic/wisent/comp.el
index 2e5d2a4..2e4072f 100644
--- a/lisp/cedet/semantic/wisent/comp.el
+++ b/lisp/cedet/semantic/wisent/comp.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/comp.el --- GNU Bison for Emacs - Grammar compiler
 
-;; Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000-2007, 2009-2014 Free
+;; Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000-2007, 2009-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
diff --git a/lisp/cedet/semantic/wisent/grammar.el 
b/lisp/cedet/semantic/wisent/grammar.el
index 71f5420..a247c25 100644
--- a/lisp/cedet/semantic/wisent/grammar.el
+++ b/lisp/cedet/semantic/wisent/grammar.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/grammar.el --- Wisent's input grammar mode
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/lisp/cedet/semantic/wisent/java-tags.el 
b/lisp/cedet/semantic/wisent/java-tags.el
index 6220407..f049632 100644
--- a/lisp/cedet/semantic/wisent/java-tags.el
+++ b/lisp/cedet/semantic/wisent/java-tags.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/java-tags.el --- Java LALR parser for Emacs
 
-;; Copyright (C) 2001-2006, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2006, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/lisp/cedet/semantic/wisent/javascript.el 
b/lisp/cedet/semantic/wisent/javascript.el
index 5fcda59..b2a18fb 100644
--- a/lisp/cedet/semantic/wisent/javascript.el
+++ b/lisp/cedet/semantic/wisent/javascript.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/javascript.el --- javascript parser support
 
-;; Copyright (C) 2005, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Ludlam <address@hidden>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/wisent/python.el 
b/lisp/cedet/semantic/wisent/python.el
index 086c441..a8348d2 100644
--- a/lisp/cedet/semantic/wisent/python.el
+++ b/lisp/cedet/semantic/wisent/python.el
@@ -1,6 +1,6 @@
 ;;; wisent-python.el --- Semantic support for Python
 
-;; Copyright (C) 2002, 2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Richard Kim  <address@hidden>
 ;; Maintainer: Richard Kim  <address@hidden>
diff --git a/lisp/cedet/semantic/wisent/wisent.el 
b/lisp/cedet/semantic/wisent/wisent.el
index 4d78229..fd00080 100644
--- a/lisp/cedet/semantic/wisent/wisent.el
+++ b/lisp/cedet/semantic/wisent/wisent.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/wisent.el --- GNU Bison for Emacs - Runtime
 
-;;; Copyright (C) 2002-2007, 2009-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2002-2007, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/lisp/cedet/srecode.el b/lisp/cedet/srecode.el
index 3db3a2f..c4f2c67 100644
--- a/lisp/cedet/srecode.el
+++ b/lisp/cedet/srecode.el
@@ -1,6 +1,6 @@
 ;;; srecode.el --- Semantic buffer evaluator.
 
-;;; Copyright (C) 2005, 2007-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: codegeneration
diff --git a/lisp/cedet/srecode/args.el b/lisp/cedet/srecode/args.el
index 8c03e17..2cb2396 100644
--- a/lisp/cedet/srecode/args.el
+++ b/lisp/cedet/srecode/args.el
@@ -1,6 +1,6 @@
 ;;; srecode/args.el --- Provide some simple template arguments
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/compile.el b/lisp/cedet/srecode/compile.el
index ea366a3..782121e 100644
--- a/lisp/cedet/srecode/compile.el
+++ b/lisp/cedet/srecode/compile.el
@@ -1,6 +1,6 @@
 ;;; srecode/compile --- Compilation of srecode template files.
 
-;; Copyright (C) 2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: codegeneration
@@ -87,10 +87,10 @@ for push, pop, and peek for the active template.")
 Useful if something goes wrong in SRecode, and the active template
 stack is broken."
   (interactive)
-  (if (oref srecode-template active)
+  (if (oref-default 'srecode-template active)
       (when (y-or-n-p (format "%d active templates.  Flush? "
-                             (length (oref srecode-template active))))
-       (oset-default srecode-template active nil))
+                             (length (oref-default 'srecode-template active))))
+       (oset-default 'srecode-template active nil))
     (message "No active templates to flush."))
   )
 
@@ -514,7 +514,7 @@ to the inserter constructor."
   ;;(message "Compile: %s %S" name props)
   (if (not key)
       (apply 'srecode-template-inserter-variable name props)
-    (let ((classes (eieio-class-children srecode-template-inserter))
+    (let ((classes (eieio-class-children 'srecode-template-inserter))
          (new nil))
       ;; Loop over the various subclasses and
       ;; create the correct inserter.
diff --git a/lisp/cedet/srecode/cpp.el b/lisp/cedet/srecode/cpp.el
index 56a3111..ec92ae3 100644
--- a/lisp/cedet/srecode/cpp.el
+++ b/lisp/cedet/srecode/cpp.el
@@ -1,6 +1,6 @@
 ;;; srecode/cpp.el --- C++ specific handlers for Semantic Recoder
 
-;; Copyright (C) 2007, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;;         Jan Moringen <address@hidden>
diff --git a/lisp/cedet/srecode/ctxt.el b/lisp/cedet/srecode/ctxt.el
index e04394f..5643318 100644
--- a/lisp/cedet/srecode/ctxt.el
+++ b/lisp/cedet/srecode/ctxt.el
@@ -1,6 +1,6 @@
 ;;; srecode/ctxt.el --- Derive a context from the source buffer.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/dictionary.el b/lisp/cedet/srecode/dictionary.el
index b3eb459..9b471eb 100644
--- a/lisp/cedet/srecode/dictionary.el
+++ b/lisp/cedet/srecode/dictionary.el
@@ -1,6 +1,6 @@
 ;;; srecode/dictionary.el --- Dictionary code for the semantic recoder.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/document.el b/lisp/cedet/srecode/document.el
index 9d7e3ad..9f106a4 100644
--- a/lisp/cedet/srecode/document.el
+++ b/lisp/cedet/srecode/document.el
@@ -1,6 +1,6 @@
 ;;; srecode/document.el --- Documentation (comment) generation
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/el.el b/lisp/cedet/srecode/el.el
index 25ed45e..2bdf804 100644
--- a/lisp/cedet/srecode/el.el
+++ b/lisp/cedet/srecode/el.el
@@ -1,6 +1,6 @@
 ;;; srecode/el.el --- Emacs Lisp specific arguments
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/expandproto.el 
b/lisp/cedet/srecode/expandproto.el
index e341d64..205d207 100644
--- a/lisp/cedet/srecode/expandproto.el
+++ b/lisp/cedet/srecode/expandproto.el
@@ -1,6 +1,6 @@
 ;;; srecode/expandproto.el --- Expanding prototypes.
 
-;; Copyright (C) 2007, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007, 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/extract.el b/lisp/cedet/srecode/extract.el
index ee965d4..c3b1f6e 100644
--- a/lisp/cedet/srecode/extract.el
+++ b/lisp/cedet/srecode/extract.el
@@ -1,6 +1,6 @@
 ;;; srecode/extract.el --- Extract content from previously inserted macro.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/fields.el b/lisp/cedet/srecode/fields.el
index 7515717..f473a0d 100644
--- a/lisp/cedet/srecode/fields.el
+++ b/lisp/cedet/srecode/fields.el
@@ -1,6 +1,6 @@
 ;;; srecode/fields.el --- Handling type-in fields in a buffer.
 ;;
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -237,7 +237,7 @@ If SET-TO is a string, then replace the text of OLAID wit 
SET-TO."
 
 (defsubst srecode-active-template-region ()
   "Return the active region for template fields."
-  (oref srecode-template-inserted-region active-region))
+  (oref-default 'srecode-template-inserted-region active-region))
 
 (defun srecode-field-post-command ()
   "Srecode field handler in the post command hook."
diff --git a/lisp/cedet/srecode/filters.el b/lisp/cedet/srecode/filters.el
index 045eaac..dc296dc 100644
--- a/lisp/cedet/srecode/filters.el
+++ b/lisp/cedet/srecode/filters.el
@@ -1,6 +1,6 @@
 ;;; srecode/filters.el --- Filters for use in template variables.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/find.el b/lisp/cedet/srecode/find.el
index bc1a9f0..fc1b79d 100644
--- a/lisp/cedet/srecode/find.el
+++ b/lisp/cedet/srecode/find.el
@@ -1,6 +1,6 @@
 ;;;; srecode/find.el --- Tools for finding templates in the database.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/getset.el b/lisp/cedet/srecode/getset.el
index 86f7428..07255af 100644
--- a/lisp/cedet/srecode/getset.el
+++ b/lisp/cedet/srecode/getset.el
@@ -1,6 +1,6 @@
 ;;; srecode/getset.el --- Package for inserting new get/set methods.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/insert.el b/lisp/cedet/srecode/insert.el
index 0fe81a7..78ec165 100644
--- a/lisp/cedet/srecode/insert.el
+++ b/lisp/cedet/srecode/insert.el
@@ -1,6 +1,6 @@
 ;;; srecode/insert.el --- Insert srecode templates to an output stream.
 
-;; Copyright (C) 2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -211,7 +211,7 @@ insertions."
            (propertize " (most recent at bottom)" 'face '(:slant italic))
            ":\n")
     (data-debug-insert-stuff-list
-     (reverse (oref srecode-template active)) "> ")
+     (reverse (oref-default 'srecode-template active)) "> ")
     ;; Show the current dictionary.
     (insert (propertize "Dictionary" 'face '(:weight bold)) "\n")
     (data-debug-insert-thing dictionary "" "> ")
@@ -396,7 +396,7 @@ Specify the :blank argument to enable this inserter.")
        (pm (point-marker)))
     (when (and inbuff
               ;; Don't do this if we are not the active template.
-              (= (length (oref srecode-template active)) 1))
+              (= (length (oref-default 'srecode-template active)) 1))
 
       (when (and (eq i t) inbuff (not (eq (oref sti where) 'begin)))
        (indent-according-to-mode)
@@ -773,7 +773,7 @@ generalized marker will do something else.  See
   ;; valid. Compare this to the actual template nesting depth and
   ;; maybe use the override function which is stored in the cdr.
   (if (and srecode-template-inserter-point-override
-          (<= (length (oref srecode-template active))
+          (<= (length (oref-default 'srecode-template active))
               (car srecode-template-inserter-point-override)))
       ;; Disable the old override while we do this.
       (let ((over (cdr srecode-template-inserter-point-override))
@@ -943,7 +943,7 @@ this template instance."
     ;; Calculate and store the discovered template
     (let ((tmpl (srecode-template-get-table (srecode-table)
                                            templatenamepart))
-         (active (oref srecode-template active))
+         (active (oref-default 'srecode-template active))
          ctxt)
       (when (not tmpl)
        ;; If it isn't just available, scan back through
@@ -1053,7 +1053,7 @@ template where a ^ inserter occurs."
         (lexical-let ((inserter1 sti))
           (cons
            ;; DEPTH
-           (+ (length (oref srecode-template active)) 1)
+           (+ (length (oref-default 'srecode-template active)) 1)
            ;; FUNCTION
            (lambda (dict)
              (let ((srecode-template-inserter-point-override nil))
diff --git a/lisp/cedet/srecode/java.el b/lisp/cedet/srecode/java.el
index 1b1c184..d812df1 100644
--- a/lisp/cedet/srecode/java.el
+++ b/lisp/cedet/srecode/java.el
@@ -1,6 +1,6 @@
 ;;; srecode/java.el --- Srecode Java support
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/map.el b/lisp/cedet/srecode/map.el
index 31ea710..cc0c4ae 100644
--- a/lisp/cedet/srecode/map.el
+++ b/lisp/cedet/srecode/map.el
@@ -1,6 +1,6 @@
 ;;; srecode/map.el --- Manage a template file map
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -298,7 +298,7 @@ if that file is NEW, otherwise assume the mode has not 
changed."
     (when (not srecode-current-map)
       (condition-case nil
          (setq srecode-current-map
-               (eieio-persistent-read srecode-map-save-file srecode-map))
+               (eieio-persistent-read srecode-map-save-file 'srecode-map))
        (error
         ;; There was an error loading the old map.  Create a new one.
         (setq srecode-current-map
diff --git a/lisp/cedet/srecode/mode.el b/lisp/cedet/srecode/mode.el
index 31f3ac9..a6daff8 100644
--- a/lisp/cedet/srecode/mode.el
+++ b/lisp/cedet/srecode/mode.el
@@ -1,6 +1,6 @@
 ;;; srecode/mode.el --- Minor mode for managing and using SRecode templates
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/semantic.el b/lisp/cedet/srecode/semantic.el
index 74bf3cb..2313fa7 100644
--- a/lisp/cedet/srecode/semantic.el
+++ b/lisp/cedet/srecode/semantic.el
@@ -1,6 +1,6 @@
 ;;; srecode/semantic.el --- Semantic specific extensions to SRecode.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/srt-mode.el b/lisp/cedet/srecode/srt-mode.el
index 48a4865..79672ec 100644
--- a/lisp/cedet/srecode/srt-mode.el
+++ b/lisp/cedet/srecode/srt-mode.el
@@ -1,6 +1,6 @@
 ;;; srecode/srt-mode.el --- Major mode for writing screcode macros
 
-;; Copyright (C) 2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -233,7 +233,7 @@ we can tell font lock about them.")
   "Provide help for working with macros in a template."
   (interactive)
   (let* ((root 'srecode-template-inserter)
-        (chl (eieio--class-children (class-v root)))
+        (chl (eieio-class-children root))
         (ess (srecode-template-get-escape-start))
         (ees (srecode-template-get-escape-end))
         )
@@ -249,7 +249,7 @@ we can tell font lock about them.")
               (showexample t)
               )
          (setq chl (cdr chl))
-         (setq chl (append (eieio--class-children (class-v C)) chl))
+         (setq chl (append (eieio-class-children C) chl))
 
          (catch 'skip
            (when (eq C 'srecode-template-inserter-section-end)
diff --git a/lisp/cedet/srecode/srt.el b/lisp/cedet/srecode/srt.el
index dc99400..f369e45 100644
--- a/lisp/cedet/srecode/srt.el
+++ b/lisp/cedet/srecode/srt.el
@@ -1,6 +1,6 @@
 ;;; srecode/srt.el --- argument handlers for SRT files
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/table.el b/lisp/cedet/srecode/table.el
index df61d84..b4f20a9 100644
--- a/lisp/cedet/srecode/table.el
+++ b/lisp/cedet/srecode/table.el
@@ -1,6 +1,6 @@
 ;;; srecode/table.el --- Tables of Semantic Recoders
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/cedet/srecode/template.el b/lisp/cedet/srecode/template.el
index 8531895..3a7c45e 100644
--- a/lisp/cedet/srecode/template.el
+++ b/lisp/cedet/srecode/template.el
@@ -1,6 +1,6 @@
 ;;; srecode/template.el --- SRecoder template language parser support.
 
-;; Copyright (C) 2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/cedet/srecode/texi.el b/lisp/cedet/srecode/texi.el
index 92ee2a7..5c3f21c 100644
--- a/lisp/cedet/srecode/texi.el
+++ b/lisp/cedet/srecode/texi.el
@@ -1,6 +1,6 @@
 ;;; srecode/texi.el --- Srecode texinfo support.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/lisp/chistory.el b/lisp/chistory.el
index 785e329..d732658 100644
--- a/lisp/chistory.el
+++ b/lisp/chistory.el
@@ -1,6 +1,6 @@
 ;;; chistory.el --- list command history
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: address@hidden
diff --git a/lisp/cmuscheme.el b/lisp/cmuscheme.el
index b48b7c9..5d72c56 100644
--- a/lisp/cmuscheme.el
+++ b/lisp/cmuscheme.el
@@ -1,6 +1,6 @@
 ;;; cmuscheme.el --- Scheme process in a buffer. Adapted from tea.el
 
-;; Copyright (C) 1988, 1994, 1997, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1988, 1994, 1997, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Olin Shivers <address@hidden>
diff --git a/lisp/color.el b/lisp/color.el
index bdafdcf..3471243 100644
--- a/lisp/color.el
+++ b/lisp/color.el
@@ -1,6 +1,6 @@
 ;;; color.el --- Color manipulation library -*- coding: utf-8; 
lexical-binding:t -*-
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Authors: Julien Danjou <address@hidden>
 ;;          Drew Adams <address@hidden>
diff --git a/lisp/comint.el b/lisp/comint.el
index da37827..30c4dda 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -1,6 +1,6 @@
 ;;; comint.el --- general command interpreter in a window stuff -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1988, 1990, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1990, 1992-2015 Free Software Foundation, Inc.
 
 ;; Author: Olin Shivers <address@hidden>
 ;;     Simon Marshall <address@hidden>
@@ -1475,7 +1475,7 @@ Intended to be added to `isearch-mode-hook' in 
`comint-mode'."
       (or
        ;; 1. First try searching in the initial comint text
        (funcall search-fun string
-               (if isearch-forward bound (comint-line-beginning-position))
+               (if isearch-forward bound (field-beginning))
                noerror)
        ;; 2. If the above search fails, start putting next/prev history
        ;; elements in the comint successively, and search the string
@@ -1491,7 +1491,7 @@ Intended to be added to `isearch-mode-hook' in 
`comint-mode'."
                        (when (null comint-input-ring-index)
                          (error "End of history; no next item"))
                        (comint-next-input 1)
-                       (goto-char (comint-line-beginning-position)))
+                       (goto-char (field-beginning)))
                       (t
                        ;; Signal an error here explicitly, because
                        ;; `comint-previous-input' doesn't signal an error.
@@ -1509,7 +1509,7 @@ Intended to be added to `isearch-mode-hook' in 
`comint-mode'."
                                      (unless isearch-forward
                                        ;; For backward search, don't search
                                        ;; in the comint prompt
-                                       (comint-line-beginning-position))
+                                       (field-beginning))
                                      noerror)))
               ;; Return point of the new search result
               (point))
@@ -1532,14 +1532,20 @@ the function `isearch-message'."
     ;; the initial comint prompt.
     (if (overlayp comint-history-isearch-message-overlay)
        (move-overlay comint-history-isearch-message-overlay
-                     (save-excursion (forward-line 0) (point))
-                      (comint-line-beginning-position))
+                     (save-excursion
+                       (goto-char (field-beginning))
+                       (forward-line 0)
+                       (point))
+                      (field-beginning))
       (setq comint-history-isearch-message-overlay
-           (make-overlay (save-excursion (forward-line 0) (point))
-                          (comint-line-beginning-position)))
+           (make-overlay (save-excursion
+                           (goto-char (field-beginning))
+                           (forward-line 0)
+                           (point))
+                          (field-beginning)))
       (overlay-put comint-history-isearch-message-overlay 'evaporate t))
     (overlay-put comint-history-isearch-message-overlay
-                'display (isearch-message-prefix c-q-hack ellipsis))
+                'display (isearch-message-prefix ellipsis 
isearch-nonincremental))
     (if (and comint-input-ring-index (not ellipsis))
        ;; Display the current history index.
        (message "History item: %d" (1+ comint-input-ring-index))
@@ -1557,7 +1563,7 @@ or to the last history element for a backward search."
       (comint-goto-input (1- (ring-length comint-input-ring)))
     (comint-goto-input nil))
   (setq isearch-success t)
-  (goto-char (if isearch-forward (comint-line-beginning-position) 
(point-max))))
+  (goto-char (if isearch-forward (field-beginning) (point-max))))
 
 (defun comint-history-isearch-push-state ()
   "Save a function restoring the state of input history search.
@@ -1781,7 +1787,7 @@ Similarly for Soar, Scheme, etc."
       (widen)
       (let* ((pmark (process-mark proc))
              (intxt (if (>= (point) (marker-position pmark))
-                        (progn (if comint-eol-on-send (end-of-line))
+                        (progn (if comint-eol-on-send (goto-char (field-end)))
                                (buffer-substring pmark (point)))
                       (let ((copy (funcall comint-get-old-input)))
                         (goto-char pmark)
diff --git a/lisp/completion.el b/lisp/completion.el
index d2d94e7..d3f1187 100644
--- a/lisp/completion.el
+++ b/lisp/completion.el
@@ -1,6 +1,6 @@
 ;;; completion.el --- dynamic word-completion code
 
-;; Copyright (C) 1990, 1993, 1995, 1997, 2001-2014 Free Software
+;; Copyright (C) 1990, 1993, 1995, 1997, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -373,7 +373,7 @@ Used to decide whether to save completions.")
 
 (defvar cmpl-preceding-syntax)
 
-(defvar completion-string)
+(defvar cmpl--completion-string)
 
 ;;---------------------------------------------------------------------------
 ;; Low level tools
@@ -1082,7 +1082,7 @@ Must be called after `find-exact-completion'."
             (cmpl-db-debug-p
              ;; not found, error if debug mode
              (error "Completion entry exists but not on prefix list - %s"
-                    completion-string))
+                    cmpl--completion-string))
             (inside-locate-completion-entry
              ;; recursive error: really scrod
              (locate-completion-db-error))
@@ -1149,73 +1149,75 @@ COMPLETION-STRING must be longer than 
`completion-prefix-min-length'.
 Updates the saved string with the supplied string.
 This must be very fast.
 Returns the completion entry."
-  ;; Handle pending acceptance
-  (if completion-to-accept (accept-completion))
-  ;; test if already in database
-  (if (setq cmpl-db-entry (find-exact-completion completion-string))
-      ;; found
-      (let* ((prefix-entry (find-cmpl-prefix-entry
-                            (substring cmpl-db-downcase-string 0
-                                       completion-prefix-min-length)))
-            (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry))
-            (cmpl-ptr (cdr splice-ptr)))
-       ;; update entry
-       (set-completion-string cmpl-db-entry completion-string)
-       ;; move to head (if necessary)
-       (cond (splice-ptr
-              ;; These should all execute atomically but it is not fatal if
-              ;; they don't.
-              ;; splice it out
-              (or (setcdr splice-ptr (cdr cmpl-ptr))
-                  ;; fix up tail if necessary
-                  (set-cmpl-prefix-entry-tail prefix-entry splice-ptr))
-              ;; splice in at head
-              (setcdr cmpl-ptr (cmpl-prefix-entry-head prefix-entry))
-              (set-cmpl-prefix-entry-head prefix-entry cmpl-ptr)))
-       cmpl-db-entry)
-    ;; not there
-    (let (;; create an entry
-         (entry (list (make-completion completion-string)))
-         ;; setup the prefix
-         (prefix-entry (find-cmpl-prefix-entry
-                         (substring cmpl-db-downcase-string 0
-                                    completion-prefix-min-length))))
-      (cond (prefix-entry
-            ;; Splice in at head
-            (setcdr entry (cmpl-prefix-entry-head prefix-entry))
-            (set-cmpl-prefix-entry-head prefix-entry entry))
-           (t
-            ;; Start new prefix entry
-            (set cmpl-db-prefix-symbol (make-cmpl-prefix-entry entry))))
-      ;; Add it to the symbol
-      (set cmpl-db-symbol (car entry)))))
+  (let ((cmpl--completion-string completion-string))
+    ;; Handle pending acceptance
+    (if completion-to-accept (accept-completion))
+    ;; test if already in database
+    (if (setq cmpl-db-entry (find-exact-completion completion-string))
+        ;; found
+        (let* ((prefix-entry (find-cmpl-prefix-entry
+                              (substring cmpl-db-downcase-string 0
+                                         completion-prefix-min-length)))
+               (splice-ptr (locate-completion-entry cmpl-db-entry 
prefix-entry))
+               (cmpl-ptr (cdr splice-ptr)))
+          ;; update entry
+          (set-completion-string cmpl-db-entry completion-string)
+          ;; move to head (if necessary)
+          (cond (splice-ptr
+                 ;; These should all execute atomically but it is not fatal if
+                 ;; they don't.
+                 ;; splice it out
+                 (or (setcdr splice-ptr (cdr cmpl-ptr))
+                     ;; fix up tail if necessary
+                     (set-cmpl-prefix-entry-tail prefix-entry splice-ptr))
+                 ;; splice in at head
+                 (setcdr cmpl-ptr (cmpl-prefix-entry-head prefix-entry))
+                 (set-cmpl-prefix-entry-head prefix-entry cmpl-ptr)))
+          cmpl-db-entry)
+      ;; not there
+      (let ( ;; create an entry
+            (entry (list (make-completion completion-string)))
+            ;; setup the prefix
+            (prefix-entry (find-cmpl-prefix-entry
+                           (substring cmpl-db-downcase-string 0
+                                      completion-prefix-min-length))))
+        (cond (prefix-entry
+               ;; Splice in at head
+               (setcdr entry (cmpl-prefix-entry-head prefix-entry))
+               (set-cmpl-prefix-entry-head prefix-entry entry))
+              (t
+               ;; Start new prefix entry
+               (set cmpl-db-prefix-symbol (make-cmpl-prefix-entry entry))))
+        ;; Add it to the symbol
+        (set cmpl-db-symbol (car entry))))))
 
 (defun delete-completion (completion-string)
   "Delete the completion from the database.
 String must be longer than `completion-prefix-min-length'."
   ;; Handle pending acceptance
-  (if completion-to-accept (accept-completion))
-  (if (setq cmpl-db-entry (find-exact-completion completion-string))
-      ;; found
-      (let* ((prefix-entry (find-cmpl-prefix-entry
-                            (substring cmpl-db-downcase-string 0
-                                       completion-prefix-min-length)))
-            (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry)))
-        ;; delete symbol reference
-        (set cmpl-db-symbol nil)
-        ;; remove from prefix list
-        (cond (splice-ptr
-               ;; not at head
-               (or (setcdr splice-ptr (cdr (cdr splice-ptr)))
-                   ;; fix up tail if necessary
-                   (set-cmpl-prefix-entry-tail prefix-entry splice-ptr)))
-              (t
-               ;; at head
-               (or (set-cmpl-prefix-entry-head
+  (let ((cmpl--completion-string completion-string))
+    (if completion-to-accept (accept-completion))
+    (if (setq cmpl-db-entry (find-exact-completion completion-string))
+        ;; found
+        (let* ((prefix-entry (find-cmpl-prefix-entry
+                              (substring cmpl-db-downcase-string 0
+                                         completion-prefix-min-length)))
+               (splice-ptr (locate-completion-entry cmpl-db-entry 
prefix-entry)))
+          ;; delete symbol reference
+          (set cmpl-db-symbol nil)
+          ;; remove from prefix list
+          (cond (splice-ptr
+                 ;; not at head
+                 (or (setcdr splice-ptr (cdr (cdr splice-ptr)))
+                     ;; fix up tail if necessary
+                     (set-cmpl-prefix-entry-tail prefix-entry splice-ptr)))
+                (t
+                 ;; at head
+                 (or (set-cmpl-prefix-entry-head
                      prefix-entry (cdr (cmpl-prefix-entry-head prefix-entry)))
-                   ;; List is now empty
-                   (set cmpl-db-prefix-symbol nil)))))
-      (error "Unknown completion `%s'" completion-string)))
+                     ;; List is now empty
+                     (set cmpl-db-prefix-symbol nil)))))
+      (error "Unknown completion `%s'" completion-string))))
 
 ;; Tests --
 ;;  - Add and Find -
@@ -1311,7 +1313,7 @@ are specified."
   (delete-completion string))
 
 (defun accept-completion ()
-  "Accepts the pending completion in `completion-to-accept'.
+  "Accept the pending completion in `completion-to-accept'.
 This bumps num-uses.  Called by `add-completion-to-head' and
 `completion-search-reset'."
   (let ((string completion-to-accept)
@@ -2156,26 +2158,27 @@ Patched to remove the most recent completion."
 ;; to work)
 
 ;; All common separators (eg. space "(" ")" """) characters go through a
-;; function to add new words to the list of words to complete from:
-;;  COMPLETION-SEPARATOR-SELF-INSERT-COMMAND (arg).
+;; function to add new words to the list of words to complete from.
 ;; If the character before this was an alpha-numeric then this adds the
 ;; symbol before point to the completion list (using ADD-COMPLETION).
 
-(defun completion-separator-self-insert-command (arg)
-  (interactive "p")
-  (if (command-remapping 'self-insert-command)
-      (funcall (command-remapping 'self-insert-command) arg)
-    (use-completion-before-separator)
-    (self-insert-command arg)))
-
-(defun completion-separator-self-insert-autofilling (arg)
-  (interactive "p")
-  (if (command-remapping 'self-insert-command)
-      (funcall (command-remapping 'self-insert-command) arg)
-    (use-completion-before-separator)
-    (self-insert-command arg)
-    (and auto-fill-function
-        (funcall auto-fill-function))))
+(defvar completion-separator-chars
+  (append " !%^&()=`|{}[];\\'#,?"
+          ;; We include period and colon even though they are symbol
+          ;; chars because :
+          ;;  - in text we want to pick up the last word in a sentence.
+          ;;  - in C pointer refs. we want to pick up the first symbol
+          ;;  - it won't make a difference for lisp mode (package names
+          ;;    are short)
+          ".:" nil))
+
+(defun completion--post-self-insert ()
+  (when (memq last-command-event completion-separator-chars)
+    (let ((after-pos (electric--after-char-pos)))
+      (when after-pos
+        (save-excursion
+          (goto-char (1- after-pos))
+          (use-completion-before-separator))))))
 
 ;;-----------------------------------------------
 ;; Wrapping Macro
@@ -2244,9 +2247,8 @@ TYPE is the type of the wrapper to be added.  Can be 
:before or :under."
 (completion-def-wrapper 'electric-c-semi :separator)
 (defun completion-c-mode-hook ()
   (setq completion-syntax-table completion-c-syntax-table)
-  (local-set-key "+" 'completion-separator-self-insert-command)
-  (local-set-key "*" 'completion-separator-self-insert-command)
-  (local-set-key "/" 'completion-separator-self-insert-command))
+  (setq-local completion-separator-chars
+              (append "+*/" completion-separator-chars)))
 
 ;; FORTRAN mode diffs. (these are defined when fortran is called)
 
@@ -2259,10 +2261,8 @@ TYPE is the type of the wrapper to be added.  Can be 
:before or :under."
 
 (defun completion-setup-fortran-mode ()
   (setq completion-syntax-table completion-fortran-syntax-table)
-  (local-set-key "+" 'completion-separator-self-insert-command)
-  (local-set-key "-" 'completion-separator-self-insert-command)
-  (local-set-key "*" 'completion-separator-self-insert-command)
-  (local-set-key "/" 'completion-separator-self-insert-command))
+  (setq-local completion-separator-chars
+              (append "+-*/" completion-separator-chars)))
 
 ;; Enable completion mode.
 
@@ -2281,15 +2281,16 @@ if ARG is omitted or nil."
   ;; This is always good, not specific to dynamic-completion-mode.
   (define-key function-key-map [C-return] [?\C-\r])
 
-  (dolist (x '((find-file-hook         . completion-find-file-hook)
-               (pre-command-hook       . completion-before-command)
+  (dolist (x `((find-file-hook         . ,#'completion-find-file-hook)
+               (pre-command-hook       . ,#'completion-before-command)
                ;; Save completions when killing Emacs.
-               (kill-emacs-hook                . kill-emacs-save-completions)
+               (kill-emacs-hook                . 
,#'kill-emacs-save-completions)
+               (post-self-insert-hook  . ,#'completion--post-self-insert)
 
                ;; Install the appropriate mode tables.
-               (lisp-mode-hook         . completion-lisp-mode-hook)
-               (c-mode-hook            . completion-c-mode-hook)
-               (fortran-mode-hook      . completion-setup-fortran-mode)))
+               (lisp-mode-hook         . ,#'completion-lisp-mode-hook)
+               (c-mode-hook            . ,#'completion-c-mode-hook)
+               (fortran-mode-hook      . ,#'completion-setup-fortran-mode)))
     (if dynamic-completion-mode
         (add-hook (car x) (cdr x))
       (remove-hook (car x) (cdr x))))
@@ -2315,44 +2316,7 @@ if ARG is omitted or nil."
                ;; cumb
 
                ;; Patches to standard keymaps insert completions
-               ([remap kill-region] . completion-kill-region)
-
-               ;; Separators
-               ;; We've used the completion syntax table given  as a guide.
-               ;;
-               ;; Global separator chars.
-               ;;  We left out <tab> because there are too many special
-               ;; cases for it.  Also, in normal coding it's rarely typed
-               ;; after a word.
-               (" " . completion-separator-self-insert-autofilling)
-               ("!" . completion-separator-self-insert-command)
-               ("%" . completion-separator-self-insert-command)
-               ("^" . completion-separator-self-insert-command)
-               ("&" . completion-separator-self-insert-command)
-               ("(" . completion-separator-self-insert-command)
-               (")" . completion-separator-self-insert-command)
-               ("=" . completion-separator-self-insert-command)
-               ("`" . completion-separator-self-insert-command)
-               ("|" . completion-separator-self-insert-command)
-               ("{" . completion-separator-self-insert-command)
-               ("}" . completion-separator-self-insert-command)
-               ("[" . completion-separator-self-insert-command)
-               ("]" . completion-separator-self-insert-command)
-               (";" . completion-separator-self-insert-command)
-               ("\"".  completion-separator-self-insert-command)
-               ("'" . completion-separator-self-insert-command)
-               ("#" . completion-separator-self-insert-command)
-               ("," . completion-separator-self-insert-command)
-               ("?" . completion-separator-self-insert-command)
-
-               ;; We include period and colon even though they are symbol
-               ;; chars because :
-               ;;  - in text we want to pick up the last word in a sentence.
-               ;;  - in C pointer refs. we want to pick up the first symbol
-               ;;  - it won't make a difference for lisp mode (package names
-               ;;    are short)
-               ("." . completion-separator-self-insert-command)
-               (":" . completion-separator-self-insert-command)))
+               ([remap kill-region] . completion-kill-region)))
       (push (cons (car binding) (lookup-key global-map (car binding)))
             completion-saved-bindings)
       (global-set-key (car binding) (cdr binding)))
diff --git a/lisp/composite.el b/lisp/composite.el
index ca38c39..4ab31d7 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -1,6 +1,6 @@
 ;;; composite.el --- support character composition
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
 ;;   2008, 2009, 2010, 2011
diff --git a/lisp/cus-dep.el b/lisp/cus-dep.el
index eb760f7..b8a9eb8 100644
--- a/lisp/cus-dep.el
+++ b/lisp/cus-dep.el
@@ -1,6 +1,6 @@
 ;;; cus-dep.el --- find customization dependencies
 ;;
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Keywords: internal
@@ -62,7 +62,8 @@ Usage: emacs -batch -l ./cus-dep.el -f 
custom-make-dependencies DIRS"
       (while (setq subdir (pop command-line-args-left))
         (message "Directory %s" subdir)
         (let ((files (directory-files subdir nil "\\`[^=.].*\\.el\\'"))
-              (default-directory (expand-file-name subdir))
+              (default-directory
+                (file-name-as-directory (expand-file-name subdir)))
               (preloaded (concat "\\`\\(\\./+\\)?"
                                  (regexp-opt preloaded-file-list t)
                                  "\\.el\\'")))
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index c8e9b90..f56fb6a 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -1,6 +1,6 @@
 ;;; cus-edit.el --- tools for customizing Emacs and Lisp packages -*- 
lexical-binding:t -*-
 ;;
-;; Copyright (C) 1996-1997, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 1999-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Maintainer: address@hidden
@@ -1356,12 +1356,10 @@ suggest to customize that face, if it's customizable."
                                      (or (face-at-point t t) "all faces") t)))
   (customize-face face t))
 
-(defalias 'customize-customized 'customize-unsaved)
-
-;;;###autoload
-(defun customize-unsaved ()
-  "Customize all options and faces set in this session but not saved."
-  (interactive)
+(defun custom-unsaved-options ()
+  "List of options and faces set in this session but not saved.
+Each entry is of the form (SYMBOL TYPE), where TYPE is one of the
+symbols `custom-face' or `custom-variable'."
   (let ((found nil))
     (mapatoms (lambda (symbol)
                (and (or (get symbol 'customized-face)
@@ -1372,6 +1370,15 @@ suggest to customize that face, if it's customizable."
                         (get symbol 'customized-variable-comment))
                     (boundp symbol)
                     (push (list symbol 'custom-variable) found))))
+    found))
+
+(defalias 'customize-customized 'customize-unsaved)
+
+;;;###autoload
+(defun customize-unsaved ()
+  "Customize all options and faces set in this session but not saved."
+  (interactive)
+  (let ((found (custom-unsaved-options)))
     (if (not found)
        (error "No user options are set but unsaved")
       (custom-buffer-create (custom-sort-items found t nil)
@@ -1477,6 +1484,16 @@ If TYPE is `groups', include only groups."
   (interactive (list (apropos-read-pattern "groups")))
   (customize-apropos regexp 'groups))
 
+;;;###autoload
+(defun custom-prompt-customize-unsaved-options ()
+  "Prompt user to customize any unsaved customization options.
+Return non-nil if user chooses to customize, for use in
+`kill-emacs-query-functions'."
+  (not (and (custom-unsaved-options)
+           (yes-or-no-p "Some customized options have not been saved; Examine? 
")
+           (customize-unsaved)
+           t)))
+
 ;;; Buffer.
 
 (defcustom custom-buffer-style 'links
diff --git a/lisp/cus-face.el b/lisp/cus-face.el
index a9e6f3f..35c853b 100644
--- a/lisp/cus-face.el
+++ b/lisp/cus-face.el
@@ -1,6 +1,6 @@
 ;;; cus-face.el --- customization support for faces
 ;;
-;; Copyright (C) 1996-1997, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 1999-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Keywords: help, faces
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 3b8885a..71506cb 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -1,6 +1,6 @@
 ;;; cus-start.el --- define customization properties of builtins
 
-;; Copyright (C) 1997, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Keywords: internal
@@ -421,6 +421,12 @@ Leaving \"Default\" unchecked is equivalent with 
specifying a default of
                                                    "21.1")
              ;; term.c
              (visible-cursor cursor boolean "22.1")
+             ;; terminal.c
+             (ring-bell-function display
+              (choice
+               (const :tag "Default" nil)
+               (const :tag "Silent" ignore)
+               function))
             ;; undo.c
             (undo-limit undo integer)
             (undo-strong-limit undo integer)
@@ -460,6 +466,7 @@ since it could result in memory overflow and make Emacs 
crash."
                              :value display-buffer)
                       (other :tag "Always (t)" :value t))
              "24.3")
+            (fast-but-imprecise-scrolling scrolling boolean "25.1")
             (window-resize-pixelwise windows boolean "24.4")
             ;; xdisp.c
             ;; The whitespace group is for whitespace.el.
@@ -519,7 +526,12 @@ since it could result in memory overflow and make Emacs 
crash."
                                      (const :tag "Hourglass" :value 
hourglass)))
             (display-hourglass cursor boolean)
             (hourglass-delay cursor number)
-
+            (resize-mini-windows
+             windows (choice
+                      (const :tag "Off (nil)" :value nil)
+                      (const :tag "Fit (t)" :value t)
+                      (const :tag "Grow only" :value grow-only))
+             "25.1")
             ;; xfaces.c
             (scalable-fonts-allowed display boolean "22.1")
             ;; xfns.c
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index 928c54d..224d2c5 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -1,6 +1,6 @@
 ;;; cus-theme.el -- custom theme creation user interface
 ;;
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/custom.el b/lisp/custom.el
index c30ad7c..e5fe0eb 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -1,6 +1,6 @@
 ;;; custom.el --- tools for declaring and initializing options
 ;;
-;; Copyright (C) 1996-1997, 1999, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1996-1997, 1999, 2001-2015 Free Software Foundation,
 ;; Inc.
 ;;
 ;; Author: Per Abrahamsen <address@hidden>
@@ -411,7 +411,8 @@ In the ATTS property list, possible attributes are 
`:family',
 
 See Info node `(elisp) Faces' in the Emacs Lisp manual for more
 information."
-  (declare (doc-string 3))
+  (declare (doc-string 3)
+           (indent 1))
   ;; It is better not to use backquote in this file,
   ;; because that makes a bootstrapping problem
   ;; if you need to recompile all the Lisp files using interpreted code.
diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el
index 0edc416..50c5207 100644
--- a/lisp/dabbrev.el
+++ b/lisp/dabbrev.el
@@ -1,6 +1,6 @@
 ;;; dabbrev.el --- dynamic abbreviation package  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994, 1996-1997, 2000-2014 Free
+;; Copyright (C) 1985-1986, 1992, 1994, 1996-1997, 2000-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Don Morrison
diff --git a/lisp/delim-col.el b/lisp/delim-col.el
index 853ea60..d16a03c 100644
--- a/lisp/delim-col.el
+++ b/lisp/delim-col.el
@@ -1,6 +1,6 @@
 ;;; delim-col.el --- prettify all columns in a region or rectangle
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/delsel.el b/lisp/delsel.el
index 96794fc..e6bb3b9 100644
--- a/lisp/delsel.el
+++ b/lisp/delsel.el
@@ -1,6 +1,6 @@
 ;;; delsel.el --- delete selection if you insert
 
-;; Copyright (C) 1992, 1997-1998, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1992, 1997-1998, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Matthieu Devin <address@hidden>
diff --git a/lisp/descr-text.el b/lisp/descr-text.el
index 1dc43e9..d6f64c7 100644
--- a/lisp/descr-text.el
+++ b/lisp/descr-text.el
@@ -1,6 +1,6 @@
 ;;; descr-text.el --- describe text mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1994-1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <address@hidden>
 ;; Maintainer: address@hidden
@@ -825,6 +825,102 @@ relevant to POS."
 
 (define-obsolete-function-alias 'describe-char-after 'describe-char "22.1")
 
+;;; Describe-Char-ElDoc
+
+(defun describe-char-eldoc--truncate (name width)
+  "Truncate NAME at white spaces such that it is no longer than WIDTH.
+
+Split NAME on white space character and return string with as
+many leading words of NAME as possible without exceeding WIDTH
+characters.  If NAME consists of white space characters only,
+return an empty string.  Three dots (\"...\") are appended to
+returned string if some of the words from NAME have been omitted.
+
+NB: Function may return string longer than WIDTH if name consists
+of a single word, or it's first word is longer than WIDTH
+characters."
+  (let ((words (split-string name)))
+    (if words
+        (let ((last words))
+          (setq width (- width (length (car words))))
+          (while (and (cdr last)
+                      (<= (+ (length (cadr last)) (if (cddr last) 4 1)) width))
+            (setq last (cdr last))
+            (setq width (- width (length (car last)) 1)))
+          (let ((ellipsis (and (cdr last) "...")))
+            (setcdr last nil)
+            (concat (mapconcat 'identity words " ") ellipsis)))
+      "")))
+
+(defun describe-char-eldoc--format (ch &optional width)
+  "Format a description for character CH which is no more than WIDTH 
characters.
+
+Full description message has a \"U+HEX: NAME (GC: GENERAL-CATEGORY)\"
+format where:
+- HEX is a hexadecimal codepoint of the character (zero-padded to at
+  least four digits),
+- NAME is name of the character.
+- GC is a two-letter abbreviation of the general-category of the
+  character, and
+- GENERAL-CATEGORY is full name of the general-category of the
+  character.
+
+If WIDTH is non-nil some elements of the description may be
+omitted to accommodate the length restriction.  Under certain
+condition, the function may return string longer than WIDTH, see
+`describe-char-eldoc--truncate'."
+  (let ((name (get-char-code-property ch 'name)))
+    (when name
+      (let* ((code (propertize (format "U+%04X" ch)
+                               'face 'font-lock-constant-face))
+             (gc (get-char-code-property ch 'general-category))
+             (gc-desc (char-code-property-description 'general-category gc)))
+
+        (unless (or (not width) (<= (length name) width))
+          (setq name (describe-char-eldoc--truncate name width)))
+        (setq name (concat (substring name 0 1) (downcase (substring name 1))))
+        (setq name (propertize name 'face 'font-lock-variable-name-face))
+
+        (setq gc (propertize (symbol-name gc) 'face 'font-lock-comment-face))
+        (when gc-desc
+          (setq gc-desc (propertize gc-desc 'face 'font-lock-comment-face)))
+
+        (let ((lcode    (length code))
+              (lname    (length name))
+              (lgc      (length gc))
+              (lgc-desc (and gc-desc (length gc-desc))))
+          (cond
+           ((and gc-desc
+                 (or (not width) (<= (+ lcode lname lgc lgc-desc 7) width)))
+            (concat code ": " name " (" gc ": " gc-desc ")"))
+           ((and gc-desc (<= (+ lcode lname lgc-desc 5) width))
+            (concat code ": " name " (" gc-desc ")"))
+           ((or (not width) (<= (+ lcode lname lgc 5) width))
+            (concat code ": " name " (" gc ")"))
+           ((<= (+ lname lgc 3) width)
+            (concat name " (" gc ")"))
+           (t name)))))))
+
+;;;###autoload
+(defun describe-char-eldoc ()
+  "Return a description of character at point for use by ElDoc mode.
+
+Return nil if character at point is a printable ASCII
+character (i.e. codepoint between 32 and 127 inclusively).
+Otherwise return a description formatted by
+`describe-char-eldoc--format' function taking into account value
+of `eldoc-echo-area-use-multiline-p' variable and width of
+minibuffer window for width limit.
+
+This function is meant to be used as a value of
+`eldoc-documentation-function' variable."
+  (let ((ch (following-char)))
+    (when (and (not (zerop ch)) (or (< ch 32) (> ch 127)))
+      (describe-char-eldoc--format
+       ch
+       (unless (eq eldoc-echo-area-use-multiline-p t)
+         (1- (window-width (minibuffer-window))))))))
+
 (provide 'descr-text)
 
 ;;; descr-text.el ends here
diff --git a/lisp/desktop.el b/lisp/desktop.el
index 360ff48..c355d7f 100644
--- a/lisp/desktop.el
+++ b/lisp/desktop.el
@@ -1,6 +1,7 @@
 ;;; desktop.el --- save partial status of Emacs when killed -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-1995, 1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1997, 2000-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Morten Welinder <address@hidden>
 ;; Keywords: convenience
@@ -940,7 +941,7 @@ Frames with a non-nil `desktop-dont-save' parameter are not 
saved."
        (and desktop-restore-frames
             (frameset-save nil
                            :app desktop--app-id
-                           :name (concat user-login-name "@" system-name)
+                           :name (concat user-login-name "@" (system-name))
                            :predicate #'desktop--check-dont-save))))
 
 ;;;###autoload
@@ -1190,7 +1191,6 @@ Using it may cause conflicts.  Use it anyway? " owner)))))
            (desktop-auto-save-enable)
            t))
       ;; No desktop file found.
-      (desktop-clear)
       (let ((default-directory desktop-dirname))
         (run-hooks 'desktop-no-desktop-file-hook))
       (message "No desktop file.")
@@ -1413,8 +1413,8 @@ after that many seconds of idle time."
             (if (consp desktop-buffer-mark)
                 (progn
                   (move-marker (mark-marker) (car desktop-buffer-mark))
-                  ;; FIXME: Should we call (de)activate-mark instead?
-                  (setq mark-active (car (cdr desktop-buffer-mark))))
+                  (if (car (cdr desktop-buffer-mark))
+                      (activate-mark 'dont-touch-tmm)))
               (move-marker (mark-marker) desktop-buffer-mark)))
          ;; Never override file system if the file really is read-only marked.
          (when desktop-buffer-read-only (setq buffer-read-only 
desktop-buffer-read-only))
diff --git a/lisp/dframe.el b/lisp/dframe.el
index 90edacb..94c1e10 100644
--- a/lisp/dframe.el
+++ b/lisp/dframe.el
@@ -1,6 +1,6 @@
 ;;; dframe --- dedicate frame support modes  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: file, tags, tools
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index bb93cce..b4e2dc0 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1,7 +1,7 @@
 ;;; dired-aux.el --- less commonly used parts of dired
 
-;; Copyright (C) 1985-1986, 1992, 1994, 1998, 2000-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1992, 1994, 1998, 2000-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Sebastian Kremer <address@hidden>.
 ;; Maintainer: address@hidden
@@ -2062,7 +2062,10 @@ See Info node `(emacs)Subdir switches' for more details."
     ;; inserted *after* opoint.
     (setq dirname (file-name-as-directory dirname))
     (or (and (not switches)
-            (dired-goto-subdir dirname))
+            (when (dired-goto-subdir dirname)
+              (unless (dired-subdir-hidden-p dirname)
+                (dired-initial-position dirname))
+              t))
        (dired-insert-subdir dirname switches no-error-if-not-dir-p))
     ;; Push mark so that it's easy to find back.  Do this after the
     ;; insert message so that the user sees the `Mark set' message.
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index 25c6f8b..eebfa91 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -1,6 +1,7 @@
 ;;; dired-x.el --- extra Dired functionality  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1993-1994, 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 1997, 2001-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Sebastian Kremer <address@hidden>
 ;;     Lawrence R. Dodd <address@hidden>
diff --git a/lisp/dired.el b/lisp/dired.el
index 4cc252c..2b3e783 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1,7 +1,7 @@
 ;;; dired.el --- directory-browsing commands -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1992-1997, 2000-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1992-1997, 2000-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Sebastian Kremer <address@hidden>
 ;; Maintainer: address@hidden
@@ -3059,7 +3059,7 @@ or \"* [3 files]\"."
   (when dired-shrink-to-fit
     ;; Try to not delete window when we want to display less than
     ;; `window-min-height' lines.
-    (fit-window-to-buffer (get-buffer-window buf) nil 1)))
+    (fit-window-to-buffer (get-buffer-window buf) nil 1 nil nil t)))
 
 (defcustom dired-no-confirm nil
   "A list of symbols for commands Dired should not confirm, or t.
@@ -3106,7 +3106,8 @@ argument or confirmation)."
       (with-displayed-buffer-window
        buffer
        (cons 'display-buffer-below-selected
-            '((window-height . fit-window-to-buffer)))
+            '((window-height . fit-window-to-buffer)
+              (preserve-size . (nil . t))))
        #'(lambda (window _value)
           (with-selected-window window
             (unwind-protect
@@ -3883,7 +3884,7 @@ Ask means pop up a menu for the user to select one of 
copy, move or link."
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "dired-aux" "dired-aux.el" 
"1448837b5f3e2b9ad63f723361f1e32e")
+;;;### (autoloads nil "dired-aux" "dired-aux.el" 
"65f8aa57ace423283926d92dff903ca7")
 ;;; Generated autoloads from dired-aux.el
 
 (autoload 'dired-diff "dired-aux" "\
@@ -4386,7 +4387,7 @@ instead.
 
 ;;;***
 
-;;;### (autoloads nil "dired-x" "dired-x.el" 
"994b5d9fc38059ab641ec271c728e56f")
+;;;### (autoloads nil "dired-x" "dired-x.el" 
"d8d702a50887671b9128ba60bd9ebb8e")
 ;;; Generated autoloads from dired-x.el
 
 (autoload 'dired-jump "dired-x" "\
diff --git a/lisp/dirtrack.el b/lisp/dirtrack.el
index 2c691cf..d1957a2 100644
--- a/lisp/dirtrack.el
+++ b/lisp/dirtrack.el
@@ -1,6 +1,6 @@
 ;;; dirtrack.el --- Directory Tracking by watching the prompt
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Peter Breton <address@hidden>
 ;; Created: Sun Nov 17 1996
diff --git a/lisp/disp-table.el b/lisp/disp-table.el
index 0d67044..84f9c89 100644
--- a/lisp/disp-table.el
+++ b/lisp/disp-table.el
@@ -1,6 +1,6 @@
 ;;; disp-table.el --- functions for dealing with char tables
 
-;; Copyright (C) 1987, 1994-1995, 1999, 2001-2014 Free Software
+;; Copyright (C) 1987, 1994-1995, 1999, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Erik Naggum <address@hidden>
diff --git a/lisp/dnd.el b/lisp/dnd.el
index 73b531d..3e161dc 100644
--- a/lisp/dnd.el
+++ b/lisp/dnd.el
@@ -1,6 +1,6 @@
 ;;; dnd.el --- drag and drop support.  -*- coding: utf-8 -*-
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Jan Djärv <address@hidden>
 ;; Maintainer: address@hidden
@@ -122,17 +122,18 @@ Return nil if URI is not a local file."
 
   ;; The hostname may be our hostname, in that case, convert to a local
   ;; file.  Otherwise return nil.  TODO:  How about an IP-address as hostname?
-  (let ((hostname (when (string-match "^file://\\([^/]*\\)" uri)
+  (let ((sysname (system-name)))
+    (let ((hostname (when (string-match "^file://\\([^/]*\\)" uri)
                      (downcase (match-string 1 uri))))
-       (system-name-no-dot
-        (downcase (if (string-match "^[^\\.]+" system-name)
-                      (match-string 0 system-name)
-                    system-name))))
-    (when (and hostname
-            (or (string-equal "localhost" hostname)
-                (string-equal (downcase system-name) hostname)
-                (string-equal system-name-no-dot hostname)))
-       (concat "file://" (substring uri (+ 7 (length hostname)))))))
+         (sysname-no-dot
+          (downcase (if (string-match "^[^\\.]+" sysname)
+                        (match-string 0 sysname)
+                      sysname))))
+      (when (and hostname
+                (or (string-equal "localhost" hostname)
+                    (string-equal (downcase sysname) hostname)
+                    (string-equal sysname-no-dot hostname)))
+       (concat "file://" (substring uri (+ 7 (length hostname))))))))
 
 (defsubst dnd-unescape-uri (uri)
   (replace-regexp-in-string
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index 37cb278..0e63d37 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -1,6 +1,6 @@
 ;;; doc-view.el --- View PDF/PostScript/DVI files in Emacs -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Tassilo Horn <address@hidden>
 ;; Maintainer: Tassilo Horn <address@hidden>
diff --git a/lisp/dom.el b/lisp/dom.el
new file mode 100644
index 0000000..11357e8
--- /dev/null
+++ b/lisp/dom.el
@@ -0,0 +1,230 @@
+;;; dom.el --- XML/HTML (etc.) DOM manipulation and searching functions
+
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <address@hidden>
+;; Keywords: xml, html
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'cl-lib)
+
+(defsubst dom-tag (node)
+  "Return the NODE tag."
+  ;; Called on a list of nodes.  Use the first.
+  (if (consp (car node))
+      (caar node)
+    (car node)))
+
+(defsubst dom-attributes (node)
+  "Return the NODE attributes."
+  ;; Called on a list of nodes.  Use the first.
+  (if (consp (car node))
+      (cadr (car node))
+    (cadr node)))
+
+(defsubst dom-children (node)
+  "Return the NODE children."
+  ;; Called on a list of nodes.  Use the first.
+  (if (consp (car node))
+      (cddr (car node))
+    (cddr node)))
+
+(defun dom-non-text-children (node)
+  "Return all non-text-node children of NODE."
+  (cl-loop for child in (dom-children node)
+          unless (stringp child)
+          collect child))
+
+(defun dom-set-attributes (node attributes)
+  "Set the attributes of NODE to ATTRIBUTES."
+  (setq node (dom-ensure-node node))
+  (setcar (cdr node) attributes))
+
+(defun dom-set-attribute (node attribute value)
+  "Set ATTRIBUTE in NODE to VALUE."
+  (setq node (dom-ensure-node node))
+  (let ((old (assoc attribute (cadr node))))
+    (if old
+       (setcdr old value)
+      (setcar (cdr node) (nconc (cadr node) (list (cons attribute value)))))))
+
+(defmacro dom-attr (node attr)
+  "Return the attribute ATTR from NODE.
+A typical attribute is `href'."
+  `(cdr (assq ,attr (dom-attributes ,node))))
+
+(defun dom-text (node)
+  "Return all the text bits in the current node concatenated."
+  (mapconcat 'identity (cl-remove-if-not 'stringp (dom-children node)) " "))
+
+(defun dom-texts (node &optional separator)
+  "Return all textual data under NODE concatenated with SEPARATOR in-between."
+  (mapconcat
+   'identity
+   (mapcar
+    (lambda (elem)
+      (if (stringp elem)
+         elem
+       (dom-texts elem separator)))
+    (dom-children node))
+   (or separator " ")))
+
+(defun dom-child-by-tag (dom tag)
+  "Return the first child of DOM that is of type TAG."
+  (assoc tag (dom-children dom)))
+
+(defun dom-by-tag (dom tag)
+  "Return elements in DOM that is of type TAG.
+A name is a symbol like `td'."
+  (let ((matches (cl-loop for child in (dom-children dom)
+                         for matches = (and (not (stringp child))
+                                            (dom-by-tag child tag))
+                         when matches
+                         append matches)))
+    (if (equal (dom-tag dom) tag)
+       (cons dom matches)
+      matches)))
+
+(defun dom-strings (dom)
+  "Return elements in DOM that are strings."
+  (cl-loop for child in (dom-children dom)
+          if (stringp child)
+          collect child
+          else
+          append (dom-strings child)))
+
+(defun dom-by-class (dom match)
+  "Return elements in DOM that have a class name that matches regexp MATCH."
+  (dom-elements dom 'class match))
+
+(defun dom-by-style (dom match)
+  "Return elements in DOM that have a style that matches regexp MATCH."
+  (dom-elements dom 'style match))
+
+(defun dom-by-id (dom match)
+  "Return elements in DOM that have an ID that matches regexp MATCH."
+  (dom-elements dom 'id match))
+
+(defun dom-elements (dom attribute match)
+  "Find elements matching MATCH (a regexp) in ATTRIBUTE.
+ATTRIBUTE would typically be `class', `id' or the like."
+  (let ((matches (cl-loop for child in (dom-children dom)
+                         for matches = (and (not (stringp child))
+                                            (dom-elements child attribute
+                                                          match))
+                         when matches
+                         append matches))
+       (attr (dom-attr dom attribute)))
+    (if (and attr
+            (string-match match attr))
+       (cons dom matches)
+      matches)))
+
+(defun dom-parent (dom node)
+  "Return the parent of NODE in DOM."
+  (if (memq node (dom-children dom))
+      dom
+    (let ((result nil))
+      (dolist (elem (dom-children dom))
+       (when (and (not result)
+                  (not (stringp elem)))
+         (setq result (dom-parent elem node))))
+      result)))
+
+(defun dom-node (tag &optional attributes &rest children)
+  "Return a DOM node with TAG and ATTRIBUTES."
+  (if children
+      `(,tag ,attributes ,@children)
+    (list tag attributes)))
+
+(defun dom-append-child (node child)
+  "Append CHILD to the end of NODE's children."
+  (setq node (dom-ensure-node node))
+  (nconc node (list child)))
+
+(defun dom-add-child-before (node child &optional before)
+  "Add CHILD to NODE's children before child BEFORE.
+If BEFORE is nil, make CHILD NODE's first child."
+  (setq node (dom-ensure-node node))
+  (let ((children (dom-children node)))
+    (when (and before
+              (not (memq before children)))
+      (error "%s does not exist as a child" before))
+    (let ((pos (if before
+                  (cl-position before children)
+                0)))
+      (if (zerop pos)
+         ;; First child.
+         (setcdr (cdr node) (cons child (cddr node)))
+       (setcdr (nthcdr (1- pos) children)
+               (cons child (nthcdr pos children))))))
+  node)
+
+(defun dom-ensure-node (node)
+  "Ensure that NODE is a proper DOM node."
+  ;; Add empty attributes, if none.
+  (when (consp (car node))
+    (setq node (car node)))
+  (when (= (length node) 1)
+    (setcdr node (list nil)))
+  node)
+
+(defun dom-pp (dom &optional remove-empty)
+  "Pretty-print DOM at point.
+If REMOVE-EMPTY, ignore textual nodes that contain just
+white-space."
+  (let ((column (current-column)))
+    (insert (format "(%S " (dom-tag dom)))
+    (let* ((attr (dom-attributes dom))
+          (times (length attr))
+          (column (1+ (current-column))))
+      (if (null attr)
+         (insert "nil")
+       (insert "(")
+       (dolist (elem attr)
+         (insert (format "(%S . %S)" (car elem) (cdr elem)))
+         (if (zerop (cl-decf times))
+             (insert ")")
+           (insert "\n" (make-string column ? ))))))
+    (let* ((children (if remove-empty
+                        (cl-remove-if
+                         (lambda (child)
+                           (and (stringp child)
+                                (string-match "\\`[\n\r\t  ]*\\'" child)))
+                         (dom-children dom))
+                      (dom-children dom)))
+          (times (length children)))
+      (if (null children)
+         (insert ")")
+       (insert "\n" (make-string (1+ column) ? ))
+       (dolist (child children)
+         (if (stringp child)
+             (if (or (not remove-empty)
+                     (not (string-match "\\`[\n\r\t  ]*\\'" child)))
+                 (insert (format "%S" child)))
+           (dom-pp child remove-empty))
+         (if (zerop (cl-decf times))
+             (insert ")")
+           (insert "\n" (make-string (1+ column) ? ))))))))
+
+(provide 'dom)
+
+;;; dom.el ends here
diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el
index 42ae053..60bfdb7 100644
--- a/lisp/dos-fns.el
+++ b/lisp/dos-fns.el
@@ -1,6 +1,6 @@
 ;;; dos-fns.el --- MS-Dos specific functions
 
-;; Copyright (C) 1991, 1993, 1995-1996, 2001-2014 Free Software
+;; Copyright (C) 1991, 1993, 1995-1996, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: Morten Welinder <address@hidden>
diff --git a/lisp/dos-vars.el b/lisp/dos-vars.el
index 99b5517..b2bdf2d 100644
--- a/lisp/dos-vars.el
+++ b/lisp/dos-vars.el
@@ -1,6 +1,6 @@
 ;;; dos-vars.el --- MS-Dos specific user options
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
diff --git a/lisp/dos-w32.el b/lisp/dos-w32.el
index c420593..2ce37c9 100644
--- a/lisp/dos-w32.el
+++ b/lisp/dos-w32.el
@@ -1,6 +1,6 @@
 ;; dos-w32.el --- Functions shared among MS-DOS and W32 (NT/95) platforms
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: Geoff Voelker <address@hidden>
 ;; Keywords: internal
diff --git a/lisp/double.el b/lisp/double.el
index 65b789f..b06f59c 100644
--- a/lisp/double.el
+++ b/lisp/double.el
@@ -1,6 +1,6 @@
 ;;; double.el --- support for keyboard remapping with double clicking
 
-;; Copyright (C) 1994, 1997-1998, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1994, 1997-1998, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Per Abrahamsen <address@hidden>
diff --git a/lisp/dynamic-setting.el b/lisp/dynamic-setting.el
index 15929db..40ef847 100644
--- a/lisp/dynamic-setting.el
+++ b/lisp/dynamic-setting.el
@@ -1,6 +1,6 @@
 ;;; dynamic-setting.el --- Support dynamic changes
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Jan Djärv <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/ebuff-menu.el b/lisp/ebuff-menu.el
index 6debd9f..337ea10 100644
--- a/lisp/ebuff-menu.el
+++ b/lisp/ebuff-menu.el
@@ -1,6 +1,6 @@
 ;;; ebuff-menu.el --- electric-buffer-list mode
 
-;; Copyright (C) 1985-1986, 1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Richard Mlynarik <address@hidden>
diff --git a/lisp/echistory.el b/lisp/echistory.el
index 906d8a9..e4146dc 100644
--- a/lisp/echistory.el
+++ b/lisp/echistory.el
@@ -1,6 +1,6 @@
 ;;; echistory.el --- Electric Command History Mode
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: address@hidden
diff --git a/lisp/edmacro.el b/lisp/edmacro.el
index bb14015..84dfd4f 100644
--- a/lisp/edmacro.el
+++ b/lisp/edmacro.el
@@ -1,6 +1,6 @@
 ;;; edmacro.el --- keyboard macro editor
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <address@hidden>
 ;; Maintainer: Dave Gillespie <address@hidden>
diff --git a/lisp/ehelp.el b/lisp/ehelp.el
index 46db552..66e4f5c 100644
--- a/lisp/ehelp.el
+++ b/lisp/ehelp.el
@@ -1,6 +1,6 @@
 ;;; ehelp.el --- bindings for electric-help mode -*- lexical-binding: t -*-
 
-;; Copyright (C) 1986, 1995, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1995, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Richard Mlynarik
 ;; (according to ack.texi and authors.el)
diff --git a/lisp/elec-pair.el b/lisp/elec-pair.el
index 42b8a91..2cede62 100644
--- a/lisp/elec-pair.el
+++ b/lisp/elec-pair.el
@@ -1,6 +1,6 @@
 ;;; elec-pair.el --- Automatic parenthesis pairing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: João Távora <address@hidden>
 
diff --git a/lisp/electric.el b/lisp/electric.el
index 4bf5963..dd7767f 100644
--- a/lisp/electric.el
+++ b/lisp/electric.el
@@ -1,6 +1,6 @@
 ;;; electric.el --- window maker and Command loop for `electric' modes
 
-;; Copyright (C) 1985-1986, 1995, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1995, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: K. Shane Hartman
@@ -164,7 +164,10 @@
       ;; Don't shrink the window, but expand it if necessary.
       (goto-char (point-min))
       (unless (= (point-max) (window-end win t))
-       (fit-window-to-buffer win max-height))
+       ;; This call is executed even if the window existed before, was
+       ;; reused, ... contradicting a claim in the comment before this
+       ;; function.
+       (fit-window-to-buffer win max-height nil nil nil t))
       win)))
 
 ;;; Electric keys.
diff --git a/lisp/elide-head.el b/lisp/elide-head.el
index 8badff6..4076f00 100644
--- a/lisp/elide-head.el
+++ b/lisp/elide-head.el
@@ -1,6 +1,6 @@
 ;;; elide-head.el --- hide headers in files
 
-;; Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: outlines tools
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index 62d5072..212ae90 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -1,6 +1,6 @@
 ;;; advice.el --- An overloading mechanism for Emacs Lisp functions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-1994, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Hans Chalupsky <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el
index 38956df..073d923 100644
--- a/lisp/emacs-lisp/autoload.el
+++ b/lisp/emacs-lisp/autoload.el
@@ -1,6 +1,6 @@
 ;; autoload.el --- maintain autoloads in loaddefs.el  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1991-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Roland McGrath <address@hidden>
 ;; Keywords: maint
@@ -120,7 +120,8 @@ expression, in which case we want to handle forms 
differently."
            ;; Look for an interactive spec.
            (interactive (pcase body
                           ((or `((interactive . ,_) . ,_)
-                               `(,_ (interactive . ,_) . ,_)) t))))
+                               `(,_ (interactive . ,_) . ,_))
+                           t))))
         ;; Add the usage form at the end where describe-function-1
         ;; can recover it.
         (when (listp args) (setq doc (help-add-fundoc-usage doc args)))
@@ -140,11 +141,9 @@ expression, in which case we want to handle forms 
differently."
      ;; For complex cases, try again on the macro-expansion.
      ((and (memq car '(easy-mmode-define-global-mode define-global-minor-mode
                        define-globalized-minor-mode defun defmacro
-                       ;; FIXME: we'd want `defmacro*' here as well, so as
-                       ;; to handle its `declare', but when autoload is run
-                       ;; CL is not loaded so macroexpand doesn't know how
-                       ;; to expand it!
-                      easy-mmode-define-minor-mode define-minor-mode))
+                      easy-mmode-define-minor-mode define-minor-mode
+                       define-inline cl-defun cl-defmacro))
+           (macrop car)
           (setq expand (let ((load-file-name file)) (macroexpand form)))
           (memq (car expand) '(progn prog1 defalias)))
       (make-autoload expand file 'expansion)) ;Recurse on the expansion.
@@ -540,7 +539,7 @@ Return non-nil if and only if FILE adds no autoloads to 
OUTFILE
                                (autoload-find-file file))
         ;; Obey the no-update-autoloads file local variable.
         (unless no-update-autoloads
-          (message "Generating autoloads for %s..." file)
+         (or noninteractive (message "Generating autoloads for %s..." file))
          (setq load-name
                (if (stringp generated-autoload-load-name)
                    generated-autoload-load-name
@@ -624,7 +623,8 @@ Return non-nil if and only if FILE adds no autoloads to 
OUTFILE
                        (nth 5 (file-attributes relfile))))
                     (insert ";;; Generated autoloads from " relfile "\n")))
                 (insert generate-autoload-section-trailer))))
-          (message "Generating autoloads for %s...done" file))
+         (or noninteractive
+             (message "Generating autoloads for %s...done" file)))
         (or visited
             ;; We created this buffer, so we should kill it.
             (kill-buffer (current-buffer))))
diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el
index 813576e..e3d83eb 100644
--- a/lisp/emacs-lisp/avl-tree.el
+++ b/lisp/emacs-lisp/avl-tree.el
@@ -1,6 +1,6 @@
-;;; avl-tree.el --- balanced binary trees, AVL-trees
+;;; avl-tree.el --- balanced binary trees, AVL-trees  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1995, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Per Cederqvist <address@hidden>
 ;;         Inge Wallin <address@hidden>
@@ -27,23 +27,23 @@
 
 ;;; Commentary:
 
-;; An AVL tree is a self-balancing binary tree. As such, inserting,
+;; An AVL tree is a self-balancing binary tree.  As such, inserting,
 ;; deleting, and retrieving data from an AVL tree containing n elements
-;; is O(log n). It is somewhat more rigidly balanced than other
+;; is O(log n).  It is somewhat more rigidly balanced than other
 ;; self-balancing binary trees (such as red-black trees and AA trees),
 ;; making insertion slightly slower, deletion somewhat slower, and
 ;; retrieval somewhat faster (the asymptotic scaling is of course the
-;; same for all types). Thus it may be a good choice when the tree will
+;; same for all types).  Thus it may be a good choice when the tree will
 ;; be relatively static, i.e. data will be retrieved more often than
 ;; they are modified.
 ;;
 ;; Internally, a tree consists of two elements, the root node and the
-;; comparison function. The actual tree has a dummy node as its root
+;; comparison function.  The actual tree has a dummy node as its root
 ;; with the real root in the left pointer, which allows the root node to
 ;; be treated on a par with all other nodes.
 ;;
 ;; Each node of the tree consists of one data element, one left
-;; sub-tree, one right sub-tree, and a balance count. The latter is the
+;; sub-tree, one right sub-tree, and a balance count.  The latter is the
 ;; difference in depth of the left and right sub-trees.
 ;;
 ;; The functions with names of the form "avl-tree--" are intended for
@@ -51,7 +51,7 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
+(eval-when-compile (require 'cl-lib))
 
 
 
@@ -62,7 +62,7 @@
 ;; ----------------------------------------------------------------
 ;; Functions and macros handling an AVL tree.
 
-(defstruct (avl-tree-
+(cl-defstruct (avl-tree-
             ;; A tagged list is the pre-defstruct representation.
             ;; (:type list)
             :named
@@ -77,15 +77,10 @@
   ;; Return the root node for an AVL tree.  INTERNAL USE ONLY.
   `(avl-tree--node-left (avl-tree--dummyroot ,tree)))
 
-(defsetf avl-tree--root (tree) (node)
-  `(setf (avl-tree--node-left (avl-tree--dummyroot ,tree)) ,node))
-
-
-
 ;; ----------------------------------------------------------------
 ;; Functions and macros handling an AVL tree node.
 
-(defstruct (avl-tree--node
+(cl-defstruct (avl-tree--node
             ;; We force a representation without tag so it matches the
             ;; pre-defstruct representation. Also we use the underlying
             ;; representation in the implementation of
@@ -97,7 +92,7 @@
   left right data balance)
 
 
-(defalias 'avl-tree--node-branch 'aref
+(defalias 'avl-tree--node-branch #'aref
   ;; This implementation is efficient but breaks the defstruct
   ;; abstraction.  An alternative could be (funcall (aref [avl-tree-left
   ;; avl-tree-right avl-tree-data] branch) node)
@@ -109,7 +104,7 @@ NODE is the node, and BRANCH is the branch.
 ;; The funcall/aref trick wouldn't work for the setf method, unless we
 ;; tried to access the underlying setter function, but this wouldn't be
 ;; portable either.
-(defsetf avl-tree--node-branch aset)
+(gv-define-simple-setter avl-tree--node-branch aset)
 
 
 
@@ -297,7 +292,8 @@ Return t if the height of the tree has grown."
                (if (< (* sgn b2) 0) sgn 0)
                 (avl-tree--node-branch node branch) p2))
       (setf (avl-tree--node-balance
-             (avl-tree--node-branch node branch)) 0)
+             (avl-tree--node-branch node branch))
+            0)
       nil))))
 
 (defun avl-tree--do-enter (cmpfun root branch data &optional updatefun)
@@ -346,7 +342,7 @@ inserted data."
   (if (null node) 0
     (let ((dl (avl-tree--check-node (avl-tree--node-left node)))
          (dr (avl-tree--check-node (avl-tree--node-right node))))
-      (assert (= (- dr dl) (avl-tree--node-balance node)))
+      (cl-assert (= (- dr dl) (avl-tree--node-balance node)))
       (1+ (max dl dr)))))
 
 ;; ----------------------------------------------------------------
@@ -391,7 +387,7 @@ itself."
      (avl-tree--node-data root)
      (avl-tree--node-balance root))))
 
-(defstruct (avl-tree--stack
+(cl-defstruct (avl-tree--stack
            (:constructor nil)
            (:constructor avl-tree--stack-create
                          (tree &optional reverse
@@ -403,7 +399,7 @@ itself."
            (:copier nil))
   reverse store)
 
-(defalias 'avl-tree-stack-p 'avl-tree--stack-p
+(defalias 'avl-tree-stack-p #'avl-tree--stack-p
   "Return t if argument is an avl-tree-stack, nil otherwise.")
 
 (defun avl-tree--stack-repopulate (stack)
@@ -420,12 +416,12 @@ itself."
 ;;; The public functions which operate on AVL trees.
 
 ;; define public alias for constructors so that we can set docstring
-(defalias 'avl-tree-create 'avl-tree--create
+(defalias 'avl-tree-create #'avl-tree--create
   "Create an empty AVL tree.
 COMPARE-FUNCTION is a function which takes two arguments, A and B,
 and returns non-nil if A is less than B, and nil otherwise.")
 
-(defalias 'avl-tree-compare-function 'avl-tree--cmpfun
+(defalias 'avl-tree-compare-function #'avl-tree--cmpfun
   "Return the comparison function for the AVL tree TREE.
 
 \(fn TREE)")
@@ -505,7 +501,7 @@ previously specified in `avl-tree-create' when TREE was 
created."
     (not (eq (avl-tree-member tree data flag) flag))))
 
 
-(defun avl-tree-map (__map-function__ tree &optional reverse)
+(defun avl-tree-map (fun tree &optional reverse)
   "Modify all elements in the AVL tree TREE by applying FUNCTION.
 
 Each element is replaced by the return value of FUNCTION applied
@@ -516,12 +512,12 @@ descending order if REVERSE is non-nil."
   (avl-tree--mapc
    (lambda (node)
      (setf (avl-tree--node-data node)
-           (funcall __map-function__ (avl-tree--node-data node))))
+           (funcall fun (avl-tree--node-data node))))
    (avl-tree--root tree)
    (if reverse 1 0)))
 
 
-(defun avl-tree-mapc (__map-function__ tree &optional reverse)
+(defun avl-tree-mapc (fun tree &optional reverse)
   "Apply FUNCTION to all elements in AVL tree TREE,
 for side-effect only.
 
@@ -529,13 +525,13 @@ FUNCTION is applied to the elements in ascending order, or
 descending order if REVERSE is non-nil."
   (avl-tree--mapc
    (lambda (node)
-     (funcall __map-function__ (avl-tree--node-data node)))
+     (funcall fun (avl-tree--node-data node)))
    (avl-tree--root tree)
    (if reverse 1 0)))
 
 
 (defun avl-tree-mapf
-  (__map-function__ combinator tree &optional reverse)
+  (fun combinator tree &optional reverse)
   "Apply FUNCTION to all elements in AVL tree TREE,
 and combine the results using COMBINATOR.
 
@@ -546,7 +542,7 @@ order, or descending order if REVERSE is non-nil."
      (lambda (node)
        (setq avl-tree-mapf--accumulate
             (funcall combinator
-                     (funcall __map-function__
+                     (funcall fun
                               (avl-tree--node-data node))
                      avl-tree-mapf--accumulate)))
      (avl-tree--root tree)
@@ -554,7 +550,7 @@ order, or descending order if REVERSE is non-nil."
     (nreverse avl-tree-mapf--accumulate)))
 
 
-(defun avl-tree-mapcar (__map-function__ tree &optional reverse)
+(defun avl-tree-mapcar (fun tree &optional reverse)
   "Apply FUNCTION to all elements in AVL tree TREE,
 and make a list of the results.
 
@@ -568,7 +564,7 @@ then
   (avl-tree-mapf function 'cons tree (not reverse))
 
 is more efficient."
-  (nreverse (avl-tree-mapf __map-function__ 'cons tree reverse)))
+  (nreverse (avl-tree-mapf fun 'cons tree reverse)))
 
 
 (defun avl-tree-first (tree)
@@ -605,7 +601,7 @@ is more efficient."
   "Return the number of elements in TREE."
   (let ((treesize 0))
     (avl-tree--mapc
-     (lambda (data) (setq treesize (1+ treesize)))
+     (lambda (_) (setq treesize (1+ treesize)))
      (avl-tree--root tree) 0)
     treesize))
 
diff --git a/lisp/emacs-lisp/backquote.el b/lisp/emacs-lisp/backquote.el
index 5cecbcd..d5cdca2 100644
--- a/lisp/emacs-lisp/backquote.el
+++ b/lisp/emacs-lisp/backquote.el
@@ -1,6 +1,6 @@
 ;;; backquote.el --- implement the ` Lisp construct
 
-;; Copyright (C) 1990, 1992, 1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1990, 1992, 1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Rick Sladkey <address@hidden>
@@ -120,9 +120,7 @@ Vectors work just like lists.  Nested backquotes are 
permitted."
 This simply recurses through the body."
   (let ((exp (backquote-listify (list (cons 0 (list 'quote (car s))))
                                 (backquote-process (cdr s) level))))
-    (if (eq (car-safe exp) 'quote)
-        (cons 0 (list 'quote s))
-      (cons 1 exp))))
+    (cons (if (eq (car-safe exp) 'quote) 0 1) exp)))
 
 (defun backquote-process (s &optional level)
   "Process the body of a backquote.
diff --git a/lisp/emacs-lisp/benchmark.el b/lisp/emacs-lisp/benchmark.el
index f1fec81..dc1b44e 100644
--- a/lisp/emacs-lisp/benchmark.el
+++ b/lisp/emacs-lisp/benchmark.el
@@ -1,6 +1,6 @@
 ;;; benchmark.el --- support for benchmarking code
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love  <address@hidden>
 ;; Keywords: lisp, extensions
diff --git a/lisp/emacs-lisp/bindat.el b/lisp/emacs-lisp/bindat.el
index 92aa2f3..2aa636e 100644
--- a/lisp/emacs-lisp/bindat.el
+++ b/lisp/emacs-lisp/bindat.el
@@ -1,6 +1,6 @@
 ;;; bindat.el --- binary data structure packing and unpacking.
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <address@hidden>
 ;; Assignment name: struct.el
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index ee0a5a1..149c472 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -1,6 +1,6 @@
 ;;; byte-opt.el --- the optimization passes of the emacs-lisp byte compiler 
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1991, 1994, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <address@hidden>
 ;;     Hallvard Furuseth <address@hidden>
diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el
index 1f8b04e..caa7e3d 100644
--- a/lisp/emacs-lisp/byte-run.el
+++ b/lisp/emacs-lisp/byte-run.el
@@ -1,6 +1,6 @@
 ;;; byte-run.el --- byte-compiler support for inlining  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <address@hidden>
 ;;     Hallvard Furuseth <address@hidden>
@@ -34,10 +34,11 @@
   ;; We don't want people to just use `put' because we can't conveniently
   ;; hook into `put' to remap old properties to new ones.  But for now, there's
   ;; no such remapping, so we just call `put'.
-  #'(lambda (f prop value) (put f prop value))
-  "Set function F's property PROP to VALUE.
+  #'(lambda (function prop value)
+      "Set FUNCTION's property PROP to VALUE.
 The namespace for PROP is shared with symbols.
-So far, F can only be a symbol, not a lambda expression.")
+So far, FUNCTION can only be a symbol, not a lambda expression."
+      (put function prop value)))
 (function-put 'defmacro 'doc-string-elt 3)
 (function-put 'defmacro 'lisp-indent-function 2)
 
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index d6163f2..2bd8d07 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -1,6 +1,6 @@
 ;;; bytecomp.el --- compilation of Lisp code into byte code -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1992, 1994, 1998, 2000-2014 Free Software
+;; Copyright (C) 1985-1987, 1992, 1994, 1998, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Jamie Zawinski <address@hidden>
@@ -417,7 +417,7 @@ specify different fields to sort on."
 This list lives partly on the stack.")
 (defvar byte-compile-lexical-variables nil
   "List of variables that have been treated as lexical.
-Filled in `cconv-analyse-form' but initialized and consulted here.")
+Filled in `cconv-analyze-form' but initialized and consulted here.")
 (defvar byte-compile-const-variables nil
   "List of variables declared as constants during compilation of this file.")
 (defvar byte-compile-free-references)
@@ -433,7 +433,7 @@ Return the compile-time value of FORM."
   ;; 3.2.3.1, "Processing of Top Level Forms".  The semantics are very
   ;; subtle: see test/automated/bytecomp-tests.el for interesting
   ;; cases.
-  (setf form (macroexpand form byte-compile-macro-environment))
+  (setf form (macroexp-macroexpand form byte-compile-macro-environment))
   (if (eq (car-safe form) 'progn)
       (cons 'progn
             (mapcar (lambda (subform)
@@ -1858,13 +1858,13 @@ The value is non-nil if there were no errors, nil if 
errors."
                ;; recompiled).  Previously this was accomplished by
                ;; deleting target-file before writing it.
                (rename-file tempfile target-file t)
-               (message "Wrote %s" target-file))
+               (or noninteractive (message "Wrote %s" target-file)))
            ;; This is just to give a better error message than write-region
            (signal 'file-error
                    (list "Opening output file"
                          (if (file-exists-p target-file)
-                             "cannot overwrite file"
-                           "directory not writable or nonexistent")
+                             "Cannot overwrite file"
+                           "Directory not writable or nonexistent")
                          target-file)))
          (kill-buffer (current-buffer)))
        (if (and byte-compile-generate-call-tree
@@ -3820,6 +3820,10 @@ that suppresses all warnings during execution of BODY."
         ;; If things not being bound at all is ok, so must them being
         ;; obsolete.  Note that we add to the existing lists since Tramp
         ;; (ab)uses this feature.
+         ;; FIXME: If `foo' is obsoleted by `bar', the code below
+         ;; correctly arranges to silence the warnings after testing
+         ;; existence of `foo', but the warning should also be
+         ;; silenced after testing the existence of `bar'.
         (let ((byte-compile-not-obsolete-vars
                (append byte-compile-not-obsolete-vars bound-list))
               (byte-compile-not-obsolete-funcs
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index 98eef11..e9d33e6 100644
--- a/lisp/emacs-lisp/cconv.el
+++ b/lisp/emacs-lisp/cconv.el
@@ -1,6 +1,6 @@
 ;;; cconv.el --- Closure conversion for statically scoped Emacs lisp. -*- 
lexical-binding: t; coding: utf-8 -*-
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Igor Kuzmin <address@hidden>
 ;; Maintainer: address@hidden
@@ -30,13 +30,13 @@
 ;; All macros should be expanded beforehand.
 ;;
 ;; Here is a brief explanation how this code works.
-;; Firstly, we analyze the tree by calling cconv-analyse-form.
+;; Firstly, we analyze the tree by calling cconv-analyze-form.
 ;; This function finds all mutated variables, all functions that are suitable
 ;; for lambda lifting and all variables captured by closure. It passes the tree
 ;; once, returning a list of three lists.
 ;;
 ;; Then we calculate the intersection of the first and third lists returned by
-;; cconv-analyse form to find all mutated variables that are captured by
+;; cconv-analyze form to find all mutated variables that are captured by
 ;; closure.
 
 ;; Armed with this data, we call cconv-closure-convert-rec, that rewrites the
@@ -140,7 +140,7 @@ Returns a form where all lambdas don't have any free 
variables."
        (cconv-lambda-candidates '())
        (cconv-captured+mutated '()))
     ;; Analyze form - fill these variables with new information.
-    (cconv-analyse-form form '())
+    (cconv-analyze-form form '())
     (setq cconv-freevars-alist (nreverse cconv-freevars-alist))
     (prog1 (cconv-convert form nil nil) ; Env initially empty.
       (cl-assert (null cconv-freevars-alist)))))
@@ -152,7 +152,7 @@ Returns a form where all lambdas don't have any free 
variables."
        (cconv-lambda-candidates '())
        (cconv-captured+mutated '()))
     ;; Analyze form - fill these variables with new information.
-    (cconv-analyse-form form '())
+    (cconv-analyze-form form '())
     ;; But don't perform the closure conversion.
     form))
 
@@ -525,7 +525,7 @@ places where they originally did not directly appear."
   (defalias 'byte-compile-not-lexical-var-p 'boundp))
 (defvar byte-compile-lexical-variables)
 
-(defun cconv--analyse-use (vardata form varkind)
+(defun cconv--analyze-use (vardata form varkind)
   "Analyze the use of a variable.
 VARDATA should be (BINDER READ MUTATED CAPTURED CALLED).
 VARKIND is the name of the kind of variable.
@@ -557,7 +557,7 @@ FORM is the parent form that binds this var."
     (`(,(and binder `(,_ (function (lambda . ,_)))) nil nil nil t)
      (push (cons binder form) cconv-lambda-candidates))))
 
-(defun cconv--analyse-function (args body env parentform)
+(defun cconv--analyze-function (args body env parentform)
   (let* ((newvars nil)
          (freevars (list body))
          ;; We analyze the body within a new environment where all uses are
@@ -582,10 +582,10 @@ FORM is the parent form that binds this var."
             (push (cons (list arg) (cdr varstruct)) newvars)
             (push varstruct newenv)))))
     (dolist (form body)                   ;Analyze body forms.
-      (cconv-analyse-form form newenv))
+      (cconv-analyze-form form newenv))
     ;; Summarize resulting data about arguments.
     (dolist (vardata newvars)
-      (cconv--analyse-use vardata parentform "argument"))
+      (cconv--analyze-use vardata parentform "argument"))
     ;; Transfer uses collected in `envcopy' (via `newenv') back to `env';
     ;; and compute free variables.
     (while env
@@ -601,7 +601,7 @@ FORM is the parent form that binds this var."
           (setf (nth 3 (car env)) t))
         (setq env (cdr env) envcopy (cdr envcopy))))))
 
-(defun cconv-analyse-form (form env)
+(defun cconv-analyze-form (form env)
   "Find mutated variables and variables captured by closure.
 Analyze lambdas if they are suitable for lambda lifting.
 - FORM is a piece of Elisp code after macroexpansion.
@@ -628,7 +628,7 @@ and updates the data stored in ENV."
            (setq var (car binder))
            (setq value (cadr binder))
 
-           (cconv-analyse-form value (if (eq letsym 'let*) env orig-env)))
+           (cconv-analyze-form value (if (eq letsym 'let*) env orig-env)))
 
          (unless (byte-compile-not-lexical-var-p var)
            (cl-pushnew var byte-compile-lexical-variables)
@@ -637,13 +637,13 @@ and updates the data stored in ENV."
              (push varstruct env))))
 
        (dolist (form body-forms)          ; Analyze body forms.
-         (cconv-analyse-form form env))
+         (cconv-analyze-form form env))
 
        (dolist (vardata newvars)
-         (cconv--analyse-use vardata form "variable"))))
+         (cconv--analyze-use vardata form "variable"))))
 
     (`(function (lambda ,vrs . ,body-forms))
-     (cconv--analyse-function vrs body-forms env form))
+     (cconv--analyze-function vrs body-forms env form))
 
     (`(setq . ,forms)
      ;; If a local variable (member of env) is modified by setq then
@@ -651,7 +651,7 @@ and updates the data stored in ENV."
      (while forms
        (let ((v (assq (car forms) env))) ; v = non nil if visible
          (when v (setf (nth 2 v) t)))
-       (cconv-analyse-form (cadr forms) env)
+       (cconv-analyze-form (cadr forms) env)
        (setq forms (cddr forms))))
 
     (`((lambda . ,_) . ,_)             ; First element is lambda expression.
@@ -659,11 +659,11 @@ and updates the data stored in ENV."
       (format "Use of deprecated ((lambda %s ...) ...) form" (nth 1 (car 
form)))
       t :warning)
      (dolist (exp `((function ,(car form)) . ,(cdr form)))
-       (cconv-analyse-form exp env)))
+       (cconv-analyze-form exp env)))
 
     (`(cond . ,cond-forms)              ; cond special form
      (dolist (forms cond-forms)
-       (dolist (form forms) (cconv-analyse-form form env))))
+       (dolist (form forms) (cconv-analyze-form form env))))
 
     (`(quote . ,_) nil)                 ; quote form
     (`(function . ,_) nil)              ; same as quote
@@ -672,13 +672,13 @@ and updates the data stored in ENV."
           (guard byte-compile--use-old-handlers))
      ;; FIXME: The bytecode for condition-case forces us to wrap the
      ;; form and handlers in closures.
-     (cconv--analyse-function () (list protected-form) env form)
+     (cconv--analyze-function () (list protected-form) env form)
      (dolist (handler handlers)
-       (cconv--analyse-function (if var (list var)) (cdr handler)
+       (cconv--analyze-function (if var (list var)) (cdr handler)
                                 env form)))
 
     (`(condition-case ,var ,protected-form . ,handlers)
-     (cconv-analyse-form protected-form env)
+     (cconv-analyze-form protected-form env)
      (when (and var (symbolp var) (byte-compile-not-lexical-var-p var))
        (byte-compile-log-warning
         (format "Lexical variable shadows the dynamic variable %S" var)))
@@ -686,21 +686,21 @@ and updates the data stored in ENV."
        (if var (push varstruct env))
        (dolist (handler handlers)
          (dolist (form (cdr handler))
-           (cconv-analyse-form form env)))
-       (if var (cconv--analyse-use (cons (list var) (cdr varstruct))
+           (cconv-analyze-form form env)))
+       (if var (cconv--analyze-use (cons (list var) (cdr varstruct))
                                    form "variable"))))
 
     ;; FIXME: The bytecode for unwind-protect forces us to wrap the unwind.
     (`(,(or (and `catch (guard byte-compile--use-old-handlers))
             `unwind-protect)
        ,form . ,body)
-     (cconv-analyse-form form env)
-     (cconv--analyse-function () body env form))
+     (cconv-analyze-form form env)
+     (cconv--analyze-function () body env form))
 
     (`(defvar ,var) (push var byte-compile-bound-variables))
     (`(,(or `defconst `defvar) ,var ,value . ,_)
      (push var byte-compile-bound-variables)
-     (cconv-analyse-form value env))
+     (cconv-analyze-form value env))
 
     (`(,(or `funcall `apply) ,fun . ,args)
      ;; Here we ignore fun because funcall and apply are the only two
@@ -710,8 +710,8 @@ and updates the data stored in ENV."
      (let ((fdata (and (symbolp fun) (assq fun env))))
        (if fdata
            (setf (nth 4 fdata) t)
-         (cconv-analyse-form fun env)))
-     (dolist (form args) (cconv-analyse-form form env)))
+         (cconv-analyze-form fun env)))
+     (dolist (form args) (cconv-analyze-form form env)))
 
     (`(interactive . ,forms)
      ;; These appear within the function body but they don't have access
@@ -719,19 +719,20 @@ and updates the data stored in ENV."
      ;; We could extend this to allow interactive specs to refer to
      ;; variables in the function's enclosing environment, but it doesn't
      ;; seem worth the trouble.
-     (dolist (form forms) (cconv-analyse-form form nil)))
+     (dolist (form forms) (cconv-analyze-form form nil)))
 
     ;; `declare' should now be macro-expanded away (and if they're not, we're
     ;; in trouble because they *can* contain code nowadays).
     ;; (`(declare . ,_) nil)               ;The args don't contain code.
 
     (`(,_ . ,body-forms)    ; First element is a function or whatever.
-     (dolist (form body-forms) (cconv-analyse-form form env)))
+     (dolist (form body-forms) (cconv-analyze-form form env)))
 
     ((pred symbolp)
      (let ((dv (assq form env)))        ; dv = declared and visible
        (when dv
          (setf (nth 1 dv) t))))))
+(define-obsolete-function-alias 'cconv-analyse-form 'cconv-analyze-form "25.1")
 
 (provide 'cconv)
 ;;; cconv.el ends here
diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el
index f84060e..851b3bf 100644
--- a/lisp/emacs-lisp/chart.el
+++ b/lisp/emacs-lisp/chart.el
@@ -1,6 +1,6 @@
 ;;; chart.el --- Draw charts (bar charts, etc)  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996, 1998-1999, 2001, 2004-2005, 2007-2014 Free
+;; Copyright (C) 1996, 1998-1999, 2001, 2004-2005, 2007-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam  <address@hidden>
@@ -422,7 +422,7 @@ or is created with the bounds of SEQ."
        (if (stringp (car (oref seq data)))
            (let ((labels (oref seq data)))
              (if (not axis)
-                 (setq axis (make-instance chart-axis-names
+                 (setq axis (make-instance 'chart-axis-names
                                            :name (oref seq name)
                                            :items labels
                                            :chart c))
@@ -430,7 +430,7 @@ or is created with the bounds of SEQ."
          (let ((range (cons 0 1))
                (l (oref seq data)))
            (if (not axis)
-               (setq axis (make-instance chart-axis-range
+               (setq axis (make-instance 'chart-axis-range
                                          :name (oref seq name)
                                          :chart c)))
            (while l
@@ -577,19 +577,19 @@ labeled NUMTITLE.
 Optional arguments:
 Set the chart's max element display to MAX, and sort lists with
 SORT-PRED if desired."
-  (let ((nc (make-instance chart-bar
+  (let ((nc (make-instance 'chart-bar
                           :title title
                           :key-label "8-m"  ; This is a text key pic
                           :direction dir
                           ))
        (iv (eq dir 'vertical)))
     (chart-add-sequence nc
-                       (make-instance chart-sequece
+                       (make-instance 'chart-sequece
                                       :data namelst
                                       :name nametitle)
                        (if iv 'x-axis 'y-axis))
     (chart-add-sequence nc
-                       (make-instance chart-sequece
+                       (make-instance 'chart-sequece
                                       :data numlst
                                       :name numtitle)
                        (if iv 'y-axis 'x-axis))
diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el
index 19d61f0..13de61c 100644
--- a/lisp/emacs-lisp/check-declare.el
+++ b/lisp/emacs-lisp/check-declare.el
@@ -1,6 +1,6 @@
 ;;; check-declare.el --- Check declare-function statements
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Glenn Morris <address@hidden>
 ;; Keywords: lisp, tools, maint
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el
index 4618e61..47b6e5f 100644
--- a/lisp/emacs-lisp/checkdoc.el
+++ b/lisp/emacs-lisp/checkdoc.el
@@ -1,6 +1,6 @@
 ;;; checkdoc.el --- check documentation strings for style requirements
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Version: 0.6.2
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 9ccfc8b..afc2adb 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -1,6 +1,6 @@
 ;;; cl-extra.el --- Common Lisp features, part 2  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <address@hidden>
 ;; Keywords: extensions
@@ -38,6 +38,7 @@
 ;;; Code:
 
 (require 'cl-lib)
+(require 'seq)
 
 ;;; Type coercion.
 
@@ -521,28 +522,10 @@ If END is omitted, it defaults to the length of the 
sequence.
 If START or END is negative, it counts from the end."
   (declare (gv-setter
             (lambda (new)
-              `(progn (cl-replace ,seq ,new :start1 ,start :end1 ,end)
-                      ,new))))
-  (if (stringp seq) (substring seq start end)
-    (let (len)
-      (and end (< end 0) (setq end (+ end (setq len (length seq)))))
-      (if (< start 0) (setq start (+ start (or len (setq len (length seq))))))
-      (cond ((listp seq)
-            (if (> start 0) (setq seq (nthcdr start seq)))
-            (if end
-                (let ((res nil))
-                  (while (>= (setq end (1- end)) start)
-                    (push (pop seq) res))
-                  (nreverse res))
-              (copy-sequence seq)))
-           (t
-            (or end (setq end (or len (length seq))))
-            (let ((res (make-vector (max (- end start) 0) nil))
-                  (i 0))
-              (while (< start end)
-                (aset res i (aref seq start))
-                (setq i (1+ i) start (1+ start)))
-              res))))))
+              (macroexp-let2 nil new new
+               `(progn (cl-replace ,seq ,new :start1 ,start :end1 ,end)
+                       ,new)))))
+  (seq-subseq seq start end))
 
 ;;;###autoload
 (defun cl-concatenate (type &rest seqs)
@@ -606,15 +589,14 @@ PROPLIST is a list of the sort returned by `symbol-plist'.
   (declare (gv-expander
             (lambda (do)
               (gv-letplace (getter setter) plist
-                (macroexp-let2 nil k tag
-                  (macroexp-let2 nil d def
-                    (funcall do `(cl-getf ,getter ,k ,d)
-                             (lambda (v)
-                               (macroexp-let2 nil val v
-                                 `(progn
-                                    ,(funcall setter
-                                              `(cl--set-getf ,getter ,k ,val))
-                                    ,val))))))))))
+                (macroexp-let2* nil ((k tag) (d def))
+                  (funcall do `(cl-getf ,getter ,k ,d)
+                          (lambda (v)
+                            (macroexp-let2 nil val v
+                              `(progn
+                                 ,(funcall setter
+                                           `(cl--set-getf ,getter ,k ,val))
+                                 ,val)))))))))
   (setplist '--cl-getf-symbol-- plist)
   (or (get '--cl-getf-symbol-- tag)
       ;; Originally we called cl-get here,
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
new file mode 100644
index 0000000..72ec8ec
--- /dev/null
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -0,0 +1,849 @@
+;;; cl-generic.el --- CLOS-style generic functions for Elisp  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Stefan Monnier <address@hidden>
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This implements the most of CLOS's multiple-dispatch generic functions.
+;; To use it you need either (require 'cl-generic) or (require 'cl-lib).
+;; The main entry points are: `cl-defgeneric' and `cl-defmethod'.
+
+;; Missing elements:
+;; - We don't support make-method, call-method, define-method-combination.
+;;   CLOS's define-method-combination is IMO overly complicated, and it suffers
+;;   from a significant problem: the method-combination code returns a sexp
+;;   that needs to be `eval'uated or compiled.  IOW it requires run-time
+;;   code generation.  Given how rarely method-combinations are used,
+;;   I just provided a cl-generic-method-combination-function, which
+;;   people can use if they are really desperate for such functionality.
+;; - In defgeneric we don't support the options:
+;;   declare, :method-combination, :generic-function-class, :method-class,
+;;   :method.
+;; Added elements:
+;; - We support aliases to generic functions.
+;; - The kind of thing on which to dispatch can be extended.
+;;   There is support in this file for dispatch on:
+;;   - (eql <val>)
+;;   - plain old types
+;;   - type of CL structs
+;;   eieio-core adds dispatch on:
+;;   - class of eieio objects
+;;   - actual class argument, using the syntax (subclass <class>).
+;; - cl-generic-method-combination-function (i.s.o define-method-combination).
+;; - cl-generic-call-method (which replaces make-method and call-method).
+
+;; Efficiency considerations: overall, I've made an effort to make this fairly
+;; efficient for the expected case (e.g. no constant redefinition of methods).
+;; - Generic functions which do not dispatch on any argument are implemented
+;;   optimally (just as efficient as plain old functions).
+;; - Generic functions which only dispatch on one argument are fairly efficient
+;;   (not a lot of room for improvement, I think).
+;; - Multiple dispatch is implemented rather naively.  There's an extra `apply'
+;;   function call for every dispatch; we don't optimize each dispatch
+;;   based on the set of candidate methods remaining; we don't optimize the
+;;   order in which we performs the dispatches either;  If/when this
+;;   becomes a problem, we can try and optimize it.
+;; - call-next-method could be made more efficient, but isn't too terrible.
+
+;;; Code:
+
+;; Note: For generic functions that dispatch on several arguments (i.e. those
+;; which use the multiple-dispatch feature), we always use the same "tagcodes"
+;; and the same set of arguments on which to dispatch.  This works, but is
+;; often suboptimal since after one dispatch, the remaining dispatches can
+;; usually be simplified, or even completely skipped.
+
+;; TODO/FIXME:
+;; - WIBNI we could use something like
+;;   (add-function :before (cl-method-function (cl-find-method ...)) ...)
+
+(eval-when-compile (require 'cl-lib))
+(eval-when-compile (require 'pcase))
+
+(defvar cl-generic-tagcode-function
+  (lambda (type _name)
+    (if (eq type t) '(0 . 'cl--generic-type)
+      (error "Unknown specializer %S" type)))
+  "Function to get the Elisp code to extract the tag on which we dispatch.
+Takes a \"parameter-specializer-name\" and a variable name, and returns
+a pair (PRIORITY . CODE) where CODE is an Elisp expression that should be
+used to extract the \"tag\" (from the object held in the named variable)
+that should uniquely determine if we have a match
+\(i.e. the \"tag\" is the value that will be used to dispatch to the proper
+method(s)).
+Such \"tagcodes\" will be or'd together.
+PRIORITY is an integer from 0 to 100 which is used to sort the tagcodes
+in the `or'.  The higher the priority, the more specific the tag should be.
+More specifically, if PRIORITY is N and we have two objects X and Y
+whose tag (according to TAGCODE) is `eql', then it should be the case
+that for all other (PRIORITY . TAGCODE) where PRIORITY ≤ N, then
+\(eval TAGCODE) for X is `eql' to (eval TAGCODE) for Y.")
+
+(defvar cl-generic-tag-types-function
+  (lambda (tag) (if (eq tag 'cl--generic-type) '(t)))
+  "Function to get the list of types that a given \"tag\" matches.
+They should be sorted from most specific to least specific.")
+
+(cl-defstruct (cl--generic-method
+               (:constructor nil)
+               (:constructor cl--generic-method-make
+                (specializers qualifiers uses-cnm function))
+               (:predicate nil))
+  (specializers nil :read-only t :type list)
+  (qualifiers   nil :read-only t :type (list-of atom))
+  ;; USES-CNM is a boolean indicating if FUNCTION expects an extra argument
+  ;; holding the next-method.
+  (uses-cnm     nil :read-only t :type boolean)
+  (function     nil :read-only t :type function))
+
+(cl-defstruct (cl--generic
+               (:constructor nil)
+               (:constructor cl--generic-make
+                (name &optional dispatches method-table))
+               (:predicate nil))
+  (name nil :type symbol :read-only t)  ;Pointer back to the symbol.
+  ;; `dispatches' holds a list of (ARGNUM . TAGCODES) where ARGNUM is the index
+  ;; of the corresponding argument and TAGCODES is a list of (PRIORITY . EXP)
+  ;; where the EXPs are expressions (to be `or'd together) to compute the tag
+  ;; on which to dispatch and PRIORITY is the priority of each expression to
+  ;; decide in which order to sort them.
+  ;; The most important dispatch is last in the list (and the least is first).
+  (dispatches nil :type (list-of (cons natnum (list-of tagcode))))
+  (method-table nil :type (list-of cl--generic-method)))
+
+(defmacro cl--generic (name)
+  `(get ,name 'cl--generic))
+
+(defun cl-generic-ensure-function (name)
+  (let (generic
+        (origname name))
+    (while (and (null (setq generic (cl--generic name)))
+                (fboundp name)
+                (symbolp (symbol-function name)))
+      (setq name (symbol-function name)))
+    (unless (or (not (fboundp name))
+                (autoloadp (symbol-function name))
+                (and (functionp name) generic))
+      (error "%s is already defined as something else than a generic function"
+             origname))
+    (if generic
+        (cl-assert (eq name (cl--generic-name generic)))
+      (setf (cl--generic name) (setq generic (cl--generic-make name)))
+      (defalias name (cl--generic-make-function generic)))
+    generic))
+
+(defun cl--generic-setf-rewrite (name)
+  (let* ((setter (intern (format "cl-generic-setter--%s" name)))
+         (exp `(unless (eq ',setter (get ',name 'cl-generic-setter))
+                 ;; (when (get ',name 'gv-expander)
+                 ;;   (error "gv-expander conflicts with (setf %S)" ',name))
+                 (setf (get ',name 'cl-generic-setter) ',setter)
+                 (gv-define-setter ,name (val &rest args)
+                   (cons ',setter (cons val args))))))
+    ;; Make sure `setf' can be used right away, e.g. in the body of the method.
+    (eval exp t)
+    (cons setter exp)))
+
+;;;###autoload
+(defmacro cl-defgeneric (name args &rest options-and-methods)
+  "Create a generic function NAME.
+DOC-STRING is the base documentation for this class.  A generic
+function has no body, as its purpose is to decide which method body
+is appropriate to use.  Specific methods are defined with `cl-defmethod'.
+With this implementation the ARGS are currently ignored.
+OPTIONS-AND-METHODS currently understands:
+- (:documentation DOCSTRING)
+- (declare DECLARATIONS)"
+  (declare (indent 2) (doc-string 3))
+  (let* ((docprop (assq :documentation options-and-methods))
+         (doc (cond ((stringp (car-safe options-and-methods))
+                     (pop options-and-methods))
+                    (docprop
+                     (prog1
+                         (cadr docprop)
+                       (setq options-and-methods
+                             (delq docprop options-and-methods))))))
+         (declarations (assq 'declare options-and-methods)))
+    (when declarations
+      (setq options-and-methods
+            (delq declarations options-and-methods)))
+    `(progn
+       ,(when (eq 'setf (car-safe name))
+          (pcase-let ((`(,setter . ,code) (cl--generic-setf-rewrite
+                                           (cadr name))))
+            (setq name setter)
+            code))
+       ,@(mapcar (lambda (declaration)
+                   (let ((f (cdr (assq (car declaration)
+                                       defun-declarations-alist))))
+                     (cond
+                      (f (apply (car f) name args (cdr declaration)))
+                      (t (message "Warning: Unknown defun property `%S' in %S"
+                                  (car declaration) name)
+                         nil))))
+                 (cdr declarations))
+       (defalias ',name
+         (cl-generic-define ',name ',args ',options-and-methods)
+         ,(help-add-fundoc-usage doc args)))))
+
+(defun cl--generic-mandatory-args (args)
+  (let ((res ()))
+    (while (not (memq (car args) '(nil &rest &optional &key)))
+      (push (pop args) res))
+    (nreverse res)))
+
+;;;###autoload
+(defun cl-generic-define (name args options-and-methods)
+  (let ((generic (cl-generic-ensure-function name))
+        (mandatory (cl--generic-mandatory-args args))
+        (apo (assq :argument-precedence-order options-and-methods)))
+    (setf (cl--generic-dispatches generic) nil)
+    (when apo
+      (dolist (arg (cdr apo))
+        (let ((pos (memq arg mandatory)))
+          (unless pos (error "%S is not a mandatory argument" arg))
+          (push (list (- (length mandatory) (length pos)))
+                (cl--generic-dispatches generic)))))
+    (setf (cl--generic-method-table generic) nil)
+    (cl--generic-make-function generic)))
+
+(defmacro cl-generic-current-method-specializers ()
+  "List of (VAR . TYPE) where TYPE is var's specializer.
+This macro can only be used within the lexical scope of a cl-generic method."
+  (error "cl-generic-current-method-specializers used outside of a method"))
+
+(eval-and-compile         ;Needed while compiling the cl-defmethod calls below!
+  (defun cl--generic-fgrep (vars sexp)    ;Copied from pcase.el.
+    "Check which of the symbols VARS appear in SEXP."
+    (let ((res '()))
+      (while (consp sexp)
+        (dolist (var (cl--generic-fgrep vars (pop sexp)))
+          (unless (memq var res) (push var res))))
+      (and (memq sexp vars) (not (memq sexp res)) (push sexp res))
+      res))
+
+  (defun cl--generic-lambda (args body)
+    "Make the lambda expression for a method with ARGS and BODY."
+    (let ((plain-args ())
+          (specializers nil)
+          (doc-string (if (and (stringp (car-safe body)) (cdr body))
+                          (pop body)))
+          (mandatory t))
+      (dolist (arg args)
+        (push (pcase arg
+                ((or '&optional '&rest '&key) (setq mandatory nil) arg)
+                ((and `(,name . ,type) (guard mandatory))
+                 (push (cons name (car type)) specializers)
+                 name)
+                (_ arg))
+              plain-args))
+      (setq plain-args (nreverse plain-args))
+      (let ((fun `(cl-function (lambda ,plain-args
+                                 ,@(if doc-string (list doc-string))
+                                 ,@body)))
+            (macroenv (cons `(cl-generic-current-method-specializers
+                              . ,(lambda () specializers))
+                            macroexpand-all-environment)))
+        (require 'cl-lib)        ;Needed to expand `cl-flet' and `cl-function'.
+        ;; First macroexpand away the cl-function stuff (e.g. &key and
+        ;; destructuring args, `declare' and whatnot).
+        (pcase (macroexpand fun macroenv)
+          (`#'(lambda ,args . ,body)
+           (let* ((doc-string (and doc-string (stringp (car body)) (cdr body)
+                                   (pop body)))
+                  (cnm (make-symbol "cl--cnm"))
+                  (nmp (make-symbol "cl--nmp"))
+                  (nbody (macroexpand-all
+                          `(cl-flet ((cl-call-next-method ,cnm)
+                                     (cl-next-method-p ,nmp))
+                             ,@body)
+                          macroenv))
+                  ;; FIXME: Rather than `grep' after the fact, the
+                  ;; macroexpansion should directly set some flag when cnm
+                  ;; is used.
+                  ;; FIXME: Also, optimize the case where call-next-method is
+                  ;; only called with explicit arguments.
+                  (uses-cnm (cl--generic-fgrep (list cnm nmp) nbody)))
+             (cons (not (not uses-cnm))
+                   `#'(lambda (,@(if uses-cnm (list cnm)) ,@args)
+                        ,@(if doc-string (list doc-string))
+                        ,(if (not (memq nmp uses-cnm))
+                             nbody
+                           `(let ((,nmp (lambda ()
+                                          (cl--generic-isnot-nnm-p ,cnm))))
+                              ,nbody))))))
+          (f (error "Unexpected macroexpansion result: %S" f)))))))
+
+
+;;;###autoload
+(defmacro cl-defmethod (name args &rest body)
+  "Define a new method for generic function NAME.
+I.e. it defines the implementation of NAME to use for invocations where the
+value of the dispatch argument matches the specified TYPE.
+The dispatch argument has to be one of the mandatory arguments, and
+all methods of NAME have to use the same argument for dispatch.
+The dispatch argument and TYPE are specified in ARGS where the corresponding
+formal argument appears as (VAR TYPE) rather than just VAR.
+
+The optional second argument QUALIFIER is a specifier that
+modifies how the method is combined with other methods, including:
+   :before  - Method will be called before the primary
+   :after   - Method will be called after the primary
+   :around  - Method will be called around everything else
+The absence of QUALIFIER means this is a \"primary\" method.
+
+Other than a type, TYPE can also be of the form `(eql VAL)' in
+which case this method will be invoked when the argument is `eql' to VAL.
+
+\(fn NAME [QUALIFIER] ARGS &rest [DOCSTRING] BODY)"
+  (declare (doc-string 3) (indent 2)
+           (debug
+            (&define                    ; this means we are defining something
+             [&or name ("setf" :name setf name)]
+             ;; ^^ This is the methods symbol
+             [ &optional keywordp ]     ; this is key :before etc
+             list                       ; arguments
+             [ &optional stringp ]      ; documentation string
+             def-body)))                ; part to be debugged
+  (let ((qualifiers nil)
+        (setfizer (if (eq 'setf (car-safe name))
+                      ;; Call it before we call cl--generic-lambda.
+                      (cl--generic-setf-rewrite (cadr name)))))
+    (while (not (listp args))
+      (push args qualifiers)
+      (setq args (pop body)))
+    (pcase-let* ((`(,uses-cnm . ,fun) (cl--generic-lambda args body)))
+      `(progn
+         ,(when setfizer
+            (setq name (car setfizer))
+            (cdr setfizer))
+         ,(and (get name 'byte-obsolete-info)
+               (or (not (fboundp 'byte-compile-warning-enabled-p))
+                   (byte-compile-warning-enabled-p 'obsolete))
+               (let* ((obsolete (get name 'byte-obsolete-info)))
+                 (macroexp--warn-and-return
+                  (macroexp--obsolete-warning name obsolete "generic function")
+                  nil)))
+         ;; You could argue that `defmethod' modifies rather than defines the
+         ;; function, so warnings like "not known to be defined" are fair game.
+         ;; But in practice, it's common to use `cl-defmethod'
+         ;; without a previous `cl-defgeneric'.
+         (declare-function ,name "")
+         (cl-generic-define-method ',name ',qualifiers ',args
+                                   ,uses-cnm ,fun)))))
+
+(defun cl--generic-member-method (specializers qualifiers methods)
+  (while
+      (and methods
+           (let ((m (car methods)))
+             (not (and (equal (cl--generic-method-specializers m) specializers)
+                       (equal (cl--generic-method-qualifiers m) qualifiers)))))
+    (setq methods (cdr methods))
+    methods))
+
+;;;###autoload
+(defun cl-generic-define-method (name qualifiers args uses-cnm function)
+  (let* ((generic (cl-generic-ensure-function name))
+         (mandatory (cl--generic-mandatory-args args))
+         (specializers
+          (mapcar (lambda (arg) (if (consp arg) (cadr arg) t)) mandatory))
+         (method (cl--generic-method-make
+                  specializers qualifiers uses-cnm function))
+         (mt (cl--generic-method-table generic))
+         (me (cl--generic-member-method specializers qualifiers mt))
+         (dispatches (cl--generic-dispatches generic))
+         (i 0))
+    (dolist (specializer specializers)
+      (let* ((tagcode (funcall cl-generic-tagcode-function specializer 'arg))
+             (x (assq i dispatches)))
+        (unless x
+          (setq x (list i (funcall cl-generic-tagcode-function t 'arg)))
+          (setf (cl--generic-dispatches generic)
+                (setq dispatches (cons x dispatches))))
+        (unless (member tagcode (cdr x))
+          (setf (cdr x)
+                (nreverse (sort (cons tagcode (cdr x))
+                                #'car-less-than-car))))
+        (setq i (1+ i))))
+    (if me (setcar me method)
+      (setf (cl--generic-method-table generic) (cons method mt)))
+    (cl-pushnew `(cl-defmethod . (,(cl--generic-name generic) . ,specializers))
+                current-load-list :test #'equal)
+    (let ((gfun (cl--generic-make-function generic))
+          ;; Prevent `defalias' from recording this as the definition site of
+          ;; the generic function.
+          current-load-list)
+      ;; For aliases, cl--generic-name gives us the actual name.
+      (defalias (cl--generic-name generic) gfun))))
+
+(defmacro cl--generic-with-memoization (place &rest code)
+  (declare (indent 1) (debug t))
+  (gv-letplace (getter setter) place
+    `(or ,getter
+         ,(macroexp-let2 nil val (macroexp-progn code)
+            `(progn
+               ,(funcall setter val)
+               ,val)))))
+
+(defvar cl--generic-dispatchers (make-hash-table :test #'equal))
+
+(defun cl--generic-get-dispatcher (tagcodes dispatch-arg)
+  (cl--generic-with-memoization
+      (gethash (cons dispatch-arg tagcodes) cl--generic-dispatchers)
+    (let ((lexical-binding t)
+          (tag-exp `(or ,@(mapcar #'cdr
+                                 ;; Minor optimization: since this tag-exp is
+                                 ;; only used to lookup the method-cache, it
+                                 ;; doesn't matter if the default value is some
+                                 ;; constant or nil.
+                                 (if (macroexp-const-p (car (last tagcodes)))
+                                     (butlast tagcodes)
+                                   tagcodes))))
+          (extraargs ()))
+      (dotimes (_ dispatch-arg)
+        (push (make-symbol "arg") extraargs))
+      (byte-compile
+       `(lambda (generic dispatches-left)
+          (let ((method-cache (make-hash-table :test #'eql)))
+            (lambda (,@extraargs arg &rest args)
+              (apply (cl--generic-with-memoization
+                         (gethash ,tag-exp method-cache)
+                       (cl--generic-cache-miss
+                        generic ',dispatch-arg dispatches-left
+                        (list ,@(mapcar #'cdr tagcodes))))
+                     ,@extraargs arg args))))))))
+
+(defun cl--generic-make-function (generic)
+  (let* ((dispatches (cl--generic-dispatches generic))
+         (dispatch
+          (progn
+            (while (and dispatches
+                        (member (cdar dispatches)
+                                '(nil ((0 . 'cl--generic-type)))))
+              (setq dispatches (cdr dispatches)))
+            (pop dispatches))))
+    (if (null dispatch)
+        (cl--generic-build-combined-method
+         (cl--generic-name generic)
+        (cl--generic-method-table generic))
+      (let ((dispatcher (cl--generic-get-dispatcher
+                         (cdr dispatch) (car dispatch))))
+        (funcall dispatcher generic dispatches)))))
+
+(defvar cl-generic-method-combination-function
+  #'cl--generic-standard-method-combination
+  "Function to build the effective method.
+Called with 2 arguments: NAME and METHOD-ALIST.
+It should return an effective method, i.e. a function that expects the same
+arguments as the methods, and calls those methods in some appropriate order.
+NAME is the name (a symbol) of the corresponding generic function.
+METHOD-ALIST is a list of elements (QUALIFIERS . METHODS) where
+QUALIFIERS is a list of qualifiers, and METHODS is a list of the selected
+methods for that qualifier list.
+The METHODS lists are sorted from most generic first to most specific last.
+The function can use `cl-generic-call-method' to create functions that call 
those
+methods.")
+
+(defvar cl--generic-combined-method-memoization
+  (make-hash-table :test #'equal :weakness 'value)
+  "Table storing previously built combined-methods.
+This is particularly useful when many different tags select the same set
+of methods, since this table then allows us to share a single combined-method
+for all those different tags in the method-cache.")
+
+(defun cl--generic-build-combined-method (generic-name methods)
+  (cl--generic-with-memoization
+      (gethash (cons generic-name methods)
+               cl--generic-combined-method-memoization)
+    (let ((mets-by-qual ()))
+      (dolist (method methods)
+        (let* ((qualifiers (cl--generic-method-qualifiers method))
+               (x (assoc qualifiers mets-by-qual)))
+          ;; FIXME: sadly, alist-get only uses `assq' and we need `assoc'.
+          ;;(push (cdr qm) (alist-get qualifiers mets-by-qual)))
+          (if x
+              (push method (cdr x))
+            (push (list qualifiers method) mets-by-qual))))
+      (funcall cl-generic-method-combination-function
+               generic-name mets-by-qual))))
+
+(defun cl--generic-no-next-method-function (generic method)
+  (lambda (&rest args)
+    (apply #'cl-no-next-method generic method args)))
+
+(defun cl-generic-call-method (generic-name method &optional fun)
+  "Return a function that calls METHOD.
+FUN is the function that should be called when METHOD calls
+`call-next-method'."
+  (if (not (cl--generic-method-uses-cnm method))
+      (cl--generic-method-function method)
+    (let ((met-fun (cl--generic-method-function method))
+          (next (or fun (cl--generic-no-next-method-function
+                         generic-name method))))
+      (lambda (&rest args)
+        (apply met-fun
+               ;; FIXME: This sucks: passing just `next' would
+               ;; be a lot more efficient than the lambda+apply
+               ;; quasi-η, but we need this to implement the
+               ;; "if call-next-method is called with no
+               ;; arguments, then use the previous arguments".
+               (lambda (&rest cnm-args)
+                 (apply next (or cnm-args args)))
+               args)))))
+
+(defun cl--generic-standard-method-combination (generic-name mets-by-qual)
+  (dolist (x mets-by-qual)
+    (unless (member (car x) '(() (:after) (:before) (:around)))
+      (error "Unsupported qualifiers in function %S: %S" generic-name (car 
x))))
+  (cond
+   ((null mets-by-qual)
+    (lambda (&rest args)
+      (apply #'cl-no-applicable-method generic-name args)))
+   ((null (alist-get nil mets-by-qual))
+    (lambda (&rest args)
+      (apply #'cl-no-primary-method generic-name args)))
+   (t
+    (let* ((fun nil)
+           (ab-call (lambda (m) (cl-generic-call-method generic-name m)))
+           (before
+            (mapcar ab-call (reverse (cdr (assoc '(:before) mets-by-qual)))))
+           (after (mapcar ab-call (cdr (assoc '(:after) mets-by-qual)))))
+      (dolist (method (cdr (assoc nil mets-by-qual)))
+        (setq fun (cl-generic-call-method generic-name method fun)))
+      (when (or after before)
+        (let ((next fun))
+          (setq fun (lambda (&rest args)
+                      (dolist (bf before)
+                        (apply bf args))
+                      (prog1
+                          (apply next args)
+                        (dolist (af after)
+                          (apply af args)))))))
+      (dolist (method (cdr (assoc '(:around) mets-by-qual)))
+        (setq fun (cl-generic-call-method generic-name method fun)))
+      fun))))
+
+(defconst cl--generic-nnm-sample (cl--generic-no-next-method-function t t))
+(defconst cl--generic-cnm-sample
+  (funcall (cl--generic-build-combined-method
+            nil (list (cl--generic-method-make () () t #'identity)))))
+
+(defun cl--generic-isnot-nnm-p (cnm)
+  "Return non-nil if CNM is the function that calls `cl-no-next-method'."
+  ;; ¡Big Gross Ugly Hack!
+  ;; `next-method-p' just sucks, we should let it die.  But EIEIO did support
+  ;; it, and some packages use it, so we need to support it.
+  (catch 'found
+    (cl-assert (function-equal cnm cl--generic-cnm-sample))
+    (if (byte-code-function-p cnm)
+        (let ((cnm-constants (aref cnm 2))
+              (sample-constants (aref cl--generic-cnm-sample 2)))
+          (dotimes (i (length sample-constants))
+            (when (function-equal (aref sample-constants i)
+                                  cl--generic-nnm-sample)
+              (throw 'found
+                     (not (function-equal (aref cnm-constants i)
+                                          cl--generic-nnm-sample))))))
+      (cl-assert (eq 'closure (car-safe cl--generic-cnm-sample)))
+      (let ((cnm-env (cadr cnm)))
+        (dolist (vb (cadr cl--generic-cnm-sample))
+          (when (function-equal (cdr vb) cl--generic-nnm-sample)
+            (throw 'found
+                   (not (function-equal (cdar cnm-env)
+                                        cl--generic-nnm-sample))))
+          (setq cnm-env (cdr cnm-env)))))
+    (error "Haven't found no-next-method-sample in cnm-sample")))
+
+(defun cl--generic-cache-miss (generic dispatch-arg dispatches-left tags)
+  (let ((types (apply #'append (mapcar cl-generic-tag-types-function tags)))
+        (methods '()))
+    (dolist (method (cl--generic-method-table generic))
+      (let* ((specializer (or (nth dispatch-arg
+                                   (cl--generic-method-specializers method))
+                              t))
+             (m (member specializer types)))
+        (when m
+          (push (cons (length m) method) methods))))
+    ;; Sort the methods, most specific first.
+    ;; It would be tempting to sort them once and for all in the method-table
+    ;; rather than here, but the order might depend on the actual argument
+    ;; (e.g. for multiple inheritance with defclass).
+    (setq methods (nreverse (mapcar #'cdr (sort methods #'car-less-than-car))))
+    (cl--generic-make-function (cl--generic-make (cl--generic-name generic)
+                                                 dispatches-left methods))))
+
+;;; Define some pre-defined generic functions, used internally.
+
+(define-error 'cl-no-method "No method for %S")
+(define-error 'cl-no-next-method "No next method for %S" 'cl-no-method)
+(define-error 'cl-no-primary-method "No primary method for %S" 'cl-no-method)
+(define-error 'cl-no-applicable-method "No applicable method for %S"
+  'cl-no-method)
+
+(cl-defgeneric cl-no-next-method (generic method &rest args)
+  "Function called when `cl-call-next-method' finds no next method.")
+(cl-defmethod cl-no-next-method (generic method &rest args)
+  (signal 'cl-no-next-method `(,generic ,method ,@args)))
+
+(cl-defgeneric cl-no-applicable-method (generic &rest args)
+  "Function called when a method call finds no applicable method.")
+(cl-defmethod cl-no-applicable-method (generic &rest args)
+  (signal 'cl-no-applicable-method `(,generic ,@args)))
+
+(cl-defgeneric cl-no-primary-method (generic &rest args)
+  "Function called when a method call finds no primary method.")
+(cl-defmethod cl-no-primary-method (generic &rest args)
+  (signal 'cl-no-primary-method `(,generic ,@args)))
+
+(defun cl-call-next-method (&rest _args)
+  "Function to call the next applicable method.
+Can only be used from within the lexical body of a primary or around method."
+  (error "cl-call-next-method only allowed inside primary and around methods"))
+
+(defun cl-next-method-p ()
+  "Return non-nil if there is a next method.
+Can only be used from within the lexical body of a primary or around method."
+  (declare (obsolete "make sure there's always a next method, or catch 
`cl-no-next-method' instead" "25.1"))
+  (error "cl-next-method-p only allowed inside primary and around methods"))
+
+;;;###autoload
+(defun cl-find-method (generic qualifiers specializers)
+  (car (cl--generic-member-method
+        specializers qualifiers
+        (cl--generic-method-table (cl--generic generic)))))
+
+(defalias 'cl-method-qualifiers 'cl--generic-method-qualifiers)
+
+;;; Add support for describe-function
+
+(defun cl--generic-search-method (met-name)
+  (let ((base-re (concat "(\\(?:cl-\\)?defmethod[ \t]+"
+                         (regexp-quote (format "%s" (car met-name)))
+                        "\\_>")))
+    (or
+     (re-search-forward
+      (concat base-re "[^&\"\n]*"
+              (mapconcat (lambda (specializer)
+                           (regexp-quote
+                            (format "%S" (if (consp specializer)
+                                             (nth 1 specializer) 
specializer))))
+                         (remq t (cdr met-name))
+                         "[ \t\n]*)[^&\"\n]*"))
+      nil t)
+     (re-search-forward base-re nil t))))
+
+
+(with-eval-after-load 'find-func
+  (defvar find-function-regexp-alist)
+  (add-to-list 'find-function-regexp-alist
+               `(cl-defmethod . ,#'cl--generic-search-method)))
+
+(defun cl--generic-method-info (method)
+  (let* ((specializers (cl--generic-method-specializers method))
+         (qualifiers   (cl--generic-method-qualifiers method))
+         (uses-cnm     (cl--generic-method-uses-cnm method))
+         (function     (cl--generic-method-function method))
+         (args (help-function-arglist function 'names))
+         (docstring (documentation function))
+         (qual-string
+          (if (null qualifiers) ""
+            (cl-assert (consp qualifiers))
+            (let ((s (prin1-to-string qualifiers)))
+              (concat (substring s 1 -1) " "))))
+         (doconly (if docstring
+                      (let ((split (help-split-fundoc docstring nil)))
+                        (if split (cdr split) docstring))))
+         (combined-args ()))
+    (if uses-cnm (setq args (cdr args)))
+    (dolist (specializer specializers)
+      (let ((arg (if (eq '&rest (car args))
+                     (intern (format "arg%d" (length combined-args)))
+                   (pop args))))
+        (push (if (eq specializer t) arg (list arg specializer))
+              combined-args)))
+    (setq combined-args (append (nreverse combined-args) args))
+    (list qual-string combined-args doconly)))
+
+(add-hook 'help-fns-describe-function-functions #'cl--generic-describe)
+(defun cl--generic-describe (function)
+  (let ((generic (if (symbolp function) (cl--generic function))))
+    (when generic
+      (require 'help-mode)              ;Needed for `help-function-def' button!
+      (save-excursion
+        (insert "\n\nThis is a generic function.\n\n")
+        (insert (propertize "Implementations:\n\n" 'face 'bold))
+        ;; Loop over fanciful generics
+        (dolist (method (cl--generic-method-table generic))
+          (let* ((info (cl--generic-method-info method)))
+            ;; FIXME: Add hyperlinks for the types as well.
+            (insert (format "%s%S" (nth 0 info) (nth 1 info)))
+            (let* ((met-name (cons function
+                                   (cl--generic-method-specializers method)))
+                   (file (find-lisp-object-file-name met-name 'cl-defmethod)))
+              (when file
+                (insert " in `")
+                (help-insert-xref-button (help-fns-short-filename file)
+                                         'help-function-def met-name file
+                                         'cl-defmethod)
+                (insert "'.\n")))
+            (insert "\n" (or (nth 2 info) "Undocumented") "\n\n")))))))
+
+;;; Support for (eql <val>) specializers.
+
+(defvar cl--generic-eql-used (make-hash-table :test #'eql))
+
+(add-function :before-until cl-generic-tagcode-function
+              #'cl--generic-eql-tagcode)
+(defun cl--generic-eql-tagcode (type name)
+  (when (eq (car-safe type) 'eql)
+    (puthash (cadr type) type cl--generic-eql-used)
+    `(100 . (gethash ,name cl--generic-eql-used))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'cl--generic-eql-tag-types)
+(defun cl--generic-eql-tag-types (tag)
+  (if (eq (car-safe tag) 'eql) (list tag)))
+
+;;; Support for cl-defstructs specializers.
+
+(add-function :before-until cl-generic-tagcode-function
+              #'cl--generic-struct-tagcode)
+
+(defun cl--generic-struct-tag (name)
+  `(and (vectorp ,name)
+        (> (length ,name) 0)
+        (let ((tag (aref ,name 0)))
+          (if (eq (symbol-function tag) :quick-object-witness-check)
+              tag))))
+
+(defun cl--generic-struct-tagcode (type name)
+  (and (symbolp type)
+       (get type 'cl-struct-type)
+       (or (eq 'vector (car (get type 'cl-struct-type)))
+           (error "Can't dispatch on cl-struct %S: type is %S"
+                  type (car (get type 'cl-struct-type))))
+       (or (equal '(cl-tag-slot) (car (get type 'cl-struct-slots)))
+           (error "Can't dispatch on cl-struct %S: no tag in slot 0"
+                  type))
+       ;; It's tempting to use (and (vectorp ,name) (aref ,name 0))
+       ;; but that would suffer from some problems:
+       ;; - the vector may have size 0.
+       ;; - when called on an actual vector (rather than an object), we'd
+       ;;   end up returning an arbitrary value, possibly colliding with
+       ;;   other tagcode's values.
+       ;; - it can also result in returning all kinds of irrelevant
+       ;;   values which would end up filling up the method-cache with
+       ;;   lots of irrelevant/redundant entries.
+       ;; FIXME: We could speed this up by introducing a dedicated
+       ;; vector type at the C level, so we could do something like
+       ;; (and (vector-objectp ,name) (aref ,name 0))
+       `(50 . ,(cl--generic-struct-tag name))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'cl--generic-struct-tag-types)
+(defun cl--generic-struct-tag-types (tag)
+  ;; FIXME: cl-defstruct doesn't make it easy for us.
+  (and (symbolp tag)
+       ;; A method call shouldn't itself mess with the match-data.
+       (string-match-p "\\`cl-struct-\\(.*\\)" (symbol-name tag))
+       (let ((types (list (intern (substring (symbol-name tag) 10)))))
+         (while (get (car types) 'cl-struct-include)
+           (push (get (car types) 'cl-struct-include) types))
+         (push 'cl-struct types)        ;The "parent type" of all cl-structs.
+         (nreverse types))))
+
+;;; Dispatch on "system types".
+
+(defconst cl--generic-typeof-types
+  ;; Hand made from the source code of `type-of'.
+  '((integer number) (symbol) (string array sequence) (cons list sequence)
+    ;; Markers aren't `numberp', yet they are accepted wherever integers are
+    ;; accepted, pretty much.
+    (marker) (overlay) (float number) (window-configuration)
+    (process) (window) (subr) (compiled-function) (buffer)
+    (char-table array sequence)
+    (bool-vector array sequence)
+    (frame) (hash-table) (font-spec) (font-entity) (font-object)
+    (vector array sequence)
+    ;; Plus, hand made:
+    (null symbol list sequence)
+    (list sequence)
+    (array sequence)
+    (sequence)
+    (number)))
+
+(add-function :before-until cl-generic-tagcode-function
+              #'cl--generic-typeof-tagcode)
+(defun cl--generic-typeof-tagcode (type name)
+  ;; FIXME: Add support for other types accepted by `cl-typep' such
+  ;; as `character', `atom', `face', `function', ...
+  (and (assq type cl--generic-typeof-types)
+       (progn
+         (if (memq type '(vector array sequence))
+             (message "`%S' also matches CL structs and EIEIO classes" type))
+         ;; FIXME: We could also change `type-of' to return `null' for nil.
+         `(10 . (if ,name (type-of ,name) 'null)))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'cl--generic-typeof-types)
+(defun cl--generic-typeof-types (tag)
+  (and (symbolp tag)
+       (assq tag cl--generic-typeof-types)))
+
+;;; Just for kicks: dispatch on major-mode
+;;
+;; Here's how you'd use it:
+;;   (cl-defmethod foo ((x (major-mode text-mode)) y z) ...)
+;; And then
+;;     (foo 'major-mode toto titi)
+;;
+;; FIXME: Better would be to do that via dispatch on an "implicit argument".
+;; E.g. (cl-defmethod foo (y z &context (major-mode text-mode)) ...)
+
+;; (defvar cl--generic-major-modes (make-hash-table :test #'eq))
+;;
+;; (add-function :before-until cl-generic-tagcode-function
+;;               #'cl--generic-major-mode-tagcode)
+;; (defun cl--generic-major-mode-tagcode (type name)
+;;   (if (eq 'major-mode (car-safe type))
+;;       `(50 . (if (eq ,name 'major-mode)
+;;                  (cl--generic-with-memoization
+;;                      (gethash major-mode cl--generic-major-modes)
+;;                    `(cl--generic-major-mode . ,major-mode))))))
+;;
+;; (add-function :before-until cl-generic-tag-types-function
+;;               #'cl--generic-major-mode-types)
+;; (defun cl--generic-major-mode-types (tag)
+;;   (when (eq (car-safe tag) 'cl--generic-major-mode)
+;;     (if (eq tag 'fundamental-mode) '(fundamental-mode t)
+;;       (let ((types `((major-mode ,(cdr tag)))))
+;;         (while (get (car types) 'derived-mode-parent)
+;;           (push (list 'major-mode (get (car types) 'derived-mode-parent))
+;;                 types))
+;;         (unless (eq 'fundamental-mode (car types))
+;;           (push '(major-mode fundamental-mode) types))
+;;         (nreverse types)))))
+
+;; Local variables:
+;; generated-autoload-file: "cl-loaddefs.el"
+;; End:
+
+(provide 'cl-generic)
+;;; cl-generic.el ends here
diff --git a/lisp/emacs-lisp/cl-indent.el b/lisp/emacs-lisp/cl-indent.el
index 2d8a1c4..1bcfb6d 100644
--- a/lisp/emacs-lisp/cl-indent.el
+++ b/lisp/emacs-lisp/cl-indent.el
@@ -1,6 +1,6 @@
 ;;; cl-indent.el --- enhanced lisp-indent mode
 
-;; Copyright (C) 1987, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Richard Mlynarik <address@hidden>
 ;; Created: July 1987
diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el
index c7d21c7..0f53418 100644
--- a/lisp/emacs-lisp/cl-lib.el
+++ b/lisp/emacs-lisp/cl-lib.el
@@ -1,6 +1,6 @@
 ;;; cl-lib.el --- Common Lisp extensions for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <address@hidden>
 ;; Version: 1.0
@@ -723,12 +723,11 @@ If ALIST is non-nil, the new pairs are prepended to it."
 (gv-define-expander substring
   (lambda (do place from &optional to)
     (gv-letplace (getter setter) place
-      (macroexp-let2 nil start from
-        (macroexp-let2 nil end to
-          (funcall do `(substring ,getter ,start ,end)
-                   (lambda (v)
-                     (funcall setter `(cl--set-substring
-                                       ,getter ,start ,end ,v)))))))))
+      (macroexp-let2* nil ((start from) (end to))
+        (funcall do `(substring ,getter ,start ,end)
+                 (lambda (v)
+                   (funcall setter `(cl--set-substring
+                                     ,getter ,start ,end ,v))))))))
 
 ;;; Miscellaneous.
 
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index c90cc04..eaec2c5 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -1,6 +1,6 @@
 ;;; cl-macs.el --- Common Lisp macros  -*- lexical-binding: t; coding: utf-8 
-*-
 
-;; Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <address@hidden>
 ;; Old-Version: 2.02
@@ -221,7 +221,7 @@ The name is made by appending a number to PREFIX, default 
\"G\"."
   '(&optional &rest &key &allow-other-keys &aux &whole &body &environment))
 
 (defvar cl--bind-block) (defvar cl--bind-defs) (defvar cl--bind-enquote)
-(defvar cl--bind-inits) (defvar cl--bind-lets) (defvar cl--bind-forms)
+(defvar cl--bind-lets) (defvar cl--bind-forms)
 
 (defun cl--transform-lambda (form bind-block)
   "Transform a function form FORM of name BIND-BLOCK.
@@ -229,9 +229,11 @@ BIND-BLOCK is the name of the symbol to which the function 
will be bound,
 and which will be used for the name of the `cl-block' surrounding the
 function's body.
 FORM is of the form (ARGS . BODY)."
+  ;; FIXME: (lambda (a &aux b) 1) expands to (lambda (a &rest --cl-rest--) ...)
+  ;; where the --cl-rest-- is clearly undesired.
   (let* ((args (car form)) (body (cdr form)) (orig-args args)
         (cl--bind-block bind-block) (cl--bind-defs nil) (cl--bind-enquote nil)
-        (cl--bind-inits nil) (cl--bind-lets nil) (cl--bind-forms nil)
+         (cl--bind-lets nil) (cl--bind-forms nil)
         (header nil) (simple-args nil))
     (while (or (stringp (car body))
               (memq (car-safe (car body)) '(interactive declare cl-declare)))
@@ -244,10 +246,10 @@ FORM is of the form (ARGS . BODY)."
     (if (setq cl--bind-enquote (memq '&cl-quote args))
        (setq args (delq '&cl-quote args)))
     (if (memq '&whole args) (error "&whole not currently implemented"))
-    (let* ((p (memq '&environment args)) (v (cadr p))
-           (env-exp 'macroexpand-all-environment))
+    (let* ((p (memq '&environment args))
+           (v (cadr p)))
       (if p (setq args (nconc (delq (car p) (delq v args))
-                              (list '&aux (list v env-exp))))))
+                              `(&aux (,v macroexpand-all-environment))))))
     (while (and args (symbolp (car args))
                (not (memq (car args) '(nil &rest &body &key &aux)))
                (not (and (eq (car args) '&optional)
@@ -261,8 +263,7 @@ FORM is of the form (ARGS . BODY)."
       (cl--do-arglist args nil (- (length simple-args)
                                   (if (memq '&optional simple-args) 1 0)))
       (setq cl--bind-lets (nreverse cl--bind-lets))
-      (cl-list* (and cl--bind-inits `(cl-eval-when (compile load eval)
-                                ,@(nreverse cl--bind-inits)))
+      (cl-list* nil
             (nconc (nreverse simple-args)
                    (list '&rest (car (pop cl--bind-lets))))
             (nconc (let ((hdr (nreverse header)))
@@ -390,6 +391,11 @@ its argument list allows full Common Lisp conventions."
    (t x)))
 
 (defun cl--make-usage-args (arglist)
+  (let ((aux (ignore-errors (cl-position '&aux arglist))))
+    (when aux
+      ;; `&aux' args aren't arguments, so let's just drop them from the
+      ;; usage info.
+      (setq arglist (cl-subseq arglist 0 aux))))
   (if (cdr-safe (last arglist))         ;Not a proper list.
       (let* ((last (last arglist))
              (tail (cdr last)))
@@ -426,7 +432,7 @@ its argument list allows full Common Lisp conventions."
                    ))))
               arglist))))
 
-(defun cl--do-arglist (args expr &optional num)   ; uses bind-*
+(defun cl--do-arglist (args expr &optional num)   ; uses cl--bind-*
   (if (nlistp args)
       (if (or (memq args cl--lambda-list-keywords) (not (symbolp args)))
          (error "Invalid argument name: %s" args)
@@ -441,9 +447,9 @@ its argument list allows full Common Lisp conventions."
          (keys nil)
          (laterarg nil) (exactarg nil) minarg)
       (or num (setq num 0))
-      (if (listp (cadr restarg))
-         (setq restarg (make-symbol "--cl-rest--"))
-       (setq restarg (cadr restarg)))
+      (setq restarg (if (listp (cadr restarg))
+                        (make-symbol "--cl-rest--")
+                      (cadr restarg)))
       (push (list restarg expr) cl--bind-lets)
       (if (eq (car args) '&whole)
          (push (list (cl--pop2 args) restarg) cl--bind-lets))
@@ -570,12 +576,11 @@ its argument list allows full Common Lisp conventions."
   "Bind the variables in ARGS to the result of EXPR and execute BODY."
   (declare (indent 2)
            (debug (&define cl-macro-list def-form cl-declarations def-body)))
-  (let* ((cl--bind-lets nil) (cl--bind-forms nil) (cl--bind-inits nil)
+  (let* ((cl--bind-lets nil) (cl--bind-forms nil)
         (cl--bind-defs nil) (cl--bind-block 'cl-none) (cl--bind-enquote nil))
     (cl--do-arglist (or args '(&aux)) expr)
-    (append '(progn) cl--bind-inits
-           (list `(let* ,(nreverse cl--bind-lets)
-                     ,@(nreverse cl--bind-forms) ,@body)))))
+    (macroexp-let* (nreverse cl--bind-lets)
+                   (macroexp-progn (append (nreverse cl--bind-forms) body)))))
 
 
 ;;; The `cl-eval-when' form.
@@ -625,14 +630,20 @@ The result of the body appears to the compiler as a 
quoted constant."
             (set `(setq ,temp ,form)))
        (if (and (fboundp 'byte-compile-file-form-defmumble)
                 (boundp 'this-kind) (boundp 'that-one))
-           (fset 'byte-compile-file-form
-                 `(lambda (form)
-                     (fset 'byte-compile-file-form
-                           ',(symbol-function 'byte-compile-file-form))
-                     (byte-compile-file-form ',set)
-                     (byte-compile-file-form form)))
-         (print set (symbol-value 'byte-compile--outbuffer)))
-       `(symbol-value ',temp))
+            ;; Else, we can't output right away, so we have to delay it to the
+            ;; next time we're at the top-level.
+            ;; FIXME: Use advice-add/remove.
+            (fset 'byte-compile-file-form
+                  (let ((old (symbol-function 'byte-compile-file-form)))
+                    (lambda (form)
+                      (fset 'byte-compile-file-form old)
+                      (byte-compile-file-form set)
+                      (byte-compile-file-form form))))
+          ;; If we're not in the middle of compiling something, we can
+          ;; output directly to byte-compile-outbuffer, to make sure
+          ;; temp is set before we use it.
+          (print set byte-compile--outbuffer))
+       temp)
     `',(eval form)))
 
 
@@ -649,30 +660,26 @@ allowed only in the final clause, and matches if no other 
keys match.
 Key values are compared by `eql'.
 \n(fn EXPR (KEYLIST BODY...)...)"
   (declare (indent 1) (debug (form &rest (sexp body))))
-  (let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--")))
-        (head-list nil)
-        (body (cons
-               'cond
-               (mapcar
-                (function
-                 (lambda (c)
-                   (cons (cond ((memq (car c) '(t otherwise)) t)
-                               ((eq (car c) 'cl--ecase-error-flag)
-                                `(error "cl-ecase failed: %s, %s"
-                                         ,temp ',(reverse head-list)))
-                               ((listp (car c))
-                                (setq head-list (append (car c) head-list))
-                                `(cl-member ,temp ',(car c)))
-                               (t
-                                (if (memq (car c) head-list)
-                                    (error "Duplicate key in case: %s"
-                                           (car c)))
-                                (push (car c) head-list)
-                                `(eql ,temp ',(car c))))
-                         (or (cdr c) '(nil)))))
-                clauses))))
-    (if (eq temp expr) body
-      `(let ((,temp ,expr)) ,body))))
+  (macroexp-let2 macroexp-copyable-p temp expr
+    (let* ((head-list nil))
+      `(cond
+        ,@(mapcar
+           (lambda (c)
+             (cons (cond ((memq (car c) '(t otherwise)) t)
+                         ((eq (car c) 'cl--ecase-error-flag)
+                          `(error "cl-ecase failed: %s, %s"
+                                  ,temp ',(reverse head-list)))
+                         ((listp (car c))
+                          (setq head-list (append (car c) head-list))
+                          `(cl-member ,temp ',(car c)))
+                         (t
+                          (if (memq (car c) head-list)
+                              (error "Duplicate key in case: %s"
+                                     (car c)))
+                          (push (car c) head-list)
+                          `(eql ,temp ',(car c))))
+                   (or (cdr c) '(nil))))
+           clauses)))))
 
 ;;;###autoload
 (defmacro cl-ecase (expr &rest clauses)
@@ -692,24 +699,22 @@ final clause, and matches if no other keys match.
 \n(fn EXPR (TYPE BODY...)...)"
   (declare (indent 1)
            (debug (form &rest ([&or cl-type-spec "otherwise"] body))))
-  (let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--")))
-        (type-list nil)
-        (body (cons
-               'cond
-               (mapcar
-                (function
-                 (lambda (c)
-                   (cons (cond ((eq (car c) 'otherwise) t)
-                               ((eq (car c) 'cl--ecase-error-flag)
-                                `(error "cl-etypecase failed: %s, %s"
-                                         ,temp ',(reverse type-list)))
-                               (t
-                                (push (car c) type-list)
-                                (cl--make-type-test temp (car c))))
-                         (or (cdr c) '(nil)))))
-                clauses))))
-    (if (eq temp expr) body
-      `(let ((,temp ,expr)) ,body))))
+  (macroexp-let2 macroexp-copyable-p temp expr
+    (let* ((type-list nil))
+      (cons
+       'cond
+       (mapcar
+        (function
+         (lambda (c)
+           (cons (cond ((eq (car c) 'otherwise) t)
+                       ((eq (car c) 'cl--ecase-error-flag)
+                        `(error "cl-etypecase failed: %s, %s"
+                                ,temp ',(reverse type-list)))
+                       (t
+                        (push (car c) type-list)
+                        `(cl-typep ,temp ',(car c))))
+                 (or (cdr c) '(nil)))))
+        clauses)))))
 
 ;;;###autoload
 (defmacro cl-etypecase (expr &rest clauses)
@@ -1433,16 +1438,14 @@ For more details, see Info node `(cl)Loop Facility'.
        (push `(progn (if ,what (cl-incf ,var)) t) cl--loop-body)))
 
      ((memq word '(minimize minimizing maximize maximizing))
-      (let* ((what (pop cl--loop-args))
-            (temp (if (cl--simple-expr-p what) what
-                     (make-symbol "--cl-var--")))
-            (var (cl--loop-handle-accum nil))
-            (func (intern (substring (symbol-name word) 0 3)))
-            (set `(setq ,var (if ,var (,func ,var ,temp) ,temp))))
-       (push `(progn ,(if (eq temp what) set
-                         `(let ((,temp ,what)) ,set))
-                      t)
-              cl--loop-body)))
+      (push `(progn ,(macroexp-let2 macroexp-copyable-p temp
+                                    (pop cl--loop-args)
+                       (let* ((var (cl--loop-handle-accum nil))
+                              (func (intern (substring (symbol-name word)
+                                                       0 3))))
+                         `(setq ,var (if ,var (,func ,var ,temp) ,temp))))
+                    t)
+            cl--loop-body))
 
      ((eq word 'with)
       (let ((bindings nil))
@@ -1801,6 +1804,8 @@ a `let' form, except that the list of symbols can be 
computed at run-time."
            (push (list (pop ,syms) (list 'quote (pop ,vals))) ,binds))
          (eval (list 'let ,binds (list 'funcall (list 'quote ,bodyfun))))))))
 
+(defconst cl--labels-magic (make-symbol "cl--labels-magic"))
+
 (defvar cl--labels-convert-cache nil)
 
 (defun cl--labels-convert (f)
@@ -1812,10 +1817,12 @@ a `let' form, except that the list of symbols can be 
computed at run-time."
    ;; being expanded even though we don't receive it.
    ((eq f (car cl--labels-convert-cache)) (cdr cl--labels-convert-cache))
    (t
-    (let ((found (assq f macroexpand-all-environment)))
-      (if (and found (ignore-errors
-                       (eq (cadr (cl-caddr found)) 'cl-labels-args)))
-          (cadr (cl-caddr (cl-cadddr found)))
+    (let* ((found (assq f macroexpand-all-environment))
+           (replacement (and found
+                             (ignore-errors
+                               (funcall (cdr found) cl--labels-magic)))))
+      (if (and replacement (eq cl--labels-magic (car replacement)))
+          (nth 1 replacement)
         (let ((res `(function ,f)))
           (setq cl--labels-convert-cache (cons f res))
           res))))))
@@ -1824,25 +1831,38 @@ a `let' form, except that the list of symbols can be 
computed at run-time."
 (defmacro cl-flet (bindings &rest body)
   "Make local function definitions.
 Like `cl-labels' but the definitions are not recursive.
+Each binding can take the form (FUNC EXP) where
+FUNC is the function name, and EXP is an expression that returns the
+function value to which it should be bound, or it can take the more common
+form \(FUNC ARGLIST BODY...) which is a shorthand
+for (FUNC (lambda ARGLIST BODY)).
 
 \(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
   (declare (indent 1) (debug ((&rest (cl-defun)) cl-declarations body)))
   (let ((binds ()) (newenv macroexpand-all-environment))
     (dolist (binding bindings)
-      (let ((var (make-symbol (format "--cl-%s--" (car binding)))))
-       (push (list var `(cl-function (lambda . ,(cdr binding)))) binds)
+      (let ((var (make-symbol (format "--cl-%s--" (car binding))))
+            (args-and-body (cdr binding)))
+        (if (and (= (length args-and-body) 1) (symbolp (car args-and-body)))
+            ;; Optimize (cl-flet ((fun var)) body).
+            (setq var (car args-and-body))
+          (push (list var (if (= (length args-and-body) 1)
+                              (car args-and-body)
+                            `(cl-function (lambda . ,args-and-body))))
+                binds))
        (push (cons (car binding)
-                    `(lambda (&rest cl-labels-args)
-                       (cl-list* 'funcall ',var
-                                 cl-labels-args)))
+                    (lambda (&rest args)
+                      (if (eq (car args) cl--labels-magic)
+                          (list cl--labels-magic var)
+                        `(funcall ,var ,@args))))
               newenv)))
-    `(let ,(nreverse binds)
-       ,@(macroexp-unprogn
-          (macroexpand-all
-           `(progn ,@body)
-           ;; Don't override lexical-let's macro-expander.
-           (if (assq 'function newenv) newenv
-             (cons (cons 'function #'cl--labels-convert) newenv)))))))
+    ;; FIXME: Eliminate those functions which aren't referenced.
+    (macroexp-let* (nreverse binds)
+                   (macroexpand-all
+                    `(progn ,@body)
+                    ;; Don't override lexical-let's macro-expander.
+                    (if (assq 'function newenv) newenv
+                      (cons (cons 'function #'cl--labels-convert) newenv))))))
 
 ;;;###autoload
 (defmacro cl-flet* (bindings &rest body)
@@ -1869,9 +1889,10 @@ in closures will only work if `lexical-binding' is in 
use.
       (let ((var (make-symbol (format "--cl-%s--" (car binding)))))
        (push (list var `(cl-function (lambda . ,(cdr binding)))) binds)
        (push (cons (car binding)
-                    `(lambda (&rest cl-labels-args)
-                       (cl-list* 'funcall ',var
-                                 cl-labels-args)))
+                    (lambda (&rest args)
+                      (if (eq (car args) cl--labels-magic)
+                          (list cl--labels-magic var)
+                        (cl-list* 'funcall var args))))
               newenv)))
     (macroexpand-all `(letrec ,(nreverse binds) ,@body)
                      ;; Don't override lexical-let's macro-expander.
@@ -1898,7 +1919,8 @@ This is like `cl-flet', but for macros instead of 
functions.
             (res (cl--transform-lambda (cdar bindings) name)))
        (eval (car res))
        (macroexpand-all (macroexp-progn body)
-                        (cons (cons name `(lambda ,@(cdr res)))
+                        (cons (cons name
+                                     (eval `(cl-function (lambda ,@(cdr res))) 
t))
                               macroexpand-all-environment))))))
 
 (defconst cl--old-macroexpand
@@ -2079,14 +2101,11 @@ values.  For compatibility, (cl-values A B C) is a 
synonym for (list A B C).
                (< cl--optimize-speed 3)
                (= cl--optimize-safety 3)))
       form
-    (let* ((temp (if (cl--simple-expr-p form 3)
-                     form (make-symbol "--cl-var--")))
-           (body `(progn (unless ,(cl--make-type-test temp type)
-                           (signal 'wrong-type-argument
-                                   (list ',type ,temp ',form)))
-                         ,temp)))
-      (if (eq temp form) body
-        `(let ((,temp ,form)) ,body)))))
+    (macroexp-let2 macroexp-copyable-p temp form
+      `(progn (unless (cl-typep ,temp ',type)
+                (signal 'wrong-type-argument
+                        (list ',type ,temp ',form)))
+              ,temp))))
 
 (defvar cl--proclaim-history t)    ; for future compilers
 (defvar cl--declare-stack t)       ; for future compilers
@@ -2400,15 +2419,11 @@ non-nil value, that slot cannot be set via `setf'.
         (tag (intern (format "cl-struct-%s" name)))
         (tag-symbol (intern (format "cl-struct-%s-tags" name)))
         (include-descs nil)
-        (side-eff nil)
         (type nil)
         (named nil)
         (forms nil)
+         (docstring (if (stringp (car descs)) (pop descs)))
         pred-form pred-check)
-    (if (stringp (car descs))
-       (push `(put ',name 'structure-documentation
-                    ,(pop descs))
-              forms))
     (setq descs (cons '(cl-tag-slot)
                      (mapcar (function (lambda (x) (if (consp x) x (list x))))
                              descs)))
@@ -2433,6 +2448,7 @@ non-nil value, that slot cannot be set via `setf'.
              ((eq opt :predicate)
               (if args (setq predicate (car args))))
              ((eq opt :include)
+               (when include (error "Can't :include more than once"))
               (setq include (car args)
                     include-descs (mapcar (function
                                            (lambda (x)
@@ -2486,20 +2502,19 @@ non-nil value, that slot cannot be set via `setf'.
            (if named (setq tag name)))
        (setq type 'vector named 'true)))
     (or named (setq descs (delq (assq 'cl-tag-slot descs) descs)))
-    (push `(defvar ,tag-symbol) forms)
     (when (and (null predicate) named)
       (setq predicate (intern (format "cl--struct-%s-p" name))))
     (setq pred-form (and named
                         (let ((pos (- (length descs)
                                       (length (memq (assq 'cl-tag-slot descs)
                                                     descs)))))
-                          (if (eq type 'vector)
-                              `(and (vectorp cl-x)
-                                    (>= (length cl-x) ,(length descs))
-                                    (memq (aref cl-x ,pos) ,tag-symbol))
-                            (if (= pos 0)
-                                `(memq (car-safe cl-x) ,tag-symbol)
-                              `(and (consp cl-x)
+                          (cond
+                            ((eq type 'vector)
+                             `(and (vectorp cl-x)
+                                   (>= (length cl-x) ,(length descs))
+                                   (memq (aref cl-x ,pos) ,tag-symbol)))
+                            ((= pos 0) `(memq (car-safe cl-x) ,tag-symbol))
+                            (t `(and (consp cl-x)
                                     (memq (nth ,pos cl-x) ,tag-symbol))))))
          pred-check (and pred-form (> safety 0)
                          (if (and (eq (cl-caadr pred-form) 'vectorp)
@@ -2521,6 +2536,7 @@ non-nil value, that slot cannot be set via `setf'.
              (push slot slots)
              (push (nth 1 desc) defaults)
              (push `(cl-defsubst ,accessor (cl-x)
+                       (declare (side-effect-free t))
                        ,@(and pred-check
                              (list `(or ,pred-check
                                          (error "%s accessing a non-%s"
@@ -2529,7 +2545,6 @@ non-nil value, that slot cannot be set via `setf'.
                           (if (= pos 0) '(car cl-x)
                             `(nth ,pos cl-x))))
                     forms)
-             (push (cons accessor t) side-eff)
               (if (cadr (memq :read-only (cddr desc)))
                   (push `(gv-define-expander ,accessor
                            (lambda (_cl-do _cl-x)
@@ -2562,15 +2577,14 @@ non-nil value, that slot cannot be set via `setf'.
          defaults (nreverse defaults))
     (when pred-form
       (push `(cl-defsubst ,predicate (cl-x)
+               (declare (side-effect-free error-free))
                ,(if (eq (car pred-form) 'and)
                     (append pred-form '(t))
                   `(and ,pred-form t)))
             forms)
-      (push `(put ',name 'cl-deftype-satisfies ',predicate) forms)
-      (push (cons predicate 'error-free) side-eff))
+      (push `(put ',name 'cl-deftype-satisfies ',predicate) forms))
     (and copier
-        (progn (push `(defun ,copier (x) (copy-sequence x)) forms)
-               (push (cons copier t) side-eff)))
+         (push `(defalias ',copier #'copy-sequence) forms))
     (if constructor
        (push (list constructor
                       (cons '&key (delq nil (copy-sequence slots))))
@@ -2582,11 +2596,11 @@ non-nil value, that slot cannot be set via `setf'.
             (make (cl-mapcar (function (lambda (s d) (if (memq s anames) s d)))
                            slots defaults)))
        (push `(cl-defsubst ,name
-                 (&cl-defs '(nil ,@descs) ,@args)
+                   (&cl-defs '(nil ,@descs) ,@args)
+                 ,@(if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs)))
+                       '((declare (side-effect-free t))))
                  (,type ,@make))
-              forms)
-       (if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs)))
-           (push (cons name t) side-eff))))
+              forms)))
     (if print-auto (nconc print-func (list '(princ ")" cl-s) t)))
     ;; Don't bother adding to cl-custom-print-functions since it's not used
     ;; by anything anyway!
@@ -2599,17 +2613,14 @@ non-nil value, that slot cannot be set via `setf'.
     ;;                  (and ,pred-form ,print-func))
     ;;                cl-custom-print-functions))
     ;;          forms))
-    (push `(setq ,tag-symbol (list ',tag)) forms)
-    (push `(cl-eval-when (compile load eval)
-             (put ',name 'cl-struct-slots ',descs)
-             (put ',name 'cl-struct-type ',(list type (eq named t)))
-             (put ',name 'cl-struct-include ',include)
-             (put ',name 'cl-struct-print ,print-auto)
-             ,@(mapcar (lambda (x)
-                         `(function-put ',(car x) 'side-effect-free ',(cdr x)))
-                       side-eff))
-          forms)
-    `(progn ,@(nreverse (cons `',name forms)))))
+    `(progn
+       (defvar ,tag-symbol)
+       ,@(nreverse forms)
+       (eval-and-compile
+         (cl-struct-define ',name ,docstring ',include
+                           ',type ,(eq named t) ',descs ',tag-symbol ',tag
+                           ',print-auto))
+       ',name)))
 
 (defun cl-struct-sequence-type (struct-type)
   "Return the sequence used to build STRUCT-TYPE.
@@ -2716,14 +2727,11 @@ STRING is an optional description of the desired type."
   (declare (debug (place cl-type-spec &optional stringp)))
   (and (or (not (cl--compiling-file))
           (< cl--optimize-speed 3) (= cl--optimize-safety 3))
-       (let* ((temp (if (cl--simple-expr-p form 3)
-                       form (make-symbol "--cl-var--")))
-             (body `(or ,(cl--make-type-test temp type)
-                         (signal 'wrong-type-argument
-                                 (list ,(or string `',type)
-                                       ,temp ',form)))))
-        (if (eq temp form) `(progn ,body nil)
-          `(let ((,temp ,form)) ,body nil)))))
+       (macroexp-let2 macroexp-copyable-p temp form
+         `(progn (or (cl-typep ,temp ',type)
+                     (signal 'wrong-type-argument
+                             (list ,(or string `',type) ,temp ',form)))
+                 nil))))
 
 ;;;###autoload
 (defmacro cl-assert (form &optional show-args string &rest args)
@@ -2906,9 +2914,8 @@ The function's arguments should be treated as immutable.
 ;;;###autoload
 (defun cl--compiler-macro-adjoin (form a list &rest keys)
   (if (memq :key keys) form
-    (macroexp-let2 macroexp-copyable-p va a
-      (macroexp-let2 macroexp-copyable-p vlist list
-        `(if (cl-member ,va ,vlist ,@keys) ,vlist (cons ,va ,vlist))))))
+    (macroexp-let2* macroexp-copyable-p ((va a) (vlist list))
+      `(if (cl-member ,va ,vlist ,@keys) ,vlist (cons ,va ,vlist)))))
 
 (defun cl--compiler-macro-get (_form sym prop &optional def)
   (if def
diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el
new file mode 100644
index 0000000..c9867b4
--- /dev/null
+++ b/lisp/emacs-lisp/cl-preloaded.el
@@ -0,0 +1,48 @@
+;;; cl-preloaded.el --- Preloaded part of the CL library  -*- lexical-binding: 
t; -*-
+
+;; Copyright (C) 2015  Free Software Foundation, Inc
+
+;; Author: Stefan Monnier <address@hidden>
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; The expectation is that structs defined with cl-defstruct do not
+;; need cl-lib at run-time, but we'd like to hide the details of the
+;; cl-struct metadata behind the cl-struct-define function, so we put
+;; it in this pre-loaded file.
+
+;;; Code:
+
+(defun cl-struct-define (name docstring parent type named slots children-sym
+                              tag print-auto)
+  (if (boundp children-sym)
+      (add-to-list children-sym tag)
+    (set children-sym (list tag)))
+  ;; If the cl-generic support, we need to be able to check
+  ;; if a vector is a cl-struct object, without knowing its particular type.
+  ;; So we use the (otherwise) unused function slots of the tag symbol
+  ;; to put a special witness value, to make the check easy and reliable.
+  (unless named (fset tag :quick-object-witness-check))
+  (put name 'cl-struct-slots slots)
+  (put name 'cl-struct-type (list type named))
+  (if parent (put name 'cl-struct-include parent))
+  (if print-auto (put name 'cl-struct-print print-auto))
+  (if docstring (put name 'structure-documentation docstring)))
+
+(provide 'cl-preloaded)
+;;; cl-preloaded.el ends here
diff --git a/lisp/emacs-lisp/cl-seq.el b/lisp/emacs-lisp/cl-seq.el
index a707832..5624acc 100644
--- a/lisp/emacs-lisp/cl-seq.el
+++ b/lisp/emacs-lisp/cl-seq.el
@@ -1,6 +1,6 @@
 ;;; cl-seq.el --- Common Lisp features, part 3  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <address@hidden>
 ;; Old-Version: 2.02
diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el
index d99166e..5da1cea 100644
--- a/lisp/emacs-lisp/cl.el
+++ b/lisp/emacs-lisp/cl.el
@@ -1,6 +1,6 @@
 ;;; cl.el --- Compatibility aliases for the old CL library.  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: extensions
@@ -342,6 +342,8 @@ The two cases that are handled are:
 - renaming of F when it's a function defined via `cl-labels' or `labels'."
   (require 'cl-macs)
   (declare-function cl--expr-contains-any "cl-macs" (x y))
+  (declare-function cl--labels-convert "cl-macs" (f))
+  (defvar cl--labels-convert-cache)
   (cond
    ;; ¡¡Big Ugly Hack!! We can't use a compiler-macro because those are checked
    ;; *after* handling `function', but we want to stop macroexpansion from
@@ -374,13 +376,7 @@ The two cases that are handled are:
           (setq cl--function-convert-cache (cons newf res))
           res))))
    (t
-    (let ((found (assq f macroexpand-all-environment)))
-      (if (and found (ignore-errors
-                       (eq (cadr (cl-caddr found)) 'cl-labels-args)))
-          (cadr (cl-caddr (cl-cadddr found)))
-        (let ((res `(function ,f)))
-          (setq cl--function-convert-cache (cons f res))
-          res))))))
+    (cl--labels-convert f))))
 
 (defmacro lexical-let (bindings &rest body)
   "Like `let', but lexically scoped.
diff --git a/lisp/emacs-lisp/copyright.el b/lisp/emacs-lisp/copyright.el
index 1181e7a..1317d69 100644
--- a/lisp/emacs-lisp/copyright.el
+++ b/lisp/emacs-lisp/copyright.el
@@ -1,6 +1,6 @@
 ;;; copyright.el --- update the copyright notice in current buffer
 
-;; Copyright (C) 1991-1995, 1998, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1991-1995, 1998, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Daniel Pfeiffer <address@hidden>
diff --git a/lisp/emacs-lisp/crm.el b/lisp/emacs-lisp/crm.el
index e991c47..f516e78 100644
--- a/lisp/emacs-lisp/crm.el
+++ b/lisp/emacs-lisp/crm.el
@@ -1,6 +1,6 @@
 ;;; crm.el --- read multiple strings with completion
 
-;; Copyright (C) 1985-1986, 1993-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1993-2015 Free Software Foundation, Inc.
 
 ;; Author: Sen Nagata <address@hidden>
 ;; Keywords: completion, minibuffer, multiple elements
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index ab6368b..dc0e666 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -1,6 +1,6 @@
 ;;; debug.el --- debuggers and related commands for Emacs  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el
index a6ccedc..52da4c9 100644
--- a/lisp/emacs-lisp/derived.el
+++ b/lisp/emacs-lisp/derived.el
@@ -1,7 +1,7 @@
 ;;; derived.el --- allow inheritance of major modes
 ;; (formerly mode-clone.el)
 
-;; Copyright (C) 1993-1994, 1999, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1993-1994, 1999, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: David Megginson (address@hidden)
@@ -162,7 +162,8 @@ The new mode runs the hook constructed by the function
 See Info node `(elisp)Derived Modes' for more details."
   (declare (debug (&define name symbolp sexp [&optional stringp]
                           [&rest keywordp sexp] def-body))
-          (doc-string 4))
+          (doc-string 4)
+           (indent 3))
 
   (when (and docstring (not (stringp docstring)))
     ;; Some trickiness, since what appears to be the docstring may really be
diff --git a/lisp/emacs-lisp/disass.el b/lisp/emacs-lisp/disass.el
index bf013ea..15489fc 100644
--- a/lisp/emacs-lisp/disass.el
+++ b/lisp/emacs-lisp/disass.el
@@ -1,6 +1,6 @@
 ;;; disass.el --- disassembler for compiled Emacs Lisp code
 
-;; Copyright (C) 1986, 1991, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1991, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Doug Cutting <address@hidden>
 ;;     Jamie Zawinski <address@hidden>
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 9a17a75..f7e8619 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -1,6 +1,6 @@
 ;;; easy-mmode.el --- easy definition for major and minor modes
 
-;; Copyright (C) 1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Georges Brun-Cottan <address@hidden>
 ;; Maintainer: Stefan Monnier <address@hidden>
@@ -149,11 +149,12 @@ For example, you could write
     ...BODY CODE...)"
   (declare (doc-string 2)
            (debug (&define name string-or-null-p
-                          [&optional [&not keywordp] sexp
-                           &optional [&not keywordp] sexp
-                           &optional [&not keywordp] sexp]
-                          [&rest [keywordp sexp]]
-                          def-body)))
+                           [&optional [&not keywordp] sexp
+                            &optional [&not keywordp] sexp
+                            &optional [&not keywordp] sexp]
+                           [&rest [keywordp sexp]]
+                           def-body))
+           (indent 1))
 
   ;; Allow skipping the first three args.
   (cond
diff --git a/lisp/emacs-lisp/easymenu.el b/lisp/emacs-lisp/easymenu.el
index 8a30266..ad2ba69 100644
--- a/lisp/emacs-lisp/easymenu.el
+++ b/lisp/emacs-lisp/easymenu.el
@@ -1,6 +1,6 @@
 ;;; easymenu.el --- support the easymenu interface for defining a menu  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1994, 1996, 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1996, 1998-2015 Free Software Foundation, Inc.
 
 ;; Keywords: emulations
 ;; Author: Richard Stallman <address@hidden>
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index 473edb4..7faa101 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -1,6 +1,7 @@
 ;;; edebug.el --- a source-level debugger for Emacs Lisp  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1988-1995, 1997, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988-1995, 1997, 1999-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Daniel LaLiberte <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el
index a1c2cb5..46585ee 100644
--- a/lisp/emacs-lisp/eieio-base.el
+++ b/lisp/emacs-lisp/eieio-base.el
@@ -1,6 +1,6 @@
 ;;; eieio-base.el --- Base classes for EIEIO.  -*- lexical-binding:t -*-
 
-;;; Copyright (C) 2000-2002, 2004-2005, 2007-2014 Free Software
+;;; Copyright (C) 2000-2002, 2004-2005, 2007-2015 Free Software
 ;;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam  <address@hidden>
@@ -40,7 +40,7 @@
 ;; error if a slot is unbound.
 (defclass eieio-instance-inheritor ()
   ((parent-instance :initarg :parent-instance
-                   :type eieio-instance-inheritor-child
+                   :type eieio-instance-inheritor
                    :documentation
                    "The parent of this instance.
 If a slot of this class is referenced, and is unbound, then the parent
@@ -52,7 +52,7 @@ a parent instance.  When a slot in the child is referenced, 
and has
 not been set, use values from the parent."
   :abstract t)
 
-(defmethod slot-unbound ((object eieio-instance-inheritor)
+(cl-defmethod slot-unbound ((object eieio-instance-inheritor)
                          _class slot-name _fn)
   "If a slot OBJECT in this CLASS is unbound, try to inherit, or throw a 
signal.
 SLOT-NAME is the offending slot.  FN is the function signaling the error."
@@ -61,31 +61,16 @@ SLOT-NAME is the offending slot.  FN is the function 
signaling the error."
       ;; method if the parent instance's slot is unbound.
       (eieio-oref (oref object parent-instance) slot-name)
     ;; Throw the regular signal.
-    (call-next-method)))
+    (cl-call-next-method)))
 
-(defmethod clone ((obj eieio-instance-inheritor) &rest params)
+(cl-defmethod clone ((obj eieio-instance-inheritor) &rest _params)
   "Clone OBJ, initializing `:parent' to OBJ.
 All slots are unbound, except those initialized with PARAMS."
-  (let ((nobj (make-vector (length obj) eieio-unbound))
-       (nm (eieio--object-name obj))
-       (passname (and params (stringp (car params))))
-       (num 1))
-    (aset nobj 0 'object)
-    (setf (eieio--object-class nobj) (eieio--object-class obj))
-    ;; The following was copied from the default clone.
-    (if (not passname)
-       (save-match-data
-         (if (string-match "-\\([0-9]+\\)" nm)
-             (setq num (1+ (string-to-number (match-string 1 nm)))
-                   nm (substring nm 0 (match-beginning 0))))
-         (setf (eieio--object-name nobj) (concat nm "-" (int-to-string num))))
-      (setf (eieio--object-name nobj) (car params)))
-    ;; Now initialize from params.
-    (if params (shared-initialize nobj (if passname (cdr params) params)))
+  (let ((nobj (cl-call-next-method)))
     (oset nobj parent-instance obj)
     nobj))
 
-(defmethod eieio-instance-inheritor-slot-boundp ((object 
eieio-instance-inheritor)
+(cl-defmethod eieio-instance-inheritor-slot-boundp ((object 
eieio-instance-inheritor)
                                                slot)
   "Return non-nil if the instance inheritor OBJECT's SLOT is bound.
 See `slot-boundp' for details on binding slots.
@@ -118,7 +103,7 @@ Inheritors from this class must overload `tracking-symbol' 
which is
 a variable symbol used to store a list of all instances."
   :abstract t)
 
-(defmethod initialize-instance :AFTER ((this eieio-instance-tracker)
+(cl-defmethod initialize-instance :after ((this eieio-instance-tracker)
                                       &rest _slots)
   "Make sure THIS is in our master list of this class.
 Optional argument SLOTS are the initialization arguments."
@@ -127,7 +112,7 @@ Optional argument SLOTS are the initialization arguments."
     (if (not (memq this (symbol-value sym)))
        (set sym (append (symbol-value sym) (list this))))))
 
-(defmethod delete-instance ((this eieio-instance-tracker))
+(cl-defmethod delete-instance ((this eieio-instance-tracker))
   "Remove THIS from the master list of this class."
   (set (oref this tracking-symbol)
        (delq this (symbol-value (oref this tracking-symbol)))))
@@ -155,7 +140,7 @@ Multiple calls to `make-instance' will return this 
object."))
 A singleton is a class which will only ever have one instance."
   :abstract t)
 
-(defmethod constructor :STATIC ((class eieio-singleton) _name &rest _slots)
+(cl-defmethod eieio-constructor ((class (subclass eieio-singleton)) &rest 
_slots)
   "Constructor for singleton CLASS.
 NAME and SLOTS initialize the new object.
 This constructor guarantees that no matter how many you request,
@@ -164,7 +149,7 @@ only one object ever exists."
   ;; with class allocated slots or default values.
   (let ((old (oref-default class singleton)))
     (if (eq old eieio-unbound)
-       (oset-default class singleton (call-next-method))
+       (oset-default class singleton (cl-call-next-method))
       old)))
 
 
@@ -213,7 +198,7 @@ object.  For this reason, only slots which do not have an 
`:initarg'
 specified will not be saved."
   :abstract t)
 
-(defmethod eieio-persistent-save-interactive ((this eieio-persistent) prompt
+(cl-defmethod eieio-persistent-save-interactive ((this eieio-persistent) prompt
                                              &optional name)
   "Prepare to save THIS.  Use in an `interactive' statement.
 Query user for file name with PROMPT if THIS does not yet specify
@@ -234,7 +219,7 @@ for CLASS.  Optional ALLOW-SUBCLASS says that it is ok for
 being pedantic."
   (unless class
     (message "Unsafe call to `eieio-persistent-read'."))
-  (when class (eieio--check-type class-p class))
+  (when class (cl-check-type class class))
   (let ((ret nil)
        (buffstr nil))
     (unwind-protect
@@ -270,7 +255,7 @@ malicious code.
 Note: This function recurses when a slot of :type of some object is
 identified, and needing more object creation."
   (let ((objclass (nth 0 inputlist))
-       (objname (nth 1 inputlist))
+       ;; (objname (nth 1 inputlist))
        (slots (nthcdr 2 inputlist))
        (createslots nil))
 
@@ -285,7 +270,7 @@ identified, and needing more object creation."
        ;; In addition, strip out quotes, list functions, and update
        ;; object constructors as needed.
        (setq value (eieio-persistent-validate/fix-slot-value
-                    objclass name value))
+                    (eieio--class-v objclass) name value))
 
        (push name createslots)
        (push value createslots)
@@ -293,7 +278,7 @@ identified, and needing more object creation."
 
       (setq slots (cdr (cdr slots))))
 
-    (apply 'make-instance objclass objname (nreverse createslots))
+    (apply #'make-instance objclass (nreverse createslots))
 
     ;;(eval inputlist)
     ))
@@ -305,11 +290,13 @@ constructor functions are considered valid.
 Second, any text properties will be stripped from strings."
   (cond ((consp proposed-value)
         ;; Lists with something in them need special treatment.
-        (let ((slot-idx (eieio-slot-name-index class nil slot))
+        (let ((slot-idx (eieio--slot-name-index class
+                                                 nil slot))
               (type nil)
               (classtype nil))
-          (setq slot-idx (- slot-idx 3))
-          (setq type (aref (eieio--class-public-type (class-v class))
+          (setq slot-idx (- slot-idx
+                             (eval-when-compile eieio--object-num-slots)))
+          (setq type (aref (eieio--class-public-type class)
                            slot-idx))
 
           (setq classtype (eieio-persistent-slot-type-is-class-p
@@ -346,8 +333,8 @@ Second, any text properties will be stripped from strings."
                  (unless (and
                           ;; Do we have a type?
                           (consp classtype) (class-p (car classtype)))
-                   (error "In save file, list of object constructors found, 
but no :type specified for slot %S"
-                          slot))
+                   (error "In save file, list of object constructors found, 
but no :type specified for slot %S of type %S"
+                          slot classtype))
 
                  ;; We have a predicate, but it doesn't satisfy the predicate?
                  (dolist (PV (cdr proposed-value))
@@ -375,31 +362,49 @@ Second, any text properties will be stripped from 
strings."
   )
 
 (defun eieio-persistent-slot-type-is-class-p (type)
-  "Return the class refered to in TYPE.
+  "Return the class referred to in TYPE.
 If no class is referenced there, then return nil."
   (cond ((class-p type)
         ;; If the type is a class, then return it.
         type)
-
-       ((and (symbolp type) (string-match "-child$" (symbol-name type))
+       ((and (eq 'list-of (car-safe type)) (class-p (cadr type)))
+        ;; If it is the type of a list of a class, then return that class and
+        ;; the type.
+        (cons (cadr type) type))
+
+        ((and (symbolp type) (get type 'cl-deftype-handler))
+         ;; Macro-expand the type according to cl-deftype definitions.
+         (eieio-persistent-slot-type-is-class-p
+          (funcall (get type 'cl-deftype-handler))))
+
+        ;; FIXME: foo-child should not be a valid type!
+       ((and (symbolp type) (string-match "-child\\'" (symbol-name type))
              (class-p (intern-soft (substring (symbol-name type) 0
                                               (match-beginning 0)))))
+         (unless eieio-backward-compatibility
+           (error "Use of bogus %S type instead of %S"
+                  type (intern-soft (substring (symbol-name type) 0
+                                              (match-beginning 0)))))
         ;; If it is the predicate ending with -child, then return
         ;; that class.  Unfortunately, in EIEIO, typep of just the
         ;; class is the same as if we used -child, so no further work needed.
         (intern-soft (substring (symbol-name type) 0
                                 (match-beginning 0))))
-
-       ((and (symbolp type) (string-match "-list$" (symbol-name type))
+        ;; FIXME: foo-list should not be a valid type!
+       ((and (symbolp type) (string-match "-list\\'" (symbol-name type))
              (class-p (intern-soft (substring (symbol-name type) 0
                                               (match-beginning 0)))))
+         (unless eieio-backward-compatibility
+           (error "Use of bogus %S type instead of (list-of %S)"
+                  type (intern-soft (substring (symbol-name type) 0
+                                              (match-beginning 0)))))
         ;; If it is the predicate ending with -list, then return
         ;; that class and the predicate to use.
         (cons (intern-soft (substring (symbol-name type) 0
                                       (match-beginning 0)))
               type))
 
-       ((and (consp type) (eq (car type) 'or))
+       ((eq (car-safe type) 'or)
         ;; If type is a list, and is an or, it is possibly something
         ;; like (or null myclass), so check for that.
         (let ((ans nil))
@@ -412,17 +417,17 @@ If no class is referenced there, then return nil."
         ;; No match, not a class.
         nil)))
 
-(defmethod object-write ((this eieio-persistent) &optional comment)
+(cl-defmethod object-write ((this eieio-persistent) &optional comment)
   "Write persistent object THIS out to the current stream.
 Optional argument COMMENT is a header line comment."
-  (call-next-method this (or comment (oref this file-header-line))))
+  (cl-call-next-method this (or comment (oref this file-header-line))))
 
-(defmethod eieio-persistent-path-relative ((this eieio-persistent) file)
+(cl-defmethod eieio-persistent-path-relative ((this eieio-persistent) file)
   "For object THIS, make absolute file name FILE relative."
   (file-relative-name (expand-file-name file)
                      (file-name-directory (oref this file))))
 
-(defmethod eieio-persistent-save ((this eieio-persistent) &optional file)
+(cl-defmethod eieio-persistent-save ((this eieio-persistent) &optional file)
   "Save persistent object THIS to disk.
 Optional argument FILE overrides the file name specified in the object
 instance."
@@ -463,34 +468,38 @@ instance."
 
 
 ;;; Named object
-;;
-;; Named objects use the objects `name' as a slot, and that slot
-;; is accessed with the `object-name' symbol.
 
 (defclass eieio-named ()
-  ()
-  "Object with a name.
-Name storage already occurs in an object.  This object provides get/set
-access to it."
+  ((object-name :initarg :object-name :initform nil))
+  "Object with a name."
   :abstract t)
 
-(defmethod slot-missing ((obj eieio-named)
-                        slot-name operation &optional new-value)
-  "Called when a non-existent slot is accessed.
-For variable `eieio-named', provide an imaginary `object-name' slot.
-Argument OBJ is the named object.
-Argument SLOT-NAME is the slot that was attempted to be accessed.
-OPERATION is the type of access, such as `oref' or `oset'.
-NEW-VALUE is the value that was being set into SLOT if OPERATION were
-a set type."
-  (if (memq slot-name '(object-name :object-name))
-      (cond ((eq operation 'oset)
-            (if (not (stringp new-value))
-                (signal 'invalid-slot-type
-                        (list obj slot-name 'string new-value)))
-            (eieio-object-set-name-string obj new-value))
-           (t (eieio-object-name-string obj)))
-    (call-next-method)))
+(cl-defmethod eieio-object-name-string ((obj eieio-named))
+  "Return a string which is OBJ's name."
+  (or (slot-value obj 'object-name)
+      (symbol-name (eieio-object-class obj))))
+
+(cl-defmethod eieio-object-set-name-string ((obj eieio-named) name)
+  "Set the string which is OBJ's NAME."
+  (cl-check-type name string)
+  (eieio-oset obj 'object-name name))
+
+(cl-defmethod clone ((obj eieio-named) &rest params)
+  "Clone OBJ, initializing `:parent' to OBJ.
+All slots are unbound, except those initialized with PARAMS."
+  (let* ((newname (and (stringp (car params)) (pop params)))
+         (nobj (apply #'cl-call-next-method obj params))
+         (nm (slot-value obj 'object-name)))
+    (eieio-oset obj 'object-name
+                (or newname
+                    (save-match-data
+                      (if (and nm (string-match "-\\([0-9]+\\)" nm))
+                          (let ((num (1+ (string-to-number
+                                          (match-string 1 nm)))))
+                            (concat (substring nm 0 (match-beginning 0))
+                                    "-" (int-to-string num)))
+                        (concat nm "-1")))))
+    nobj))
 
 (provide 'eieio-base)
 
diff --git a/lisp/emacs-lisp/eieio-compat.el b/lisp/emacs-lisp/eieio-compat.el
new file mode 100644
index 0000000..fcca99d
--- /dev/null
+++ b/lisp/emacs-lisp/eieio-compat.el
@@ -0,0 +1,264 @@
+;;; eieio-compat.el --- Compatibility with Older EIEIO versions  -*- 
lexical-binding:t -*-
+
+;; Copyright (C) 1995-1996, 1998-2015 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <address@hidden>
+;; Keywords: OO, lisp
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Backward compatibility definition of old EIEIO functions in
+;; terms of newer equivalent.
+
+;; The main elements are the old EIEIO `defmethod' and `defgeneric' which are
+;; now implemented on top of cl-generic.  The differences we have to
+;; accommodate are:
+;; - EIEIO's :static methods (turned into a new `eieio--static' specializer).
+;; - EIEIO's support for `call-next-method' and `next-method-p' instead of
+;;   `cl-next-method-p' and `cl-call-next-method' (simple matter of renaming).
+;; - Different errors are signaled.
+;; - EIEIO's defgeneric does not reset the function.
+;; - EIEIO's no-next-method and no-applicable-method can't be aliases of
+;;   cl-generic's namesakes since they have different calling conventions,
+;;   which means that packages that (defmethod no-next-method ..) don't work.
+;; - EIEIO's `call-next-method' and `next-method-p' had dynamic scope whereas
+;;   cl-generic's `cl-next-method-p' and `cl-call-next-method' are lexically
+;;   scoped.
+
+;;; Code:
+
+(require 'eieio-core)
+(require 'cl-generic)
+
+(put 'eieio--defalias 'byte-hunk-handler
+     #'byte-compile-file-form-defalias) ;;(get 'defalias 'byte-hunk-handler)
+;;;###autoload
+(defun eieio--defalias (name body)
+  "Like `defalias', but with less side-effects.
+More specifically, it has no side-effects at all when the new function
+definition is the same (`eq') as the old one."
+  (cl-assert (not (symbolp body)))
+  (while (and (fboundp name) (symbolp (symbol-function name)))
+    ;; Follow aliases, so methods applied to obsolete aliases still work.
+    (setq name (symbol-function name)))
+  (unless (and (fboundp name)
+               (eq (symbol-function name) body))
+    (defalias name body)))
+
+;;;###autoload
+(defmacro defgeneric (method args &optional doc-string)
+  "Create a generic function METHOD.
+DOC-STRING is the base documentation for this class.  A generic
+function has no body, as its purpose is to decide which method body
+is appropriate to use.  Uses `defmethod' to create methods, and calls
+`defgeneric' for you.  With this implementation the ARGS are
+currently ignored.  You can use `defgeneric' to apply specialized
+top level documentation to a method."
+  (declare (doc-string 3) (obsolete cl-defgeneric "25.1"))
+  `(eieio--defalias ',method
+                    (eieio--defgeneric-init-form
+                     ',method
+                     ,(if doc-string (help-add-fundoc-usage doc-string 
args)))))
+
+;;;###autoload
+(defmacro defmethod (method &rest args)
+  "Create a new METHOD through `defgeneric' with ARGS.
+
+The optional second argument KEY is a specifier that
+modifies how the method is called, including:
+   :before  - Method will be called before the :primary
+   :primary - The default if not specified
+   :after   - Method will be called after the :primary
+   :static  - First arg could be an object or class
+The next argument is the ARGLIST.  The ARGLIST specifies the arguments
+to the method as with `defun'.  The first argument can have a type
+specifier, such as:
+  ((VARNAME CLASS) ARG2 ...)
+where VARNAME is the name of the local variable for the method being
+created.  The CLASS is a class symbol for a class made with `defclass'.
+A DOCSTRING comes after the ARGLIST, and is optional.
+All the rest of the args are the BODY of the method.  A method will
+return the value of the last form in the BODY.
+
+Summary:
+
+ (defmethod mymethod [:before | :primary | :after | :static]
+                     ((typearg class-name) arg2 &optional opt &rest rest)
+    \"doc-string\"
+     body)"
+  (declare (doc-string 3) (obsolete cl-defmethod "25.1")
+           (debug
+            (&define                    ; this means we are defining something
+             [&or name ("setf" :name setf name)]
+             ;; ^^ This is the methods symbol
+             [ &optional symbolp ]                ; this is key :before etc
+             list                                 ; arguments
+             [ &optional stringp ]                ; documentation string
+             def-body                             ; part to be debugged
+             )))
+  (let* ((key (if (keywordp (car args)) (pop args)))
+        (params (car args))
+        (arg1 (car params))
+         (fargs (if (consp arg1)
+                   (cons (car arg1) (cdr params))
+                 params))
+        (class (if (consp arg1) (nth 1 arg1)))
+         (code `(lambda ,fargs ,@(cdr args))))
+    `(progn
+       ;; Make sure there is a generic and the byte-compiler sees it.
+       (defgeneric ,method ,args)
+       (eieio--defmethod ',method ',key ',class #',code))))
+
+(add-function :before-until cl-generic-tagcode-function
+              #'eieio--generic-static-tagcode)
+(defun eieio--generic-static-tagcode (type name)
+  (and (eq 'eieio--static (car-safe type))
+       `(40 . (cond
+               ((symbolp ,name) (eieio--class-v ,name))
+               ((vectorp ,name) (aref ,name 0))))))
+
+(add-function :around cl-generic-tag-types-function
+              #'eieio--generic-static-tag-types)
+(defun eieio--generic-static-tag-types (orig-fun tag)
+  (cond
+   ((or (eieio--class-p tag)
+        (and (symbolp tag) (boundp tag) (eieio--class-p (symbol-value tag))))
+    (let ((superclasses (funcall orig-fun tag))
+          (types ()))
+      ;; Interleave: (subclass <foo>) (eieio--static <foo>) <subclass <bar>) ..
+      (dolist (superclass superclasses)
+        (push superclass types)
+        (push `(eieio--static
+                ,(if (consp superclass) (cadr superclass) superclass))
+              types))
+      (nreverse types)))
+   (t (funcall orig-fun tag))))
+
+;;;###autoload
+(defun eieio--defgeneric-init-form (method doc-string)
+  (if doc-string (put method 'function-documentation doc-string))
+  (if (memq method '(no-next-method no-applicable-method))
+      (symbol-function method)
+    (let ((generic (cl-generic-ensure-function method)))
+      (symbol-function (cl--generic-name generic)))))
+
+;;;###autoload
+(defun eieio--defmethod (method kind argclass code)
+  (setq kind (intern (downcase (symbol-name kind))))
+  (let* ((specializer (if (not (eq kind :static))
+                          (or argclass t)
+                        (setq kind nil)
+                        `(eieio--static ,argclass)))
+         (uses-cnm (not (memq kind '(:before :after))))
+         (specializers `((arg ,specializer)))
+         (code
+          ;; Backward compatibility for `no-next-method' and
+          ;; `no-applicable-method', which have slightly different calling
+          ;; convention than their cl-generic counterpart.
+          (pcase method
+            (`no-next-method
+             (setq method 'cl-no-next-method)
+             (setq specializers `(generic method ,@specializers))
+             (lambda (_generic _method &rest args) (apply code args)))
+            (`no-applicable-method
+             (setq method 'cl-no-applicable-method)
+             (setq specializers `(generic ,@specializers))
+             (lambda (generic arg &rest args) (apply code arg generic args)))
+            (_ code))))
+    (cl-generic-define-method
+     method (unless (memq kind '(nil :primary)) (list kind))
+     specializers uses-cnm
+     (if uses-cnm
+         (let* ((docstring (documentation code 'raw))
+                (args (help-function-arglist code 'preserve-names))
+                (doc-only (if docstring
+                              (let ((split (help-split-fundoc docstring nil)))
+                                (if split (cdr split) docstring))))
+                (new-docstring (help-add-fundoc-usage doc-only
+                                                      (cons 'cl-cnm args))))
+           ;; FIXME: ¡Add new-docstring to those closures!
+           (lambda (cnm &rest args)
+             (cl-letf (((symbol-function 'call-next-method) cnm)
+                       ((symbol-function 'next-method-p)
+                        (lambda () (cl--generic-isnot-nnm-p cnm))))
+               (apply code args))))
+       code))
+    ;; The old EIEIO code did not signal an error when there are methods
+    ;; applicable but only of the before/after kind.  So if we add a :before
+    ;; or :after, make sure there's a matching dummy primary.
+    (when (and (memq kind '(:before :after))
+               ;; FIXME: Use `cl-find-method'?
+               (not (cl-find-method method ()
+                                    (mapcar (lambda (arg)
+                                              (if (consp arg) (nth 1 arg) t))
+                                            specializers))))
+      (cl-generic-define-method method () specializers t
+                                (lambda (cnm &rest args)
+                                  (if (cl--generic-isnot-nnm-p cnm)
+                                      (apply cnm args)))))
+    method))
+
+;; Compatibility with code which tries to catch `no-method-definition' errors.
+(push 'no-method-definition (get 'cl-no-applicable-method 'error-conditions))
+
+(defun generic-p (fname) (not (null (cl--generic fname))))
+
+(defun no-next-method (&rest args)
+  (declare (obsolete cl-no-next-method "25.1"))
+  (apply #'cl-no-next-method 'unknown nil args))
+
+(defun no-applicable-method (object method &rest args)
+  (declare (obsolete cl-no-applicable-method "25.1"))
+  (apply #'cl-no-applicable-method method object args))
+
+(define-obsolete-function-alias 'call-next-method 'cl-call-next-method "25.1")
+(defun next-method-p ()
+  (declare (obsolete cl-next-method-p "25.1"))
+  ;; EIEIO's `next-method-p' just returned nil when called in an
+  ;; invalid context.
+  (message "next-method-p called outside of a primary or around method")
+  nil)
+
+;;;###autoload
+(defun eieio-defmethod (method args)
+  "Obsolete work part of an old version of the `defmethod' macro."
+  (declare (obsolete cl-defmethod "24.1"))
+  (eval `(defmethod ,method ,@args))
+  method)
+
+;;;###autoload
+(defun eieio-defgeneric (method doc-string)
+  "Obsolete work part of an old version of the `defgeneric' macro."
+  (declare (obsolete cl-defgeneric "24.1"))
+  (eval `(defgeneric ,method (x) ,@(if doc-string `(,doc-string))))
+  ;; Return the method
+  'method)
+
+;;;###autoload
+(defun eieio-defclass (cname superclasses slots options)
+  (declare (obsolete eieio-defclass-internal "25.1"))
+  (eval `(defclass ,cname ,superclasses ,slots ,@options)))
+
+
+;; Local Variables:
+;; generated-autoload-file: "eieio-core.el"
+;; End:
+
+(provide 'eieio-compat)
+
+;;; eieio-compat.el ends here
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index 4aae990..77d8c01 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -1,6 +1,6 @@
 ;;; eieio-core.el --- Core implementation for eieio  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1995-1996, 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Version: 1.4
@@ -32,16 +32,7 @@
 ;;; Code:
 
 (require 'cl-lib)
-
-(put 'eieio--defalias 'byte-hunk-handler
-     #'byte-compile-file-form-defalias) ;;(get 'defalias 'byte-hunk-handler)
-(defun eieio--defalias (name body)
-  "Like `defalias', but with less side-effects.
-More specifically, it has no side-effects at all when the new function
-definition is the same (`eq') as the old one."
-  (unless (and (fboundp name)
-               (eq (symbol-function name) body))
-    (defalias name body)))
+(require 'pcase)
 
 ;;;
 ;; A few functions that are better in the official EIEIO src, but
@@ -49,6 +40,8 @@ definition is the same (`eq') as the old one."
 (declare-function slot-unbound "eieio")
 (declare-function slot-missing "eieio")
 (declare-function child-of-class-p "eieio")
+(declare-function same-class-p "eieio")
+(declare-function object-of-class-p "eieio")
 
 
 ;;;
@@ -71,8 +64,12 @@ default setting for optimization purposes.")
 (defvar eieio-optimize-primary-methods-flag t
   "Non-nil means to optimize the method dispatch on primary methods.")
 
-(defvar eieio-initializing-object  nil
-  "Set to non-nil while initializing an object.")
+(defvar eieio-backward-compatibility t
+  "If nil, drop support for some behaviors of older versions of EIEIO.
+Currently under control of this var:
+- Define every class as a var whose value is the class symbol.
+- Define <class>-child-p and <class>-list-p predicates.
+- Allow object names in constructors.")
 
 (defconst eieio-unbound
   (if (and (boundp 'eieio-unbound) (symbolp eieio-unbound))
@@ -84,237 +81,163 @@ default setting for optimization purposes.")
 ;; while it is being built itself.
 (defvar eieio-default-superclass nil)
 
-;;;
-;; Class currently in scope.
-;;
-;; When invoking methods, the running method needs to know which class
-;; is currently in scope.  Generally this is the class of the method
-;; being called, but 'call-next-method' needs to query this state,
-;; and change it to be then next super class up.
-;;
-;; Thus, the scoped class is a stack that needs to be managed.
+(progn
+  ;; Arrange for field access not to bother checking if the access is indeed
+  ;; made to an eieio--class object.
+  (cl-declaim (optimize (safety 0)))
+(cl-defstruct (eieio--class
+               (:constructor nil)
+               (:constructor eieio--class-make (symbol &aux (tag 'defclass)))
+               (:type vector)
+               (:copier nil))
+  ;; We use an untagged cl-struct, with our own hand-made tag as first field
+  ;; (containing the symbol `defclass').  It would be better to use a normal
+  ;; cl-struct with its normal tag (e.g. so that cl-defstruct can define the
+  ;; predicate for us), but that breaks compatibility with .elc files compiled
+  ;; against older versions of EIEIO.
+  tag
+  symbol ;; symbol (self-referencing)
+  parent children
+  symbol-hashtable ;; hashtable permitting fast access to variable position 
indexes
+  ;; @todo
+  ;; the word "public" here is leftovers from the very first version.
+  ;; Get rid of it!
+  public-a                        ;; class attribute index
+  public-d                        ;; class attribute defaults index
+  public-doc                      ;; class documentation strings for attributes
+  public-type                     ;; class type for a slot
+  public-custom                   ;; class custom type for a slot
+  public-custom-label             ;; class custom group for a slot
+  public-custom-group             ;; class custom group for a slot
+  public-printer                  ;; printer for a slot
+  protection                      ;; protection for a slot
+  initarg-tuples                  ;; initarg tuples list
+  class-allocation-a              ;; class allocated attributes
+  class-allocation-doc            ;; class allocated documentation
+  class-allocation-type           ;; class allocated value type
+  class-allocation-custom         ;; class allocated custom descriptor
+  class-allocation-custom-label   ;; class allocated custom descriptor
+  class-allocation-custom-group   ;; class allocated custom group
+  class-allocation-printer        ;; class allocated printer for a slot
+  class-allocation-protection     ;; class allocated protection list
+  class-allocation-values         ;; class allocated value vector
+  default-object-cache ;; what a newly created object would look like.
+                       ; This will speed up instantiation time as
+                       ; only a `copy-sequence' will be needed, instead of
+                       ; looping over all the values and setting them from
+                       ; the default.
+  options ;; storage location of tagged class option
+          ; Stored outright without modifications or stripping
+  )
+  ;; Set it back to the default value.
+  (cl-declaim (optimize (safety 1))))
 
-(defvar eieio--scoped-class-stack nil
-  "A stack of the classes currently in scope during method invocation.")
 
-(defun eieio--scoped-class ()
-  "Return the class currently in scope, or nil."
-  (car-safe eieio--scoped-class-stack))
+(cl-defstruct (eieio--object
+               (:type vector)           ;We manage our own tagging system.
+               (:constructor nil)
+               (:copier nil))
+  ;; `class-tag' holds a symbol, which is not the class name, but is instead
+  ;; properly prefixed as an internal EIEIO thingy and which holds the class
+  ;; object/struct in its `symbol-value' slot.
+  class-tag)
 
-(defmacro eieio--with-scoped-class (class &rest forms)
-  "Set CLASS as the currently scoped class while executing FORMS."
-  (declare (indent 1))
-  `(unwind-protect
-       (progn
-        (push ,class eieio--scoped-class-stack)
-        ,@forms)
-     (pop eieio--scoped-class-stack)))
+(eval-and-compile
+  (defconst eieio--object-num-slots
+    (length (get 'eieio--object 'cl-struct-slots))))
 
-;;;
-;; Field Accessors
-;;
-(defmacro eieio--define-field-accessors (prefix fields)
-  (declare (indent 1))
-  (let ((index 0)
-        (defs '()))
-    (dolist (field fields)
-      (let ((doc (if (listp field)
-                     (prog1 (cadr field) (setq field (car field))))))
-        (push `(defmacro ,(intern (format "eieio--%s-%s" prefix field)) (x)
-                 ,@(if doc (list (format (if (string-match "\n" doc)
-                                             "Return %s" "Return %s of a %s.")
-                                         doc prefix)))
-                 (list 'aref x ,index))
-              defs)
-        (setq index (1+ index))))
-    `(eval-and-compile
-       ,@(nreverse defs)
-       (defconst ,(intern (format "eieio--%s-num-slots" prefix)) ,index))))
-
-(eieio--define-field-accessors class
-  (-unused-0 ;;FIXME: not sure, but at least there was no accessor!
-   (symbol "symbol (self-referencing)")
-   parent children
-   (symbol-obarray "obarray permitting fast access to variable position 
indexes")
-   ;; @todo
-   ;; the word "public" here is leftovers from the very first version.
-   ;; Get rid of it!
-   (public-a "class attribute index")
-   (public-d "class attribute defaults index")
-   (public-doc "class documentation strings for attributes")
-   (public-type "class type for a slot")
-   (public-custom "class custom type for a slot")
-   (public-custom-label "class custom group for a slot")
-   (public-custom-group "class custom group for a slot")
-   (public-printer "printer for a slot")
-   (protection "protection for a slot")
-   (initarg-tuples "initarg tuples list")
-   (class-allocation-a "class allocated attributes")
-   (class-allocation-doc "class allocated documentation")
-   (class-allocation-type "class allocated value type")
-   (class-allocation-custom "class allocated custom descriptor")
-   (class-allocation-custom-label "class allocated custom descriptor")
-   (class-allocation-custom-group "class allocated custom group")
-   (class-allocation-printer "class allocated printer for a slot")
-   (class-allocation-protection "class allocated protection list")
-   (class-allocation-values "class allocated value vector")
-   (default-object-cache "what a newly created object would look like.
-This will speed up instantiation time as only a `copy-sequence' will
-be needed, instead of looping over all the values and setting them
-from the default.")
-   (options "storage location of tagged class options.
-Stored outright without modifications or stripping.")))
-
-(eieio--define-field-accessors object
-  (-unused-0 ;;FIXME: not sure, but at least there was no accessor!
-   (class "class struct defining OBJ")
-   name))
-
-;; FIXME: The constants below should have an `eieio-' prefix added!!
-
-(defconst method-static 0 "Index into :static tag on a method.")
-(defconst method-before 1 "Index into :before tag on a method.")
-(defconst method-primary 2 "Index into :primary tag on a method.")
-(defconst method-after 3 "Index into :after tag on a method.")
-(defconst method-num-lists 4 "Number of indexes into methods vector in which 
groups of functions are kept.")
-(defconst method-generic-before 4 "Index into generic :before tag on a 
method.")
-(defconst method-generic-primary 5 "Index into generic :primary tag on a 
method.")
-(defconst method-generic-after 6 "Index into generic :after tag on a method.")
-(defconst method-num-slots 7 "Number of indexes into a method's vector.")
-
-(defsubst eieio-specialized-key-to-generic-key (key)
-  "Convert a specialized KEY into a generic method key."
-  (cond ((eq key method-static) 0) ;; don't convert
-       ((< key method-num-lists) (+ key 3)) ;; The conversion
-       (t key) ;; already generic.. maybe.
-       ))
+(defsubst eieio--object-class-object (obj)
+  (symbol-value (eieio--object-class-tag obj)))
+
+(defsubst eieio--object-class-name (obj)
+  ;; FIXME: Most uses of this function should be changed to use
+  ;; eieio--object-class-object instead!
+  (eieio--class-symbol (eieio--object-class-object obj)))
 
 
 ;;; Important macros used internally in eieio.
-;;
-(defmacro eieio--check-type (type obj)
-  (unless (symbolp obj)
-    (error "eieio--check-type wants OBJ to be a variable"))
-  `(if (not ,(cond
-              ((eq 'or (car-safe type))
-               `(or ,@(mapcar (lambda (type) `(,type ,obj)) (cdr type))))
-              (t `(,type ,obj))))
-       (signal 'wrong-type-argument (list ',type ,obj))))
-
-(defmacro class-v (class)
+
+(defmacro eieio--class-v (class)        ;Use a macro, so it acts as a GV place.
   "Internal: Return the class vector from the CLASS symbol."
+  (declare (debug t))
   ;; No check: If eieio gets this far, it has probably been checked already.
   `(get ,class 'eieio-class-definition))
 
-(defmacro class-p (class)
-  "Return t if CLASS is a valid class vector.
-CLASS is a symbol."
-  ;; this new method is faster since it doesn't waste time checking lots of
-  ;; things.
-  `(condition-case nil
-       (eq (aref (class-v ,class) 0) 'defclass)
-     (error nil)))
-
-(defun eieio-class-name (class) "Return a Lisp like symbol name for CLASS."
-  (eieio--check-type class-p class)
+(defsubst eieio--class-object (class)
+  "Return the class object."
+  (if (symbolp class)
+      ;; Keep the symbol if class-v is nil, for better error messages.
+      (or (eieio--class-v class) class)
+    class))
+
+(defsubst eieio--class-p (class)
+  "Return non-nil if CLASS is a valid class object."
+  (condition-case nil
+      (eq (aref class 0) 'defclass)
+    (error nil)))
+
+(defun class-p (class)
+  "Return non-nil if CLASS is a valid class vector.
+CLASS is a symbol."                     ;FIXME: Is it a vector or a symbol?
+  (and (symbolp class) (eieio--class-p (eieio--class-v class))))
+
+(defun eieio-class-name (class)
+  "Return a Lisp like symbol name for CLASS."
+  ;; FIXME: What's a "Lisp like symbol name"?
+  ;; FIXME: CLOS returns a symbol, but the code returns a string.
+  (if (eieio--class-p class) (setq class (eieio--class-symbol class)))
+  (cl-check-type class class)
   ;; I think this is supposed to return a symbol, but to me CLASS is a symbol,
   ;; and I wanted a string.  Arg!
   (format "#<class %s>" (symbol-name class)))
 (define-obsolete-function-alias 'class-name #'eieio-class-name "24.4")
 
-(defmacro eieio-class-parents-fast (class)
-  "Return parent classes to CLASS with no check."
-  `(eieio--class-parent (class-v ,class)))
-
-(defmacro eieio-class-children-fast (class) "Return child classes to CLASS 
with no check."
-  `(eieio--class-children (class-v ,class)))
-
-(defmacro same-class-fast-p (obj class)
-  "Return t if OBJ is of class-type CLASS with no error checking."
-  `(eq (eieio--object-class ,obj) ,class))
-
-(defmacro class-constructor (class)
-  "Return the symbol representing the constructor of CLASS."
-  `(eieio--class-symbol (class-v ,class)))
-
-(defmacro generic-p (method)
-  "Return t if symbol METHOD is a generic function.
-Only methods have the symbol `eieio-method-obarray' as a property
-\(which contains a list of all bindings to that method type.)"
-  `(and (fboundp ,method) (get ,method 'eieio-method-obarray)))
-
-(defun generic-primary-only-p (method)
-  "Return t if symbol METHOD is a generic function with only primary methods.
-Only methods have the symbol `eieio-method-obarray' as a property (which
-contains a list of all bindings to that method type.)
-Methods with only primary implementations are executed in an optimized way."
-  (and (generic-p method)
-       (let ((M (get method 'eieio-method-tree)))
-        (and (< 0 (length (aref M method-primary)))
-             (not (aref M method-static))
-             (not (aref M method-before))
-             (not (aref M method-after))
-             (not (aref M method-generic-before))
-             (not (aref M method-generic-primary))
-             (not (aref M method-generic-after))))
-       ))
-
-(defun generic-primary-only-one-p (method)
-  "Return t if symbol METHOD is a generic function with only primary methods.
-Only methods have the symbol `eieio-method-obarray' as a property (which
-contains a list of all bindings to that method type.)
-Methods with only primary implementations are executed in an optimized way."
-  (and (generic-p method)
-       (let ((M (get method 'eieio-method-tree)))
-        (and (= 1 (length (aref M method-primary)))
-             (not (aref M method-static))
-             (not (aref M method-before))
-             (not (aref M method-after))
-             (not (aref M method-generic-before))
-             (not (aref M method-generic-primary))
-             (not (aref M method-generic-after))))
-       ))
-
-(defmacro class-option-assoc (list option)
+(defalias 'eieio--class-constructor #'identity
+  "Return the symbol representing the constructor of CLASS.")
+
+(defmacro eieio--class-option-assoc (list option)
   "Return from LIST the found OPTION, or nil if it doesn't exist."
   `(car-safe (cdr (memq ,option ,list))))
 
-(defmacro class-option (class option)
+(defsubst eieio--class-option (class option)
   "Return the value stored for CLASS' OPTION.
 Return nil if that option doesn't exist."
-  `(class-option-assoc (eieio--class-options (class-v ,class)) ',option))
+  (eieio--class-option-assoc (eieio--class-options class) option))
 
-(defmacro eieio-object-p (obj)
+(defun eieio-object-p (obj)
   "Return non-nil if OBJ is an EIEIO object."
-  `(condition-case nil
-       (let ((tobj ,obj))
-        (and (eq (aref tobj 0) 'object)
-             (class-p (eieio--object-class tobj))))
-     (error nil)))
-(defalias 'object-p 'eieio-object-p)
-
-(defmacro class-abstract-p (class)
+  (and (vectorp obj)
+       (> (length obj) 0)
+       (let ((tag (eieio--object-class-tag obj)))
+         (and (symbolp tag)
+              ;; (eq (symbol-function tag) :quick-object-witness-check)
+              (boundp tag)
+              (eieio--class-p (symbol-value tag))))))
+
+(define-obsolete-function-alias 'object-p 'eieio-object-p "25.1")
+
+(defsubst class-abstract-p (class)
   "Return non-nil if CLASS is abstract.
 Abstract classes cannot be instantiated."
-  `(class-option ,class :abstract))
+  (eieio--class-option (eieio--class-v class) :abstract))
 
-(defmacro class-method-invocation-order (class)
+(defsubst eieio--class-method-invocation-order (class)
   "Return the invocation order of CLASS.
 Abstract classes cannot be instantiated."
-  `(or (class-option ,class :method-invocation-order)
-       :breadth-first))
+  (or (eieio--class-option class :method-invocation-order)
+      :breadth-first))
 
 
 
 ;;;
 ;; Class Creation
 
-(defvar eieio-defclass-autoload-map (make-vector 7 nil)
+(defvar eieio-defclass-autoload-map (make-hash-table)
   "Symbol map of superclasses we find in autoloads.")
 
 ;; We autoload this because it's used in `make-autoload'.
 ;;;###autoload
-(defun eieio-defclass-autoload (cname superclasses filename doc)
+(defun eieio-defclass-autoload (cname _superclasses filename doc)
   "Create autoload symbols for the EIEIO class CNAME.
 SUPERCLASSES are the superclasses that CNAME inherits from.
 DOC is the docstring for CNAME.
@@ -323,76 +246,38 @@ SUPERCLASSES as children.
 It creates an autoload function for CNAME's constructor."
   ;; Assume we've already debugged inputs.
 
-  (let* ((oldc (when (class-p cname) (class-v cname)))
-        (newc (make-vector eieio--class-num-slots nil))
-        )
-    (if oldc
+  ;; We used to store the list of superclasses in the `parent' slot (as a list
+  ;; of class names).  But now this slot holds a list of class objects, and
+  ;; those parents may not exist yet, so the corresponding class objects may
+  ;; simply not exist yet.  So instead we just don't store the list of parents
+  ;; here in eieio-defclass-autoload at all, since it seems that they're just
+  ;; not needed before the class is actually loaded.
+  (let* ((oldc (eieio--class-v cname))
+        (newc (eieio--class-make cname)))
+    (if (eieio--class-p oldc)
        nil ;; Do nothing if we already have this class.
 
-      ;; Create the class in NEWC, but don't fill anything else in.
-      (aset newc 0 'defclass)
-      (setf (eieio--class-symbol newc) cname)
-
-      (let ((clear-parent nil))
-       ;; No parents?
-       (when (not superclasses)
-         (setq superclasses '(eieio-default-superclass)
-               clear-parent t)
-         )
-
-       ;; Hook our new class into the existing structures so we can
-       ;; autoload it later.
-       (dolist (SC superclasses)
-
-
-         ;; TODO - If we create an autoload that is in the map, that
-         ;;        map needs to be cleared!
-
-
-         ;; Does our parent exist?
-         (if (not (class-p SC))
-
-             ;; Create a symbol for this parent, and then store this
-             ;; parent on that symbol.
-             (let ((sym (intern (symbol-name SC) eieio-defclass-autoload-map)))
-               (if (not (boundp sym))
-                   (set sym (list cname))
-                 (add-to-list sym cname))
-               )
-
-           ;; We have a parent, save the child in there.
-           (when (not (member cname (eieio--class-children (class-v SC))))
-             (setf (eieio--class-children (class-v SC))
-                   (cons cname (eieio--class-children (class-v SC))))))
-
-         ;; save parent in child
-         (setf (eieio--class-parent newc) (cons SC (eieio--class-parent newc)))
-         )
-
-       ;; turn this into a usable self-pointing symbol
-       (set cname cname)
-
-       ;; Store the new class vector definition into the symbol.  We need to
-       ;; do this first so that we can call defmethod for the accessor.
-       ;; The vector will be updated by the following while loop and will not
-       ;; need to be stored a second time.
-       (put cname 'eieio-class-definition newc)
-
-       ;; Clear the parent
-       (if clear-parent (setf (eieio--class-parent newc) nil))
+      ;; turn this into a usable self-pointing symbol
+      (when eieio-backward-compatibility
+        (set cname cname)
+        (make-obsolete-variable cname (format "use '%s instead" cname) "25.1"))
 
-       ;; Create an autoload on top of our constructor function.
-       (autoload cname filename doc nil nil)
-       (autoload (intern (concat (symbol-name cname) "-p")) filename "" nil 
nil)
-       (autoload (intern (concat (symbol-name cname) "-child-p")) filename "" 
nil nil)
-       (autoload (intern (concat (symbol-name cname) "-list-p")) filename "" 
nil nil)
+      ;; Store the new class vector definition into the symbol.  We need to
+      ;; do this first so that we can call defmethod for the accessor.
+      ;; The vector will be updated by the following while loop and will not
+      ;; need to be stored a second time.
+      (setf (eieio--class-v cname) newc)
 
-       ))))
+      ;; Create an autoload on top of our constructor function.
+      (autoload cname filename doc nil nil)
+      (autoload (intern (format "%s-p" cname)) filename "" nil nil)
+      (when eieio-backward-compatibility
+        (autoload (intern (format "%s-child-p" cname)) filename "" nil nil)
+        (autoload (intern (format "%s-list-p" cname)) filename "" nil nil)))))
 
 (defsubst eieio-class-un-autoload (cname)
   "If class CNAME is in an autoload state, load its file."
-  (when (eq (car-safe (symbol-function cname)) 'autoload)
-    (load-library (car (cdr (symbol-function cname))))))
+  (autoload-do-load (symbol-function cname))) ; cname
 
 (cl-deftype list-of (elem-type)
   `(and list
@@ -400,11 +285,26 @@ It creates an autoload function for CNAME's constructor."
                      (cl-every (lambda (elem) (cl-typep elem ',elem-type))
                                list)))))
 
-(defun eieio-defclass (cname superclasses slots options-and-doc)
-  ;; FIXME: Most of this should be moved to the `defclass' macro.
+
+(defun eieio-make-class-predicate (class)
+  (lambda (obj)
+    ;; (:docstring (format "Test OBJ to see if it's an object of type %S."
+    ;;                     class))
+    (and (eieio-object-p obj)
+         (same-class-p obj class))))
+
+(defun eieio-make-child-predicate (class)
+  (lambda (obj)
+    ;; (:docstring (format
+    ;;              "Test OBJ to see if it's an object is a child of type %S."
+    ;;              class))
+    (and (eieio-object-p obj)
+         (object-of-class-p obj class))))
+
+(defun eieio-defclass-internal (cname superclasses slots options)
   "Define CNAME as a new subclass of SUPERCLASSES.
-SLOTS are the slots residing in that class definition, and options or
-documentation OPTIONS-AND-DOC is the toplevel documentation for this class.
+SLOTS are the slots residing in that class definition, and OPTIONS
+holds the class options.
 See `defclass' for more information."
   ;; Run our eieio-hook each time, and clear it when we are done.
   ;; This way people can add hooks safely if they want to modify eieio
@@ -412,18 +312,17 @@ See `defclass' for more information."
   (run-hooks 'eieio-hook)
   (setq eieio-hook nil)
 
-  (eieio--check-type listp superclasses)
-
   (let* ((pname superclasses)
-        (newc (make-vector eieio--class-num-slots nil))
-        (oldc (when (class-p cname) (class-v cname)))
+        (oldc (let ((c (eieio--class-v cname))) (if (eieio--class-p c) c)))
+        (newc (if (and oldc (not (eieio--class-default-object-cache oldc)))
+                   ;; The oldc class is a stub setup by 
eieio-defclass-autoload.
+                   ;; Reuse it instead of creating a new one, so that existing
+                   ;; references are still valid.
+                   oldc
+                 (eieio--class-make cname)))
         (groups nil) ;; list of groups id'd from slots
-        (options nil)
         (clearparent nil))
 
-    (aset newc 0 'defclass)
-    (setf (eieio--class-symbol newc) cname)
-
     ;; If this class already existed, and we are updating its structure,
     ;; make sure we keep the old child list.  This can cause bugs, but
     ;; if no new slots are created, it also saves time, and prevents
@@ -431,123 +330,69 @@ See `defclass' for more information."
     ;; byte compiling an EIEIO file.
     (if oldc
        (setf (eieio--class-children newc) (eieio--class-children oldc))
-      ;; If the old class did not exist, but did exist in the autoload map, 
then adopt those children.
-      ;; This is like the above, but deals with autoloads nicely.
-      (let ((sym (intern-soft (symbol-name cname) 
eieio-defclass-autoload-map)))
-       (when sym
-         (condition-case nil
-             (setf (eieio--class-children newc) (symbol-value sym))
-           (error nil))
-         (unintern (symbol-name cname) eieio-defclass-autoload-map)
-         ))
-      )
-
-    (cond ((and (stringp (car options-and-doc))
-               (/= 1 (% (length options-and-doc) 2)))
-          (error "Too many arguments to `defclass'"))
-         ((and (symbolp (car options-and-doc))
-               (/= 0 (% (length options-and-doc) 2)))
-          (error "Too many arguments to `defclass'"))
-         )
-
-    (setq options
-         (if (stringp (car options-and-doc))
-             (cons :documentation options-and-doc)
-           options-and-doc))
+      ;; If the old class did not exist, but did exist in the autoload map,
+      ;; then adopt those children.  This is like the above, but deals with
+      ;; autoloads nicely.
+      (let ((children (gethash cname eieio-defclass-autoload-map)))
+       (when children
+          (setf (eieio--class-children newc) children)
+         (remhash cname eieio-defclass-autoload-map))))
 
     (if pname
        (progn
-         (while pname
-           (if (and (car pname) (symbolp (car pname)))
-               (if (not (class-p (car pname)))
+         (dolist (p pname)
+           (if (not (and p (symbolp p)))
+               (error "Invalid parent class %S" p)
+              (let ((c (eieio--class-v p)))
+                (if (not (eieio--class-p c))
                    ;; bad class
-                   (error "Given parent class %s is not a class" (car pname))
+                   (error "Given parent class %S is not a class" p)
                  ;; good parent class...
                  ;; save new child in parent
-                 (when (not (member cname (eieio--class-children (class-v (car 
pname)))))
-                   (setf (eieio--class-children (class-v (car pname)))
-                         (cons cname (eieio--class-children (class-v (car 
pname))))))
+                  (cl-pushnew cname (eieio--class-children c))
                  ;; Get custom groups, and store them into our local copy.
                  (mapc (lambda (g) (cl-pushnew g groups :test #'equal))
-                       (class-option (car pname) :custom-groups))
-                 ;; save parent in child
-                 (setf (eieio--class-parent newc) (cons (car pname) 
(eieio--class-parent newc))))
-             (error "Invalid parent class %s" pname))
-           (setq pname (cdr pname)))
+                       (eieio--class-option c :custom-groups))
+                 ;; Save parent in child.
+                  (push c (eieio--class-parent newc))))))
          ;; Reverse the list of our parents so that they are prioritized in
          ;; the same order as specified in the code.
-         (setf (eieio--class-parent newc) (nreverse (eieio--class-parent 
newc))) )
+         (cl-callf nreverse (eieio--class-parent newc)))
       ;; If there is nothing to loop over, then inherit from the
       ;; default superclass.
       (unless (eq cname 'eieio-default-superclass)
        ;; adopt the default parent here, but clear it later...
        (setq clearparent t)
-       ;; save new child in parent
-       (if (not (member cname (eieio--class-children (class-v 
'eieio-default-superclass))))
-           (setf (eieio--class-children (class-v 'eieio-default-superclass))
-                 (cons cname (eieio--class-children (class-v 
'eieio-default-superclass)))))
-       ;; save parent in child
-       (setf (eieio--class-parent newc) (list eieio-default-superclass))))
-
-    ;; turn this into a usable self-pointing symbol
-    (set cname cname)
-
-    ;; These two tests must be created right away so we can have self-
-    ;; referencing classes.  ei, a class whose slot can contain only
-    ;; pointers to itself.
-
-    ;; Create the test function
-    (let ((csym (intern (concat (symbol-name cname) "-p"))))
-      (fset csym
-           (list 'lambda (list 'obj)
-                 (format "Test OBJ to see if it an object of type %s" cname)
-                 (list 'and '(eieio-object-p obj)
-                       (list 'same-class-p 'obj cname)))))
-
-    ;; Make sure the method invocation order  is a valid value.
-    (let ((io (class-option-assoc options :method-invocation-order)))
-      (when (and io (not (member io '(:depth-first :breadth-first :c3))))
-       (error "Method invocation order %s is not allowed" io)
-       ))
+        ;; save new child in parent
+        (cl-pushnew cname (eieio--class-children eieio-default-superclass))
+        ;; save parent in child
+        (setf (eieio--class-parent newc) (list eieio-default-superclass))))
 
-    ;; Create a handy child test too
-    (let ((csym (intern (concat (symbol-name cname) "-child-p"))))
-      (fset csym
-           `(lambda (obj)
-              ,(format
-                 "Test OBJ to see if it an object is a child of type %s"
-                 cname)
-              (and (eieio-object-p obj)
-                   (object-of-class-p obj ,cname))))
+    ;; turn this into a usable self-pointing symbol;  FIXME: Why?
+    (when eieio-backward-compatibility
+      (set cname cname)
+      (make-obsolete-variable cname (format "use '%s instead" cname) "25.1"))
 
     ;; Create a handy list of the class test too
-    (let ((csym (intern (concat (symbol-name cname) "-list-p"))))
-      (fset csym
-           `(lambda (obj)
-              ,(format
-                 "Test OBJ to see if it a list of objects which are a child of 
type %s"
-                 cname)
-              (when (listp obj)
-                (let ((ans t)) ;; nil is valid
-                  ;; Loop over all the elements of the input list, test
-                  ;; each to make sure it is a child of the desired object 
class.
-                  (while (and obj ans)
-                    (setq ans (and (eieio-object-p (car obj))
-                                   (object-of-class-p (car obj) ,cname)))
-                    (setq obj (cdr obj)))
-                  ans)))))
-
-      ;; When using typep, (typep OBJ 'myclass) returns t for objects which
-      ;; are subclasses of myclass.  For our predicates, however, it is
-      ;; important for EIEIO to be backwards compatible, where
-      ;; myobject-p, and myobject-child-p are different.
-      ;; "cl" uses this technique to specify symbols with specific typep
-      ;; test, so we can let typep have the CLOS documented behavior
-      ;; while keeping our above predicate clean.
-
-      ;; FIXME: It would be cleaner to use `cl-deftype' here.
-      (put cname 'cl-deftype-handler
-          (list 'lambda () `(list 'satisfies (quote ,csym)))))
+    (when eieio-backward-compatibility
+      (let ((csym (intern (concat (symbol-name cname) "-list-p"))))
+        (defalias csym
+              `(lambda (obj)
+                 ,(format
+                   "Test OBJ to see if it a list of objects which are a child 
of type %s"
+                   cname)
+                 (when (listp obj)
+                   (let ((ans t)) ;; nil is valid
+                     ;; Loop over all the elements of the input list, test
+                     ;; each to make sure it is a child of the desired object 
class.
+                     (while (and obj ans)
+                       (setq ans (and (eieio-object-p (car obj))
+                                      (object-of-class-p (car obj) ,cname)))
+                       (setq obj (cdr obj)))
+                     ans))))
+        (make-obsolete csym (format "use (cl-typep ... '(list-of %s)) instead"
+                                    cname)
+                       "25.1")))
 
     ;; Before adding new slots, let's add all the methods and classes
     ;; in from the parent class.
@@ -557,78 +402,45 @@ See `defclass' for more information."
     ;; do this first so that we can call defmethod for the accessor.
     ;; The vector will be updated by the following while loop and will not
     ;; need to be stored a second time.
-    (put cname 'eieio-class-definition newc)
+    (setf (eieio--class-v cname) newc)
 
     ;; Query each slot in the declaration list and mangle into the
     ;; class structure I have defined.
-    (while slots
-      (let* ((slot1  (car slots))
-            (name    (car slot1))
-            (slot   (cdr slot1))
-            (acces   (plist-get slot ':accessor))
-            (init    (or (plist-get slot ':initform)
-                         (if (member ':initform slot) nil
+    (pcase-dolist (`(,name . ,slot) slots)
+      (let* ((init    (or (plist-get slot :initform)
+                         (if (member :initform slot) nil
                            eieio-unbound)))
-            (initarg (plist-get slot ':initarg))
-            (docstr  (plist-get slot ':documentation))
-            (prot    (plist-get slot ':protection))
-            (reader  (plist-get slot ':reader))
-            (writer  (plist-get slot ':writer))
-            (alloc   (plist-get slot ':allocation))
-            (type    (plist-get slot ':type))
-            (custom  (plist-get slot ':custom))
-            (label   (plist-get slot ':label))
-            (customg (plist-get slot ':group))
-            (printer (plist-get slot ':printer))
-
-            (skip-nil (class-option-assoc options :allow-nil-initform))
+            (initarg (plist-get slot :initarg))
+            (docstr  (plist-get slot :documentation))
+            (prot    (plist-get slot :protection))
+            (alloc   (plist-get slot :allocation))
+            (type    (plist-get slot :type))
+            (custom  (plist-get slot :custom))
+            (label   (plist-get slot :label))
+            (customg (plist-get slot :group))
+            (printer (plist-get slot :printer))
+
+            (skip-nil (eieio--class-option-assoc options :allow-nil-initform))
             )
 
-       (if eieio-error-unsupported-class-tags
-           (let ((tmp slot))
-             (while tmp
-               (if (not (member (car tmp) '(:accessor
-                                            :initform
-                                            :initarg
-                                            :documentation
-                                            :protection
-                                            :reader
-                                            :writer
-                                            :allocation
-                                            :type
-                                            :custom
-                                            :label
-                                            :group
-                                            :printer
-                                            :allow-nil-initform
-                                            :custom-groups)))
-                   (signal 'invalid-slot-type (list (car tmp))))
-               (setq tmp (cdr (cdr tmp))))))
-
        ;; Clean up the meaning of protection.
-       (cond ((or (eq prot 'public) (eq prot :public)) (setq prot nil))
-             ((or (eq prot 'protected) (eq prot :protected)) (setq prot 
'protected))
-             ((or (eq prot 'private) (eq prot :private)) (setq prot 'private))
-             ((eq prot nil) nil)
-             (t (signal 'invalid-slot-type (list ':protection prot))))
-
-       ;; Make sure the :allocation parameter has a valid value.
-       (if (not (or (not alloc) (eq alloc :class) (eq alloc :instance)))
-           (signal 'invalid-slot-type (list ':allocation alloc)))
+        (setq prot
+              (pcase prot
+                ((or 'nil 'public ':public) nil)
+                ((or 'protected ':protected) 'protected)
+                ((or 'private ':private) 'private)
+                (_ (signal 'invalid-slot-type (list :protection prot)))))
 
        ;; The default type specifier is supposed to be t, meaning anything.
        (if (not type) (setq type t))
 
-       ;; Label is nil, or a string
-       (if (not (or (null label) (stringp label)))
-           (signal 'invalid-slot-type (list ':label label)))
-
-       ;; Is there an initarg, but allocation of class?
-       (if (and initarg (eq alloc :class))
-           (message "Class allocated slots do not need :initarg"))
-
        ;; intern the symbol so we can use it blankly
-       (if initarg (set initarg initarg))
+        (if eieio-backward-compatibility
+            (and initarg (not (keywordp initarg))
+                 (progn
+                   (set initarg initarg)
+                   (make-obsolete-variable
+                    initarg (format "use '%s instead" initarg) "25.1"))))
 
        ;; The customgroup should be a list of symbols
        (cond ((null customg)
@@ -638,143 +450,66 @@ See `defclass' for more information."
        ;; The customgroup better be a symbol, or list of symbols.
        (mapc (lambda (cg)
                (if (not (symbolp cg))
-                   (signal 'invalid-slot-type (list ':group cg))))
+                   (signal 'invalid-slot-type (list :group cg))))
                customg)
 
        ;; First up, add this slot into our new class.
-       (eieio-add-new-slot newc name init docstr type custom label customg 
printer
+       (eieio--add-new-slot newc name init docstr type custom label customg 
printer
                             prot initarg alloc 'defaultoverride skip-nil)
 
        ;; We need to id the group, and store them in a group list attribute.
-       (mapc (lambda (cg) (cl-pushnew cg groups :test 'equal)) customg)
-
-       ;; Anyone can have an accessor function.  This creates a function
-       ;; of the specified name, and also performs a `defsetf' if applicable
-       ;; so that users can `setf' the space returned by this function.
-       (if acces
-           (progn
-             (eieio--defmethod
-               acces (if (eq alloc :class) :static :primary) cname
-               `(lambda (this)
-                  ,(format
-                      "Retrieves the slot `%s' from an object of class `%s'"
-                      name cname)
-                  (if (slot-boundp this ',name)
-                      (eieio-oref this ',name)
-                           ;; Else - Some error?  nil?
-                           nil)))
-
-              ;; FIXME: We should move more of eieio-defclass into the
-              ;; defclass macro so we don't have to use `eval' and require
-              ;; `gv' at run-time.
-              (eval `(gv-define-setter ,acces (eieio--store eieio--object)
-                       (list 'eieio-oset eieio--object '',name
-                             eieio--store)))))
-
-       ;; If a writer is defined, then create a generic method of that
-       ;; name whose purpose is to set the value of the slot.
-       (if writer
-            (eieio--defmethod
-             writer nil cname
-             `(lambda (this value)
-                ,(format "Set the slot `%s' of an object of class `%s'"
-                             name cname)
-                (setf (slot-value this ',name) value))))
-       ;; If a reader is defined, then create a generic method
-       ;; of that name whose purpose is to access this slot value.
-       (if reader
-            (eieio--defmethod
-             reader nil cname
-             `(lambda (this)
-                ,(format "Access the slot `%s' from object of class `%s'"
-                             name cname)
-                (slot-value this ',name))))
-       )
-      (setq slots (cdr slots)))
+       (dolist (cg customg)
+          (cl-pushnew cg groups :test 'equal))
+       ))
 
     ;; Now that everything has been loaded up, all our lists are backwards!
     ;; Fix that up now.
-    (setf (eieio--class-public-a newc) (nreverse (eieio--class-public-a newc)))
-    (setf (eieio--class-public-d newc) (nreverse (eieio--class-public-d newc)))
-    (setf (eieio--class-public-doc newc) (nreverse (eieio--class-public-doc 
newc)))
-    (setf (eieio--class-public-type newc)
-         (apply #'vector (nreverse (eieio--class-public-type newc))))
-    (setf (eieio--class-public-custom newc) (nreverse 
(eieio--class-public-custom newc)))
-    (setf (eieio--class-public-custom-label newc) (nreverse 
(eieio--class-public-custom-label newc)))
-    (setf (eieio--class-public-custom-group newc) (nreverse 
(eieio--class-public-custom-group newc)))
-    (setf (eieio--class-public-printer newc) (nreverse 
(eieio--class-public-printer newc)))
-    (setf (eieio--class-protection newc) (nreverse (eieio--class-protection 
newc)))
-    (setf (eieio--class-initarg-tuples newc) (nreverse 
(eieio--class-initarg-tuples newc)))
+    (cl-callf nreverse (eieio--class-public-a newc))
+    (cl-callf nreverse (eieio--class-public-d newc))
+    (cl-callf nreverse (eieio--class-public-doc newc))
+    (cl-callf (lambda (types) (apply #'vector (nreverse types)))
+        (eieio--class-public-type newc))
+    (cl-callf nreverse (eieio--class-public-custom newc))
+    (cl-callf nreverse (eieio--class-public-custom-label newc))
+    (cl-callf nreverse (eieio--class-public-custom-group newc))
+    (cl-callf nreverse (eieio--class-public-printer newc))
+    (cl-callf nreverse (eieio--class-protection newc))
+    (cl-callf nreverse (eieio--class-initarg-tuples newc))
 
     ;; The storage for class-class-allocation-type needs to be turned into
     ;; a vector now.
-    (setf (eieio--class-class-allocation-type newc)
-         (apply #'vector (eieio--class-class-allocation-type newc)))
+    (cl-callf (lambda (cat) (apply #'vector cat))
+        (eieio--class-class-allocation-type newc))
 
     ;; Also, take class allocated values, and vectorize them for speed.
-    (setf (eieio--class-class-allocation-values newc)
-         (apply #'vector (eieio--class-class-allocation-values newc)))
-
-    ;; Attach slot symbols into an obarray, and store the index of
-    ;; this slot as the variable slot in this new symbol.  We need to
-    ;; know about primes, because obarrays are best set in vectors of
-    ;; prime number length, and we also need to make our vector small
-    ;; to save space, and also optimal for the number of items we have.
+    (cl-callf (lambda (cavs) (apply #'vector cavs))
+        (eieio--class-class-allocation-values newc))
+
+    ;; Attach slot symbols into a hashtable, and store the index of
+    ;; this slot as the value this table.
     (let* ((cnt 0)
           (pubsyms (eieio--class-public-a newc))
           (prots (eieio--class-protection newc))
-          (l (length pubsyms))
-          (vl (let ((primes '( 3 5 7 11 13 17 19 23 29 31 37 41 43 47
-                                 53 59 61 67 71 73 79 83 89 97 101 )))
-                (while (and primes (< (car primes) l))
-                  (setq primes (cdr primes)))
-                (car primes)))
-          (oa (make-vector vl 0))
-          (newsym))
+          (oa (make-hash-table :test #'eq)))
       (while pubsyms
-       (setq newsym (intern (symbol-name (car pubsyms)) oa))
-       (set newsym cnt)
-       (setq cnt (1+ cnt))
-       (if (car prots) (put newsym 'protection (car prots)))
+       (let ((newsym (list cnt)))
+          (setf (gethash (car pubsyms) oa) newsym)
+          (setq cnt (1+ cnt))
+          (if (car prots) (setcdr newsym (car prots))))
        (setq pubsyms (cdr pubsyms)
              prots (cdr prots)))
-      (setf (eieio--class-symbol-obarray newc) oa)
-      )
-
-    ;; Create the constructor function
-    (if (class-option-assoc options :abstract)
-       ;; Abstract classes cannot be instantiated.  Say so.
-       (let ((abs (class-option-assoc options :abstract)))
-         (if (not (stringp abs))
-             (setq abs (format "Class %s is abstract" cname)))
-         (fset cname
-               `(lambda (&rest stuff)
-                  ,(format "You cannot create a new object of type %s" cname)
-                  (error ,abs))))
-
-      ;; Non-abstract classes need a constructor.
-      (fset cname
-           `(lambda (newname &rest slots)
-              ,(format "Create a new object with name NAME of class type %s" 
cname)
-              (apply #'constructor ,cname newname slots)))
-      )
+      (setf (eieio--class-symbol-hashtable newc) oa))
 
     ;; Set up a specialized doc string.
     ;; Use stored value since it is calculated in a non-trivial way
     (put cname 'variable-documentation
-        (class-option-assoc options :documentation))
+        (eieio--class-option-assoc options :documentation))
 
     ;; Save the file location where this class is defined.
-    (let ((fname (if load-in-progress
-                    load-file-name
-                  buffer-file-name)))
-      (when fname
-       (when (string-match "\\.elc\\'" fname)
-         (setq fname (substring fname 0 (1- (length fname)))))
-       (put cname 'class-location fname)))
+    (add-to-list 'current-load-list `(eieio-defclass . ,cname))
 
     ;; We have a list of custom groups.  Store them into the options.
-    (let ((g (class-option-assoc options :custom-groups)))
+    (let ((g (eieio--class-option-assoc options :custom-groups)))
       (mapc (lambda (cg) (cl-pushnew cg g :test 'equal)) groups)
       (if (memq :custom-groups options)
          (setcar (cdr (memq :custom-groups options)) g)
@@ -788,11 +523,18 @@ See `defclass' for more information."
     (if clearparent (setf (eieio--class-parent newc) nil))
 
     ;; Create the cached default object.
-    (let ((cache (make-vector (+ (length (eieio--class-public-a newc)) 3)
-                              nil)))
-      (aset cache 0 'object)
-      (setf (eieio--object-class cache) cname)
-      (setf (eieio--object-name cache) 'default-cache-object)
+    (let ((cache (make-vector (+ (length (eieio--class-public-a newc))
+                                 (eval-when-compile eieio--object-num-slots))
+                              nil))
+          ;; We don't strictly speaking need to use a symbol, but the old
+          ;; code used the class's name rather than the class's object, so
+          ;; we follow this preference for using a symbol, which is probably
+          ;; convenient to keep the printed representation of such Elisp
+          ;; objects readable.
+          (tag (intern (format "eieio-class-tag--%s" cname))))
+      (set tag newc)
+      (fset tag :quick-object-witness-check)
+      (setf (eieio--object-class-tag cache) tag)
       (let ((eieio-skip-typecheck t))
        ;; All type-checking has been done to our satisfaction
        ;; before this call.  Don't waste our time in this call..
@@ -808,16 +550,16 @@ See `defclass' for more information."
   "Whether the default value VAL should be evaluated for use."
   (and (consp val) (symbolp (car val)) (fboundp (car val))))
 
-(defun eieio-perform-slot-validation-for-default (slot spec value skipnil)
+(defun eieio--perform-slot-validation-for-default (slot spec value skipnil)
   "For SLOT, signal if SPEC does not match VALUE.
 If SKIPNIL is non-nil, then if VALUE is nil return t instead."
-  (if (and (not (eieio-eval-default-p value))
-          (not eieio-skip-typecheck)
-          (not (and skipnil (null value)))
-          (not (eieio-perform-slot-validation spec value)))
+  (if (not (or (eieio-eval-default-p value) ;FIXME: Why?
+               eieio-skip-typecheck
+               (and skipnil (null value))
+               (eieio--perform-slot-validation spec value)))
       (signal 'invalid-slot-type (list slot spec value))))
 
-(defun eieio-add-new-slot (newc a d doc type cust label custg print prot init 
alloc
+(defun eieio--add-new-slot (newc a d doc type cust label custg print prot init 
alloc
                                 &optional defaultoverride skipnil)
   "Add into NEWC attribute A.
 If A already exists in NEWC, then do nothing.  If it doesn't exist,
@@ -838,9 +580,9 @@ if default value is nil."
 
   ;; To prevent override information w/out specification of storage,
   ;; we need to do this little hack.
-  (if (member a (eieio--class-class-allocation-a newc)) (setq alloc ':class))
+  (if (member a (eieio--class-class-allocation-a newc)) (setq alloc :class))
 
-  (if (or (not alloc) (and (symbolp alloc) (eq alloc ':instance)))
+  (if (or (not alloc) (and (symbolp alloc) (eq alloc :instance)))
       ;; In this case, we modify the INSTANCE version of a given slot.
 
       (progn
@@ -848,16 +590,16 @@ if default value is nil."
        ;; Only add this element if it is so-far unique
        (if (not (member a (eieio--class-public-a newc)))
            (progn
-             (eieio-perform-slot-validation-for-default a type d skipnil)
-             (setf (eieio--class-public-a newc) (cons a (eieio--class-public-a 
newc)))
-             (setf (eieio--class-public-d newc) (cons d (eieio--class-public-d 
newc)))
-             (setf (eieio--class-public-doc newc) (cons doc 
(eieio--class-public-doc newc)))
-             (setf (eieio--class-public-type newc) (cons type 
(eieio--class-public-type newc)))
-             (setf (eieio--class-public-custom newc) (cons cust 
(eieio--class-public-custom newc)))
-             (setf (eieio--class-public-custom-label newc) (cons label 
(eieio--class-public-custom-label newc)))
-             (setf (eieio--class-public-custom-group newc) (cons custg 
(eieio--class-public-custom-group newc)))
-             (setf (eieio--class-public-printer newc) (cons print 
(eieio--class-public-printer newc)))
-             (setf (eieio--class-protection newc) (cons prot 
(eieio--class-protection newc)))
+             (eieio--perform-slot-validation-for-default a type d skipnil)
+             (push a (eieio--class-public-a newc))
+             (push d (eieio--class-public-d newc))
+             (push doc (eieio--class-public-doc newc))
+             (push type (eieio--class-public-type newc))
+             (push cust (eieio--class-public-custom newc))
+             (push label (eieio--class-public-custom-label newc))
+             (push custg (eieio--class-public-custom-group newc))
+             (push print (eieio--class-public-printer newc))
+             (push prot (eieio--class-protection newc))
              (setf (eieio--class-initarg-tuples newc) (cons (cons init a) 
(eieio--class-initarg-tuples newc)))
              )
          ;; When defaultoverride is true, we are usually adding new local
@@ -883,7 +625,7 @@ if default value is nil."
                         type tp a)))
                ;; If we have a repeat, only update the initarg...
                (unless (eq d eieio-unbound)
-                 (eieio-perform-slot-validation-for-default a tp d skipnil)
+                 (eieio--perform-slot-validation-for-default a tp d skipnil)
                  (setcar dp d))
                ;; If we have a new initarg, check for it.
                (when init
@@ -960,19 +702,19 @@ if default value is nil."
     (let ((value (eieio-default-eval-maybe d)))
       (if (not (member a (eieio--class-class-allocation-a newc)))
          (progn
-           (eieio-perform-slot-validation-for-default a type value skipnil)
+           (eieio--perform-slot-validation-for-default a type value skipnil)
            ;; Here we have found a :class version of a slot.  This
            ;; requires a very different approach.
-           (setf (eieio--class-class-allocation-a newc) (cons a 
(eieio--class-class-allocation-a newc)))
-           (setf (eieio--class-class-allocation-doc newc) (cons doc 
(eieio--class-class-allocation-doc newc)))
-           (setf (eieio--class-class-allocation-type newc) (cons type 
(eieio--class-class-allocation-type newc)))
-           (setf (eieio--class-class-allocation-custom newc) (cons cust 
(eieio--class-class-allocation-custom newc)))
-           (setf (eieio--class-class-allocation-custom-label newc) (cons label 
(eieio--class-class-allocation-custom-label newc)))
-           (setf (eieio--class-class-allocation-custom-group newc) (cons custg 
(eieio--class-class-allocation-custom-group newc)))
-           (setf (eieio--class-class-allocation-protection newc) (cons prot 
(eieio--class-class-allocation-protection newc)))
+           (push a (eieio--class-class-allocation-a newc))
+           (push doc (eieio--class-class-allocation-doc newc))
+           (push type (eieio--class-class-allocation-type newc))
+           (push cust (eieio--class-class-allocation-custom newc))
+           (push label (eieio--class-class-allocation-custom-label newc))
+           (push custg (eieio--class-class-allocation-custom-group newc))
+           (push prot (eieio--class-class-allocation-protection newc))
            ;; Default value is stored in the 'values section, since new objects
            ;; can't initialize from this element.
-           (setf (eieio--class-class-allocation-values newc) (cons value 
(eieio--class-class-allocation-values newc))))
+           (push value (eieio--class-class-allocation-values newc)))
        (when defaultoverride
          ;; There is a match, and we must override the old value.
          (let* ((ca (eieio--class-class-allocation-a newc))
@@ -997,7 +739,7 @@ if default value is nil."
              ;;       is to change the default, so allow unbound in.
 
              ;; If we have a repeat, only update the value...
-             (eieio-perform-slot-validation-for-default a tp value skipnil)
+             (eieio--perform-slot-validation-for-default a tp value skipnil)
              (setcar dp value))
 
            ;; PLN Tue Jun 26 11:57:06 2007 : The protection is
@@ -1046,246 +788,81 @@ if default value is nil."
   "Copy into NEWC the slots of PARENTS.
 Follow the rules of not overwriting early parents when applying to
 the new child class."
-  (let ((ps (eieio--class-parent newc))
-       (sn (class-option-assoc (eieio--class-options newc)
-                               ':allow-nil-initform)))
-    (while ps
+  (let ((sn (eieio--class-option-assoc (eieio--class-options newc)
+                                       :allow-nil-initform)))
+    (dolist (pcv (eieio--class-parent newc))
       ;; First, duplicate all the slots of the parent.
-      (let ((pcv (class-v (car ps))))
-       (let ((pa (eieio--class-public-a pcv))
-             (pd (eieio--class-public-d pcv))
-             (pdoc (eieio--class-public-doc pcv))
-             (ptype (eieio--class-public-type pcv))
-             (pcust (eieio--class-public-custom pcv))
-             (plabel (eieio--class-public-custom-label pcv))
-             (pcustg (eieio--class-public-custom-group pcv))
-             (printer (eieio--class-public-printer pcv))
-             (pprot (eieio--class-protection pcv))
-             (pinit (eieio--class-initarg-tuples pcv))
-             (i 0))
-         (while pa
-           (eieio-add-new-slot newc
-                                (car pa) (car pd) (car pdoc) (aref ptype i)
-                                (car pcust) (car plabel) (car pcustg)
-                                (car printer)
-                                (car pprot) (car-safe (car pinit)) nil nil sn)
-           ;; Increment each value.
-           (setq pa (cdr pa)
-                 pd (cdr pd)
-                 pdoc (cdr pdoc)
-                 i (1+ i)
-                 pcust (cdr pcust)
-                 plabel (cdr plabel)
-                 pcustg (cdr pcustg)
-                 printer (cdr printer)
-                 pprot (cdr pprot)
-                 pinit (cdr pinit))
-           )) ;; while/let
-       ;; Now duplicate all the class alloc slots.
-       (let ((pa (eieio--class-class-allocation-a pcv))
-             (pdoc (eieio--class-class-allocation-doc pcv))
-             (ptype (eieio--class-class-allocation-type pcv))
-             (pcust (eieio--class-class-allocation-custom pcv))
-             (plabel (eieio--class-class-allocation-custom-label pcv))
-             (pcustg (eieio--class-class-allocation-custom-group pcv))
-             (printer (eieio--class-class-allocation-printer pcv))
-             (pprot (eieio--class-class-allocation-protection pcv))
-             (pval (eieio--class-class-allocation-values pcv))
-             (i 0))
-         (while pa
-           (eieio-add-new-slot newc
-                                (car pa) (aref pval i) (car pdoc) (aref ptype 
i)
-                                (car pcust) (car plabel) (car pcustg)
-                                (car printer)
-                                (car pprot) nil ':class sn)
-           ;; Increment each value.
-           (setq pa (cdr pa)
-                 pdoc (cdr pdoc)
-                 pcust (cdr pcust)
-                 plabel (cdr plabel)
-                 pcustg (cdr pcustg)
-                 printer (cdr printer)
-                 pprot (cdr pprot)
-                 i (1+ i))
-           ))) ;; while/let
-      ;; Loop over each parent class
-      (setq ps (cdr ps)))
-    ))
+      (let ((pa (eieio--class-public-a pcv))
+            (pd (eieio--class-public-d pcv))
+            (pdoc (eieio--class-public-doc pcv))
+            (ptype (eieio--class-public-type pcv))
+            (pcust (eieio--class-public-custom pcv))
+            (plabel (eieio--class-public-custom-label pcv))
+            (pcustg (eieio--class-public-custom-group pcv))
+            (printer (eieio--class-public-printer pcv))
+            (pprot (eieio--class-protection pcv))
+            (pinit (eieio--class-initarg-tuples pcv))
+            (i 0))
+        (while pa
+          (eieio--add-new-slot newc
+                               (car pa) (car pd) (car pdoc) (aref ptype i)
+                               (car pcust) (car plabel) (car pcustg)
+                               (car printer)
+                               (car pprot) (car-safe (car pinit)) nil nil sn)
+          ;; Increment each value.
+          (setq pa (cdr pa)
+                pd (cdr pd)
+                pdoc (cdr pdoc)
+                i (1+ i)
+                pcust (cdr pcust)
+                plabel (cdr plabel)
+                pcustg (cdr pcustg)
+                printer (cdr printer)
+                pprot (cdr pprot)
+                pinit (cdr pinit))
+          )) ;; while/let
+      ;; Now duplicate all the class alloc slots.
+      (let ((pa (eieio--class-class-allocation-a pcv))
+            (pdoc (eieio--class-class-allocation-doc pcv))
+            (ptype (eieio--class-class-allocation-type pcv))
+            (pcust (eieio--class-class-allocation-custom pcv))
+            (plabel (eieio--class-class-allocation-custom-label pcv))
+            (pcustg (eieio--class-class-allocation-custom-group pcv))
+            (printer (eieio--class-class-allocation-printer pcv))
+            (pprot (eieio--class-class-allocation-protection pcv))
+            (pval (eieio--class-class-allocation-values pcv))
+            (i 0))
+        (while pa
+          (eieio--add-new-slot newc
+                               (car pa) (aref pval i) (car pdoc) (aref ptype i)
+                               (car pcust) (car plabel) (car pcustg)
+                               (car printer)
+                               (car pprot) nil :class sn)
+          ;; Increment each value.
+          (setq pa (cdr pa)
+                pdoc (cdr pdoc)
+                pcust (cdr pcust)
+                plabel (cdr plabel)
+                pcustg (cdr pcustg)
+                printer (cdr printer)
+                pprot (cdr pprot)
+                i (1+ i))
+          )))))
 
 
-;;; CLOS methods and generics
-;;
-
-(defun eieio--defgeneric-init-form (method doc-string)
-  "Form to use for the initial definition of a generic."
-  (cond
-   ((or (not (fboundp method))
-        (eq 'autoload (car-safe (symbol-function method))))
-    ;; Make sure the method tables are installed.
-    (eieiomt-install method)
-    ;; Construct the actual body of this function.
-    (eieio-defgeneric-form method doc-string))
-   ((generic-p method) (symbol-function method))           ;Leave it as-is.
-   (t (error "You cannot create a generic/method over an existing symbol: %s"
-             method))))
-
-(defun eieio-defgeneric-form (method doc-string)
-  "The lambda form that would be used as the function defined on METHOD.
-All methods should call the same EIEIO function for dispatch.
-DOC-STRING is the documentation attached to METHOD."
-  `(lambda (&rest local-args)
-     ,doc-string
-     (eieio-generic-call (quote ,method) local-args)))
-
-(defsubst eieio-defgeneric-reset-generic-form (method)
-  "Setup METHOD to call the generic form."
-  (let ((doc-string (documentation method)))
-    (fset method (eieio-defgeneric-form method doc-string))))
-
-(defun eieio-defgeneric-form-primary-only (method doc-string)
-  "The lambda form that would be used as the function defined on METHOD.
-All methods should call the same EIEIO function for dispatch.
-DOC-STRING is the documentation attached to METHOD."
-  `(lambda (&rest local-args)
-     ,doc-string
-     (eieio-generic-call-primary-only (quote ,method) local-args)))
-
-(defsubst eieio-defgeneric-reset-generic-form-primary-only (method)
-  "Setup METHOD to call the generic form."
-  (let ((doc-string (documentation method)))
-    (fset method (eieio-defgeneric-form-primary-only method doc-string))))
-
-(declare-function no-applicable-method "eieio" (object method &rest args))
-
-(defun eieio-defgeneric-form-primary-only-one (method doc-string
-                                                     class
-                                                     impl
-                                                     )
-  "The lambda form that would be used as the function defined on METHOD.
-All methods should call the same EIEIO function for dispatch.
-DOC-STRING is the documentation attached to METHOD.
-CLASS is the class symbol needed for private method access.
-IMPL is the symbol holding the method implementation."
-  ;; NOTE: I tried out byte compiling this little fcn.  Turns out it
-  ;; is faster to execute this for not byte-compiled.  ie, install this,
-  ;; then measure calls going through here.  I wonder why.
-  (require 'bytecomp)
-  (let ((byte-compile-warnings nil))
-    (byte-compile
-     `(lambda (&rest local-args)
-       ,doc-string
-       ;; This is a cool cheat.  Usually we need to look up in the
-       ;; method table to find out if there is a method or not.  We can
-       ;; instead make that determination at load time when there is
-       ;; only one method.  If the first arg is not a child of the class
-       ;; of that one implementation, then clearly, there is no method def.
-       (if (not (eieio-object-p (car local-args)))
-           ;; Not an object.  Just signal.
-           (signal 'no-method-definition
-                    (list ',method local-args))
-
-         ;; We do have an object.  Make sure it is the right type.
-         (if ,(if (eq class eieio-default-superclass)
-                  nil  ; default superclass means just an obj.  Already asked.
-                `(not (child-of-class-p (eieio--object-class (car local-args))
-                                        ',class)))
-
-             ;; If not the right kind of object, call no applicable
-             (apply #'no-applicable-method (car local-args)
-                    ',method local-args)
-
-           ;; It is ok, do the call.
-           ;; Fill in inter-call variables then evaluate the method.
-           (let ((eieio-generic-call-next-method-list nil)
-                 (eieio-generic-call-key method-primary)
-                 (eieio-generic-call-methodname ',method)
-                 (eieio-generic-call-arglst local-args)
-                 )
-             (eieio--with-scoped-class ',class
-               ,(if (< emacs-major-version 24)
-                    `(apply ,(list 'quote impl) local-args)
-                  `(apply #',impl local-args)))
-             ;(,impl local-args)
-             )))))))
-
-(defsubst eieio-defgeneric-reset-generic-form-primary-only-one (method)
-  "Setup METHOD to call the generic form."
-  (let* ((doc-string (documentation method))
-        (M (get method 'eieio-method-tree))
-        (entry (car (aref M method-primary)))
-        )
-    (fset method (eieio-defgeneric-form-primary-only-one
-                 method doc-string
-                 (car entry)
-                 (cdr entry)
-                 ))))
-
-(defun eieio-unbind-method-implementations (method)
-  "Make the generic method METHOD have no implementations.
-It will leave the original generic function in place,
-but remove reference to all implementations of METHOD."
-  (put method 'eieio-method-tree nil)
-  (put method 'eieio-method-obarray nil))
-
-(defun eieio--defmethod (method kind argclass code)
-  "Work part of the `defmethod' macro defining METHOD with ARGS."
-  (let ((key
-         ;; Find optional keys.
-         (cond ((memq kind '(:BEFORE :before)) method-before)
-               ((memq kind '(:AFTER :after)) method-after)
-               ((memq kind '(:STATIC :static)) method-static)
-               ((memq kind '(:PRIMARY :primary nil)) method-primary)
-               ;; Primary key.
-               ;; (t method-primary)
-               (t (error "Unknown method kind %S" kind)))))
-    ;; Make sure there is a generic (when called from defclass).
-    (eieio--defalias
-     method (eieio--defgeneric-init-form
-             method (or (documentation code)
-                        (format "Generically created method `%s'." method))))
-    ;; Create symbol for property to bind to.  If the first arg is of
-    ;; the form (varname vartype) and `vartype' is a class, then
-    ;; that class will be the type symbol.  If not, then it will fall
-    ;; under the type `primary' which is a non-specific calling of the
-    ;; function.
-    (if argclass
-        (if (not (class-p argclass))
-            (error "Unknown class type %s in method parameters"
-                   argclass))
-      ;; Generics are higher.
-      (setq key (eieio-specialized-key-to-generic-key key)))
-    ;; Put this lambda into the symbol so we can find it.
-    (eieiomt-add method code key argclass)
-    )
-
-  (when eieio-optimize-primary-methods-flag
-    ;; Optimizing step:
-    ;;
-    ;; If this method, after this setup, only has primary methods, then
-    ;; we can setup the generic that way.
-    (if (generic-primary-only-p method)
-       ;; If there is only one primary method, then we can go one more
-       ;; optimization step.
-       (if (generic-primary-only-one-p method)
-           (eieio-defgeneric-reset-generic-form-primary-only-one method)
-         (eieio-defgeneric-reset-generic-form-primary-only method))
-      (eieio-defgeneric-reset-generic-form method)))
-
-  method)
-
 ;;; Slot type validation
 
 ;; This is a hideous hack for replacing `typep' from cl-macs, to avoid
 ;; requiring the CL library at run-time.  It can be eliminated if/when
 ;; `typep' is merged into Emacs core.
 
-(defun eieio-perform-slot-validation (spec value)
+(defun eieio--perform-slot-validation (spec value)
   "Return non-nil if SPEC does not match VALUE."
   (or (eq spec t)                      ; t always passes
       (eq value eieio-unbound)         ; unbound always passes
       (cl-typep value spec)))
 
-(defun eieio-validate-slot-value (class slot-idx value slot)
+(defun eieio--validate-slot-value (class slot-idx value slot)
   "Make sure that for CLASS referencing SLOT-IDX, VALUE is valid.
 Checks the :type specifier.
 SLOT is the slot that is being checked, and is only used when throwing
@@ -1293,22 +870,24 @@ an error."
   (if eieio-skip-typecheck
       nil
     ;; Trim off object IDX junk added in for the object index.
-    (setq slot-idx (- slot-idx 3))
-    (let ((st (aref (eieio--class-public-type (class-v class)) slot-idx)))
-      (if (not (eieio-perform-slot-validation st value))
-         (signal 'invalid-slot-type (list class slot st value))))))
+    (setq slot-idx (- slot-idx (eval-when-compile eieio--object-num-slots)))
+    (let ((st (aref (eieio--class-public-type class) slot-idx)))
+      (if (not (eieio--perform-slot-validation st value))
+         (signal 'invalid-slot-type
+                  (list (eieio--class-symbol class) slot st value))))))
 
-(defun eieio-validate-class-slot-value (class slot-idx value slot)
+(defun eieio--validate-class-slot-value (class slot-idx value slot)
   "Make sure that for CLASS referencing SLOT-IDX, VALUE is valid.
 Checks the :type specifier.
 SLOT is the slot that is being checked, and is only used when throwing
 an error."
   (if eieio-skip-typecheck
       nil
-    (let ((st (aref (eieio--class-class-allocation-type (class-v class))
+    (let ((st (aref (eieio--class-class-allocation-type class)
                    slot-idx)))
-      (if (not (eieio-perform-slot-validation st value))
-         (signal 'invalid-slot-type (list class slot st value))))))
+      (if (not (eieio--perform-slot-validation st value))
+         (signal 'invalid-slot-type
+                  (list (eieio--class-symbol class) slot st value))))))
 
 (defun eieio-barf-if-slot-unbound (value instance slotname fn)
   "Throw a signal if VALUE is a representation of an UNBOUND slot.
@@ -1316,7 +895,7 @@ INSTANCE is the object being referenced.  SLOTNAME is the 
offending
 slot.  If the slot is ok, return VALUE.
 Argument FN is the function calling this verifier."
   (if (and (eq value eieio-unbound) (not eieio-skip-typecheck))
-      (slot-unbound instance (eieio--object-class instance) slotname fn)
+      (slot-unbound instance (eieio--object-class-name instance) slotname fn)
     value))
 
 
@@ -1324,52 +903,60 @@ Argument FN is the function calling this verifier."
 ;;
 (defun eieio-oref (obj slot)
   "Return the value in OBJ at SLOT in the object vector."
-  (eieio--check-type (or eieio-object-p class-p) obj)
-  (eieio--check-type symbolp slot)
-  (if (class-p obj) (eieio-class-un-autoload obj))
-  (let* ((class (if (class-p obj) obj (eieio--object-class obj)))
-        (c (eieio-slot-name-index class obj slot)))
+  (cl-check-type slot symbol)
+  (cl-check-type obj (or eieio-object class))
+  (let* ((class (cond ((symbolp obj)
+                       (error "eieio-oref called on a class!")
+                       (let ((c (eieio--class-v obj)))
+                         (if (eieio--class-p c) (eieio-class-un-autoload obj))
+                         c))
+                      (t (eieio--object-class-object obj))))
+        (c (eieio--slot-name-index class obj slot)))
     (if (not c)
        ;; It might be missing because it is a :class allocated slot.
        ;; Let's check that info out.
-       (if (setq c (eieio-class-slot-name-index class slot))
+       (if (setq c (eieio--class-slot-name-index class slot))
            ;; Oref that slot.
-           (aref (eieio--class-class-allocation-values (class-v class)) c)
+           (aref (eieio--class-class-allocation-values class) c)
          ;; The slot-missing method is a cool way of allowing an object author
          ;; to intercept missing slot definitions.  Since it is also the LAST
          ;; thing called in this fn, its return value would be retrieved.
          (slot-missing obj slot 'oref)
          ;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
          )
-      (eieio--check-type eieio-object-p obj)
+      (cl-check-type obj eieio-object)
       (eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref))))
 
 
 (defun eieio-oref-default (obj slot)
   "Do the work for the macro `oref-default' with similar parameters.
 Fills in OBJ's SLOT with its default value."
-  (eieio--check-type (or eieio-object-p class-p) obj)
-  (eieio--check-type symbolp slot)
-  (let* ((cl (if (eieio-object-p obj) (eieio--object-class obj) obj))
-        (c (eieio-slot-name-index cl obj slot)))
+  (cl-check-type obj (or eieio-object class))
+  (cl-check-type slot symbol)
+  (let* ((cl (cond ((symbolp obj) (eieio--class-v obj))
+                   (t (eieio--object-class-object obj))))
+        (c (eieio--slot-name-index cl obj slot)))
     (if (not c)
        ;; It might be missing because it is a :class allocated slot.
        ;; Let's check that info out.
        (if (setq c
-                 (eieio-class-slot-name-index cl slot))
+                 (eieio--class-slot-name-index cl slot))
            ;; Oref that slot.
-           (aref (eieio--class-class-allocation-values (class-v cl))
+           (aref (eieio--class-class-allocation-values cl)
                  c)
          (slot-missing obj slot 'oref-default)
          ;;(signal 'invalid-slot-name (list (class-name cl) slot))
          )
       (eieio-barf-if-slot-unbound
-       (let ((val (nth (- c 3) (eieio--class-public-d (class-v cl)))))
+       (let ((val (nth (- c (eval-when-compile eieio--object-num-slots))
+                       (eieio--class-public-d cl))))
         (eieio-default-eval-maybe val))
-       obj cl 'oref-default))))
+       obj (eieio--class-symbol cl) 'oref-default))))
 
 (defun eieio-default-eval-maybe (val)
   "Check VAL, and return what `oref-default' would provide."
+  ;; FIXME: What the hell is this supposed to do?  Shouldn't it evaluate
+  ;; variables as well?  Why not just always call `eval'?
   (cond
    ;; Is it a function call?  If so, evaluate it.
    ((eieio-eval-default-p val)
@@ -1383,71 +970,58 @@ Fills in OBJ's SLOT with its default value."
 (defun eieio-oset (obj slot value)
   "Do the work for the macro `oset'.
 Fills in OBJ's SLOT with VALUE."
-  (eieio--check-type eieio-object-p obj)
-  (eieio--check-type symbolp slot)
-  (let ((c (eieio-slot-name-index (eieio--object-class obj) obj slot)))
+  (cl-check-type obj eieio-object)
+  (cl-check-type slot symbol)
+  (let* ((class (eieio--object-class-object obj))
+         (c (eieio--slot-name-index class obj slot)))
     (if (not c)
        ;; It might be missing because it is a :class allocated slot.
        ;; Let's check that info out.
        (if (setq c
-                 (eieio-class-slot-name-index (eieio--object-class obj) slot))
+                 (eieio--class-slot-name-index class slot))
            ;; Oset that slot.
            (progn
-             (eieio-validate-class-slot-value (eieio--object-class obj) c 
value slot)
-             (aset (eieio--class-class-allocation-values (class-v 
(eieio--object-class obj)))
+             (eieio--validate-class-slot-value class c value slot)
+             (aset (eieio--class-class-allocation-values class)
                    c value))
          ;; See oref for comment on `slot-missing'
          (slot-missing obj slot 'oset value)
          ;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
          )
-      (eieio-validate-slot-value (eieio--object-class obj) c value slot)
+      (eieio--validate-slot-value class c value slot)
       (aset obj c value))))
 
 (defun eieio-oset-default (class slot value)
   "Do the work for the macro `oset-default'.
 Fills in the default value in CLASS' in SLOT with VALUE."
-  (eieio--check-type class-p class)
-  (eieio--check-type symbolp slot)
-  (eieio--with-scoped-class class
-    (let* ((c (eieio-slot-name-index class nil slot)))
-      (if (not c)
-         ;; It might be missing because it is a :class allocated slot.
-         ;; Let's check that info out.
-         (if (setq c (eieio-class-slot-name-index class slot))
-             (progn
-               ;; Oref that slot.
-               (eieio-validate-class-slot-value class c value slot)
-               (aset (eieio--class-class-allocation-values (class-v class)) c
-                     value))
-           (signal 'invalid-slot-name (list (eieio-class-name class) slot)))
-       (eieio-validate-slot-value class c value slot)
-       ;; Set this into the storage for defaults.
-       (setcar (nthcdr (- c 3) (eieio--class-public-d (class-v class)))
-               value)
-       ;; Take the value, and put it into our cache object.
-       (eieio-oset (eieio--class-default-object-cache (class-v class))
-                   slot value)
-       ))))
+  (setq class (eieio--class-object class))
+  (cl-check-type class eieio--class)
+  (cl-check-type slot symbol)
+  (let* ((c (eieio--slot-name-index class nil slot)))
+    (if (not c)
+        ;; It might be missing because it is a :class allocated slot.
+        ;; Let's check that info out.
+        (if (setq c (eieio--class-slot-name-index class slot))
+            (progn
+              ;; Oref that slot.
+              (eieio--validate-class-slot-value class c value slot)
+              (aset (eieio--class-class-allocation-values class) c
+                    value))
+          (signal 'invalid-slot-name (list (eieio--class-symbol class) slot)))
+      (eieio--validate-slot-value class c value slot)
+      ;; Set this into the storage for defaults.
+      (setcar (nthcdr (- c (eval-when-compile eieio--object-num-slots))
+                      (eieio--class-public-d class))
+              value)
+      ;; Take the value, and put it into our cache object.
+      (eieio-oset (eieio--class-default-object-cache class)
+                  slot value)
+      )))
 
 
 ;;; EIEIO internal search functions
 ;;
-(defun eieio-slot-originating-class-p (start-class slot)
-  "Return non-nil if START-CLASS is the first class to define SLOT.
-This is for testing if the class currently in scope is the class that defines 
SLOT
-so that we can protect private slots."
-  (let ((par (eieio-class-parents-fast start-class))
-       (ret t))
-    (if (not par)
-       t
-      (while (and par ret)
-       (if (intern-soft (symbol-name slot)
-                        (eieio--class-symbol-obarray (class-v (car par))))
-           (setq ret nil))
-       (setq par (cdr par)))
-      ret)))
-
-(defun eieio-slot-name-index (class obj slot)
+(defun eieio--slot-name-index (class obj slot)
   "In CLASS for OBJ find the index of the named SLOT.
 The slot is a symbol which is installed in CLASS by the `defclass'
 call.  OBJ can be nil, but if it is an object, and the slot in question
@@ -1456,36 +1030,21 @@ scoped class.
 If SLOT is the value created with :initarg instead,
 reverse-lookup that name, and recurse with the associated slot value."
   ;; Removed checks to outside this call
-  (let* ((fsym (intern-soft (symbol-name slot)
-                           (eieio--class-symbol-obarray (class-v class))))
-        (fsi (if (symbolp fsym) (symbol-value fsym) nil)))
+  (let* ((fsym (gethash slot (eieio--class-symbol-hashtable class)))
+        (fsi (car fsym)))
     (if (integerp fsi)
-       (cond
-        ((not (get fsym 'protection))
-         (+ 3 fsi))
-        ((and (eq (get fsym 'protection) 'protected)
-              (eieio--scoped-class)
-              (or (child-of-class-p class (eieio--scoped-class))
-                  (and (eieio-object-p obj)
-                       (child-of-class-p class (eieio--object-class obj)))))
-         (+ 3 fsi))
-        ((and (eq (get fsym 'protection) 'private)
-              (or (and (eieio--scoped-class)
-                       (eieio-slot-originating-class-p (eieio--scoped-class) 
slot))
-                  eieio-initializing-object))
-         (+ 3 fsi))
-        (t nil))
-      (let ((fn (eieio-initarg-to-attribute class slot)))
-       (if fn (eieio-slot-name-index class obj fn) nil)))))
-
-(defun eieio-class-slot-name-index (class slot)
+        (+ (eval-when-compile eieio--object-num-slots) fsi)
+      (let ((fn (eieio--initarg-to-attribute class slot)))
+       (if fn (eieio--slot-name-index class obj fn) nil)))))
+
+(defun eieio--class-slot-name-index (class slot)
   "In CLASS find the index of the named SLOT.
 The slot is a symbol which is installed in CLASS by the `defclass'
 call.  If SLOT is the value created with :initarg instead,
 reverse-lookup that name, and recurse with the associated slot value."
   ;; This will happen less often, and with fewer slots.  Do this the
   ;; storage cheap way.
-  (let* ((a (eieio--class-class-allocation-a (class-v class)))
+  (let* ((a (eieio--class-class-allocation-a class))
         (l1 (length a))
         (af (memq slot a))
         (l2 (length af)))
@@ -1502,36 +1061,26 @@ reverse-lookup that name, and recurse with the 
associated slot value."
 If SET-ALL is non-nil, then when a default is nil, that value is
 reset.  If SET-ALL is nil, the slots are only reset if the default is
 not nil."
-  (eieio--with-scoped-class (eieio--object-class obj)
-    (let ((eieio-initializing-object t)
-         (pub (eieio--class-public-a (class-v (eieio--object-class obj)))))
-      (while pub
-       (let ((df (eieio-oref-default obj (car pub))))
-         (if (or df set-all)
-             (eieio-oset obj (car pub) df)))
-       (setq pub (cdr pub))))))
-
-(defun eieio-initarg-to-attribute (class initarg)
+  (let ((pub (eieio--class-public-a (eieio--object-class-object obj))))
+    (while pub
+      (let ((df (eieio-oref-default obj (car pub))))
+        (if (or df set-all)
+            (eieio-oset obj (car pub) df)))
+      (setq pub (cdr pub)))))
+
+(defun eieio--initarg-to-attribute (class initarg)
   "For CLASS, convert INITARG to the actual attribute name.
 If there is no translation, pass it in directly (so we can cheat if
 need be... May remove that later...)"
-  (let ((tuple (assoc initarg (eieio--class-initarg-tuples (class-v class)))))
+  (let ((tuple (assoc initarg (eieio--class-initarg-tuples class))))
     (if tuple
        (cdr tuple)
       nil)))
 
-(defun eieio-attribute-to-initarg (class attribute)
-  "In CLASS, convert the ATTRIBUTE into the corresponding init argument tag.
-This is usually a symbol that starts with `:'."
-  (let ((tuple (rassoc attribute (eieio--class-initarg-tuples (class-v 
class)))))
-    (if tuple
-       (car tuple)
-      nil)))
-
 ;;;
 ;; Method Invocation order: C3
-(defun eieio-c3-candidate (class remaining-inputs)
-  "Return CLASS if it can go in the result now, otherwise nil"
+(defun eieio--c3-candidate (class remaining-inputs)
+  "Return CLASS if it can go in the result now, otherwise nil."
   ;; Ensure CLASS is not in any position but the first in any of the
   ;; element lists of REMAINING-INPUTS.
   (and (not (let ((found nil))
@@ -1541,7 +1090,7 @@ This is usually a symbol that starts with `:'."
              found))
        class))
 
-(defun eieio-c3-merge-lists (reversed-partial-result remaining-inputs)
+(defun eieio--c3-merge-lists (reversed-partial-result remaining-inputs)
   "Merge REVERSED-PARTIAL-RESULT REMAINING-INPUTS in a consistent order, if 
possible.
 If a consistent order does not exist, signal an error."
   (if (let ((tail remaining-inputs)
@@ -1560,41 +1109,38 @@ If a consistent order does not exist, signal an error."
           (next (progn
                   (while (and tail (not found))
                     (setq found (and (car tail)
-                                     (eieio-c3-candidate (caar tail)
-                                                         remaining-inputs))
+                                     (eieio--c3-candidate (caar tail)
+                                                           remaining-inputs))
                           tail (cdr tail)))
                   found)))
       (if next
          ;; The graph is consistent so far, add NEXT to result and
          ;; merge input lists, dropping NEXT from their heads where
          ;; applicable.
-         (eieio-c3-merge-lists
+         (eieio--c3-merge-lists
           (cons next reversed-partial-result)
           (mapcar (lambda (l) (if (eq (cl-first l) next) (cl-rest l) l))
                   remaining-inputs))
        ;; The graph is inconsistent, give up
        (signal 'inconsistent-class-hierarchy (list remaining-inputs))))))
 
-(defun eieio-class-precedence-c3 (class)
+(defun eieio--class-precedence-c3 (class)
   "Return all parents of CLASS in c3 order."
-  (let ((parents (eieio-class-parents-fast class)))
-    (eieio-c3-merge-lists
+  (let ((parents (eieio--class-parent (eieio--class-v class))))
+    (eieio--c3-merge-lists
      (list class)
      (append
       (or
-       (mapcar
-       (lambda (x)
-         (eieio-class-precedence-c3 x))
-       parents)
-       '((eieio-default-superclass)))
+       (mapcar #'eieio--class-precedence-c3 parents)
+       `((,eieio-default-superclass)))
       (list parents))))
   )
 ;;;
 ;; Method Invocation Order: Depth First
 
-(defun eieio-class-precedence-dfs (class)
+(defun eieio--class-precedence-dfs (class)
   "Return all parents of CLASS in depth-first order."
-  (let* ((parents (eieio-class-parents-fast class))
+  (let* ((parents (eieio--class-parent class))
         (classes (copy-sequence
                   (apply #'append
                          (list class)
@@ -1602,9 +1148,9 @@ If a consistent order does not exist, signal an error."
                           (mapcar
                            (lambda (parent)
                              (cons parent
-                                   (eieio-class-precedence-dfs parent)))
+                                   (eieio--class-precedence-dfs parent)))
                            parents)
-                          '((eieio-default-superclass))))))
+                          `((,eieio-default-superclass))))))
         (tail classes))
     ;; Remove duplicates.
     (while tail
@@ -1614,563 +1160,191 @@ If a consistent order does not exist, signal an 
error."
 
 ;;;
 ;; Method Invocation Order: Breadth First
-(defun eieio-class-precedence-bfs (class)
+(defun eieio--class-precedence-bfs (class)
   "Return all parents of CLASS in breadth-first order."
-  (let ((result)
-       (queue (or (eieio-class-parents-fast class)
-                  '(eieio-default-superclass))))
+  (let* ((result)
+         (queue (or (eieio--class-parent class)
+                    `(,eieio-default-superclass))))
     (while queue
       (let ((head (pop queue)))
        (unless (member head result)
          (push head result)
-         (unless (eq head 'eieio-default-superclass)
-           (setq queue (append queue (or (eieio-class-parents-fast head)
-                                         '(eieio-default-superclass))))))))
+         (unless (eq head eieio-default-superclass)
+           (setq queue (append queue (or (eieio--class-parent head)
+                                         `(,eieio-default-superclass))))))))
     (cons class (nreverse result)))
   )
 
 ;;;
 ;; Method Invocation Order
 
-(defun eieio-class-precedence-list (class)
+(defun eieio--class-precedence-list (class)
   "Return (transitively closed) list of parents of CLASS.
 The order, in which the parents are returned depends on the
 method invocation orders of the involved classes."
-  (if (or (null class) (eq class 'eieio-default-superclass))
+  (if (or (null class) (eq class eieio-default-superclass))
       nil
-    (cl-case (class-method-invocation-order class)
+    (unless (eieio--class-default-object-cache class)
+      (eieio-class-un-autoload (eieio--class-symbol class)))
+    (cl-case (eieio--class-method-invocation-order class)
       (:depth-first
-       (eieio-class-precedence-dfs class))
+       (eieio--class-precedence-dfs class))
       (:breadth-first
-       (eieio-class-precedence-bfs class))
+       (eieio--class-precedence-bfs class))
       (:c3
-       (eieio-class-precedence-c3 class))))
+       (eieio--class-precedence-c3 class))))
   )
 (define-obsolete-function-alias
-  'class-precedence-list 'eieio-class-precedence-list "24.4")
-
-
-;;; CLOS generics internal function handling
-;;
-(defvar eieio-generic-call-methodname nil
-  "When using `call-next-method', provides a context on how to do it.")
-(defvar eieio-generic-call-arglst nil
-  "When using `call-next-method', provides a context for parameters.")
-(defvar eieio-generic-call-key nil
-  "When using `call-next-method', provides a context for the current key.
-Keys are a number representing :before, :primary, and :after methods.")
-(defvar eieio-generic-call-next-method-list nil
-  "When executing a PRIMARY or STATIC method, track the 'next-method'.
-During executions, the list is first generated, then as each next method
-is called, the next method is popped off the stack.")
-
-(define-obsolete-variable-alias 'eieio-pre-method-execution-hooks
-  'eieio-pre-method-execution-functions "24.3")
-(defvar eieio-pre-method-execution-functions nil
-  "Abnormal hook run just before an EIEIO method is executed.
-The hook function must accept one argument, the list of forms
-about to be executed.")
-
-(defun eieio-generic-call (method args)
-  "Call METHOD with ARGS.
-ARGS provides the context on which implementation to use.
-This should only be called from a generic function."
-  ;; We must expand our arguments first as they are always
-  ;; passed in as quoted symbols
-  (let ((newargs nil) (mclass nil)  (lambdas nil) (tlambdas nil) (keys nil)
-       (eieio-generic-call-methodname method)
-       (eieio-generic-call-arglst args)
-       (firstarg nil)
-       (primarymethodlist nil))
-    ;; get a copy
-    (setq newargs args
-         firstarg (car newargs))
-    ;; Is the class passed in autoloaded?
-    ;; Since class names are also constructors, they can be autoloaded
-    ;; via the autoload command.  Check for this, and load them in.
-    ;; It is ok if it doesn't turn out to be a class.  Probably want that
-    ;; function loaded anyway.
-    (if (and (symbolp firstarg)
-            (fboundp firstarg)
-            (listp (symbol-function firstarg))
-            (eq 'autoload (car (symbol-function firstarg))))
-       (load (nth 1 (symbol-function firstarg))))
-    ;; Determine the class to use.
-    (cond ((eieio-object-p firstarg)
-          (setq mclass (eieio--object-class firstarg)))
-         ((class-p firstarg)
-          (setq mclass firstarg))
-         )
-    ;; Make sure the class is a valid class
-    ;; mclass can be nil (meaning a generic for should be used.
-    ;; mclass cannot have a value that is not a class, however.
-    (when (and (not (null mclass)) (not (class-p mclass)))
-      (error "Cannot dispatch method %S on class %S"
-            method mclass)
-      )
-    ;; Now create a list in reverse order of all the calls we have
-    ;; make in order to successfully do this right.  Rules:
-    ;; 1) Only call generics if scoped-class is not defined
-    ;;    This prevents multiple calls in the case of recursion
-    ;; 2) Only call static if this is a static method.
-    ;; 3) Only call specifics if the definition allows for them.
-    ;; 4) Call in order based on :before, :primary, and :after
-    (when (eieio-object-p firstarg)
-      ;; Non-static calls do all this stuff.
-
-      ;; :after methods
-      (setq tlambdas
-           (if mclass
-               (eieiomt-method-list method method-after mclass)
-             (list (eieio-generic-form method method-after nil)))
-           ;;(or (and mclass (eieio-generic-form method method-after mclass))
-           ;;  (eieio-generic-form method method-after nil))
-           )
-      (setq lambdas (append tlambdas lambdas)
-           keys (append (make-list (length tlambdas) method-after) keys))
-
-      ;; :primary methods
-      (setq tlambdas
-           (or (and mclass (eieio-generic-form method method-primary mclass))
-               (eieio-generic-form method method-primary nil)))
-      (when tlambdas
-       (setq lambdas (cons tlambdas lambdas)
-             keys (cons method-primary keys)
-             primarymethodlist
-             (eieiomt-method-list method method-primary mclass)))
-
-      ;; :before methods
-      (setq tlambdas
-           (if mclass
-               (eieiomt-method-list method method-before mclass)
-             (list (eieio-generic-form method method-before nil)))
-           ;;(or (and mclass (eieio-generic-form method method-before mclass))
-           ;;  (eieio-generic-form method method-before nil))
-           )
-      (setq lambdas (append tlambdas lambdas)
-           keys (append (make-list (length tlambdas) method-before) keys))
-      )
-
-    (if mclass
-       ;; For the case of a class,
-       ;; if there were no methods found, then there could be :static methods.
-       (when (not lambdas)
-         (setq tlambdas
-               (eieio-generic-form method method-static mclass))
-         (setq lambdas (cons tlambdas lambdas)
-               keys (cons method-static keys)
-               primarymethodlist  ;; Re-use even with bad name here
-               (eieiomt-method-list method method-static mclass)))
-      ;; For the case of no class (ie - mclass == nil) then there may
-      ;; be a primary method.
-      (setq tlambdas
-           (eieio-generic-form method method-primary nil))
-      (when tlambdas
-       (setq lambdas (cons tlambdas lambdas)
-             keys (cons method-primary keys)
-             primarymethodlist
-             (eieiomt-method-list method method-primary nil)))
-      )
-
-    (run-hook-with-args 'eieio-pre-method-execution-functions
-                       primarymethodlist)
-
-    ;; Now loop through all occurrences forms which we must execute
-    ;; (which are happily sorted now) and execute them all!
-    (let ((rval nil) (lastval nil) (found nil))
-      (while lambdas
-       (if (car lambdas)
-           (eieio--with-scoped-class (cdr (car lambdas))
-             (let* ((eieio-generic-call-key (car keys))
-                    (has-return-val
-                     (or (= eieio-generic-call-key method-primary)
-                         (= eieio-generic-call-key method-static)))
-                    (eieio-generic-call-next-method-list
-                     ;; Use the cdr, as the first element is the fcn
-                     ;; we are calling right now.
-                     (when has-return-val (cdr primarymethodlist)))
-                    )
-               (setq found t)
-               ;;(setq rval (apply (car (car lambdas)) newargs))
-               (setq lastval (apply (car (car lambdas)) newargs))
-               (when has-return-val
-                 (setq rval lastval))
-               )))
-       (setq lambdas (cdr lambdas)
-             keys (cdr keys)))
-      (if (not found)
-         (if (eieio-object-p (car args))
-             (setq rval (apply #'no-applicable-method (car args) method args))
-           (signal
-            'no-method-definition
-            (list method args))))
-      rval)))
-
-(defun eieio-generic-call-primary-only (method args)
-  "Call METHOD with ARGS for methods with only :PRIMARY implementations.
-ARGS provides the context on which implementation to use.
-This should only be called from a generic function.
-
-This method is like `eieio-generic-call', but only
-implementations in the :PRIMARY slot are queried.  After many
-years of use, it appears that over 90% of methods in use
-have :PRIMARY implementations only.  We can therefore optimize
-for this common case to improve performance."
-  ;; We must expand our arguments first as they are always
-  ;; passed in as quoted symbols
-  (let ((newargs nil) (mclass nil)  (lambdas nil)
-       (eieio-generic-call-methodname method)
-       (eieio-generic-call-arglst args)
-       (firstarg nil)
-       (primarymethodlist nil)
-       )
-    ;; get a copy
-    (setq newargs args
-         firstarg (car newargs))
-
-    ;; Determine the class to use.
-    (cond ((eieio-object-p firstarg)
-          (setq mclass (eieio--object-class firstarg)))
-         ((not firstarg)
-          (error "Method %s called on nil" method))
-         ((not (eieio-object-p firstarg))
-          (error "Primary-only method %s called on something not an object" 
method))
-         (t
-          (error "EIEIO Error: Improperly classified method %s as primary only"
-                 method)
-         ))
-    ;; Make sure the class is a valid class
-    ;; mclass can be nil (meaning a generic for should be used.
-    ;; mclass cannot have a value that is not a class, however.
-    (when (null mclass)
-      (error "Cannot dispatch method %S on class %S" method mclass)
-      )
-
-    ;; :primary methods
-    (setq lambdas (eieio-generic-form method method-primary mclass))
-    (setq primarymethodlist  ;; Re-use even with bad name here
-         (eieiomt-method-list method method-primary mclass))
-
-    ;; Now loop through all occurrences forms which we must execute
-    ;; (which are happily sorted now) and execute them all!
-    (eieio--with-scoped-class (cdr lambdas)
-      (let* ((rval nil) (lastval nil)
-            (eieio-generic-call-key method-primary)
-            ;; Use the cdr, as the first element is the fcn
-            ;; we are calling right now.
-            (eieio-generic-call-next-method-list (cdr primarymethodlist))
-            )
-
-       (if (or (not lambdas) (not (car lambdas)))
-
-           ;; No methods found for this impl...
-           (if (eieio-object-p (car args))
-               (setq rval (apply #'no-applicable-method
-                                  (car args) method args))
-             (signal
-              'no-method-definition
-              (list method args)))
-
-         ;; Do the regular implementation here.
-
-         (run-hook-with-args 'eieio-pre-method-execution-functions
-                             lambdas)
-
-         (setq lastval (apply (car lambdas) newargs))
-         (setq rval lastval))
-
-       rval))))
-
-(defun eieiomt-method-list (method key class)
-  "Return an alist list of methods lambdas.
-METHOD is the method name.
-KEY represents either :before, or :after methods.
-CLASS is the starting class to search from in the method tree.
-If CLASS is nil, then an empty list of methods should be returned."
-  ;; Note: eieiomt - the MT means MethodTree.  See more comments below
-  ;; for the rest of the eieiomt methods.
-
-  ;; Collect lambda expressions stored for the class and its parent
-  ;; classes.
-  (let (lambdas)
-    (dolist (ancestor (eieio-class-precedence-list class))
-      ;; Lookup the form to use for the PRIMARY object for the next level
-      (let ((tmpl (eieio-generic-form method key ancestor)))
-       (when (and tmpl
-                  (or (not lambdas)
-                      ;; This prevents duplicates coming out of the
-                      ;; class method optimizer.  Perhaps we should
-                      ;; just not optimize before/afters?
-                      (not (member tmpl lambdas))))
-         (push tmpl lambdas))))
-
-    ;; Return collected lambda. For :after methods, return in current
-    ;; order (most general class last); Otherwise, reverse order.
-    (if (eq key method-after)
-       lambdas
-      (nreverse lambdas))))
-
-
-;;;
-;; eieio-method-tree : eieiomt-
-;;
-;; Stored as eieio-method-tree in property list of a generic method
-;;
-;; (eieio-method-tree . [BEFORE PRIMARY AFTER
-;;                       genericBEFORE genericPRIMARY genericAFTER])
-;; and
-;; (eieio-method-obarray . [BEFORE PRIMARY AFTER
-;;                          genericBEFORE genericPRIMARY genericAFTER])
-;;    where the association is a vector.
-;;    (aref 0  -- all static methods.
-;;    (aref 1  -- all methods classified as :before
-;;    (aref 2  -- all methods classified as :primary
-;;    (aref 3  -- all methods classified as :after
-;;    (aref 4  -- a generic classified as :before
-;;    (aref 5  -- a generic classified as :primary
-;;    (aref 6  -- a generic classified as :after
-;;
-(defvar eieiomt-optimizing-obarray nil
-  "While mapping atoms, this contain the obarray being optimized.")
-
-(defun eieiomt-install (method-name)
-  "Install the method tree, and obarray onto METHOD-NAME.
-Do not do the work if they already exist."
-  (let ((emtv (get method-name 'eieio-method-tree))
-       (emto (get method-name 'eieio-method-obarray)))
-    (if (or (not emtv) (not emto))
-       (progn
-         (setq emtv (put method-name 'eieio-method-tree
-                         (make-vector method-num-slots nil))
-               emto (put method-name 'eieio-method-obarray
-                         (make-vector method-num-slots nil)))
-         (aset emto 0 (make-vector 11 0))
-         (aset emto 1 (make-vector 11 0))
-         (aset emto 2 (make-vector 41 0))
-         (aset emto 3 (make-vector 11 0))
-         ))))
-
-(defun eieiomt-add (method-name method key class)
-  "Add to METHOD-NAME the forms METHOD in a call position KEY for CLASS.
-METHOD-NAME is the name created by a call to `defgeneric'.
-METHOD are the forms for a given implementation.
-KEY is an integer (see comment in eieio.el near this function) which
-is associated with the :static :before :primary and :after tags.
-It also indicates if CLASS is defined or not.
-CLASS is the class this method is associated with."
-  (if (or (> key method-num-slots) (< key 0))
-      (error "eieiomt-add: method key error!"))
-  (let ((emtv (get method-name 'eieio-method-tree))
-       (emto (get method-name 'eieio-method-obarray)))
-    ;; Make sure the method tables are available.
-    (if (or (not emtv) (not emto))
-       (error "Programmer error: eieiomt-add"))
-    ;; only add new cells on if it doesn't already exist!
-    (if (assq class (aref emtv key))
-       (setcdr (assq class (aref emtv key)) method)
-      (aset emtv key (cons (cons class method) (aref emtv key))))
-    ;; Add function definition into newly created symbol, and store
-    ;; said symbol in the correct obarray, otherwise use the
-    ;; other array to keep this stuff
-    (if (< key method-num-lists)
-       (let ((nsym (intern (symbol-name class) (aref emto key))))
-         (fset nsym method)))
-    ;; Save the defmethod file location in a symbol property.
-    (let ((fname (if load-in-progress
-                    load-file-name
-                  buffer-file-name))
-         loc)
-      (when fname
-       (when (string-match "\\.elc$" fname)
-         (setq fname (substring fname 0 (1- (length fname)))))
-       (setq loc (get method-name 'method-locations))
-       (cl-pushnew (list class fname) loc :test 'equal)
-       (put method-name 'method-locations loc)))
-    ;; Now optimize the entire obarray
-    (if (< key method-num-lists)
-       (let ((eieiomt-optimizing-obarray (aref emto key)))
-         ;; @todo - Is this overkill?  Should we just clear the symbol?
-         (mapatoms 'eieiomt-sym-optimize eieiomt-optimizing-obarray)))
-    ))
-
-(defun eieiomt-next (class)
-  "Return the next parent class for CLASS.
-If CLASS is a superclass, return variable `eieio-default-superclass'.
-If CLASS is variable `eieio-default-superclass' then return nil.
-This is different from function `class-parent' as class parent returns
-nil for superclasses.  This function performs no type checking!"
-  ;; No type-checking because all calls are made from functions which
-  ;; are safe and do checking for us.
-  (or (eieio-class-parents-fast class)
-      (if (eq class 'eieio-default-superclass)
-         nil
-       '(eieio-default-superclass))))
-
-(defun eieiomt-sym-optimize (s)
-  "Find the next class above S which has a function body for the optimizer."
-  ;; Set the value to nil in case there is no nearest cell.
-  (set s nil)
-  ;; Find the nearest cell that has a function body. If we find one,
-  ;; we replace the nil from above.
-  (let ((external-symbol (intern-soft (symbol-name s))))
-    (catch 'done
-      (dolist (ancestor
-               (cl-rest (eieio-class-precedence-list external-symbol)))
-       (let ((ov (intern-soft (symbol-name ancestor)
-                              eieiomt-optimizing-obarray)))
-         (when (fboundp ov)
-           (set s ov) ;; store ov as our next symbol
-           (throw 'done ancestor)))))))
-
-(defun eieio-generic-form (method key class)
- "Return the lambda form belonging to METHOD using KEY based upon CLASS.
-If CLASS is not a class then use `generic' instead.  If class has
-no form, but has a parent class, then trace to that parent class.
-The first time a form is requested from a symbol, an optimized path
-is memorized for faster future use."
- (let ((emto (aref (get method 'eieio-method-obarray)
-                  (if class key (eieio-specialized-key-to-generic-key key)))))
-   (if (class-p class)
-       ;; 1) find our symbol
-       (let ((cs (intern-soft (symbol-name class) emto)))
-        (if (not cs)
-            ;; 2) If there isn't one, then make one.
-            ;;    This can be slow since it only occurs once
-            (progn
-              (setq cs (intern (symbol-name class) emto))
-              ;; 2.1) Cache its nearest neighbor with a quick optimize
-              ;;      which should only occur once for this call ever
-              (let ((eieiomt-optimizing-obarray emto))
-                (eieiomt-sym-optimize cs))))
-        ;; 3) If it's bound return this one.
-        (if (fboundp  cs)
-            (cons cs (eieio--class-symbol (class-v class)))
-          ;; 4) If it's not bound then this variable knows something
-          (if (symbol-value cs)
-              (progn
-                ;; 4.1) This symbol holds the next class in its value
-                (setq class (symbol-value cs)
-                      cs (intern-soft (symbol-name class) emto))
-                ;; 4.2) The optimizer should always have chosen a
-                ;;      function-symbol
-                ;;(if (fboundp cs)
-                (cons cs (eieio--class-symbol (class-v (intern (symbol-name 
class)))))
-                  ;;(error "EIEIO optimizer: erratic data loss!"))
-                )
-              ;; There never will be a funcall...
-              nil)))
-     ;; for a generic call, what is a list, is the function body we want.
-     (let ((emtl (aref (get method 'eieio-method-tree)
-                      (if class key (eieio-specialized-key-to-generic-key 
key)))))
-       (if emtl
-          ;; The car of EMTL is supposed to be a class, which in this
-          ;; case is nil, so skip it.
-          (cons (cdr (car emtl)) nil)
-        nil)))))
+  'class-precedence-list 'eieio--class-precedence-list "24.4")
 
 
 ;;; Here are some special types of errors
 ;;
-(define-error 'no-method-definition "No method definition")
-(define-error 'no-next-method "No next method")
 (define-error 'invalid-slot-name "Invalid slot name")
 (define-error 'invalid-slot-type "Invalid slot type")
 (define-error 'unbound-slot "Unbound slot")
 (define-error 'inconsistent-class-hierarchy "Inconsistent class hierarchy")
 
-;;; Obsolete backward compatibility functions.
-;; Needed to run byte-code compiled with the EIEIO of Emacs-23.
-
-(defun eieio-defmethod (method args)
-  "Obsolete work part of an old version of the `defmethod' macro."
-  (let ((key nil) (body nil) (firstarg nil) (argfix nil) (argclass nil) loopa)
-    ;; find optional keys
-    (setq key
-         (cond ((memq (car args) '(:BEFORE :before))
-                (setq args (cdr args))
-                method-before)
-               ((memq (car args) '(:AFTER :after))
-                (setq args (cdr args))
-                method-after)
-               ((memq (car args) '(:STATIC :static))
-                (setq args (cdr args))
-                method-static)
-               ((memq (car args) '(:PRIMARY :primary))
-                (setq args (cdr args))
-                method-primary)
-               ;; Primary key.
-               (t method-primary)))
-    ;; Get body, and fix contents of args to be the arguments of the fn.
-    (setq body (cdr args)
-         args (car args))
-    (setq loopa args)
-    ;; Create a fixed version of the arguments.
-    (while loopa
-      (setq argfix (cons (if (listp (car loopa)) (car (car loopa)) (car loopa))
-                        argfix))
-      (setq loopa (cdr loopa)))
-    ;; Make sure there is a generic.
-    (eieio-defgeneric
-     method
-     (if (stringp (car body))
-        (car body) (format "Generically created method `%s'." method)))
-    ;; create symbol for property to bind to.  If the first arg is of
-    ;; the form (varname vartype) and `vartype' is a class, then
-    ;; that class will be the type symbol.  If not, then it will fall
-    ;; under the type `primary' which is a non-specific calling of the
-    ;; function.
-    (setq firstarg (car args))
-    (if (listp firstarg)
-       (progn
-         (setq argclass  (nth 1 firstarg))
-         (if (not (class-p argclass))
-             (error "Unknown class type %s in method parameters"
-                    (nth 1 firstarg))))
-      ;; Generics are higher.
-      (setq key (eieio-specialized-key-to-generic-key key)))
-    ;; Put this lambda into the symbol so we can find it.
-    (if (byte-code-function-p (car-safe body))
-       (eieiomt-add method (car-safe body) key argclass)
-      (eieiomt-add method (append (list 'lambda (reverse argfix)) body)
-                  key argclass))
-    )
-
-  (when eieio-optimize-primary-methods-flag
-    ;; Optimizing step:
-    ;;
-    ;; If this method, after this setup, only has primary methods, then
-    ;; we can setup the generic that way.
-    (if (generic-primary-only-p method)
-       ;; If there is only one primary method, then we can go one more
-       ;; optimization step.
-       (if (generic-primary-only-one-p method)
-           (eieio-defgeneric-reset-generic-form-primary-only-one method)
-         (eieio-defgeneric-reset-generic-form-primary-only method))
-      (eieio-defgeneric-reset-generic-form method)))
-
-  method)
-(make-obsolete 'eieio-defmethod 'eieio--defmethod "24.1")
-
-(defun eieio-defgeneric (method doc-string)
-  "Obsolete work part of an old version of the `defgeneric' macro."
-  (if (and (fboundp method) (not (generic-p method))
-          (or (byte-code-function-p (symbol-function method))
-              (not (eq 'autoload (car (symbol-function method)))))
-          )
-      (error "You cannot create a generic/method over an existing symbol: %s"
-            method))
-  ;; Don't do this over and over.
-  (unless (fboundp 'method)
-    ;; This defun tells emacs where the first definition of this
-    ;; method is defined.
-    `(defun ,method nil)
-    ;; Make sure the method tables are installed.
-    (eieiomt-install method)
-    ;; Apply the actual body of this function.
-    (fset method (eieio-defgeneric-form method doc-string))
-    ;; Return the method
-    'method))
-(make-obsolete 'eieio-defgeneric nil "24.1")
+;;; Hooking into cl-generic.
+
+(require 'cl-generic)
+
+;;;; General support to dispatch based on the type of the argument.
+
+(add-function :before-until cl-generic-tagcode-function
+              #'eieio--generic-tagcode)
+(defun eieio--generic-tagcode (type name)
+  ;; CLHS says:
+  ;;    A class must be defined before it can be used as a parameter
+  ;;    specializer in a defmethod form.
+  ;; So we can ignore types that are not known to denote classes.
+  (and (eieio--class-p (eieio--class-object type))
+       ;; Use the exact same code as for cl-struct, so that methods
+       ;; that dispatch on both kinds of objects get to share this
+       ;; part of the dispatch code.
+       `(50 . ,(cl--generic-struct-tag name))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'eieio--generic-tag-types)
+(defun eieio--generic-tag-types (tag)
+  (and (symbolp tag) (boundp tag) (eieio--class-p (symbol-value tag))
+       (mapcar #'eieio--class-symbol
+               (eieio--class-precedence-list (symbol-value tag)))))
+
+;;;; Dispatch for arguments which are classes.
+
+;; Since EIEIO does not support metaclasses, users can't easily use the
+;; "dispatch on argument type" for class arguments.  That's why EIEIO's
+;; `defmethod' added the :static qualifier.  For cl-generic, such a qualifier
+;; would not make much sense (e.g. to which argument should it apply?).
+;; Instead, we add a new "subclass" specializer.
+
+(add-function :before-until cl-generic-tagcode-function
+              #'eieio--generic-subclass-tagcode)
+(defun eieio--generic-subclass-tagcode (type name)
+  (when (eq 'subclass (car-safe type))
+    `(60 . (and (symbolp ,name) (eieio--class-v ,name)))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'eieio--generic-subclass-tag-types)
+(defun eieio--generic-subclass-tag-types (tag)
+  (when (eieio--class-p tag)
+    (mapcar (lambda (class)
+              `(subclass
+                ,(if (symbolp class) class (eieio--class-symbol class))))
+            (eieio--class-precedence-list tag))))
+
+
+;;;### (autoloads nil "eieio-compat" "eieio-compat.el" 
"b568ffb3c90ed5d0ae673f0051d608ee")
+;;; Generated autoloads from eieio-compat.el
+
+(autoload 'eieio--defalias "eieio-compat" "\
+Like `defalias', but with less side-effects.
+More specifically, it has no side-effects at all when the new function
+definition is the same (`eq') as the old one.
+
+\(fn NAME BODY)" nil nil)
+
+(autoload 'defgeneric "eieio-compat" "\
+Create a generic function METHOD.
+DOC-STRING is the base documentation for this class.  A generic
+function has no body, as its purpose is to decide which method body
+is appropriate to use.  Uses `defmethod' to create methods, and calls
+`defgeneric' for you.  With this implementation the ARGS are
+currently ignored.  You can use `defgeneric' to apply specialized
+top level documentation to a method.
+
+\(fn METHOD ARGS &optional DOC-STRING)" nil t)
+
+(function-put 'defgeneric 'doc-string-elt '3)
+
+(make-obsolete 'defgeneric 'cl-defgeneric '"25.1")
+
+(autoload 'defmethod "eieio-compat" "\
+Create a new METHOD through `defgeneric' with ARGS.
+
+The optional second argument KEY is a specifier that
+modifies how the method is called, including:
+   :before  - Method will be called before the :primary
+   :primary - The default if not specified
+   :after   - Method will be called after the :primary
+   :static  - First arg could be an object or class
+The next argument is the ARGLIST.  The ARGLIST specifies the arguments
+to the method as with `defun'.  The first argument can have a type
+specifier, such as:
+  ((VARNAME CLASS) ARG2 ...)
+where VARNAME is the name of the local variable for the method being
+created.  The CLASS is a class symbol for a class made with `defclass'.
+A DOCSTRING comes after the ARGLIST, and is optional.
+All the rest of the args are the BODY of the method.  A method will
+return the value of the last form in the BODY.
+
+Summary:
+
+ (defmethod mymethod [:before | :primary | :after | :static]
+                     ((typearg class-name) arg2 &optional opt &rest rest)
+    \"doc-string\"
+     body)
+
+\(fn METHOD &rest ARGS)" nil t)
+
+(function-put 'defmethod 'doc-string-elt '3)
+
+(make-obsolete 'defmethod 'cl-defmethod '"25.1")
+
+(autoload 'eieio--defgeneric-init-form "eieio-compat" "\
+
+
+\(fn METHOD DOC-STRING)" nil nil)
+
+(autoload 'eieio--defmethod "eieio-compat" "\
+
+
+\(fn METHOD KIND ARGCLASS CODE)" nil nil)
+
+(autoload 'eieio-defmethod "eieio-compat" "\
+Obsolete work part of an old version of the `defmethod' macro.
+
+\(fn METHOD ARGS)" nil nil)
+
+(make-obsolete 'eieio-defmethod 'cl-defmethod '"24.1")
+
+(autoload 'eieio-defgeneric "eieio-compat" "\
+Obsolete work part of an old version of the `defgeneric' macro.
+
+\(fn METHOD DOC-STRING)" nil nil)
+
+(make-obsolete 'eieio-defgeneric 'cl-defgeneric '"24.1")
+
+(autoload 'eieio-defclass "eieio-compat" "\
+
+
+\(fn CNAME SUPERCLASSES SLOTS OPTIONS)" nil nil)
+
+(make-obsolete 'eieio-defclass 'eieio-defclass-internal '"25.1")
+
+;;;***
+
 
 (provide 'eieio-core)
 
diff --git a/lisp/emacs-lisp/eieio-custom.el b/lisp/emacs-lisp/eieio-custom.el
index df153ee..0e0b31e 100644
--- a/lisp/emacs-lisp/eieio-custom.el
+++ b/lisp/emacs-lisp/eieio-custom.el
@@ -1,6 +1,6 @@
-;;; eieio-custom.el -- eieio object customization
+;;; eieio-custom.el -- eieio object customization  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2001, 2005, 2007-2014 Free Software Foundation,
+;; Copyright (C) 1999-2001, 2005, 2007-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
@@ -70,7 +70,7 @@ of these.")
             :documentation "A number of thingies."))
   "A class for testing the widget on.")
 
-(defcustom eieio-widget-test (eieio-widget-test-class "Foo")
+(defcustom eieio-widget-test (eieio-widget-test-class)
   "Test variable for editing an object."
   :type 'object
   :group 'eieio)
@@ -136,7 +136,7 @@ Updates occur regardless of the current customization 
group.")
           ))
     (widget-value-set vc (widget-value vc))))
 
-(defun eieio-custom-toggle-parent (widget &rest ignore)
+(defun eieio-custom-toggle-parent (widget &rest _)
   "Toggle visibility of parent of WIDGET.
 Optional argument IGNORE is an extraneous parameter."
   (eieio-custom-toggle-hide (widget-get widget :parent)))
@@ -154,7 +154,7 @@ Optional argument IGNORE is an extraneous parameter."
   :clone-object-children nil
   )
 
-(defun eieio-object-match (widget value)
+(defun eieio-object-match (_widget _value)
   "Match info for WIDGET against VALUE."
   ;; Write me
   t)
@@ -184,7 +184,7 @@ Optional argument IGNORE is an extraneous parameter."
   (if (not (widget-get widget :value))
       (widget-put widget
                  :value (cond ((widget-get widget :objecttype)
-                               (funcall (class-constructor
+                               (funcall (eieio--class-constructor
                                          (widget-get widget :objecttype))
                                         "Custom-new"))
                               ((widget-get widget :objectcreatefcn)
@@ -193,7 +193,7 @@ Optional argument IGNORE is an extraneous parameter."
   (let* ((chil nil)
         (obj (widget-get widget :value))
         (master-group (widget-get widget :eieio-group))
-        (cv (class-v (eieio--object-class obj)))
+        (cv (eieio--object-class-object obj))
         (slots (eieio--class-public-a cv))
         (flabel (eieio--class-public-custom-label cv))
         (fgroup (eieio--class-public-custom-group cv))
@@ -208,7 +208,8 @@ Optional argument IGNORE is an extraneous parameter."
                         chil)))
     ;; Display information about the group being shown
     (when master-group
-      (let ((groups (class-option (eieio--object-class obj) :custom-groups)))
+      (let ((groups (eieio--class-option (eieio--object-class-object obj)
+                                         :custom-groups)))
        (widget-insert "Groups:")
        (while groups
          (widget-insert "  ")
@@ -216,7 +217,7 @@ Optional argument IGNORE is an extraneous parameter."
              (widget-insert "*" (capitalize (symbol-name master-group)) "*")
            (widget-create 'push-button
                           :thing (cons obj (car groups))
-                          :notify (lambda (widget &rest stuff)
+                          :notify (lambda (widget &rest _)
                                     (eieio-customize-object
                                      (car (widget-get widget :thing))
                                      (cdr (widget-get widget :thing))))
@@ -260,8 +261,8 @@ Optional argument IGNORE is an extraneous parameter."
                                 (car flabel)
                               (let ((s (symbol-name
                                         (or
-                                         (class-slot-initarg
-                                          (eieio--object-class obj)
+                                         (eieio--class-slot-initarg
+                                          (eieio--object-class-object obj)
                                           (car slots))
                                          (car slots)))))
                                 (capitalize
@@ -288,7 +289,7 @@ Optional argument IGNORE is an extraneous parameter."
   "Get the value of WIDGET."
   (let* ((obj (widget-get widget :value))
         (master-group eieio-cog)
-        (cv (class-v (eieio--object-class obj)))
+        (cv (eieio--object-class-object obj))
         (fgroup (eieio--class-public-custom-group cv))
         (wids (widget-get widget :children))
         (name (if (widget-get widget :eieio-show-name)
@@ -296,7 +297,7 @@ Optional argument IGNORE is an extraneous parameter."
                 nil))
         (chil (if (widget-get widget :eieio-show-name)
                   (nthcdr 1 wids) wids))
-        (cv (class-v (eieio--object-class obj)))
+        (cv (eieio--object-class-object obj))
         (slots (eieio--class-public-a cv))
         (fcust (eieio--class-public-custom cv)))
     ;; If there are any prefix widgets, clear them.
@@ -317,11 +318,11 @@ Optional argument IGNORE is an extraneous parameter."
            fgroup (cdr fgroup)
            fcust (cdr fcust)))
     ;; Set any name updates on it.
-    (if name (setf (eieio--object-name obj) name))
+    (if name (eieio-object-set-name-string obj name))
     ;; This is the same object we had before.
     obj))
 
-(defmethod eieio-done-customizing ((obj eieio-default-superclass))
+(cl-defmethod eieio-done-customizing ((_obj eieio-default-superclass))
   "When applying change to a widget, call this method.
 This method is called by the default widget-edit commands.
 User made commands should also call this method when applying changes.
@@ -344,7 +345,7 @@ Optional argument GROUP is the sub-group of slots to 
display."
   "Major mode for customizing EIEIO objects.
 \\{eieio-custom-mode-map}")
 
-(defmethod eieio-customize-object ((obj eieio-default-superclass)
+(cl-defmethod eieio-customize-object ((obj eieio-default-superclass)
                                   &optional group)
   "Customize OBJ in a specialized custom buffer.
 To override call the `eieio-custom-widget-insert' to just insert the
@@ -385,18 +386,18 @@ These groups are specified with the `:group' slot flag."
     (make-local-variable 'eieio-cog)
     (setq eieio-cog g)))
 
-(defmethod eieio-custom-object-apply-reset ((obj eieio-default-superclass))
+(cl-defmethod eieio-custom-object-apply-reset ((_obj eieio-default-superclass))
   "Insert an Apply and Reset button into the object editor.
 Argument OBJ is the object being customized."
   (widget-create 'push-button
-                :notify (lambda (&rest ignore)
+                :notify (lambda (&rest _)
                           (widget-apply eieio-wo :value-get)
                           (eieio-done-customizing eieio-co)
                           (bury-buffer))
                 "Accept")
   (widget-insert "   ")
   (widget-create 'push-button
-                :notify (lambda (&rest ignore)
+                :notify (lambda (&rest _)
                           ;; I think the act of getting it sets
                           ;; its value through the get function.
                           (message "Applying Changes...")
@@ -406,17 +407,17 @@ Argument OBJ is the object being customized."
                 "Apply")
   (widget-insert "   ")
   (widget-create 'push-button
-                :notify (lambda (&rest ignore)
+                :notify (lambda (&rest _)
                           (message "Resetting")
                           (eieio-customize-object eieio-co eieio-cog))
                 "Reset")
   (widget-insert "   ")
   (widget-create 'push-button
-                :notify (lambda (&rest ignore)
+                :notify (lambda (&rest _)
                           (bury-buffer))
                 "Cancel"))
 
-(defmethod eieio-custom-widget-insert ((obj eieio-default-superclass)
+(cl-defmethod eieio-custom-widget-insert ((obj eieio-default-superclass)
                                       &rest flags)
   "Insert the widget used for editing object OBJ in the current buffer.
 Arguments FLAGS are widget compatible flags.
@@ -431,13 +432,11 @@ Must return the created widget."
   :clone-object-children t
   )
 
-(defun eieio-object-value-to-abstract (widget value)
+(defun eieio-object-value-to-abstract (_widget value)
   "For WIDGET, convert VALUE to an abstract /safe/ representation."
-  (if (eieio-object-p value) value
-    (if (null value) value
-      nil)))
+  (if (eieio-object-p value) value))
 
-(defun eieio-object-abstract-to-value (widget value)
+(defun eieio-object-abstract-to-value (_widget value)
   "For WIDGET, convert VALUE from an abstract /safe/ representation."
   value)
 
@@ -447,21 +446,22 @@ Must return the created widget."
 ;; These functions provide the ability to create dynamic menus to
 ;; customize specific sections of an object.  They do not hook directly
 ;; into a filter, but can be used to create easymenu vectors.
-(defmethod eieio-customize-object-group ((obj eieio-default-superclass))
+(cl-defmethod eieio-customize-object-group ((obj eieio-default-superclass))
   "Create a list of vectors for customizing sections of OBJ."
   (mapcar (lambda (group)
            (vector (concat "Group " (symbol-name group))
                    (list 'customize-object obj (list 'quote group))
                    t))
-         (class-option (eieio--object-class obj) :custom-groups)))
+         (eieio--class-option (eieio--object-class-object obj) 
:custom-groups)))
 
 (defvar eieio-read-custom-group-history nil
   "History for the custom group reader.")
 
-(defmethod eieio-read-customization-group ((obj eieio-default-superclass))
+(cl-defmethod eieio-read-customization-group ((obj eieio-default-superclass))
   "Do a completing read on the name of a customization group in OBJ.
 Return the symbol for the group, or nil"
-  (let ((g (class-option (eieio--object-class obj) :custom-groups)))
+  (let ((g (eieio--class-option (eieio--object-class-object obj)
+                                :custom-groups)))
     (if (= (length g) 1)
        (car g)
       ;; Make the association list
diff --git a/lisp/emacs-lisp/eieio-datadebug.el 
b/lisp/emacs-lisp/eieio-datadebug.el
index ae29c3f..8234919 100644
--- a/lisp/emacs-lisp/eieio-datadebug.el
+++ b/lisp/emacs-lisp/eieio-datadebug.el
@@ -1,6 +1,6 @@
-;;; eieio-datadebug.el --- EIEIO extensions to the data debugger.
+;;; eieio-datadebug.el --- EIEIO extensions to the data debugger.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: OO, lisp
@@ -79,7 +79,7 @@ PREBUTTONTEXT is some text between PREFIX and the object 
button."
 ;;
 ;; Each object should have an opportunity to show stuff about itself.
 
-(defmethod data-debug/eieio-insert-slots ((obj eieio-default-superclass)
+(cl-defmethod data-debug/eieio-insert-slots ((obj eieio-default-superclass)
                                          prefix)
   "Insert the slots of OBJ into the current DDEBUG buffer."
   (let ((inhibit-read-only t))
@@ -87,8 +87,8 @@ PREBUTTONTEXT is some text between PREFIX and the object 
button."
                             prefix
                             "Name: ")
     (let* ((cl (eieio-object-class obj))
-          (cv (class-v cl)))
-      (data-debug-insert-thing (class-constructor cl)
+          (cv (eieio--class-v cl)))
+      (data-debug-insert-thing (eieio--class-constructor cl)
                               prefix
                               "Class: ")
       ;; Loop over all the public slots
@@ -96,7 +96,8 @@ PREBUTTONTEXT is some text between PREFIX and the object 
button."
            )
        (while publa
          (if (slot-boundp obj (car publa))
-             (let* ((i (class-slot-initarg cl (car publa)))
+             (let* ((i (eieio--class-slot-initarg (eieio--class-v cl)
+                                                   (car publa)))
                     (v (eieio-oref obj (car publa))))
                (data-debug-insert-thing
                 v prefix (concat
@@ -104,7 +105,8 @@ PREBUTTONTEXT is some text between PREFIX and the object 
button."
                             (symbol-name (car publa)))
                           " ")))
            ;; Unbound case
-           (let ((i (class-slot-initarg cl (car publa))))
+           (let ((i (eieio--class-slot-initarg (eieio--class-v cl)
+                                                (car publa))))
              (data-debug-insert-custom
               "#unbound" prefix
               (concat (if i (symbol-name i)
@@ -115,34 +117,18 @@ PREBUTTONTEXT is some text between PREFIX and the object 
button."
          (setq publa (cdr publa)))))))
 
 ;;; Augment the Data debug thing display list.
-(data-debug-add-specialized-thing (lambda (thing) (object-p thing))
+(data-debug-add-specialized-thing (lambda (thing) (eieio-object-p thing))
                                  #'data-debug-insert-object-button)
 
 ;;; DEBUG METHODS
 ;;
 ;; A generic function to run DDEBUG on an object and popup a new buffer.
 ;;
-(defmethod data-debug-show ((obj eieio-default-superclass))
+(cl-defmethod data-debug-show ((obj eieio-default-superclass))
   "Run ddebug against any EIEIO object OBJ."
   (data-debug-new-buffer (format "*%s DDEBUG*" (eieio-object-name obj)))
   (data-debug-insert-object-slots obj "]"))
 
-;;; DEBUG FUNCTIONS
-;;
-(defun eieio-debug-methodinvoke (method class)
-  "Show the method invocation order for METHOD with CLASS object."
-  (interactive "aMethod: \nXClass Expression: ")
-  (let* ((eieio-pre-method-execution-functions
-         (lambda (l) (throw 'moose l) ))
-        (data
-         (catch 'moose (eieio-generic-call
-                        method (list class))))
-        (buf (data-debug-new-buffer "*Method Invocation*"))
-        (data2 (mapcar (lambda (sym)
-                         (symbol-function (car sym)))
-                         data)))
-    (data-debug-insert-thing data2 ">" "")))
-
 (provide 'eieio-datadebug)
 
 ;;; eieio-datadebug.el ends here
diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el
index 6f1d01c..304ee36 100644
--- a/lisp/emacs-lisp/eieio-opt.el
+++ b/lisp/emacs-lisp/eieio-opt.el
@@ -1,6 +1,6 @@
 ;;; eieio-opt.el -- eieio optional functions (debug, printing, speedbar)
 
-;; Copyright (C) 1996, 1998-2003, 2005, 2008-2014 Free Software
+;; Copyright (C) 1996, 1998-2003, 2005, 2008-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
@@ -45,7 +45,7 @@ variable `eieio-default-superclass'."
                                                nil t)))
                 nil))
   (if (not root-class) (setq root-class 'eieio-default-superclass))
-  (eieio--check-type class-p root-class)
+  (cl-check-type root-class class)
   (display-buffer (get-buffer-create "*EIEIO OBJECT BROWSE*") t)
   (with-current-buffer (get-buffer "*EIEIO OBJECT BROWSE*")
     (erase-buffer)
@@ -58,9 +58,9 @@ variable `eieio-default-superclass'."
 Argument THIS-ROOT is the local root of the tree.
 Argument PREFIX is the character prefix to use.
 Argument CH-PREFIX is another character prefix to display."
-  (eieio--check-type class-p this-root)
+  (cl-check-type this-root class)
   (let ((myname (symbol-name this-root))
-       (chl (eieio--class-children (class-v this-root)))
+       (chl (eieio--class-children (eieio--class-v this-root)))
        (fprefix (concat ch-prefix "  +--"))
        (mprefix (concat ch-prefix "  |  "))
        (lprefix (concat ch-prefix "     ")))
@@ -81,16 +81,16 @@ If CLASS is actually an object, then also display current 
values of that object.
   ;; Header line
   (prin1 class)
   (insert " is a"
-         (if (class-option class :abstract)
+         (if (eieio--class-option (eieio--class-v class) :abstract)
              "n abstract"
            "")
          " class")
-  (let ((location (get class 'class-location)))
+  (let ((location (find-lisp-object-file-name class 'eieio-defclass)))
     (when location
       (insert " in `")
       (help-insert-xref-button
-       (file-name-nondirectory location)
-       'eieio-class-def class location)
+       (help-fns-short-filename location)
+       'eieio-class-def class location 'eieio-defclass)
       (insert "'")))
   (insert ".\n")
   ;; Parents
@@ -122,34 +122,23 @@ If CLASS is actually an object, then also display current 
values of that object.
   ;; Describe all the slots in this class.
   (eieio-help-class-slots class)
   ;; Describe all the methods specific to this class.
-  (let ((methods (eieio-all-generic-functions class))
-       (type [":STATIC" ":BEFORE" ":PRIMARY" ":AFTER"])
-       counter doc)
-    (when methods
+  (let ((generics (eieio-all-generic-functions class)))
+    (when generics
       (insert (propertize "Specialized Methods:\n\n" 'face 'bold))
-      (while methods
-       (setq doc (eieio-method-documentation (car methods) class))
-       (insert "`")
-       (help-insert-xref-button (symbol-name (car methods))
-                                'help-function (car methods))
-       (insert "'")
-       (if (not doc)
-           (insert "  Undocumented")
-         (setq counter 0)
-         (dolist (cur doc)
-           (when cur
-             (insert " " (aref type counter) " "
-                     (prin1-to-string (car cur) (current-buffer))
-                     "\n"
-                     (or (cdr cur) "")))
-           (setq counter (1+ counter))))
-       (insert "\n\n")
-       (setq methods (cdr methods))))))
+      (dolist (generic generics)
+        (insert "`")
+        (help-insert-xref-button (symbol-name generic) 'help-function generic)
+        (insert "'")
+       (pcase-dolist (`(,qualifiers ,args ,doc)
+                       (eieio-method-documentation generic class))
+          (insert (format " %s%S\n" qualifiers args)
+                  (or doc "")))
+       (insert "\n\n")))))
 
 (defun eieio-help-class-slots (class)
   "Print help description for the slots in CLASS.
 Outputs to the current buffer."
-  (let* ((cv (class-v class))
+  (let* ((cv (eieio--class-v class))
         (docs   (eieio--class-public-doc cv))
         (names  (eieio--class-public-a cv))
         (deflt  (eieio--class-public-d cv))
@@ -215,31 +204,22 @@ Outputs to the current buffer."
            prot (cdr prot)
            i (1+ i)))))
 
-(defun eieio-build-class-list (class)
-  "Return a list of all classes that inherit from CLASS."
-  (if (class-p class)
-      (apply #'append
-            (mapcar
-             (lambda (c)
-               (append (list c) (eieio-build-class-list c)))
-             (eieio-class-children-fast class)))
-    (list class)))
-
 (defun eieio-build-class-alist (&optional class instantiable-only buildlist)
   "Return an alist of all currently active classes for completion purposes.
 Optional argument CLASS is the class to start with.
 If INSTANTIABLE-ONLY is non nil, only allow names of classes which
 are not abstract, otherwise allow all classes.
 Optional argument BUILDLIST is more list to attach and is used internally."
-  (let* ((cc (or class eieio-default-superclass))
-        (sublst (eieio--class-children (class-v cc))))
+  (let* ((cc (or class 'eieio-default-superclass))
+        (sublst (eieio--class-children (eieio--class-v cc))))
     (unless (assoc (symbol-name cc) buildlist)
       (when (or (not instantiable-only) (not (class-abstract-p cc)))
+        ;; FIXME: Completion tables don't need alists, and ede/generic.el needs
+        ;; the symbols rather than their names.
        (setq buildlist (cons (cons (symbol-name cc) 1) buildlist))))
-    (while sublst
+    (dolist (elem sublst)
       (setq buildlist (eieio-build-class-alist
-                      (car sublst) instantiable-only buildlist))
-      (setq sublst (cdr sublst)))
+                      elem instantiable-only buildlist)))
     buildlist))
 
 (defvar eieio-read-class nil
@@ -267,24 +247,22 @@ are not abstract."
 
 ;;; METHOD COMPLETION / DOC
 
-(define-button-type 'eieio-method-def
-  :supertype 'help-xref
-  'help-function (lambda (class method file)
-                  (eieio-help-find-method-definition class method file))
-  'help-echo (purecopy "mouse-2, RET: find method's definition"))
-
 (define-button-type 'eieio-class-def
-  :supertype 'help-xref
-  'help-function (lambda (class file)
-                  (eieio-help-find-class-definition class file))
+  :supertype 'help-function-def
   'help-echo (purecopy "mouse-2, RET: find class definition"))
 
+(defconst eieio--defclass-regexp "(defclass[ \t\r\n]+%s[ \t\r\n]+")
+(with-eval-after-load 'find-func
+  (defvar find-function-regexp-alist)
+  (add-to-list 'find-function-regexp-alist
+               `(eieio-defclass . eieio--defclass-regexp)))
+
 ;;;###autoload
 (defun eieio-help-constructor (ctr)
   "Describe CTR if it is a class constructor."
   (when (class-p ctr)
     (erase-buffer)
-    (let ((location (get ctr 'class-location))
+    (let ((location (find-lisp-object-file-name ctr 'eieio-defclass))
          (def (symbol-function ctr)))
       (goto-char (point-min))
       (prin1 ctr)
@@ -299,8 +277,8 @@ are not abstract."
       (when location
        (insert " in `")
        (help-insert-xref-button
-        (file-name-nondirectory location)
-        'eieio-class-def ctr location)
+        (help-fns-short-filename location)
+        'eieio-class-def ctr location 'eieio-defclass)
        (insert "'"))
       (insert ".\nCreates an object of class " (symbol-name ctr) ".")
       (goto-char (point-max))
@@ -311,133 +289,50 @@ are not abstract."
          (eieio-help-class ctr))
        ))))
 
-
-;;;###autoload
-(defun eieio-help-generic (generic)
-  "Describe GENERIC if it is a generic function."
-  (when (and (symbolp generic) (generic-p generic))
-    (save-excursion
-      (goto-char (point-min))
-      (when (re-search-forward " in `.+'.$" nil t)
-       (replace-match ".")))
-    (save-excursion
-      (insert "\n\nThis is a generic function"
-             (cond
-              ((and (generic-primary-only-p generic)
-                    (generic-primary-only-one-p generic))
-               " with only one primary method")
-              ((generic-primary-only-p generic)
-               " with only primary methods")
-              (t ""))
-             ".\n\n")
-      (insert (propertize "Implementations:\n\n" 'face 'bold))
-      (let ((i 4)
-           (prefix [ ":STATIC" ":BEFORE" ":PRIMARY" ":AFTER" ] ))
-       ;; Loop over fanciful generics
-       (while (< i 7)
-         (let ((gm (aref (get generic 'eieio-method-tree) i)))
-           (when gm
-             (insert "Generic "
-                     (aref prefix (- i 3))
-                     "\n"
-                     (or (nth 2 gm) "Undocumented")
-                     "\n\n")))
-         (setq i (1+ i)))
-       (setq i 0)
-       ;; Loop over defined class-specific methods
-       (while (< i 4)
-         (let* ((gm (reverse (aref (get generic 'eieio-method-tree) i)))
-                cname location)
-           (while gm
-             (setq cname (caar gm))
-             (insert "`")
-             (help-insert-xref-button (symbol-name cname)
-                                      'help-variable cname)
-             (insert "' " (aref prefix i) " ")
-             ;; argument list
-             (let* ((func (cdr (car gm)))
-                    (arglst (help-function-arglist func)))
-               (prin1 arglst (current-buffer)))
-             (insert "\n"
-                     (or (documentation (cdr (car gm)))
-                         "Undocumented"))
-             ;; Print file location if available
-             (when (and (setq location (get generic 'method-locations))
-                        (setq location (assoc cname location)))
-               (setq location (cadr location))
-               (insert "\n\nDefined in `")
-               (help-insert-xref-button
-                (file-name-nondirectory location)
-                'eieio-method-def cname generic location)
-               (insert "'\n"))
-             (setq gm (cdr gm))
-             (insert "\n")))
-         (setq i (1+ i)))))))
+(defun eieio--specializers-apply-to-class-p (specializers class)
+  "Return non-nil if a method with SPECIALIZERS applies to CLASS."
+  (let ((applies nil))
+    (dolist (specializer specializers)
+      (if (memq (car-safe specializer) '(subclass eieio--static))
+          (setq specializer (nth 1 specializer)))
+      ;; Don't include the methods that are "too generic", such as those
+      ;; applying to `eieio-default-superclass'.
+      (and (not (memq specializer '(t eieio-default-superclass)))
+           (class-p specializer)
+           (child-of-class-p class specializer)
+           (setq applies t)))
+    applies))
 
 (defun eieio-all-generic-functions (&optional class)
   "Return a list of all generic functions.
 Optional CLASS argument returns only those functions that contain
 methods for CLASS."
-  (let ((l nil) tree (cn (if class (symbol-name class) nil)))
+  (let ((l nil))
     (mapatoms
      (lambda (symbol)
-       (setq tree (get symbol 'eieio-method-obarray))
-       (if tree
-          (progn
-            ;; A symbol might be interned for that class in one of
-            ;; these three slots in the method-obarray.
-            (if (or (not class)
-                    (fboundp (intern-soft cn (aref tree 0)))
-                    (fboundp (intern-soft cn (aref tree 1)))
-                    (fboundp (intern-soft cn (aref tree 2))))
-                (setq l (cons symbol l)))))))
+       (let ((generic (and (fboundp symbol) (cl--generic symbol))))
+         (and generic
+             (catch 'found
+               (if (null class) (throw 'found t))
+               (dolist (method (cl--generic-method-table generic))
+                 (if (eieio--specializers-apply-to-class-p
+                      (cl--generic-method-specializers method) class)
+                     (throw 'found t))))
+             (push symbol l)))))
     l))
 
 (defun eieio-method-documentation (generic class)
-  "Return a list of the specific documentation of GENERIC for CLASS.
-If there is not an explicit method for CLASS in GENERIC, or if that
-function has no documentation, then return nil."
-  (let ((tree (get generic 'eieio-method-obarray))
-       (cn (symbol-name class))
-       before primary after)
-    (if (not tree)
-       nil
-      ;; A symbol might be interned for that class in one of
-      ;; these three slots in the method-obarray.
-      (setq before (intern-soft cn (aref tree 0))
-           primary (intern-soft cn (aref tree 1))
-           after (intern-soft cn (aref tree 2)))
-      (if (not (or (fboundp before)
-                  (fboundp primary)
-                  (fboundp after)))
-         nil
-       (list (if (fboundp before)
-                 (cons (help-function-arglist before)
-                       (documentation before))
-               nil)
-             (if (fboundp primary)
-                 (cons (help-function-arglist primary)
-                       (documentation primary))
-               nil)
-             (if (fboundp after)
-                 (cons (help-function-arglist after)
-                       (documentation after))
-               nil))))))
-
-(defvar eieio-read-generic nil
-  "History of the `eieio-read-generic' prompt.")
-
-(defun eieio-read-generic-p (fn)
-  "Function used in function `eieio-read-generic'.
-This is because `generic-p' is a macro.
-Argument FN is the function to test."
-  (generic-p fn))
-
-(defun eieio-read-generic (prompt &optional historyvar)
-  "Read a generic function from the minibuffer with PROMPT.
-Optional argument HISTORYVAR is the variable to use as history."
-  (intern (completing-read prompt obarray 'eieio-read-generic-p
-                          t nil (or historyvar 'eieio-read-generic))))
+  "Return info for all methods of GENERIC applicable to CLASS.
+The value returned is a list of elements of the form
+\(QUALIFIERS ARGS DOC)."
+  (let ((generic (cl--generic generic))
+        (docs ()))
+    (when generic
+      (dolist (method (cl--generic-method-table generic))
+        (when (eieio--specializers-apply-to-class-p
+               (cl--generic-method-specializers method) class)
+          (push (cl--generic-method-info method) docs))))
+    docs))
 
 ;;; METHOD STATS
 ;;
@@ -537,60 +432,6 @@ Optional argument HISTORYVAR is the variable to use as 
history."
     (terpri)
     ))
 
-;;; HELP AUGMENTATION
-;;
-(defun eieio-help-find-method-definition (class method file)
-  (let ((filename (find-library-name file))
-       location buf)
-    (when (symbolp class)
-      (setq class (symbol-name class)))
-    (when (symbolp method)
-      (setq method (symbol-name method)))
-    (when (null filename)
-      (error "Cannot find library %s" file))
-    (setq buf (find-file-noselect filename))
-    (with-current-buffer buf
-      (goto-char (point-min))
-      (when
-         (re-search-forward
-          ;; Regexp for searching methods.
-          (concat "(defmethod[ \t\r\n]+" method
-                  "\\([ \t\r\n]+:[a-zA-Z]+\\)?"
-                  "[ \t\r\n]+(\\s-*(\\(\\sw\\|\\s_\\)+\\s-+"
-                  class
-                  "\\s-*)")
-          nil t)
-       (setq location (match-beginning 0))))
-    (if (null location)
-       (message "Unable to find location in file")
-      (pop-to-buffer buf)
-      (goto-char location)
-      (recenter)
-      (beginning-of-line))))
-
-(defun eieio-help-find-class-definition (class file)
-  (when (symbolp class)
-    (setq class (symbol-name class)))
-  (let ((filename (find-library-name file))
-       location buf)
-    (when (null filename)
-      (error "Cannot find library %s" file))
-    (setq buf (find-file-noselect filename))
-    (with-current-buffer buf
-      (goto-char (point-min))
-      (when
-         (re-search-forward
-          ;; Regexp for searching a class.
-          (concat "(defclass[ \t\r\n]+" class "[ \t\r\n]+")
-          nil t)
-       (setq location (match-beginning 0))))
-    (if (null location)
-       (message "Unable to find location in file")
-      (pop-to-buffer buf)
-      (goto-char location)
-      (recenter)
-      (beginning-of-line))))
-
 ;;; SPEEDBAR SUPPORT
 ;;
 
@@ -627,21 +468,21 @@ Optional argument HISTORYVAR is the variable to use as 
history."
   ()
   "Menu part in easymenu format used in speedbar while in `eieio' mode.")
 
-(defun eieio-class-speedbar (dir-or-object depth)
+(defun eieio-class-speedbar (_dir-or-object _depth)
   "Create buttons in speedbar that represents the current project.
 DIR-OR-OBJECT is the object to expand, or nil, and DEPTH is the
 current expansion depth."
   (when (eq (point-min) (point-max))
     ;; This function is only called once, to start the whole deal.
     ;; Create and expand the default object.
-    (eieio-class-button eieio-default-superclass 0)
+    (eieio-class-button 'eieio-default-superclass 0)
     (forward-line -1)
     (speedbar-expand-line)))
 
 (defun eieio-class-button (class depth)
   "Draw a speedbar button at the current point for CLASS at DEPTH."
-  (eieio--check-type class-p class)
-  (let ((subclasses (eieio--class-children (class-v class))))
+  (cl-check-type class class)
+  (let ((subclasses (eieio--class-children (eieio--class-v class))))
     (if subclasses
        (speedbar-make-tag-line 'angle ?+
                                'eieio-sb-expand
@@ -666,7 +507,7 @@ Argument INDENT is the depth of indentation."
         (speedbar-with-writable
           (save-excursion
             (end-of-line) (forward-char 1)
-            (let ((subclasses (eieio--class-children (class-v class))))
+            (let ((subclasses (eieio--class-children (eieio--class-v class))))
               (while subclasses
                 (eieio-class-button (car subclasses) (1+ indent))
                 (setq subclasses (cdr subclasses)))))))
@@ -676,7 +517,7 @@ Argument INDENT is the depth of indentation."
        (t (error "Ooops...  not sure what to do")))
   (speedbar-center-buffer-smartly))
 
-(defun eieio-describe-class-sb (text token indent)
+(defun eieio-describe-class-sb (_text token _indent)
   "Describe the class TEXT in TOKEN.
 INDENT is the current indentation level."
   (dframe-with-attached-buffer
diff --git a/lisp/emacs-lisp/eieio-speedbar.el 
b/lisp/emacs-lisp/eieio-speedbar.el
index 85b9cc6..a1eabcf 100644
--- a/lisp/emacs-lisp/eieio-speedbar.el
+++ b/lisp/emacs-lisp/eieio-speedbar.el
@@ -1,6 +1,6 @@
-;;; eieio-speedbar.el -- Classes for managing speedbar displays.
+;;; eieio-speedbar.el -- Classes for managing speedbar displays.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2002, 2005, 2007-2014 Free Software Foundation,
+;; Copyright (C) 1999-2002, 2005, 2007-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
@@ -196,19 +196,19 @@ that path."
 ;; when no other methods are found, allowing multiple inheritance to work
 ;; reliably with eieio-speedbar.
 
-(defmethod eieio-speedbar-description (object)
+(cl-defmethod eieio-speedbar-description (object)
   "Return a string describing OBJECT."
   (eieio-object-name-string object))
 
-(defmethod eieio-speedbar-derive-line-path (object)
+(cl-defmethod eieio-speedbar-derive-line-path (_object)
   "Return the path which OBJECT has something to do with."
   nil)
 
-(defmethod eieio-speedbar-object-buttonname (object)
+(cl-defmethod eieio-speedbar-object-buttonname (object)
   "Return a string to use as a speedbar button for OBJECT."
   (eieio-object-name-string object))
 
-(defmethod eieio-speedbar-make-tag-line (object depth)
+(cl-defmethod eieio-speedbar-make-tag-line (object depth)
   "Insert a tag line into speedbar at point for OBJECT.
 By default, all objects appear as simple TAGS with no need to inherit from
 the special `eieio-speedbar' classes.  Child classes should redefine this
@@ -221,7 +221,7 @@ Argument DEPTH is the depth at which the tag line is 
inserted."
                          'speedbar-tag-face
                          depth))
 
-(defmethod eieio-speedbar-handle-click (object)
+(cl-defmethod eieio-speedbar-handle-click (object)
   "Handle a click action on OBJECT in speedbar.
 Any object can be represented as a tag in SPEEDBAR without special
 attributes.  These default objects will be pulled up in a custom
@@ -285,7 +285,7 @@ Add one of the child classes to this class to the parent 
list of a class."
 
 ;;; Methods to eieio-speedbar-* which do not need to be overridden
 ;;
-(defmethod eieio-speedbar-make-tag-line ((object eieio-speedbar)
+(cl-defmethod eieio-speedbar-make-tag-line ((object eieio-speedbar)
                                         depth)
   "Insert a tag line into speedbar at point for OBJECT.
 All objects a child of symbol `eieio-speedbar' can be created from
@@ -321,12 +321,12 @@ Argument DEPTH is the depth at which the tag line is 
inserted."
       (if exp
          (eieio-speedbar-expand object (1+ depth))))))
 
-(defmethod eieio-speedbar-child-make-tag-lines ((object eieio-speedbar) depth)
+(cl-defmethod eieio-speedbar-child-make-tag-lines ((object eieio-speedbar) 
_depth)
   "Base method for creating tag lines for non-object children."
   (error "You must implement `eieio-speedbar-child-make-tag-lines' for %s"
         (eieio-object-name object)))
 
-(defmethod eieio-speedbar-expand ((object eieio-speedbar) depth)
+(cl-defmethod eieio-speedbar-expand ((object eieio-speedbar) depth)
   "Expand OBJECT at indentation DEPTH.
 Inserts a list of new tag lines representing expanded elements within
 OBJECT."
@@ -340,7 +340,7 @@ OBJECT."
 
 ;;; Speedbar specific function callbacks.
 ;;
-(defun eieio-speedbar-object-click (text token indent)
+(defun eieio-speedbar-object-click (_text token _indent)
   "Handle a user click on TEXT representing object TOKEN.
 The object is at indentation level INDENT."
   (eieio-speedbar-handle-click token))
@@ -362,7 +362,7 @@ TOKEN is the object.  INDENT is the current indentation 
level."
        (t (error "Ooops... not sure what to do")))
   (speedbar-center-buffer-smartly))
 
-(defmethod eieio-speedbar-child-description ((obj eieio-speedbar))
+(cl-defmethod eieio-speedbar-child-description ((obj eieio-speedbar))
   "Return a description for a child of OBJ which is not an object."
   (error "You must implement `eieio-speedbar-child-description' for %s"
         (eieio-object-name obj)))
@@ -412,7 +412,7 @@ Optional DEPTH is the depth we start at."
 
 ;;; Methods to the eieio-speedbar-* classes which need to be overridden.
 ;;
-(defmethod eieio-speedbar-object-children ((object eieio-speedbar))
+(cl-defmethod eieio-speedbar-object-children ((_object eieio-speedbar))
   "Return a list of children to be displayed in speedbar.
 If the return value is a list of OBJECTs, then those objects are
 queried for details.  If the return list is made of strings,
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index c8330d5..5260909 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -1,7 +1,7 @@
 ;;; eieio.el --- Enhanced Implementation of Emacs Interpreted Objects  -*- 
lexical-binding:t -*-
 ;;;              or maybe Eric's Implementation of Emacs Interpreted Objects
 
-;; Copyright (C) 1995-1996, 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Version: 1.4
@@ -36,12 +36,12 @@
 ;;   Retrieved from:
 ;;   http://192.220.96.201/dylan/linearization-oopsla96.html
 
-;; There is funny stuff going on with typep and deftype.  This
-;; is the only way I seem to be able to make this stuff load properly.
-
 ;; @TODO - fix :initform to be a form, not a quoted value
 ;; @TODO - Prefix non-clos functions with `eieio-'.
 
+;; TODO: better integrate CL's defstructs and classes.  E.g. make it possible
+;; to create a new class that inherits from a struct.
+
 ;;; Code:
 
 (defvar eieio-version "1.4"
@@ -57,13 +57,11 @@
 
 ;;; Defining a new class
 ;;
-(defmacro defclass (name superclass slots &rest options-and-doc)
+(defmacro defclass (name superclasses slots &rest options-and-doc)
   "Define NAME as a new class derived from SUPERCLASS with SLOTS.
 OPTIONS-AND-DOC is used as the class' options and base documentation.
-SUPERCLASS is a list of superclasses to inherit from, with SLOTS
-being the slots residing in that class definition.  NOTE: Currently
-only one slot may exist in SUPERCLASS as multiple inheritance is not
-yet supported.  Supported tags are:
+SUPERCLASSES is a list of superclasses to inherit from, with SLOTS
+being the slots residing in that class definition.  Supported tags are:
 
   :initform   - Initializing form.
   :initarg    - Tag used during initialization.
@@ -77,8 +75,6 @@ yet supported.  Supported tags are:
               - A string documenting use of this slot.
 
 The following are extensions on CLOS:
-  :protection - Specify protection for this slot.
-                Defaults to `:public'.  Also use `:protected', or `:private'.
   :custom     - When customizing an object, the custom :type.  Public only.
   :label      - A text string label used for a slot when customizing.
   :group      - Name of a customization group this slot belongs in.
@@ -114,12 +110,169 @@ Options in CLOS not supported in EIEIO:
 Due to the way class options are set up, you can add any tags you wish,
 and reference them using the function `class-option'."
   (declare (doc-string 4))
-  ;; This is eval-and-compile only to silence spurious compiler warnings
-  ;; about functions and variables not known to be defined.
-  ;; When eieio-defclass code is merged here and this becomes
-  ;; transparent to the compiler, the eval-and-compile can be removed.
-  `(eval-and-compile
-     (eieio-defclass ',name ',superclass ',slots ',options-and-doc)))
+  (cl-check-type superclasses list)
+
+  (cond ((and (stringp (car options-and-doc))
+              (/= 1 (% (length options-and-doc) 2)))
+         (error "Too many arguments to `defclass'"))
+        ((and (symbolp (car options-and-doc))
+              (/= 0 (% (length options-and-doc) 2)))
+         (error "Too many arguments to `defclass'")))
+
+  (if (stringp (car options-and-doc))
+      (setq options-and-doc
+            (cons :documentation options-and-doc)))
+
+  ;; Make sure the method invocation order is a valid value.
+  (let ((io (eieio--class-option-assoc options-and-doc
+                                       :method-invocation-order)))
+    (when (and io (not (member io '(:depth-first :breadth-first :c3))))
+      (error "Method invocation order %s is not allowed" io)))
+
+  (let ((testsym1 (intern (concat (symbol-name name) "-p")))
+        (testsym2 (intern (format "eieio--childp--%s" name)))
+        (accessors ()))
+
+    ;; Collect the accessors we need to define.
+    (pcase-dolist (`(,sname . ,soptions) slots)
+      (let* ((acces   (plist-get soptions :accessor))
+            (initarg (plist-get soptions :initarg))
+            (reader  (plist-get soptions :reader))
+            (writer  (plist-get soptions :writer))
+            (alloc   (plist-get soptions :allocation))
+            (label   (plist-get soptions :label)))
+
+       (if eieio-error-unsupported-class-tags
+           (let ((tmp soptions))
+             (while tmp
+               (if (not (member (car tmp) '(:accessor
+                                            :initform
+                                            :initarg
+                                            :documentation
+                                            :protection
+                                            :reader
+                                            :writer
+                                            :allocation
+                                            :type
+                                            :custom
+                                            :label
+                                            :group
+                                            :printer
+                                            :allow-nil-initform
+                                            :custom-groups)))
+                   (signal 'invalid-slot-type (list (car tmp))))
+               (setq tmp (cdr (cdr tmp))))))
+
+       ;; Make sure the :allocation parameter has a valid value.
+       (if (not (memq alloc '(nil :class :instance)))
+           (signal 'invalid-slot-type (list :allocation alloc)))
+
+       ;; Label is nil, or a string
+       (if (not (or (null label) (stringp label)))
+           (signal 'invalid-slot-type (list :label label)))
+
+       ;; Is there an initarg, but allocation of class?
+       (if (and initarg (eq alloc :class))
+           (message "Class allocated slots do not need :initarg"))
+
+       ;; Anyone can have an accessor function.  This creates a function
+       ;; of the specified name, and also performs a `defsetf' if applicable
+       ;; so that users can `setf' the space returned by this function.
+       (when acces
+          (push `(cl-defmethod (setf ,acces) (value (this ,name))
+                   (eieio-oset this ',sname value))
+                accessors)
+          (push `(cl-defmethod ,acces ((this ,name))
+                   ,(format
+                     "Retrieve the slot `%S' from an object of class `%S'."
+                     sname name)
+                   ;; FIXME: Why is this different from the :reader case?
+                   (if (slot-boundp this ',sname) (eieio-oref this ',sname)))
+                accessors)
+          (when (and eieio-backward-compatibility (eq alloc :class))
+            ;; FIXME: How could I declare this *method* as obsolete.
+            (push `(cl-defmethod ,acces ((this (subclass ,name)))
+                     ,(format
+                       "Retrieve the class slot `%S' from a class `%S'.
+This method is obsolete."
+                       sname name)
+                     (if (slot-boundp this ',sname)
+                         (eieio-oref-default this ',sname)))
+                  accessors)))
+
+       ;; If a writer is defined, then create a generic method of that
+       ;; name whose purpose is to set the value of the slot.
+       (if writer
+            (push `(cl-defmethod ,writer ((this ,name) value)
+                     ,(format "Set the slot `%S' of an object of class `%S'."
+                              sname name)
+                     (setf (slot-value this ',sname) value))
+                  accessors))
+       ;; If a reader is defined, then create a generic method
+       ;; of that name whose purpose is to access this slot value.
+       (if reader
+            (push `(cl-defmethod ,reader ((this ,name))
+                     ,(format "Access the slot `%S' from object of class `%S'."
+                              sname name)
+                     (slot-value this ',sname))
+                  accessors))
+       ))
+
+    `(progn
+       ;; This test must be created right away so we can have self-
+       ;; referencing classes.  ei, a class whose slot can contain only
+       ;; pointers to itself.
+
+       ;; Create the test functions.
+       (defalias ',testsym1 (eieio-make-class-predicate ',name))
+       (defalias ',testsym2 (eieio-make-child-predicate ',name))
+
+       ,@(when eieio-backward-compatibility
+           (let ((f (intern (format "%s-child-p" name))))
+             `((defalias ',f ',testsym2)
+               (make-obsolete
+                ',f ,(format "use (cl-typep ... '%s) instead" name) "25.1"))))
+
+       ;; When using typep, (typep OBJ 'myclass) returns t for objects which
+       ;; are subclasses of myclass.  For our predicates, however, it is
+       ;; important for EIEIO to be backwards compatible, where
+       ;; myobject-p, and myobject-child-p are different.
+       ;; "cl" uses this technique to specify symbols with specific typep
+       ;; test, so we can let typep have the CLOS documented behavior
+       ;; while keeping our above predicate clean.
+
+       (put ',name 'cl-deftype-satisfies #',testsym2)
+
+       (eieio-defclass-internal ',name ',superclasses ',slots 
',options-and-doc)
+
+       ,@accessors
+
+       ;; Create the constructor function
+       ,(if (eieio--class-option-assoc options-and-doc :abstract)
+            ;; Abstract classes cannot be instantiated.  Say so.
+            (let ((abs (eieio--class-option-assoc options-and-doc :abstract)))
+              (if (not (stringp abs))
+                  (setq abs (format "Class %s is abstract" name)))
+              `(defun ,name (&rest _)
+                 ,(format "You cannot create a new object of type %S." name)
+                 (error ,abs)))
+
+          ;; Non-abstract classes need a constructor.
+          `(defun ,name (&rest slots)
+             ,(format "Create a new object with name NAME of class type %S."
+                      name)
+             (declare (compiler-macro
+                       (lambda (whole)
+                         (if (not (stringp (car slots)))
+                             whole
+                           (macroexp--warn-and-return
+                            (format "Obsolete name arg %S to constructor %S"
+                                    (car slots) (car whole))
+                            ;; Keep the name arg, for backward compatibility,
+                            ;; but hide it so we don't trigger indefinitely.
+                            `(,(car whole) (identity ,(car slots))
+                              ,@(cdr slots)))))))
+             (apply #'eieio-constructor ',name slots))))))
 
 
 ;;; CLOS style implementation of object creators.
@@ -144,75 +297,16 @@ In EIEIO, the class' constructor requires a name for use 
when printing.
 `make-instance' in CLOS doesn't use names the way Emacs does, so the
 class is used as the name slot instead when INITARGS doesn't start with
 a string."
-  (if (and (car initargs) (stringp (car initargs)))
-      (apply (class-constructor class) initargs)
-    (apply  (class-constructor class)
-           (cond ((symbolp class) (symbol-name class))
-                 (t (format "%S" class)))
-           initargs)))
+  (apply (eieio--class-constructor class) initargs))
 
 
-;;; CLOS methods and generics
-;;
-(defmacro defgeneric (method _args &optional doc-string)
-  "Create a generic function METHOD.
-DOC-STRING is the base documentation for this class.  A generic
-function has no body, as its purpose is to decide which method body
-is appropriate to use.  Uses `defmethod' to create methods, and calls
-`defgeneric' for you.  With this implementation the ARGS are
-currently ignored.  You can use `defgeneric' to apply specialized
-top level documentation to a method."
-  (declare (doc-string 3))
-  `(eieio--defalias ',method
-                    (eieio--defgeneric-init-form ',method ,doc-string)))
-
-(defmacro defmethod (method &rest args)
-  "Create a new METHOD through `defgeneric' with ARGS.
-
-The optional second argument KEY is a specifier that
-modifies how the method is called, including:
-   :before  - Method will be called before the :primary
-   :primary - The default if not specified
-   :after   - Method will be called after the :primary
-   :static  - First arg could be an object or class
-The next argument is the ARGLIST.  The ARGLIST specifies the arguments
-to the method as with `defun'.  The first argument can have a type
-specifier, such as:
-  ((VARNAME CLASS) ARG2 ...)
-where VARNAME is the name of the local variable for the method being
-created.  The CLASS is a class symbol for a class made with `defclass'.
-A DOCSTRING comes after the ARGLIST, and is optional.
-All the rest of the args are the BODY of the method.  A method will
-return the value of the last form in the BODY.
-
-Summary:
-
- (defmethod mymethod [:before | :primary | :after | :static]
-                     ((typearg class-name) arg2 &optional opt &rest rest)
-    \"doc-string\"
-     body)"
-  (declare (doc-string 3))
-  (let* ((key (if (keywordp (car args)) (pop args)))
-        (params (car args))
-        (arg1 (car params))
-         (fargs (if (consp arg1)
-                   (cons (car arg1) (cdr params))
-                 params))
-        (class (if (consp arg1) (nth 1 arg1)))
-         (code `(lambda ,fargs ,@(cdr args))))
-    `(progn
-       ;; Make sure there is a generic and the byte-compiler sees it.
-       (defgeneric ,method ,args
-         ,(or (documentation code)
-              (format "Generically created method `%s'." method)))
-       (eieio--defmethod ',method ',key ',class #',code))))
-
 ;;; Get/Set slots in an object.
 ;;
 (defmacro oref (obj slot)
   "Retrieve the value stored in OBJ in the slot named by SLOT.
 Slot is the name of the slot when created by `defclass' or the label
 created by the :initarg tag."
+  (declare (debug (form symbolp)))
   `(eieio-oref ,obj (quote ,slot)))
 
 (defalias 'slot-value 'eieio-oref)
@@ -223,6 +317,7 @@ created by the :initarg tag."
 The default value is the value installed in a class with the :initform
 tag.  SLOT can be the slot name, or the tag specified by the :initarg
 tag in the `defclass' call."
+  (declare (debug (form symbolp)))
   `(eieio-oref-default ,obj (quote ,slot)))
 
 ;;; Handy CLOS macros
@@ -246,7 +341,7 @@ SPEC-LIST is of a form similar to `let'.  For example:
 Where each VAR is the local variable given to the associated
 SLOT.  A slot specified without a variable name is given a
 variable name of the same name as the slot."
-  (declare (indent 2))
+  (declare (indent 2) (debug (sexp sexp def-body)))
   (require 'cl-lib)
   ;; Transform the spec-list into a cl-symbol-macrolet spec-list.
   (let ((mappings (mapcar (lambda (entry)
@@ -261,41 +356,53 @@ variable name of the same name as the slot."
 ;;  well embedded into an object.
 ;;
 (define-obsolete-function-alias
-  'object-class-fast #'eieio--object-class "24.4")
+  'object-class-fast #'eieio--object-class-name "24.4")
+
+(cl-defgeneric eieio-object-name-string (obj)
+  "Return a string which is OBJ's name."
+  (declare (obsolete eieio-named "25.1")))
 
 (defun eieio-object-name (obj &optional extra)
   "Return a Lisp like symbol string for object OBJ.
 If EXTRA, include that in the string returned to represent the symbol."
-  (eieio--check-type eieio-object-p obj)
-  (format "#<%s %s%s>" (symbol-name (eieio--object-class obj))
-         (eieio--object-name obj) (or extra "")))
+  (cl-check-type obj eieio-object)
+  (format "#<%s %s%s>" (eieio--object-class-name obj)
+         (eieio-object-name-string obj) (or extra "")))
 (define-obsolete-function-alias 'object-name #'eieio-object-name "24.4")
 
-(defun eieio-object-name-string (obj) "Return a string which is OBJ's name."
-  (eieio--check-type eieio-object-p obj)
-  (eieio--object-name obj))
+(defconst eieio--object-names (make-hash-table :test #'eq :weakness 'key))
+
+;; In the past, every EIEIO object had a `name' field, so we had the two method
+;; below "for free".  Since this field is very rarely used, we got rid of it
+;; and instead we keep it in a weak hash-tables, for those very rare objects
+;; that use it.
+(cl-defmethod eieio-object-name-string (obj)
+  (or (gethash obj eieio--object-names)
+      (symbol-name (eieio-object-class obj))))
 (define-obsolete-function-alias
   'object-name-string #'eieio-object-name-string "24.4")
 
-(defun eieio-object-set-name-string (obj name)
+(cl-defmethod eieio-object-set-name-string (obj name)
   "Set the string which is OBJ's NAME."
-  (eieio--check-type eieio-object-p obj)
-  (eieio--check-type stringp name)
-  (setf (eieio--object-name obj) name))
+  (declare (obsolete eieio-named "25.1"))
+  (cl-check-type name string)
+  (setf (gethash obj eieio--object-names) name))
 (define-obsolete-function-alias
   'object-set-name-string 'eieio-object-set-name-string "24.4")
 
-(defun eieio-object-class (obj) "Return the class struct defining OBJ."
-  (eieio--check-type eieio-object-p obj)
-  (eieio--object-class obj))
+(defun eieio-object-class (obj)
+  "Return the class struct defining OBJ."
+  ;; FIXME: We say we return a "struct" but we return a symbol instead!
+  (cl-check-type obj eieio-object)
+  (eieio--object-class-name obj))
 (define-obsolete-function-alias 'object-class #'eieio-object-class "24.4")
 ;; CLOS name, maybe?
 (define-obsolete-function-alias 'class-of #'eieio-object-class "24.4")
 
 (defun eieio-object-class-name (obj)
   "Return a Lisp like symbol name for OBJ's class."
-  (eieio--check-type eieio-object-p obj)
-  (eieio-class-name (eieio--object-class obj)))
+  (cl-check-type obj eieio-object)
+  (eieio-class-name (eieio--object-class-name obj)))
 (define-obsolete-function-alias
   'object-class-name 'eieio-object-class-name "24.4")
 
@@ -303,15 +410,15 @@ If EXTRA, include that in the string returned to 
represent the symbol."
   "Return parent classes to CLASS.  (overload of variable).
 
 The CLOS function `class-direct-superclasses' is aliased to this function."
-  (eieio--check-type class-p class)
-  (eieio-class-parents-fast class))
+  (eieio--class-parent (eieio--class-object class)))
+
 (define-obsolete-function-alias 'class-parents #'eieio-class-parents "24.4")
 
 (defun eieio-class-children (class)
   "Return child classes to CLASS.
 The CLOS function `class-direct-subclasses' is aliased to this function."
-  (eieio--check-type class-p class)
-  (eieio-class-children-fast class))
+  (cl-check-type class class)
+  (eieio--class-children (eieio--class-v class)))
 (define-obsolete-function-alias
   'class-children #'eieio-class-children "24.4")
 
@@ -326,38 +433,44 @@ The CLOS function `class-direct-subclasses' is aliased to 
this function."
   `(car (eieio-class-parents ,class)))
 (define-obsolete-function-alias 'class-parent 'eieio-class-parent "24.4")
 
-(defun same-class-p (obj class) "Return t if OBJ is of class-type CLASS."
-  (eieio--check-type class-p class)
-  (eieio--check-type eieio-object-p obj)
-  (same-class-fast-p obj class))
+(defun same-class-p (obj class)
+  "Return t if OBJ is of class-type CLASS."
+  (setq class (eieio--class-object class))
+  (cl-check-type class eieio--class)
+  (cl-check-type obj eieio-object)
+  (eq (eieio--object-class-object obj) class))
 
 (defun object-of-class-p (obj class)
   "Return non-nil if OBJ is an instance of CLASS or CLASS' subclasses."
-  (eieio--check-type eieio-object-p obj)
+  (cl-check-type obj eieio-object)
   ;; class will be checked one layer down
-  (child-of-class-p (eieio--object-class obj) class))
+  (child-of-class-p (eieio--object-class-object obj) class))
 ;; Backwards compatibility
 (defalias 'obj-of-class-p 'object-of-class-p)
 
 (defun child-of-class-p (child class)
   "Return non-nil if CHILD class is a subclass of CLASS."
-  (eieio--check-type class-p class)
-  (eieio--check-type class-p child)
-  (let ((p nil))
-    (while (and child (not (eq child class)))
-      (setq p (append p (eieio--class-parent (class-v child)))
-           child (car p)
-           p (cdr p)))
-    (if child t)))
+  (setq child (eieio--class-object child))
+  (cl-check-type child eieio--class)
+  ;; `eieio-default-superclass' is never mentioned in eieio--class-parent,
+  ;; so we have to special case it here.
+  (or (eq class 'eieio-default-superclass)
+      (let ((p nil))
+        (setq class (eieio--class-object class))
+        (cl-check-type class eieio--class)
+        (while (and child (not (eq child class)))
+          (setq p (append p (eieio--class-parent child))
+                child (pop p)))
+        (if child t))))
 
 (defun object-slots (obj)
   "Return list of slots available in OBJ."
-  (eieio--check-type eieio-object-p obj)
-  (eieio--class-public-a (class-v (eieio--object-class obj))))
+  (cl-check-type obj eieio-object)
+  (eieio--class-public-a (eieio--object-class-object obj)))
 
-(defun class-slot-initarg (class slot) "Fetch from CLASS, SLOT's :initarg."
-  (eieio--check-type class-p class)
-  (let ((ia (eieio--class-initarg-tuples (class-v class)))
+(defun eieio--class-slot-initarg (class slot) "Fetch from CLASS, SLOT's 
:initarg."
+  (cl-check-type class eieio--class)
+  (let ((ia (eieio--class-initarg-tuples class))
        (f nil))
     (while (and ia (not f))
       (if (eq (cdr (car ia)) slot)
@@ -371,6 +484,7 @@ The CLOS function `class-direct-subclasses' is aliased to 
this function."
   "Set the value in OBJ for slot SLOT to VALUE.
 SLOT is the slot name as specified in `defclass' or the tag created
 with in the :initarg slot.  VALUE can be any Lisp object."
+  (declare (debug (form symbolp form)))
   `(eieio-oset ,obj (quote ,slot) ,value))
 
 (defmacro oset-default (class slot value)
@@ -378,6 +492,7 @@ with in the :initarg slot.  VALUE can be any Lisp object."
 The default value is usually set with the :initform tag during class
 creation.  This allows users to change the default behavior of classes
 after they are created."
+  (declare (debug (form symbolp form)))
   `(eieio-oset-default ,class (quote ,slot) ,value))
 
 ;;; CLOS queries into classes and slots
@@ -392,7 +507,7 @@ OBJECT can be an instance or a class."
     ;; Return nil if the magic symbol is in there.
     (not (eq (cond
              ((eieio-object-p object) (eieio-oref object slot))
-             ((class-p object)        (eieio-oref-default object slot))
+             ((symbolp object)        (eieio-oref-default object slot))
              (t (signal 'wrong-type-argument (list 'eieio-object-p object))))
             eieio-unbound))))
 
@@ -402,11 +517,10 @@ OBJECT can be an instance or a class."
 
 (defun slot-exists-p (object-or-class slot)
   "Return non-nil if OBJECT-OR-CLASS has SLOT."
-  (let ((cv (class-v (cond ((eieio-object-p object-or-class)
-                           (eieio-object-class object-or-class))
-                          ((class-p object-or-class)
-                           object-or-class))
-                    )))
+  (let ((cv (cond ((eieio-object-p object-or-class)
+                   (eieio--object-class-object object-or-class))
+                  ((eieio--class-p object-or-class) object-or-class)
+                  (t (find-class object-or-class 'error)))))
     (or (memq slot (eieio--class-public-a cv))
        (memq slot (eieio--class-class-allocation-a cv)))
     ))
@@ -415,10 +529,10 @@ OBJECT can be an instance or a class."
   "Return the class that SYMBOL represents.
 If there is no class, nil is returned if ERRORP is nil.
 If ERRORP is non-nil, `wrong-argument-type' is signaled."
-  (if (not (class-p symbol))
-      (if errorp (signal 'wrong-type-argument (list 'class-p symbol))
-       nil)
-    (class-v symbol)))
+  (let ((class (eieio--class-v symbol)))
+    (cond
+     ((eieio--class-p class) class)
+     (errorp (signal 'wrong-type-argument (list 'class-p symbol))))))
 
 ;;; Slightly more complex utility functions for objects
 ;;
@@ -428,7 +542,7 @@ LIST is a list of objects whose slots are searched.
 Objects in LIST do not need to have a slot named SLOT, nor does
 SLOT need to be bound.  If these errors occur, those objects will
 be ignored."
-  (eieio--check-type listp list)
+  (cl-check-type list list)
   (while (and list (not (condition-case nil
                            ;; This prevents errors for missing slots.
                            (equal key (eieio-oref (car list) slot))
@@ -440,7 +554,7 @@ be ignored."
   "Return an association list with the contents of SLOT as the key element.
 LIST must be a list of objects with SLOT in it.
 This is useful when you need to do completing read on an object group."
-  (eieio--check-type listp list)
+  (cl-check-type list list)
   (let ((assoclist nil))
     (while list
       (setq assoclist (cons (cons (eieio-oref (car list) slot)
@@ -454,7 +568,7 @@ This is useful when you need to do completing read on an 
object group."
 LIST must be a list of objects, but those objects do not need to have
 SLOT in it.  If it does not, then that element is left out of the association
 list."
-  (eieio--check-type listp list)
+  (cl-check-type list list)
   (let ((assoclist nil))
     (while list
       (if (slot-exists-p (car list) slot)
@@ -496,44 +610,6 @@ If SLOT is unbound, do nothing."
       nil
     (eieio-oset object slot (delete item (eieio-oref object slot)))))
 
-;;;
-;; Method Calling Functions
-
-(defun next-method-p ()
-  "Return non-nil if there is a next method.
-Returns a list of lambda expressions which is the `next-method'
-order."
-  eieio-generic-call-next-method-list)
-
-(defun call-next-method (&rest replacement-args)
-  "Call the superclass method from a subclass method.
-The superclass method is specified in the current method list,
-and is called the next method.
-
-If REPLACEMENT-ARGS is non-nil, then use them instead of
-`eieio-generic-call-arglst'.  The generic arg list are the
-arguments passed in at the top level.
-
-Use `next-method-p' to find out if there is a next method to call."
-  (if (not (eieio--scoped-class))
-      (error "`call-next-method' not called within a class specific method"))
-  (if (and (/= eieio-generic-call-key method-primary)
-          (/= eieio-generic-call-key method-static))
-      (error "Cannot `call-next-method' except in :primary or :static methods")
-    )
-  (let ((newargs (or replacement-args eieio-generic-call-arglst))
-       (next (car eieio-generic-call-next-method-list))
-       )
-    (if (or (not next) (not (car next)))
-       (apply #'no-next-method (car newargs) (cdr newargs))
-      (let* ((eieio-generic-call-next-method-list
-             (cdr eieio-generic-call-next-method-list))
-            (eieio-generic-call-arglst newargs)
-            (fcn (car next))
-            )
-       (eieio--with-scoped-class (cdr next)
-         (apply fcn newargs)) ))))
-
 ;;; Here are some CLOS items that need the CL package
 ;;
 
@@ -556,48 +632,55 @@ Its slots are automatically adopted by classes with no 
specified parents.
 This class is not stored in the `parent' slot of a class vector."
   :abstract t)
 
+(setq eieio-default-superclass (eieio--class-v 'eieio-default-superclass))
+
 (defalias 'standard-class 'eieio-default-superclass)
 
-(defgeneric constructor (class newname &rest slots)
+(cl-defgeneric eieio-constructor (class &rest slots)
   "Default constructor for CLASS `eieio-default-superclass'.")
 
-(defmethod constructor :static
-  ((class eieio-default-superclass) newname &rest slots)
+(define-obsolete-function-alias 'constructor #'eieio-constructor "25.1")
+
+(cl-defmethod eieio-constructor
+  ((class (subclass eieio-default-superclass)) &rest slots)
   "Default constructor for CLASS `eieio-default-superclass'.
-NEWNAME is the name to be given to the constructed object.
 SLOTS are the initialization slots used by `shared-initialize'.
 This static method is called when an object is constructed.
 It allocates the vector used to represent an EIEIO object, and then
 calls `shared-initialize' on that object."
-  (let* ((new-object (copy-sequence (eieio--class-default-object-cache 
(class-v class)))))
-    ;; Update the name for the newly created object.
-    (setf (eieio--object-name new-object) newname)
+  (let* ((new-object (copy-sequence (eieio--class-default-object-cache
+                                     (eieio--class-v class)))))
+    (if (and slots
+             (let ((x (car slots)))
+               (or (stringp x) (null x))))
+        (funcall (if eieio-backward-compatibility #'ignore #'message)
+                 "Obsolete name %S passed to %S constructor"
+                 (pop slots) class))
     ;; Call the initialize method on the new object with the slots
     ;; that were passed down to us.
     (initialize-instance new-object slots)
     ;; Return the created object.
     new-object))
 
-(defgeneric shared-initialize (obj slots)
+(cl-defgeneric shared-initialize (obj slots)
   "Set slots of OBJ with SLOTS which is a list of name/value pairs.
 Called from the constructor routine.")
 
-(defmethod shared-initialize ((obj eieio-default-superclass) slots)
+(cl-defmethod shared-initialize ((obj eieio-default-superclass) slots)
   "Set slots of OBJ with SLOTS which is a list of name/value pairs.
 Called from the constructor routine."
-  (eieio--with-scoped-class (eieio--object-class obj)
-    (while slots
-      (let ((rn (eieio-initarg-to-attribute (eieio--object-class obj)
-                                           (car slots))))
-       (if (not rn)
-           (slot-missing obj (car slots) 'oset (car (cdr slots)))
-         (eieio-oset obj rn (car (cdr slots)))))
-      (setq slots (cdr (cdr slots))))))
-
-(defgeneric initialize-instance (this &optional slots)
+  (while slots
+    (let ((rn (eieio--initarg-to-attribute (eieio--object-class-object obj)
+                                           (car slots))))
+      (if (not rn)
+          (slot-missing obj (car slots) 'oset (car (cdr slots)))
+        (eieio-oset obj rn (car (cdr slots)))))
+    (setq slots (cdr (cdr slots)))))
+
+(cl-defgeneric initialize-instance (this &optional slots)
   "Construct the new object THIS based on SLOTS.")
 
-(defmethod initialize-instance ((this eieio-default-superclass)
+(cl-defmethod initialize-instance ((this eieio-default-superclass)
                                &optional slots)
   "Construct the new object THIS based on SLOTS.
 SLOTS is a tagged list where odd numbered elements are tags, and
@@ -609,7 +692,7 @@ not taken, then new objects of your class will not have 
their values
 dynamically set from SLOTS."
   ;; First, see if any of our defaults are `lambda', and
   ;; re-evaluate them and apply the value to our slots.
-  (let* ((this-class (class-v (eieio--object-class this)))
+  (let* ((this-class (eieio--object-class-object this))
         (slot (eieio--class-public-a this-class))
         (defaults (eieio--class-public-d this-class)))
     (while slot
@@ -629,10 +712,10 @@ dynamically set from SLOTS."
   ;; Shared initialize will parse our slots for us.
   (shared-initialize this slots))
 
-(defgeneric slot-missing (object slot-name operation &optional new-value)
+(cl-defgeneric slot-missing (object slot-name operation &optional new-value)
   "Method invoked when an attempt to access a slot in OBJECT fails.")
 
-(defmethod slot-missing ((object eieio-default-superclass) slot-name
+(cl-defmethod slot-missing ((object eieio-default-superclass) slot-name
                         _operation &optional _new-value)
   "Method invoked when an attempt to access a slot in OBJECT fails.
 SLOT-NAME is the name of the failed slot, OPERATION is the type of access
@@ -644,10 +727,10 @@ directly reference slots in EIEIO objects."
   (signal 'invalid-slot-name (list (eieio-object-name object)
                                   slot-name)))
 
-(defgeneric slot-unbound (object class slot-name fn)
+(cl-defgeneric slot-unbound (object class slot-name fn)
   "Slot unbound is invoked during an attempt to reference an unbound slot.")
 
-(defmethod slot-unbound ((object eieio-default-superclass)
+(cl-defmethod slot-unbound ((object eieio-default-superclass)
                         class slot-name fn)
   "Slot unbound is invoked during an attempt to reference an unbound slot.
 OBJECT is the instance of the object being reference.  CLASS is the
@@ -662,75 +745,40 @@ EIEIO can only dispatch on the first argument, so the 
first two are swapped."
   (signal 'unbound-slot (list (eieio-class-name class) (eieio-object-name 
object)
                              slot-name fn)))
 
-(defgeneric no-applicable-method (object method &rest args)
-  "Called if there are no implementations for OBJECT in METHOD.")
-
-(defmethod no-applicable-method ((object eieio-default-superclass)
-                                method &rest _args)
-  "Called if there are no implementations for OBJECT in METHOD.
-OBJECT is the object which has no method implementation.
-ARGS are the arguments that were passed to METHOD.
-
-Implement this for a class to block this signal.  The return
-value becomes the return value of the original method call."
-  (signal 'no-method-definition (list method (eieio-object-name object)))
-  )
-
-(defgeneric no-next-method (object &rest args)
-"Called from `call-next-method' when no additional methods are available.")
-
-(defmethod no-next-method ((object eieio-default-superclass)
-                          &rest args)
-  "Called from `call-next-method' when no additional methods are available.
-OBJECT is othe object being called on `call-next-method'.
-ARGS are the arguments it is called by.
-This method signals `no-next-method' by default.  Override this
-method to not throw an error, and its return value becomes the
-return value of `call-next-method'."
-  (signal 'no-next-method (list (eieio-object-name object) args))
-  )
-
-(defgeneric clone (obj &rest params)
+(cl-defgeneric clone (obj &rest params)
   "Make a copy of OBJ, and then supply PARAMS.
 PARAMS is a parameter list of the same form used by `initialize-instance'.
 
 When overloading `clone', be sure to call `call-next-method'
 first and modify the returned object.")
 
-(defmethod clone ((obj eieio-default-superclass) &rest params)
+(cl-defmethod clone ((obj eieio-default-superclass) &rest params)
   "Make a copy of OBJ, and then apply PARAMS."
-  (let ((nobj (copy-sequence obj))
-       (nm (eieio--object-name obj))
-       (passname (and params (stringp (car params))))
-       (num 1))
-    (if params (shared-initialize nobj (if passname (cdr params) params)))
-    (if (not passname)
-       (save-match-data
-         (if (string-match "-\\([0-9]+\\)" nm)
-             (setq num (1+ (string-to-number (match-string 1 nm)))
-                   nm (substring nm 0 (match-beginning 0))))
-         (setf (eieio--object-name nobj) (concat nm "-" (int-to-string num))))
-      (setf (eieio--object-name nobj) (car params)))
+  (let ((nobj (copy-sequence obj)))
+    (if (stringp (car params))
+        (funcall (if eieio-backward-compatibility #'ignore #'message)
+                 "Obsolete name %S passed to clone" (pop params)))
+    (if params (shared-initialize nobj params))
     nobj))
 
-(defgeneric destructor (this &rest params)
+(cl-defgeneric destructor (this &rest params)
   "Destructor for cleaning up any dynamic links to our object.")
 
-(defmethod destructor ((_this eieio-default-superclass) &rest _params)
+(cl-defmethod destructor ((_this eieio-default-superclass) &rest _params)
   "Destructor for cleaning up any dynamic links to our object.
 Argument THIS is the object being destroyed.  PARAMS are additional
 ignored parameters."
   ;; No cleanup... yet.
   )
 
-(defgeneric object-print (this &rest strings)
+(cl-defgeneric object-print (this &rest strings)
   "Pretty printer for object THIS.  Call function `object-name' with STRINGS.
 
 It is sometimes useful to put a summary of the object into the
 default #<notation> string when using EIEIO browsing tools.
 Implement this method to customize the summary.")
 
-(defmethod object-print ((this eieio-default-superclass) &rest strings)
+(cl-defmethod object-print ((this eieio-default-superclass) &rest strings)
   "Pretty printer for object THIS.  Call function `object-name' with STRINGS.
 The default method for printing object THIS is to use the
 function `object-name'.
@@ -747,11 +795,11 @@ to prepend a space."
 (defvar eieio-print-depth 0
   "When printing, keep track of the current indentation depth.")
 
-(defgeneric object-write (this &optional comment)
+(cl-defgeneric object-write (this &optional comment)
   "Write out object THIS to the current stream.
 Optional COMMENT will add comments to the beginning of the output.")
 
-(defmethod object-write ((this eieio-default-superclass) &optional comment)
+(cl-defmethod object-write ((this eieio-default-superclass) &optional comment)
   "Write object THIS out to the current stream.
 This writes out the vector version of this object.  Complex and recursive
 object are discouraged from being written.
@@ -764,14 +812,14 @@ this object."
     (princ comment)
     (princ "\n"))
   (let* ((cl (eieio-object-class this))
-        (cv (class-v cl)))
+        (cv (eieio--class-v cl)))
     ;; Now output readable lisp to recreate this object
     ;; It should look like this:
     ;; (<constructor> <name> <slot> <slot> ... )
     ;; Each slot's slot is writen using its :writer.
     (princ (make-string (* eieio-print-depth 2) ? ))
     (princ "(")
-    (princ (symbol-name (class-constructor (eieio-object-class this))))
+    (princ (symbol-name (eieio--class-constructor (eieio-object-class this))))
     (princ " ")
     (prin1 (eieio-object-name-string this))
     (princ "\n")
@@ -782,7 +830,7 @@ this object."
          (eieio-print-depth (1+ eieio-print-depth)))
       (while publa
        (when (slot-boundp this (car publa))
-         (let ((i (class-slot-initarg cl (car publa)))
+         (let ((i (eieio--class-slot-initarg cv (car publa)))
                (v (eieio-oref this (car publa)))
                )
            (unless (or (not i) (equal v (car publd)))
@@ -812,12 +860,8 @@ this object."
         (object-write thing))
        ((consp thing)
         (eieio-list-prin1 thing))
-       ((class-p thing)
+       ((eieio--class-p thing)
         (princ (eieio-class-name thing)))
-       ((or (keywordp thing) (booleanp thing))
-        (prin1 thing))
-       ((symbolp thing)
-        (princ (concat "'" (symbol-name thing))))
        (t (prin1 thing))))
 
 (defun eieio-list-prin1 (list)
@@ -848,7 +892,6 @@ of `eq'."
   (error "EIEIO: `change-class' is unimplemented"))
 
 ;; Hook ourselves into help system for describing classes and methods.
-(add-hook 'help-fns-describe-function-functions 'eieio-help-generic)
 (add-hook 'help-fns-describe-function-functions 'eieio-help-constructor)
 
 ;;; Interfacing with edebug
@@ -859,43 +902,23 @@ of `eq'."
 Used as advice around `edebug-prin1-to-string', held in the
 variable PRINT-FUNCTION.  Optional argument NOESCAPE is passed to
 `prin1-to-string' when appropriate."
-  (cond ((class-p object) (eieio-class-name object))
+  (cond ((eieio--class-p object) (eieio-class-name object))
        ((eieio-object-p object) (object-print object))
-       ((and (listp object) (or (class-p (car object))
+       ((and (listp object) (or (eieio--class-p (car object))
                                 (eieio-object-p (car object))))
-        (concat "(" (mapconcat #'eieio-edebug-prin1-to-string object " ")
+        (concat "(" (mapconcat
+                      (lambda (x) (eieio-edebug-prin1-to-string print-function 
x))
+                      object " ")
                  ")"))
        (t (funcall print-function object noescape))))
 
-(add-hook 'edebug-setup-hook
-         (lambda ()
-           (def-edebug-spec defmethod
-             (&define                  ; this means we are defining something
-              [&or name ("setf" :name setf name)]
-              ;; ^^ This is the methods symbol
-              [ &optional symbolp ]    ; this is key :before etc
-              list              ; arguments
-              [ &optional stringp ]    ; documentation string
-              def-body                 ; part to be debugged
-              ))
-           ;; The rest of the macros
-           (def-edebug-spec oref (form quote))
-           (def-edebug-spec oref-default (form quote))
-           (def-edebug-spec oset (form quote form))
-           (def-edebug-spec oset-default (form quote form))
-           (def-edebug-spec class-v form)
-           (def-edebug-spec class-p form)
-           (def-edebug-spec eieio-object-p form)
-           (def-edebug-spec class-constructor form)
-           (def-edebug-spec generic-p form)
-           (def-edebug-spec with-slots (list list def-body))
-           (advice-add 'edebug-prin1-to-string
-                       :around #'eieio-edebug-prin1-to-string)))
+(advice-add 'edebug-prin1-to-string
+            :around #'eieio-edebug-prin1-to-string)
 
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "eieio-custom" "eieio-custom.el" 
"ab711689b2bae8a7d8c4b1e99c892306")
+;;;### (autoloads nil "eieio-custom" "eieio-custom.el" 
"2ec91e473fcad1ff20cd76edc4aab706")
 ;;; Generated autoloads from eieio-custom.el
 
 (autoload 'customize-object "eieio-custom" "\
@@ -906,7 +929,7 @@ Optional argument GROUP is the sub-group of slots to 
display.
 
 ;;;***
 
-;;;### (autoloads nil "eieio-opt" "eieio-opt.el" 
"889c0a935dddf758dbb65488470ffa06")
+;;;### (autoloads nil "eieio-opt" "eieio-opt.el" 
"ff1097f185bc2c253276a7d19fe2f54a")
 ;;; Generated autoloads from eieio-opt.el
 
 (autoload 'eieio-browse "eieio-opt" "\
@@ -927,11 +950,6 @@ Describe CTR if it is a class constructor.
 
 \(fn CTR)" nil nil)
 
-(autoload 'eieio-help-generic "eieio-opt" "\
-Describe GENERIC if it is a generic function.
-
-\(fn GENERIC)" nil nil)
-
 ;;;***
 
 ;;; End of automatically extracted autoloads.
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index 6dddf5b..d527d67 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -1,6 +1,6 @@
 ;;; eldoc.el --- Show function arglist or variable docstring in echo area  -*- 
lexical-binding:t; -*-
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Noah Friedman <address@hidden>
 ;; Maintainer: address@hidden
@@ -79,8 +79,8 @@ This has two preferred values: `upcase' or `downcase'.
 Actually, any name of a function which takes a string as an argument and
 returns another string is acceptable.
 
-Note that if `eldoc-documentation-function' is non-nil, this variable
-has no effect, unless the function handles it explicitly."
+Note that this variable has no effect, unless
+`eldoc-documentation-function' handles it explicitly."
   :type '(radio (function-item upcase)
                (function-item downcase)
                 function)
@@ -102,8 +102,8 @@ If value is nil, messages are always truncated to fit in a 
single line of
 display in the echo area.  Function or variable symbol name may be
 truncated to make more of the arglist or documentation string visible.
 
-Note that if `eldoc-documentation-function' is non-nil, this variable
-has no effect, unless the function handles it explicitly."
+Note that this variable has no effect, unless
+`eldoc-documentation-function' handles it explicitly."
   :type '(radio (const :tag "Always" t)
                 (const :tag "Never" nil)
                 (const :tag "Yes, but truncate symbol names if it will\
@@ -186,7 +186,7 @@ expression point is on."
   :group 'eldoc :lighter eldoc-minor-mode-string
   (setq eldoc-last-message nil)
   (cond
-   ((not eldoc-documentation-function)
+   ((memq eldoc-documentation-function '(nil ignore))
     (message "There is no ElDoc support in this buffer")
     (setq eldoc-mode nil))
    (eldoc-mode
@@ -225,7 +225,9 @@ expression point is on."
             eldoc-idle-delay t
             (lambda ()
                (when (or eldoc-mode
-                         (and global-eldoc-mode eldoc-documentation-function))
+                         (and global-eldoc-mode
+                              (not (memq eldoc-documentation-function
+                                         '(nil ignore)))))
                  (eldoc-print-current-symbol-info))))))
 
   ;; If user has changed the idle delay, update the timer.
@@ -321,7 +323,7 @@ Otherwise work like `message'."
 
 
 ;;;###autoload
-(defvar eldoc-documentation-function nil
+(defvar eldoc-documentation-function #'ignore
   "Function to call to return doc string.
 The function of no args should return a one-line string for displaying
 doc about a function etc. appropriate to the context around point.
@@ -334,7 +336,12 @@ the variables `eldoc-argument-case' and 
`eldoc-echo-area-use-multiline-p',
 and the face `eldoc-highlight-function-argument', if they are to have any
 effect.
 
-This variable is expected to be set buffer-locally by modes that support 
ElDoc.")
+Major modes should modify this variable using `add-function', for example:
+  (add-function :before-until (local 'eldoc-documentation-function)
+                #'foo-mode-eldoc-function)
+so that the global documentation function (i.e. the default value of the
+variable) is taken into account if the major mode specific function does not
+return any documentation.")
 
 (defun eldoc-print-current-symbol-info ()
   ;; This is run from post-command-hook or some idle timer thing,
diff --git a/lisp/emacs-lisp/elint.el b/lisp/emacs-lisp/elint.el
index 77da424..1364670 100644
--- a/lisp/emacs-lisp/elint.el
+++ b/lisp/emacs-lisp/elint.el
@@ -1,6 +1,6 @@
 ;;; elint.el --- Lint Emacs Lisp
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Peter Liljenberg <address@hidden>
 ;; Created: May 1997
diff --git a/lisp/emacs-lisp/elp.el b/lisp/emacs-lisp/elp.el
index c7a5640..39d62ad 100644
--- a/lisp/emacs-lisp/elp.el
+++ b/lisp/emacs-lisp/elp.el
@@ -1,6 +1,6 @@
 ;;; elp.el --- Emacs Lisp Profiler  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1994-1995, 1997-1998, 2001-2014 Free Software
+;; Copyright (C) 1994-1995, 1997-1998, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Barry A. Warsaw
diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el
index 726856c..647784b 100644
--- a/lisp/emacs-lisp/ert-x.el
+++ b/lisp/emacs-lisp/ert-x.el
@@ -1,6 +1,6 @@
 ;;; ert-x.el --- Staging area for experimental extensions to ERT  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2008, 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008, 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Lennart Borgman (lennart O borgman A gmail O com)
 ;;         Christian Ohler <address@hidden>
diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el
index 024110b..4ffd8cd 100644
--- a/lisp/emacs-lisp/ert.el
+++ b/lisp/emacs-lisp/ert.el
@@ -1,6 +1,6 @@
 ;;; ert.el --- Emacs Lisp Regression Testing  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2008, 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2008, 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Christian Ohler <address@hidden>
 ;; Keywords: lisp, tools
diff --git a/lisp/emacs-lisp/ewoc.el b/lisp/emacs-lisp/ewoc.el
index 2ba1ca9..1f0c25e 100644
--- a/lisp/emacs-lisp/ewoc.el
+++ b/lisp/emacs-lisp/ewoc.el
@@ -1,6 +1,6 @@
 ;;; ewoc.el --- utility to maintain a view of a list of objects in a buffer  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1991-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2015 Free Software Foundation, Inc.
 
 ;; Author: Per Cederqvist <address@hidden>
 ;;     Inge Wallin <address@hidden>
diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
index c372117..7ea13d4 100644
--- a/lisp/emacs-lisp/find-func.el
+++ b/lisp/emacs-lisp/find-func.el
@@ -1,6 +1,6 @@
-;;; find-func.el --- find the definition of the Emacs Lisp function near point
+;;; find-func.el --- find the definition of the Emacs Lisp function near point 
 -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997, 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Jens Petersen <address@hidden>
 ;; Maintainer: address@hidden
@@ -59,7 +59,7 @@
   (concat
    "^\\s-*(\\(def\\(ine-skeleton\\|ine-generic-mode\\|ine-derived-mode\\|\
 ine\\(?:-global\\)?-minor-mode\\|ine-compilation-mode\\|un-cvs-mode\\|\
-foo\\|[^icfgv]\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\
+foo\\|\\(?:[^icfgv]\\|g[^r]\\)\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\
 menu-bar-make-toggle\\)"
    find-function-space-re
    "\\('\\|\(quote \\)?%s\\(\\s-\\|$\\|\(\\|\)\\)")
@@ -106,7 +106,10 @@ Please send improvements and fixes to the maintainer."
     (defface . find-face-regexp))
   "Alist mapping definition types into regexp variables.
 Each regexp variable's value should actually be a format string
-to be used to substitute the desired symbol name into the regexp.")
+to be used to substitute the desired symbol name into the regexp.
+Instead of regexp variable, types can be mapped to functions as well,
+in which case the function is called with one argument (the object
+we're looking for) and it should search for it.")
 (put 'find-function-regexp-alist 'risky-local-variable t)
 
 (defcustom find-function-source-path nil
@@ -282,35 +285,78 @@ The search is done in the source for library LIBRARY."
     (let* ((filename (find-library-name library))
           (regexp-symbol (cdr (assq type find-function-regexp-alist))))
       (with-current-buffer (find-file-noselect filename)
-       (let ((regexp (format (symbol-value regexp-symbol)
-                             ;; Entry for ` (backquote) macro in loaddefs.el,
-                             ;; (defalias (quote \`)..., has a \ but
-                             ;; (symbol-name symbol) doesn't.  Add an
-                             ;; optional \ to catch this.
-                             (concat "\\\\?"
-                                     (regexp-quote (symbol-name symbol)))))
+       (let ((regexp (if (functionp regexp-symbol) regexp-symbol
+                        (format (symbol-value regexp-symbol)
+                                ;; Entry for ` (backquote) macro in 
loaddefs.el,
+                                ;; (defalias (quote \`)..., has a \ but
+                                ;; (symbol-name symbol) doesn't.  Add an
+                                ;; optional \ to catch this.
+                                (concat "\\\\?"
+                                        (regexp-quote (symbol-name symbol))))))
              (case-fold-search))
          (with-syntax-table emacs-lisp-mode-syntax-table
            (goto-char (point-min))
-           (if (or (re-search-forward regexp nil t)
-                    ;; `regexp' matches definitions using known forms like
-                    ;; `defun', or `defvar'.  But some functions/variables
-                    ;; are defined using special macros (or functions), so
-                    ;; if `regexp' can't find the definition, we look for
-                    ;; something of the form "(SOMETHING <symbol> ...)".
-                    ;; This fails to distinguish function definitions from
-                    ;; variable declarations (or even uses thereof), but is
-                    ;; a good pragmatic fallback.
-                   (re-search-forward
-                    (concat "^([^ ]+" find-function-space-re "['(]?"
-                            (regexp-quote (symbol-name symbol))
-                            "\\_>")
-                    nil t))
+           (if (if (functionp regexp)
+                    (funcall regexp symbol)
+                  (or (re-search-forward regexp nil t)
+                      ;; `regexp' matches definitions using known forms like
+                      ;; `defun', or `defvar'.  But some functions/variables
+                      ;; are defined using special macros (or functions), so
+                      ;; if `regexp' can't find the definition, we look for
+                      ;; something of the form "(SOMETHING <symbol> ...)".
+                      ;; This fails to distinguish function definitions from
+                      ;; variable declarations (or even uses thereof), but is
+                      ;; a good pragmatic fallback.
+                      (re-search-forward
+                       (concat "^([^ ]+" find-function-space-re "['(]?"
+                               (regexp-quote (symbol-name symbol))
+                               "\\_>")
+                       nil t)))
                (progn
                  (beginning-of-line)
                  (cons (current-buffer) (point)))
              (cons (current-buffer) nil))))))))
 
+(defun find-function-library (function &optional lisp-only verbose)
+  "Return the pair (ORIG-FUNCTION . LIBRARY) for FUNCTION.
+
+ORIG-FUNCTION is the original name, after removing all advice and
+resolving aliases.  LIBRARY is an absolute file name, a relative
+file name inside the C sources directory, or a name of an
+autoloaded feature.
+
+If ORIG-FUNCTION is a built-in function and LISP-ONLY is non-nil,
+signal an error.
+
+If VERBOSE is non-nil, and FUNCTION is an alias, display a
+message about the whole chain of aliases."
+  (let ((def (if (symbolp function)
+                 (symbol-function (find-function-advised-original function))))
+        aliases)
+    ;; FIXME for completeness, it might be nice to print something like:
+    ;; foo (which is advised), which is an alias for bar (which is advised).
+    (while (and def (symbolp def))
+      (or (eq def function)
+          (not verbose)
+          (setq aliases (if aliases
+                            (concat aliases
+                                    (format ", which is an alias for `%s'"
+                                            (symbol-name def)))
+                          (format "`%s' is an alias for `%s'"
+                                  function (symbol-name def)))))
+      (setq function (symbol-function (find-function-advised-original 
function))
+            def (symbol-function (find-function-advised-original function))))
+    (if aliases
+        (message "%s" aliases))
+    (cons function
+          (cond
+           ((autoloadp def) (nth 1 def))
+           ((subrp def)
+            (if lisp-only
+                (error "%s is a built-in function" function))
+            (help-C-file-name def 'subr))
+           ((symbol-file function 'defun))))))
+
 ;;;###autoload
 (defun find-function-noselect (function &optional lisp-only)
   "Return a pair (BUFFER . POINT) pointing to the definition of FUNCTION.
@@ -329,30 +375,8 @@ searched for in `find-function-source-path' if non-nil, 
otherwise
 in `load-path'."
   (if (not function)
     (error "You didn't specify a function"))
-  (let ((def (symbol-function (find-function-advised-original function)))
-       aliases)
-    ;; FIXME for completeness, it might be nice to print something like:
-    ;; foo (which is advised), which is an alias for bar (which is advised).
-    (while (symbolp def)
-      (or (eq def function)
-         (if aliases
-             (setq aliases (concat aliases
-                                   (format ", which is an alias for `%s'"
-                                           (symbol-name def))))
-           (setq aliases (format "`%s' is an alias for `%s'"
-                                 function (symbol-name def)))))
-      (setq function (symbol-function (find-function-advised-original 
function))
-           def (symbol-function (find-function-advised-original function))))
-    (if aliases
-       (message "%s" aliases))
-    (let ((library
-          (cond ((autoloadp def) (nth 1 def))
-                ((subrp def)
-                 (if lisp-only
-                     (error "%s is a built-in function" function))
-                 (help-C-file-name def 'subr))
-                ((symbol-file function 'defun)))))
-      (find-function-search-for-symbol function nil library))))
+  (let ((func-lib (find-function-library function lisp-only t)))
+    (find-function-search-for-symbol (car func-lib) nil (cdr func-lib))))
 
 (defun find-function-read (&optional type)
   "Read and return an interned symbol, defaulting to the one near point.
@@ -391,7 +415,6 @@ See also `find-function-after-hook'.
 
 Set mark before moving, if the buffer already existed."
   (let* ((orig-point (point))
-       (orig-buf (window-buffer))
        (orig-buffers (buffer-list))
        (buffer-point (save-excursion
                        (find-definition-noselect symbol type)))
diff --git a/lisp/emacs-lisp/float-sup.el b/lisp/emacs-lisp/float-sup.el
index 30523c5..0320662 100644
--- a/lisp/emacs-lisp/float-sup.el
+++ b/lisp/emacs-lisp/float-sup.el
@@ -1,6 +1,6 @@
 ;;; float-sup.el --- define some constants useful for floating point numbers.
 
-;; Copyright (C) 1985-1987, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
diff --git a/lisp/emacs-lisp/generic.el b/lisp/emacs-lisp/generic.el
index 02c30aa..b7f4070 100644
--- a/lisp/emacs-lisp/generic.el
+++ b/lisp/emacs-lisp/generic.el
@@ -1,6 +1,6 @@
 ;;; generic.el --- defining simple major modes with comment and font-lock
 ;;
-;; Copyright (C) 1997, 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2015 Free Software Foundation, Inc.
 ;;
 ;; Author:  Peter Breton <address@hidden>
 ;; Created: Fri Sep 27 1996
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index a0f92a5..5d6e6e1 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -1,6 +1,6 @@
 ;;; gv.el --- generalized variables  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: extensions
diff --git a/lisp/emacs-lisp/helper.el b/lisp/emacs-lisp/helper.el
index eca2e22..8b7737b 100644
--- a/lisp/emacs-lisp/helper.el
+++ b/lisp/emacs-lisp/helper.el
@@ -1,6 +1,6 @@
 ;;; helper.el --- utility help package supporting help in electric modes
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: address@hidden
diff --git a/lisp/emacs-lisp/inline.el b/lisp/emacs-lisp/inline.el
new file mode 100644
index 0000000..c3f696f
--- /dev/null
+++ b/lisp/emacs-lisp/inline.el
@@ -0,0 +1,262 @@
+;;; inline.el --- Define functions by their inliner  -*- lexical-binding:t; -*-
+
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
+
+;; Author: Stefan Monnier <address@hidden>
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package provides the macro `define-inline' which lets you define
+;; functions by defining their (exhaustive) compiler macro.
+;;
+;; The idea is that instead of doing like defsubst and cl-defsubst (i.e. from
+;; the function's definition, guess the best way to inline the function),
+;; we go the other way around: the programmer provides the code that does the
+;; inlining (as a compiler-macro) and from that we derive the definition of the
+;; function itself.  The idea originated in an attempt to clean up `cl-typep',
+;; whose function definition amounted to (eval (cl--make-type-test EXP TYPE)).
+;;
+;; The simplest use is for plain and simple inlinable functions.  Rather than:
+;;
+;;     (defmacro myaccessor (obj)
+;;       (macroexp-let2 macroexp-copyable-p obj obj
+;;         `(if (foop ,obj) (aref (cdr ,obj) 3) (aref ,obj 2))))
+;; Or
+;;     (defsubst myaccessor (obj)
+;;       (if (foop obj) (aref (cdr obj) 3) (aref obj 2)))
+;; Or
+;;     (cl-defsubst myaccessor (obj)
+;;       (if (foop obj) (aref (cdr obj) 3) (aref obj 2)))
+;;
+;; You'd do
+;;
+;;     (define-inline myaccessor (obj)
+;;       (inline-letevals (obj)
+;;         (inline-quote (if (foop ,obj) (aref (cdr ,obj) 3) (aref ,obj 2)))))
+;;
+;; Other than verbosity, you get the best of all 3 above without their
+;; respective downsides:
+;; - defmacro: can't be passed to `mapcar' since it's not a function.
+;; - defsubst: not as efficient, and doesn't work as a `gv' place.
+;; - cl-defsubst: only works by accident, since it has latent bugs in its
+;;   handling of variables and scopes which could bite you at any time.
+;;   (e.g. try (cl-defsubst my-test1 (x) (let ((y 5)) (+ x y)))
+;;         and then M-: (macroexpand-all '(my-test1 y)) RET)
+;; There is still one downside shared with the defmacro and cl-defsubst
+;; approach: when the function is inlined, the scoping rules (dynamic or
+;; lexical) will be inherited from the the call site.
+
+;; Of course, since define-inline defines a compiler macro, you can also do
+;; call-site optimizations, just like you can with `defmacro', but not with
+;; defsubst nor cl-defsubst.
+
+;;; Code:
+
+(require 'macroexp)
+
+(defmacro inline-quote (_exp)
+  "Similar to backquote, but quotes code and only accepts , and not ,@."
+  (declare (debug t))
+  (error "inline-quote can only be used within define-inline"))
+
+(defmacro inline-const-p (_exp)
+  "Return non-nil if the value of EXP is already known."
+  (declare (debug t))
+  (error "inline-const-p can only be used within define-inline"))
+
+(defmacro inline-const-val (_exp)
+  "Return the value of EXP."
+  (declare (debug t))
+  (error "inline-const-val can only be used within define-inline"))
+
+(defmacro inline-error (_format &rest _args)
+  "Signal an error."
+  (declare (debug t))
+  (error "inline-error can only be used within define-inline"))
+
+(defmacro inline--leteval (_var-exp &rest _body)
+  (declare (indent 1) (debug (sexp &rest body)))
+  (error "inline-letevals can only be used within define-inline"))
+(defmacro inline--letlisteval (_list &rest _body)
+  (declare (indent 1) (debug (sexp &rest body)))
+  (error "inline-letevals can only be used within define-inline"))
+
+(defmacro inline-letevals (vars &rest body)
+  "Make sure the expressions in VARS are evaluated.
+VARS should be a list of elements of the form (VAR EXP) or just VAR, in case
+EXP is equal to VAR.  The result is to evaluate EXP and bind the result to VAR.
+
+The tail of VARS can be either nil or a symbol VAR which should hold a list
+of arguments,in which case each argument is evaluated and the resulting
+new list is re-bound to VAR.
+
+After VARS is handled, BODY is evaluated in the new environment."
+  (declare (indent 1) (debug (sexp &rest form)))
+  (cond
+   ((consp vars)
+    `(inline--leteval ,(pop vars) (inline-letevals ,vars ,@body)))
+   (vars
+    `(inline--letlisteval ,vars ,@body))
+   (t (macroexp-progn body))))
+
+;; (defmacro inline-if (testfun testexp then else)
+;;   (declare (indent 2) (debug (sexp symbolp form form)))
+;;   (macroexp-let2 macroexp-copyable-p testsym testexp
+;;     `(if (inline-const-p ,testexp)
+;;          (if (,testfun (inline-const-val ,testexp)) ,then ,else)
+;;        (inline-quote (if (,testfun ,testexp) ,(list '\, then)
+;;                         ,(list '\, else))))))
+
+;;;###autoload
+(defmacro define-inline (name args &rest body)
+  ;; FIXME: How can this work with CL arglists?
+  (declare (indent defun) (debug defun) (doc-string 3))
+  (let ((doc (if (stringp (car-safe body)) (list (pop body))))
+        (declares (if (eq (car-safe (car-safe body)) 'declare) (pop body)))
+        (cm-name (intern (format "%s--inliner" name)))
+        (bodyexp (macroexp-progn body)))
+    ;; If the function is autoloaded then when we load the .el file, the
+    ;; `compiler-macro' property is already set (from loaddefs.el) and might
+    ;; hence be called during the macroexpand-all calls below (if the function
+    ;; is recursive).
+    ;; So we disable any pre-loaded compiler-macro setting to avoid this.
+    (function-put name 'compiler-macro nil)
+    `(progn
+       (defun ,name ,args
+         ,@doc
+         (declare (compiler-macro ,cm-name) ,@(cdr declares))
+         ,(macroexpand-all bodyexp
+                           `((inline-quote . inline--dont-quote)
+                             ;; (inline-\` . inline--dont-quote)
+                             (inline--leteval . inline--dont-leteval)
+                             (inline--letlisteval . inline--dont-letlisteval)
+                             (inline-const-p . inline--alwaysconst-p)
+                             (inline-const-val . inline--alwaysconst-val)
+                             (inline-error . inline--error)
+                             ,@macroexpand-all-environment)))
+       :autoload-end
+       (eval-and-compile
+         (defun ,cm-name ,(cons 'inline--form args)
+           (ignore inline--form)     ;In case it's not used!
+           (catch 'inline--just-use
+             ,(macroexpand-all
+               bodyexp
+               `((inline-quote . inline--do-quote)
+                 ;; (inline-\` . inline--do-quote)
+                 (inline--leteval . inline--do-leteval)
+                 (inline--letlisteval
+                  . inline--do-letlisteval)
+                 (inline-const-p . inline--testconst-p)
+                 (inline-const-val . inline--getconst-val)
+                 (inline-error . inline--warning)
+                 ,@macroexpand-all-environment))))))))
+
+(defun inline--do-quote (exp)
+  (pcase exp
+    (`(,'\, ,e) e)                      ;Eval `e' now *and* later.
+    (`'(,'\, ,e) `(list 'quote ,e))     ;Only eval `e' now, not later.
+    (`#'(,'\, ,e) `(list 'function ,e)) ;Only eval `e' now, not later.
+    ((pred consp)
+     (let ((args ()))
+       (while (and (consp exp) (not (eq '\, (car exp))))
+         (push (inline--do-quote (pop exp)) args))
+       (setq args (nreverse args))
+       (if exp
+           `(backquote-list* ,@args ,(inline--do-quote exp))
+         `(list ,@args))))
+    (_ (macroexp-quote exp))))
+
+(defun inline--dont-quote (exp)
+  (pcase exp
+    (`(,'\, ,e) e)
+    (`'(,'\, ,e) e)
+    (`#'(,'\, ,e) e)
+    ((pred consp)
+     (let ((args ()))
+       (while (and (consp exp) (not (eq '\, (car exp))))
+         (push (inline--dont-quote (pop exp)) args))
+       (setq args (nreverse args))
+       (if exp
+           `(apply ,@args ,(inline--dont-quote exp))
+         args)))
+    (_ exp)))
+
+(defun inline--do-leteval (var-exp &rest body)
+  `(macroexp-let2 ,(if (symbolp var-exp) #'macroexp-copyable-p #'ignore)
+       ,(or (car-safe var-exp) var-exp)
+       ,(or (car (cdr-safe var-exp)) var-exp)
+     ,@body))
+
+(defun inline--dont-leteval (var-exp &rest body)
+  (if (symbolp var-exp)
+      (macroexp-progn body)
+    `(let (,var-exp) ,@body)))
+
+(defun inline--do-letlisteval (listvar &rest body)
+  ;; Here's a sample situation:
+  ;; (define-inline foo (arg &rest keys)
+  ;;   (inline-letevals (arg . keys)
+  ;;      <check-keys>))
+  ;; I.e. in <check-keys> we need `keys' to contain a list of
+  ;; macroexp-copyable-p expressions.
+  (let ((bsym (make-symbol "bindings")))
+    `(let* ((,bsym ())
+            (,listvar (mapcar (lambda (e)
+                                (if (macroexp-copyable-p e) e
+                                  (let ((v (make-symbol "v")))
+                                    (push (list v e) ,bsym)
+                                    v)))
+                              ,listvar)))
+       (macroexp-let* (nreverse ,bsym)
+                      ,(macroexp-progn body)))))
+
+(defun inline--dont-letlisteval (_listvar &rest body)
+  (macroexp-progn body))
+
+(defun inline--testconst-p (exp)
+  (macroexp-let2 macroexp-copyable-p exp exp
+    `(or (macroexp-const-p ,exp)
+         (eq (car-safe ,exp) 'function))))
+
+(defun inline--alwaysconst-p (_exp)
+  t)
+
+(defun inline--getconst-val (exp)
+  (macroexp-let2 macroexp-copyable-p exp exp
+    `(cond
+      ((not ,(inline--testconst-p exp))
+       (throw 'inline--just-use inline--form))
+      ((consp ,exp) (cadr ,exp))
+      (t ,exp))))
+
+(defun inline--alwaysconst-val (exp)
+  exp)
+
+(defun inline--error (&rest args)
+  `(error ,@args))
+
+(defun inline--warning (&rest _args)
+  `(throw 'inline--just-use
+          ;; FIXME: This would inf-loop by calling us right back when
+          ;; macroexpand-all recurses to expand inline--form.
+          ;; (macroexp--warn-and-return (format ,@args)
+          ;;                            inline--form)
+          inline--form))
+
+(provide 'inline)
+;;; inline.el ends here
diff --git a/lisp/emacs-lisp/lisp-mnt.el b/lisp/emacs-lisp/lisp-mnt.el
index 9256ad7..f9874d8 100644
--- a/lisp/emacs-lisp/lisp-mnt.el
+++ b/lisp/emacs-lisp/lisp-mnt.el
@@ -1,6 +1,6 @@
 ;;; lisp-mnt.el --- utility functions for Emacs Lisp maintainers
 
-;; Copyright (C) 1992, 1994, 1997, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1992, 1994, 1997, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric S. Raymond <address@hidden>
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index d84113b..868a957 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -1,6 +1,6 @@
 ;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1999-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: lisp, languages
diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el
index 31682d0..214bed7 100644
--- a/lisp/emacs-lisp/lisp.el
+++ b/lisp/emacs-lisp/lisp.el
@@ -1,6 +1,6 @@
 ;;; lisp.el --- Lisp editing commands for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1994, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1994, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el
index a1dc6fa..797de9a 100644
--- a/lisp/emacs-lisp/macroexp.el
+++ b/lisp/emacs-lisp/macroexp.el
@@ -1,6 +1,6 @@
 ;;; macroexp.el --- Additional macro-expansion support -*- lexical-binding: t; 
coding: utf-8 -*-
 ;;
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <address@hidden>
 ;; Keywords: lisp, compiler, macros
@@ -168,6 +168,26 @@ and also to avoid outputting the warning during normal 
execution."
                 form))))))))
    (t form)))
 
+(defun macroexp-macroexpand (form env)
+  "Like `macroexpand' but checking obsolescence."
+  (let ((new-form
+         (macroexpand form env)))
+    (if (and (not (eq form new-form))   ;It was a macro call.
+             (car-safe form)
+             (symbolp (car form))
+             (get (car form) 'byte-obsolete-info)
+             (or (not (fboundp 'byte-compile-warning-enabled-p))
+                 (byte-compile-warning-enabled-p 'obsolete)))
+        (let* ((fun (car form))
+               (obsolete (get fun 'byte-obsolete-info)))
+          (macroexp--warn-and-return
+           (macroexp--obsolete-warning
+            fun obsolete
+            (if (symbolp (symbol-function fun))
+                "alias" "macro"))
+           new-form))
+      new-form)))
+
 (defun macroexp--expand-all (form)
   "Expand all macros in FORM.
 This is an internal version of `macroexpand-all'.
@@ -180,24 +200,7 @@ Assumes the caller has bound 
`macroexpand-all-environment'."
       (macroexpand (macroexp--all-forms form 1)
                   macroexpand-all-environment)
     ;; Normal form; get its expansion, and then expand arguments.
-    (let ((new-form
-           (macroexpand form macroexpand-all-environment)))
-      (setq form
-            (if (and (not (eq form new-form)) ;It was a macro call.
-                     (car-safe form)
-                     (symbolp (car form))
-                     (get (car form) 'byte-obsolete-info)
-                     (or (not (fboundp 'byte-compile-warning-enabled-p))
-                         (byte-compile-warning-enabled-p 'obsolete)))
-                (let* ((fun (car form))
-                       (obsolete (get fun 'byte-obsolete-info)))
-                  (macroexp--warn-and-return
-                   (macroexp--obsolete-warning
-                    fun obsolete
-                    (if (symbolp (symbol-function fun))
-                        "alias" "macro"))
-                   new-form))
-              new-form)))
+    (setq form (macroexp-macroexpand form macroexpand-all-environment))
     (pcase form
       (`(cond . ,clauses)
        (macroexp--cons 'cond (macroexp--all-clauses clauses) form))
@@ -344,6 +347,15 @@ be skipped; if nil, as is usual, `macroexp-const-p' is 
used."
          (macroexp-let* (list (list ,var ,expsym))
                         ,bodysym)))))
 
+(defmacro macroexp-let2* (test bindings &rest body)
+  "Bind each binding in BINDINGS as `macroexp-let2' does."
+  (declare (indent 2) (debug (sexp (&rest (sexp form)) body)))
+  (pcase-exhaustive bindings
+    (`nil (macroexp-progn body))
+    (`((,var ,exp) . ,tl)
+     `(macroexp-let2 ,test ,var ,exp
+        (macroexp-let2* ,test ,tl ,@body)))))
+
 (defun macroexp--maxsize (exp size)
   (cond ((< size 0) size)
         ((symbolp exp) (1- size))
diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el
index 4675291..08b34fb 100644
--- a/lisp/emacs-lisp/map-ynp.el
+++ b/lisp/emacs-lisp/map-ynp.el
@@ -1,6 +1,6 @@
 ;;; map-ynp.el --- general-purpose boolean question-asker  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1991-1995, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1995, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Roland McGrath <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el
index a81d3e4..faebe26 100644
--- a/lisp/emacs-lisp/nadvice.el
+++ b/lisp/emacs-lisp/nadvice.el
@@ -1,6 +1,6 @@
 ;;; nadvice.el --- Light-weight advice primitives for Elisp functions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: extensions, lisp, tools
diff --git a/lisp/emacs-lisp/package-x.el b/lisp/emacs-lisp/package-x.el
index 1d9d1a0..e0945d4 100644
--- a/lisp/emacs-lisp/package-x.el
+++ b/lisp/emacs-lisp/package-x.el
@@ -1,6 +1,6 @@
 ;;; package-x.el --- Package extras
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <address@hidden>
 ;; Created: 10 Mar 2007
@@ -207,6 +207,10 @@ if it exists."
               (pkg-version (package-version-join split-version))
               (pkg-buffer (current-buffer)))
 
+          ;; `package-upload-file' will error if given a directory,
+          ;; but we check it here as well just in case.
+          (when (eq 'dir file-type)
+            (user-error "Can't upload directory, tar it instead"))
          ;; Get archive-contents from ARCHIVE-URL if it's non-nil, or
          ;; from `package-archive-upload-base' otherwise.
          (let ((contents (or (package--archive-contents-from-url archive-url)
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 4e5c397..88fc950 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1,6 +1,6 @@
 ;;; package.el --- Simple package system for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <address@hidden>
 ;;         Daniel Hackney <address@hidden>
@@ -228,6 +228,23 @@ a package can run arbitrary code."
   :group 'package
   :version "24.1")
 
+(defcustom package-archive-priorities nil
+  "An alist of priorities for packages.
+
+Each element has the form (ARCHIVE-ID . PRIORITY).
+
+When installing packages, the package with the highest version
+number from the archive with the highest priority is
+selected. When higher versions are available from archives with
+lower priorities, the user has to select those manually.
+
+Archives not in this list have the priority 0."
+  :type '(alist :key-type (string :tag "Archive name")
+                :value-type (integer :tag "Priority (default is 0)"))
+  :risky t
+  :group 'package
+  :version "25.1")
+
 (defcustom package-pinned-packages nil
   "An alist of packages that are pinned to specific archives.
 This can be useful if you have multiple package archives enabled,
@@ -397,6 +414,7 @@ Slots:
   (pcase (package-desc-kind pkg-desc)
     (`single ".el")
     (`tar ".tar")
+    (`dir "")
     (kind (error "Unknown package kind: %s" kind))))
 
 (defun package-desc--keywords (pkg-desc)
@@ -516,7 +534,11 @@ Return the max version (as a string) if the package is 
held at a lower version."
              force))
           (t (error "Invalid element in `package-load-list'")))))
 
-(defun package-activate-1 (pkg-desc)
+(defun package-activate-1 (pkg-desc &optional reload)
+  "Activate package given by PKG-DESC, even if it was already active.
+If RELOAD is non-nil, also `load' any files inside the package which
+correspond to previously loaded files (those returned by
+`package--list-loaded-files')."
   (let* ((name (package-desc-name pkg-desc))
         (pkg-dir (package-desc-dir pkg-desc))
          (pkg-dir-dir (file-name-as-directory pkg-dir)))
@@ -524,15 +546,27 @@ Return the max version (as a string) if the package is 
held at a lower version."
       (error "Internal error: unable to find directory for `%s'"
             (package-desc-full-name pkg-desc)))
     ;; Add to load path, add autoloads, and activate the package.
-    (let ((old-lp load-path))
-      (with-demoted-errors
-        (load (expand-file-name (format "%s-autoloads" name) pkg-dir) nil t))
+    (let* ((old-lp load-path)
+           (autoloads-file (expand-file-name
+                            (format "%s-autoloads" name) pkg-dir))
+           (loaded-files-list (and reload (package--list-loaded-files 
pkg-dir))))
+      (with-demoted-errors "Error in package-activate-1: %s"
+        (load autoloads-file nil t))
       (when (and (eq old-lp load-path)
                  (not (or (member pkg-dir load-path)
                           (member pkg-dir-dir load-path))))
         ;; Old packages don't add themselves to the `load-path', so we have to
         ;; do it ourselves.
-        (push pkg-dir load-path)))
+        (push pkg-dir load-path))
+      ;; Call `load' on all files in `pkg-dir' already present in
+      ;; `load-history'.  This is done so that macros in these files are 
updated
+      ;; to their new definitions.  If another package is being installed which
+      ;; depends on this new definition, not doing this update would cause
+      ;; compilation errors and break the installation.
+      (with-demoted-errors "Error in package-activate-1: %s"
+       (mapc (lambda (feature) (load feature nil t))
+              ;; Skip autoloads file since we already evaluated it above.
+              (remove (file-truename autoloads-file) loaded-files-list))))
     ;; Add info node.
     (when (file-exists-p (expand-file-name "dir" pkg-dir))
       ;; FIXME: not the friendliest, but simple.
@@ -543,6 +577,41 @@ Return the max version (as a string) if the package is 
held at a lower version."
     ;; Don't return nil.
     t))
 
+(declare-function find-library-name "find-func" (library))
+(defun package--list-loaded-files (dir)
+  "Recursively list all files in DIR which correspond to loaded features.
+Returns the `file-name-sans-extension' of each file, relative to
+DIR, sorted by most recently loaded last."
+  (let* ((history (delq nil
+                        (mapcar (lambda (x)
+                                  (let ((f (car x)))
+                                    (and f (file-name-sans-extension f))))
+                                load-history)))
+         (dir (file-truename dir))
+         ;; List all files that have already been loaded.
+         (list-of-conflicts
+          (delq
+           nil
+           (mapcar
+               (lambda (x) (let* ((file (file-relative-name x dir))
+                             ;; Previously loaded file, if any.
+                             (previous
+                              (ignore-errors
+                                (file-name-sans-extension
+                                 (file-truename (find-library-name file)))))
+                             (pos (when previous (member previous history))))
+                        ;; Return (RELATIVE-FILENAME . HISTORY-POSITION)
+                        (when pos
+                          (cons (file-name-sans-extension file) (length 
pos)))))
+             (directory-files-recursively dir "\\`[^\\.].*\\.el\\'")))))
+    ;; Turn the list of (FILENAME . POS) back into a list of features.  Files 
in
+    ;; subdirectories are returned relative to DIR (so not actually features).
+    (let ((default-directory (file-name-as-directory dir)))
+      (mapcar (lambda (x) (file-truename (car x)))
+        (sort list-of-conflicts
+              ;; Sort the files by ascending HISTORY-POSITION.
+              (lambda (x y) (< (cdr x) (cdr y))))))))
+
 (defun package-built-in-p (package &optional min-version)
   "Return true if PACKAGE is built-in to Emacs.
 Optional arg MIN-VERSION, if non-nil, should be a version list
@@ -592,14 +661,14 @@ If FORCE is true, (re-)activate it if it's already 
activated."
              (fail (catch 'dep-failure
                      ;; Activate its dependencies recursively.
                      (dolist (req (package-desc-reqs pkg-vec))
-                       (unless (package-activate (car req) (cadr req))
+                       (unless (package-activate (car req))
                          (throw 'dep-failure req))))))
        (if fail
            (warn "Unable to activate package `%s'.
 Required package `%s-%s' is unavailable"
                  package (car fail) (package-version-join (cadr fail)))
          ;; If all goes well, activate the package itself.
-         (package-activate-1 pkg-vec)))))))
+         (package-activate-1 pkg-vec force)))))))
 
 (defun define-package (_name-string _version-string
                                     &optional _docstring _requirements
@@ -733,6 +802,20 @@ untar into a directory named DIR; otherwise, signal an 
error."
          (dirname (package-desc-full-name pkg-desc))
         (pkg-dir (expand-file-name dirname package-user-dir)))
     (pcase (package-desc-kind pkg-desc)
+      (`dir
+       (make-directory pkg-dir t)
+       (let ((file-list
+              (directory-files
+               default-directory 'full "\\`[^.].*\\.el\\'" 'nosort)))
+         (dolist (source-file file-list)
+           (let ((target-el-file
+                  (expand-file-name (file-name-nondirectory source-file) 
pkg-dir)))
+             (copy-file source-file target-el-file t)))
+         ;; Now that the files have been installed, this package is
+         ;; indistinguishable from a `tar' or a `single'. Let's make
+         ;; things simple by ensuring we're one of them.
+         (setf (package-desc-kind pkg-desc)
+               (if (> (length file-list) 1) 'tar 'single))))
       (`tar
        (make-directory package-user-dir t)
        ;; FIXME: should we delete PKG-DIR if it exists?
@@ -858,6 +941,9 @@ GnuPG keyring is located under \"gnupg\" in 
`package-user-dir'."
 
 (defun package-install-from-archive (pkg-desc)
   "Download and install a tar package."
+  ;; This won't happen, unless the archive is doing something wrong.
+  (when (eq (package-desc-kind pkg-desc) 'dir)
+    (error "Can't install directory package from archive"))
   (let* ((location (package-archive-base pkg-desc))
         (file (concat (package-desc-full-name pkg-desc)
                       (package-desc-suffix pkg-desc)))
@@ -1063,23 +1149,34 @@ Also, add the originating archive to the `package-desc' 
structure."
                         ;; Older archive-contents files have only 4
                         ;; elements here.
                         (package--ac-desc-extras (cdr package)))))
-         (existing-packages (assq name package-archive-contents))
          (pinned-to-archive (assoc name package-pinned-packages)))
-    (cond
-     ;; Skip entirely if pinned to another archive.
-     ((and pinned-to-archive
-           (not (equal (cdr pinned-to-archive) archive)))
-      nil)
-     ((not existing-packages)
-      (push (list name pkg-desc) package-archive-contents))
-     (t
-      (while
-          (if (and (cdr existing-packages)
-                   (version-list-<
-                    version (package-desc-version (cadr existing-packages))))
-              (setq existing-packages (cdr existing-packages))
-            (push pkg-desc (cdr existing-packages))
-            nil))))))
+    ;; Skip entirely if pinned to another archive.
+    (when (not (and pinned-to-archive
+                    (not (equal (cdr pinned-to-archive) archive))))
+      (setq package-archive-contents
+            (package--append-to-alist pkg-desc package-archive-contents)))))
+
+(defun package--append-to-alist (pkg-desc alist)
+  "Append an entry for PKG-DESC to the start of ALIST and return it.
+This entry takes the form (`package-desc-name' PKG-DESC).
+
+If ALIST already has an entry with this name, destructively add
+PKG-DESC to the cdr of this entry instead, sorted by version
+number."
+  (let* ((name (package-desc-name pkg-desc))
+         (priority-version (package-desc-priority-version pkg-desc))
+         (existing-packages (assq name alist)))
+    (if (not existing-packages)
+        (cons (list name pkg-desc)
+              alist)
+      (while (if (and (cdr existing-packages)
+                      (version-list-< priority-version
+                                      (package-desc-priority-version
+                                       (cadr existing-packages))))
+                 (setq existing-packages (cdr existing-packages))
+               (push pkg-desc (cdr existing-packages))
+               nil))
+      alist)))
 
 (defun package-download-transaction (packages)
   "Download and install all the packages in PACKAGES.
@@ -1201,30 +1298,74 @@ The return result is a `package-desc'."
     (unless tar-desc
       (error "No package descriptor file found"))
     (with-current-buffer (tar--extract tar-desc)
-      (goto-char (point-min))
       (unwind-protect
-          (let* ((pkg-def-parsed (read (current-buffer)))
-                 (pkg-desc
-                  (if (not (eq (car pkg-def-parsed) 'define-package))
-                      (error "Can't find define-package in %s"
-                             (tar-header-name tar-desc))
-                    (apply #'package-desc-from-define
-                           (append (cdr pkg-def-parsed))))))
-            (setf (package-desc-kind pkg-desc) 'tar)
-            pkg-desc)
+          (package--read-pkg-desc 'tar)
         (kill-buffer (current-buffer))))))
 
+(defun package-dir-info ()
+  "Find package information for a directory.
+The return result is a `package-desc'."
+  (cl-assert (derived-mode-p 'dired-mode))
+  (let* ((desc-file (package--description-file default-directory)))
+    (if (file-readable-p desc-file)
+        (with-temp-buffer
+          (insert-file-contents desc-file)
+          (package--read-pkg-desc 'dir))
+      (let ((files (directory-files default-directory t "\\.el\\'" t))
+            info)
+        (while files
+          (with-temp-buffer
+            (insert-file-contents (pop files))
+            ;; When we find the file with the data,
+            (when (setq info (ignore-errors (package-buffer-info)))
+              ;; stop looping,
+              (setq files nil)
+              ;; set the 'dir kind,
+              (setf (package-desc-kind info) 'dir))))
+        ;; and return the info.
+        info))))
+
+(defun package--read-pkg-desc (kind)
+  "Read a `define-package' form in current buffer.
+Return the pkg-desc, with desc-kind set to KIND."
+  (goto-char (point-min))
+  (unwind-protect
+      (let* ((pkg-def-parsed (read (current-buffer)))
+             (pkg-desc
+              (if (not (eq (car pkg-def-parsed) 'define-package))
+                  (error "Can't find define-package in %s"
+                         (tar-header-name tar-desc))
+                (apply #'package-desc-from-define
+                  (append (cdr pkg-def-parsed))))))
+        (setf (package-desc-kind pkg-desc) kind)
+        pkg-desc)))
+
 
 ;;;###autoload
 (defun package-install-from-buffer ()
   "Install a package from the current buffer.
-The current buffer is assumed to be a single .el or .tar file that follows the
-packaging guidelines; see info node `(elisp)Packaging'.
+The current buffer is assumed to be a single .el or .tar file or
+a directory.  These must follow the packaging guidelines (see
+info node `(elisp)Packaging').
+
+Specially, if current buffer is a directory, the -pkg.el
+description file is not mandatory, in which case the information
+is derived from the main .el file in the directory.
+
 Downloads and installs required packages as needed."
   (interactive)
-  (let ((pkg-desc (if (derived-mode-p 'tar-mode)
-                      (package-tar-file-info)
-                    (package-buffer-info))))
+  (let ((pkg-desc
+         (cond
+          ((derived-mode-p 'dired-mode)
+           ;; This is the only way a package-desc object with a `dir'
+           ;; desc-kind can be created.  Such packages can't be
+           ;; uploaded or installed from archives, they can only be
+           ;; installed from local buffers or directories.
+           (package-dir-info))
+          ((derived-mode-p 'tar-mode)
+           (package-tar-file-info))
+          (t
+           (package-buffer-info)))))
     ;; Download and install the dependencies.
     (let* ((requires (package-desc-reqs pkg-desc))
            (transaction (package-compute-transaction nil requires)))
@@ -1239,8 +1380,12 @@ Downloads and installs required packages as needed."
 The file can either be a tar file or an Emacs Lisp file."
   (interactive "fPackage file name: ")
   (with-temp-buffer
-    (insert-file-contents-literally file)
-    (when (string-match "\\.tar\\'" file) (tar-mode))
+    (if (file-directory-p file)
+        (progn
+          (setq default-directory file)
+          (dired-mode))
+      (insert-file-contents-literally file)
+      (when (string-match "\\.tar\\'" file) (tar-mode)))
     (package-install-from-buffer)))
 
 (defun package-delete (pkg-desc)
@@ -1268,6 +1413,25 @@ The file can either be a tar file or an Emacs Lisp file."
   "Return the archive containing the package NAME."
   (cdr (assoc (package-desc-archive desc) package-archives)))
 
+(defun package-archive-priority (archive)
+  "Return the priority of ARCHIVE.
+
+The archive priorities are specified in
+`package-archive-priorities'. If not given there, the priority
+defaults to 0."
+  (or (cdr (assoc archive package-archive-priorities))
+      0))
+
+(defun package-desc-priority-version (pkg-desc)
+  "Return the version PKG-DESC with the archive priority prepended.
+
+This allows for easy comparison of package versions from
+different archives if archive priorities are meant to be taken in
+consideration."
+  (cons (package-archive-priority
+         (package-desc-archive pkg-desc))
+        (package-desc-version pkg-desc)))
+
 (defun package--download-one-archive (archive file)
   "Retrieve an archive file FILE from ARCHIVE, and cache it.
 ARCHIVE should be a cons cell of the form (NAME . LOCATION),
@@ -1658,7 +1822,7 @@ Letters do not insert themselves; instead, they are 
commands.
 \\{package-menu-mode-map}"
   (setq tabulated-list-format
         `[("Package" 18 package-menu--name-predicate)
-          ("Version" 12 nil)
+          ("Version" 13 nil)
           ("Status"  10 package-menu--status-predicate)
           ,@(if (cdr package-archives)
                 '(("Archive" 10 package-menu--archive-predicate)))
@@ -1940,18 +2104,18 @@ If optional arg BUTTON is non-nil, describe its 
associated package."
       ;; ENTRY is (PKG-DESC [NAME VERSION STATUS DOC])
       (let ((pkg-desc (car entry))
            (status (aref (cadr entry) 2)))
-       (cond ((member status '("installed" "unsigned"))
-              (push pkg-desc installed))
-             ((member status '("available" "new"))
-              (push (cons (package-desc-name pkg-desc) pkg-desc)
-                     available)))))
+        (cond ((member status '("installed" "unsigned"))
+               (push pkg-desc installed))
+              ((member status '("available" "new"))
+               (setq available (package--append-to-alist pkg-desc 
available))))))
     ;; Loop through list of installed packages, finding upgrades.
     (dolist (pkg-desc installed)
-      (let ((avail-pkg (assq (package-desc-name pkg-desc) available)))
-       (and avail-pkg
-            (version-list-< (package-desc-version pkg-desc)
-                             (package-desc-version (cdr avail-pkg)))
-            (push avail-pkg upgrades))))
+      (let* ((name (package-desc-name pkg-desc))
+             (avail-pkg (cadr (assq name available))))
+        (and avail-pkg
+             (version-list-< (package-desc-priority-version pkg-desc)
+                             (package-desc-priority-version avail-pkg))
+             (push (cons name avail-pkg) upgrades))))
     upgrades))
 
 (defun package-menu-mark-upgrades ()
diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el
index 753cd30..b495793 100644
--- a/lisp/emacs-lisp/pcase.el
+++ b/lisp/emacs-lisp/pcase.el
@@ -1,6 +1,6 @@
 ;;; pcase.el --- ML-style pattern-matching macro for Elisp -*- 
lexical-binding: t; coding: utf-8 -*-
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords:
diff --git a/lisp/emacs-lisp/pp.el b/lisp/emacs-lisp/pp.el
index c18b049..ac3cc74 100644
--- a/lisp/emacs-lisp/pp.el
+++ b/lisp/emacs-lisp/pp.el
@@ -1,6 +1,6 @@
 ;;; pp.el --- pretty printer for Emacs Lisp
 
-;; Copyright (C) 1989, 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Randal Schwartz <address@hidden>
 ;; Keywords: lisp
diff --git a/lisp/emacs-lisp/re-builder.el b/lisp/emacs-lisp/re-builder.el
index 48ad575..a499b03 100644
--- a/lisp/emacs-lisp/re-builder.el
+++ b/lisp/emacs-lisp/re-builder.el
@@ -1,6 +1,6 @@
 ;;; re-builder.el --- building Regexps with visual feedback -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Detlev Zundel <address@hidden>
 ;; Keywords: matching, lisp, tools
diff --git a/lisp/emacs-lisp/regexp-opt.el b/lisp/emacs-lisp/regexp-opt.el
index ff93881..b0fb23d 100644
--- a/lisp/emacs-lisp/regexp-opt.el
+++ b/lisp/emacs-lisp/regexp-opt.el
@@ -1,6 +1,6 @@
 ;;; regexp-opt.el --- generate efficient regexps to match strings
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Marshall <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/emacs-lisp/regi.el b/lisp/emacs-lisp/regi.el
index c941bd6..2b317f6 100644
--- a/lisp/emacs-lisp/regi.el
+++ b/lisp/emacs-lisp/regi.el
@@ -1,6 +1,6 @@
 ;;; regi.el --- REGular expression Interpreting engine
 
-;; Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: 1993 Barry A. Warsaw, Century Computing, Inc. <address@hidden>
 ;; Maintainer:    address@hidden
diff --git a/lisp/emacs-lisp/ring.el b/lisp/emacs-lisp/ring.el
index 3d430a6..2447dfa 100644
--- a/lisp/emacs-lisp/ring.el
+++ b/lisp/emacs-lisp/ring.el
@@ -1,6 +1,6 @@
 ;;; ring.el --- handle rings of items
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: extensions
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index 2e513ff..20af59f 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -1,6 +1,6 @@
 ;;; rx.el --- sexp notation for regular expressions
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
new file mode 100644
index 0000000..b28153b
--- /dev/null
+++ b/lisp/emacs-lisp/seq.el
@@ -0,0 +1,273 @@
+;;; seq.el --- Sequence manipulation functions  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
+
+;; Author: Nicolas Petton <address@hidden>
+;; Keywords: sequences
+;; Version: 1.0
+
+;; Maintainer: address@hidden
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Sequence-manipulation functions that complement basic functions
+;; provided by subr.el.
+;;
+;; All functions are prefixed with "seq-".
+;;
+;; All provided functions work on lists, strings and vectors.
+;;
+;; Functions taking a predicate or a function iterating over the
+;; sequence as argument take the function as their first argument and
+;; the sequence as their second argument.  All other functions take
+;; the sequence as their first argument.
+;;
+;; All functions are tested in test/automated/seq-tests.el
+
+;;; Code:
+
+(defmacro seq-doseq (spec &rest body)
+  "Loop over a sequence.
+Similar to `dolist' but can be applied lists, strings and vectors.
+
+Evaluate BODY with VAR bound to each element of SEQ, in turn.
+Then evaluate RESULT to get return value, default nil.
+
+\(fn (VAR SEQ [RESULT]) BODY...)"
+  (declare (indent 1) (debug ((symbolp form &optional form) body)))
+  (let ((is-list (make-symbol "is-list"))
+        (seq (make-symbol "seq"))
+        (index (make-symbol "index")))
+    `(let* ((,seq ,(cadr spec))
+            (,is-list (listp ,seq))
+            (,index (if ,is-list ,seq 0)))
+       (while (if ,is-list
+                  (consp ,index)
+                (< ,index (seq-length ,seq)))
+         (let ((,(car spec) (if ,is-list
+                                (car ,index)
+                              (seq-elt ,seq ,index))))
+           ,@body
+           (setq ,index (if ,is-list
+                            (cdr ,index)
+                          (+ ,index 1)))))
+       ,@(if (cddr spec)
+             `((setq ,(car spec) nil) ,@(cddr spec))))))
+
+(defun seq-drop (seq n)
+  "Return a subsequence of SEQ without its first N elements.
+The result is a sequence of the same type as SEQ.
+
+If N is a negative integer or zero, SEQ is returned."
+  (if (<= n 0)
+      seq
+    (if (listp seq)
+        (seq--drop-list seq n)
+      (let ((length (seq-length seq)))
+        (seq-subseq seq (min n length) length)))))
+
+(defun seq-take (seq n)
+  "Return a subsequence of SEQ with its first N elements.
+The result is a sequence of the same type as SEQ.
+
+If N is a negative integer or zero, an empty sequence is
+returned."
+  (if (listp seq)
+      (seq--take-list seq n)
+    (seq-subseq seq 0 (min (max n 0) (seq-length seq)))))
+
+(defun seq-drop-while (pred seq)
+  "Return a sequence, from the first element for which (PRED element) is nil, 
of SEQ.
+The result is a sequence of the same type as SEQ."
+  (if (listp seq)
+      (seq--drop-while-list pred seq)
+    (seq-drop seq (seq--count-successive pred seq))))
+
+(defun seq-take-while (pred seq)
+  "Return a sequence of the successive elements for which (PRED element) is 
non-nil in SEQ.
+The result is a sequence of the same type as SEQ."
+  (if (listp seq)
+      (seq--take-while-list pred seq)
+    (seq-take seq (seq--count-successive pred seq))))
+
+(defun seq-filter (pred seq)
+  "Return a list of all the elements for which (PRED element) is non-nil in 
SEQ."
+  (let ((exclude (make-symbol "exclude")))
+    (delq exclude (seq-map (lambda (elt)
+                             (if (funcall pred elt)
+                                 elt
+                               exclude))
+                           seq))))
+
+(defun seq-remove (pred seq)
+  "Return a list of all the elements for which (PRED element) is nil in SEQ."
+  (seq-filter (lambda (elt) (not (funcall pred elt)))
+              seq))
+
+(defun seq-reduce (function seq initial-value)
+  "Reduce the function FUNCTION across SEQ, starting with INITIAL-VALUE.
+
+Return the result of calling FUNCTION with INITIAL-VALUE and the
+first element of SEQ, then calling FUNCTION with that result and
+the second element of SEQ, then with that result and the third
+element of SEQ, etc.
+
+If SEQ is empty, return INITIAL-VALUE and FUNCTION is not called."
+  (if (seq-empty-p seq)
+      initial-value
+    (let ((acc initial-value))
+      (seq-doseq (elt seq)
+        (setq acc (funcall function acc elt)))
+      acc)))
+
+(defun seq-some-p (pred seq)
+  "Return any element for which (PRED element) is non-nil in SEQ, nil 
otherwise."
+  (catch 'seq--break
+    (seq-doseq (elt seq)
+      (when (funcall pred elt)
+        (throw 'seq--break elt)))
+    nil))
+
+(defun seq-every-p (pred seq)
+  "Return non-nil if (PRED element) is non-nil for all elements of the 
sequence SEQ."
+  (catch 'seq--break
+    (seq-doseq (elt seq)
+      (or (funcall pred elt)
+          (throw 'seq--break nil)))
+    t))
+
+(defun seq-count (pred seq)
+  "Return the number of elements for which (PRED element) returns non-nil in 
seq."
+  (let ((count 0))
+    (seq-doseq (elt seq)
+      (when (funcall pred elt)
+        (setq count (+ 1 count))))
+    count))
+
+(defun seq-empty-p (seq)
+  "Return non-nil if the sequence SEQ is empty, nil otherwise."
+  (if (listp seq)
+      (null seq)
+    (= 0 (seq-length seq))))
+
+(defun seq-sort (pred seq)
+  "Return a sorted sequence comparing using PRED the elements of SEQ.
+The result is a sequence of the same type as SEQ."
+  (if (listp seq)
+      (sort (seq-copy seq) pred)
+    (let ((result (seq-sort pred (append seq nil))))
+      (cond ((stringp seq) (concat result))
+            ((vectorp seq) (vconcat result))
+            (t (error "Unsupported sequence: %s" seq))))))
+
+(defun seq-contains-p (seq elt &optional testfn)
+  "Return the first element in SEQ that equals to ELT.
+Equality is defined by TESTFN if non-nil or by `equal' if nil."
+  (seq-some-p (lambda (e)
+                (funcall (or testfn #'equal) elt e))
+              seq))
+
+(defun seq-uniq (seq &optional testfn)
+  "Return a list of the elements of SEQ with duplicates removed.
+TESTFN is used to compare elements, or `equal' if TESTFN is nil."
+  (let ((result '()))
+    (seq-doseq (elt seq)
+      (unless (seq-contains-p result elt testfn)
+        (setq result (cons elt result))))
+    (nreverse result)))
+
+(defun seq-subseq (seq start &optional end)
+  "Return the subsequence of SEQ from START to END.
+If END is omitted, it defaults to the length of the sequence.
+If START or END is negative, it counts from the end."
+  (cond ((or (stringp seq) (vectorp seq)) (substring seq start end))
+        ((listp seq)
+         (let (len (errtext (format "Bad bounding indices: %s, %s" start end)))
+           (and end (< end 0) (setq end (+ end (setq len (seq-length seq)))))
+           (if (< start 0) (setq start (+ start (or len (setq len (seq-length 
seq))))))
+           (when (> start 0)
+             (setq seq (nthcdr (1- start) seq))
+             (or seq (error "%s" errtext))
+             (setq seq (cdr seq)))
+           (if end
+               (let ((res nil))
+                 (while (and (>= (setq end (1- end)) start) seq)
+                   (push (pop seq) res))
+                 (or (= (1+ end) start) (error "%s" errtext))
+                 (nreverse res))
+             (seq-copy seq))))
+        (t (error "Unsupported sequence: %s" seq))))
+
+(defun seq-concatenate (type &rest seqs)
+  "Concatenate, into a sequence of type TYPE, the sequences SEQS.
+TYPE must be one of following symbols: vector, string or list.
+
+\n(fn TYPE SEQUENCE...)"
+  (pcase type
+    (`vector (apply #'vconcat seqs))
+    (`string (apply #'concat seqs))
+    (`list (apply #'append (append seqs '(nil))))
+    (t (error "Not a sequence type name: %s" type))))
+
+(defun seq--drop-list (list n)
+  "Optimized version of `seq-drop' for lists."
+  (while (and list (> n 0))
+    (setq list (cdr list)
+          n (1- n)))
+  list)
+
+(defun seq--take-list (list n)
+  "Optimized version of `seq-take' for lists."
+  (let ((result '()))
+    (while (and list (> n 0))
+      (setq n (1- n))
+      (push (pop list) result))
+    (nreverse result)))
+
+(defun seq--drop-while-list (pred list)
+  "Optimized version of `seq-drop-while' for lists."
+  (while (and list (funcall pred (car list)))
+    (setq list (cdr list)))
+  list)
+
+(defun seq--take-while-list (pred list)
+  "Optimized version of `seq-take-while' for lists."
+  (let ((result '()))
+    (while (and list (funcall pred (car list)))
+      (push (pop list) result))
+    (nreverse result)))
+
+(defun seq--count-successive (pred seq)
+  "Return the number of successive elements for which (PRED element) is 
non-nil in SEQ."
+  (let ((n 0)
+        (len (seq-length seq)))
+    (while (and (< n len)
+                (funcall pred (seq-elt seq n)))
+      (setq n (+ 1 n)))
+    n))
+
+(defalias 'seq-copy #'copy-sequence)
+(defalias 'seq-elt #'elt)
+(defalias 'seq-reverse #'reverse)
+(defalias 'seq-length #'length)
+(defalias 'seq-do #'mapc)
+(defalias 'seq-each #'seq-do)
+(defalias 'seq-map #'mapcar)
+
+(provide 'seq)
+;;; seq.el ends here
diff --git a/lisp/emacs-lisp/shadow.el b/lisp/emacs-lisp/shadow.el
index e8b4eb3..59bf634 100644
--- a/lisp/emacs-lisp/shadow.el
+++ b/lisp/emacs-lisp/shadow.el
@@ -1,6 +1,6 @@
 ;;; shadow.el --- locate Emacs Lisp file shadowings
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Terry Jones <address@hidden>
 ;; Keywords: lisp
diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el
index ab51e13..5b9dc64 100644
--- a/lisp/emacs-lisp/smie.el
+++ b/lisp/emacs-lisp/smie.el
@@ -1,6 +1,6 @@
 ;;; smie.el --- Simple Minded Indentation Engine -*- lexical-binding: t -*-
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: languages, lisp, internal, parsing, indentation
diff --git a/lisp/emacs-lisp/subr-x.el b/lisp/emacs-lisp/subr-x.el
index 759760c..78a6dc9 100644
--- a/lisp/emacs-lisp/subr-x.el
+++ b/lisp/emacs-lisp/subr-x.el
@@ -1,6 +1,6 @@
 ;;; subr-x.el --- extra Lisp functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: convenience
diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el
index db68148..81ef7a6 100644
--- a/lisp/emacs-lisp/syntax.el
+++ b/lisp/emacs-lisp/syntax.el
@@ -1,6 +1,6 @@
 ;;; syntax.el --- helper functions to find syntactic context  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
diff --git a/lisp/emacs-lisp/tabulated-list.el 
b/lisp/emacs-lisp/tabulated-list.el
index 1e613c7..15a0914 100644
--- a/lisp/emacs-lisp/tabulated-list.el
+++ b/lisp/emacs-lisp/tabulated-list.el
@@ -1,6 +1,6 @@
 ;;; tabulated-list.el --- generic major mode for tabulated lists -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <address@hidden>
 ;; Keywords: extensions, lisp
diff --git a/lisp/emacs-lisp/tcover-ses.el b/lisp/emacs-lisp/tcover-ses.el
index 02f8dc6..61a21dc 100644
--- a/lisp/emacs-lisp/tcover-ses.el
+++ b/lisp/emacs-lisp/tcover-ses.el
@@ -1,6 +1,6 @@
 ;;;; testcover-ses.el -- Example use of `testcover' to test "SES"
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <address@hidden>
 ;; Maintainer: Jonathan Yavner <address@hidden>
diff --git a/lisp/emacs-lisp/tcover-unsafep.el 
b/lisp/emacs-lisp/tcover-unsafep.el
index 2bc40d1..c683826 100644
--- a/lisp/emacs-lisp/tcover-unsafep.el
+++ b/lisp/emacs-lisp/tcover-unsafep.el
@@ -1,6 +1,6 @@
 ;;;; testcover-unsafep.el -- Use testcover to test unsafep's code coverage
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <address@hidden>
 ;; Maintainer: Jonathan Yavner <address@hidden>
diff --git a/lisp/emacs-lisp/testcover.el b/lisp/emacs-lisp/testcover.el
index 7ab2113..a91704a 100644
--- a/lisp/emacs-lisp/testcover.el
+++ b/lisp/emacs-lisp/testcover.el
@@ -1,6 +1,6 @@
 ;;;; testcover.el -- Visual code-coverage tool
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <address@hidden>
 ;; Maintainer: Jonathan Yavner <address@hidden>
diff --git a/lisp/emacs-lisp/timer.el b/lisp/emacs-lisp/timer.el
index a189d24..9ae11b7 100644
--- a/lisp/emacs-lisp/timer.el
+++ b/lisp/emacs-lisp/timer.el
@@ -1,6 +1,6 @@
 ;;; timer.el --- run a function with args at some time in future
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Package: emacs
diff --git a/lisp/emacs-lisp/tq.el b/lisp/emacs-lisp/tq.el
index 09ed236..b652cbe 100644
--- a/lisp/emacs-lisp/tq.el
+++ b/lisp/emacs-lisp/tq.el
@@ -1,6 +1,6 @@
 ;;; tq.el --- utility to maintain a transaction queue  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1985-1987, 1992, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1992, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Scott Draves <address@hidden>
diff --git a/lisp/emacs-lisp/trace.el b/lisp/emacs-lisp/trace.el
index 872bf86..7a2fb22 100644
--- a/lisp/emacs-lisp/trace.el
+++ b/lisp/emacs-lisp/trace.el
@@ -1,6 +1,6 @@
 ;;; trace.el --- tracing facility for Emacs Lisp functions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993, 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Hans Chalupsky <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/emacs-lisp/unsafep.el b/lisp/emacs-lisp/unsafep.el
index b34f28a..35a36b8 100644
--- a/lisp/emacs-lisp/unsafep.el
+++ b/lisp/emacs-lisp/unsafep.el
@@ -1,6 +1,6 @@
 ;;;; unsafep.el -- Determine whether a Lisp form is safe to evaluate
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <address@hidden>
 ;; Maintainer: Jonathan Yavner <address@hidden>
diff --git a/lisp/emacs-lisp/warnings.el b/lisp/emacs-lisp/warnings.el
index b7e1efc..3ab4026 100644
--- a/lisp/emacs-lisp/warnings.el
+++ b/lisp/emacs-lisp/warnings.el
@@ -1,6 +1,6 @@
 ;;; warnings.el --- log and display warnings
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
diff --git a/lisp/emacs-lock.el b/lisp/emacs-lock.el
index 0432fc2..919cbcb 100644
--- a/lisp/emacs-lock.el
+++ b/lisp/emacs-lock.el
@@ -1,6 +1,6 @@
 ;;; emacs-lock.el --- protect buffers against killing or exiting -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Juanma Barranquero <address@hidden>
 ;; Inspired by emacs-lock.el by Tom Wurgler <address@hidden>
diff --git a/lisp/emulation/.gitignore b/lisp/emulation/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/lisp/emulation/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el
index 2b4d0f6..c6d7b50 100644
--- a/lisp/emulation/cua-base.el
+++ b/lisp/emulation/cua-base.el
@@ -1,6 +1,6 @@
 ;;; cua-base.el --- emulate CUA key bindings
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <address@hidden>
 ;; Keywords: keyboard emulations convenience cua
diff --git a/lisp/emulation/cua-gmrk.el b/lisp/emulation/cua-gmrk.el
index 3d6c9d6..79fdd65 100644
--- a/lisp/emulation/cua-gmrk.el
+++ b/lisp/emulation/cua-gmrk.el
@@ -1,6 +1,6 @@
 ;;; cua-gmrk.el --- CUA unified global mark support
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <address@hidden>
 ;; Keywords: keyboard emulations convenience cua mark
diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el
index 4620b0e..ea8b524 100644
--- a/lisp/emulation/cua-rect.el
+++ b/lisp/emulation/cua-rect.el
@@ -1,6 +1,6 @@
 ;;; cua-rect.el --- CUA unified rectangle support
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <address@hidden>
 ;; Keywords: keyboard emulations convenience CUA
diff --git a/lisp/emulation/edt-lk201.el b/lisp/emulation/edt-lk201.el
index c103e0c..a32ca56 100644
--- a/lisp/emulation/edt-lk201.el
+++ b/lisp/emulation/edt-lk201.el
@@ -1,6 +1,6 @@
 ;;; edt-lk201.el --- enhanced EDT keypad mode emulation for LK-201 keyboards
 
-;; Copyright (C) 1986, 1992-1993, 1995, 2001-2014 Free Software
+;; Copyright (C) 1986, 1992-1993, 1995, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Kevin Gallagher <address@hidden>
diff --git a/lisp/emulation/edt-mapper.el b/lisp/emulation/edt-mapper.el
index c8b7e89..9e3667e 100644
--- a/lisp/emulation/edt-mapper.el
+++ b/lisp/emulation/edt-mapper.el
@@ -1,6 +1,6 @@
 ;;; edt-mapper.el --- create an EDT LK-201 map file for X-Windows Emacs
 
-;; Copyright (C) 1994-1995, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Kevin Gallagher <address@hidden>
 ;; Maintainer: Kevin Gallagher <address@hidden>
diff --git a/lisp/emulation/edt-pc.el b/lisp/emulation/edt-pc.el
index bf0f762..47a7f25 100644
--- a/lisp/emulation/edt-pc.el
+++ b/lisp/emulation/edt-pc.el
@@ -1,6 +1,6 @@
 ;;; edt-pc.el --- enhanced EDT keypad mode emulation for PC 101 keyboards
 
-;; Copyright (C) 1986, 1994-1995, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1986, 1994-1995, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher <address@hidden>
diff --git a/lisp/emulation/edt-vt100.el b/lisp/emulation/edt-vt100.el
index 2eb430a..8704cbd 100644
--- a/lisp/emulation/edt-vt100.el
+++ b/lisp/emulation/edt-vt100.el
@@ -1,6 +1,6 @@
 ;;; edt-vt100.el --- enhanced EDT keypad mode emulation for VT series terminals
 
-;; Copyright (C) 1986, 1992-1993, 1995, 2002-2014 Free Software
+;; Copyright (C) 1986, 1992-1993, 1995, 2002-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Kevin Gallagher <address@hidden>
diff --git a/lisp/emulation/edt.el b/lisp/emulation/edt.el
index e0e2660..2c9e579 100644
--- a/lisp/emulation/edt.el
+++ b/lisp/emulation/edt.el
@@ -1,6 +1,7 @@
 ;;; edt.el --- enhanced EDT keypad mode emulation for GNU Emacs
 
-;; Copyright (C) 1986, 1992-1995, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1992-1995, 2000-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Kevin Gallagher <address@hidden>
 ;; Maintainer: Kevin Gallagher <address@hidden>
diff --git a/lisp/emulation/keypad.el b/lisp/emulation/keypad.el
index 46f9051..8d5e6cf 100644
--- a/lisp/emulation/keypad.el
+++ b/lisp/emulation/keypad.el
@@ -1,6 +1,6 @@
 ;;; keypad.el --- simplified keypad bindings
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <address@hidden>
 ;; Keywords: keyboard convenience
diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index 8ce63b4..e41109a 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -1,6 +1,6 @@
 ;;; viper-cmd.el --- Vi command support for Viper
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: viper
diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el
index 65192c2..212f053 100644
--- a/lisp/emulation/viper-ex.el
+++ b/lisp/emulation/viper-ex.el
@@ -1,6 +1,6 @@
 ;;; viper-ex.el --- functions implementing the Ex commands for Viper
 
-;; Copyright (C) 1994-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: viper
diff --git a/lisp/emulation/viper-init.el b/lisp/emulation/viper-init.el
index 9914fdc..75932a8 100644
--- a/lisp/emulation/viper-init.el
+++ b/lisp/emulation/viper-init.el
@@ -1,6 +1,6 @@
 ;;; viper-init.el --- some common definitions for Viper
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: viper
diff --git a/lisp/emulation/viper-keym.el b/lisp/emulation/viper-keym.el
index 95f3dbb..179ae16 100644
--- a/lisp/emulation/viper-keym.el
+++ b/lisp/emulation/viper-keym.el
@@ -1,6 +1,6 @@
 ;;; viper-keym.el --- Viper keymaps
 
-;; Copyright (C) 1994-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: viper
diff --git a/lisp/emulation/viper-macs.el b/lisp/emulation/viper-macs.el
index 0c4e7dd..89bc77f 100644
--- a/lisp/emulation/viper-macs.el
+++ b/lisp/emulation/viper-macs.el
@@ -1,6 +1,6 @@
 ;;; viper-macs.el --- functions implementing keyboard macros for Viper
 
-;; Copyright (C) 1994-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: viper
diff --git a/lisp/emulation/viper-mous.el b/lisp/emulation/viper-mous.el
index ab3e3bd..4d5c86f 100644
--- a/lisp/emulation/viper-mous.el
+++ b/lisp/emulation/viper-mous.el
@@ -1,6 +1,6 @@
 ;;; viper-mous.el --- mouse support for Viper
 
-;; Copyright (C) 1994-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: viper
diff --git a/lisp/emulation/viper-util.el b/lisp/emulation/viper-util.el
index 4e3b71e..59f4752 100644
--- a/lisp/emulation/viper-util.el
+++ b/lisp/emulation/viper-util.el
@@ -1,6 +1,6 @@
 ;;; viper-util.el --- Utilities used by viper.el
 
-;; Copyright (C) 1994-1997, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: viper
diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el
index c7394e1..0933c94 100644
--- a/lisp/emulation/viper.el
+++ b/lisp/emulation/viper.el
@@ -3,7 +3,7 @@
 ;;              and a venomous VI PERil.
 ;;              Viper Is also a Package for Emacs Rebels.
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Keywords: emulations
diff --git a/lisp/env.el b/lisp/env.el
index 3fbb078..3966ab1 100644
--- a/lisp/env.el
+++ b/lisp/env.el
@@ -1,6 +1,6 @@
 ;;; env.el --- functions to manipulate environment variables  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1991, 1994, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2000-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: processes, unix
diff --git a/lisp/epa-dired.el b/lisp/epa-dired.el
index a4162ed..042dc6e 100644
--- a/lisp/epa-dired.el
+++ b/lisp/epa-dired.el
@@ -1,5 +1,5 @@
 ;;; epa-dired.el --- the EasyPG Assistant, dired extension -*- 
lexical-binding: t -*-
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epa-file.el b/lisp/epa-file.el
index 2e46cf9..db8613a 100644
--- a/lisp/epa-file.el
+++ b/lisp/epa-file.el
@@ -1,5 +1,5 @@
 ;;; epa-file.el --- the EasyPG Assistant, transparent file encryption -*- 
lexical-binding: t -*-
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epa-hook.el b/lisp/epa-hook.el
index cd3da93..efffb35 100644
--- a/lisp/epa-hook.el
+++ b/lisp/epa-hook.el
@@ -1,5 +1,5 @@
 ;;; epa-hook.el --- preloaded code to enable epa-file.el -*- lexical-binding: 
t -*-
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epa-mail.el b/lisp/epa-mail.el
index d1ed679..5a39c28 100644
--- a/lisp/epa-mail.el
+++ b/lisp/epa-mail.el
@@ -1,5 +1,5 @@
 ;;; epa-mail.el --- the EasyPG Assistant, minor-mode for mail composer -*- 
lexical-binding: t -*-
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Keywords: PGP, GnuPG, mail, message
diff --git a/lisp/epa.el b/lisp/epa.el
index 8b95261..d3fec73 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -1,6 +1,6 @@
 ;;; epa.el --- the EasyPG Assistant -*- lexical-binding: t -*-
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Keywords: PGP, GnuPG
@@ -776,13 +776,13 @@ If no one is selected, default secret key is used.  "
     (setf (epg-context-armor context) epa-armor)
     (setf (epg-context-textmode context) epa-textmode)
     (setf (epg-context-signers context) signers)
-    (setf (epg-context-passphrase-callback context)
-         #'epa-passphrase-callback-function)
-    (setf (epg-context-progress-callback context)
-         (cons
-          #'epa-progress-callback-function
-          (format "Signing %s..."
-                  (file-name-nondirectory file))))
+    (epg-context-set-passphrase-callback context
+                                        #'epa-passphrase-callback-function)
+    (epg-context-set-progress-callback context
+                                      (cons
+                                       #'epa-progress-callback-function
+                                       (format "Signing %s..."
+                                               (file-name-nondirectory file))))
     (setf (epg-context-pinentry-mode context) epa-pinentry-mode)
     (message "Signing %s..." (file-name-nondirectory file))
     (condition-case error
@@ -807,13 +807,13 @@ If no one is selected, symmetric encryption will be 
performed.  ")))
        (context (epg-make-context epa-protocol)))
     (setf (epg-context-armor context) epa-armor)
     (setf (epg-context-textmode context) epa-textmode)
-    (setf (epg-context-passphrase-callback context)
-         #'epa-passphrase-callback-function)
-    (setf (epg-context-progress-callback context)
-         (cons
-          #'epa-progress-callback-function
-          (format "Encrypting %s..."
-                  (file-name-nondirectory file))))
+    (epg-context-set-passphrase-callback context
+                                        #'epa-passphrase-callback-function)
+    (epg-context-set-progress-callback context
+                                      (cons
+                                       #'epa-progress-callback-function
+                                       (format "Encrypting %s..."
+                                               (file-name-nondirectory file))))
     (setf (epg-context-pinentry-mode context) epa-pinentry-mode)
     (message "Encrypting %s..." (file-name-nondirectory file))
     (condition-case error
@@ -851,12 +851,12 @@ For example:
   (save-excursion
     (let ((context (epg-make-context epa-protocol))
          plain)
-      (setf (epg-context-passphrase-callback context)
-           #'epa-passphrase-callback-function)
-      (setf (epg-context-progress-callback context)
-           (cons
-            #'epa-progress-callback-function
-            "Decrypting..."))
+      (epg-context-set-passphrase-callback context
+                                          #'epa-passphrase-callback-function)
+      (epg-context-set-progress-callback context
+                                        (cons
+                                         #'epa-progress-callback-function
+                                         "Decrypting..."))
       (setf (epg-context-pinentry-mode context) epa-pinentry-mode)
       (message "Decrypting...")
       (condition-case error
@@ -1058,12 +1058,12 @@ If no one is selected, default secret key is used.  "
       ;;(setf (epg-context-textmode context) epa-textmode)
       (setf (epg-context-textmode context) t)
       (setf (epg-context-signers context) signers)
-      (setf (epg-context-passphrase-callback context)
-           #'epa-passphrase-callback-function)
-      (setf (epg-context-progress-callback context)
-           (cons
-            #'epa-progress-callback-function
-            "Signing..."))
+      (epg-context-set-passphrase-callback context
+                                          #'epa-passphrase-callback-function)
+      (epg-context-set-progress-callback context
+                                        (cons
+                                         #'epa-progress-callback-function
+                                         "Signing..."))
       (setf (epg-context-pinentry-mode context) epa-pinentry-mode)
       (message "Signing...")
       (condition-case error
@@ -1147,12 +1147,12 @@ If no one is selected, symmetric encryption will be 
performed.  ")
       (setf (epg-context-textmode context) t)
       (if sign
          (setf (epg-context-signers context) signers))
-      (setf (epg-context-passphrase-callback context)
-           #'epa-passphrase-callback-function)
-      (setf (epg-context-progress-callback context)
-           (cons
-            #'epa-progress-callback-function
-            "Encrypting..."))
+      (epg-context-set-passphrase-callback context
+                                          #'epa-passphrase-callback-function)
+      (epg-context-set-progress-callback context
+                                        (cons
+                                         #'epa-progress-callback-function
+                                         "Encrypting..."))
       (setf (epg-context-pinentry-mode context) epa-pinentry-mode)
       (message "Encrypting...")
       (condition-case error
@@ -1316,12 +1316,12 @@ If no one is selected, default public key is exported.  
")))
 ;;        (error "No keys selected"))
 ;;      (list keys current-prefix-arg)))
 ;;   (let ((context (epg-make-context epa-protocol)))
-;;     (setf (epg-context-passphrase-callback context)
-;;          #'epa-passphrase-callback-function)
-;;     (setf (epg-context-progress-callback context)
-;;          (cons
-;;            #'epa-progress-callback-function
-;;            "Signing keys..."))
+;;     (epg-context-set-passphrase-callback context
+;;                                         #'epa-passphrase-callback-function)
+;;     (epg-context-set-progress-callback context
+;;                                       (cons
+;;                                         #'epa-progress-callback-function
+;;                                         "Signing keys..."))
 ;;     (setf (epg-context-pinentry-mode context) epa-pinentry-mode)
 ;;     (message "Signing keys...")
 ;;     (epg-sign-keys context keys local)
diff --git a/lisp/epg-config.el b/lisp/epg-config.el
index 16ed6e1..10f0dd3 100644
--- a/lisp/epg-config.el
+++ b/lisp/epg-config.el
@@ -1,6 +1,6 @@
 ;;; epg-config.el --- configuration of the EasyPG Library
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epg.el b/lisp/epg.el
index 520ff8d..f665453 100644
--- a/lisp/epg.el
+++ b/lisp/epg.el
@@ -1,5 +1,5 @@
 ;;; epg.el --- the EasyPG Library -*- lexical-binding: t -*-
-;; Copyright (C) 1999-2000, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/erc/.gitignore b/lisp/erc/.gitignore
deleted file mode 100644
index 7053c31..0000000
--- a/lisp/erc/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-{arch}
-.arch-ids
-*.elc
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index 9b8ec66..44971cc 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -1,3 +1,20 @@
+2015-01-28  Dima Kogan  <address@hidden>
+
+       * erc-backend.el (define-erc-response-handler): Give hook-name
+       default value of nil and add-to-list (bug#19363).
+
+2015-01-22  Paul Eggert  <address@hidden>
+
+       Don't downcase system diagnostics' first letters
+       * erc-dcc.el (erc-dcc-server): Ignore case while comparing diagnostics.
+
+2014-11-23  Michael Albinus  <address@hidden>
+
+       * erc-desktop-notifications.el (erc-notifications-bus):
+       New customer option.  Supports cases when Emacs hasn't been
+       invoked in the same environment where the notifications shall go to.
+       (erc-notifications-notify): Use it.
+
 2014-11-10  Kelvin White  <address@hidden>
 
        * erc-stamp.el (erc-timestamp-intangible): Change version tag to 24.5.
@@ -99,7 +116,7 @@
        (erc-channel-user): Add members for new modes.
        (erc-channel-member-halfop-p, erc-channel-user-admin-p)
        (erc-channel-user-owner-p): Use new struct members.
-       (erc-format-nick, address@hidden): Display user modes as nick   prefix.
+       (erc-format-nick, address@hidden): Display user modes as nick prefix.
        (erc-nick-prefix-face, erc-my-nick-prefix-face): Add new faces
        (erc-get-user-mode-prefix): Return symbol for mode prefix.
        (erc-update-channel-member, erc-update-current-channel-member)
@@ -702,7 +719,7 @@
 
 See ChangeLog.08 for earlier changes.
 
-       Copyright (C) 2009-2014 Free Software Foundation, Inc.
+       Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.01 b/lisp/erc/ChangeLog.01
index a39ab6a..be854cc 100644
--- a/lisp/erc/ChangeLog.01
+++ b/lisp/erc/ChangeLog.01
@@ -1034,7 +1034,7 @@
 
        * erc-speak.el, erc.el: New file.
 
-       Copyright (C) 2001, 2006-2014 Free Software Foundation, Inc.
+       Copyright (C) 2001, 2006-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.02 b/lisp/erc/ChangeLog.02
index 77d4855..6d8b336 100644
--- a/lisp/erc/ChangeLog.02
+++ b/lisp/erc/ChangeLog.02
@@ -2091,7 +2091,7 @@
 
        * erc.el 2002-07-15T00:01:address@hidden: silly typo corrected
 
-       * erc.el:       * erc.el: * New variable: 
erc-common-server-name-suffixes
+       * erc.el: New variable: erc-common-server-name-suffixes
          This alist can be used to change the server names displayed in 
mode-line
          to a shorter version..
        * New function: erc-shorten-server-name (uses var above)
@@ -2598,7 +2598,7 @@
 
 See ChangeLog.01 for earlier changes.
 
-       Copyright (C) 2002, 2006-2014 Free Software Foundation, Inc.
+       Copyright (C) 2002, 2006-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.03 b/lisp/erc/ChangeLog.03
index 5f04cf8..88aace8 100644
--- a/lisp/erc/ChangeLog.03
+++ b/lisp/erc/ChangeLog.03
@@ -323,7 +323,7 @@
 
        * erc.el(erc-modules): Add some more symbols to the set
 
-       * erc.el(erc-modules):  * erc.el(erc-modules): Add :greedy t to the set 
in
+       * erc.el(erc-modules): Add :greedy t to the set in
 
        * erc-dcc.el:
        More autoloads which make dcc autoload upon ctcp dcc query received.
@@ -714,7 +714,7 @@
                         defcustom `erc-log-insert-log-on-open'
                         defcustom `erc-generate-log-file-name-function'
                         defun `erc-save-buffer-in-logs' (autoloads from 
erc-log.el)
-                        defuns `erc-generate-log-file-name-*'
+                        defuns `erc-generate-log-file-name-*'
                         defun `erc-current-logfile'
                         defun `erc-logging-enabled' (autoloads from erc-log.el)
                - erc-truncate-buffer-to-size: fix for double-saving bug when
@@ -744,7 +744,7 @@
 
 2003-04-27  Damien Elmes  <address@hidden>
 
-       * erc.el:       * erc.el: erc-modules: added
+       * erc.el: erc-modules: added
 
 2003-04-27  Alex Schroeder  <address@hidden>
 
@@ -1567,7 +1567,7 @@
        * (erc-cmd-NAMES): Ditto.
        * (erc-cmd-ME): Put 'do-not-parse-args property.
 
-       * erc-dcc.el:nick:      * erc-dcc.el: * erc-dcc-list: Renamed
+       * erc-dcc-list: Renamed
        * (erc-dcc-member). Treat :nick as either a address@hidden or nick,
        do appropriate comparisons, simplified.
        * (erc-dcc-list-add): New functions
@@ -1692,12 +1692,12 @@
 
 2003-01-11  Mario Lang  <address@hidden>
 
-       * erc-dcc.el:   * erc-dcc.el: * (erc-dcc-do-LIST-command): Fix
+       * erc-dcc.el (erc-dcc-do-LIST-command): Fix
 
        * erc-dcc.el:
        * buffer-local variables erc-dcc-sent-marker and erc-dcc-send-confirmed 
marker removed
          Keep This info in erc-dcc-member :sent and :confirmed plist values
-       * :     * :buffer plist for :type 'SEND removed, since we can get this 
with (marker-buffer
+       :buffer plist for :type 'SEND removed, since we can get this with 
(marker-buffer
        * erc-dcc-send-connect-hook: New hook, defaults to erc-dcc-send-block 
and erc-dcc-send-connected, which now prints a msg...
 
        * erc-dcc.el:
@@ -2141,7 +2141,7 @@
 
 See ChangeLog.02 for earlier changes.
 
-       Copyright (C) 2003, 2006-2014 Free Software Foundation, Inc.
+       Copyright (C) 2003, 2006-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.04 b/lisp/erc/ChangeLog.04
index 07f2fa9..43b5a75 100644
--- a/lisp/erc/ChangeLog.04
+++ b/lisp/erc/ChangeLog.04
@@ -2072,7 +2072,7 @@
 
 See ChangeLog.03 for earlier changes.
 
-       Copyright (C) 2004, 2006-2014 Free Software Foundation, Inc.
+       Copyright (C) 2004, 2006-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.05 b/lisp/erc/ChangeLog.05
index b7a0ebf..b5fe177 100644
--- a/lisp/erc/ChangeLog.05
+++ b/lisp/erc/ChangeLog.05
@@ -1217,7 +1217,7 @@
 
 See ChangeLog.04 for earlier changes.
 
-       Copyright (C) 2005-2014 Free Software Foundation, Inc.
+       Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.06 b/lisp/erc/ChangeLog.06
index a547da6..04358af 100644
--- a/lisp/erc/ChangeLog.06
+++ b/lisp/erc/ChangeLog.06
@@ -1430,7 +1430,7 @@
 
 See ChangeLog.05 for earlier changes.
 
-       Copyright (C) 2006-2014 Free Software Foundation, Inc.
+       Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.07 b/lisp/erc/ChangeLog.07
index 9fc04db..dbc664f 100644
--- a/lisp/erc/ChangeLog.07
+++ b/lisp/erc/ChangeLog.07
@@ -812,7 +812,7 @@
 
 See ChangeLog.06 for earlier changes.
 
-       Copyright (C) 2007-2014 Free Software Foundation, Inc.
+       Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.08 b/lisp/erc/ChangeLog.08
index 10cf4e0..b73f646 100644
--- a/lisp/erc/ChangeLog.08
+++ b/lisp/erc/ChangeLog.08
@@ -405,7 +405,7 @@
 
 See ChangeLog.07 for earlier changes.
 
-       Copyright (C) 2008-2014 Free Software Foundation, Inc.
+       Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/erc-autoaway.el b/lisp/erc/erc-autoaway.el
index 494b48f..981a213 100644
--- a/lisp/erc/erc-autoaway.el
+++ b/lisp/erc/erc-autoaway.el
@@ -1,6 +1,6 @@
 ;;; erc-autoaway.el --- Provides autoaway for ERC
 
-;; Copyright (C) 2002-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index fb22f58..8ce199f 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -1,6 +1,6 @@
 ;;; erc-backend.el --- Backend network communication for ERC
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Filename: erc-backend.el
 ;; Author: Lawrence Mitchell <address@hidden>
@@ -1162,8 +1162,11 @@ add things to `%s' instead."
           (cl-loop for alias in aliases
                    collect (intern (format "erc-server-%s-functions" alias)))))
     `(prog2
-         ;; Normal hook variable.
-         (defvar ,hook-name ',fn-name ,(format hook-doc name))
+         ;; Normal hook variable.  The variable may already have a
+         ;; value at this point, so I default to nil, and (add-hook)
+         ;; unconditionally
+         (defvar ,hook-name nil ,(format hook-doc name))
+         (add-to-list ',hook-name ',fn-name)
          ;; Handler function
          (defun ,fn-name (proc parsed)
            ,fn-doc
diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el
index 10e7318..380ea7c 100644
--- a/lisp/erc/erc-button.el
+++ b/lisp/erc/erc-button.el
@@ -1,6 +1,6 @@
 ;; erc-button.el --- A way of buttonizing certain things in ERC buffers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-capab.el b/lisp/erc/erc-capab.el
index 87e185f..4ddd88d 100644
--- a/lisp/erc/erc-capab.el
+++ b/lisp/erc/erc-capab.el
@@ -1,6 +1,6 @@
 ;;; erc-capab.el --- support for dancer-ircd and hyperion's CAPAB
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 
diff --git a/lisp/erc/erc-compat.el b/lisp/erc/erc-compat.el
index ca4df66..d8af692 100644
--- a/lisp/erc/erc-compat.el
+++ b/lisp/erc/erc-compat.el
@@ -1,6 +1,6 @@
 ;;; erc-compat.el --- ERC compatibility code for XEmacs
 
-;; Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index f9f0060..182f1e0 100644
--- a/lisp/erc/erc-dcc.el
+++ b/lisp/erc/erc-dcc.el
@@ -1,6 +1,6 @@
 ;;; erc-dcc.el --- CTCP DCC module for ERC
 
-;; Copyright (C) 1993-1995, 1998, 2002-2004, 2006-2014 Free Software
+;; Copyright (C) 1993-1995, 1998, 2002-2004, 2006-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Ben A. Mesander <address@hidden>
@@ -379,7 +379,7 @@ created subprocess, or nil."
                   (set-process-filter-multibyte process nil)))))
         (file-error
          (unless (and (string= "Cannot bind server socket" (nth 1 err))
-                      (string= "address already in use" (nth 2 err)))
+                      (string= "address already in use" (downcase (nth 2 
err))))
            (signal (car err) (cdr err)))
          (setq port (1+ port))
          (unless (< port upper)
@@ -1264,4 +1264,3 @@ other client."
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
-
diff --git a/lisp/erc/erc-desktop-notifications.el 
b/lisp/erc/erc-desktop-notifications.el
index c0362b7..f987597 100644
--- a/lisp/erc/erc-desktop-notifications.el
+++ b/lisp/erc/erc-desktop-notifications.el
@@ -1,6 +1,6 @@
 ;; erc-desktop-notifications.el -- Send notification on PRIVMSG or mentions
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <address@hidden>
 ;; Keywords: comm
@@ -46,6 +46,12 @@
   :group 'erc-notifications
   :type '(choice (const :tag "No icon" nil) file))
 
+(defcustom erc-notifications-bus :session
+  "D-Bus bus to use for notification."
+  :version "25.1"
+  :group 'erc-notifications
+  :type '(choice (const :tag "Session bus" :session) string))
+
 (defvar dbus-debug) ; used in the macroexpansion of dbus-ignore-errors
 
 (defun erc-notifications-notify (nick msg)
@@ -53,7 +59,8 @@
 This will replace the last notification sent with this function."
   (dbus-ignore-errors
     (setq erc-notifications-last-notification
-          (notifications-notify :title (xml-escape-string nick)
+          (notifications-notify :bus erc-notifications-bus
+                               :title (xml-escape-string nick)
                                 :body (xml-escape-string msg)
                                 :replaces-id 
erc-notifications-last-notification
                                 :app-icon erc-notifications-icon))))
diff --git a/lisp/erc/erc-ezbounce.el b/lisp/erc/erc-ezbounce.el
index efdd857..5f91be8 100644
--- a/lisp/erc/erc-ezbounce.el
+++ b/lisp/erc/erc-ezbounce.el
@@ -1,6 +1,6 @@
 ;;; erc-ezbounce.el ---  Handle EZBounce bouncer commands
 
-;; Copyright (C) 2002, 2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el
index 0cb7bfe..97c4668 100644
--- a/lisp/erc/erc-fill.el
+++ b/lisp/erc/erc-fill.el
@@ -1,6 +1,6 @@
 ;;; erc-fill.el --- Filling IRC messages in various ways
 
-;; Copyright (C) 2001-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <address@hidden>
 ;;         Mario Lang <address@hidden>
diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el
index 8bb6e77..ca2d14a 100644
--- a/lisp/erc/erc-goodies.el
+++ b/lisp/erc/erc-goodies.el
@@ -1,6 +1,6 @@
 ;; erc-goodies.el --- Collection of ERC modules
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-ibuffer.el b/lisp/erc/erc-ibuffer.el
index 2aebfa3..a2c43f2 100644
--- a/lisp/erc/erc-ibuffer.el
+++ b/lisp/erc/erc-ibuffer.el
@@ -1,6 +1,6 @@
 ;;; erc-ibuffer.el --- ibuffer integration with ERC
 
-;; Copyright (C) 2002, 2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-identd.el b/lisp/erc/erc-identd.el
index e418f33..e79163f 100644
--- a/lisp/erc/erc-identd.el
+++ b/lisp/erc/erc-identd.el
@@ -1,6 +1,6 @@
 ;;; erc-identd.el --- RFC1413 (identd authentication protocol) server
 
-;; Copyright (C) 2003, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-imenu.el b/lisp/erc/erc-imenu.el
index 57fb2a1..ccecc3b 100644
--- a/lisp/erc/erc-imenu.el
+++ b/lisp/erc/erc-imenu.el
@@ -1,6 +1,6 @@
 ;;; erc-imenu.el -- Imenu support for ERC
 
-;; Copyright (C) 2001-2002, 2004, 2006-2014 Free Software Foundation,
+;; Copyright (C) 2001-2002, 2004, 2006-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Mario Lang <address@hidden>
diff --git a/lisp/erc/erc-join.el b/lisp/erc/erc-join.el
index e47e6e0..4c99898 100644
--- a/lisp/erc/erc-join.el
+++ b/lisp/erc/erc-join.el
@@ -1,6 +1,6 @@
 ;;; erc-join.el --- autojoin channels on connect and reconnects
 
-;; Copyright (C) 2002-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-lang.el b/lisp/erc/erc-lang.el
index df5318d..d97abe9 100644
--- a/lisp/erc/erc-lang.el
+++ b/lisp/erc/erc-lang.el
@@ -1,6 +1,6 @@
 ;;; erc-lang.el --- provide the LANG command to ERC
 
-;; Copyright (C) 2002, 2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-list.el b/lisp/erc/erc-list.el
index 6787787..022895a 100644
--- a/lisp/erc/erc-list.el
+++ b/lisp/erc/erc-list.el
@@ -1,6 +1,6 @@
 ;;; erc-list.el --- /list support for ERC  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-log.el b/lisp/erc/erc-log.el
index 1177cd8..f022284 100644
--- a/lisp/erc/erc-log.el
+++ b/lisp/erc/erc-log.el
@@ -1,6 +1,6 @@
 ;;; erc-log.el --- Logging facilities for ERC.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Lawrence Mitchell <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el
index b10da96..776231f 100644
--- a/lisp/erc/erc-match.el
+++ b/lisp/erc/erc-match.el
@@ -1,6 +1,6 @@
 ;;; erc-match.el --- Highlight messages matching certain regexps
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-menu.el b/lisp/erc/erc-menu.el
index f541412..0832fb8 100644
--- a/lisp/erc/erc-menu.el
+++ b/lisp/erc/erc-menu.el
@@ -1,6 +1,6 @@
 ;; erc-menu.el -- Menu-bar definitions for ERC
 
-;; Copyright (C) 2001-2002, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2002, 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-netsplit.el b/lisp/erc/erc-netsplit.el
index 6121bee..35fa84f 100644
--- a/lisp/erc/erc-netsplit.el
+++ b/lisp/erc/erc-netsplit.el
@@ -1,6 +1,6 @@
 ;;; erc-netsplit.el --- Reduce JOIN/QUIT messages on netsplits
 
-;; Copyright (C) 2002-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-networks.el b/lisp/erc/erc-networks.el
index 29a13ae..9de9b25 100644
--- a/lisp/erc/erc-networks.el
+++ b/lisp/erc/erc-networks.el
@@ -1,6 +1,6 @@
 ;;; erc-networks.el --- IRC networks
 
-;; Copyright (C) 2002, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-notify.el b/lisp/erc/erc-notify.el
index 9f61396..24f4471 100644
--- a/lisp/erc/erc-notify.el
+++ b/lisp/erc/erc-notify.el
@@ -1,6 +1,6 @@
 ;;; erc-notify.el --- Online status change notification  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2002-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-page.el b/lisp/erc/erc-page.el
index e1f636e..b2083be 100644
--- a/lisp/erc/erc-page.el
+++ b/lisp/erc/erc-page.el
@@ -1,6 +1,6 @@
 ;; erc-page.el - CTCP PAGE support for ERC
 
-;; Copyright (C) 2002, 2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 
diff --git a/lisp/erc/erc-pcomplete.el b/lisp/erc/erc-pcomplete.el
index 57e1bb1..f1e912c 100644
--- a/lisp/erc/erc-pcomplete.el
+++ b/lisp/erc/erc-pcomplete.el
@@ -1,6 +1,6 @@
 ;;; erc-pcomplete.el --- Provides programmable completion for ERC
 
-;; Copyright (C) 2002-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Sacha Chua <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-replace.el b/lisp/erc/erc-replace.el
index 5eb3338..db9ac9d 100644
--- a/lisp/erc/erc-replace.el
+++ b/lisp/erc/erc-replace.el
@@ -1,6 +1,6 @@
 ;; erc-replace.el -- wash and massage messages inserted into the buffer
 
-;; Copyright (C) 2001-2002, 2004, 2006-2014 Free Software Foundation,
+;; Copyright (C) 2001-2002, 2004, 2006-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Andreas Fuchs <address@hidden>
diff --git a/lisp/erc/erc-ring.el b/lisp/erc/erc-ring.el
index 682585c..de988cc 100644
--- a/lisp/erc/erc-ring.el
+++ b/lisp/erc/erc-ring.el
@@ -1,6 +1,6 @@
 ;; erc-ring.el -- Command history handling for erc using ring.el
 
-;; Copyright (C) 2001-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-services.el b/lisp/erc/erc-services.el
index 931c2c6..b37427f 100644
--- a/lisp/erc/erc-services.el
+++ b/lisp/erc/erc-services.el
@@ -1,6 +1,6 @@
 ;;; erc-services.el --- Identify to NickServ
 
-;; Copyright (C) 2002-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 
diff --git a/lisp/erc/erc-sound.el b/lisp/erc/erc-sound.el
index feb0457..06d96be 100644
--- a/lisp/erc/erc-sound.el
+++ b/lisp/erc/erc-sound.el
@@ -1,6 +1,6 @@
 ;;; erc-sound.el --- CTCP SOUND support for ERC
 
-;; Copyright (C) 2002-2003, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2006-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 
diff --git a/lisp/erc/erc-speedbar.el b/lisp/erc/erc-speedbar.el
index 7b87801..a1bf32b 100644
--- a/lisp/erc/erc-speedbar.el
+++ b/lisp/erc/erc-speedbar.el
@@ -1,6 +1,6 @@
 ;;; erc-speedbar.el --- Speedbar support for ERC
 
-;; Copyright (C) 2001-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Contributor: Eric M. Ludlam <address@hidden>
diff --git a/lisp/erc/erc-spelling.el b/lisp/erc/erc-spelling.el
index c5e38da..e2ddb04 100644
--- a/lisp/erc/erc-spelling.el
+++ b/lisp/erc/erc-spelling.el
@@ -1,6 +1,6 @@
 ;;; erc-spelling.el --- use flyspell in ERC
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el
index 3798206..1ec3f32 100644
--- a/lisp/erc/erc-stamp.el
+++ b/lisp/erc/erc-stamp.el
@@ -1,6 +1,6 @@
 ;;; erc-stamp.el --- Timestamping for ERC messages
 
-;; Copyright (C) 2002-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index fae6be4..1a9aee1 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -1,6 +1,6 @@
 ;;; erc-track.el --- Track modified channel buffers  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-truncate.el b/lisp/erc/erc-truncate.el
index c82ffe3..9a58288 100644
--- a/lisp/erc/erc-truncate.el
+++ b/lisp/erc/erc-truncate.el
@@ -1,6 +1,6 @@
 ;;; erc-truncate.el --- Functions for truncating ERC buffers
 
-;; Copyright (C) 2003-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc-xdcc.el b/lisp/erc/erc-xdcc.el
index f1983c8..c129336 100644
--- a/lisp/erc/erc-xdcc.el
+++ b/lisp/erc/erc-xdcc.el
@@ -1,6 +1,6 @@
 ;;; erc-xdcc.el --- XDCC file-server support for ERC
 
-;; Copyright (C) 2003-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 37b24ea..7b9a3eb 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -1,6 +1,6 @@
 ;; erc.el --- An Emacs Internet Relay Chat client  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Alexander L. Belikoff (address@hidden)
 ;; Contributors: Sergey Berezin (address@hidden),
diff --git a/lisp/eshell/.gitignore b/lisp/eshell/.gitignore
deleted file mode 100644
index 2abf84b..0000000
--- a/lisp/eshell/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-esh-groups.el
-
diff --git a/lisp/eshell/em-alias.el b/lisp/eshell/em-alias.el
index e9cde39..b76cb7c 100644
--- a/lisp/eshell/em-alias.el
+++ b/lisp/eshell/em-alias.el
@@ -1,6 +1,6 @@
 ;;; em-alias.el --- creation and management of command aliases  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-banner.el b/lisp/eshell/em-banner.el
index e76e28e..522ff43 100644
--- a/lisp/eshell/em-banner.el
+++ b/lisp/eshell/em-banner.el
@@ -1,6 +1,6 @@
 ;;; em-banner.el --- sample module that displays a login banner  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-basic.el b/lisp/eshell/em-basic.el
index 1816712..05cd994 100644
--- a/lisp/eshell/em-basic.el
+++ b/lisp/eshell/em-basic.el
@@ -1,6 +1,6 @@
 ;;; em-basic.el --- basic shell builtin commands  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el
index 635db17..dbea9e5 100644
--- a/lisp/eshell/em-cmpl.el
+++ b/lisp/eshell/em-cmpl.el
@@ -1,6 +1,6 @@
 ;;; em-cmpl.el --- completion using the TAB key  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el
index afc67c2..84d46dc 100644
--- a/lisp/eshell/em-dirs.el
+++ b/lisp/eshell/em-dirs.el
@@ -1,6 +1,6 @@
 ;;; em-dirs.el --- directory navigation commands  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el
index 14b89f3..c7ebbf8 100644
--- a/lisp/eshell/em-glob.el
+++ b/lisp/eshell/em-glob.el
@@ -1,6 +1,6 @@
 ;;; em-glob.el --- extended file name globbing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el
index b721b5d..55c83e4 100644
--- a/lisp/eshell/em-hist.el
+++ b/lisp/eshell/em-hist.el
@@ -1,6 +1,6 @@
 ;;; em-hist.el --- history list management  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el
index 4ddf886..76751e5 100644
--- a/lisp/eshell/em-ls.el
+++ b/lisp/eshell/em-ls.el
@@ -1,6 +1,6 @@
 ;;; em-ls.el --- implementation of ls in Lisp  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el
index f55d687..abaa99e 100644
--- a/lisp/eshell/em-pred.el
+++ b/lisp/eshell/em-pred.el
@@ -1,6 +1,6 @@
 ;;; em-pred.el --- argument predicates and modifiers (ala zsh)  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-prompt.el b/lisp/eshell/em-prompt.el
index 78ee4b6..69c5bd6 100644
--- a/lisp/eshell/em-prompt.el
+++ b/lisp/eshell/em-prompt.el
@@ -1,6 +1,6 @@
 ;;; em-prompt.el --- command prompts  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-rebind.el b/lisp/eshell/em-rebind.el
index 67c9d4d..3ac7464 100644
--- a/lisp/eshell/em-rebind.el
+++ b/lisp/eshell/em-rebind.el
@@ -1,6 +1,6 @@
 ;;; em-rebind.el --- rebind keys when point is at current input  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-script.el b/lisp/eshell/em-script.el
index a5f6622..04f3a98 100644
--- a/lisp/eshell/em-script.el
+++ b/lisp/eshell/em-script.el
@@ -1,6 +1,6 @@
 ;;; em-script.el --- Eshell script files  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-smart.el b/lisp/eshell/em-smart.el
index 70c53a8..ed6cfb5 100644
--- a/lisp/eshell/em-smart.el
+++ b/lisp/eshell/em-smart.el
@@ -1,6 +1,6 @@
 ;;; em-smart.el --- smart display of output  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-term.el b/lisp/eshell/em-term.el
index 4a8f368..4a6ac23 100644
--- a/lisp/eshell/em-term.el
+++ b/lisp/eshell/em-term.el
@@ -1,6 +1,6 @@
 ;;; em-term.el --- running visual commands  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-tramp.el b/lisp/eshell/em-tramp.el
index de089b3..92547ed 100644
--- a/lisp/eshell/em-tramp.el
+++ b/lisp/eshell/em-tramp.el
@@ -1,6 +1,6 @@
 ;;; em-tramp.el --- Eshell features that require TRAMP  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Aidan Gauland <address@hidden>
 
diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el
index 1e1059a..c50a874 100644
--- a/lisp/eshell/em-unix.el
+++ b/lisp/eshell/em-unix.el
@@ -1,6 +1,6 @@
 ;;; em-unix.el --- UNIX command aliases  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/em-xtra.el b/lisp/eshell/em-xtra.el
index 67d4b90..b2af974 100644
--- a/lisp/eshell/em-xtra.el
+++ b/lisp/eshell/em-xtra.el
@@ -1,6 +1,6 @@
 ;;; em-xtra.el --- extra alias functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el
index 704de57..5c7d7ca 100644
--- a/lisp/eshell/esh-arg.el
+++ b/lisp/eshell/esh-arg.el
@@ -1,6 +1,6 @@
 ;;; esh-arg.el --- argument processing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el
index d20b66a..d0c8cc4 100644
--- a/lisp/eshell/esh-cmd.el
+++ b/lisp/eshell/esh-cmd.el
@@ -1,6 +1,6 @@
 ;;; esh-cmd.el --- command invocation  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el
index 2654bf2..0b25b31 100644
--- a/lisp/eshell/esh-ext.el
+++ b/lisp/eshell/esh-ext.el
@@ -1,6 +1,6 @@
 ;;; esh-ext.el --- commands external to Eshell  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
@@ -296,6 +296,11 @@ line of the form #!<interp>."
       (let ((fullname (if (file-name-directory file) file
                        (eshell-search-path file)))
            (suffixes eshell-binary-suffixes))
+       (if (and fullname
+                (not (file-remote-p fullname))
+                (file-remote-p default-directory))
+           (setq fullname (expand-file-name
+                           (concat "./" fullname) default-directory)))
        (if (and fullname (not (or eshell-force-execution
                                   (file-executable-p fullname))))
            (while suffixes
diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el
index ebbca58..7dfc39f 100644
--- a/lisp/eshell/esh-io.el
+++ b/lisp/eshell/esh-io.el
@@ -1,6 +1,6 @@
 ;;; esh-io.el --- I/O management  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index 27f3411..da83ec6 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -1,6 +1,6 @@
 ;;; esh-mode.el --- user interface  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/esh-module.el b/lisp/eshell/esh-module.el
index 3ebd612..47b23ae 100644
--- a/lisp/eshell/esh-module.el
+++ b/lisp/eshell/esh-module.el
@@ -1,6 +1,6 @@
 ;;; esh-module.el --- Eshell modules  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2000, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Keywords: processes
diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el
index 045e11d..5b4cdb0 100644
--- a/lisp/eshell/esh-opt.el
+++ b/lisp/eshell/esh-opt.el
@@ -1,6 +1,6 @@
 ;;; esh-opt.el --- command options processing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el
index 7575593..86559f0 100644
--- a/lisp/eshell/esh-proc.el
+++ b/lisp/eshell/esh-proc.el
@@ -1,6 +1,6 @@
 ;;; esh-proc.el --- process management  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el
index 53f6425..697f97e 100644
--- a/lisp/eshell/esh-util.el
+++ b/lisp/eshell/esh-util.el
@@ -1,6 +1,6 @@
 ;;; esh-util.el --- general utilities  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el
index 689eb66..197a8e7 100644
--- a/lisp/eshell/esh-var.el
+++ b/lisp/eshell/esh-var.el
@@ -1,6 +1,6 @@
 ;;; esh-var.el --- handling of variables  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el
index af67266..5539551 100644
--- a/lisp/eshell/eshell.el
+++ b/lisp/eshell/eshell.el
@@ -1,6 +1,6 @@
 ;;; eshell.el --- the Emacs command shell  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Version: 2.4.2
diff --git a/lisp/expand.el b/lisp/expand.el
index d5c3b4c..4459c3a 100644
--- a/lisp/expand.el
+++ b/lisp/expand.el
@@ -1,6 +1,6 @@
 ;;; expand.el --- make abbreviations more usable
 
-;; Copyright (C) 1995-1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Frederic Lepied <address@hidden>
 ;; Maintainer: Frederic Lepied <address@hidden>
diff --git a/lisp/ezimage.el b/lisp/ezimage.el
index 181b19e..542e5e9 100644
--- a/lisp/ezimage.el
+++ b/lisp/ezimage.el
@@ -1,6 +1,6 @@
 ;;; ezimage --- Generalized Image management
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: file, tags, tools
diff --git a/lisp/face-remap.el b/lisp/face-remap.el
index f1af4ec..3ec074b 100644
--- a/lisp/face-remap.el
+++ b/lisp/face-remap.el
@@ -1,6 +1,6 @@
 ;;; face-remap.el --- Functions for managing `face-remapping-alist'  -*- 
lexical-binding: t -*-
 ;;
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <address@hidden>
 ;; Keywords: faces, face remapping, display, user commands
diff --git a/lisp/facemenu.el b/lisp/facemenu.el
index 678aca2..1a765f9 100644
--- a/lisp/facemenu.el
+++ b/lisp/facemenu.el
@@ -1,6 +1,6 @@
 ;;; facemenu.el --- create a face menu for interactively adding fonts to text
 
-;; Copyright (C) 1994-1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <address@hidden>
 ;; Keywords: faces
diff --git a/lisp/faces.el b/lisp/faces.el
index 1d4fc9c..22bf262 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -1,6 +1,6 @@
 ;;; faces.el --- Lisp faces
 
-;; Copyright (C) 1992-1996, 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1996, 1998-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
diff --git a/lisp/ffap.el b/lisp/ffap.el
index e5f574d..350a6bd 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -1,6 +1,6 @@
 ;;; ffap.el --- find file (or url) at point
 
-;; Copyright (C) 1995-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Michelangelo Grigni <address@hidden>
 ;; Maintainer: address@hidden
@@ -476,7 +476,7 @@ Returned values:
              ;; (file-error "connection failed" "address already in use"
              ;;             "ftp.uu.net" "ffap-machine-p")
              ((equal mesg "connection failed")
-              (if (equal (nth 2 error) "permission denied")
+              (if (string= (downcase (nth 2 error)) "permission denied")
                   nil                  ; host does not exist
                 ;; Other errors mean the host exists:
                 (nth 2 error)))
@@ -1439,7 +1439,7 @@ and the functions `ffap-file-at-point' and 
`ffap-url-at-point'."
                 (expand-file-name filename)))
        ;; User does not want to find a non-existent file:
        ((signal 'file-error (list "Opening file buffer"
-                                 "no such file or directory"
+                                 "No such file or directory"
                                  filename)))))))
 
 ;; Shortcut: allow {M-x ffap} rather than {M-x find-file-at-point}.
diff --git a/lisp/filecache.el b/lisp/filecache.el
index 7d12517..d036107 100644
--- a/lisp/filecache.el
+++ b/lisp/filecache.el
@@ -1,6 +1,6 @@
 ;;; filecache.el --- find files using a pre-loaded cache
 
-;; Copyright (C) 1996, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author:  Peter Breton <address@hidden>
 ;; Created: Sun Nov 10 1996
diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index 33b02d6..c94f631 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -1,6 +1,6 @@
 ;;; filenotify.el --- watch files for changes on disk
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 
@@ -41,13 +41,21 @@ could use another implementation.")
   "Hash table for registered file notification descriptors.
 A key in this hash table is the descriptor as returned from
 `gfilenotify', `inotify', `w32notify' or a file name handler.
-The value in the hash table is the cons cell (DIR FILE CALLBACK).")
+The value in the hash table is a list
+
+  \(DIR (FILE . CALLBACK) (FILE . CALLBACK) ...)
+
+Several values for a given DIR happen only for `inotify', when
+different files from the same directory are watched.")
 
 ;; This function is used by `gfilenotify', `inotify' and `w32notify' events.
 ;;;###autoload
 (defun file-notify-handle-event (event)
   "Handle file system monitoring event.
-If EVENT is a filewatch event, call its callback.
+If EVENT is a filewatch event, call its callback.  It has the format
+
+  \(file-notify (DESCRIPTOR ACTIONS FILE COOKIE) CALLBACK)
+
 Otherwise, signal a `file-notify-error'."
   (interactive "e")
   (if (and (eq (car event) 'file-notify)
@@ -81,12 +89,23 @@ This is available in case a file has been moved."
 This is available in case a file has been moved."
   (nth 3 event))
 
+;; `inotify' returns the same descriptor when the file (directory)
+;; uses the same inode.  We want to distinguish, and apply a virtual
+;; descriptor which make the difference.
+(defun file-notify--descriptor (descriptor file)
+  "Return the descriptor to be used in `file-notify-*-watch'.
+For `gfilenotify' and `w32notify' it is the same descriptor as
+used in the low-level file notification package."
+  (if (and (natnump descriptor) (eq file-notify--library 'inotify))
+      (cons descriptor file)
+    descriptor))
+
 ;; The callback function used to map between specific flags of the
 ;; respective file notifications, and the ones we return.
 (defun file-notify-callback (event)
   "Handle an EVENT returned from file notification.
-EVENT is the same one as in `file-notify-handle-event' except the
-car of that event, which is the symbol `file-notify'."
+EVENT is the cdr of the event in `file-notify-handle-event'
+\(DESCRIPTOR ACTIONS FILE COOKIE)."
   (let* ((desc (car event))
         (registered (gethash desc file-notify-descriptors))
         (pending-event (assoc desc file-notify--pending-events))
@@ -97,99 +116,113 @@ car of that event, which is the symbol `file-notify'."
     ;; Make actions a list.
     (unless (consp actions) (setq actions (cons actions nil)))
 
-    ;; Check, that event is meant for us.
-    (unless (setq callback (nth 2 registered))
-      (setq actions nil))
-
-    ;; Loop over actions.  In fact, more than one action happens only
-    ;; for `inotify'.
-    (dolist (action actions)
-
-      ;; Send pending event, if it doesn't match.
-      (when (and pending-event
-                ;; The cookie doesn't match.
-                (not (eq (file-notify--event-cookie pending-event)
-                         (file-notify--event-cookie event)))
-                (or
-                 ;; inotify.
-                 (and (eq (nth 1 pending-event) 'moved-from)
-                      (not (eq action 'moved-to)))
-                 ;; w32notify.
-                 (and (eq (nth 1 pending-event) 'renamed-from)
-                      (not (eq action 'renamed-to)))))
-       (funcall callback
-                (list desc 'deleted
-                      (file-notify--event-file-name pending-event)))
-       (setq file-notify--pending-events
-             (delete pending-event file-notify--pending-events)))
-
-      ;; Map action.  We ignore all events which cannot be mapped.
-      (setq action
-           (cond
-            ;; gfilenotify.
-            ((memq action '(attribute-changed changed created deleted)) action)
-            ((eq action 'moved)
-             (setq file1 (file-notify--event-file1-name event))
-             'renamed)
-
-            ;; inotify.
-            ((eq action 'attrib) 'attribute-changed)
-            ((eq action 'create) 'created)
-            ((eq action 'modify) 'changed)
-            ((memq action '(delete 'delete-self move-self)) 'deleted)
-            ;; Make the event pending.
-            ((eq action 'moved-from)
-             (add-to-list 'file-notify--pending-events
-                          (list desc action file
-                                (file-notify--event-cookie event)))
-             nil)
-            ;; Look for pending event.
-            ((eq action 'moved-to)
-             (if (null pending-event)
-                 'created
-               (setq file1 file
-                     file (file-notify--event-file-name pending-event)
-                     file-notify--pending-events
-                     (delete pending-event file-notify--pending-events))
-               'renamed))
-
-            ;; w32notify.
-            ((eq action 'added) 'created)
-            ((eq action 'modified) 'changed)
-            ((eq action 'removed) 'deleted)
-            ;; Make the event pending.
-            ((eq 'renamed-from action)
-             (add-to-list 'file-notify--pending-events
-                          (list desc action file
-                                (file-notify--event-cookie event)))
-             nil)
-            ;; Look for pending event.
-            ((eq 'renamed-to action)
-             (if (null pending-event)
-                 'created
-               (setq file1 file
-                     file (file-notify--event-file-name pending-event)
-                     file-notify--pending-events
-                     (delete pending-event file-notify--pending-events))
-               'renamed))))
-
-      ;; Apply callback.
-      (when (and action
-                (or
-                 ;; If there is no relative file name for that watch,
-                 ;; we watch the whole directory.
-                 (null (nth 1 registered))
-                 ;; File matches.
-                 (string-equal
-                  (nth 1 registered) (file-name-nondirectory file))
-                 ;; File1 matches.
-                 (and (stringp file1)
-                      (string-equal
-                       (nth 1 registered) (file-name-nondirectory file1)))))
-       (if file1
-           (funcall callback (list desc action file file1))
-         (funcall callback (list desc action file)))))))
-
+    ;; Loop over registered entries.  In fact, more than one entry
+    ;; happens only for `inotify'.
+    (dolist (entry (cdr registered))
+
+      ;; Check, that event is meant for us.
+      (unless (setq callback (cdr entry))
+       (setq actions nil))
+
+      ;; Loop over actions.  In fact, more than one action happens only
+      ;; for `inotify'.
+      (dolist (action actions)
+
+       ;; Send pending event, if it doesn't match.
+       (when (and pending-event
+                  ;; The cookie doesn't match.
+                  (not (eq (file-notify--event-cookie pending-event)
+                           (file-notify--event-cookie event)))
+                  (or
+                   ;; inotify.
+                   (and (eq (nth 1 pending-event) 'moved-from)
+                        (not (eq action 'moved-to)))
+                   ;; w32notify.
+                   (and (eq (nth 1 pending-event) 'renamed-from)
+                        (not (eq action 'renamed-to)))))
+         (funcall callback
+                  (list desc 'deleted
+                        (file-notify--event-file-name pending-event)))
+         (setq file-notify--pending-events
+               (delete pending-event file-notify--pending-events)))
+
+       ;; Map action.  We ignore all events which cannot be mapped.
+       (setq action
+             (cond
+              ;; gfilenotify.
+              ((memq action '(attribute-changed changed created deleted))
+               action)
+              ((eq action 'moved)
+               (setq file1 (file-notify--event-file1-name event))
+               'renamed)
+
+              ;; inotify.
+              ((eq action 'attrib) 'attribute-changed)
+              ((eq action 'create) 'created)
+              ((eq action 'modify) 'changed)
+              ((memq action '(delete 'delete-self move-self)) 'deleted)
+              ;; Make the event pending.
+              ((eq action 'moved-from)
+               (add-to-list 'file-notify--pending-events
+                            (list desc action file
+                                  (file-notify--event-cookie event)))
+               nil)
+              ;; Look for pending event.
+              ((eq action 'moved-to)
+               (if (null pending-event)
+                   'created
+                 (setq file1 file
+                       file (file-notify--event-file-name pending-event)
+                       file-notify--pending-events
+                       (delete pending-event file-notify--pending-events))
+                 'renamed))
+
+              ;; w32notify.
+              ((eq action 'added) 'created)
+              ((eq action 'modified) 'changed)
+              ((eq action 'removed) 'deleted)
+              ;; Make the event pending.
+              ((eq action 'renamed-from)
+               (add-to-list 'file-notify--pending-events
+                            (list desc action file
+                                  (file-notify--event-cookie event)))
+               nil)
+              ;; Look for pending event.
+              ((eq action 'renamed-to)
+               (if (null pending-event)
+                   'created
+                 (setq file1 file
+                       file (file-notify--event-file-name pending-event)
+                       file-notify--pending-events
+                       (delete pending-event file-notify--pending-events))
+                 'renamed))))
+
+       ;; Apply callback.
+       (when (and action
+                  (or
+                   ;; If there is no relative file name for that watch,
+                   ;; we watch the whole directory.
+                   (null (nth 0 entry))
+                   ;; File matches.
+                   (string-equal
+                    (nth 0 entry) (file-name-nondirectory file))
+                   ;; File1 matches.
+                   (and (stringp file1)
+                        (string-equal
+                         (nth 0 entry) (file-name-nondirectory file1)))))
+         (if file1
+             (funcall
+              callback
+              `(,(file-notify--descriptor desc (nth 0 entry))
+                ,action ,file ,file1))
+           (funcall
+            callback
+            `(,(file-notify--descriptor desc (nth 0 entry))
+              ,action ,file))))))))
+
+;; `gfilenotify' and `w32notify' return a unique descriptor for every
+;; `file-notify-add-watch', while `inotify' returns a unique
+;; descriptor per inode only.
 (defun file-notify-add-watch (file flags callback)
   "Add a watch for filesystem events pertaining to FILE.
 This arranges for filesystem events pertaining to FILE to be reported
@@ -206,7 +239,7 @@ include the following symbols:
   `attribute-change' -- watch for file attributes changes, like
                         permissions or modification time
 
-If FILE is a directory, 'change' watches for file creation or
+If FILE is a directory, `change' watches for file creation or
 deletion in that directory.  This does not work recursively.
 
 When any event happens, Emacs will call the CALLBACK function passing
@@ -240,82 +273,96 @@ FILE is the name of the file whose event is being 
reported."
               (if (file-directory-p file)
                   file
                 (file-name-directory file))))
-       desc func l-flags)
-
-    ;; Check, whether this has been registered already.
-;    (maphash
-;     (lambda (key value)
-;       (when (equal (cons file callback) value) (setq desc key)))
-;     file-notify-descriptors)
-
-    (unless desc
-      (if handler
-         ;; A file name handler could exist even if there is no local
-         ;; file notification support.
-         (setq desc (funcall
-                     handler 'file-notify-add-watch dir flags callback))
-
-       ;; Check, whether Emacs has been compiled with file
-       ;; notification support.
-       (unless file-notify--library
-         (signal 'file-notify-error
-                 '("No file notification package available")))
-
-       ;; Determine low-level function to be called.
-       (setq func
-             (cond
-              ((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
-              ((eq file-notify--library 'inotify) 'inotify-add-watch)
-              ((eq file-notify--library 'w32notify) 'w32notify-add-watch)))
-
-       ;; Determine respective flags.
-       (if (eq file-notify--library 'gfilenotify)
-           (setq l-flags '(watch-mounts send-moved))
-         (when (memq 'change flags)
-           (setq
-            l-flags
-            (cond
-             ((eq file-notify--library 'inotify) '(create modify move delete))
-             ((eq file-notify--library 'w32notify)
-              '(file-name directory-name size last-write-time)))))
-         (when (memq 'attribute-change flags)
-           (add-to-list
-            'l-flags
-            (cond
-             ((eq file-notify--library 'inotify) 'attrib)
-             ((eq file-notify--library 'w32notify) 'attributes)))))
-
-       ;; Call low-level function.
-       (setq desc (funcall func dir l-flags 'file-notify-callback))))
+       desc func l-flags registered)
+
+    (if handler
+       ;; A file name handler could exist even if there is no local
+       ;; file notification support.
+       (setq desc (funcall
+                   handler 'file-notify-add-watch dir flags callback))
+
+      ;; Check, whether Emacs has been compiled with file
+      ;; notification support.
+      (unless file-notify--library
+       (signal 'file-notify-error
+               '("No file notification package available")))
+
+      ;; Determine low-level function to be called.
+      (setq func
+           (cond
+            ((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
+            ((eq file-notify--library 'inotify) 'inotify-add-watch)
+            ((eq file-notify--library 'w32notify) 'w32notify-add-watch)))
+
+      ;; Determine respective flags.
+      (if (eq file-notify--library 'gfilenotify)
+         (setq l-flags '(watch-mounts send-moved))
+       (when (memq 'change flags)
+         (setq
+          l-flags
+          (cond
+           ((eq file-notify--library 'inotify) '(create modify move delete))
+           ((eq file-notify--library 'w32notify)
+            '(file-name directory-name size last-write-time)))))
+       (when (memq 'attribute-change flags)
+         (add-to-list
+          'l-flags
+          (cond
+           ((eq file-notify--library 'inotify) 'attrib)
+           ((eq file-notify--library 'w32notify) 'attributes)))))
+
+      ;; Call low-level function.
+      (setq desc (funcall func dir l-flags 'file-notify-callback)))
+
+    ;; Modify `file-notify-descriptors'.
+    (setq registered (gethash desc file-notify-descriptors))
+    (puthash
+     desc
+     `(,dir
+       (,(unless (file-directory-p file) (file-name-nondirectory file))
+       . ,callback)
+       . ,(cdr registered))
+     file-notify-descriptors)
 
     ;; Return descriptor.
-    (puthash desc
-             (list (directory-file-name
-                   (if (file-directory-p dir) dir (file-name-directory dir)))
-                   (unless (file-directory-p file)
-                    (file-name-nondirectory file))
-                  callback)
-             file-notify-descriptors)
-    desc))
+    (file-notify--descriptor
+     desc (unless (file-directory-p file) (file-name-nondirectory file)))))
 
 (defun file-notify-rm-watch (descriptor)
   "Remove an existing watch specified by its DESCRIPTOR.
 DESCRIPTOR should be an object returned by `file-notify-add-watch'."
-  (let ((file (car (gethash descriptor file-notify-descriptors)))
-       handler)
-
-    (when (stringp file)
-      (setq handler (find-file-name-handler file 'file-notify-rm-watch))
-      (if handler
-         (funcall handler 'file-notify-rm-watch descriptor)
-       (funcall
-        (cond
-         ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
-         ((eq file-notify--library 'inotify) 'inotify-rm-watch)
-         ((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
-        descriptor)))
-
-    (remhash descriptor file-notify-descriptors)))
+  (let* ((desc (if (consp descriptor) (car descriptor) descriptor))
+        (file (if (consp descriptor) (cdr descriptor)))
+        (dir (car (gethash desc file-notify-descriptors)))
+        handler registered)
+
+    (when (stringp dir)
+      (setq handler (find-file-name-handler dir 'file-notify-rm-watch))
+
+      ;; Modify `file-notify-descriptors'.
+      (if (not file)
+         (remhash desc file-notify-descriptors)
+
+       (setq registered (gethash desc file-notify-descriptors))
+       (setcdr registered
+               (delete (assoc file (cdr registered)) (cdr registered)))
+       (if (null (cdr registered))
+           (remhash desc file-notify-descriptors)
+         (puthash desc registered file-notify-descriptors)))
+
+      ;; Call low-level function.
+      (when (null (cdr registered))
+       (if handler
+           ;; A file name handler could exist even if there is no local
+           ;; file notification support.
+           (funcall handler 'file-notify-rm-watch desc)
+
+         (funcall
+          (cond
+           ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
+           ((eq file-notify--library 'inotify) 'inotify-rm-watch)
+           ((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
+          desc))))))
 
 ;; The end:
 (provide 'filenotify)
diff --git a/lisp/files-x.el b/lisp/files-x.el
index c3dbcd5..248c307 100644
--- a/lisp/files-x.el
+++ b/lisp/files-x.el
@@ -1,6 +1,6 @@
 ;;; files-x.el --- extended file handling commands
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/files.el b/lisp/files.el
index c9d1d2d..5e80cb7 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1,6 +1,6 @@
 ;;; files.el --- file input and output commands for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Package: emacs
@@ -729,6 +729,39 @@ The path separator is colon in GNU and GNU-like systems."
                     (lambda (f) (and (file-directory-p f) 'dir-ok)))
        (error "No such directory found via CDPATH environment variable"))))
 
+(defsubst directory-name-p (name)
+  "Return non-nil if NAME ends with a slash character."
+  (and (> (length name) 0)
+       (char-equal (aref name (1- (length name))) ?/)))
+
+(defun directory-files-recursively (dir match &optional include-directories)
+  "Return all files under DIR that have file names matching MATCH (a regexp).
+This function works recursively.  Files are returned in \"depth first\"
+and alphabetical order.
+If INCLUDE-DIRECTORIES, also include directories that have matching names."
+  (let ((result nil)
+       (files nil)
+       ;; When DIR is "/", remote file names like "/method:" could
+       ;; also be offered.  We shall suppress them.
+       (tramp-mode (and tramp-mode (file-remote-p dir))))
+    (dolist (file (sort (file-name-all-completions "" dir)
+                       'string<))
+      (unless (member file '("./" "../"))
+       (if (directory-name-p file)
+           (let* ((leaf (substring file 0 (1- (length file))))
+                  (full-file (expand-file-name leaf dir)))
+             ;; Don't follow symlinks to other directories.
+             (unless (file-symlink-p full-file)
+               (setq result
+                     (nconc result (directory-files-recursively
+                                    full-file match include-directories))))
+             (when (and include-directories
+                        (string-match match leaf))
+               (setq result (nconc result (list full-file)))))
+         (when (string-match match file)
+           (push (expand-file-name file dir) files)))))
+    (nconc result (nreverse files))))
+
 (defun load-file (file)
   "Load the Lisp file named FILE."
   ;; This is a case where .elc makes a lot of sense.
@@ -1456,8 +1489,9 @@ expand wildcards (if any) and visit multiple files."
     (if (listp value)
        (progn
          (setq value (nreverse value))
-         (cons (switch-to-buffer-other-window (car value))
-               (mapcar 'switch-to-buffer (cdr value))))
+         (switch-to-buffer-other-window (car value))
+         (mapc 'switch-to-buffer (cdr value))
+         value)
       (switch-to-buffer-other-window value))))
 
 (defun find-file-other-frame (filename &optional wildcards)
@@ -1479,8 +1513,9 @@ expand wildcards (if any) and visit multiple files."
     (if (listp value)
        (progn
          (setq value (nreverse value))
-         (cons (switch-to-buffer-other-frame (car value))
-               (mapcar 'switch-to-buffer (cdr value))))
+         (switch-to-buffer-other-frame (car value))
+         (mapc 'switch-to-buffer (cdr value))
+         value)
       (switch-to-buffer-other-frame value))))
 
 (defun find-file-existing (filename)
@@ -2093,7 +2128,7 @@ This function ensures that none of these modifications 
will take place."
 
 (defun insert-file-1 (filename insert-func)
   (if (file-directory-p filename)
-      (signal 'file-error (list "Opening input file" "file is a directory"
+      (signal 'file-error (list "Opening input file" "Is a directory"
                                 filename)))
   ;; Check whether the file is uncommonly large
   (abort-if-file-too-large (nth 7 (file-attributes filename)) "insert" 
filename)
@@ -3567,7 +3602,9 @@ Returns the new list."
   "Collect entries from CLASS-VARIABLES into VARIABLES.
 ROOT is the root directory of the project.
 Return the new variables list."
-  (let* ((file-name (buffer-file-name))
+  (let* ((file-name (or (buffer-file-name)
+                       ;; Handle non-file buffers, too.
+                       (expand-file-name default-directory)))
         (sub-file-name (if file-name
                             ;; FIXME: Why not use file-relative-name?
                            (substring file-name (length root)))))
@@ -4602,7 +4639,7 @@ See the subroutine `basic-save-buffer' for more 
information."
     ;; then Rmail-mbox never displays it due to buffer swapping.  If
     ;; the test is ever re-introduced, be sure to handle saving of
     ;; Rmail files.
-    (if (and modp (buffer-file-name))
+    (if (and modp (buffer-file-name) (not noninteractive))
        (message "Saving file %s..." (buffer-file-name)))
     (basic-save-buffer)
     (and modp (memq arg '(4 64)) (setq buffer-backed-up nil))))
@@ -4744,7 +4781,7 @@ Before and after saving the buffer, this function runs
          ;; Support VC `implicit' locking.
          (vc-after-save)
          (run-hooks 'after-save-hook))
-      (message "(No changes need to be saved)"))))
+      (or noninteractive (message "(No changes need to be saved)")))))
 
 ;; This does the "real job" of writing a buffer into its visited file
 ;; and making a backup file.  This is what is normally done
@@ -6057,7 +6094,7 @@ and `list-directory-verbose-switches'."
 
 PATTERN is assumed to represent a file-name wildcard suitable for the
 underlying filesystem.  For Unix and GNU/Linux, each character from the
-set [ \\t\\n;<>&|()'\"#$] is quoted with a backslash; for DOS/Windows, all
+set [ \\t\\n;<>&|()`'\"#$] is quoted with a backslash; for DOS/Windows, all
 the parts of the pattern which don't include wildcard characters are
 quoted with double quotes.
 
@@ -6071,12 +6108,12 @@ need to be passed verbatim to shell commands."
       ;; argument has quotes, we can safely assume it is already
       ;; quoted by the caller.
       (if (or (string-match "[\"]" pattern)
-             ;; We quote [&()#$'] in case their shell is a port of a
+             ;; We quote [&()#$`'] in case their shell is a port of a
              ;; Unixy shell.  We quote [,=+] because stock DOS and
              ;; Windows shells require that in some cases, such as
              ;; passing arguments to batch files that use positional
              ;; arguments like %1.
-             (not (string-match "[ \t;&()#$',=+]" pattern)))
+             (not (string-match "[ \t;&()#$`',=+]" pattern)))
          pattern
        (let ((result "\"")
              (beg 0)
@@ -6091,7 +6128,7 @@ need to be passed verbatim to shell commands."
          (concat result (substring pattern beg) "\""))))
      (t
       (let ((beg 0))
-       (while (string-match "[ \t\n;<>&|()'\"#$]" pattern beg)
+       (while (string-match "[ \t\n;<>&|()`'\"#$]" pattern beg)
          (setq pattern
                (concat (substring pattern 0 (match-beginning 0))
                        "\\"
@@ -6553,35 +6590,40 @@ Runs the members of `kill-emacs-query-functions' in 
turn and stops
 if any returns nil.  If `confirm-kill-emacs' is non-nil, calls it."
   (interactive "P")
   (save-some-buffers arg t)
-  (and (or (not (memq t (mapcar (function
-                                 (lambda (buf) (and (buffer-file-name buf)
-                                                    (buffer-modified-p buf))))
-                               (buffer-list))))
-          (yes-or-no-p "Modified buffers exist; exit anyway? "))
-       (or (not (fboundp 'process-list))
-          ;; process-list is not defined on MSDOS.
-          (let ((processes (process-list))
-                active)
-            (while processes
-              (and (memq (process-status (car processes)) '(run stop open 
listen))
-                   (process-query-on-exit-flag (car processes))
-                   (setq active t))
-              (setq processes (cdr processes)))
-            (or (not active)
-                (with-current-buffer-window
-                 (get-buffer-create "*Process List*") nil
-                 #'(lambda (window _value)
-                     (with-selected-window window
-                       (unwind-protect
-                           (yes-or-no-p "Active processes exist; kill them and 
exit anyway? ")
-                         (when (window-live-p window)
-                           (quit-restore-window window 'kill)))))
-                 (list-processes t)))))
-       ;; Query the user for other things, perhaps.
-       (run-hook-with-args-until-failure 'kill-emacs-query-functions)
-       (or (null confirm-kill-emacs)
-          (funcall confirm-kill-emacs "Really exit Emacs? "))
-       (kill-emacs)))
+  (let ((confirm confirm-kill-emacs))
+    (and
+     (or (not (memq t (mapcar (function
+                               (lambda (buf) (and (buffer-file-name buf)
+                                                  (buffer-modified-p buf))))
+                              (buffer-list))))
+         (progn (setq confirm nil)
+                (yes-or-no-p "Modified buffers exist; exit anyway? ")))
+     (or (not (fboundp 'process-list))
+         ;; process-list is not defined on MSDOS.
+         (let ((processes (process-list))
+               active)
+           (while processes
+             (and (memq (process-status (car processes)) '(run stop open 
listen))
+                  (process-query-on-exit-flag (car processes))
+                  (setq active t))
+             (setq processes (cdr processes)))
+           (or (not active)
+               (with-current-buffer-window
+                (get-buffer-create "*Process List*") nil
+                #'(lambda (window _value)
+                    (with-selected-window window
+                      (unwind-protect
+                          (progn
+                            (setq confirm nil)
+                            (yes-or-no-p "Active processes exist; kill them 
and exit anyway? "))
+                        (when (window-live-p window)
+                          (quit-restore-window window 'kill)))))
+                (list-processes t)))))
+     ;; Query the user for other things, perhaps.
+     (run-hook-with-args-until-failure 'kill-emacs-query-functions)
+     (or (null confirm)
+         (funcall confirm "Really exit Emacs? "))
+     (kill-emacs))))
 
 (defun save-buffers-kill-terminal (&optional arg)
   "Offer to save each buffer, then kill the current connection.
diff --git a/lisp/filesets.el b/lisp/filesets.el
index ff76dec..f990333 100644
--- a/lisp/filesets.el
+++ b/lisp/filesets.el
@@ -1,6 +1,6 @@
 ;;; filesets.el --- handle group of files -*- coding: utf-8 -*-
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Thomas Link <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/find-cmd.el b/lisp/find-cmd.el
index 276aeed..7230761 100644
--- a/lisp/find-cmd.el
+++ b/lisp/find-cmd.el
@@ -1,6 +1,6 @@
 ;;; find-cmd.el --- Build a valid find(1) command with sexps
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Philip Jackson <address@hidden>
 ;; Version: 0.6
diff --git a/lisp/find-dired.el b/lisp/find-dired.el
index 6ddeab7..0dc98de 100644
--- a/lisp/find-dired.el
+++ b/lisp/find-dired.el
@@ -1,6 +1,6 @@
 ;;; find-dired.el --- run a `find' command and dired the output
 
-;; Copyright (C) 1992, 1994-1995, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1992, 1994-1995, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Roland McGrath <address@hidden>,
diff --git a/lisp/find-file.el b/lisp/find-file.el
index f3a135a..97e95d2 100644
--- a/lisp/find-file.el
+++ b/lisp/find-file.el
@@ -4,7 +4,7 @@
 ;; Maintainer: address@hidden
 ;; Keywords: c, matching, tools
 
-;; Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/find-lisp.el b/lisp/find-lisp.el
index a4cc1ab..2c8faa2 100644
--- a/lisp/find-lisp.el
+++ b/lisp/find-lisp.el
@@ -4,7 +4,7 @@
 ;; Created: Fri Mar 26 1999
 ;; Keywords: unix
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/finder.el b/lisp/finder.el
index bb5b441..47fab3c 100644
--- a/lisp/finder.el
+++ b/lisp/finder.el
@@ -1,6 +1,7 @@
 ;;; finder.el --- topic & keyword-based code finder
 
-;; Copyright (C) 1992, 1997-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1997-1999, 2001-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Eric S. Raymond <address@hidden>
 ;; Created: 16 Jun 1992
diff --git a/lisp/flow-ctrl.el b/lisp/flow-ctrl.el
index e4cac74..41eab80 100644
--- a/lisp/flow-ctrl.el
+++ b/lisp/flow-ctrl.el
@@ -1,6 +1,6 @@
 ;;; flow-ctrl.el --- help for lusers on cu(1) or ttys with wired-in ^S/^Q flow 
control
 
-;; Copyright (C) 1990-1991, 1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1990-1991, 1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher
diff --git a/lisp/foldout.el b/lisp/foldout.el
index e0ca41a..443f8b7 100644
--- a/lisp/foldout.el
+++ b/lisp/foldout.el
@@ -1,6 +1,6 @@
 ;;; foldout.el --- folding extensions for outline-mode and outline-minor-mode
 
-;; Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Kevin Broadey <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/follow.el b/lisp/follow.el
index ddb25be..abb874e 100644
--- a/lisp/follow.el
+++ b/lisp/follow.el
@@ -1,6 +1,6 @@
 ;;; follow.el --- synchronize windows showing the same buffer
 
-;; Copyright (C) 1995-1997, 1999, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1995-1997, 1999, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Anders Lindgren <address@hidden>
diff --git a/lisp/font-core.el b/lisp/font-core.el
index 7d7e3f9..5dd6ad3 100644
--- a/lisp/font-core.el
+++ b/lisp/font-core.el
@@ -1,6 +1,6 @@
 ;;; font-core.el --- Core interface to font-lock
 
-;; Copyright (C) 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: languages, faces
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 2244427..6ec6c9f 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -1,6 +1,6 @@
 ;;; font-lock.el --- Electric font lock mode
 
-;; Copyright (C) 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2015 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski
 ;;     Richard Stallman
diff --git a/lisp/format-spec.el b/lisp/format-spec.el
index a5de349..e61978e 100644
--- a/lisp/format-spec.el
+++ b/lisp/format-spec.el
@@ -1,6 +1,6 @@
 ;;; format-spec.el --- functions for formatting arbitrary formatting strings
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: tools
diff --git a/lisp/format.el b/lisp/format.el
index 5529e6c..1a05e7e 100644
--- a/lisp/format.el
+++ b/lisp/format.el
@@ -1,6 +1,6 @@
 ;;; format.el --- read and save files in multiple formats
 
-;; Copyright (C) 1994-1995, 1997, 1999, 2001-2014 Free Software
+;; Copyright (C) 1994-1995, 1997, 1999, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Boris Goldowsky <address@hidden>
diff --git a/lisp/forms.el b/lisp/forms.el
index b1eb388..22ddd65 100644
--- a/lisp/forms.el
+++ b/lisp/forms.el
@@ -1,6 +1,6 @@
 ;;; forms.el --- Forms mode: edit a file as a form to fill in
 
-;; Copyright (C) 1991, 1994-1997, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1991, 1994-1997, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Johan Vromans <address@hidden>
diff --git a/lisp/frame.el b/lisp/frame.el
index 7848063..1d5bbf2 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -1,6 +1,7 @@
 ;;; frame.el --- multi-frame management independent of window systems  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1993-1994, 1996-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 1996-1997, 2000-2015 Free Software
+;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
@@ -274,23 +275,22 @@ there (in decreasing order of priority)."
       ;; by the lines added in x-create-frame for the tool-bar and
       ;; switch `tool-bar-mode' off.
       (when (display-graphic-p)
-       (let ((tool-bar-lines
-              (or (assq 'tool-bar-lines initial-frame-alist)
-                  (assq 'tool-bar-lines window-system-frame-alist)
-                  (assq 'tool-bar-lines default-frame-alist))))
-         ;; Shrink frame by its initial tool bar height iff either zero
-         ;; tool bar lines have been requested in one of the frame's
-         ;; alists or tool bar mode has been turned off explicitly in
-         ;; the user's init file.
-         (when (and tool-bar-lines
-                    (> frame-initial-frame-tool-bar-height 0)
-                    (or (not tool-bar-mode)
-                        (null (cdr tool-bar-lines))
-                        (eq 0 (cdr tool-bar-lines))))
-           (set-frame-height
-            frame-initial-frame (- (frame-text-height frame-initial-frame)
-                                   frame-initial-frame-tool-bar-height)
-            nil t)
+       (let* ((init-lines
+               (assq 'tool-bar-lines initial-frame-alist))
+              (other-lines
+               (or (assq 'tool-bar-lines window-system-frame-alist)
+                   (assq 'tool-bar-lines default-frame-alist)))
+              (lines (or init-lines other-lines))
+              (height (tool-bar-height frame-initial-frame t)))
+         ;; Adjust frame top if either zero (nil) tool bar lines have
+         ;; been requested in the most relevant of the frame's alists
+         ;; or tool bar mode has been explicitly turned off in the
+         ;; user's init file.
+         (when (and (> height 0)
+                    (or (and lines
+                             (or (null (cdr lines))
+                                 (eq 0 (cdr lines))))
+                        (not tool-bar-mode)))
            (let* ((initial-top
                    (cdr (assq 'top frame-initial-geometry-arguments)))
                   (top (frame-parameter frame-initial-frame 'top)))
@@ -298,15 +298,19 @@ there (in decreasing order of priority)."
                (let ((adjusted-top
                       (cond
                        ((and (consp top) (eq '+ (car top)))
-                        (list '+ (+ (cadr top)
-                                    frame-initial-frame-tool-bar-height)))
+                        (list '+ (+ (cadr top) height)))
                        ((and (consp top) (eq '- (car top)))
-                        (list '- (- (cadr top)
-                                    frame-initial-frame-tool-bar-height)))
-                       (t (+ top frame-initial-frame-tool-bar-height)))))
+                        (list '- (- (cadr top) height)))
+                       (t (+ top height)))))
                  (modify-frame-parameters
                   frame-initial-frame `((top . ,adjusted-top))))))
-           (tool-bar-mode -1))))
+           ;; Reset `tool-bar-mode' when zero tool bar lines have been
+           ;; requested for the window-system or default frame alists.
+           (when (and tool-bar-mode
+                      (and other-lines
+                           (or (null (cdr other-lines))
+                               (eq 0 (cdr other-lines)))))
+             (tool-bar-mode -1)))))
 
       ;; The initial frame we create above always has a minibuffer.
       ;; If the user wants to remove it, or make it a minibuffer-only
@@ -681,6 +685,9 @@ the new frame according to its own rules."
        (push p params)))
     ;; Now make the frame.
     (run-hooks 'before-make-frame-hook)
+
+;;     (setq frame-adjust-size-history '(t))
+
     (setq frame
           (funcall (gui-method frame-creation-function w) params))
     (normal-erase-is-backspace-setup-frame frame)
@@ -689,6 +696,12 @@ the new frame according to its own rules."
       (unless (assq param parameters)   ;Overridden by explicit parameters.
         (let ((val (frame-parameter oldframe param)))
           (when val (set-frame-parameter frame param val)))))
+
+    (when (eq (car frame-adjust-size-history) t)
+      (setq frame-adjust-size-history
+           (cons t (cons (list "Frame made")
+                         (cdr frame-adjust-size-history)))))
+
     (run-hook-with-args 'after-make-frame-functions frame)
     frame))
 
diff --git a/lisp/frameset.el b/lisp/frameset.el
index f843625..4a06374 100644
--- a/lisp/frameset.el
+++ b/lisp/frameset.el
@@ -1,6 +1,6 @@
 ;;; frameset.el --- save and restore frame and window setup -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Juanma Barranquero <address@hidden>
 ;; Keywords: convenience
diff --git a/lisp/fringe.el b/lisp/fringe.el
index ff60804..8f40c46 100644
--- a/lisp/fringe.el
+++ b/lisp/fringe.el
@@ -1,6 +1,6 @@
 ;;; fringe.el --- fringe setup and control  -*- coding: utf-8 -*-
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Maintainer: address@hidden
@@ -83,9 +83,9 @@
                  (hollow-small . hollow-square))))
 
 
-(defmacro fringe-bitmap-p (symbol)
+(defun fringe-bitmap-p (symbol)
   "Return non-nil if SYMBOL is a fringe bitmap."
-  `(get ,symbol 'fringe))
+  (get symbol 'fringe))
 
 
 ;; Control presence of fringes
diff --git a/lisp/generic-x.el b/lisp/generic-x.el
index c14700b..56e1761 100644
--- a/lisp/generic-x.el
+++ b/lisp/generic-x.el
@@ -1,6 +1,6 @@
 ;;; generic-x.el --- A collection of generic modes
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author:  Peter Breton <address@hidden>
 ;; Created: Tue Oct 08 1996
diff --git a/lisp/gnus/.gitignore b/lisp/gnus/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/lisp/gnus/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index f18565a..7668331 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,12 +1,209 @@
+2015-01-30  Glenn Morris  <address@hidden>
+
+       * gnus-registry.el (gnus-registry-max-pruned-entries)
+       (gnus-registry-prune-factor, gnus-registry-default-sort-function):
+       Fix :version.
+       (gnus-registry-default-sort-function): Improve :type.
+
+2015-01-29  Lars Ingebrigtsen  <address@hidden>
+
+       * nnimap.el (nnimap-request-group): Allow running this function on
+       groups that don't exist in Gnus yet.
+       (nnimap-request-group): Revert previous patch since that made it
+       impossible to enter nnimap groups.
+
+       * message.el (message-smtpmail-send-it): Remove the mail header
+       separator before sending.
+
+2015-01-28  Elias Oltmanns  <address@hidden>
+
+       * nnimap.el (nnimap-find-expired-articles): Fix handling of
+       (expiry-wait . never).
+
+2015-01-28  Lars Ingebrigtsen  <address@hidden>
+
+       * nnimap.el (nnimap-request-group): Clear the buffer before returning
+       the data.
+
+2015-01-27  Lars Ingebrigtsen  <address@hidden>
+
+       * nnir.el (nnir-imap-expr-to-imap): Check for literal+ capability in
+       IMAP.
+
+2015-01-27  Eric Abrahamsen  <address@hidden>
+
+       * nnir.el (nnir-run-imap): Enable non-ASCII IMAP searches.
+
+       * nnmairix.el ("nnmairix"): Declare nnmairix as virtual.
+
+       * gnus-bcklg.el (gnus-backlog-enter-article): No virtual groups should
+       be added to the backlog.
+
+2015-01-26  Trevor Murphy  <address@hidden>
+
+       * nnimap.el (nnimap-header-parameters): Refactor and request
+       X-GM-LABELS if it's been announced.
+       (nnimap-transform-headers): Gather and output GM-LABELS.
+
+2015-01-26  Peder O. Klingenberg  <address@hidden>
+
+       * mm-decode.el (mm-display-part): Make non-string methods work.
+       Non-string methods are funcalled and work just fine, the test was
+       bogus.
+       * mm-decode.el (mm-display-external): Show "external" lisp viewers in
+       whole frame.
+
+2015-01-26  Lars Ingebrigtsen  <address@hidden>
+
+       * nnimap.el (nnimap-request-accept-article): Allow respooling using
+       nnimap.
+
+       * gnus-group.el (gnus-group-get-new-news-this-group): Explicitly
+       request rescans when being run interactively.
+
+       * nnimap.el (nnimap-request-group): Don't rescan the group here,
+       because that can be very slow in large groups.
+
+       * gnus-int.el (gnus-request-group-scan): New backend function.
+
+       * nnimap.el (nnimap-request-scan-group): Implement in on IMAP.
+
+2015-01-25  Lars Ingebrigtsen  <address@hidden>
+
+       * gnus-group.el (gnus-group-suspend): Close all backends.
+
+2015-01-15  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * nntp.el (nntp-send-authinfo): Error out if the password is wrong.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * registry.el: Don't use <class> as a variable.
+
+2014-12-29  Paul Eggert  <address@hidden>
+
+       * message.el (message-make-fqdn):
+       * nnvirtual.el (nnvirtual-retrieve-headers)
+       (nnvirtual-update-xref-header): Prefer (system-name) to system-name,
+       and avoid naming locals 'system-name'.
+
+2014-12-29  Lars Ingebrigtsen  <address@hidden>
+
+       * mm-decode.el (mm-shr): Bind `shr-width' to `fill-column' so that
+       lines don't get overlong when responding.
+
+2014-12-19  Andreas Schwab  <address@hidden>
+
+       * gnus-group.el (gnus-read-ephemeral-bug-group):
+       Bind coding-system-for-read and coding-system-for-write only around
+       with-temp-file, and make buffer unibyte.  Don't write temp file twice.
+
+2014-12-18  Paul Eggert  <address@hidden>
+
+       * registry.el (registry-db): Set default slot later.
+       This is because its value is not a literal integer.
+
+2014-12-18  Stefan Monnier  <address@hidden>
+
+       * mm-util.el (mm-with-unibyte-current-buffer): Mark obsolete and
+       add warning.
+
+       * gnus-art.el: Fix up compiler warnings.
+       (article-display-face, article-display-x-face): Remove unused `face'.
+       (gnus-article-browse-html-save-cid-content): Remove unused var `type'.
+       (article-date-ut): Remove unused var `first'.
+       (gnus-article-prepare): Remove unused var `gnus-article'.
+       (gnus-mime-save-part-and-strip): Remove unused var `param'.
+       (gnus-mime-inline-part): Remove unused vars `charset', `contents', and
+       `coding-system' along with corresponding dead code.
+       (gnus-mime-view-part-externally): Remove unused var
+       `mm-user-display-methods'.
+       (gnus-insert-mime-button): Let-bind gnus-tmp-id explicitly.
+       (gnus-display-mime): Remove unused var `handle'.
+       (gnus-mime-display-alternative): Remove unused var `props'.
+       (gnus-article-read-summary-keys): Remove unused var `up-to-top'.
+       (gnus-article-edit-done): Remove unused var `p'.
+       (gnus-url-mailto): Remove unused var `to'.
+       (gnus-treat-article): Let-bind gnus-treat-condition, part-number,
+       total-parts, and gnus-treat-type explicitly.  Remove unused var `elem'.
+
+2014-12-18  Eric Abrahamsen  <address@hidden>
+
+       * registry.el (registry-db): Consolidate the :max-hard and :max-soft
+       slots into a :max-size slot.
+       (registry-db-version): Add new variable for database version number.
+       (registry-prune): Use :max-size slot. Accept and use a sort-function
+       argument.
+       (registry-collect-prune-candidates): Add new function for finding
+       non-precious pruning candidates.
+       (registry-prune-hard-candidates, registry-prune-soft-candidates):
+       Remove obsolete functions.
+       (initialize-instance): Upgrade registry version when starting.
+
+       * gnus-registry.el (gnus-registry-prune-factor): Add new variable.
+       (gnus-registry-max-pruned-entries): Remove obsolete variable.
+       (gnus-registry-cache-file): Change default
+       filename extension to "eieio".
+       (gnus-registry-read): Add new function, split out from
+       `gnus-registry-load', that does the actual object reading.
+       (gnus-registry-load): Use it. Add condition case handler to check for
+       old filename extension and rename to the new one.
+       (gnus-registry-default-sort-function): New variable to specify a sort
+       function to use when pruning.
+       (gnus-registry-save, gnus-registry-insert): Use it.
+       (gnus-registry-sort-by-creation-time): Define a default sort function.
+
+2014-12-09  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnus-art.el (gnus-article-mime-handles): Refactor out into own
+       function for reuse.
+       (gnus-mime-buttonize-attachments-in-header): Adjust.
+
+2014-12-07  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * message.el (message-change-subject): Really check whether the subject
+       changed.
+
+2014-12-05  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * mailcap.el (mailcap-mime-data): Add doc-view-mode as a viewer for
+       PDFs.
+       (mailcap-view-mime): New function.
+
+2014-12-01  Glenn Morris  <address@hidden>
+
+       * gnus-cloud.el (gnus-cloud): Add :version tag.
+
+2014-11-29  John Mastro  <address@hidden>  (tiny change)
+
+       * auth-source.el (auth-source-macos-keychain-search-items): Return
+       result of `auth-source-macos-keychain-result-append' (bug#19074).
+
+2014-11-27  Katsumi Yamaoka  <address@hidden>
+
+       * gnus-art.el (gnus-use-idna):
+       * gnus-sum.el (gnus-summary-idna-message):
+       * message.el (message-use-idna):
+       Protect against nil value for idna-program.
+
+       * message.el (message-use-idna): Load Mule-UCS for XEmacs 21.4.
+
+2014-11-25  Glenn Morris  <address@hidden>
+
+       * gnus-start.el (gnus-save-newsrc-file-check-timestamp):
+       Add :version tag.
+
+2014-11-23  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * pop3.el (pop3-open-server): Warn unless encrypted.
+
+       * nnimap.el (nnimap-open-connection-1): Warn unless encrypted.
+
 2014-11-17  Albert Krewinkel  <address@hidden>
 
        * message.el (message-valid-fqdn-regexp): Add non-internaional new
        TLDs.
 
-2014-11-16  Adam Sjøgren  <address@hidden>
-
-       * mml2015.el (mml2015-display-key-image): New variable.
-
 2014-11-14  Lars Magne Ingebrigtsen  <address@hidden>
 
        * gnus-sum.el (gnus-summary-exit-no-update): Don't query about
@@ -25914,7 +26111,7 @@
 
 See ChangeLog.2 for earlier changes.
 
-  Copyright (C) 2004-2014 Free Software Foundation, Inc.
+  Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/ChangeLog.1 b/lisp/gnus/ChangeLog.1
index 540db9d..1e37e44 100644
--- a/lisp/gnus/ChangeLog.1
+++ b/lisp/gnus/ChangeLog.1
@@ -386,11 +386,11 @@
 
        * gnus-start.el (gnus-save-newsrc-file): Use coding system.
 
-1980-06-08  Mike McEwan  <address@hidden>
+1998-08-18  Mike McEwan  <address@hidden>
 
        * gnus-agent.el (gnus-agent-braid-nov): Go to right place.
 
-1980-06-08  Shuhei KOBAYASHI  <address@hidden>
+1998-08-18  Shuhei KOBAYASHI  <address@hidden>
 
        * gnus-group.el (gnus-group-suspend): Fix.
 
@@ -638,7 +638,7 @@
 
 1998-08-09  Simon Josefsson  <address@hidden>
 
-        * gnus-srvr.el (gnus-browse-make-menu-bar): select did read
+       * gnus-srvr.el (gnus-browse-make-menu-bar): select did read
 
 1998-08-09  Lars Magne Ingebrigtsen  <address@hidden>
 
@@ -794,7 +794,7 @@
 
 1998-07-19 16:59  Simon Josefsson  <address@hidden>
 
-       * gnus-util.el (gnus-netrc-syntax-table): @ is whitespace
+       * gnus-util.el (gnus-netrc-syntax-table): @ is whitespace
 
 1998-07-17  Gordon Matzigkeit  <address@hidden>
 
@@ -972,7 +972,7 @@
 1998-07-01  Simon Josefsson  <address@hidden>
 
        * gnus-int.el (gnus-get-function): returned non-nil when
-        function wasn't bound, if noerror=t
+       function wasn't bound, if noerror=t
 
 1998-07-01  Lars Magne Ingebrigtsen  <address@hidden>
 
@@ -1260,8 +1260,8 @@
 
 1998-06-09  Sam Steingold  <address@hidden>
 
-        * gnus-uu.el (gnus-uu-default-view-rules): make sed kill ^M only
-        at the end of line.
+       * gnus-uu.el (gnus-uu-default-view-rules): make sed kill ^M only
+       at the end of line.
 
 1998-06-05  Hrvoje Niksic  <address@hidden>
 
@@ -1798,7 +1798,7 @@
 
 1998-03-18  Simon Josefsson  <address@hidden>
 
-       * nndoc.el: dummy request-accept-article
+       * nndoc.el: dummy request-accept-article
 
 1998-03-19  Lars Magne Ingebrigtsen  <address@hidden>
 
@@ -2316,9 +2316,9 @@
 
 1998-01-17  Simon Josefsson  <address@hidden>
 
-       * gnus-sum.el (gnus-summary-work-articles): change buffer
-       before looking at marked articles
-       (gnus-summary-work-articles): better check of marked articles
+       * gnus-sum.el (gnus-summary-work-articles): change buffer
+       before looking at marked articles
+       (gnus-summary-work-articles): better check of marked articles
 
 1998-02-14  Lars Magne Ingebrigtsen  <address@hidden>
 
@@ -2607,7 +2607,7 @@
 
 1997-12-22  Simon Josefsson  <address@hidden>
 
-       * nnmail.el (nnmail-get-new-mail): Make nnmail-tmp-directory
+       * nnmail.el (nnmail-get-new-mail): Make nnmail-tmp-directory
 
 1997-12-28  Per Abrahamsen  <address@hidden>
 
@@ -3702,7 +3702,7 @@
        * gnus.el: Quassia Gnus v0.1 is released.
 
 
-  Copyright (C) 1997-2014 Free Software Foundation, Inc.
+  Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/ChangeLog.2 b/lisp/gnus/ChangeLog.2
index 37d1c1d..ce8e1b9 100644
--- a/lisp/gnus/ChangeLog.2
+++ b/lisp/gnus/ChangeLog.2
@@ -15652,12 +15652,12 @@
        * mm-util.el, message.el, rfc2047.el, gnus-sum.el, gnus-score.el:
        Sync with Emacs 21 (tag EMACS_PRETEST_21_0_100).
 
-;;Has been fixed -- zsh.
-;;2001-03-05  Dave Love  <address@hidden>
-;;
-;;     * mm-util.el (mm-mime-mule-charset-alist): Fix utf-8 case.
-;;     Move it after definition of mm-coding-system-p.
-;;
+       ;;Has been fixed -- zsh.
+       ;;2001-03-05  Dave Love  <address@hidden>
+       ;;
+       ;; * mm-util.el (mm-mime-mule-charset-alist): Fix utf-8 case.
+       ;; Move it after definition of mm-coding-system-p.
+       ;;
 2001-03-01  Dave Love  <address@hidden>
 
        * mm-util.el (mm-inhibit-file-name-handlers):
@@ -16129,9 +16129,9 @@
 
        * mm-util.el (mm-multibyte-string-p): New.
 
-;;     * qp.el: Remove un-logged bogus changes from 2000-12-20.
-;;     (quoted-printable-encode-region): Doc fix.  Don't call
-;;     string-as-multibyte on class.  Clarify line-folding.
+       ;; * qp.el: Remove un-logged bogus changes from 2000-12-20.
+       ;; (quoted-printable-encode-region): Doc fix.  Don't call
+       ;; string-as-multibyte on class.  Clarify line-folding.
        (quoted-printable-encode-string): Make temp buffer inherit
        string's multibyteness.
 
@@ -16972,10 +16972,10 @@
        * nnlistserv.el: Ignore errors when requiring nnweb and avoid a
        compiler warning.
 
-;2000-11-26  Dave Love  <address@hidden>
-;
-;      * mm-uu.el (mm-uu-configure-list): Fix typo in :type.
-;
+       ;2000-11-26  Dave Love  <address@hidden>
+       ;
+       ; * mm-uu.el (mm-uu-configure-list): Fix typo in :type.
+       ;
 2000-11-23  Dave Love  <address@hidden>
 
        * uu-post.pbm, uu-decode.pbm: New files from XPMs.
@@ -17008,7 +17008,7 @@
 
        * gnus-art.el (gnus-mime-button-map): Don't inherit from
        gnus-article-mode-map.
-;      (gnus-mime-button-menu): Use mouse-set-point.
+       ; (gnus-mime-button-menu): Use mouse-set-point.
        (gnus-insert-mime-button, gnus-mime-display-alternative)
        (gnus-mime-display-alternative): Don't use local-map property.
 
@@ -17072,9 +17072,9 @@
        * time-date.el (timezone-make-date-arpa-standard): Autoload.
        (date-to-time): Use it.
 
-;      * message.el (message-mode) <adaptive-fill-regexp>:
-;      <adaptive-fill-first-line-regexp>: Use [:alnum:] in regexp range.
-;      (message-newline-and-reformat): Likewise.
+       ; * message.el (message-mode) <adaptive-fill-regexp>:
+       ; <adaptive-fill-first-line-regexp>: Use [:alnum:] in regexp range.
+       ; (message-newline-and-reformat): Likewise.
        (message-forward-as-mime, message-forward-ignored-headers)
        (message-buffer-naming-style, message-default-charset)
        (message-dont-reply-to-names, message-send-mail-partially-limit):
@@ -17179,16 +17179,16 @@
        (uudecode-char-int): New alias, replacing char-int.
        (uudecode-decode-region): Don't call buffer-disable-undo.
 
-;      * mm-uu.el (mm-uu-configure): Unquote lambda.
-;      (mm-uu-configure-list): Doc fix.
-;
-;      * earcon.el (running-xemacs): Don't define.
-;
-;2000-11-03  Stefan Monnier  <address@hidden>
-;
-;      * message.el (message-font-lock-keywords): Match a final newline
-;      to help font-lock's multiline support.
-;
+       ; * mm-uu.el (mm-uu-configure): Unquote lambda.
+       ; (mm-uu-configure-list): Doc fix.
+       ;
+       ; * earcon.el (running-xemacs): Don't define.
+       ;
+       ;2000-11-03  Stefan Monnier  <address@hidden>
+       ;
+       ; * message.el (message-font-lock-keywords): Match a final newline
+       ; to help font-lock's multiline support.
+       ;
 2000-11-03  Dave Love  <address@hidden>
 
        * gnus-nocem.el (gnus-nocem-check-article-limit): Default to 500.
@@ -17202,10 +17202,10 @@
        * mm-decode.el (mm-display-external): Space-prefix temp buffer
        name.  Don't disable undo explicitly.
 
-;2000-11-02  Dave Love  <address@hidden>
-;
-;      * message.el (message-font-lock-keywords): Use [:alpha:] for
-;      cite-prefix.
+       ;2000-11-02  Dave Love  <address@hidden>
+       ;
+       ; * message.el (message-font-lock-keywords): Use [:alpha:] for
+       ; cite-prefix.
 
 2000-11-01  Dave Love  <address@hidden>
 
@@ -18538,7 +18538,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-  Copyright (C) 2000-2002, 2004-2014 Free Software Foundation, Inc.
+  Copyright (C) 2000-2002, 2004-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el
index 2efb16b..d502a3b 100644
--- a/lisp/gnus/auth-source.el
+++ b/lisp/gnus/auth-source.el
@@ -1,6 +1,6 @@
 ;;; auth-source.el --- authentication sources for Gnus and Emacs
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <address@hidden>
 ;; Keywords: news
@@ -1787,29 +1787,29 @@ entries for git.gnus.org:
         (while (not (eobp))
           (cond
            ((looking-at "^password: \"\\(.+\\)\"$")
-            (auth-source-macos-keychain-result-append
-             ret
-             keychain-generic
-             "secret"
-             (lexical-let ((v (match-string 1)))
-               (lambda () v))))
+            (setq ret (auth-source-macos-keychain-result-append
+                       ret
+                       keychain-generic
+                       "secret"
+                       (lexical-let ((v (match-string 1)))
+                         (lambda () v)))))
            ;; TODO: check if this is really the label
            ;; match 0x00000007 <blob>="AppleID"
            ((looking-at "^[ ]+0x00000007 <blob>=\"\\(.+\\)\"")
-            (auth-source-macos-keychain-result-append
-             ret
-             keychain-generic
-             "label"
-             (match-string 1)))
+            (setq ret (auth-source-macos-keychain-result-append
+                       ret
+                       keychain-generic
+                       "label"
+                       (match-string 1))))
            ;; match "crtr"<uint32>="aapl"
            ;; match "svce"<blob>="AppleID"
            ((looking-at "^[ ]+\"\\([a-z]+\\)\"[^=]+=\"\\(.+\\)\"")
-            (auth-source-macos-keychain-result-append
-             ret
-             keychain-generic
-             (match-string 1)
-             (match-string 2))))
-            (forward-line)))
+            (setq ret (auth-source-macos-keychain-result-append
+                       ret
+                       keychain-generic
+                       (match-string 1)
+                       (match-string 2)))))
+          (forward-line)))
       ;; return `ret' iff it has the :secret key
       (and (plist-get ret :secret) (list ret))))
 
diff --git a/lisp/gnus/canlock.el b/lisp/gnus/canlock.el
index de157b2..4082b87 100644
--- a/lisp/gnus/canlock.el
+++ b/lisp/gnus/canlock.el
@@ -1,6 +1,6 @@
 ;;; canlock.el --- functions for Cancel-Lock feature
 
-;; Copyright (C) 1998-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Katsumi Yamaoka <address@hidden>
 ;; Keywords: news, cancel-lock, hmac, sha1, rfc2104
diff --git a/lisp/gnus/compface.el b/lisp/gnus/compface.el
index 54c4e5d..713770d 100644
--- a/lisp/gnus/compface.el
+++ b/lisp/gnus/compface.el
@@ -1,6 +1,6 @@
 ;;; compface.el --- functions for converting X-Face headers
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/deuglify.el b/lisp/gnus/deuglify.el
index 7a0f613..00d1ee9 100644
--- a/lisp/gnus/deuglify.el
+++ b/lisp/gnus/deuglify.el
@@ -1,6 +1,6 @@
 ;;; deuglify.el --- deuglify broken Outlook (Express) articles
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Raymond Scholz <address@hidden>
 ;;         Thomas Steffen
diff --git a/lisp/gnus/ecomplete.el b/lisp/gnus/ecomplete.el
index a8b0561..329681f 100644
--- a/lisp/gnus/ecomplete.el
+++ b/lisp/gnus/ecomplete.el
@@ -1,6 +1,6 @@
 ;;; ecomplete.el --- electric completion of addresses and the like
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: mail
diff --git a/lisp/gnus/flow-fill.el b/lisp/gnus/flow-fill.el
index e3a26e7..ff5316e 100644
--- a/lisp/gnus/flow-fill.el
+++ b/lisp/gnus/flow-fill.el
@@ -1,6 +1,6 @@
 ;;; flow-fill.el --- interpret RFC2646 "flowed" text
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Keywords: mail
diff --git a/lisp/gnus/gmm-utils.el b/lisp/gnus/gmm-utils.el
index 70ef27a..3256231 100644
--- a/lisp/gnus/gmm-utils.el
+++ b/lisp/gnus/gmm-utils.el
@@ -1,6 +1,6 @@
 ;;; gmm-utils.el --- Utility functions for Gnus, Message and MML
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Reiner Steib <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index 67525ee..f779f3c 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -1,6 +1,6 @@
 ;;; gnus-agent.el --- unplugged support for Gnus
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 3b343ad..557c6a3 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -1,6 +1,6 @@
 ;;; gnus-art.el --- article mode commands for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
@@ -1626,8 +1626,11 @@ It is a string, such as \"PGP\". If nil, ask user."
   :type 'string
   :group 'mime-security)
 
+(defvar idna-program)
+
 (defcustom gnus-use-idna (and (condition-case nil (require 'idna) (file-error))
                              (mm-coding-system-p 'utf-8)
+                             idna-program
                              (executable-find idna-program))
   "Whether IDNA decoding of headers is used when viewing messages.
 This requires GNU Libidn, and by default only enabled if it is found."
@@ -1840,7 +1843,7 @@ Initialized from `text-mode-syntax-table.")
        (incf i)))
       i))
 
-(defun article-hide-headers (&optional arg delete)
+(defun article-hide-headers (&optional _arg _delete)
   "Hide unwanted headers and possibly sort them as well."
   (interactive)
   ;; This function might be inhibited.
@@ -2410,7 +2413,7 @@ long lines if and only if arg is positive."
       (if (and wash-face-p (memq 'face gnus-article-wash-types))
          (gnus-delete-images 'face)
        (let ((from (message-fetch-field "from"))
-             face faces)
+             faces)
          (save-current-buffer
            (when (and wash-face-p
                       (gnus-buffer-live-p gnus-original-article-buffer)
@@ -2460,7 +2463,7 @@ long lines if and only if arg is positive."
          (gnus-delete-images 'xface)
        ;; Display X-Faces.
        (let ((from (message-fetch-field "from"))
-             x-faces face)
+             x-faces)
          (save-current-buffer
            (when (and wash-face-p
                       (gnus-buffer-live-p gnus-original-article-buffer)
@@ -2793,7 +2796,7 @@ summary buffer."
   "Find CID content in HANDLES and save it in a file in DIRECTORY.
 Return file name."
   (save-match-data
-    (let (file type)
+    (let (file)
       (catch 'found
        (dolist (handle handles)
          (cond
@@ -3081,7 +3084,7 @@ images if any to the browser, and deletes them when 
exiting the group
        (gnus-summary-show-article)))))
 
 (defun article-hide-list-identifiers ()
-  "Remove list identifies from the Subject header.
+  "Remove list identifiers from the Subject header.
 The `gnus-list-identifiers' variable specifies what to do."
   (interactive)
   (let ((inhibit-point-motion-hooks t)
@@ -3395,7 +3398,7 @@ means show, 0 means toggle."
        'hidden
       nil)))
 
-(defun gnus-article-show-hidden-text (type &optional dummy)
+(defun gnus-article-show-hidden-text (type &optional _dummy)
   "Show all hidden text of type TYPE.
 Originally it is hide instead of DUMMY."
   (let ((inhibit-read-only t)
@@ -3434,7 +3437,7 @@ lines forward."
                     gnus-article-date-headers)
                   t))
 
-(defun article-date-ut (&optional type highlight date-position)
+(defun article-date-ut (&optional type _highlight date-position)
   "Convert DATE date to TYPE in the current article.
 The default type is `ut'.  See `gnus-article-date-headers' for
 possible values."
@@ -3442,7 +3445,6 @@ possible values."
   (let* ((case-fold-search t)
         (inhibit-read-only t)
         (inhibit-point-motion-hooks t)
-        (first t)
         (visible-date (mail-fetch-field "Date"))
         pos date bface eface)
     (save-excursion
@@ -3981,7 +3983,7 @@ This format is defined by the `gnus-article-time-format' 
variable."
       (set dir-var (file-name-directory result)))
     result))
 
-(defun gnus-article-archive-name (group)
+(defun gnus-article-archive-name (_group)
   "Return the first instance of an \"Archive-name\" in the current buffer."
   (let ((case-fold-search t))
     (when (re-search-forward "archive-name: *\\([^ \n\t]+\\)[ \t]*$" nil t)
@@ -4213,7 +4215,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
        default
       (or last-file default))))
 
-(defun gnus-plain-save-name (newsgroup headers &optional last-file)
+(defun gnus-plain-save-name (newsgroup _headers &optional last-file)
   "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
 If variable `gnus-use-long-file-name' is non-nil, it is
 ~/News/news.group.  Otherwise, it is like ~/News/news/group/news."
@@ -4226,7 +4228,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
          default-directory))
        gnus-article-save-directory)))
 
-(defun gnus-sender-save-name (newsgroup headers &optional last-file)
+(defun gnus-sender-save-name (_newsgroup headers &optional _last-file)
   "Generate file name from sender."
   (let ((from (mail-header-from headers)))
     (expand-file-name
@@ -4423,6 +4425,8 @@ If variable `gnus-use-long-file-name' is non-nil, it is
 (substitute-key-definition
  'undefined 'gnus-article-read-summary-keys gnus-article-mode-map)
 
+(defvar gnus-article-send-map)
+
 (gnus-define-keys (gnus-article-send-map "S" gnus-article-mode-map)
   "W" gnus-article-wide-reply-with-original)
 (if (featurep 'xemacs)
@@ -4606,18 +4610,19 @@ commands:
           (forward-line line)
           (point)))))))
 
-(defun gnus-article-prepare (article &optional all-headers header)
+(defvar gnus-tmp-internal-hook)
+
+(defun gnus-article-prepare (article &optional all-headers _header)
   "Prepare ARTICLE in article mode buffer.
 ARTICLE should either be an article number or a Message-ID.
 If ARTICLE is an id, HEADER should be the article headers.
 If ALL-HEADERS is non-nil, no headers are hidden."
-  (save-excursion
+  (save-excursion                ;FIXME: Shouldn't that be save-current-buffer?
     ;; Make sure we start in a summary buffer.
     (unless (derived-mode-p 'gnus-summary-mode)
       (set-buffer gnus-summary-buffer))
     (setq gnus-summary-buffer (current-buffer))
-    (let* ((gnus-article (if header (mail-header-number header) article))
-          (summary-buffer (current-buffer))
+    (let* ((summary-buffer (current-buffer))
           (gnus-tmp-internal-hook gnus-article-internal-prepare-hook)
           (group gnus-newsgroup-name)
           result)
@@ -4716,6 +4721,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
            (gnus-run-hooks 'gnus-article-prepare-hook)
            t))))))
 
+(defvar gnus-mime-display-attachment-buttons-in-header)
+
 ;;;###autoload
 (defun gnus-article-prepare-display ()
   "Make the current buffer look like a nice article."
@@ -4839,6 +4846,16 @@ Valid specifiers include:
 General format specifiers can also be used.  See Info node
 `(gnus)Formatting Variables'.")
 
+(defvar gnus-tmp-type)
+(defvar gnus-tmp-type-long)
+(defvar gnus-tmp-name)
+(defvar gnus-tmp-description)
+(defvar gnus-tmp-id)
+(defvar gnus-tmp-length)
+(defvar gnus-tmp-dots)
+(defvar gnus-tmp-info)
+(defvar gnus-tmp-pressed-details)
+
 (defvar gnus-mime-button-line-format-alist
   '((?t gnus-tmp-type ?s)
     (?T gnus-tmp-type-long ?s)
@@ -5065,7 +5082,6 @@ If FILE is given, use it for the external part."
 The current article has a complicated MIME structure, giving up..."))
   (let* ((data (get-text-property (point) 'gnus-data))
         (id (get-text-property (point) 'gnus-part))
-        param
         (handles gnus-article-mime-handles))
     (unless file
       (setq file
@@ -5323,7 +5339,7 @@ Compressed files like .gz and .bz2 are decompressed."
                    (text-property-any (point-min) (point) 'gnus-data handle)))
            (setq handle (get-text-property b 'gnus-data))
            b))
-        start contents charset coding-system)
+        start)
     (when handle
       (when (= b (prog1
                     btn
@@ -5334,27 +5350,11 @@ Compressed files like .gz and .bz2 are decompressed."
        (setq b btn))
       (if (and (not arg) (mm-handle-undisplayer handle))
          (mm-remove-part handle)
-       (mm-with-unibyte-buffer
-         (mm-insert-part handle)
-         (setq contents
-               (or (mm-decompress-buffer (mm-handle-filename handle) nil t)
-                   (buffer-string))))
        (cond
-        ((not arg)
-         (unless (setq charset (mail-content-type-get
-                                (mm-handle-type handle) 'charset))
-           (unless (setq coding-system
-                         (mm-with-unibyte-buffer
-                           (insert contents)
-                           (mm-find-buffer-file-coding-system)))
-             (setq charset gnus-newsgroup-charset))))
+        ((not arg) nil)
         ((numberp arg)
          (if (mm-handle-undisplayer handle)
-             (mm-remove-part handle))
-         (setq charset
-               (or (cdr (assq arg
-                              gnus-summary-show-article-charset-alist))
-                   (mm-read-coding-system "Charset: "))))
+             (mm-remove-part handle)))
         ((mm-handle-undisplayer handle)
          (mm-remove-part handle)))
        (goto-char start)
@@ -5464,7 +5464,6 @@ specified charset."
   (interactive)
   (gnus-article-check-buffer)
   (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
-        (mm-user-display-methods nil)
         (mm-inlined-types nil)
         (mail-parse-charset gnus-newsgroup-charset)
         (mail-parse-ignored-charsets
@@ -5832,11 +5831,12 @@ all parts."
     (when gnus-break-pages
       (gnus-narrow-to-page))))
 
-(defun gnus-insert-mime-button (handle gnus-tmp-id &optional displayed)
+(defun gnus-insert-mime-button (handle id &optional displayed)
   (let ((gnus-tmp-name
         (or (mm-handle-filename handle)
             (mail-content-type-get (mm-handle-type handle) 'url)
             ""))
+        (gnus-tmp-id id)
        (gnus-tmp-type (mm-handle-media-type handle))
        (gnus-tmp-description (or (mm-handle-description handle) ""))
        (gnus-tmp-dots
@@ -5887,7 +5887,7 @@ all parts."
            "hide" "show")
        (aref gnus-down-mouse-3 0))))))
 
-(defun gnus-widget-press-button (elems el)
+(defun gnus-widget-press-button (elems _el)
   (goto-char (widget-get elems :from))
   (gnus-article-press-button))
 
@@ -5905,8 +5905,7 @@ all parts."
          ;; may change the point.  So we set the window point.
          (set-window-point window point)))
       (let ((handles ihandles)
-           (inhibit-read-only t)
-           handle)
+           (inhibit-read-only t))
        (cond (handles)
              ((setq handles (mm-dissect-buffer nil gnus-article-loose-mime))
               (when gnus-article-emulate-mime
@@ -6138,7 +6137,7 @@ If nil, don't show those extra buttons."
   (let* ((preferred (or preferred (mm-preferred-alternative handles)))
         (ihandles handles)
         (point (point))
-        handle (inhibit-read-only t) from props begend not-pref)
+        handle (inhibit-read-only t) from begend not-pref)
     (save-window-excursion
       (save-restriction
        (when ibegend
@@ -6334,6 +6333,40 @@ Provided for backwards compatibility."
     (when image
       (gnus-add-image 'shr image))))
 
+(defun gnus-article-mime-handles (&optional alist id all)
+  (if alist
+      (let ((i 1) newid flat)
+       (dolist (handle alist flat)
+         (setq newid (append id (list i))
+               i (1+ i))
+         (if (stringp (car handle))
+             (setq flat (nconc flat (gnus-article-mime-handles
+                                     (cdr handle) newid all)))
+           (delq (rassq handle all) all)
+           (setq flat (nconc flat (list (cons newid handle)))))))
+    (let ((flat (list nil)))
+      ;; Assume that elements of `gnus-article-mime-handle-alist'
+      ;; are in the decreasing order, but unnumbered subsidiaries
+      ;; in each element are in the increasing order.
+      (dolist (handle (reverse gnus-article-mime-handle-alist))
+       (if (stringp (cadr handle))
+           (setq flat (nconc flat (gnus-article-mime-handles
+                                   (cddr handle) (list (car handle)) flat)))
+         (delq (rassq (cdr handle) flat) flat)
+         (setq flat (nconc flat (list (cons (list (car handle))
+                                            (cdr handle)))))))
+      (setq flat (cdr flat))
+      (mapc (lambda (handle)
+             (if (cdar handle)
+                 ;; This is a hidden (i.e. unnumbered) handle.
+                 (progn
+                   (setcar handle
+                           (1+ (caar gnus-article-mime-handle-alist)))
+                   (push handle gnus-article-mime-handle-alist))
+               (setcar handle (caar handle))))
+           flat)
+      flat)))
+
 (defun gnus-mime-buttonize-attachments-in-header (&optional interactive)
   "Show attachments as buttons in the end of the header of an article.
 This function toggles the display when called interactively.  Note that
@@ -6341,108 +6374,70 @@ buttons to be added to the header are only the ones 
that aren't inlined
 in the body.  Use `gnus-header-face-alist' to highlight buttons."
   (interactive (list t))
   (gnus-with-article-buffer
-    (gmm-labels
-       ;; Function that returns a flattened version of
-       ;; `gnus-article-mime-handle-alist'.
-       ((flattened-alist
-         (&optional alist id all)
-         (if alist
-             (let ((i 1) newid flat)
-               (dolist (handle alist flat)
-                 (setq newid (append id (list i))
-                       i (1+ i))
-                 (if (stringp (car handle))
-                     (setq flat (nconc flat (flattened-alist (cdr handle)
-                                                             newid all)))
-                   (delq (rassq handle all) all)
-                   (setq flat (nconc flat (list (cons newid handle)))))))
-           (let ((flat (list nil)))
-             ;; Assume that elements of `gnus-article-mime-handle-alist'
-             ;; are in the decreasing order, but unnumbered subsidiaries
-             ;; in each element are in the increasing order.
-             (dolist (handle (reverse gnus-article-mime-handle-alist))
-               (if (stringp (cadr handle))
-                   (setq flat (nconc flat (flattened-alist (cddr handle)
-                                                           (list (car handle))
-                                                           flat)))
-                 (delq (rassq (cdr handle) flat) flat)
-                 (setq flat (nconc flat (list (cons (list (car handle))
-                                                    (cdr handle)))))))
-             (setq flat (cdr flat))
-             (mapc (lambda (handle)
-                     (if (cdar handle)
-                         ;; This is a hidden (i.e. unnumbered) handle.
-                         (progn
-                           (setcar handle
-                                   (1+ (caar gnus-article-mime-handle-alist)))
-                           (push handle gnus-article-mime-handle-alist))
-                       (setcar handle (caar handle))))
-                   flat)
-             flat))))
-      (let ((case-fold-search t) buttons handle type st)
-       (save-excursion
-         (save-restriction
-           (widen)
-           (article-narrow-to-head)
-           ;; Header buttons exist?
-           (while (and (not buttons)
-                       (re-search-forward "^attachments?:[\n ]+" nil t))
-             (when (get-char-property (match-end 0)
-                                      'gnus-button-attachment-extra)
-               (setq buttons (match-beginning 0))))
-           (widen)
+    (let ((case-fold-search t) buttons handle type st)
+      (save-excursion
+       (save-restriction
+         (widen)
+         (article-narrow-to-head)
+         ;; Header buttons exist?
+         (while (and (not buttons)
+                     (re-search-forward "^attachments?:[\n ]+" nil t))
+           (when (get-char-property (match-end 0)
+                                    'gnus-button-attachment-extra)
+             (setq buttons (match-beginning 0))))
+         (widen)
+         (when buttons
+           ;; Delete header buttons.
+           (delete-region buttons (if (re-search-forward "^[^ ]" nil t)
+                                      (match-beginning 0)
+                                    (point-max))))
+         (unless (and interactive buttons)
+           ;; Find buttons.
+           (setq buttons nil)
+           (dolist (button (gnus-article-mime-handles))
+             (setq handle (cdr button)
+                   type (mm-handle-media-type handle))
+             (when (or (and (if (gnus-buffer-live-p gnus-summary-buffer)
+                                (with-current-buffer gnus-summary-buffer
+                                  gnus-inhibit-images)
+                              gnus-inhibit-images)
+                            (string-match "\\`image/" type))
+                       (mm-inline-override-p handle)
+                       (and (mm-handle-disposition handle)
+                            (not (equal (car (mm-handle-disposition handle))
+                                        "inline"))
+                            (not (mm-attachment-override-p handle)))
+                       (not (mm-automatic-display-p handle))
+                       (not (or (and (mm-inlinable-p handle)
+                                     (mm-inlined-p handle))
+                                (mm-automatic-external-display-p type))))
+               (push button buttons)))
            (when buttons
-             ;; Delete header buttons.
-             (delete-region buttons (if (re-search-forward "^[^ ]" nil t)
-                                        (match-beginning 0)
-                                      (point-max))))
-           (unless (and interactive buttons)
-             ;; Find buttons.
-             (setq buttons nil)
-             (dolist (button (flattened-alist))
-               (setq handle (cdr button)
-                     type (mm-handle-media-type handle))
-               (when (or (and (if (gnus-buffer-live-p gnus-summary-buffer)
-                                  (with-current-buffer gnus-summary-buffer
-                                    gnus-inhibit-images)
-                                gnus-inhibit-images)
-                              (string-match "\\`image/" type))
-                         (mm-inline-override-p handle)
-                         (and (mm-handle-disposition handle)
-                              (not (equal (car (mm-handle-disposition handle))
-                                          "inline"))
-                              (not (mm-attachment-override-p handle)))
-                         (not (mm-automatic-display-p handle))
-                         (not (or (and (mm-inlinable-p handle)
-                                       (mm-inlined-p handle))
-                                  (mm-automatic-external-display-p type))))
-                 (push button buttons)))
-             (when buttons
-               ;; Add header buttons.
-               (article-goto-body)
-               (forward-line -1)
-               (narrow-to-region (point) (point))
-               (insert "Attachment" (if (cdr buttons) "s" "") ":")
-               (dolist (button (nreverse buttons))
-                 (setq st (point))
-                 (insert " ")
-                 (mm-handle-set-undisplayer
-                  (setq handle (copy-sequence (cdr button))) nil)
-                 (gnus-insert-mime-button handle (car button))
-                 (skip-chars-backward "\t\n ")
-                 (delete-region (point) (point-max))
-                 (when (> (current-column) (window-width))
-                   (goto-char st)
-                   (insert "\n")
-                   (end-of-line)))
-               (insert "\n")
-               (dolist (ovl (gnus-overlays-in (point-min) (point)))
-                 (gnus-overlay-put ovl 'gnus-button-attachment-extra t)
-                 (gnus-overlay-put ovl 'face nil))
-               (let ((gnus-treatment-function-alist
-                      '((gnus-treat-highlight-headers
-                         gnus-article-highlight-headers))))
-                 (gnus-treat-article 'head))))))))))
+             ;; Add header buttons.
+             (article-goto-body)
+             (forward-line -1)
+             (narrow-to-region (point) (point))
+             (insert "Attachment" (if (cdr buttons) "s" "") ":")
+             (dolist (button (nreverse buttons))
+               (setq st (point))
+               (insert " ")
+               (mm-handle-set-undisplayer
+                (setq handle (copy-sequence (cdr button))) nil)
+               (gnus-insert-mime-button handle (car button))
+               (skip-chars-backward "\t\n ")
+               (delete-region (point) (point-max))
+               (when (> (current-column) (window-width))
+                 (goto-char st)
+                 (insert "\n")
+                 (end-of-line)))
+             (insert "\n")
+             (dolist (ovl (gnus-overlays-in (point-min) (point)))
+               (gnus-overlay-put ovl 'gnus-button-attachment-extra t)
+               (gnus-overlay-put ovl 'face nil))
+             (let ((gnus-treatment-function-alist
+                    '((gnus-treat-highlight-headers
+                       gnus-article-highlight-headers))))
+               (gnus-treat-article 'head)))))))))
 
 ;;; Article savers.
 
@@ -6629,6 +6624,8 @@ specifies."
                      (if header-line-format 1 0)
                      2)))))))
 
+(defvar scroll-in-place)
+
 (defun gnus-article-next-page-1 (lines)
   (condition-case ()
       (let ((scroll-in-place nil)
@@ -6716,7 +6713,9 @@ not have a face in `gnus-article-boring-faces'."
   (unless (derived-mode-p 'gnus-article-mode)
     (error "Command invoked outside of a Gnus article buffer")))
 
-(defun gnus-article-read-summary-keys (&optional arg key not-restore-window)
+(defvar gnus-pick-mode)
+
+(defun gnus-article-read-summary-keys (&optional _arg key not-restore-window)
   "Read a summary buffer key sequence and execute it from the article buffer."
   (interactive "P")
   (gnus-article-check-buffer)
@@ -6729,8 +6728,6 @@ not have a face in `gnus-article-boring-faces'."
           "An" "Ap" [?A (meta return)] [?A delete]))
        (nosave-in-article
         '("AS" "\C-d"))
-       (up-to-top
-        '("n" "Gn" "p" "Gp"))
        keys new-sum-point)
     (with-current-buffer gnus-article-current-summary
       (let (gnus-pick-mode)
@@ -6889,6 +6886,7 @@ KEY is a string or a vector."
 (defvar gnus-agent-summary-mode)
 (defvar gnus-draft-mode)
 (defvar help-xref-stack-item)
+(defvar help-xref-following)
 
 (defun gnus-article-describe-bindings (&optional prefix)
   "Show a list of all defined keys, and their definitions.
@@ -7333,7 +7331,6 @@ groups."
   (let ((func gnus-article-edit-done-function)
        (buf (current-buffer))
        (start (window-start))
-       (p (point))
        (winconf gnus-prev-winconf))
     (widen) ;; Widen it in case that users narrowed the buffer.
     (funcall func arg)
@@ -7962,7 +7959,7 @@ do the highlighting.  See the documentation for those 
functions."
   (gnus-article-add-buttons)
   (gnus-article-add-buttons-to-head))
 
-(defun gnus-article-highlight-some (&optional force)
+(defun gnus-article-highlight-some (&optional _force)
   "Highlight current article.
 This function calls `gnus-article-highlight-headers',
 `gnus-article-highlight-signature', and `gnus-article-add-buttons' to
@@ -8265,9 +8262,11 @@ url is put as the `gnus-button-url' overlay property on 
the button."
        (error "Unknown news URL syntax"))))
     (list scheme server port group message-id articles)))
 
+(defvar nntp-port-number)
+
 (defun gnus-button-handle-news (url)
   "Fetch a news URL."
-  (destructuring-bind (scheme server port group message-id articles)
+  (destructuring-bind (_scheme server port group message-id _articles)
       (gnus-parse-news-url url)
     (cond
      (message-id
@@ -8389,7 +8388,7 @@ url is put as the `gnus-button-url' overlay property on 
the button."
   (with-current-buffer gnus-summary-buffer
     (gnus-summary-refer-article message-id)))
 
-(defun gnus-button-fetch-group (address &rest ignore)
+(defun gnus-button-fetch-group (address &rest _ignore)
   "Fetch GROUP specified by ADDRESS."
   (when (string-match "\\`\\(nntp\\|news\\):\\(//\\)?\\(.*\\)\\'"
                      address)
@@ -8437,15 +8436,15 @@ url is put as the `gnus-button-url' overlay property on 
the button."
   (setq url (replace-regexp-in-string "\n" " " url))
   (when (string-match "mailto:/*\\(.*\\)" url)
     (setq url (substring url (match-beginning 1) nil)))
-  (let (to args subject func)
-    (setq args (gnus-url-parse-query-string
+  (let* ((args (gnus-url-parse-query-string
                (if (string-match "^\\?" url)
                    (substring url 1)
                  (if (string-match "^\\([^?]+\\)\\?\\(.*\\)" url)
                      (concat "to=" (match-string 1 url) "&"
                              (match-string 2 url))
-                   (concat "to=" url))))
-         subject (cdr-safe (assoc "subject" args)))
+                   (concat "to=" url)))))
+         (subject (cdr-safe (assoc "subject" args)))
+         func)
     (gnus-msg-mail)
     (while args
       (setq func (intern-soft (concat "message-goto-" (downcase (caar args)))))
@@ -8502,7 +8501,7 @@ url is put as the `gnus-button-url' overlay property on 
the button."
      :action 'gnus-button-prev-page
      :button-keymap gnus-prev-page-map)))
 
-(defun gnus-button-next-page (&optional args more-args)
+(defun gnus-button-next-page (&optional _args _more-args)
   "Go to the next page."
   (interactive)
   (let ((win (selected-window)))
@@ -8510,7 +8509,7 @@ url is put as the `gnus-button-url' overlay property on 
the button."
     (gnus-article-next-page)
     (select-window win)))
 
-(defun gnus-button-prev-page (&optional args more-args)
+(defun gnus-button-prev-page (&optional _args _more-args)
   "Go to the prev page."
   (interactive)
   (let ((win (selected-window)))
@@ -8538,7 +8537,7 @@ url is put as the `gnus-button-url' overlay property on 
the button."
      :action 'gnus-button-next-page
      :button-keymap gnus-next-page-map)))
 
-(defun gnus-article-button-next-page (arg)
+(defun gnus-article-button-next-page (_arg)
   "Go to the next page."
   (interactive "P")
   (let ((win (selected-window)))
@@ -8546,7 +8545,7 @@ url is put as the `gnus-button-url' overlay property on 
the button."
     (gnus-article-next-page)
     (select-window win)))
 
-(defun gnus-article-button-prev-page (arg)
+(defun gnus-article-button-prev-page (_arg)
   "Go to the prev page."
   (interactive "P")
   (let ((win (selected-window)))
@@ -8597,20 +8596,31 @@ For example:
 
 (defvar gnus-inhibit-article-treatments nil)
 
-(defun gnus-treat-article (gnus-treat-condition
-                          &optional part-number total-parts gnus-treat-type)
-  (let ((gnus-treat-length (- (point-max) (point-min)))
+;; Dynamic variables.
+(defvar part-number)                    ;FIXME: Lacks a "gnus-" prefix.
+(defvar total-parts)                    ;FIXME: Lacks a "gnus-" prefix.
+(defvar gnus-treat-type)
+(defvar gnus-treat-condition)
+(defvar gnus-treat-length)
+
+(defun gnus-treat-article (condition
+                          &optional part-num total type)
+  (let ((gnus-treat-condition condition)
+        (part-number part-num)
+        (total-parts total)
+        (gnus-treat-type type)
+        (gnus-treat-length (- (point-max) (point-min)))
        (alist gnus-treatment-function-alist)
        (article-goto-body-goes-to-point-min-p t)
        (treated-type
-        (or (not gnus-treat-type)
+        (or (not type)
             (catch 'found
               (let ((list gnus-article-treat-types))
                 (while list
-                  (when (string-match (pop list) gnus-treat-type)
+                  (when (string-match (pop list) type)
                     (throw 'found t)))))))
        (highlightp (gnus-visual-p 'article-highlight 'highlight))
-       val elem)
+       val)
     (gnus-run-hooks 'gnus-part-display-hook)
     (dolist (elem alist)
       (setq val
@@ -8628,13 +8638,6 @@ For example:
        (save-restriction
          (funcall (cadr elem)))))))
 
-;; Dynamic variables.
-(defvar part-number)
-(defvar total-parts)
-(defvar gnus-treat-type)
-(defvar gnus-treat-condition)
-(defvar gnus-treat-length)
-
 (defun gnus-treat-predicate (val)
   (cond
    ((null val)
@@ -8883,7 +8886,7 @@ For example:
        (gnus-mime-security-show-details handle)
       (gnus-mime-security-verify-or-decrypt handle))))
 
-(defun gnus-insert-mime-security-button (handle &optional displayed)
+(defun gnus-insert-mime-security-button (handle &optional _displayed)
   (let* ((protocol (mm-handle-multipart-ctl-parameter handle 'protocol))
         (gnus-tmp-type
          (concat
@@ -8931,7 +8934,7 @@ For example:
      :action 'gnus-widget-press-button
      :button-keymap gnus-mime-security-button-map
      :help-echo
-     (lambda (widget)
+     (lambda (_widget)
        ;; Needed to properly clear the message due to a bug in
        ;; wid-edit (XEmacs only).
        (when (boundp 'help-echo-owns-message)
diff --git a/lisp/gnus/gnus-async.el b/lisp/gnus/gnus-async.el
index 52311e1..b1b3af9 100644
--- a/lisp/gnus/gnus-async.el
+++ b/lisp/gnus/gnus-async.el
@@ -1,6 +1,6 @@
 ;;; gnus-async.el --- asynchronous support for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-bcklg.el b/lisp/gnus/gnus-bcklg.el
index db80800..e0c457a 100644
--- a/lisp/gnus/gnus-bcklg.el
+++ b/lisp/gnus/gnus-bcklg.el
@@ -1,6 +1,6 @@
 ;;; gnus-bcklg.el --- backlog functions for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
@@ -61,7 +61,7 @@
 
 (defun gnus-backlog-enter-article (group number buffer)
   (when (and (numberp number)
-            (not (string-match "^nnvirtual" group)))
+            (not (gnus-virtual-group-p group)))
     (gnus-backlog-setup)
     (let ((ident (intern (concat group ":" (int-to-string number))
                         gnus-backlog-hashtb))
@@ -126,7 +126,7 @@
 
 (defun gnus-backlog-request-article (group number &optional buffer)
   (when (and (numberp number)
-            (not (string-match "^nnvirtual" group)))
+            (not (gnus-virtual-group-p group)))
     (gnus-backlog-setup)
     (let ((ident (intern (concat group ":" (int-to-string number))
                         gnus-backlog-hashtb))
diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el
index 91d5c76..e26c78b 100644
--- a/lisp/gnus/gnus-bookmark.el
+++ b/lisp/gnus/gnus-bookmark.el
@@ -1,6 +1,6 @@
 ;;; gnus-bookmark.el --- Bookmarks in Gnus
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Bastien Guerry <bzg AT altern DOT org>
 ;; Keywords: news
@@ -251,7 +251,7 @@ So the cdr of each bookmark is an alist too.")
   (interactive)
   (save-excursion
     (save-window-excursion
-      ;; Avoir warnings?
+      ;; Avoid warnings?
       ;; (message "Saving Gnus bookmarks to file %s..." 
gnus-bookmark-default-file)
       (set-buffer (get-buffer-create  " *Gnus bookmarks*"))
       (erase-buffer)
diff --git a/lisp/gnus/gnus-cache.el b/lisp/gnus/gnus-cache.el
index 544d667..2e8b2db 100644
--- a/lisp/gnus/gnus-cache.el
+++ b/lisp/gnus/gnus-cache.el
@@ -1,6 +1,6 @@
 ;;; gnus-cache.el --- cache interface for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el
index 5a6d6f8..d8ee35d 100644
--- a/lisp/gnus/gnus-cite.el
+++ b/lisp/gnus/gnus-cite.el
@@ -1,6 +1,6 @@
 ;;; gnus-cite.el --- parse citations in articles for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Per Abhiddenware
 
diff --git a/lisp/gnus/gnus-cloud.el b/lisp/gnus/gnus-cloud.el
index ec85a16..f965f98 100644
--- a/lisp/gnus/gnus-cloud.el
+++ b/lisp/gnus/gnus-cloud.el
@@ -1,6 +1,6 @@
 ;;; gnus-cloud.el --- storing and retrieving data via IMAP
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: mail
@@ -30,6 +30,7 @@
 
 (defgroup gnus-cloud nil
   "Syncing Gnus data via IMAP."
+  :version "25.1"
   :group 'gnus)
 
 (defcustom gnus-cloud-synced-files
@@ -39,6 +40,7 @@
     (:directory "~/News" :match ".*.SCORE\\'"))
   "List of file regexps that should be kept up-to-date via the cloud."
   :group 'gnus-cloud
+  ;; FIXME this type does not match the default.  Nor does the documentation.
   :type '(repeat regexp))
 
 (defvar gnus-cloud-group-name "*Emacs Cloud*")
@@ -327,6 +329,15 @@
 (defun gnus-cloud-server-p (server)
   (member server gnus-cloud-covered-servers))
 
+(defun gnus-cloud-collect-full-newsrc ()
+  (let ((infos nil))
+    (dolist (info (cdr gnus-newsrc-alist))
+      (when (gnus-cloud-server-p
+            (gnus-method-to-server
+             (gnus-find-method-for-group (gnus-info-group info))))
+       (push info infos)))
+    ))
+
 (provide 'gnus-cloud)
 
 ;;; gnus-cloud.el ends here
diff --git a/lisp/gnus/gnus-cus.el b/lisp/gnus/gnus-cus.el
index 5c5d4a2..9271322 100644
--- a/lisp/gnus/gnus-cus.el
+++ b/lisp/gnus/gnus-cus.el
@@ -1,6 +1,6 @@
 ;;; gnus-cus.el --- customization commands for Gnus
 
-;; Copyright (C) 1996, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-delay.el b/lisp/gnus/gnus-delay.el
index 2a286da..424f2c0 100644
--- a/lisp/gnus/gnus-delay.el
+++ b/lisp/gnus/gnus-delay.el
@@ -1,6 +1,6 @@
 ;;; gnus-delay.el --- Delayed posting of articles
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <address@hidden>
 ;; Keywords: mail, news, extensions
diff --git a/lisp/gnus/gnus-demon.el b/lisp/gnus/gnus-demon.el
index 9d2cf19..d6412cd 100644
--- a/lisp/gnus/gnus-demon.el
+++ b/lisp/gnus/gnus-demon.el
@@ -1,6 +1,6 @@
 ;;; gnus-demon.el --- daemonic Gnus behavior
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-diary.el b/lisp/gnus/gnus-diary.el
index f0e3373..0f5c613 100644
--- a/lisp/gnus/gnus-diary.el
+++ b/lisp/gnus/gnus-diary.el
@@ -1,6 +1,6 @@
 ;;; gnus-diary.el --- Wrapper around the NNDiary Gnus back end
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author:        Didier Verna <address@hidden>
 ;; Maintainer:    Didier Verna <address@hidden>
diff --git a/lisp/gnus/gnus-dired.el b/lisp/gnus/gnus-dired.el
index 0dfd583..49dcc38 100644
--- a/lisp/gnus/gnus-dired.el
+++ b/lisp/gnus/gnus-dired.el
@@ -1,6 +1,6 @@
 ;;; gnus-dired.el --- utility functions where gnus and dired meet
 
-;; Copyright (C) 1996-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Authors: Benjamin Rutt <address@hidden>,
 ;;          Shenghuo Zhu <address@hidden>
diff --git a/lisp/gnus/gnus-draft.el b/lisp/gnus/gnus-draft.el
index 17bdc06..aebf118 100644
--- a/lisp/gnus/gnus-draft.el
+++ b/lisp/gnus/gnus-draft.el
@@ -1,6 +1,6 @@
 ;;; gnus-draft.el --- draft message support for Gnus
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-dup.el b/lisp/gnus/gnus-dup.el
index 20fb24f..b6686a3 100644
--- a/lisp/gnus/gnus-dup.el
+++ b/lisp/gnus/gnus-dup.el
@@ -1,6 +1,6 @@
 ;;; gnus-dup.el --- suppression of duplicate articles in Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-eform.el b/lisp/gnus/gnus-eform.el
index 18959cd..0b41b5e 100644
--- a/lisp/gnus/gnus-eform.el
+++ b/lisp/gnus/gnus-eform.el
@@ -1,6 +1,6 @@
 ;;; gnus-eform.el --- a mode for editing forms for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el
index d40848f..f1d4347 100644
--- a/lisp/gnus/gnus-ems.el
+++ b/lisp/gnus/gnus-ems.el
@@ -1,6 +1,6 @@
 ;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-fun.el b/lisp/gnus/gnus-fun.el
index 8d08cd6..ca14dd0 100644
--- a/lisp/gnus/gnus-fun.el
+++ b/lisp/gnus/gnus-fun.el
@@ -1,6 +1,6 @@
 ;;; gnus-fun.el --- various frivolous extension functions to Gnus
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-gravatar.el b/lisp/gnus/gnus-gravatar.el
index 5b58d11..c331b01 100644
--- a/lisp/gnus/gnus-gravatar.el
+++ b/lisp/gnus/gnus-gravatar.el
@@ -1,6 +1,6 @@
 ;;; gnus-gravatar.el --- Gnus Gravatar support
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 31078be..e22138b 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -1,6 +1,6 @@
 ;;; gnus-group.el --- group mode commands for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
@@ -2455,27 +2455,27 @@ the bug number, and browsing the URL must return mbox 
output."
     (setq ids (string-to-number ids)))
   (unless (listp ids)
     (setq ids (list ids)))
-  (let ((tmpfile (mm-make-temp-file "gnus-temp-group-"))
-       (coding-system-for-write 'binary)
-       (coding-system-for-read 'binary))
-    (with-temp-file tmpfile
-      (dolist (id ids)
-       (url-insert-file-contents (format mbox-url id)))
-      (goto-char (point-min))
-      ;; Add the debbugs address so that we can respond to reports easily.
-      (while (re-search-forward "^To: " nil t)
-       (end-of-line)
-       (insert (format ", address@hidden" (car ids)
-                       (gnus-replace-in-string
-                        (gnus-replace-in-string mbox-url "^http://"; "")
-                        "/.*$" ""))))
-      (write-region (point-min) (point-max) tmpfile)
-      (gnus-group-read-ephemeral-group
-       (format "nndoc+ephemeral:bug#%s"
-              (mapconcat 'number-to-string ids ","))
-       `(nndoc ,tmpfile
-              (nndoc-article-type mbox))
-       nil window-conf))
+  (let ((tmpfile (mm-make-temp-file "gnus-temp-group-")))
+    (let ((coding-system-for-write 'binary)
+         (coding-system-for-read 'binary))
+      (with-temp-file tmpfile
+       (mm-disable-multibyte)
+       (dolist (id ids)
+         (url-insert-file-contents (format mbox-url id)))
+       (goto-char (point-min))
+       ;; Add the debbugs address so that we can respond to reports easily.
+       (while (re-search-forward "^To: " nil t)
+         (end-of-line)
+         (insert (format ", address@hidden" (car ids)
+                         (gnus-replace-in-string
+                          (gnus-replace-in-string mbox-url "^http://"; "")
+                          "/.*$" ""))))))
+    (gnus-group-read-ephemeral-group
+     (format "nndoc+ephemeral:bug#%s"
+            (mapconcat 'number-to-string ids ","))
+     `(nndoc ,tmpfile
+            (nndoc-article-type mbox))
+     nil window-conf)
     (delete-file tmpfile)))
 
 (defun gnus-read-ephemeral-debian-bug-group (number)
@@ -4075,7 +4075,9 @@ If DONT-SCAN is non-nil, scan non-activated groups as 
well."
       (gnus-group-remove-mark group)
       ;; Bypass any previous denials from the server.
       (gnus-remove-denial (setq method (gnus-find-method-for-group group)))
-      (if (gnus-activate-group group (if dont-scan nil 'scan) nil method)
+      (if (or (and (not dont-scan)
+                  (gnus-request-group-scan group (gnus-get-info group)))
+             (gnus-activate-group group (if dont-scan nil 'scan) nil method))
          (let ((info (gnus-get-info group))
                (active (gnus-active group)))
            (when info
@@ -4312,6 +4314,11 @@ The hook `gnus-suspend-gnus-hook' is called before 
actually suspending."
        (gnus-kill-buffer buf)))
     (setq gnus-backlog-articles nil)
     (gnus-kill-gnus-frames)
+    ;; Closing all the backends is useful (for instance) when when the
+    ;; IP addresses have changed and you need to reconnect.
+    (dolist (elem gnus-opened-servers)
+      (gnus-close-server (car elem))
+      (setcar (cdr elem) 'closed))
     (when group-buf
       (bury-buffer group-buf)
       (delete-windows-on group-buf t))))
diff --git a/lisp/gnus/gnus-html.el b/lisp/gnus/gnus-html.el
index 540694f..b706de7 100644
--- a/lisp/gnus/gnus-html.el
+++ b/lisp/gnus/gnus-html.el
@@ -1,6 +1,6 @@
 ;;; gnus-html.el --- Render HTML in a buffer.
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: html, web
diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el
index a9e4a24..dc423d8 100644
--- a/lisp/gnus/gnus-icalendar.el
+++ b/lisp/gnus/gnus-icalendar.el
@@ -1,6 +1,6 @@
 ;;; gnus-icalendar.el --- reply to iCalendar meeting requests
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Jan Tatarik <address@hidden>
 ;; Keywords: mail, icalendar, org
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index edf6119..dd938ce 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -1,6 +1,6 @@
 ;;; gnus-int.el --- backend interface functions for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
@@ -439,6 +439,14 @@ If it is down, start it up (again)."
       (funcall (gnus-get-function gnus-command-method func)
               (gnus-group-real-name group) (nth 1 gnus-command-method)))))
 
+(defun gnus-request-group-scan (group info)
+  "Request that GROUP get a complete rescan."
+  (let ((gnus-command-method (gnus-find-method-for-group group))
+       (func 'request-group-description))
+    (when (gnus-check-backend-function func group)
+      (funcall (gnus-get-function gnus-command-method func)
+              (gnus-group-real-name group) (nth 1 gnus-command-method) info))))
+
 (defun gnus-close-group (group)
   "Request the GROUP be closed."
   (let ((gnus-command-method (inline (gnus-find-method-for-group group))))
diff --git a/lisp/gnus/gnus-kill.el b/lisp/gnus/gnus-kill.el
index 93c532d..2eb702a 100644
--- a/lisp/gnus/gnus-kill.el
+++ b/lisp/gnus/gnus-kill.el
@@ -1,6 +1,6 @@
 ;;; gnus-kill.el --- kill commands for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <address@hidden>
 ;;     Lars Magne Ingebrigtsen <address@hidden>
diff --git a/lisp/gnus/gnus-logic.el b/lisp/gnus/gnus-logic.el
index 37750b1..6321821 100644
--- a/lisp/gnus/gnus-logic.el
+++ b/lisp/gnus/gnus-logic.el
@@ -1,6 +1,6 @@
 ;;; gnus-logic.el --- advanced scoring code for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-mh.el b/lisp/gnus/gnus-mh.el
index 2a84724..21c61dd 100644
--- a/lisp/gnus/gnus-mh.el
+++ b/lisp/gnus/gnus-mh.el
@@ -1,6 +1,6 @@
 ;;; gnus-mh.el --- mh-e interface for Gnus
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <address@hidden>
 ;;     Lars Magne Ingebrigtsen <address@hidden>
diff --git a/lisp/gnus/gnus-ml.el b/lisp/gnus/gnus-ml.el
index 2072eb7..b4228f3 100644
--- a/lisp/gnus/gnus-ml.el
+++ b/lisp/gnus/gnus-ml.el
@@ -1,6 +1,6 @@
 ;;; gnus-ml.el --- Mailing list minor mode for Gnus
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Julien Gilles  <address@hidden>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/gnus-mlspl.el b/lisp/gnus/gnus-mlspl.el
index 2d86d0b..56166f2 100644
--- a/lisp/gnus/gnus-mlspl.el
+++ b/lisp/gnus/gnus-mlspl.el
@@ -1,6 +1,6 @@
 ;;; gnus-mlspl.el --- a group params-based mail splitting mechanism
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Alexandre Oliva <address@hidden>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index 8b98429..6c80c0d 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -1,6 +1,6 @@
 ;;; gnus-msg.el --- mail and post interface for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <address@hidden>
 ;;     Lars Magne Ingebrigtsen <address@hidden>
diff --git a/lisp/gnus/gnus-notifications.el b/lisp/gnus/gnus-notifications.el
index 0729ea2..2941cc4 100644
--- a/lisp/gnus/gnus-notifications.el
+++ b/lisp/gnus/gnus-notifications.el
@@ -1,6 +1,6 @@
 ;; gnus-notifications.el -- Send notification on new message in Gnus
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-picon.el b/lisp/gnus/gnus-picon.el
index 0530167..62b18b4 100644
--- a/lisp/gnus/gnus-picon.el
+++ b/lisp/gnus/gnus-picon.el
@@ -1,6 +1,6 @@
 ;;; gnus-picon.el --- displaying pretty icons in Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news xpm annotation glyph faces
diff --git a/lisp/gnus/gnus-range.el b/lisp/gnus/gnus-range.el
index fd06df8..809f8b1 100644
--- a/lisp/gnus/gnus-range.el
+++ b/lisp/gnus/gnus-range.el
@@ -1,6 +1,6 @@
 ;;; gnus-range.el --- range and sequence functions for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index f3b81f7..2017ea2 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -1,6 +1,6 @@
 ;;; gnus-registry.el --- article registry for Gnus
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <address@hidden>
 ;; Keywords: news registry
@@ -176,6 +176,8 @@ nnmairix groups are specifically excluded because they are 
ephemeral."
 (make-obsolete-variable 'gnus-registry-max-track-groups nil "23.4")
 (make-obsolete-variable 'gnus-registry-entry-caching nil "23.4")
 (make-obsolete-variable 'gnus-registry-trim-articles-without-groups nil "23.4")
+;; FIXME it was simply deleted.
+(make-obsolete-variable 'gnus-registry-max-pruned-entries nil "25.1")
 
 (defcustom gnus-registry-track-extra '(subject sender recipient)
   "Whether the registry should track extra data about a message.
@@ -231,7 +233,7 @@ the Bit Bucket."
 (defcustom gnus-registry-cache-file
   (nnheader-concat
    (or gnus-dribble-directory gnus-home-directory "~/")
-   ".gnus.registry.eioio")
+   ".gnus.registry.eieio")
   "File where the Gnus registry will be stored."
   :group 'gnus-registry
   :type 'file)
@@ -242,12 +244,35 @@ the Bit Bucket."
   :type '(radio (const :format "Unlimited " nil)
                 (integer :format "Maximum number: %v")))
 
-(defcustom gnus-registry-max-pruned-entries nil
-  "Maximum number of pruned entries in the registry, nil for unlimited."
-  :version "24.1"
+(defcustom gnus-registry-prune-factor 0.1
+  "When pruning, try to prune back to this factor less than the maximum size.
+
+In order to prevent constant pruning, we prune back to a number
+somewhat less than the maximum size.  This option controls
+exactly how much less.  For example, given a maximum size of
+50000 and a prune factor of 0.1, the pruning process will try to
+cut the registry back to \(- 50000 \(* 50000 0.1\)\) -> 45000
+entries.  The pruning process is constrained by the presence of
+\"precious\" entries."
+  :version "25.1"
   :group 'gnus-registry
-  :type '(radio (const :format "Unlimited " nil)
-                (integer :format "Maximum number: %v")))
+  :type 'float)
+
+(defcustom gnus-registry-default-sort-function
+  #'gnus-registry-sort-by-creation-time
+  "Sort function to use when pruning the registry.
+Entries that sort to the front of the list are pruned first.
+This can slow pruning down.  Set to nil to perform no sorting."
+  :version "25.1"
+  :group 'gnus-registry
+  :type '(choice (const :tag "No sorting" nil) function))
+
+(defun gnus-registry-sort-by-creation-time (l r)
+  "Sort older entries to front of list."
+  ;; Pruning starts from the front of the list.
+  (time-less-p
+   (cadr (assq 'creation-time r))
+   (cadr (assq 'creation-time l))))
 
 (defun gnus-registry-fixup-registry (db)
   (when db
@@ -255,14 +280,12 @@ the Bit Bucket."
       (oset db :precious
             (append gnus-registry-extra-entries-precious
                     '()))
-      (oset db :max-hard
+      (oset db :max-size
             (or gnus-registry-max-entries
                 most-positive-fixnum))
       (oset db :prune-factor
-            0.1)
-      (oset db :max-soft
-            (or gnus-registry-max-pruned-entries
-                most-positive-fixnum))
+            (or gnus-registry-prune-factor
+               0.1))
       (oset db :tracked
             (append gnus-registry-track-extra
                     '(mark group keyword)))
@@ -278,8 +301,8 @@ the Bit Bucket."
     "Gnus Registry"
     :file (or file gnus-registry-cache-file)
     ;; these parameters are set in `gnus-registry-fixup-registry'
-    :max-hard most-positive-fixnum
-    :max-soft most-positive-fixnum
+    :max-size most-positive-fixnum
+    :version registry-db-version
     :precious nil
     :tracked nil)))
 
@@ -295,22 +318,27 @@ This is not required after changing 
`gnus-registry-cache-file'."
     (gnus-message 4 "Remaking the Gnus registry")
     (setq gnus-registry-db (gnus-registry-make-db))))
 
-(defun gnus-registry-read ()
-  "Read the registry cache file."
+(defun gnus-registry-load ()
+  "Load the registry from the cache file."
   (interactive)
   (let ((file gnus-registry-cache-file))
     (condition-case nil
-        (progn
-          (gnus-message 5 "Reading Gnus registry from %s..." file)
-          (setq gnus-registry-db
-               (gnus-registry-fixup-registry
-                (condition-case nil
-                    (with-no-warnings
-                      (eieio-persistent-read file 'registry-db))
-                  ;; Older EIEIO versions do not check the class name.
-                  ('wrong-number-of-arguments
-                   (eieio-persistent-read file)))))
-          (gnus-message 5 "Reading Gnus registry from %s...done" file))
+        (gnus-registry-read file)
+      (file-error
+       ;; Fix previous mis-naming of the registry file.
+       (let ((old-file-name
+             (concat (file-name-sans-extension
+                     gnus-registry-cache-file)
+                    ".eioio")))
+        (if (and (file-exists-p old-file-name)
+                 (yes-or-no-p
+                  (format "Rename registry file from %s to %s? "
+                          old-file-name file)))
+            (progn
+              (gnus-registry-read old-file-name)
+              (oset gnus-registry-db :file file)
+              (gnus-message 1 "Registry filename changed to %s" file))
+          (gnus-registry-remake-db t))))
       (error
        (gnus-message
         1
@@ -318,6 +346,19 @@ This is not required after changing 
`gnus-registry-cache-file'."
         file)
        (gnus-registry-remake-db t)))))
 
+(defun gnus-registry-read (file)
+  "Do the actual reading of the registry persistence file."
+  (gnus-message 5 "Reading Gnus registry from %s..." file)
+  (setq gnus-registry-db
+       (gnus-registry-fixup-registry
+        (condition-case nil
+            (with-no-warnings
+              (eieio-persistent-read file 'registry-db))
+          ;; Older EIEIO versions do not check the class name.
+          ('wrong-number-of-arguments
+           (eieio-persistent-read file)))))
+  (gnus-message 5 "Reading Gnus registry from %s...done" file))
+
 (defun gnus-registry-save (&optional file db)
   "Save the registry cache file."
   (interactive)
@@ -325,7 +366,8 @@ This is not required after changing 
`gnus-registry-cache-file'."
         (db (or db gnus-registry-db)))
     (gnus-message 5 "Saving Gnus registry (%d entries) to %s..."
                   (registry-size db) file)
-    (registry-prune db)
+    (registry-prune
+     db gnus-registry-default-sort-function)
     ;; TODO: call (gnus-string-remove-all-properties v) on all elements?
     (eieio-persistent-save db file)
     (gnus-message 5 "Saving Gnus registry (size %d) to %s...done"
@@ -1032,7 +1074,8 @@ only the last one's marks are returned."
   "Just like `registry-insert' but tries to prune on error."
   (when (registry-full db)
     (message "Trying to prune the registry because it's full")
-    (registry-prune db))
+    (registry-prune
+     db gnus-registry-default-sort-function))
   (registry-insert db id entry)
   entry)
 
@@ -1090,7 +1133,7 @@ only the last one's marks are returned."
   (gnus-message 5 "Initializing the registry")
   (gnus-registry-install-hooks)
   (gnus-registry-install-shortcuts)
-  (gnus-registry-read))
+  (gnus-registry-load))
 
 ;; FIXME: Why autoload this function?
 ;;;###autoload
@@ -1104,7 +1147,7 @@ only the last one's marks are returned."
   (add-hook 'nnmail-spool-hook 'gnus-registry-spool-action)
 
   (add-hook 'gnus-save-newsrc-hook 'gnus-registry-save)
-  (add-hook 'gnus-read-newsrc-el-hook 'gnus-registry-read)
+  (add-hook 'gnus-read-newsrc-el-hook 'gnus-registry-load)
 
   (add-hook 'gnus-summary-prepare-hook 'gnus-registry-register-message-ids))
 
@@ -1117,7 +1160,7 @@ only the last one's marks are returned."
   (remove-hook 'nnmail-spool-hook 'gnus-registry-spool-action)
 
   (remove-hook 'gnus-save-newsrc-hook 'gnus-registry-save)
-  (remove-hook 'gnus-read-newsrc-el-hook 'gnus-registry-read)
+  (remove-hook 'gnus-read-newsrc-el-hook 'gnus-registry-load)
 
   (remove-hook 'gnus-summary-prepare-hook 'gnus-registry-register-message-ids)
   (setq gnus-registry-enabled nil))
diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el
index d5e27f4..e071543 100644
--- a/lisp/gnus/gnus-salt.el
+++ b/lisp/gnus/gnus-salt.el
@@ -1,6 +1,6 @@
 ;;; gnus-salt.el --- alternate summary mode interfaces for Gnus
 
-;; Copyright (C) 1996-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el
index fccb9f5..7f3ab5e 100644
--- a/lisp/gnus/gnus-score.el
+++ b/lisp/gnus/gnus-score.el
@@ -1,6 +1,6 @@
 ;;; gnus-score.el --- scoring code for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <address@hidden>
 ;;     Lars Magne Ingebrigtsen <address@hidden>
diff --git a/lisp/gnus/gnus-sieve.el b/lisp/gnus/gnus-sieve.el
index 50bd50a..5f8cb32 100644
--- a/lisp/gnus/gnus-sieve.el
+++ b/lisp/gnus/gnus-sieve.el
@@ -1,6 +1,6 @@
 ;;; gnus-sieve.el --- Utilities to manage sieve scripts for Gnus
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: NAGY Andras <address@hidden>,
 ;;     Simon Josefsson <address@hidden>
diff --git a/lisp/gnus/gnus-spec.el b/lisp/gnus/gnus-spec.el
index e11ddc4..035a590 100644
--- a/lisp/gnus/gnus-spec.el
+++ b/lisp/gnus/gnus-spec.el
@@ -1,6 +1,6 @@
 ;;; gnus-spec.el --- format spec functions for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index 083a3d6..d32f7ca 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -1,6 +1,6 @@
 ;;; gnus-srvr.el --- virtual server support for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index 70d0a28..aa2568d 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -1,6 +1,6 @@
 ;;; gnus-start.el --- startup functions for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
@@ -447,6 +447,7 @@ See also `gnus-before-startup-hook'."
 When the newsrc.eld file is updated by multiple machines,
 checking the file's modification time is a good way to avoid
 overwriting updated data."
+  :version "25.1"
   :group 'gnus-newsrc
   :type 'boolean)
 
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 69bb106..efe7a4d 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -1,6 +1,6 @@
 ;;; gnus-sum.el --- summary mode commands for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
@@ -9870,6 +9870,7 @@ installed for this command to work."
   (if (not (and (condition-case nil (require 'idna)
                  (file-error))
                (mm-coding-system-p 'utf-8)
+               (symbol-value 'idna-program)
                (executable-find (symbol-value 'idna-program))))
       (gnus-message
        5 "GNU Libidn not installed properly (`idn' or `idna.el' missing)")
diff --git a/lisp/gnus/gnus-sync.el b/lisp/gnus/gnus-sync.el
index 3aa1eea..3c0025f 100644
--- a/lisp/gnus/gnus-sync.el
+++ b/lisp/gnus/gnus-sync.el
@@ -1,6 +1,6 @@
 ;;; gnus-sync.el --- synchronization facility for Gnus
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <address@hidden>
 ;; Keywords: news synchronization nntp nnrss
diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el
index f148dd2..f536a27 100644
--- a/lisp/gnus/gnus-topic.el
+++ b/lisp/gnus/gnus-topic.el
@@ -1,6 +1,6 @@
 ;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Ilja Weis <address@hidden>
 ;;     Lars Magne Ingebrigtsen <address@hidden>
diff --git a/lisp/gnus/gnus-undo.el b/lisp/gnus/gnus-undo.el
index 66b80fb..c9d1444 100644
--- a/lisp/gnus/gnus-undo.el
+++ b/lisp/gnus/gnus-undo.el
@@ -1,6 +1,6 @@
 ;;; gnus-undo.el --- minor mode for undoing in Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 526aa77..7bacaba 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -1,6 +1,6 @@
 ;;; gnus-util.el --- utility functions for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-uu.el b/lisp/gnus/gnus-uu.el
index 3f4bf1e..55a881c 100644
--- a/lisp/gnus/gnus-uu.el
+++ b/lisp/gnus/gnus-uu.el
@@ -1,6 +1,6 @@
 ;;; gnus-uu.el --- extract (uu)encoded files in Gnus
 
-;; Copyright (C) 1985-1987, 1993-1998, 2000-2014 Free Software
+;; Copyright (C) 1985-1987, 1993-1998, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
diff --git a/lisp/gnus/gnus-vm.el b/lisp/gnus/gnus-vm.el
index ad898ad..3777a90 100644
--- a/lisp/gnus/gnus-vm.el
+++ b/lisp/gnus/gnus-vm.el
@@ -1,6 +1,6 @@
 ;;; gnus-vm.el --- vm interface for Gnus
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Per Persson <address@hidden>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/gnus-win.el b/lisp/gnus/gnus-win.el
index 41894ae..ac48440 100644
--- a/lisp/gnus/gnus-win.el
+++ b/lisp/gnus/gnus-win.el
@@ -1,6 +1,6 @@
 ;;; gnus-win.el --- window configuration functions for Gnus
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index c26c3b7..30c89f5 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -1,6 +1,6 @@
 ;;; gnus.el --- a newsreader for GNU Emacs
 
-;; Copyright (C) 1987-1990, 1993-1998, 2000-2014 Free Software
+;; Copyright (C) 1987-1990, 1993-1998, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <address@hidden>
diff --git a/lisp/gnus/gravatar.el b/lisp/gnus/gravatar.el
index ffbc37a..fc53649 100644
--- a/lisp/gnus/gravatar.el
+++ b/lisp/gnus/gravatar.el
@@ -1,6 +1,6 @@
 ;;; gravatar.el --- Get Gravatars
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/gssapi.el b/lisp/gnus/gssapi.el
index 3964785..d6893dc 100644
--- a/lisp/gnus/gssapi.el
+++ b/lisp/gnus/gssapi.el
@@ -1,6 +1,6 @@
 ;;; gssapi.el --- GSSAPI/Kerberos 5 interface for Emacs
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;;         Lars Magne Ingebrigtsen <address@hidden>
diff --git a/lisp/gnus/html2text.el b/lisp/gnus/html2text.el
index 22ee1c3..aef8063 100644
--- a/lisp/gnus/html2text.el
+++ b/lisp/gnus/html2text.el
@@ -1,6 +1,6 @@
 ;;; html2text.el --- a simple html to plain text converter -*- coding: utf-8 
-*-
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Joakim Hove <address@hidden>
 
diff --git a/lisp/gnus/ietf-drums.el b/lisp/gnus/ietf-drums.el
index 4fe8f18..e681ecf 100644
--- a/lisp/gnus/ietf-drums.el
+++ b/lisp/gnus/ietf-drums.el
@@ -1,6 +1,6 @@
 ;;; ietf-drums.el --- Functions for parsing RFC822bis headers
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/legacy-gnus-agent.el b/lisp/gnus/legacy-gnus-agent.el
index f9b9ab1..bd69087 100644
--- a/lisp/gnus/legacy-gnus-agent.el
+++ b/lisp/gnus/legacy-gnus-agent.el
@@ -1,6 +1,6 @@
 ;;; gnus-agent.el --- Legacy unplugged support for Gnus
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Kevin Greiner <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/mail-parse.el b/lisp/gnus/mail-parse.el
index 3cd6adc..8f47604 100644
--- a/lisp/gnus/mail-parse.el
+++ b/lisp/gnus/mail-parse.el
@@ -1,6 +1,6 @@
 ;;; mail-parse.el --- Interface functions for parsing mail
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/mail-prsvr.el b/lisp/gnus/mail-prsvr.el
index b193dcc..25a272b 100644
--- a/lisp/gnus/mail-prsvr.el
+++ b/lisp/gnus/mail-prsvr.el
@@ -1,6 +1,6 @@
 ;;; mail-prsvr.el --- Interface variables for parsing mail
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el
index 51b9c91..eb05d71 100644
--- a/lisp/gnus/mail-source.el
+++ b/lisp/gnus/mail-source.el
@@ -1,6 +1,6 @@
 ;;; mail-source.el --- functions for fetching mail
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/mailcap.el b/lisp/gnus/mailcap.el
index 4f1bdf4..01d8587 100644
--- a/lisp/gnus/mailcap.el
+++ b/lisp/gnus/mailcap.el
@@ -1,6 +1,6 @@
 ;;; mailcap.el --- MIME media types configuration
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: William M. Perry <address@hidden>
 ;;     Lars Magne Ingebrigtsen <address@hidden>
@@ -153,6 +153,10 @@ This is a compatibility function for different Emacsen."
       (type   . "application/zip")
       ("copiousoutput"))
      ("pdf"
+      (viewer . doc-view-mode)
+      (type . "application/pdf")
+      (test . (eq window-system 'x)))
+     ("pdf"
       (viewer . "gv -safer %s")
       (type . "application/pdf")
       (test . window-system)
@@ -1060,6 +1064,18 @@ If FORCE, re-parse even if already parsed."
                             common-mime-info)))))
     commands))
 
+(defun mailcap-view-mime (type)
+  "View the data in the current buffer that has MIME type TYPE.
+`mailcap-mime-data' determines the method to use."
+  (let ((method (mailcap-mime-info type)))
+    (if (stringp method)
+       (shell-command-on-region (point-min) (point-max)
+                                ;; Use stdin as the "%s".
+                                (format method "-")
+                                (current-buffer)
+                                t)
+      (funcall method))))
+
 (provide 'mailcap)
 
 ;;; mailcap.el ends here
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 0af4784..a06de2a 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -1,6 +1,6 @@
 ;;; message.el --- composing mail and news messages
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: mail, news
@@ -1756,13 +1756,17 @@ no, only reply back to the author."
   :type '(radio (const :format "%v  " nil)
                (string :format "FQDN: %v")))
 
-(defcustom message-use-idna (and (condition-case nil (require 'idna)
-                                  (file-error))
-                                (mm-coding-system-p 'utf-8)
-                                (executable-find idna-program)
-                                (string= (idna-to-ascii "räksmörgås")
-                                         "xn--rksmrgs-5wao1o")
-                                t)
+(defcustom message-use-idna
+  (and (or (mm-coding-system-p 'utf-8)
+          (condition-case nil
+              (let (mucs-ignore-version-incompatibilities)
+                (require 'un-define))
+            (error)))
+       (condition-case nil (require 'idna) (file-error))
+       idna-program
+       (executable-find idna-program)
+       (string= (idna-to-ascii "räksmörgås") "xn--rksmrgs-5wao1o")
+       t)
   "Whether to encode non-ASCII in domain names into ASCII according to IDNA.
 GNU Libidn, and in particular the elisp package \"idna.el\" and
 the external program \"idn\", must be installed for this
@@ -2302,7 +2306,7 @@ Leading \"Re: \" is not stripped by this function.  Use 
the function
                   ((not (string-match
                          (concat "^[ \t]*"
                                  (regexp-quote new-subject)
-                                 " \t]*$")
+                                 "[ \t]*$")
                          old-subject))  ; yes, it really is a new subject
                    ;; delete eventual Re: prefix
                    (setq old-subject
@@ -4902,6 +4906,11 @@ evaluates `message-send-mail-hook' just before sending a 
message.
 It is useful if your ISP requires the POP-before-SMTP
 authentication.  See the Gnus manual for details."
   (run-hooks 'message-send-mail-hook)
+  ;; Change header-delimiter to be what smtpmail expects.
+  (goto-char (point-min))
+  (when (re-search-forward
+        (concat "^" (regexp-quote mail-header-separator) "\n"))
+    (replace-match "\n"))
   (smtpmail-send-it))
 
 (defun message-send-mail-with-mailclient ()
@@ -5845,7 +5854,7 @@ give as trustworthy answer as possible."
 
 (defun message-make-fqdn ()
   "Return user's fully qualified domain name."
-  (let* ((system-name (system-name))
+  (let* ((sysname (system-name))
         (user-mail (message-user-mail-address))
         (user-domain
          (if (and user-mail
@@ -5859,10 +5868,10 @@ give as trustworthy answer as possible."
           (not (string-match message-bogus-system-names message-user-fqdn)))
       ;; `message-user-fqdn' seems to be valid
       message-user-fqdn)
-     ((and (string-match message-valid-fqdn-regexp system-name)
-          (not (string-match message-bogus-system-names system-name)))
+     ((and (string-match message-valid-fqdn-regexp sysname)
+          (not (string-match message-bogus-system-names sysname)))
       ;; `system-name' returned the right result.
-      system-name)
+      sysname)
      ;; Try `mail-host-address'.
      ((and (boundp 'mail-host-address)
           (stringp mail-host-address)
@@ -5877,7 +5886,7 @@ give as trustworthy answer as possible."
       user-domain)
      ;; Default to this bogus thing.
      (t
-      (concat system-name
+      (concat sysname
              ".i-did-not-set--mail-host-address--so-tickle-me")))))
 
 (defun message-make-domain ()
diff --git a/lisp/gnus/messcompat.el b/lisp/gnus/messcompat.el
index fed1823..3543ffe 100644
--- a/lisp/gnus/messcompat.el
+++ b/lisp/gnus/messcompat.el
@@ -1,6 +1,6 @@
 ;;; messcompat.el --- making message mode compatible with mail mode
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: mail, news
diff --git a/lisp/gnus/mm-archive.el b/lisp/gnus/mm-archive.el
index a349650..d88e159 100644
--- a/lisp/gnus/mm-archive.el
+++ b/lisp/gnus/mm-archive.el
@@ -1,6 +1,6 @@
 ;;; mm-archive.el --- Functions for parsing archive files as MIME
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/mm-bodies.el b/lisp/gnus/mm-bodies.el
index c2f6df9..4a25c14 100644
--- a/lisp/gnus/mm-bodies.el
+++ b/lisp/gnus/mm-bodies.el
@@ -1,6 +1,6 @@
 ;;; mm-bodies.el --- Functions for decoding MIME things
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     MORIOKA Tomohiko <address@hidden>
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index cde0af0..311ea7c 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -1,6 +1,6 @@
 ;;; mm-decode.el --- Functions for decoding MIME things
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     MORIOKA Tomohiko <address@hidden>
@@ -647,7 +647,7 @@ MIME-Version header before proceeding."
          (unless from
            (setq from (mail-fetch-field "from")))
          ;; FIXME: In some circumstances, this code is running within
-         ;; an unibyte macro.  mail-extract-address-components
+         ;; a unibyte macro.  mail-extract-address-components
          ;; creates unibyte buffers. This `if', though not a perfect
          ;; solution, avoids most of them.
          (if from
@@ -833,18 +833,18 @@ external if displayed external."
                'inline)
            (setq external
                  (and method         ;; If nil, we always use "save".
-                      (stringp method) ;; 'mailcap-save-binary-file
                       (or (eq mm-enable-external t)
                           (and (eq mm-enable-external 'ask)
                                (y-or-n-p
                                 (concat
                                  "Display part (" type
-                                 ") using external program"
-                                 ;; Can non-string method ever happen?
+                                 ") "
                                  (if (stringp method)
                                      (concat
-                                      " \"" (format method filename) "\"")
-                                   "")
+                                      "using external program \""
+                                      (format method filename) "\"")
+                                   (format
+                                    "by calling `%s' on the contents)" method))
                                  "? "))))))
            (if external
                (mm-display-external
@@ -885,7 +885,15 @@ external if displayed external."
                                     (mm-handle-media-type handle) t))))
              (unwind-protect
                  (if method
-                     (funcall method)
+                     (progn
+                       (when (and (boundp 'gnus-summary-buffer)
+                                  (bufferp gnus-summary-buffer)
+                                  (buffer-name gnus-summary-buffer))
+                         ;; So that we pop back to the right place, sort of.
+                         (switch-to-buffer gnus-summary-buffer)
+                         (switch-to-buffer mm))
+                       (delete-other-windows)
+                       (funcall method))
                    (mm-save-part handle))
                (when (and (not non-viewer)
                           method)
@@ -1814,6 +1822,7 @@ If RECURSIVE, search recursively."
   ;; Require since we bind its variables.
   (require 'shr)
   (let ((article-buffer (current-buffer))
+       (shr-width fill-column)
        (shr-content-function (lambda (id)
                                (let ((handle (mm-get-content-id id)))
                                  (when handle
diff --git a/lisp/gnus/mm-encode.el b/lisp/gnus/mm-encode.el
index 0768de4..4901ff1 100644
--- a/lisp/gnus/mm-encode.el
+++ b/lisp/gnus/mm-encode.el
@@ -1,6 +1,6 @@
 ;;; mm-encode.el --- Functions for encoding MIME things
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     MORIOKA Tomohiko <address@hidden>
diff --git a/lisp/gnus/mm-extern.el b/lisp/gnus/mm-extern.el
index d574b9d..1ddcf0d 100644
--- a/lisp/gnus/mm-extern.el
+++ b/lisp/gnus/mm-extern.el
@@ -1,6 +1,6 @@
 ;;; mm-extern.el --- showing message/external-body
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <address@hidden>
 ;; Keywords: message external-body
diff --git a/lisp/gnus/mm-partial.el b/lisp/gnus/mm-partial.el
index c5e5ae8..f9f2173 100644
--- a/lisp/gnus/mm-partial.el
+++ b/lisp/gnus/mm-partial.el
@@ -1,6 +1,6 @@
 ;;; mm-partial.el --- showing message/partial
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <address@hidden>
 ;; Keywords: message partial
diff --git a/lisp/gnus/mm-url.el b/lisp/gnus/mm-url.el
index bbeb1d8..6d5f2a3 100644
--- a/lisp/gnus/mm-url.el
+++ b/lisp/gnus/mm-url.el
@@ -1,6 +1,6 @@
 ;;; mm-url.el --- a wrapper of url functions/commands for Gnus
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <address@hidden>
 
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index 31b7d07..b2e0ee6 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -1,6 +1,6 @@
 ;;; mm-util.el --- Utility functions for Mule and low level things
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     MORIOKA Tomohiko <address@hidden>
@@ -1243,6 +1243,7 @@ evaluating FORMS but it is no longer done.  So, some 
programs assuming
 it if any may malfunction."
   (if (featurep 'xemacs)
       `(progn ,@forms)
+    (message "Warning: Using brain-dead macro 
`mm-with-unibyte-current-buffer'!")
     (let ((multibyte (make-symbol "multibyte")))
       `(let ((,multibyte enable-multibyte-characters))
         (when ,multibyte
@@ -1253,6 +1254,7 @@ it if any may malfunction."
             (set-buffer-multibyte t)))))))
 (put 'mm-with-unibyte-current-buffer 'lisp-indent-function 0)
 (put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body))
+(make-obsolete 'mm-with-unibyte-current-buffer nil "25.1")
 
 (defun mm-find-charset-region (b e)
   "Return a list of Emacs charsets in the region B to E."
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index d91d2a4..fa48ee9 100644
--- a/lisp/gnus/mm-uu.el
+++ b/lisp/gnus/mm-uu.el
@@ -1,6 +1,6 @@
 ;;; mm-uu.el --- Return uu stuff as mm handles
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <address@hidden>
 ;; Keywords: postscript uudecode binhex shar forward gnatsweb pgp
diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el
index bf24f34..4b520ed 100644
--- a/lisp/gnus/mm-view.el
+++ b/lisp/gnus/mm-view.el
@@ -1,6 +1,6 @@
 ;;; mm-view.el --- functions for viewing MIME objects
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index 39b1f75..45da937 100644
--- a/lisp/gnus/mml-sec.el
+++ b/lisp/gnus/mml-sec.el
@@ -1,6 +1,6 @@
 ;;; mml-sec.el --- A package with security functions for MML documents
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 
diff --git a/lisp/gnus/mml-smime.el b/lisp/gnus/mml-smime.el
index caa1380..58d3b46 100644
--- a/lisp/gnus/mml-smime.el
+++ b/lisp/gnus/mml-smime.el
@@ -1,6 +1,6 @@
 ;;; mml-smime.el --- S/MIME support for MML
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Keywords: Gnus, MIME, S/MIME, MML
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index fccdf52..2a3b228 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -1,6 +1,6 @@
 ;;; mml.el --- A package for parsing and validating MML documents
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/mml1991.el b/lisp/gnus/mml1991.el
index 2663107..47d4407 100644
--- a/lisp/gnus/mml1991.el
+++ b/lisp/gnus/mml1991.el
@@ -1,6 +1,6 @@
 ;;; mml1991.el --- Old PGP message format (RFC 1991) support for MML
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Sascha Lüdecke <address@hidden>,
 ;;     Simon Josefsson <address@hidden> (Mailcrypt interface, Gnus glue)
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el
index 74290f4..5104cea 100644
--- a/lisp/gnus/mml2015.el
+++ b/lisp/gnus/mml2015.el
@@ -1,6 +1,6 @@
 ;;; mml2015.el --- MIME Security with Pretty Good Privacy (PGP)
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <address@hidden>
 ;; Keywords: PGP MIME MML
diff --git a/lisp/gnus/nnagent.el b/lisp/gnus/nnagent.el
index aa495a3..9c828a3 100644
--- a/lisp/gnus/nnagent.el
+++ b/lisp/gnus/nnagent.el
@@ -1,6 +1,6 @@
 ;;; nnagent.el --- offline backend for Gnus
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/nnbabyl.el b/lisp/gnus/nnbabyl.el
index 8c7ed4a..d060c2a 100644
--- a/lisp/gnus/nnbabyl.el
+++ b/lisp/gnus/nnbabyl.el
@@ -1,6 +1,6 @@
 ;;; nnbabyl.el --- rmail mbox access for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     Masanobu UMEDA <address@hidden>
diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el
index 3453e91..027d888 100644
--- a/lisp/gnus/nndiary.el
+++ b/lisp/gnus/nndiary.el
@@ -1,6 +1,6 @@
 ;;; nndiary.el --- A diary back end for Gnus
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author:        Didier Verna <address@hidden>
 ;; Maintainer:    Didier Verna <address@hidden>
diff --git a/lisp/gnus/nndir.el b/lisp/gnus/nndir.el
index 66a39ad..469e026 100644
--- a/lisp/gnus/nndir.el
+++ b/lisp/gnus/nndir.el
@@ -1,6 +1,6 @@
 ;;; nndir.el --- single directory newsgroup access for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/nndoc.el b/lisp/gnus/nndoc.el
index 88afe34..c62697b 100644
--- a/lisp/gnus/nndoc.el
+++ b/lisp/gnus/nndoc.el
@@ -1,6 +1,6 @@
 ;;; nndoc.el --- single file access for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     Masanobu UMEDA <address@hidden>
diff --git a/lisp/gnus/nndraft.el b/lisp/gnus/nndraft.el
index 764314d..0af547d 100644
--- a/lisp/gnus/nndraft.el
+++ b/lisp/gnus/nndraft.el
@@ -1,6 +1,6 @@
 ;;; nndraft.el --- draft article access for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/nneething.el b/lisp/gnus/nneething.el
index f93872b..183e396 100644
--- a/lisp/gnus/nneething.el
+++ b/lisp/gnus/nneething.el
@@ -1,6 +1,6 @@
 ;;; nneething.el --- arbitrary file access for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     Masanobu UMEDA <address@hidden>
diff --git a/lisp/gnus/nnfolder.el b/lisp/gnus/nnfolder.el
index a403f39..2901d29 100644
--- a/lisp/gnus/nnfolder.el
+++ b/lisp/gnus/nnfolder.el
@@ -1,6 +1,6 @@
 ;;; nnfolder.el --- mail folder access for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;;      ShengHuo Zhu <address@hidden> (adding NOV)
diff --git a/lisp/gnus/nngateway.el b/lisp/gnus/nngateway.el
index 0002e0f..808a21c 100644
--- a/lisp/gnus/nngateway.el
+++ b/lisp/gnus/nngateway.el
@@ -1,6 +1,6 @@
 ;;; nngateway.el --- posting news via mail gateways
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el
index 994c2d0..2ce5cb8 100644
--- a/lisp/gnus/nnheader.el
+++ b/lisp/gnus/nnheader.el
@@ -1,6 +1,6 @@
 ;;; nnheader.el --- header access macros for Gnus and its backends
 
-;; Copyright (C) 1987-1990, 1993-1998, 2000-2014 Free Software
+;; Copyright (C) 1987-1990, 1993-1998, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <address@hidden>
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 7992151..e619c0f 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -1,6 +1,6 @@
 ;;; nnimap.el --- IMAP interface for Gnus
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;         Simon Josefsson <address@hidden>
@@ -166,14 +166,21 @@ textual parts.")
   (nnimap-find-process-buffer nntp-server-buffer))
 
 (defun nnimap-header-parameters ()
-  (format "(UID RFC822.SIZE BODYSTRUCTURE %s)"
-         (format
+  (let (params)
+    (push "UID" params)
+    (push "RFC822.SIZE" params)
+    (when (nnimap-capability "X-GM-EXT-1")
+      (push "X-GM-LABELS" params))
+    (push "BODYSTRUCTURE" params)
+    (push (format
           (if (nnimap-ver4-p)
               "BODY.PEEK[HEADER.FIELDS %s]"
             "RFC822.HEADER.LINES %s")
           (append '(Subject From Date Message-Id
                             References In-Reply-To Xref)
-                  nnmail-extra-headers))))
+                  nnmail-extra-headers))
+         params)
+    (format "%s" (nreverse params))))
 
 (deffoo nnimap-retrieve-headers (articles &optional group server fetch-old)
   (when group
@@ -197,7 +204,7 @@ textual parts.")
 
 (defun nnimap-transform-headers ()
   (goto-char (point-min))
-  (let (article lines size string)
+  (let (article lines size string labels)
     (block nil
       (while (not (eobp))
        (while (not (looking-at "\\* [0-9]+ FETCH"))
@@ -232,6 +239,9 @@ textual parts.")
                                      t)
                   (match-string 1)))
        (beginning-of-line)
+       (when (search-forward "X-GM-LABELS" (line-end-position) t)
+         (setq labels (ignore-errors (read (current-buffer)))))
+       (beginning-of-line)
        (when (search-forward "BODYSTRUCTURE" (line-end-position) t)
          (let ((structure (ignore-errors
                             (read (current-buffer)))))
@@ -251,6 +261,8 @@ textual parts.")
          (insert (format "Chars: %s\n" size)))
        (when lines
          (insert (format "Lines: %s\n" lines)))
+       (when labels
+         (insert (format "X-GM-LABELS: %s\n" labels)))
        ;; Most servers have a blank line after the headers, but
        ;; Davmail doesn't.
        (unless (re-search-forward "^\r$\\|^)\r?$" nil t)
@@ -405,6 +417,7 @@ textual parts.")
               "*nnimap*" (current-buffer) nnimap-address
               (nnimap-map-port (car ports))
               :type nnimap-stream
+              :warn-unless-encrypted t
               :return-list t
               :shell-command nnimap-shell-program
               :capability-command "1 CAPABILITY\r\n"
@@ -791,43 +804,56 @@ textual parts.")
        articles active marks high low)
     (with-current-buffer nntp-server-buffer
       (when result
-       (if (and dont-check
-                (setq active (nth 2 (assoc group nnimap-current-infos))))
-           (insert (format "211 %d %d %d %S\n"
-                           (- (cdr active) (car active))
-                           (car active)
-                           (cdr active)
-                           group))
-         (with-current-buffer (nnimap-buffer)
-           (erase-buffer)
-           (let ((group-sequence
-                  (nnimap-send-command "SELECT %S" (utf7-encode group t)))
-                 (flag-sequence
-                  (nnimap-send-command "UID FETCH 1:* FLAGS")))
-             (setf (nnimap-group nnimap-object) group)
-             (nnimap-wait-for-response flag-sequence)
-             (setq marks
-                   (nnimap-flags-to-marks
-                    (nnimap-parse-flags
-                     (list (list group-sequence flag-sequence
-                                 1 group "SELECT")))))
-             (when (and info
-                        marks)
-               (nnimap-update-infos marks (list info))
-               (nnimap-store-info info (gnus-active (gnus-info-group info))))
-             (goto-char (point-max))
-             (let ((uidnext (nth 5 (car marks))))
-               (setq high (or (if uidnext
-                                   (1- uidnext)
-                                 (nth 3 (car marks)))
-                               0)
-                     low (or (nth 4 (car marks)) uidnext 1)))))
-         (erase-buffer)
-         (insert
-          (format
-           "211 %d %d %d %S\n" (1+ (- high low)) low high group)))
+       (when (or (not dont-check)
+                 (not (setq active
+                            (nth 2 (assoc group nnimap-current-infos)))))
+         (let ((sequences (nnimap-retrieve-group-data-early
+                           server (list info))))
+           (nnimap-finish-retrieve-group-infos server (list info) sequences
+                                               t)
+           (setq active (nth 2 (assoc group nnimap-current-infos)))))
+       (erase-buffer)
+       (insert (format "211 %d %d %d %S\n"
+                       (- (cdr active) (car active))
+                       (car active)
+                       (cdr active)
+                       group))
        t))))
 
+(deffoo nnimap-request-scan-group (group &optional server info)
+  (setq group (nnimap-decode-gnus-group group))
+  (let (marks high low)
+    (with-current-buffer (nnimap-buffer)
+      (erase-buffer)
+      (let ((group-sequence
+            (nnimap-send-command "SELECT %S" (utf7-encode group t)))
+           (flag-sequence
+            (nnimap-send-command "UID FETCH 1:* FLAGS")))
+       (setf (nnimap-group nnimap-object) group)
+       (nnimap-wait-for-response flag-sequence)
+       (setq marks
+             (nnimap-flags-to-marks
+              (nnimap-parse-flags
+               (list (list group-sequence flag-sequence
+                           1 group "SELECT")))))
+       (when (and info
+                  marks)
+         (nnimap-update-infos marks (list info))
+         (nnimap-store-info info (gnus-active (gnus-info-group info))))
+       (goto-char (point-max))
+       (let ((uidnext (nth 5 (car marks))))
+         (setq high (or (if uidnext
+                            (1- uidnext)
+                          (nth 3 (car marks)))
+                        0)
+               low (or (nth 4 (car marks)) uidnext 1)))))
+    (with-current-buffer nntp-server-buffer
+      (erase-buffer)
+      (insert
+       (format
+       "211 %d %d %d %S\n" (1+ (- high low)) low high group))
+      t)))
+
 (deffoo nnimap-request-create-group (group &optional server args)
   (setq group (nnimap-decode-gnus-group group))
   (when (nnimap-change-group nil server)
@@ -995,20 +1021,20 @@ textual parts.")
 
 (defun nnimap-find-expired-articles (group)
   (let ((cutoff (nnmail-expired-article-p group nil nil)))
-    (with-current-buffer (nnimap-buffer)
-      (let ((result
-            (nnimap-command
-             "UID SEARCH SENTBEFORE %s"
-             (format-time-string
-              (format "%%d-%s-%%Y"
-                      (upcase
-                       (car (rassoc (nth 4 (decode-time cutoff))
-                                    parse-time-months))))
-              cutoff))))
-       (and (car result)
-            (delete 0 (mapcar #'string-to-number
-                              (cdr (assoc "SEARCH" (cdr result))))))))))
-
+    (when cutoff
+      (with-current-buffer (nnimap-buffer)
+       (let ((result
+              (nnimap-command
+               "UID SEARCH SENTBEFORE %s"
+               (format-time-string
+                (format "%%d-%s-%%Y"
+                        (upcase
+                         (car (rassoc (nth 4 (decode-time cutoff))
+                                      parse-time-months))))
+                cutoff))))
+         (and (car result)
+              (delete 0 (mapcar #'string-to-number
+                                (cdr (assoc "SEARCH" (cdr result)))))))))))
 
 (defun nnimap-find-article-by-message-id (group server message-id
                                                &optional limit)
@@ -1121,8 +1147,11 @@ If LIMIT, first try to limit the search to the N last 
articles."
     (setq group
          (caar
           (nnmail-article-group
+           ;; We don't really care about the article number, because
+           ;; that's determined by the IMAP server later.  So just
+           ;; return the group name.
            `(lambda (group)
-              (nnml-active-number group ,server))))))
+              (list (list group)))))))
   (setq group (nnimap-decode-gnus-group group))
   (when (nnimap-change-group nil server)
     (nnmail-check-syntax)
@@ -1370,7 +1399,8 @@ If LIMIT, first try to limit the search to the N last 
articles."
        command
       (nth 2 quirk))))
 
-(deffoo nnimap-finish-retrieve-group-infos (server infos sequences)
+(deffoo nnimap-finish-retrieve-group-infos (server infos sequences
+                                                  &optional dont-insert)
   (when (and sequences
             (nnimap-change-group nil server t)
             ;; Check that the process is still alive.
@@ -1390,19 +1420,20 @@ If LIMIT, first try to limit the search to the N last 
articles."
                              (nnimap-parse-flags
                               (nreverse sequences)))
                             infos)
-       ;; Finally, just return something resembling an active file in
-       ;; the nntp buffer, so that the agent can save the info, too.
-       (with-current-buffer nntp-server-buffer
-         (erase-buffer)
-         (dolist (info infos)
-           (let* ((group (gnus-info-group info))
-                  (active (gnus-active group)))
-             (when active
-               (insert (format "%S %d %d y\n"
-                               (decode-coding-string
-                                (gnus-group-real-name group) 'utf-8)
-                               (cdr active)
-                               (car active)))))))))))
+       (unless dont-insert
+         ;; Finally, just return something resembling an active file in
+         ;; the nntp buffer, so that the agent can save the info, too.
+         (with-current-buffer nntp-server-buffer
+           (erase-buffer)
+           (dolist (info infos)
+             (let* ((group (gnus-info-group info))
+                    (active (gnus-active group)))
+               (when active
+                 (insert (format "%S %d %d y\n"
+                                 (decode-coding-string
+                                  (gnus-group-real-name group) 'utf-8)
+                                 (cdr active)
+                                 (car active))))))))))))
 
 (defun nnimap-update-infos (flags infos)
   (dolist (info infos)
diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el
index e2051df..6d111e8 100644
--- a/lisp/gnus/nnir.el
+++ b/lisp/gnus/nnir.el
@@ -1,6 +1,6 @@
 ;;; nnir.el --- search mail with various search engines -*- coding: utf-8 -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <address@hidden>
 ;; Swish-e and Swish++ backends by:
@@ -284,6 +284,8 @@ is `(valuefunc member)'."
 (eval-when-compile
   (autoload 'nnimap-buffer "nnimap")
   (autoload 'nnimap-command "nnimap")
+  (autoload 'nnimap-capability "nnimap")
+  (autoload 'nnimap-wait-for-line "nnimap")
   (autoload 'nnimap-change-group "nnimap")
   (autoload 'nnimap-make-thread-query "nnimap")
   (autoload 'gnus-registry-action "gnus-registry")
@@ -968,33 +970,52 @@ details on the language and supported extensions."
        (catch 'found
          (mapcar
           #'(lambda (group)
-            (let (artlist)
-              (condition-case ()
-                  (when (nnimap-change-group
-                         (gnus-group-short-name group) server)
-                    (with-current-buffer (nnimap-buffer)
-                      (message "Searching %s..." group)
-                      (let ((arts 0)
-                            (result (nnimap-command "UID SEARCH %s"
-                                                    (if (string= criteria "")
-                                                        qstring
-                                                      (nnir-imap-make-query
-                                                       criteria qstring)))))
-                        (mapc
-                         (lambda (artnum)
-                           (let ((artn (string-to-number artnum)))
-                             (when (> artn 0)
-                               (push (vector group artn 100)
-                                     artlist)
-                               (when (assq 'shortcut query)
-                                 (throw 'found (list artlist)))
-                               (setq arts (1+ arts)))))
-                         (and (car result)
-                             (cdr (assoc "SEARCH" (cdr result)))))
-                        (message "Searching %s... %d matches" group arts)))
-                    (message "Searching %s...done" group))
-                (quit nil))
-              (nreverse artlist)))
+             (let (artlist)
+               (condition-case ()
+                   (when (nnimap-change-group
+                          (gnus-group-short-name group) server)
+                     (with-current-buffer (nnimap-buffer)
+                       (message "Searching %s..." group)
+                       (let* ((arts 0)
+                              (literal+ (nnimap-capability "LITERAL+"))
+                              (search (split-string
+                                       (if (string= criteria "")
+                                           qstring
+                                         (nnir-imap-make-query
+                                         criteria qstring))
+                                       "\n"))
+                              (coding (upcase
+                                       (replace-regexp-in-string
+                                        "-\\(unix\\|dos\\|mac\\)" ""
+                                        (symbol-name
+                                         (cdr 
default-process-coding-system)))))
+                              call result)
+                         (setq call (nnimap-send-command
+                                       "UID SEARCH CHARSET %s %s" coding (pop 
search)))
+                         (while search ; Non-ascii search terms
+                           (unless literal+
+                             (nnimap-wait-for-line "^\\+\\(.*\\)\n"))
+                           (process-send-string (get-buffer-process 
(current-buffer)) (pop search))
+                           (process-send-string (get-buffer-process 
(current-buffer))
+                              (if (nnimap-newlinep nnimap-object)
+                                  "\n"
+                                "\r\n")))
+                         (setq result (nnimap-get-response call))
+                         (mapc
+                          (lambda (artnum)
+                            (let ((artn (string-to-number artnum)))
+                              (when (> artn 0)
+                                (push (vector group artn 100)
+                                      artlist)
+                                (when (assq 'shortcut query)
+                                  (throw 'found (list artlist)))
+                                (setq arts (1+ arts)))))
+                          (and (car result)
+                               (cdr (assoc "SEARCH" (cdr result)))))
+                         (message "Searching %s... %d matches" group arts)))
+                     (message "Searching %s...done" group))
+                 (quit nil))
+               (nreverse artlist)))
           groups))))))
 
 (defun nnir-imap-make-query (criteria qstring)
@@ -1048,25 +1069,30 @@ In future the following will be added to the language:
 (defun nnir-imap-expr-to-imap (criteria expr)
   "Convert EXPR into an IMAP search expression on CRITERIA"
   ;; What sort of expression is this, eh?
-  (cond
-   ;; Simple string term
-   ((stringp expr)
-    (format "%s %S" criteria expr))
-   ;; Trivial term: and
-   ((eq expr 'and) nil)
-   ;; Composite term: or expression
-   ((eq (car-safe expr) 'or)
-    (format "OR %s %s"
-           (nnir-imap-expr-to-imap criteria (second expr))
-           (nnir-imap-expr-to-imap criteria (third expr))))
-   ;; Composite term: just the fax, mam
-   ((eq (car-safe expr) 'not)
-    (format "NOT (%s)" (nnir-imap-query-to-imap criteria (rest expr))))
-   ;; Composite term: just expand it all.
-   ((and (not (null expr)) (listp expr))
-    (format "(%s)" (nnir-imap-query-to-imap criteria expr)))
-   ;; Complex value, give up for now.
-   (t (error "Unhandled input: %S" expr))))
+  (let ((literal+ (nnimap-capability "LITERAL+")))
+    (cond
+     ;; Simple string term
+     ((stringp expr)
+      (format "%s %S" criteria expr))
+     ;; Trivial term: and
+     ((eq expr 'and) nil)
+     ;; Composite term: or expression
+     ((eq (car-safe expr) 'or)
+      (format "OR %s %s"
+             (nnir-imap-expr-to-imap criteria (second expr))
+             (nnir-imap-expr-to-imap criteria (third expr))))
+     ;; Composite term: just the fax, mam
+     ((eq (car-safe expr) 'not)
+      (format "NOT (%s)" (nnir-imap-query-to-imap criteria (rest expr))))
+     ;; Composite term: non-ascii search term
+     ((numberp (car-safe expr))
+      (format "%s {%d%s}\n%s" criteria (car expr)
+             (if literal+ "+" "") (second expr)))
+     ;; Composite term: just expand it all.
+     ((and (not (null expr)) (listp expr))
+      (format "(%s)" (nnir-imap-query-to-imap criteria expr)))
+     ;; Complex value, give up for now.
+     (t (error "Unhandled input: %S" expr)))))
 
 
 (defun nnir-imap-parse-query (string)
@@ -1108,6 +1134,11 @@ that the search language can then understand and use."
      ((eq term 'and) 'and)
      ;; negated term
      ((eq term 'not) (list 'not (nnir-imap-next-expr)))
+     ;; non-ascii search string
+     ((and (stringp term)
+          (not (= (string-bytes term)
+                  (length term))))
+      (list (string-bytes term) term))
      ;; generic term
      (t term))))
 
diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el
index d1a0455..62fcc2d 100644
--- a/lisp/gnus/nnmail.el
+++ b/lisp/gnus/nnmail.el
@@ -1,6 +1,6 @@
 ;;; nnmail.el --- mail support functions for the Gnus mail backends
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/nnmairix.el b/lisp/gnus/nnmairix.el
index 0cef699..96b40e5 100644
--- a/lisp/gnus/nnmairix.el
+++ b/lisp/gnus/nnmairix.el
@@ -1,6 +1,6 @@
 ;;; nnmairix.el --- Mairix back end for Gnus, the Emacs newsreader
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: David Engster <address@hidden>
 ;; Keywords: mail searching
@@ -417,7 +417,7 @@ Other back ends might or might not work.")
 
 (nnoo-define-basics nnmairix)
 
-(gnus-declare-backend "nnmairix" 'mail 'address)
+(gnus-declare-backend "nnmairix" 'mail 'address 'virtual)
 
 (deffoo nnmairix-open-server (server &optional definitions)
   ;; just set server variables
diff --git a/lisp/gnus/nnmbox.el b/lisp/gnus/nnmbox.el
index 4eb98cf..78983a5 100644
--- a/lisp/gnus/nnmbox.el
+++ b/lisp/gnus/nnmbox.el
@@ -1,6 +1,6 @@
 ;;; nnmbox.el --- mail mbox access for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     Masanobu UMEDA <address@hidden>
diff --git a/lisp/gnus/nnmh.el b/lisp/gnus/nnmh.el
index 73a2c4d..9be0c14 100644
--- a/lisp/gnus/nnmh.el
+++ b/lisp/gnus/nnmh.el
@@ -1,6 +1,6 @@
 ;;; nnmh.el --- mhspool access for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     Masanobu UMEDA <address@hidden>
diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index 7e6fcef..8275e19 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -1,6 +1,6 @@
 ;;; nnml.el --- mail spool access for Gnus
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Authors: Didier Verna <address@hidden> (adding compaction)
 ;;     Simon Josefsson <address@hidden>
diff --git a/lisp/gnus/nnoo.el b/lisp/gnus/nnoo.el
index 336d307..8fe83a4 100644
--- a/lisp/gnus/nnoo.el
+++ b/lisp/gnus/nnoo.el
@@ -1,6 +1,6 @@
 ;;; nnoo.el --- OO Gnus Backends
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/gnus/nnregistry.el b/lisp/gnus/nnregistry.el
index ce9fb65..8147d8e 100644
--- a/lisp/gnus/nnregistry.el
+++ b/lisp/gnus/nnregistry.el
@@ -1,7 +1,7 @@
 ;;; nnregistry.el --- access to articles via Gnus' message-id registry
 ;;; -*- coding: utf-8 -*-
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Authors: Ludovic Courtès <address@hidden>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/nnrss.el b/lisp/gnus/nnrss.el
index 02a9513..ac9c5ff 100644
--- a/lisp/gnus/nnrss.el
+++ b/lisp/gnus/nnrss.el
@@ -1,6 +1,6 @@
 ;;; nnrss.el --- interfacing with RSS
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <address@hidden>
 ;; Keywords: RSS
diff --git a/lisp/gnus/nnspool.el b/lisp/gnus/nnspool.el
index 5bcd214..9e9537a 100644
--- a/lisp/gnus/nnspool.el
+++ b/lisp/gnus/nnspool.el
@@ -1,6 +1,6 @@
 ;;; nnspool.el --- spool access for GNU Emacs
 
-;; Copyright (C) 1988-1990, 1993-1998, 2000-2014 Free Software
+;; Copyright (C) 1988-1990, 1993-1998, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <address@hidden>
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index 6035162..0891dba 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -1,6 +1,6 @@
 ;;; nntp.el --- nntp access for Gnus
 
-;; Copyright (C) 1987-1990, 1992-1998, 2000-2014 Free Software
+;; Copyright (C) 1987-1990, 1992-1998, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
@@ -1219,14 +1219,17 @@ If SEND-IF-FORCE, only send authinfo to the server if 
the
              nntp-authinfo-user user))
       (unless (member user '(nil ""))
        (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user)
-       (when t                         ;???Should check if AUTHINFO succeeded
-         (nntp-send-command
-          "^2.*\r?\n" "AUTHINFO PASS"
-          (or passwd
-              nntp-authinfo-password
-              (setq nntp-authinfo-password
-                    (read-passwd (format "NNTP (address@hidden) password: "
-                                         user nntp-address))))))))))
+       (let ((result
+              (nntp-send-command
+               "^2.*\r?\n" "AUTHINFO PASS"
+               (or passwd
+                   nntp-authinfo-password
+                   (setq nntp-authinfo-password
+                         (read-passwd (format "NNTP (address@hidden) password: 
"
+                                              user nntp-address)))))))
+         (if (not result)
+             (signal 'nntp-authinfo-rejected "Password rejected")
+           result))))))
 
 ;;; Internal functions.
 
diff --git a/lisp/gnus/nnvirtual.el b/lisp/gnus/nnvirtual.el
index f67943a..a3d950a 100644
--- a/lisp/gnus/nnvirtual.el
+++ b/lisp/gnus/nnvirtual.el
@@ -1,6 +1,6 @@
 ;;; nnvirtual.el --- virtual newsgroups access for Gnus
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: David Moore <address@hidden>
 ;;     Lars Magne Ingebrigtsen <address@hidden>
@@ -99,7 +99,7 @@ component group will show up when you enter the virtual 
group.")
        (let ((vbuf (nnheader-set-temp-buffer
                     (get-buffer-create " *virtual headers*")))
              (carticles (nnvirtual-partition-sequence articles))
-             (system-name (system-name))
+             (sysname (system-name))
              cgroup carticle article result prefix)
          (while carticles
            (setq cgroup (caar carticles))
@@ -151,7 +151,7 @@ component group will show up when you enter the virtual 
group.")
                  ;; and clean up the xrefs.
                  (princ article nntp-server-buffer)
                  (nnvirtual-update-xref-header cgroup carticle
-                                               prefix system-name)
+                                               prefix sysname)
                  (forward-line 1))
                )
 
@@ -378,7 +378,7 @@ component group will show up when you enter the virtual 
group.")
       (mapc 'nnheader-insert-nov headers))))
 
 
-(defun nnvirtual-update-xref-header (group article prefix system-name)
+(defun nnvirtual-update-xref-header (group article prefix sysname)
   "Edit current NOV header in current buffer to have an xref to the component 
group, and also server prefix any existing xref lines."
   ;; Move to beginning of Xref field, creating a slot if needed.
   (beginning-of-line)
@@ -393,7 +393,7 @@ component group will show up when you enter the virtual 
group.")
     (forward-char -1)
     (delete-char 1))
 
-  (insert "Xref: " system-name " " group ":")
+  (insert "Xref: " sysname " " group ":")
   (princ article (current-buffer))
   (insert " ")
 
diff --git a/lisp/gnus/nnweb.el b/lisp/gnus/nnweb.el
index e909372..f53e314 100644
--- a/lisp/gnus/nnweb.el
+++ b/lisp/gnus/nnweb.el
@@ -1,6 +1,6 @@
 ;;; nnweb.el --- retrieving articles via web search engines
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
@@ -438,7 +438,7 @@ Valid types include `google', `dejanews', and `gmane'.")
   t)
 
 (defun nnweb-google-identity (url)
-  "Return an unique identifier based on URL."
+  "Return a unique identifier based on URL."
   (if (string-match "selm=\\([^ &>]+\\)" url)
       (match-string 1 url)
     url))
diff --git a/lisp/gnus/plstore.el b/lisp/gnus/plstore.el
index 2939462..12a0413 100644
--- a/lisp/gnus/plstore.el
+++ b/lisp/gnus/plstore.el
@@ -1,5 +1,5 @@
 ;;; plstore.el --- secure plist store -*- lexical-binding: t -*-
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/gnus/pop3.el b/lisp/gnus/pop3.el
index dfc646b..4d9dfda 100644
--- a/lisp/gnus/pop3.el
+++ b/lisp/gnus/pop3.el
@@ -1,6 +1,6 @@
 ;;; pop3.el --- Post Office Protocol (RFC 1460) interface
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Richard L. Pieri <address@hidden>
 ;; Maintainer: address@hidden
@@ -561,6 +561,7 @@ Returns the process associated with the connection."
                     'tls)
                    (t
                     (or pop3-stream-type 'network)))
+            :warn-unless-encrypted t
             :capability-command "CAPA\r\n"
             :end-of-command "^\\(-ERR\\|+OK\\).*\n"
             :end-of-capability "^\\.\r?\n\\|^-ERR"
diff --git a/lisp/gnus/qp.el b/lisp/gnus/qp.el
index 0b7c063..6c48f0f 100644
--- a/lisp/gnus/qp.el
+++ b/lisp/gnus/qp.el
@@ -1,6 +1,6 @@
 ;;; qp.el --- Quoted-Printable functions
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: mail, extensions
diff --git a/lisp/gnus/registry.el b/lisp/gnus/registry.el
index 24a3aa0..55b83a8 100644
--- a/lisp/gnus/registry.el
+++ b/lisp/gnus/registry.el
@@ -1,6 +1,6 @@
 ;;; registry.el --- Track and remember data items by various fields
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <address@hidden>
 ;; Keywords: data
@@ -25,11 +25,11 @@
 ;; This library provides a general-purpose EIEIO-based registry
 ;; database with persistence, initialized with these fields:
 
-;; version: a float, 0.1 currently (don't change it)
+;; version: a float
 
-;; max-hard: an integer, default 5000000
+;; max-size: an integer, default most-positive-fixnum
 
-;; max-soft: an integer, default 50000
+;; prune-factor: a float between 0 and 1, default 0.1
 
 ;; precious: a list of symbols
 
@@ -57,14 +57,15 @@
 ;; Note that whether a field has one or many pieces of data, the data
 ;; is always a list of values.
 
-;; The user decides which fields are "precious", F2 for example.  At
-;; PRUNE TIME (when the :prune-function is called), the registry will
-;; trim any entries without the F2 field until the size is :max-soft
-;; or less.  No entries with the F2 field will be removed at PRUNE
-;; TIME.
+;; The user decides which fields are "precious", F2 for example.  When
+;; the registry is pruned, any entries without the F2 field will be
+;; removed until the size is :max-size * :prune-factor _less_ than the
+;; maximum database size. No entries with the F2 field will be removed
+;; at PRUNE TIME, which means it may not be possible to prune back all
+;; the way to the target size.
 
-;; When an entry is inserted, the registry will reject new entries
-;; if they bring it over the max-hard limit, even if they have the F2
+;; When an entry is inserted, the registry will reject new entries if
+;; they bring it over the :max-size limit, even if they have the F2
 ;; field.
 
 ;; The user decides which fields are "tracked", F1 for example.  Any
@@ -82,28 +83,32 @@
 (require 'eieio)
 (require 'eieio-base)
 
+;; The version number needs to be kept outside of the class definition
+;; itself.  The persistent-save process does *not* write to file any
+;; slot values that are equal to the default :initform value.  If a
+;; database object is at the most recent version, therefore, its
+;; version number will not be written to file.  That makes it
+;; difficult to know when a database needs to be upgraded.
+(defvar registry-db-version 0.2
+  "The current version of the registry format.")
+
 (defclass registry-db (eieio-persistent)
   ((version :initarg :version
-            :initform 0.1
-            :type float
-            :custom float
+            :initform nil
+            :type (or null float)
             :documentation "The registry version.")
-   (max-hard :initarg :max-hard
-             :initform 5000000
+   (max-size :initarg :max-size
+             ;; :initform most-positive-fixnum ;; see below
              :type integer
              :custom integer
-             :documentation "Never accept more than this many elements.")
-   (max-soft :initarg :max-soft
-             :initform 50000
-             :type integer
-             :custom integer
-             :documentation "Prune as much as possible to get to this size.")
+             :documentation "The maximum number of registry entries.")
    (prune-factor
     :initarg :prune-factor
     :initform 0.1
     :type float
     :custom float
-    :documentation "At the max-hard limit, prune size * this entries.")
+    :documentation "Prune to \(:max-size * :prune-factor\) less
+    than the :max-size limit.  Should be a float between 0 and 1.")
    (tracked :initarg :tracked
             :initform nil
             :type t
@@ -118,6 +123,25 @@
    (data :initarg :data
          :type hash-table
          :documentation "The data hashtable.")))
+;; Do this separately, since defclass doesn't allow expressions in :initform.
+(oset-default 'registry-db max-size most-positive-fixnum)
+
+(defmethod initialize-instance :BEFORE ((this registry-db) slots)
+  "Check whether a registry object needs to be upgraded."
+  ;; Hardcoded upgrade routines.  Version 0.1 to 0.2 requires the
+  ;; :max-soft slot to disappear, and the :max-hard slot to be renamed
+  ;; :max-size.
+  (let ((current-version
+        (and (plist-member slots :version)
+             (plist-get slots :version))))
+    (when (or (null current-version)
+             (eql current-version 0.1))
+      (setq slots
+           (plist-put slots :max-size (plist-get slots :max-hard)))
+      (setq slots
+           (plist-put slots :version registry-db-version))
+      (cl-remf slots :max-hard)
+      (cl-remf slots :max-soft))))
 
 (defmethod initialize-instance :AFTER ((this registry-db) slots)
   "Set value of data slot of THIS after initialization."
@@ -255,7 +279,7 @@ This is the key count of the :data slot."
 (defmethod registry-full ((db registry-db))
   "Checks if registry-db THIS is full."
   (>= (registry-size db)
-      (oref db :max-hard)))
+      (oref db :max-size)))
 
 (defmethod registry-insert ((db registry-db) key entry)
   "Insert ENTRY under KEY into the registry-db THIS.
@@ -267,7 +291,7 @@ Errors out if the key exists already."
 
   (assert (not (registry-full db))
          nil
-         "registry max-hard size limit reached")
+         "registry max-size limit reached")
 
   ;; store the entry
   (puthash key entry (oref db :data))
@@ -300,58 +324,51 @@ Errors out if the key exists already."
               (registry-lookup-secondary-value db tr val value-keys))))
         (oref db :data))))))
 
-(defmethod registry-prune ((db registry-db) &optional sortfun)
-  "Prunes the registry-db object THIS.
-Removes only entries without the :precious keys if it can,
-then removes oldest entries first.
-Returns the number of deleted entries.
-If SORTFUN is given, tries to keep entries that sort *higher*.
-SORTFUN is passed only the two keys so it must look them up directly."
-  (dolist (collector '(registry-prune-soft-candidates
-                      registry-prune-hard-candidates))
-    (let* ((size (registry-size db))
-          (collected (funcall collector db))
-          (limit (nth 0 collected))
-          (candidates (nth 1 collected))
-          ;; sort the candidates if SORTFUN was given
-          (candidates (if sortfun (sort candidates sortfun) candidates))
-          (candidates-count (length candidates))
-          ;; are we over max-soft?
-          (prune-needed (> size limit)))
-
-      ;; while we have more candidates than we need to remove...
-      (while (and (> candidates-count (- size limit)) candidates)
-       (decf candidates-count)
-       (setq candidates (cdr candidates)))
-
-      (registry-delete db candidates nil)
-      (length candidates))))
-
-(defmethod registry-prune-soft-candidates ((db registry-db))
-  "Collects pruning candidates from the registry-db object THIS.
-Proposes only entries without the :precious keys."
+(defmethod registry-prune ((db registry-db) &optional sortfunc)
+  "Prunes the registry-db object DB.
+
+Attempts to prune the number of entries down to \(*
+:max-size :prune-factor\) less than the max-size limit, so
+pruning doesn't need to happen on every save. Removes only
+entries without the :precious keys, so it may not be possible to
+reach the target limit.
+
+Entries to be pruned are first sorted using SORTFUNC.  Entries
+from the front of the list are deleted first.
+
+Returns the number of deleted entries."
+  (let ((size (registry-size db))
+       (target-size (- (oref db :max-size)
+                       (* (oref db :max-size)
+                          (oref db :prune-factor))))
+       candidates)
+    (if (> size target-size)
+       (progn
+         (setq candidates
+               (registry-collect-prune-candidates
+                db (- size target-size) sortfunc))
+         (length (registry-delete db candidates nil)))
+      0)))
+
+(defmethod registry-collect-prune-candidates ((db registry-db) limit sortfunc)
+  "Collects pruning candidates from the registry-db object DB.
+
+Proposes only entries without the :precious keys, and attempts to
+return LIMIT such candidates.  If SORTFUNC is provided, sort
+entries first and return candidates from beginning of list."
   (let* ((precious (oref db :precious))
         (precious-p (lambda (entry-key)
                       (cdr (memq (car entry-key) precious))))
         (data (oref db :data))
-        (limit (oref db :max-soft))
-        (candidates (loop for k being the hash-keys of data
-                          using (hash-values v)
-                          when (notany precious-p v)
-                          collect k)))
-    (list limit candidates)))
-
-(defmethod registry-prune-hard-candidates ((db registry-db))
-  "Collects pruning candidates from the registry-db object THIS.
-Proposes any entries over the max-hard limit minus size * prune-factor."
-  (let* ((data (oref db :data))
-        ;; prune to (size * prune-factor) below the max-hard limit so
-        ;; we're not pruning all the time
-        (limit (max 0 (- (oref db :max-hard)
-                         (* (registry-size db) (oref db :prune-factor)))))
-        (candidates (loop for k being the hash-keys of data
-                          collect k)))
-    (list limit candidates)))
+        (candidates (cl-loop for k being the hash-keys of data
+                             using (hash-values v)
+                             when (notany precious-p v)
+                             collect (cons k v))))
+    ;; We want the full entries for sorting, but should only return a
+    ;; list of entry keys.
+    (when sortfunc
+      (setq candidates (sort candidates sortfunc)))
+    (delq nil (cl-subseq (mapcar #'car candidates) 0 limit))))
 
 (provide 'registry)
 ;;; registry.el ends here
diff --git a/lisp/gnus/rfc1843.el b/lisp/gnus/rfc1843.el
index 74e8f12..cab2f4e 100644
--- a/lisp/gnus/rfc1843.el
+++ b/lisp/gnus/rfc1843.el
@@ -1,6 +1,6 @@
 ;;; rfc1843.el --- HZ (rfc1843) decoding
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <address@hidden>
 ;; Keywords: news HZ HZ+ mail i18n
diff --git a/lisp/gnus/rfc2045.el b/lisp/gnus/rfc2045.el
index 8fe2d01..5a814e8 100644
--- a/lisp/gnus/rfc2045.el
+++ b/lisp/gnus/rfc2045.el
@@ -1,6 +1,6 @@
 ;;; rfc2045.el --- Functions for decoding rfc2045 headers
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el
index 9d5649a..b2520b2 100644
--- a/lisp/gnus/rfc2047.el
+++ b/lisp/gnus/rfc2047.el
@@ -1,6 +1,6 @@
 ;;; rfc2047.el --- functions for encoding and decoding rfc2047 messages
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;     MORIOKA Tomohiko <address@hidden>
diff --git a/lisp/gnus/rfc2104.el b/lisp/gnus/rfc2104.el
index 41af122..f80e228 100644
--- a/lisp/gnus/rfc2104.el
+++ b/lisp/gnus/rfc2104.el
@@ -1,6 +1,6 @@
 ;;; rfc2104.el --- RFC2104 Hashed Message Authentication Codes
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Keywords: mail
diff --git a/lisp/gnus/rfc2231.el b/lisp/gnus/rfc2231.el
index 59990ad..ef7187c 100644
--- a/lisp/gnus/rfc2231.el
+++ b/lisp/gnus/rfc2231.el
@@ -1,6 +1,6 @@
 ;;; rfc2231.el --- Functions for decoding rfc2231 headers
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/rtree.el b/lisp/gnus/rtree.el
index b143bfe..59c17ae 100644
--- a/lisp/gnus/rtree.el
+++ b/lisp/gnus/rtree.el
@@ -1,6 +1,6 @@
 ;;; rtree.el --- functions for manipulating range trees
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 
diff --git a/lisp/gnus/score-mode.el b/lisp/gnus/score-mode.el
index 143411c..9fde82c 100644
--- a/lisp/gnus/score-mode.el
+++ b/lisp/gnus/score-mode.el
@@ -1,6 +1,6 @@
 ;;; score-mode.el --- mode for editing Gnus score files
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/sieve-manage.el b/lisp/gnus/sieve-manage.el
index 62d185e..72f22e7 100644
--- a/lisp/gnus/sieve-manage.el
+++ b/lisp/gnus/sieve-manage.el
@@ -1,6 +1,6 @@
 ;;; sieve-manage.el --- Implementation of the managesieve protocol in elisp
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;;         Albert Krewinkel <address@hidden>
diff --git a/lisp/gnus/sieve-mode.el b/lisp/gnus/sieve-mode.el
index 735ea66..c8d4754 100644
--- a/lisp/gnus/sieve-mode.el
+++ b/lisp/gnus/sieve-mode.el
@@ -1,6 +1,6 @@
 ;;; sieve-mode.el --- Sieve code editing commands for Emacs
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 
diff --git a/lisp/gnus/sieve.el b/lisp/gnus/sieve.el
index 4ebb458..6eef569 100644
--- a/lisp/gnus/sieve.el
+++ b/lisp/gnus/sieve.el
@@ -1,6 +1,6 @@
 ;;; sieve.el --- Utilities to manage sieve scripts
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 
diff --git a/lisp/gnus/smiley.el b/lisp/gnus/smiley.el
index 6a63f63..8b8cad7 100644
--- a/lisp/gnus/smiley.el
+++ b/lisp/gnus/smiley.el
@@ -1,6 +1,6 @@
 ;;; smiley.el --- displaying smiley faces
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: news mail multimedia
diff --git a/lisp/gnus/smime.el b/lisp/gnus/smime.el
index bcebe3d..6f043df 100644
--- a/lisp/gnus/smime.el
+++ b/lisp/gnus/smime.el
@@ -1,6 +1,6 @@
 ;;; smime.el --- S/MIME support library
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Keywords: SMIME X.509 PEM OpenSSL
diff --git a/lisp/gnus/spam-report.el b/lisp/gnus/spam-report.el
index ce9c9f7..96d72de 100644
--- a/lisp/gnus/spam-report.el
+++ b/lisp/gnus/spam-report.el
@@ -1,6 +1,6 @@
 ;;; spam-report.el --- Reporting spam
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <address@hidden>
 ;; Keywords: network, spam, mail, gmane, report
diff --git a/lisp/gnus/spam-stat.el b/lisp/gnus/spam-stat.el
index ec8b9f3..a8270dc 100644
--- a/lisp/gnus/spam-stat.el
+++ b/lisp/gnus/spam-stat.el
@@ -1,6 +1,6 @@
 ;;; spam-stat.el --- detecting spam based on statistics
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Keywords: network
diff --git a/lisp/gnus/spam-wash.el b/lisp/gnus/spam-wash.el
index 4957c4f..515472d 100644
--- a/lisp/gnus/spam-wash.el
+++ b/lisp/gnus/spam-wash.el
@@ -1,6 +1,6 @@
 ;;; spam-wash.el --- wash spam before analysis
 
-;; Copyright (C) 2004, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Andrew Cohen <address@hidden>
 ;; Keywords: mail
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index 664ac53..500f341 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -1,6 +1,6 @@
 ;;; spam.el --- Identifying spam
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Maintainer: Ted Zlatanov <address@hidden>
diff --git a/lisp/gnus/starttls.el b/lisp/gnus/starttls.el
index b687fe4..cc7192b 100644
--- a/lisp/gnus/starttls.el
+++ b/lisp/gnus/starttls.el
@@ -1,6 +1,6 @@
 ;;; starttls.el --- STARTTLS functions
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Author: Simon Josefsson <address@hidden>
diff --git a/lisp/gnus/utf7.el b/lisp/gnus/utf7.el
index f48ae87..c2f8c0e 100644
--- a/lisp/gnus/utf7.el
+++ b/lisp/gnus/utf7.el
@@ -1,6 +1,6 @@
 ;;; utf7.el --- UTF-7 encoding/decoding for Emacs   -*-coding: utf-8;-*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Jon K Hellan <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/gnus/yenc.el b/lisp/gnus/yenc.el
index 5c31aaf..cfe9f2e 100644
--- a/lisp/gnus/yenc.el
+++ b/lisp/gnus/yenc.el
@@ -1,6 +1,6 @@
 ;;; yenc.el --- elisp native yenc decoder
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Jesper Harder <address@hidden>
 ;; Keywords: yenc news
diff --git a/lisp/gs.el b/lisp/gs.el
index 8e1b192..2c23231 100644
--- a/lisp/gs.el
+++ b/lisp/gs.el
@@ -1,6 +1,6 @@
 ;;; gs.el --- interface to Ghostscript
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
diff --git a/lisp/help-at-pt.el b/lisp/help-at-pt.el
index 7f424f7..82ca09d 100644
--- a/lisp/help-at-pt.el
+++ b/lisp/help-at-pt.el
@@ -1,6 +1,6 @@
 ;;; help-at-pt.el --- local help through the keyboard
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Luc Teirlinck <address@hidden>
 ;; Keywords: help
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index 248e505..c0d6393 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -1,7 +1,7 @@
 ;;; help-fns.el --- Complex help functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1993-1994, 1998-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2015 Free Software
+;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: help, internal
@@ -183,8 +183,7 @@ OBJECT should be a symbol associated with a function, 
variable, or face;
   alternatively, it can be a function definition.
 If TYPE is `defvar', search for a variable definition.
 If TYPE is `defface', search for a face definition.
-If TYPE is the value returned by `symbol-function' for a function symbol,
- search for a function definition.
+If TYPE is not a symbol, search for a function definition.
 
 The return value is the absolute name of a readable file where OBJECT is
 defined.  If several such files exist, preference is given to a file
@@ -194,9 +193,10 @@ suitable file is found, return nil."
   (let* ((autoloaded (autoloadp type))
         (file-name (or (and autoloaded (nth 1 type))
                        (symbol-file
-                        object (if (memq type (list 'defvar 'defface))
-                                   type
-                                 'defun)))))
+                         ;; FIXME: Why do we have this weird "If TYPE is the
+                         ;; value returned by `symbol-function' for a function
+                         ;; symbol" exception?
+                        object (or (if (symbolp type) type) 'defun)))))
     (cond
      (autoloaded
       ;; An autoloaded function: Locate the file since `symbol-function'
@@ -452,6 +452,18 @@ FILE is the file where FUNCTION was probably defined."
                          (t "."))
                    "\n")))))
 
+(defun help-fns-short-filename (filename)
+  (let* ((abbrev (abbreviate-file-name filename))
+         (short abbrev))
+    (dolist (dir load-path)
+      (let ((rel (file-relative-name filename dir)))
+        (if (< (length rel) (length short))
+            (setq short rel)))
+      (let ((rel (file-relative-name abbrev dir)))
+        (if (< (length rel) (length short))
+            (setq short rel))))
+    short))
+
 ;;;###autoload
 (defun describe-function-1 (function)
   (let* ((advised (and (symbolp function)
@@ -543,7 +555,7 @@ FILE is the file where FUNCTION was probably defined."
        ;; but that's completely wrong when the user used load-file.
        (princ (if (eq file-name 'C-source)
                   "C source code"
-                (file-name-nondirectory file-name)))
+                (help-fns-short-filename file-name)))
        (princ "'")
        ;; Make a hyperlink to the library.
        (with-current-buffer standard-output
@@ -564,7 +576,7 @@ FILE is the file where FUNCTION was probably defined."
                         help-enable-auto-load
                         (string-match "\\([^\\]=\\|[^=]\\|\\`\\)\\\\[[{<]"
                                       doc-raw)
-                        (load (cadr real-def) t))
+                        (autoload-do-load real-def))
                    (substitute-command-keys doc-raw))))
 
         (help-fns--key-bindings function)
diff --git a/lisp/help-macro.el b/lisp/help-macro.el
index 52f0d51..c3ec968 100644
--- a/lisp/help-macro.el
+++ b/lisp/help-macro.el
@@ -1,6 +1,6 @@
 ;;; help-macro.el --- makes command line help such as help-for-help
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Lynn Slater <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 76bb12c..c62ddc3 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -1,6 +1,6 @@
 ;;; help-mode.el --- `help-mode' used by *Help* buffers
 
-;; Copyright (C) 1985-1986, 1993-1994, 1998-2014 Free Software
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -191,7 +191,7 @@ The format is (FUNCTION ARGS...).")
 
 (define-button-type 'help-function-def
   :supertype 'help-xref
-  'help-function (lambda (fun file)
+  'help-function (lambda (fun file &optional type)
                   (require 'find-func)
                   (when (eq file 'C-source)
                     (setq file
@@ -199,7 +199,7 @@ The format is (FUNCTION ARGS...).")
                   ;; Don't use find-function-noselect because it follows
                   ;; aliases (which fails for built-in functions).
                   (let ((location
-                         (find-function-search-for-symbol fun nil file)))
+                         (find-function-search-for-symbol fun type file)))
                     (pop-to-buffer (car location))
                     (if (cdr location)
                         (goto-char (cdr location))
diff --git a/lisp/help.el b/lisp/help.el
index eaee6d1..bf72425 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -1,6 +1,7 @@
 ;;; help.el --- help commands for Emacs
 
-;; Copyright (C) 1985-1986, 1993-1994, 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2015 Free Software
+;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: help, internal
@@ -46,6 +47,9 @@
 (defvar help-window-point-marker (make-marker)
   "Marker to override default `window-point' in help windows.")
 
+(defvar help-window-old-frame nil
+  "Frame selected at the time `with-help-window' is invoked.")
+
 (defvar help-map
   (let ((map (make-sparse-keymap)))
     (define-key map (char-to-string help-char) 'help-for-help)
@@ -1130,7 +1134,10 @@ of a horizontal combination, restrain its new size by
 `fit-window-to-buffer-horizontally' can inhibit resizing.
 
 If WINDOW is the root window of its frame, resize the frame
-provided `fit-frame-to-buffer' is non-nil."
+provided `fit-frame-to-buffer' is non-nil.
+
+This function may call `preserve-window-size' to preserve the
+size of WINDOW."
   (setq window (window-normalize-window window t))
   (let ((height (if (functionp temp-buffer-max-height)
                    (with-selected-window window
@@ -1152,20 +1159,30 @@ provided `fit-frame-to-buffer' is non-nil."
              (and (eq quit-cadr 'frame)
                     fit-frame-to-buffer
                     (eq window (frame-root-window window))))
-       (fit-window-to-buffer window height nil width))))
+       (fit-window-to-buffer window height nil width nil t))))
 
 ;;; Help windows.
-(defcustom help-window-select 'other
-    "Non-nil means select help window for viewing.
+(defcustom help-window-select nil
+  "Non-nil means select help window for viewing.
 Choices are:
+
  never (nil) Select help window only if there is no other window
              on its frame.
- other       Select help window unless the selected window is the
-             only other window on the help window's frame.
+
+ other       Select help window if and only if it appears on the
+             previously selected frame, that frame contains at
+             least two other windows and the help window is
+             either new or showed a different buffer before.
+
  always (t)  Always select the help window.
 
+If this option is non-nil and the help window appears on another
+frame, then give that frame input focus too.  Note also that if
+the help window appears on another frame, it may get selected and
+its frame get input focus even if this option is nil.
+
 This option has effect if and only if the help window was created
-by `with-help-window'"
+by `with-help-window'."
   :type '(choice (const :tag "never (nil)" nil)
                 (const :tag "other" other)
                 (const :tag "always (t)" t))
@@ -1212,7 +1229,9 @@ Return VALUE."
   (let* ((help-buffer (when (window-live-p window)
                        (window-buffer window)))
         (help-setup (when (window-live-p window)
-                      (car (window-parameter window 'quit-restore)))))
+                      (car (window-parameter window 'quit-restore))))
+        (frame (window-frame window)))
+
     (when help-buffer
       ;; Handle `help-window-point-marker'.
       (when (eq (marker-buffer help-window-point-marker) help-buffer)
@@ -1220,13 +1239,27 @@ Return VALUE."
        ;; Reset `help-window-point-marker'.
        (set-marker help-window-point-marker nil))
 
+      ;; If the help window appears on another frame, select it if
+      ;; `help-window-select' is non-nil and give that frame input focus
+      ;; too.  See also Bug#19012.
+      (when (and help-window-select
+                (frame-live-p help-window-old-frame)
+                (not (eq frame help-window-old-frame)))
+       (select-window window)
+       (select-frame-set-input-focus frame))
+
       (cond
        ((or (eq window (selected-window))
-           (and (or (eq help-window-select t)
-                    (eq help-setup 'frame)
+           ;; If the help window is on the selected frame, select
+           ;; it if `help-window-select' is t or `help-window-select'
+           ;; is 'other, the frame contains at least three windows, and
+           ;; the help window did show another buffer before.  See also
+           ;; Bug#11039.
+           (and (eq frame (selected-frame))
+                (or (eq help-window-select t)
                     (and (eq help-window-select 'other)
-                         (eq (window-frame window) (selected-frame))
-                         (> (length (window-list nil 'no-mini)) 2)))
+                         (> (length (window-list nil 'no-mini)) 2)
+                         (not (eq help-setup 'same))))
                 (select-window window)))
        ;; The help window is or gets selected ...
        (help-window-display-message
@@ -1235,12 +1268,13 @@ Return VALUE."
           ;; ... and is new, ...
           "Type \"q\" to delete help window")
          ((eq help-setup 'frame)
+          ;; ... on a new frame, ...
           "Type \"q\" to quit the help frame")
          ((eq help-setup 'other)
           ;; ... or displayed some other buffer before.
           "Type \"q\" to restore previous buffer"))
         window t))
-       ((and (eq (window-frame window) (selected-frame))
+       ((and (eq (window-frame window) help-window-old-frame)
             (= (length (window-list nil 'no-mini)) 2))
        ;; There are two windows on the help window's frame and the
        ;; other one is the selected one.
@@ -1297,6 +1331,7 @@ the help window if the current value of the user option
            (cons 'help-mode-setup temp-buffer-window-setup-hook))
           (temp-buffer-window-show-hook
            (cons 'help-mode-finish temp-buffer-window-show-hook)))
+       (setq help-window-old-frame (selected-frame))
        (with-temp-buffer-window
        ,buffer-name nil 'help-window-setup (progn ,@body)))))
 
@@ -1410,7 +1445,7 @@ the same names as used in the original source code, when 
possible."
                    (let ((name (symbol-name arg)))
                      (cond
                        ((string-match "\\`&" name) arg)
-                       ((string-match "\\`_" name)
+                       ((string-match "\\`_." name)
                         (intern (upcase (substring name 1))))
                        (t (intern (upcase name)))))))
                arglist)))
diff --git a/lisp/hex-util.el b/lisp/hex-util.el
index a768d8d..e3938b1 100644
--- a/lisp/hex-util.el
+++ b/lisp/hex-util.el
@@ -1,6 +1,6 @@
 ;;; hex-util.el --- Functions to encode/decode hexadecimal string.
 
-;; Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Shuhei KOBAYASHI <address@hidden>
 ;; Keywords: data
diff --git a/lisp/hexl.el b/lisp/hexl.el
index 5c23f49..27d4659 100644
--- a/lisp/hexl.el
+++ b/lisp/hexl.el
@@ -1,6 +1,7 @@
 ;;; hexl.el --- edit a file in a hex dump format using the hexl filter -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1989, 1994, 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1994, 1998, 2001-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Keith Gabryelski <address@hidden>
 ;; Maintainer: address@hidden
@@ -394,8 +395,8 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode.
     (add-hook 'change-major-mode-hook 'hexl-maybe-dehexlify-buffer nil t)
 
     ;; Set a callback function for eldoc.
-    (hexl-mode--setq-local 'eldoc-documentation-function
-                           #'hexl-print-current-point-info)
+    (add-function :before-until (local 'eldoc-documentation-function)
+                  #'hexl-print-current-point-info)
     (eldoc-add-command-completions "hexl-")
     (eldoc-remove-command "hexl-save-buffer"
                          "hexl-current-address")
diff --git a/lisp/hfy-cmap.el b/lisp/hfy-cmap.el
index e1f7f0d..b7d3b34 100644
--- a/lisp/hfy-cmap.el
+++ b/lisp/hfy-cmap.el
@@ -1,6 +1,6 @@
 ;;; hfy-cmap.el --- Fallback colour name -> rgb mapping for `htmlfontify'
 
-;; Copyright (C) 2002-2003, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2009-2015 Free Software Foundation, Inc.
 
 ;; Emacs Lisp Archive Entry
 ;; Package: htmlfontify
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el
index 98a26dd..65a4561 100644
--- a/lisp/hi-lock.el
+++ b/lisp/hi-lock.el
@@ -1,6 +1,6 @@
 ;;; hi-lock.el --- minor mode for interactive automatic highlighting  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: David M. Koppelman <address@hidden>
 ;; Keywords: faces, minor-mode, matching, display
diff --git a/lisp/hilit-chg.el b/lisp/hilit-chg.el
index 0960aee..8d01294 100644
--- a/lisp/hilit-chg.el
+++ b/lisp/hilit-chg.el
@@ -1,6 +1,6 @@
 ;;; hilit-chg.el --- minor mode displaying buffer changes with special face
 
-;; Copyright (C) 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Richard Sharman <address@hidden>
 ;; Keywords: faces
diff --git a/lisp/hippie-exp.el b/lisp/hippie-exp.el
index ec6007e..b167671 100644
--- a/lisp/hippie-exp.el
+++ b/lisp/hippie-exp.el
@@ -1,6 +1,6 @@
 ;;; hippie-exp.el --- expand text trying various ways to find its expansion
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Anders Holst <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/hl-line.el b/lisp/hl-line.el
index 5e66fe5..3524348 100644
--- a/lisp/hl-line.el
+++ b/lisp/hl-line.el
@@ -1,6 +1,6 @@
 ;;; hl-line.el --- highlight the current line  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author:  Dave Love <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el
index 5128ca8..719cb82 100644
--- a/lisp/htmlfontify.el
+++ b/lisp/htmlfontify.el
@@ -1,6 +1,6 @@
 ;;; htmlfontify.el --- htmlize a buffer/source tree with optional hyperlinks
 
-;; Copyright (C) 2002-2003, 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2009-2015 Free Software Foundation, Inc.
 
 ;; Emacs Lisp Archive Entry
 ;; Package: htmlfontify
@@ -2411,7 +2411,7 @@ You may also want to set `hfy-page-header' and 
`hfy-page-footer'."
     (load file 'NOERROR nil nil) ))
 
 
-;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" 
"27dc80b0f7187aaf582805a8f887819a")
+;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" 
"ce07a28b93c09032fd6b225ad74be0df")
 ;;; Generated autoloads from hfy-cmap.el
 
 (autoload 'htmlfontify-load-rgb-file "hfy-cmap" "\
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index 4b13b9a..1088771 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -1,6 +1,6 @@
 ;;; ibuf-ext.el --- extensions for ibuffer  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Colin Walters <address@hidden>
 ;; Maintainer: John Paul Wallington <address@hidden>
diff --git a/lisp/ibuf-macs.el b/lisp/ibuf-macs.el
index 96701ee..cf7f39e 100644
--- a/lisp/ibuf-macs.el
+++ b/lisp/ibuf-macs.el
@@ -1,6 +1,6 @@
 ;;; ibuf-macs.el --- macros for ibuffer  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Colin Walters <address@hidden>
 ;; Maintainer: John Paul Wallington <address@hidden>
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index 5541bbb..8bd1e46 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -1,6 +1,6 @@
 ;;; ibuffer.el --- operate on buffers like dired  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Colin Walters <address@hidden>
 ;; Maintainer: John Paul Wallington <address@hidden>
@@ -2597,7 +2597,7 @@ will be inserted before the group at point."
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" 
"0d2393d1b47136bc7b1ac41593527f02")
+;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" 
"442bac528ce7a9a20bb191d0eb08cbd8")
 ;;; Generated autoloads from ibuf-ext.el
 
 (autoload 'ibuffer-auto-mode "ibuf-ext" "\
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 95a6e1b..ee28112 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -1,7 +1,7 @@
 ;;; icomplete.el --- minibuffer completion incremental feedback
 
-;; Copyright (C) 1992-1994, 1997, 1999, 2001-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1992-1994, 1997, 1999, 2001-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Ken Manheimer <address@hidden>
 ;; Maintainer: Ken Manheimer <address@hidden>
diff --git a/lisp/ido.el b/lisp/ido.el
index bda2525..1f4e3fa 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -1,6 +1,6 @@
 ;;; ido.el --- interactively do things with buffers and files
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <address@hidden>
 ;; Based on: iswitchb by Stephen Eglen <address@hidden>
@@ -208,13 +208,13 @@
 ;;
 ;; Customize the Ido group to change the Ido functionality.
 ;;
-;; To modify the keybindings, use the ido-setup-hook.  For example:
-;;(add-hook 'ido-setup-hook 'ido-my-keys)
+;; To modify the keybindings, use `define-key' on
+;; `ido-common-completion-map' or one of the specialized keymaps:
+;; `ido-file-dir-completion-map', `ido-file-completion-map' or
+;; `ido-buffer-completion-map'.
 ;;
-;;(defun ido-my-keys ()
-;;  "Add my keybindings for ido."
-;;  (define-key ido-completion-map " " 'ido-next-match)
-;;  )
+;; (with-eval-after-load 'ido
+;;   (define-key ido-common-completion-map " " 'ido-next-match))
 
 ;; Seeing all the matching buffers or files
 ;; ----------------------------------------
@@ -323,8 +323,8 @@
 
 (defvar recentf-list)
 
-;;; User Variables
-;;
+;;;; Options
+
 ;; These are some things you might want to change.
 
 (defun ido-fractionp (n)
@@ -978,25 +978,90 @@ The fallback command is passed as an argument to the 
functions."
   :type 'hook
   :group 'ido)
 
-;;; Internal Variables
-
-;; Persistent variables
-
-(defvar ido-completion-map nil
-  "Currently active keymap for Ido commands.")
+;;;; Keymaps
 
-(defvar ido-common-completion-map nil
+(defvar ido-common-completion-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map minibuffer-local-map)
+    (define-key map "\C-a" 'ido-toggle-ignore)
+    (define-key map "\C-c" 'ido-toggle-case)
+    (define-key map "\C-e" 'ido-edit-input)
+    (define-key map "\t" 'ido-complete)
+    (define-key map " " 'ido-complete-space)
+    (define-key map "\C-j" 'ido-select-text)
+    (define-key map "\C-m" 'ido-exit-minibuffer)
+    (define-key map "\C-p" 'ido-toggle-prefix)
+    (define-key map "\C-r" 'ido-prev-match)
+    (define-key map "\C-s" 'ido-next-match)
+    (define-key map [?\C-.] 'ido-next-match)
+    (define-key map [?\C-,] 'ido-prev-match)
+    (define-key map "\C-t" 'ido-toggle-regexp)
+    (define-key map "\C-z" 'ido-undo-merge-work-directory)
+    (define-key map [(control ?\s)] 'ido-restrict-to-matches)
+    (define-key map [(meta ?\s)] 'ido-take-first-match)
+    (define-key map [(control ?@)] 'ido-restrict-to-matches)
+    (define-key map [right] 'ido-next-match)
+    (define-key map [left] 'ido-prev-match)
+    (define-key map "?" 'ido-completion-help)
+    (define-key map "\C-b" 'ido-magic-backward-char)
+    (define-key map "\C-f" 'ido-magic-forward-char)
+    (define-key map "\C-d" 'ido-magic-delete-char)
+    map)
   "Keymap for all Ido commands.")
 
-(defvar ido-file-completion-map nil
-  "Keymap for Ido file commands.")
-
-(defvar ido-file-dir-completion-map nil
+(defvar ido-file-dir-completion-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map ido-common-completion-map)
+    (define-key map "\C-x\C-b" 'ido-enter-switch-buffer)
+    (define-key map "\C-x\C-f" 'ido-fallback-command)
+    (define-key map "\C-x\C-d" 'ido-enter-dired)
+    (define-key map [down] 'ido-next-match-dir)
+    (define-key map [up]   'ido-prev-match-dir)
+    (define-key map [(meta up)] 'ido-prev-work-directory)
+    (define-key map [(meta down)] 'ido-next-work-directory)
+    (define-key map [backspace] 'ido-delete-backward-updir)
+    (define-key map "\d"        'ido-delete-backward-updir)
+    (define-key map [remap delete-backward-char] 'ido-delete-backward-updir) ; 
BS
+    (define-key map [remap backward-kill-word] 
'ido-delete-backward-word-updir)  ; M-DEL
+    (define-key map [(control backspace)] 'ido-up-directory)
+    (define-key map "\C-l" 'ido-reread-directory)
+    (define-key map [(meta ?d)] 'ido-wide-find-dir-or-delete-dir)
+    (define-key map [(meta ?b)] 'ido-push-dir)
+    (define-key map [(meta ?v)] 'ido-push-dir-first)
+    (define-key map [(meta ?f)] 'ido-wide-find-file-or-pop-dir)
+    (define-key map [(meta ?k)] 'ido-forget-work-directory)
+    (define-key map [(meta ?m)] 'ido-make-directory)
+    (define-key map [(meta ?n)] 'ido-next-work-directory)
+    (define-key map [(meta ?o)] 'ido-prev-work-file)
+    (define-key map [(meta control ?o)] 'ido-next-work-file)
+    (define-key map [(meta ?p)] 'ido-prev-work-directory)
+    (define-key map [(meta ?s)] 'ido-merge-work-directories)
+    map)
   "Keymap for Ido file and directory commands.")
 
-(defvar ido-buffer-completion-map nil
+(defvar ido-file-completion-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map ido-file-dir-completion-map)
+    (define-key map "\C-k" 'ido-delete-file-at-head)
+    (define-key map "\C-o" 'ido-copy-current-word)
+    (define-key map "\C-w" 'ido-copy-current-file-name)
+    (define-key map [(meta ?l)] 'ido-toggle-literal)
+    map)
+  "Keymap for Ido file commands.")
+
+(defvar ido-buffer-completion-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map ido-common-completion-map)
+    (define-key map "\C-x\C-f" 'ido-enter-find-file)
+    (define-key map "\C-x\C-b" 'ido-fallback-command)
+    (define-key map "\C-k" 'ido-kill-buffer-at-head)
+    (define-key map [?\C-\S-b] 'ido-bury-buffer-at-head)
+    (define-key map "\C-o" 'ido-toggle-virtual-buffers)
+    map)
   "Keymap for Ido buffer commands.")
 
+;;;; Persistent variables
+
 (defvar  ido-file-history nil
   "History of files selected using `ido-find-file'.")
 
@@ -1027,7 +1092,10 @@ Each element in the list is of the form (DIR (MTIME) 
FILE...).")
 Intended to be let-bound by functions which call Ido repeatedly.
 Should never be set permanently.")
 
-;; Temporary storage
+;;;; Temporary storage
+
+(defvar ido-completion-map nil
+  "Currently active keymap for Ido commands.")
 
 (defvar ido-eoinput 1
   "Point where minibuffer input ends and completion info begins.
@@ -1086,13 +1154,14 @@ Value is an integer which is number of chars to right 
of prompt.")
 This is a copy of `recentf-list', pared down and with faces applied.
 Only used if `ido-use-virtual-buffers' is non-nil.")
 
-;;; Variables with dynamic bindings.
-;;; Declared here to keep the byte compiler quiet.
+;;;; Variables with dynamic bindings.
+
+;; These are declared here to keep the byte compiler quiet.
 
 ;; Stores the current ido item type ('file, 'dir, 'buffer, or 'list).
 (defvar ido-cur-item)
 
-;;; Stores the current default item
+;; Stores the current default item.
 (defvar ido-default-item)
 
 ;; Stores the current list of items that will be searched through.
@@ -1502,7 +1571,6 @@ Removes badly formatted data and ignored directories."
   (ido-save-history))
 
 (defun ido-common-initialization ()
-  (ido-init-completion-maps)
   (add-hook 'minibuffer-setup-hook 'ido-minibuffer-setup)
   (add-hook 'choose-completion-string-functions 'ido-choose-completion-string))
 
@@ -1596,119 +1664,51 @@ This function also adds a hook to the minibuffer."
 
 
 ;;; IDO KEYMAP
-(defun ido-init-completion-maps ()
-  "Set up the completion keymaps used by Ido."
 
-  ;; Common map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-a" 'ido-toggle-ignore)
-    (define-key map "\C-c" 'ido-toggle-case)
-    (define-key map "\C-e" 'ido-edit-input)
-    (define-key map "\t" 'ido-complete)
-    (define-key map " " 'ido-complete-space)
-    (define-key map "\C-j" 'ido-select-text)
-    (define-key map "\C-m" 'ido-exit-minibuffer)
-    (define-key map "\C-p" 'ido-toggle-prefix)
-    (define-key map "\C-r" 'ido-prev-match)
-    (define-key map "\C-s" 'ido-next-match)
-    (define-key map [?\C-.] 'ido-next-match)
-    (define-key map [?\C-,] 'ido-prev-match)
-    (define-key map "\C-t" 'ido-toggle-regexp)
-    (define-key map "\C-z" 'ido-undo-merge-work-directory)
-    (define-key map [(control ?\s)] 'ido-restrict-to-matches)
-    (define-key map [(meta ?\s)] 'ido-take-first-match)
-    (define-key map [(control ?@)] 'ido-restrict-to-matches)
-    (define-key map [right] 'ido-next-match)
-    (define-key map [left] 'ido-prev-match)
-    (define-key map "?" 'ido-completion-help)
-    ;; Magic commands.
-    (define-key map "\C-b" 'ido-magic-backward-char)
-    (define-key map "\C-f" 'ido-magic-forward-char)
-    (define-key map "\C-d" 'ido-magic-delete-char)
-    (set-keymap-parent map minibuffer-local-map)
-    (setq ido-common-completion-map map))
-
-  ;; File and directory map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-x\C-b" 'ido-enter-switch-buffer)
-    (define-key map "\C-x\C-f" 'ido-fallback-command)
-    (define-key map "\C-x\C-d" 'ido-enter-dired)
-    (define-key map [down] 'ido-next-match-dir)
-    (define-key map [up]   'ido-prev-match-dir)
-    (define-key map [(meta up)] 'ido-prev-work-directory)
-    (define-key map [(meta down)] 'ido-next-work-directory)
-    (define-key map [backspace] 'ido-delete-backward-updir)
-    (define-key map "\d"        'ido-delete-backward-updir)
-    (define-key map [remap delete-backward-char] 'ido-delete-backward-updir) ; 
BS
-    (define-key map [remap backward-kill-word] 
'ido-delete-backward-word-updir)  ; M-DEL
-
-    (define-key map [(control backspace)] 'ido-up-directory)
-    (define-key map "\C-l" 'ido-reread-directory)
-    (define-key map [(meta ?d)] 'ido-wide-find-dir-or-delete-dir)
-    (define-key map [(meta ?b)] 'ido-push-dir)
-    (define-key map [(meta ?v)] 'ido-push-dir-first)
-    (define-key map [(meta ?f)] 'ido-wide-find-file-or-pop-dir)
-    (define-key map [(meta ?k)] 'ido-forget-work-directory)
-    (define-key map [(meta ?m)] 'ido-make-directory)
-    (define-key map [(meta ?n)] 'ido-next-work-directory)
-    (define-key map [(meta ?o)] 'ido-prev-work-file)
-    (define-key map [(meta control ?o)] 'ido-next-work-file)
-    (define-key map [(meta ?p)] 'ido-prev-work-directory)
-    (define-key map [(meta ?s)] 'ido-merge-work-directories)
-    (set-keymap-parent map ido-common-completion-map)
-    (setq ido-file-dir-completion-map map))
-
-  ;; File only map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-k" 'ido-delete-file-at-head)
-    (define-key map "\C-o" 'ido-copy-current-word)
-    (define-key map "\C-w" 'ido-copy-current-file-name)
-    (define-key map [(meta ?l)] 'ido-toggle-literal)
-    (set-keymap-parent map ido-file-dir-completion-map)
-    (setq ido-file-completion-map map))
+(defalias 'ido-init-completion-maps 'ignore "")
+(make-obsolete 'ido-init-completion-maps "it does nothing." "25.1")
 
-  ;; Buffer map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-x\C-f" 'ido-enter-find-file)
-    (define-key map "\C-x\C-b" 'ido-fallback-command)
-    (define-key map "\C-k" 'ido-kill-buffer-at-head)
-    (define-key map "\C-o" 'ido-toggle-virtual-buffers)
-    (set-keymap-parent map ido-common-completion-map)
-    (setq ido-buffer-completion-map map)))
+(defun ido-setup-completion-map ()
+  "Set up the completion keymap used by Ido.
 
+Create a keymap, bind `ido-completion-map' to it, and depending
+on what is being completed (`ido-cur-item') set its parent keymap
+to one of:
 
-(defun ido-setup-completion-map ()
-  "Set up the keymap for Ido."
+  `ido-common-completion-map'
+  `ido-file-dir-completion-map'
+  `ido-file-completion-map'
+  `ido-buffer-completion-map'
 
+If option `ido-context-switch-command' is non-nil or `viper-mode'
+is enabled then some keybindings are changed in the keymap."
   ;; generated every time so that it can inherit new functions.
   (let ((map (make-sparse-keymap))
        (viper-p (if (boundp 'viper-mode) viper-mode)))
-
     (when viper-p
       (define-key map [remap viper-intercept-ESC-key] 'ignore))
-
-    (cond
-     ((memq ido-cur-item '(file dir))
+    (pcase ido-cur-item
+     ((or `file `dir)
       (when ido-context-switch-command
        (define-key map "\C-x\C-b" ido-context-switch-command)
        (define-key map "\C-x\C-d" 'ignore))
       (when viper-p
-       (define-key map [remap viper-backward-char] 'ido-delete-backward-updir)
-       (define-key map [remap viper-del-backward-char-in-insert] 
'ido-delete-backward-updir)
-       (define-key map [remap viper-delete-backward-word] 
'ido-delete-backward-word-updir))
+       (define-key map [remap viper-backward-char]
+         'ido-delete-backward-updir)
+       (define-key map [remap viper-del-backward-char-in-insert]
+         'ido-delete-backward-updir)
+       (define-key map [remap viper-delete-backward-word]
+         'ido-delete-backward-word-updir))
       (set-keymap-parent map
                         (if (eq ido-cur-item 'file)
                             ido-file-completion-map
                           ido-file-dir-completion-map)))
-
-     ((eq ido-cur-item 'buffer)
+     (`buffer
       (when ido-context-switch-command
        (define-key map "\C-x\C-f" ido-context-switch-command))
       (set-keymap-parent map ido-buffer-completion-map))
-
-     (t
+     (_
       (set-keymap-parent map ido-common-completion-map)))
-
     (setq ido-completion-map map)))
 
 (defun ido-final-slash (dir &optional fix-it)
@@ -4026,6 +4026,20 @@ If cursor is not at the end of the user input, delete to 
end of input."
        (setq ido-cur-list (delete buf ido-cur-list))
        (setq ido-rescan t))))))
 
+;;; BURY CURRENT BUFFER
+(defun ido-bury-buffer-at-head ()
+  "Bury the buffer at the head of `ido-matches'."
+  (interactive)
+  (let ((enable-recursive-minibuffers t)
+        (buf (ido-name (car ido-matches)))
+        (nextbuf (cadr ido-matches)))
+    (when (get-buffer buf)
+      (bury-buffer buf)
+      (setq ido-default-item nextbuf
+            ido-text-init ido-text
+            ido-exit 'refresh)
+      (exit-minibuffer))))
+
 ;;; DELETE CURRENT FILE
 (defun ido-delete-file-at-head ()
   "Delete the file at the head of `ido-matches'.
diff --git a/lisp/ielm.el b/lisp/ielm.el
index 37e66cc..be877eb 100644
--- a/lisp/ielm.el
+++ b/lisp/ielm.el
@@ -1,7 +1,7 @@
 ;;; -*- lexical-binding: t -*-
 ;;; ielm.el --- interaction mode for Emacs Lisp
 
-;; Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Smith <address@hidden>
 ;; Maintainer: address@hidden
@@ -380,7 +380,7 @@ nonempty, then flushes the buffer."
                      (*3 ***)
                      (active-process (ielm-process))
                      (old-standard-output standard-output)
-                     new-standard-output 
+                     new-standard-output
                      ielm-temp-buffer)
                 (set-match-data ielm-match-data)
                 (save-excursion
@@ -542,8 +542,8 @@ Customized bindings may be defined in `ielm-map', which 
currently contains:
   (set (make-local-variable 'completion-at-point-functions)
        '(comint-replace-by-expanded-history
          ielm-complete-filename elisp-completion-at-point))
-  (setq-local eldoc-documentation-function
-              #'elisp-eldoc-documentation-function)
+  (add-function :before-until (local 'eldoc-documentation-function)
+                #'elisp-eldoc-documentation-function)
   (set (make-local-variable 'ielm-prompt-internal) ielm-prompt)
   (set (make-local-variable 'comint-prompt-read-only) ielm-prompt-read-only)
   (setq comint-get-old-input 'ielm-get-old-input)
diff --git a/lisp/iimage.el b/lisp/iimage.el
index 46cb4d6..5852c94 100644
--- a/lisp/iimage.el
+++ b/lisp/iimage.el
@@ -1,6 +1,6 @@
 ;;; iimage.el --- Inline image minor mode.
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: KOSEKI Yoshinori <address@hidden>
 ;; Maintainer: KOSEKI Yoshinori <address@hidden>
diff --git a/lisp/image-dired.el b/lisp/image-dired.el
index 114deab..013fc5a 100644
--- a/lisp/image-dired.el
+++ b/lisp/image-dired.el
@@ -1,6 +1,6 @@
 ;;; image-dired.el --- use dired to browse and manipulate your images
 ;;
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 ;;
 ;; Version: 0.4.11
 ;; Keywords: multimedia
diff --git a/lisp/image-file.el b/lisp/image-file.el
index 55074a8..eaac575 100644
--- a/lisp/image-file.el
+++ b/lisp/image-file.el
@@ -1,6 +1,6 @@
 ;;; image-file.el --- support for visiting image files
 ;;
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <address@hidden>
 ;; Keywords: multimedia
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index b94162d..9e527f1 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -1,6 +1,6 @@
 ;;; image-mode.el --- support for visiting image files  -*- lexical-binding: t 
-*-
 ;;
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Richard Stallman <address@hidden>
 ;; Keywords: multimedia
diff --git a/lisp/image.el b/lisp/image.el
index 8430d36..b023491 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -1,6 +1,6 @@
 ;;; image.el --- image API
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: multimedia
diff --git a/lisp/imenu.el b/lisp/imenu.el
index bad3dd1..65c5282 100644
--- a/lisp/imenu.el
+++ b/lisp/imenu.el
@@ -1,6 +1,6 @@
 ;;; imenu.el --- framework for mode-specific buffer indexes  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1994-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Ake Stenhoff <address@hidden>
 ;;         Lars Lindberg <address@hidden>
diff --git a/lisp/indent.el b/lisp/indent.el
index 2082070..74e73a6 100644
--- a/lisp/indent.el
+++ b/lisp/indent.el
@@ -1,6 +1,6 @@
 ;;; indent.el --- indentation commands for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985, 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Package: emacs
diff --git a/lisp/info-look.el b/lisp/info-look.el
index 5bbaa37..1baea46 100644
--- a/lisp/info-look.el
+++ b/lisp/info-look.el
@@ -1,7 +1,7 @@
 ;;; info-look.el --- major-mode-sensitive Info index lookup facility -*- 
lexical-binding: t -*-
 ;; An older version of this was known as libc.el.
 
-;; Copyright (C) 1995-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Ralph Schleicher <address@hidden>
 ;;         (did not show signs of life (Nov 2001)  -stef)
diff --git a/lisp/info-xref.el b/lisp/info-xref.el
index ddd922c..3e871a1 100644
--- a/lisp/info-xref.el
+++ b/lisp/info-xref.el
@@ -1,6 +1,6 @@
 ;;; info-xref.el --- check external references in an Info document
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Kevin Ryde <address@hidden>
 ;; Keywords: docs
diff --git a/lisp/info.el b/lisp/info.el
index 2a8ba90..0159661 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -1,6 +1,6 @@
 ;; info.el --- Info package for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1992-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: help
@@ -4013,7 +4013,6 @@ If FORK is non-nil, it is passed to `Info-goto-node'."
     (define-key map "," 'Info-index-next)
     (define-key map "\177" 'Info-scroll-down)
     (define-key map [mouse-2] 'Info-mouse-follow-nearest-node)
-    (define-key map [down-mouse-2] 'ignore) ;Override potential global binding.
     (define-key map [follow-link] 'mouse-face)
     (define-key map [XF86Back] 'Info-history-back)
     (define-key map [XF86Forward] 'Info-history-forward)
@@ -5278,13 +5277,15 @@ type returned by `Info-bookmark-make-record', which 
see."
 (defun info-display-manual (manual)
   "Display an Info buffer displaying MANUAL.
 If there is an existing Info buffer for MANUAL, display it.
-Otherwise, visit the manual in a new Info buffer."
+Otherwise, visit the manual in a new Info buffer.  In interactive
+use, a prefix argument directs this command to limit the
+completion alternatives to currently visited manuals."
   (interactive
    (list
     (progn
       (info-initialize)
       (completing-read "Manual name: "
-                      (info--manual-names)
+                      (info--manual-names current-prefix-arg)
                       nil t))))
   (let ((blist (buffer-list))
        (manual-re (concat "\\(/\\|\\`\\)" manual "\\(\\.\\|\\'\\)"))
@@ -5303,7 +5304,7 @@ Otherwise, visit the manual in a new Info buffer."
       (info (Info-find-file manual)
            (generate-new-buffer-name "*info*")))))
 
-(defun info--manual-names ()
+(defun info--manual-names (visited-only)
   (let (names)
     (dolist (buffer (buffer-list))
       (with-current-buffer buffer
@@ -5314,11 +5315,12 @@ Otherwise, visit the manual in a new Info buffer."
                    (file-name-nondirectory Info-current-file))
                   names))))
     (delete-dups (append (nreverse names)
-                        (all-completions
-                         ""
-                         (apply-partially 'Info-read-node-name-2
-                                          Info-directory-list
-                                          (mapcar 'car Info-suffix-list)))))))
+                        (when (not visited-only)
+                          (all-completions
+                           ""
+                           (apply-partially 'Info-read-node-name-2
+                                            Info-directory-list
+                                            (mapcar 'car 
Info-suffix-list))))))))
 
 (provide 'info)
 
diff --git a/lisp/informat.el b/lisp/informat.el
index c28d1ff..93fec09 100644
--- a/lisp/informat.el
+++ b/lisp/informat.el
@@ -1,6 +1,6 @@
 ;;; informat.el --- info support functions package for Emacs
 
-;; Copyright (C) 1986, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: help
diff --git a/lisp/international/.gitignore b/lisp/international/.gitignore
deleted file mode 100644
index 161b312..0000000
--- a/lisp/international/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# Generated Unicode files.
-charprop.el
-uni-bidi.el
-uni-category.el
-uni-combining.el
-uni-comment.el
-uni-decimal.el
-uni-decomposition.el
-uni-digit.el
-uni-lowercase.el
-uni-mirrored.el
-uni-name.el
-uni-numeric.el
-uni-old-name.el
-uni-titlecase.el
-uni-uppercase.el
diff --git a/lisp/international/ccl.el b/lisp/international/ccl.el
index 280e3d7..429c14b 100644
--- a/lisp/international/ccl.el
+++ b/lisp/international/ccl.el
@@ -1,6 +1,6 @@
 ;;; ccl.el --- CCL (Code Conversion Language) compiler
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -1355,6 +1355,14 @@ IF :=    (if EXPRESSION CCL_BLOCK_0 CCL_BLOCK_1)
 BRANCH := (branch EXPRESSION CCL_BLOCK_0 [CCL_BLOCK_1 ...])
 
 ;; Execute STATEMENTs until (break) or (end) is executed.
+
+;; Create a block of STATEMENTs for repeating.  The STATEMENTs
+;; are executed sequentially until REPEAT or BREAK is executed.
+;; If REPEAT statement is executed, STATEMENTs are executed from the
+;; start again.  If BREAK statements is executed, the execution
+;; exits from the block.  If neither REPEAT nor BREAK is
+;; executed, the execution exits from the block after executing the
+;; last STATEMENT.
 LOOP := (loop STATEMENT [STATEMENT ...])
 
 ;; Terminate the most inner loop.
@@ -1501,17 +1509,42 @@ ARRAY := `[' integer ... `]'
 
 
 TRANSLATE :=
-       (translate-character REG(table) REG(charset) REG(codepoint))
-       | (translate-character SYMBOL REG(charset) REG(codepoint))
-        ;; SYMBOL must refer to a table defined by `define-translation-table'.
+       ;; Decode character SRC, translate it by translate table
+       ;; TABLE, and encode it back to DST.  TABLE is specified
+       ;; by its id number in REG_0, SRC is specified by its
+       ;; charset id number and codepoint in REG_1 and REG_2
+       ;; respectively.
+       ;; On encoding, the charset of highest priority is selected.
+       ;; After the execution, DST is specified by its charset
+       ;; id number and codepoint in REG_1 and REG_2 respectively.
+       (translate-character REG_0 REG_1 REG_2)
+
+       ;; Same as above except for SYMBOL specifying the name of
+       ;; the translate table defined by `define-translation-table'.
+       | (translate-character SYMBOL REG_1 REG_2)
+
 LOOKUP :=
-       (lookup-character SYMBOL REG(charset) REG(codepoint))
+       ;; Look up character SRC in hash table TABLE.  TABLE is
+       ;; specified by its name in SYMBOL, and SRC is specified by
+       ;; its charset id number and codepoint in REG_1 and REG_2
+       ;; respectively.
+       ;; If its associated value is an integer, set REG_1 to that
+       ;; value, and set r7 to 1.  Otherwise, set r7 to 0.
+       (lookup-character SYMBOL REG_1 REG_2)
+
+       ;; Look up integer value N in hash table TABLE.  TABLE is
+       ;; specified by its name in SYMBOL and N is specified in
+       ;; REG.
+       ;; If its associated value is a character, set REG to that
+       ;; value, and set r7 to 1.  Otherwise, set r7 to 0.
        | (lookup-integer SYMBOL REG(integer))
-        ;; SYMBOL refers to a table defined by `define-translation-hash-table'.
+
 MAP :=
-     (iterate-multiple-map REG REG MAP-IDs)
-     | (map-multiple REG REG (MAP-SET))
-     | (map-single REG REG MAP-ID)
+       ;; The following statements are for internal use only.
+       (iterate-multiple-map REG REG MAP-IDs)
+       | (map-multiple REG REG (MAP-SET))
+       | (map-single REG REG MAP-ID)
+
 MAP-IDs := MAP-ID ...
 MAP-SET := MAP-IDs | (MAP-IDs) MAP-SET
 MAP-ID := integer
diff --git a/lisp/international/characters.el b/lisp/international/characters.el
index daebf8d..247a10d 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -1,6 +1,6 @@
 ;;; characters.el --- set syntax and category for multibyte characters
 
-;; Copyright (C) 1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index e3f49ce..8eb1c0d 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -1,6 +1,6 @@
 ;;; fontset.el --- commands for handling fontset
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/isearch-x.el b/lisp/international/isearch-x.el
index bbe318f..31f841d 100644
--- a/lisp/international/isearch-x.el
+++ b/lisp/international/isearch-x.el
@@ -1,6 +1,6 @@
 ;;; isearch-x.el --- extended isearch handling commands
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/iso-ascii.el b/lisp/international/iso-ascii.el
index a1ce0d9..0359ab8 100644
--- a/lisp/international/iso-ascii.el
+++ b/lisp/international/iso-ascii.el
@@ -1,6 +1,6 @@
 ;;; iso-ascii.el --- set up char tables for ISO 8859/1 on ASCII terminals
 
-;; Copyright (C) 1987, 1995, 1998, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1987, 1995, 1998, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Howard Gayle
diff --git a/lisp/international/iso-cvt.el b/lisp/international/iso-cvt.el
index 4ba81af..61db03d 100644
--- a/lisp/international/iso-cvt.el
+++ b/lisp/international/iso-cvt.el
@@ -1,7 +1,7 @@
 ;;; iso-cvt.el --- translate ISO 8859-1 from/to various encodings -*- coding: 
utf-8 -*-
 ;; This file was formerly called gm-lingo.el.
 
-;; Copyright (C) 1993-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Gschwind <address@hidden>
 ;; Keywords: tex, iso, latin, i18n
diff --git a/lisp/international/iso-transl.el b/lisp/international/iso-transl.el
index 0be4ed9..73bcae0 100644
--- a/lisp/international/iso-transl.el
+++ b/lisp/international/iso-transl.el
@@ -1,6 +1,6 @@
 ;;; iso-transl.el --- keyboard input definitions for ISO 8859-1  -*- coding: 
utf-8 -*-
 
-;; Copyright (C) 1987, 1993-1999, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1987, 1993-1999, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Howard Gayle
diff --git a/lisp/international/ja-dic-cnv.el b/lisp/international/ja-dic-cnv.el
index e908360..edb6d89 100644
--- a/lisp/international/ja-dic-cnv.el
+++ b/lisp/international/ja-dic-cnv.el
@@ -1,6 +1,6 @@
 ;;; ja-dic-cnv.el --- convert a Japanese dictionary (SKK-JISYO.L) to Emacs Lisp
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
diff --git a/lisp/international/kinsoku.el b/lisp/international/kinsoku.el
index 5ba1e1a..f1661ca 100644
--- a/lisp/international/kinsoku.el
+++ b/lisp/international/kinsoku.el
@@ -1,6 +1,6 @@
 ;;; kinsoku.el --- `Kinsoku' processing funcs -*- coding: iso-2022-7bit; -*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/kkc.el b/lisp/international/kkc.el
index c48d35b..90fb151 100644
--- a/lisp/international/kkc.el
+++ b/lisp/international/kkc.el
@@ -1,6 +1,6 @@
 ;;; kkc.el --- Kana Kanji converter    -*- coding: iso-2022-7bit; -*-
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/latexenc.el b/lisp/international/latexenc.el
index 5de9b97..09b8a17 100644
--- a/lisp/international/latexenc.el
+++ b/lisp/international/latexenc.el
@@ -1,6 +1,6 @@
 ;;; latexenc.el --- guess correct coding system in LaTeX files -*-coding: 
utf-8 -*-
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Arne Jørgensen <address@hidden>
 ;; Keywords: mule, coding system, latex
diff --git a/lisp/international/latin1-disp.el 
b/lisp/international/latin1-disp.el
index adaacd2..d598814 100644
--- a/lisp/international/latin1-disp.el
+++ b/lisp/international/latin1-disp.el
@@ -1,6 +1,6 @@
 ;;; latin1-disp.el --- display tables for other ISO 8859 on Latin-1 terminals 
-*-coding: utf-8;-*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: i18n
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 61ecc8b..dcf850d 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -1,6 +1,6 @@
 ;;; mule-cmds.el --- commands for multilingual environment  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/mule-conf.el b/lisp/international/mule-conf.el
index 41ee466..3308dbd 100644
--- a/lisp/international/mule-conf.el
+++ b/lisp/international/mule-conf.el
@@ -1,6 +1,6 @@
 ;;; mule-conf.el --- configure multilingual environment
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 
2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
diff --git a/lisp/international/mule-diag.el b/lisp/international/mule-diag.el
index 13a1785..42e78f9 100644
--- a/lisp/international/mule-diag.el
+++ b/lisp/international/mule-diag.el
@@ -1,6 +1,6 @@
 ;;; mule-diag.el --- show diagnosis of multilingual environment (Mule)
 
-;; Copyright (C) 1997-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -825,10 +825,18 @@ but still contains full information about each coding 
system."
 The IGNORED argument is ignored."
   (print-list "name (opened by):" (aref font-info 0))
   (print-list "       full name:" (aref font-info 1))
+  (and (aref font-info 12)
+       (print-list "       file name:" (aref font-info 12)))
   (print-list "            size:" (format "%2d" (aref font-info 2)))
   (print-list "          height:" (format "%2d" (aref font-info 3)))
   (print-list " baseline-offset:" (format "%2d" (aref font-info 4)))
-  (print-list "relative-compose:" (format "%2d" (aref font-info 5))))
+  (print-list "relative-compose:" (format "%2d" (aref font-info 5)))
+  (print-list "  default-ascent:" (format "%2d" (aref font-info 6)))
+  (print-list "          ascent:" (format "%2d" (aref font-info 8)))
+  (print-list "         descent:" (format "%2d" (aref font-info 9)))
+  (print-list "   average-width:" (format "%2d" (aref font-info 11)))
+  (print-list "     space-width:" (format "%2d" (aref font-info 10)))
+  (print-list "       max-width:" (format "%2d" (aref font-info 7))))
 
 ;;;###autoload
 (defun describe-font (fontname)
diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el
index 42bc5ef..eae787b 100644
--- a/lisp/international/mule-util.el
+++ b/lisp/international/mule-util.el
@@ -1,6 +1,6 @@
 ;;; mule-util.el --- utility functions for multilingual environment (mule)
 
-;; Copyright (C) 1997-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index bb8111e..181474c 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -1,6 +1,6 @@
 ;;; mule.el --- basic commands for multilingual environment
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -593,6 +593,29 @@ as the single-shift area.")
 The remaining arguments must come in pairs ATTRIBUTE VALUE.  ATTRIBUTE
 may be any symbol.
 
+A coding system specifies a rule to decode (i.e. to convert a
+byte sequence to a character sequence) and a rule to encode (the
+opposite of decoding).
+
+The decoding is done by at most 3 steps; the first is to convert
+a byte sequence to a character sequence by one of Emacs'
+internal routines specified by `:coding-type' attribute.  The
+optional second step is to convert the character sequence (the
+result of the first step) by a translation table specified
+by `:decode-translation-table' attribute.  The optional third step
+is to convert the above result by a Lisp function specified
+by `:post-read-conversion' attribute.
+
+The encoding is done by at most 3 steps, which are the reverse
+of the decoding steps.  The optional first step converts a
+character sequence to another character sequence by a Lisp
+function specified by `:pre-write-conversion' attribute.  The
+optional second step converts the above result by a translation
+table specified by `:encode-translation-table' attribute.  The
+third step converts the above result to a byte sequence by one
+of the Emacs's internal routines specified by the `:coding-type'
+attribute.
+
 The following attributes have special meanings.  Those labeled as
 \"(required)\" should not be omitted.
 
@@ -602,27 +625,72 @@ VALUE is a character to display on mode line for the 
coding system.
 
 `:coding-type' (required)
 
-VALUE must be one of `charset', `utf-8', `utf-16', `iso-2022',
-`emacs-mule', `shift-jis', `ccl', `raw-text', `undecided'.
+VALUE specifies the format of byte sequence the coding system
+decodes and encodes to.  It must be one of `charset', `utf-8',
+`utf-16', `iso-2022', `emacs-mule', `shift-jis', `ccl',
+`raw-text', `undecided'.
+
+If VALUE is `charset', the coding system is for handling a
+byte sequence in which each byte or every two- to four-byte
+sequence represents a character code of a charset specified
+by the `:charset-list' attribute.
+
+If VALUE is `utf-8', the coding system is for handling Unicode
+UTF-8 byte sequences.  See also the documentation of the
+attribute `:bom'.
+
+If VALUE is `utf-16', the coding system is for handling Unicode
+UTF-16 byte sequences.  See also the documentation of the
+attributes :bom and `:endian'.
+
+If VALUE is `iso-2022', the coding system is for handling byte
+sequences conforming to ISO/IEC 2022.  See also the documentation
+of the attributes `:charset-list', `:flags', and `:designation'.
+
+If VALUE is `emacs-mule', the coding system is for handling
+byte sequences which Emacs 20 and 21 used for their internal
+representation of characters.
+
+If VALUE is `shift-jis', the coding system is for handling byte
+sequences of Shift_JIS format.  See also the attribute `:charset-list'.
+
+If VALUE is `ccl', the coding system uses CCL programs to decode
+and encode byte sequences.  The CCL programs must be
+specified by the attributes `:ccl-decoder' and `:ccl-encoder'.
+
+If VALUE is `raw-text', the coding system decodes byte sequences
+without any conversions.
 
 `:eol-type'
 
 VALUE is the EOL (end-of-line) format of the coding system.  It must be
 one of `unix', `dos', `mac'.  The symbol `unix' means Unix-like EOL
-\(i.e. single LF), `dos' means DOS-like EOL \(i.e. sequence of CR LF),
-and `mac' means Mac-like EOL \(i.e. single CR).  If omitted, Emacs
-detects the EOL format automatically when decoding.
+\(i.e. a single LF character), `dos' means DOS-like EOL \(i.e. a sequence
+of CR followed by LF), and `mac' means Mac-like EOL \(i.e. a single CR).
+If omitted, Emacs detects the EOL format automatically when decoding.
+
+`:charset-list' (required if `:coding-type' is `charset' or `shift-jis')
+
+VALUE must be a list of charsets supported by the coding system.
+
+If `coding-type:' is `charset', then on decoding and encoding by the
+coding system, if a character belongs to multiple charsets in the
+list, a charset that comes first in the list is selected.
 
-`:charset-list'
+If `:coding-type' is `iso-2022', VALUE may be `iso-2022', which
+indicates that the coding system supports all ISO-2022 based
+charsets.
 
-VALUE must be a list of charsets supported by the coding system.  On
-encoding by the coding system, if a character belongs to multiple
-charsets in the list, a charset that comes earlier in the list is
-selected.  If `:coding-type' is `iso-2022', VALUE may be `iso-2022',
-which indicates that the coding system supports all ISO-2022 based
-charsets.  If `:coding-type' is `emacs-mule', VALUE may be
-`emacs-mule', which indicates that the coding system supports all
-charsets that have the `:emacs-mule-id' property.
+If `:coding-type' is `shift-jis', VALUE must be a list of three
+to four charsets supported by Shift_JIS encoding scheme.  The
+first charset (one dimension) is for code space 0x00..0x7F, the
+second (one dimension) for 0xA1..0xDF, the third (two dimension)
+for 0x8140..0xEFFC, the optional fourth (three dimension) for
+0xF040..0xFCFC.
+
+If `:coding-type' is `emacs-mule', VALUE may be `emacs-mule',
+which indicates that the coding system supports all charsets that
+have the `:emacs-mule-id' property.
 
 `:ascii-compatible-p'
 
@@ -643,9 +711,9 @@ VALUE must be a translation table to use on encoding.
 VALUE must be a function to call after some text is inserted and
 decoded by the coding system itself and before any functions in
 `after-insert-functions' are called.  This function is passed one
-argument; the number of characters in the text to convert, with
+argument: the number of characters in the text to convert, with
 point at the start of the text.  The function should leave point
-the same, and return the new character count.
+unchanged, and should return the new character count.
 
 `:pre-write-conversion'
 
@@ -674,7 +742,7 @@ to lower case.
 `:mime-text-unsuitable'
 
 VALUE non-nil means the `:mime-charset' property names a charset which
-is unsuitable for the top-level media type \"text\".
+is unsuitable for the top-level media of type \"text\".
 
 `:flags'
 
@@ -704,8 +772,8 @@ This attribute is meaningful only when `:coding-type' is 
`iso-2022'.
 
 `:bom'
 
-This attributes specifies whether the coding system uses a `byte order
-mark'.  VALUE must be nil, t, or cons of coding systems whose
+This attributes specifies whether the coding system uses a \"byte order
+mark\".  VALUE must be nil, t, or a cons cell of coding systems whose
 `:coding-type' is `utf-16' or `utf-8'.
 
 If the value is nil, on decoding, don't treat the first two-byte as
@@ -714,9 +782,9 @@ BOM, and on encoding, don't produce BOM bytes.
 If the value is t, on decoding, skip the first two-byte as BOM, and on
 encoding, produce BOM bytes according to the value of `:endian'.
 
-If the value is cons, on decoding, check the first two-byte.  If they
-are 0xFE 0xFF, use the car part coding system of the value.  If they
-are 0xFF 0xFE, use the cdr part coding system of the value.
+If the value is a cons cell, on decoding, check the first two bytes.
+If they are 0xFE 0xFF, use the car part coding system of the value.
+If they are 0xFF 0xFE, use the cdr part coding system of the value.
 Otherwise, treat them as bytes for a normal character.  On encoding,
 produce BOM bytes according to the value of `:endian'.
 
@@ -730,17 +798,17 @@ little-endian respectively.  The default value is `big'.
 
 This attribute is meaningful only when `:coding-type' is `utf-16'.
 
-`:ccl-decoder'
+`:ccl-decoder' (required if :coding-type is `ccl')
 
-VALUE is a symbol representing the registered CCL program used for
-decoding.  This attribute is meaningful only when `:coding-type' is
-`ccl'.
+VALUE is a CCL program name defined by `define-ccl-program'.  The
+CCL program reads a byte sequence and writes a character sequence
+as a decoding result.
 
-`:ccl-encoder'
+`:ccl-encoder' (required if :coding-type is `ccl')
 
-VALUE is a symbol representing the registered CCL program used for
-encoding.  This attribute is meaningful only when `:coding-type' is
-`ccl'.
+VALUE is a CCL program name defined by `define-ccl-program'.  The
+CCL program reads a character sequence and writes a byte sequence
+as an encoding result.
 
 `:inhibit-null-byte-detection'
 
@@ -2249,7 +2317,13 @@ ALIST is an alist, each element has the form (FROM . TO).
 FROM and TO are a character or a vector of characters.
 If FROM is a character, that character is translated to TO.
 If FROM is a vector of characters, that sequence is translated to TO.
-The first extra-slot of the value is a translation table for reverse mapping."
+The first extra-slot of the value is a translation table for reverse mapping.
+
+FROM and TO may be nil.  If TO is nil, the translation from FROM
+to nothing is defined in the translation table and that element
+is ignored in the reverse map.  If FROM is nil, the translation
+from TO to nothing is defined in the reverse map only.  A vector
+of length zero has the same meaning as specifying nil."
   (let ((tables (vector (make-char-table 'translation-table)
                        (make-char-table 'translation-table)))
        table max-lookup from to idx val)
@@ -2262,20 +2336,23 @@ The first extra-slot of the value is a translation 
table for reverse mapping."
          (setq from (cdr elt) to (car elt)))
        (if (characterp from)
            (setq idx from)
-         (setq idx (aref from 0)
-               max-lookup (max max-lookup (length from))))
-       (setq val (aref table idx))
-       (if val
-           (progn
-             (or (consp val)
-                 (setq val (list (cons (vector idx) val))))
-             (if (characterp from)
-                 (setq from (vector from)))
-             (setq val (nconc val (list (cons from to)))))
-         (if (characterp from)
-             (setq val to)
-           (setq val (list (cons from to)))))
-       (aset table idx val))
+         (if (= (length from) 0)
+             (setq idx nil)
+           (setq idx (aref from 0)
+                 max-lookup (max max-lookup (length from)))))
+       (when idx
+         (setq val (aref table idx))
+         (if val
+             (progn
+               (or (consp val)
+                   (setq val (list (cons (vector idx) val))))
+               (if (characterp from)
+                   (setq from (vector from)))
+               (setq val (nconc val (list (cons from to)))))
+           (if (characterp from)
+               (setq val to)
+             (setq val (list (cons from to)))))
+         (aset table idx val)))
       (set-char-table-extra-slot table 1 max-lookup))
     (set-char-table-extra-slot (aref tables 0) 0 (aref tables 1))
     (aref tables 0)))
diff --git a/lisp/international/ogonek.el b/lisp/international/ogonek.el
index a6ddbd4..27ac17c 100644
--- a/lisp/international/ogonek.el
+++ b/lisp/international/ogonek.el
@@ -1,6 +1,6 @@
 ;;; ogonek.el --- change the encoding of Polish diacritics
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: W{\l}odek Bzyl
 ;;        Ryszard Kubiak
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index d670191..2755fd6 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -1,6 +1,6 @@
 ;;; quail.el --- provides simple input method for multilingual text
 
-;; Copyright (C) 1997-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -2985,7 +2985,7 @@ of each directory."
        quail-dirs list-buf pkg-list pos)
     (if (not (file-writable-p leim-list))
        (error "Can't write to file \"%s\"" leim-list))
-    (message "Updating %s ..." leim-list)
+    (or noninteractive (message "Updating %s ..." leim-list))
     (setq list-buf (find-file-noselect leim-list))
 
     ;; At first, clean up the file.
@@ -3077,7 +3077,7 @@ of each directory."
       (let ((coding-system-for-write 'utf-8))
        (save-buffer 0)))
     (kill-buffer list-buf)
-    (message "Updating %s ... done" leim-list)))
+    (or noninteractive (message "Updating %s ... done" leim-list))))
 
 (defun quail-advice (args)
   "Advise users about the characters input by the current Quail package.
diff --git a/lisp/international/titdic-cnv.el b/lisp/international/titdic-cnv.el
index 3cbad8d..12e0883 100644
--- a/lisp/international/titdic-cnv.el
+++ b/lisp/international/titdic-cnv.el
@@ -1,6 +1,6 @@
 ;;; titdic-cnv.el --- convert cxterm dictionary (TIT format) to Quail package 
-*- coding:iso-2022-7bit; -*-
 
-;; Copyright (C) 1997-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/ucs-normalize.el 
b/lisp/international/ucs-normalize.el
index 166e594..8839b00 100644
--- a/lisp/international/ucs-normalize.el
+++ b/lisp/international/ucs-normalize.el
@@ -1,6 +1,6 @@
 ;;; ucs-normalize.el --- Unicode normalization NFC/NFD/NFKD/NFKC
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Taichi Kawabata <address@hidden>
 ;; Keywords: unicode, normalization
diff --git a/lisp/international/utf-7.el b/lisp/international/utf-7.el
index 7c724dc..e77a580 100644
--- a/lisp/international/utf-7.el
+++ b/lisp/international/utf-7.el
@@ -1,6 +1,6 @@
 ;;; utf-7.el --- utf-7 coding system
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: i18n, mail
diff --git a/lisp/isearch.el b/lisp/isearch.el
index f0ce705..99ca73f 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1,6 +1,6 @@
 ;;; isearch.el --- incremental search minor mode
 
-;; Copyright (C) 1992-1997, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1997, 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel LaLiberte <address@hidden>
 ;; Maintainer: address@hidden
@@ -974,10 +974,17 @@ The last thing it does is to run 
`isearch-update-post-hook'."
                 (other-window 1))
               (goto-char found-point))
          ;; Keep same hscrolling as at the start of the search when possible
-         (let ((current-scroll (window-hscroll)))
+         (let ((current-scroll (window-hscroll))
+               visible-p)
            (set-window-hscroll (selected-window) isearch-start-hscroll)
-           (unless (pos-visible-in-window-p)
-             (set-window-hscroll (selected-window) current-scroll))))
+           (setq visible-p (pos-visible-in-window-p nil nil t))
+           (if (or (not visible-p)
+                   ;; When point is not visible because of hscroll,
+                   ;; pos-visible-in-window-p returns non-nil, but
+                   ;; the X coordinate it returns is 1 pixel beyond
+                   ;; the last visible one.
+                   (>= (car visible-p) (window-body-width nil t)))
+               (set-window-hscroll (selected-window) current-scroll))))
        (if isearch-other-end
             (if (< isearch-other-end (point)) ; isearch-forward?
                 (isearch-highlight isearch-other-end (point))
@@ -2342,6 +2349,8 @@ With argument, add COUNT copies of the character."
       (isearch-process-search-char char count))))
 
 (defun isearch-process-search-char (char &optional count)
+  "Add CHAR to the search string, COUNT times.
+Search is updated accordingly."
   ;; * and ? are special in regexps when not preceded by \.
   ;; } and | are special in regexps when preceded by \.
   ;; Nothing special for + because it matches at least once.
@@ -2727,7 +2736,7 @@ update the match data, and return point."
 ;; in any of these overlays, se we are safe in this case too.
 (defun isearch-open-necessary-overlays (ov)
   (let ((inside-overlay (and  (> (point) (overlay-start ov))
-                             (< (point) (overlay-end ov))))
+                             (<= (point) (overlay-end ov))))
        ;; If this exists it means that the overlay was opened using
        ;; this function, not by us tweaking the overlay properties.
        (fct-temp (overlay-get ov 'isearch-open-invisible-temporary)))
@@ -3056,11 +3065,15 @@ Attempt to do the search exactly the way the pending 
Isearch would."
            (bound (if isearch-lazy-highlight-forward
                       (min (or isearch-lazy-highlight-end-limit (point-max))
                            (if isearch-lazy-highlight-wrapped
-                               isearch-lazy-highlight-start
+                               (+ isearch-lazy-highlight-start
+                                  ;; Extend bound to match whole string at 
point
+                                  (1- (length 
isearch-lazy-highlight-last-string)))
                              (window-end)))
                     (max (or isearch-lazy-highlight-start-limit (point-min))
                          (if isearch-lazy-highlight-wrapped
-                             isearch-lazy-highlight-end
+                             (- isearch-lazy-highlight-end
+                                ;; Extend bound to match whole string at point
+                                (1- (length 
isearch-lazy-highlight-last-string)))
                            (window-start))))))
        ;; Use a loop like in `isearch-search'.
        (while retry
diff --git a/lisp/isearchb.el b/lisp/isearchb.el
index eb73cb8..ffd4d62 100644
--- a/lisp/isearchb.el
+++ b/lisp/isearchb.el
@@ -1,6 +1,6 @@
 ;;; isearchb --- a marriage between iswitchb and isearch
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/jit-lock.el b/lisp/jit-lock.el
index 34f14a5..788646c 100644
--- a/lisp/jit-lock.el
+++ b/lisp/jit-lock.el
@@ -1,6 +1,6 @@
 ;;; jit-lock.el --- just-in-time fontification  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <address@hidden>
 ;; Keywords: faces files
@@ -125,7 +125,8 @@ The value of this variable is used when JIT Lock mode is 
turned on."
 
 (defcustom jit-lock-defer-time nil ;; 0.25
   "Idle time after which deferred fontification should take place.
-If nil, fontification is not deferred."
+If nil, fontification is not deferred.
+If 0, then fontification is only deferred while there is input pending."
   :group 'jit-lock
   :type '(choice (const :tag "never" nil)
                 (number :tag "seconds")))
@@ -333,7 +334,9 @@ Only applies to the current buffer."
 This function is added to `fontification-functions' when `jit-lock-mode'
 is active."
   (when (and jit-lock-mode (not memory-full))
-    (if (null jit-lock-defer-timer)
+    (if (not (and jit-lock-defer-timer
+                  (or (not (eq jit-lock-defer-time 0))
+                      (input-pending-p))))
        ;; No deferral.
        (jit-lock-fontify-now start (+ start jit-lock-chunk-size))
       ;; Record the buffer for later fontification.
diff --git a/lisp/jka-cmpr-hook.el b/lisp/jka-cmpr-hook.el
index af32c0a..ef6cfb1 100644
--- a/lisp/jka-cmpr-hook.el
+++ b/lisp/jka-cmpr-hook.el
@@ -1,7 +1,7 @@
 ;;; jka-cmpr-hook.el --- preloaded code to enable jka-compr.el
 
-;; Copyright (C) 1993-1995, 1997, 1999-2000, 2002-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1997, 1999-2000, 2002-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Jay K. Adams <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/jka-compr.el b/lisp/jka-compr.el
index a689605..fced4ee 100644
--- a/lisp/jka-compr.el
+++ b/lisp/jka-compr.el
@@ -1,6 +1,7 @@
 ;;; jka-compr.el --- reading/writing/loading compressed files
 
-;; Copyright (C) 1993-1995, 1997, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1997, 1999-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Jay K. Adams <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/json.el b/lisp/json.el
index 899bff5..68ab020 100644
--- a/lisp/json.el
+++ b/lisp/json.el
@@ -1,6 +1,6 @@
 ;;; json.el --- JavaScript Object Notation parser / generator
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Edward O'Connor <address@hidden>
 ;; Version: 1.4
diff --git a/lisp/kermit.el b/lisp/kermit.el
index 4515eae..e8a4ccd 100644
--- a/lisp/kermit.el
+++ b/lisp/kermit.el
@@ -1,6 +1,6 @@
 ;;; kermit.el --- additions to shell mode for use with kermit
 
-;; Copyright (C) 1988, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Jeff Norden <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index 4d93926..327cf45 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -1,6 +1,6 @@
 ;;; kmacro.el --- enhanced keyboard macros
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <address@hidden>
 ;; Keywords: keyboard convenience
diff --git a/lisp/language/.gitignore b/lisp/language/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/lisp/language/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/lisp/language/china-util.el b/lisp/language/china-util.el
index 1a893e1..3b87927 100644
--- a/lisp/language/china-util.el
+++ b/lisp/language/china-util.el
@@ -1,6 +1,6 @@
 ;;; china-util.el --- utilities for Chinese  -*- coding: utf-8 -*-
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/chinese.el b/lisp/language/chinese.el
index 9f1a5d4..e34c762 100644
--- a/lisp/language/chinese.el
+++ b/lisp/language/chinese.el
@@ -1,6 +1,6 @@
 ;;; chinese.el --- support for Chinese -*- coding: utf-8; -*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/cyril-util.el b/lisp/language/cyril-util.el
index 241cd84..5ee927d 100644
--- a/lisp/language/cyril-util.el
+++ b/lisp/language/cyril-util.el
@@ -1,6 +1,6 @@
 ;;; cyril-util.el --- utilities for Cyrillic scripts
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Keywords: mule, multilingual, Cyrillic
 
diff --git a/lisp/language/cyrillic.el b/lisp/language/cyrillic.el
index 3e64d7e..13f7636 100644
--- a/lisp/language/cyrillic.el
+++ b/lisp/language/cyrillic.el
@@ -1,6 +1,6 @@
 ;;; cyrillic.el --- support for Cyrillic -*- coding: utf-8; -*-
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/czech.el b/lisp/language/czech.el
index e993561..d5d19d7 100644
--- a/lisp/language/czech.el
+++ b/lisp/language/czech.el
@@ -1,6 +1,6 @@
 ;;; czech.el --- support for Czech -*- coding: utf-8 -*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Milan Zamazal <address@hidden>
 ;; Maintainer: Pavel Janík <address@hidden>
diff --git a/lisp/language/english.el b/lisp/language/english.el
index 14ccf33..af291a9 100644
--- a/lisp/language/english.el
+++ b/lisp/language/english.el
@@ -1,6 +1,6 @@
 ;;; english.el --- support for English
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/ethio-util.el b/lisp/language/ethio-util.el
index b5ca49c..8575e7b 100644
--- a/lisp/language/ethio-util.el
+++ b/lisp/language/ethio-util.el
@@ -1,6 +1,6 @@
 ;;; ethio-util.el --- utilities for Ethiopic   -*- coding: utf-8-emacs; -*-
 
-;; Copyright (C) 1997-1998, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2002-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/ethiopic.el b/lisp/language/ethiopic.el
index fab93ea..25dd649 100644
--- a/lisp/language/ethiopic.el
+++ b/lisp/language/ethiopic.el
@@ -1,6 +1,6 @@
 ;;; ethiopic.el --- support for Ethiopic       -*- coding: utf-8-emacs; -*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/european.el b/lisp/language/european.el
index 96ae232..1a7b81b 100644
--- a/lisp/language/european.el
+++ b/lisp/language/european.el
@@ -1,6 +1,6 @@
 ;;; european.el --- support for European languages -*- coding: utf-8; -*-
 
-;; Copyright (C) 1997-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/georgian.el b/lisp/language/georgian.el
index f29602a..5e3883d 100644
--- a/lisp/language/georgian.el
+++ b/lisp/language/georgian.el
@@ -1,6 +1,6 @@
 ;;; georgian.el --- language support for Georgian
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: i18n
diff --git a/lisp/language/greek.el b/lisp/language/greek.el
index 082f72f..c9bea34 100644
--- a/lisp/language/greek.el
+++ b/lisp/language/greek.el
@@ -1,6 +1,6 @@
 ;;; greek.el --- support for Greek
 
-;; Copyright (C) 2002, 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2013-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/hanja-util.el b/lisp/language/hanja-util.el
index 9bcb505..8b62ee7 100644
--- a/lisp/language/hanja-util.el
+++ b/lisp/language/hanja-util.el
@@ -1,6 +1,6 @@
 ;;; hanja-util.el --- Korean Hanja util module  -*- coding: utf-8 -*-
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Jihyun Cho <address@hidden>
 ;; Keywords: multilingual, input method, Korean, Hanja
diff --git a/lisp/language/hebrew.el b/lisp/language/hebrew.el
index 574508c..a3f4b3d 100644
--- a/lisp/language/hebrew.el
+++ b/lisp/language/hebrew.el
@@ -1,6 +1,6 @@
 ;;; hebrew.el --- support for Hebrew -*- coding: utf-8 -*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/ind-util.el b/lisp/language/ind-util.el
index f5c29a0..52bc173 100644
--- a/lisp/language/ind-util.el
+++ b/lisp/language/ind-util.el
@@ -1,6 +1,6 @@
 ;;; ind-util.el --- Transliteration and Misc. Tools for Indian Languages -*- 
coding: utf-8-emacs; -*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer:  KAWABATA, Taichi <address@hidden>
 ;; Keywords: multilingual, Indian, Devanagari
diff --git a/lisp/language/indian.el b/lisp/language/indian.el
index 07b5348..d5bd054 100644
--- a/lisp/language/indian.el
+++ b/lisp/language/indian.el
@@ -1,6 +1,6 @@
 ;;; indian.el --- Indian languages support -*- coding: utf-8; -*-
 
-;; Copyright (C) 1997, 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
diff --git a/lisp/language/japan-util.el b/lisp/language/japan-util.el
index e58521e..2871ec8 100644
--- a/lisp/language/japan-util.el
+++ b/lisp/language/japan-util.el
@@ -1,6 +1,6 @@
 ;;; japan-util.el --- utilities for Japanese -*- coding: iso-2022-7bit; -*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/japanese.el b/lisp/language/japanese.el
index 67a43b6..ce48025 100644
--- a/lisp/language/japanese.el
+++ b/lisp/language/japanese.el
@@ -1,6 +1,6 @@
 ;;; japanese.el --- support for Japanese -*- coding: iso-2022-7bit -*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/korea-util.el b/lisp/language/korea-util.el
index 8819be3..2ed5af4 100644
--- a/lisp/language/korea-util.el
+++ b/lisp/language/korea-util.el
@@ -1,6 +1,6 @@
 ;;; korea-util.el --- utilities for Korean
 
-;; Copyright (C) 1997, 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
 ;;   2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/korean.el b/lisp/language/korean.el
index 7b02324..3bb9aea 100644
--- a/lisp/language/korean.el
+++ b/lisp/language/korean.el
@@ -1,6 +1,6 @@
 ;;; korean.el --- support for Korean -*- coding: utf-8 -*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/lao-util.el b/lisp/language/lao-util.el
index 8884b37..3bd0394 100644
--- a/lisp/language/lao-util.el
+++ b/lisp/language/lao-util.el
@@ -1,6 +1,6 @@
 ;;; lao-util.el --- utilities for Lao -*- coding: utf-8; -*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
 ;;   2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/lao.el b/lisp/language/lao.el
index ba9385d..49e2428 100644
--- a/lisp/language/lao.el
+++ b/lisp/language/lao.el
@@ -1,6 +1,6 @@
 ;;; lao.el --- support for Lao -*- coding: utf-8 -*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
 ;;   2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/misc-lang.el b/lisp/language/misc-lang.el
index ee06e34..b56d31f 100644
--- a/lisp/language/misc-lang.el
+++ b/lisp/language/misc-lang.el
@@ -78,7 +78,8 @@ and Italian.")))
 (set-char-table-range
  composition-function-table
  '(#x600 . #x6FF)
- (list ["[\u0600-\u06FF]+" 0 font-shape-gstring]))
+ (list ["\u200D?[\u0600-\u074F]+[\u200D\u200C]*[\u0600-\u074F]+\u200D?"
+       0 font-shape-gstring]))
 
 (provide 'misc-lang)
 
diff --git a/lisp/language/romanian.el b/lisp/language/romanian.el
index 43c85e5..6279885 100644
--- a/lisp/language/romanian.el
+++ b/lisp/language/romanian.el
@@ -1,6 +1,6 @@
 ;;; romanian.el --- support for Romanian -*- coding: utf-8 -*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author:    Dan Nicolaescu <address@hidden>
 ;; Keywords: multilingual, Romanian, i18n
diff --git a/lisp/language/slovak.el b/lisp/language/slovak.el
index b051c4d..2b28321 100644
--- a/lisp/language/slovak.el
+++ b/lisp/language/slovak.el
@@ -1,6 +1,6 @@
 ;;; slovak.el --- support for Slovak -*- coding: utf-8 -*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Authors:    Tibor Šimko <address@hidden>,
 ;;             Milan Zamazal <address@hidden>
diff --git a/lisp/language/tai-viet.el b/lisp/language/tai-viet.el
index b94d1c7..dac287a 100644
--- a/lisp/language/tai-viet.el
+++ b/lisp/language/tai-viet.el
@@ -1,6 +1,6 @@
 ;;; tai-viet.el --- support for Tai Viet -*- coding: utf-8 -*-
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H13PRO009
diff --git a/lisp/language/thai-util.el b/lisp/language/thai-util.el
index cacf8c3..0cb9151 100644
--- a/lisp/language/thai-util.el
+++ b/lisp/language/thai-util.el
@@ -1,6 +1,6 @@
 ;;; thai-util.el --- utilities for Thai -*- coding: utf-8; -*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/thai.el b/lisp/language/thai.el
index d39da20..b63850e 100644
--- a/lisp/language/thai.el
+++ b/lisp/language/thai.el
@@ -1,6 +1,6 @@
 ;;; thai.el --- support for Thai -*- coding: utf-8 -*-
 
-;; Copyright (C) 1997-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/tibet-util.el b/lisp/language/tibet-util.el
index 81d394c..4f59fa1 100644
--- a/lisp/language/tibet-util.el
+++ b/lisp/language/tibet-util.el
@@ -1,6 +1,6 @@
 ;;; tibet-util.el --- utilities for Tibetan   -*- coding: utf-8-emacs; -*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/tibetan.el b/lisp/language/tibetan.el
index 91c9c4d..e5a10b9 100644
--- a/lisp/language/tibetan.el
+++ b/lisp/language/tibetan.el
@@ -1,6 +1,6 @@
 ;;; tibetan.el --- support for Tibetan language -*- coding: utf-8-emacs; -*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/utf-8-lang.el b/lisp/language/utf-8-lang.el
index 4f3fcc9..cd8965b 100644
--- a/lisp/language/utf-8-lang.el
+++ b/lisp/language/utf-8-lang.el
@@ -1,6 +1,6 @@
 ;;; utf-8-lang.el --- generic UTF-8 language environment
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: i18n
diff --git a/lisp/language/viet-util.el b/lisp/language/viet-util.el
index e28f707..f8c11d4 100644
--- a/lisp/language/viet-util.el
+++ b/lisp/language/viet-util.el
@@ -1,6 +1,6 @@
 ;;; viet-util.el --- utilities for Vietnamese  -*- coding: utf-8; -*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/vietnamese.el b/lisp/language/vietnamese.el
index f568ea8..10384a5 100644
--- a/lisp/language/vietnamese.el
+++ b/lisp/language/vietnamese.el
@@ -1,6 +1,6 @@
 ;;; vietnamese.el --- support for Vietnamese -*- coding: utf-8; -*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index f60d660..d11401b 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -3,7 +3,7 @@
 ;;; Code:
 
 
-;;;### (autoloads nil "5x5" "play/5x5.el" (21187 63826 213216 0))
+;;;### (autoloads nil "5x5" "play/5x5.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from play/5x5.el
 
 (autoload '5x5 "5x5" "\
@@ -65,8 +65,8 @@ should return a grid vector array that is the new solution.
 
 ;;;***
 
-;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (21476 41895
-;;;;;;  55661 0))
+;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/ada-mode.el
 
 (autoload 'ada-add-extensions "ada-mode" "\
@@ -85,8 +85,8 @@ Ada mode is the major mode for editing Ada code.
 
 ;;;***
 
-;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/ada-stmt.el
 
 (autoload 'ada-header "ada-stmt" "\
@@ -96,8 +96,8 @@ Insert a descriptive header at the top of the file.
 
 ;;;***
 
-;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (21476 41895
-;;;;;;  55661 0))
+;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/ada-xref.el
 
 (autoload 'ada-find-file "ada-xref" "\
@@ -108,8 +108,8 @@ Completion is available.
 
 ;;;***
 
-;;;### (autoloads nil "add-log" "vc/add-log.el" (21541 15655 55679
-;;;;;;  0))
+;;;### (autoloads nil "add-log" "vc/add-log.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from vc/add-log.el
 
 (put 'change-log-default-name 'safe-local-variable 'string-or-null-p)
@@ -238,8 +238,8 @@ old-style time formats for entries are supported.
 
 ;;;***
 
-;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (21278 229
-;;;;;;  682967 799000))
+;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/advice.el
 
 (defvar ad-redefinition-action 'warn "\
@@ -374,7 +374,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] 
FLAG...)
 
 ;;;***
 
-;;;### (autoloads nil "align" "align.el" (21417 20521 870414 0))
+;;;### (autoloads nil "align" "align.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from align.el
 
 (autoload 'align "align" "\
@@ -477,7 +477,7 @@ A replacement function for `newline-and-indent', aligning 
as it goes.
 
 ;;;***
 
-;;;### (autoloads nil "allout" "allout.el" (21187 63826 213216 0))
+;;;### (autoloads nil "allout" "allout.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from allout.el
 (push (purecopy '(allout 2 3)) package--builtin-versions)
 
@@ -837,8 +837,8 @@ for details on preparing Emacs for automatic allout 
activation.
 
 ;;;***
 
-;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (21584
-;;;;;;  48809 507899 0))
+;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (21609
+;;;;;;  55608 852266 580000))
 ;;; Generated autoloads from allout-widgets.el
 (push (purecopy '(allout-widgets 1 0)) package--builtin-versions)
 
@@ -896,8 +896,8 @@ outline hot-spot navigation (see `allout-mode').
 
 ;;;***
 
-;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (21640 46919 650145
+;;;;;;  897000))
 ;;; Generated autoloads from net/ange-ftp.el
 
 (defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir)
@@ -918,8 +918,8 @@ directory, so that Emacs will know its current contents.
 
 ;;;***
 
-;;;### (autoloads nil "animate" "play/animate.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "animate" "play/animate.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/animate.el
 
 (autoload 'animate-string "animate" "\
@@ -951,8 +951,8 @@ the buffer *Birthday-Present-for-Name*.
 
 ;;;***
 
-;;;### (autoloads nil "ansi-color" "ansi-color.el" (21277 37159 898165
-;;;;;;  0))
+;;;### (autoloads nil "ansi-color" "ansi-color.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from ansi-color.el
 (push (purecopy '(ansi-color 3 4 2)) package--builtin-versions)
 
@@ -978,8 +978,8 @@ This is a good function to put in 
`comint-output-filter-functions'.
 
 ;;;***
 
-;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (21208
-;;;;;;  39903 471297 312000))
+;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/antlr-mode.el
 (push (purecopy '(antlr-mode 2 2 3)) package--builtin-versions)
 
@@ -1015,8 +1015,8 @@ Used in `antlr-mode'.  Also a useful function in 
`java-mode-hook'.
 
 ;;;***
 
-;;;### (autoloads nil "appt" "calendar/appt.el" (21584 48809 507899
-;;;;;;  0))
+;;;### (autoloads nil "appt" "calendar/appt.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from calendar/appt.el
 
 (autoload 'appt-add "appt" "\
@@ -1037,7 +1037,8 @@ ARG is positive, otherwise off.
 
 ;;;***
 
-;;;### (autoloads nil "apropos" "apropos.el" (21553 6820 877466 0))
+;;;### (autoloads nil "apropos" "apropos.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from apropos.el
 
 (autoload 'apropos-read-pattern "apropos" "\
@@ -1152,8 +1153,8 @@ Returns list of symbols and documentation found.
 
 ;;;***
 
-;;;### (autoloads nil "arc-mode" "arc-mode.el" (21476 41895 55661
-;;;;;;  0))
+;;;### (autoloads nil "arc-mode" "arc-mode.el" (21621 7062 810116
+;;;;;;  332000))
 ;;; Generated autoloads from arc-mode.el
 
 (autoload 'archive-mode "arc-mode" "\
@@ -1173,7 +1174,7 @@ archive.
 
 ;;;***
 
-;;;### (autoloads nil "array" "array.el" (21240 46395 727291 0))
+;;;### (autoloads nil "array" "array.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from array.el
 
 (autoload 'array-mode "array" "\
@@ -1244,8 +1245,8 @@ Entering array mode calls the function `array-mode-hook'.
 
 ;;;***
 
-;;;### (autoloads nil "artist" "textmodes/artist.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "artist" "textmodes/artist.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/artist.el
 (push (purecopy '(artist 1 2 6)) package--builtin-versions)
 
@@ -1451,8 +1452,8 @@ Keymap summary
 
 ;;;***
 
-;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (21419 62246
-;;;;;;  751914 0))
+;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/asm-mode.el
 
 (autoload 'asm-mode "asm-mode" "\
@@ -1479,8 +1480,8 @@ Special commands:
 
 ;;;***
 
-;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (21342
-;;;;;;  10917 902592 0))
+;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (21625
+;;;;;;  43838 483701 627000))
 ;;; Generated autoloads from gnus/auth-source.el
 
 (defvar auth-source-cache-expiry 7200 "\
@@ -1492,8 +1493,8 @@ let-binding.")
 
 ;;;***
 
-;;;### (autoloads nil "autoarg" "autoarg.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "autoarg" "autoarg.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from autoarg.el
 
 (defvar autoarg-mode nil "\
@@ -1553,8 +1554,8 @@ This is similar to `autoarg-mode' but rebinds the keypad 
keys
 
 ;;;***
 
-;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/autoconf.el
 
 (autoload 'autoconf-mode "autoconf" "\
@@ -1564,8 +1565,8 @@ Major mode for editing Autoconf configure.ac files.
 
 ;;;***
 
-;;;### (autoloads nil "autoinsert" "autoinsert.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "autoinsert" "autoinsert.el" (21632 17083 200835
+;;;;;;  890000))
 ;;; Generated autoloads from autoinsert.el
 
 (autoload 'auto-insert "autoinsert" "\
@@ -1603,8 +1604,8 @@ insert a template for the file depending on the mode of 
the buffer.
 
 ;;;***
 
-;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (21425
-;;;;;;  43779 760127 645000))
+;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (21628
+;;;;;;  43483 380149 771000))
 ;;; Generated autoloads from emacs-lisp/autoload.el
 
 (put 'generated-autoload-file 'safe-local-variable 'stringp)
@@ -1655,8 +1656,8 @@ should be non-nil).
 
 ;;;***
 
-;;;### (autoloads nil "autorevert" "autorevert.el" (21315 5521 187938
-;;;;;;  0))
+;;;### (autoloads nil "autorevert" "autorevert.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from autorevert.el
 
 (autoload 'auto-revert-mode "autorevert" "\
@@ -1744,7 +1745,7 @@ specifies in the mode line.
 
 ;;;***
 
-;;;### (autoloads nil "avoid" "avoid.el" (21379 5287 607434 0))
+;;;### (autoloads nil "avoid" "avoid.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from avoid.el
 
 (defvar mouse-avoidance-mode nil "\
@@ -1782,8 +1783,8 @@ definition of \"random distance\".)
 
 ;;;***
 
-;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (21563 42665
-;;;;;;  706656 0))
+;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/bat-mode.el
 
 (add-to-list 'auto-mode-alist '("\\.\\(bat\\|cmd\\)\\'" . bat-mode))
@@ -1801,7 +1802,8 @@ Run script using `bat-run' and `bat-run-args'.
 
 ;;;***
 
-;;;### (autoloads nil "battery" "battery.el" (21346 7974 405729 0))
+;;;### (autoloads nil "battery" "battery.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from battery.el
  (put 'battery-mode-line-string 'risky-local-variable t)
 
@@ -1836,8 +1838,8 @@ seconds.
 
 ;;;***
 
-;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/benchmark.el
 
 (autoload 'benchmark-run "benchmark" "\
@@ -1873,8 +1875,8 @@ For non-interactive use see also `benchmark-run' and
 
 ;;;***
 
-;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (21414 44327
-;;;;;;  790846 0))
+;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/bibtex.el
 
 (autoload 'bibtex-initialize "bibtex" "\
@@ -1966,7 +1968,7 @@ A prefix arg negates the value of 
`bibtex-search-entry-globally'.
 ;;;***
 
 ;;;### (autoloads nil "bibtex-style" "textmodes/bibtex-style.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21607 54478 800121 42000))
 ;;; Generated autoloads from textmodes/bibtex-style.el
 
 (autoload 'bibtex-style-mode "bibtex-style" "\
@@ -1976,8 +1978,8 @@ Major mode for editing BibTeX style files.
 
 ;;;***
 
-;;;### (autoloads nil "binhex" "mail/binhex.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "binhex" "mail/binhex.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from mail/binhex.el
 
 (defconst binhex-begin-line 
"^:...............................................................$" "\
@@ -2001,8 +2003,8 @@ Binhex decode region between START and END.
 
 ;;;***
 
-;;;### (autoloads nil "blackbox" "play/blackbox.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "blackbox" "play/blackbox.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from play/blackbox.el
 
 (autoload 'blackbox "blackbox" "\
@@ -2121,8 +2123,8 @@ a reflection.
 
 ;;;***
 
-;;;### (autoloads nil "bookmark" "bookmark.el" (21397 35239 170099
-;;;;;;  0))
+;;;### (autoloads nil "bookmark" "bookmark.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from bookmark.el
  (define-key ctl-x-r-map "b" 'bookmark-jump)
  (define-key ctl-x-r-map "m" 'bookmark-set)
@@ -2315,8 +2317,8 @@ Incremental search of bookmarks, hiding the non-matches 
as we go.
 
 ;;;***
 
-;;;### (autoloads nil "browse-url" "net/browse-url.el" (21364 37926
-;;;;;;  837230 0))
+;;;### (autoloads nil "browse-url" "net/browse-url.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from net/browse-url.el
 
 (defvar browse-url-browser-function 'browse-url-default-browser "\
@@ -2631,7 +2633,7 @@ from `browse-url-elinks-wrapper'.
 
 ;;;***
 
-;;;### (autoloads nil "bs" "bs.el" (21452 59559 901066 0))
+;;;### (autoloads nil "bs" "bs.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from bs.el
 (push (purecopy '(bs 1 17)) package--builtin-versions)
 
@@ -2672,8 +2674,8 @@ name of buffer configuration.
 
 ;;;***
 
-;;;### (autoloads nil "bubbles" "play/bubbles.el" (21410 47268 609529
-;;;;;;  0))
+;;;### (autoloads nil "bubbles" "play/bubbles.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/bubbles.el
 
 (autoload 'bubbles "bubbles" "\
@@ -2695,7 +2697,7 @@ columns on its right towards the left.
 ;;;***
 
 ;;;### (autoloads nil "bug-reference" "progmodes/bug-reference.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21607 54478 800121 42000))
 ;;; Generated autoloads from progmodes/bug-reference.el
 
 (put 'bug-reference-url-format 'safe-local-variable (lambda (s) (or (stringp 
s) (and (symbolp s) (get s 'bug-reference-url-format)))))
@@ -2715,8 +2717,8 @@ Like `bug-reference-mode', but only buttonize in comments 
and strings.
 
 ;;;***
 
-;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (21586
-;;;;;;  4146 376146 0))
+;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (21645
+;;;;;;  29116 670141 789000))
 ;;; Generated autoloads from emacs-lisp/bytecomp.el
 (put 'byte-compile-dynamic 'safe-local-variable 'booleanp)
 (put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp)
@@ -2836,8 +2838,8 @@ and corresponding effects.
 
 ;;;***
 
-;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (21554
-;;;;;;  27688 263871 0))
+;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (21617
+;;;;;;  49721 420132 227000))
 ;;; Generated autoloads from calendar/cal-china.el
 
 (put 'calendar-chinese-time-zone 'risky-local-variable t)
@@ -2846,8 +2848,8 @@ and corresponding effects.
 
 ;;;***
 
-;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (21609 55608
+;;;;;;  852266 580000))
 ;;; Generated autoloads from calendar/cal-dst.el
 
 (put 'calendar-daylight-savings-starts 'risky-local-variable t)
@@ -2858,8 +2860,8 @@ and corresponding effects.
 
 ;;;***
 
-;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (21554
-;;;;;;  27688 263871 0))
+;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from calendar/cal-hebrew.el
 
 (autoload 'calendar-hebrew-list-yahrzeits "cal-hebrew" "\
@@ -2871,7 +2873,7 @@ from the cursor position.
 
 ;;;***
 
-;;;### (autoloads nil "calc" "calc/calc.el" (21584 48809 507899 0))
+;;;### (autoloads nil "calc" "calc/calc.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from calc/calc.el
  (define-key ctl-x-map "*" 'calc-dispatch)
 
@@ -2957,8 +2959,8 @@ See Info node `(calc)Defining Functions'.
 
 ;;;***
 
-;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from calc/calc-undo.el
 
 (autoload 'calc-undo "calc-undo" "\
@@ -2968,8 +2970,8 @@ See Info node `(calc)Defining Functions'.
 
 ;;;***
 
-;;;### (autoloads nil "calculator" "calculator.el" (21417 20521 870414
-;;;;;;  0))
+;;;### (autoloads nil "calculator" "calculator.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from calculator.el
 
 (autoload 'calculator "calculator" "\
@@ -2980,8 +2982,8 @@ See the documentation for `calculator-mode' for more 
information.
 
 ;;;***
 
-;;;### (autoloads nil "calendar" "calendar/calendar.el" (21554 27688
-;;;;;;  263871 0))
+;;;### (autoloads nil "calendar" "calendar/calendar.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from calendar/calendar.el
 
 (autoload 'calendar "calendar" "\
@@ -3024,8 +3026,8 @@ This function is suitable for execution in an init file.
 
 ;;;***
 
-;;;### (autoloads nil "canlock" "gnus/canlock.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "canlock" "gnus/canlock.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/canlock.el
 
 (autoload 'canlock-insert-header "canlock" "\
@@ -3042,8 +3044,8 @@ it fails.
 
 ;;;***
 
-;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (21586
-;;;;;;  49290 401031 0))
+;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (21653
+;;;;;;  23227 760147 961000))
 ;;; Generated autoloads from progmodes/cc-engine.el
 
 (autoload 'c-guess-basic-syntax "cc-engine" "\
@@ -3053,8 +3055,8 @@ Return the syntactic context of the current line.
 
 ;;;***
 
-;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (21551 51499
-;;;;;;  554352 0))
+;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (21628 56730
+;;;;;;  520119 990000))
 ;;; Generated autoloads from progmodes/cc-guess.el
 
 (defvar c-guess-guessed-offsets-alist nil "\
@@ -3152,8 +3154,8 @@ the absolute file name of the file if STYLE-NAME is nil.
 
 ;;;***
 
-;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (21551 51499
-;;;;;;  554352 0))
+;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (21652 2366
+;;;;;;  414435 564000))
 ;;; Generated autoloads from progmodes/cc-mode.el
 
 (autoload 'c-initialize-cc-mode "cc-mode" "\
@@ -3310,8 +3312,8 @@ Key bindings:
 
 ;;;***
 
-;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (21628
+;;;;;;  56730 520119 990000))
 ;;; Generated autoloads from progmodes/cc-styles.el
 
 (autoload 'c-set-style "cc-styles" "\
@@ -3362,8 +3364,8 @@ and exists only for compatibility reasons.
 
 ;;;***
 
-;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (21551 51499
-;;;;;;  554352 0))
+;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (21628 56730
+;;;;;;  520119 990000))
 ;;; Generated autoloads from progmodes/cc-vars.el
 (put 'c-basic-offset 'safe-local-variable 'integerp)
 (put 'c-backslash-column 'safe-local-variable 'integerp)
@@ -3371,8 +3373,8 @@ and exists only for compatibility reasons.
 
 ;;;***
 
-;;;### (autoloads nil "ccl" "international/ccl.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "ccl" "international/ccl.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from international/ccl.el
 
 (autoload 'ccl-compile "ccl" "\
@@ -3632,8 +3634,8 @@ See the documentation of `define-ccl-program' for the 
detail of CCL program.
 
 ;;;***
 
-;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (21543 57381
-;;;;;;  284584 0))
+;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (21645 29116
+;;;;;;  670141 789000))
 ;;; Generated autoloads from emacs-lisp/cconv.el
 
 (autoload 'cconv-closure-convert "cconv" "\
@@ -3652,15 +3654,15 @@ Add the warnings that closure conversion would 
encounter.
 
 ;;;***
 
-;;;### (autoloads nil "cedet" "cedet/cedet.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "cedet" "cedet/cedet.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from cedet/cedet.el
 (push (purecopy '(cedet 2 0)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (21576 54696
-;;;;;;  780899 0))
+;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/cfengine.el
 (push (purecopy '(cfengine 1 3)) package--builtin-versions)
 
@@ -3689,15 +3691,15 @@ Choose `cfengine2-mode' or `cfengine3-mode' by buffer 
contents.
 
 ;;;***
 
-;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/chart.el
 (push (purecopy '(chart 0 2)) package--builtin-versions)
 
 ;;;***
 
 ;;;### (autoloads nil "check-declare" "emacs-lisp/check-declare.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21607 54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/check-declare.el
 
 (autoload 'check-declare-file "check-declare" "\
@@ -3714,8 +3716,8 @@ Returns non-nil if any false statements are found.
 
 ;;;***
 
-;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/checkdoc.el
 (push (purecopy '(checkdoc 0 6 2)) package--builtin-versions)
 (put 'checkdoc-force-docstrings-flag 'safe-local-variable #'booleanp)
@@ -3915,8 +3917,8 @@ checking of documentation strings.
 
 ;;;***
 
-;;;### (autoloads nil "china-util" "language/china-util.el" (21197
-;;;;;;  43194 200483 0))
+;;;### (autoloads nil "china-util" "language/china-util.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from language/china-util.el
 
 (autoload 'decode-hz-region "china-util" "\
@@ -3953,8 +3955,8 @@ Encode the text in the current buffer to HZ.
 
 ;;;***
 
-;;;### (autoloads nil "chistory" "chistory.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "chistory" "chistory.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from chistory.el
 
 (autoload 'repeat-matching-complex-command "chistory" "\
@@ -3993,8 +3995,8 @@ and runs the normal hook `command-history-hook'.
 
 ;;;***
 
-;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (21318
-;;;;;;  28582 821557 0))
+;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/cl-indent.el
 
 (autoload 'common-lisp-indent-function "cl-indent" "\
@@ -4077,8 +4079,8 @@ instead.
 
 ;;;***
 
-;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (21549 9768
-;;;;;;  351453 0))
+;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (21619 26501
+;;;;;;  970129 581000))
 ;;; Generated autoloads from emacs-lisp/cl-lib.el
 (push (purecopy '(cl-lib 1 0)) package--builtin-versions)
 
@@ -4108,8 +4110,8 @@ a future Emacs interpreter will be able to use it.")
 
 ;;;***
 
-;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/cmacexp.el
 
 (autoload 'c-macro-expand "cmacexp" "\
@@ -4129,8 +4131,8 @@ For use inside Lisp programs, see also 
`c-macro-expansion'.
 
 ;;;***
 
-;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from cmuscheme.el
 
 (autoload 'run-scheme "cmuscheme" "\
@@ -4150,7 +4152,7 @@ is run).
 
 ;;;***
 
-;;;### (autoloads nil "color" "color.el" (21187 63826 213216 0))
+;;;### (autoloads nil "color" "color.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from color.el
 
 (autoload 'color-name-to-rgb "color" "\
@@ -4169,7 +4171,7 @@ If FRAME cannot display COLOR, return nil.
 
 ;;;***
 
-;;;### (autoloads nil "comint" "comint.el" (21339 34726 39547 0))
+;;;### (autoloads nil "comint" "comint.el" (21665 14401 955623 556000))
 ;;; Generated autoloads from comint.el
 
 (defvar comint-output-filter-functions '(ansi-color-process-output 
comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\
@@ -4270,12 +4272,15 @@ REGEXP-GROUP is the regular expression group in REGEXP 
to use.
 
 ;;;***
 
-;;;### (autoloads nil "compare-w" "vc/compare-w.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "compare-w" "vc/compare-w.el" (21663 59071
+;;;;;;  96337 184000))
 ;;; Generated autoloads from vc/compare-w.el
 
 (autoload 'compare-windows "compare-w" "\
-Compare text in current window with text in next window.
+Compare text in current window with text in another window.
+The option `compare-windows-get-window-function' defines how
+to get another window.
+
 Compares the text starting at point in each window,
 moving over text in each one as far as they match.
 
@@ -4304,8 +4309,8 @@ on third call it again advances points to the next 
difference and so on.
 
 ;;;***
 
-;;;### (autoloads nil "compile" "progmodes/compile.el" (21586 4146
-;;;;;;  376146 0))
+;;;### (autoloads nil "compile" "progmodes/compile.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/compile.el
 
 (defvar compilation-mode-hook nil "\
@@ -4486,8 +4491,8 @@ This is the value of `next-error-function' in Compilation 
buffers.
 
 ;;;***
 
-;;;### (autoloads nil "completion" "completion.el" (21584 48809 507899
-;;;;;;  0))
+;;;### (autoloads nil "completion" "completion.el" (21657 20283 330825
+;;;;;;  807000))
 ;;; Generated autoloads from completion.el
 
 (defvar dynamic-completion-mode nil "\
@@ -4509,8 +4514,8 @@ if ARG is omitted or nil.
 
 ;;;***
 
-;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (21383
-;;;;;;  2343 498187 0))
+;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from textmodes/conf-mode.el
 
 (autoload 'conf-mode "conf-mode" "\
@@ -4665,8 +4670,8 @@ For details see `conf-mode'.  Example:
 
 ;;;***
 
-;;;### (autoloads nil "cookie1" "play/cookie1.el" (21245 64312 799897
-;;;;;;  0))
+;;;### (autoloads nil "cookie1" "play/cookie1.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/cookie1.el
 
 (autoload 'cookie "cookie1" "\
@@ -4694,8 +4699,8 @@ and subsequent calls on the same file won't go to disk.
 
 ;;;***
 
-;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/copyright.el
 (put 'copyright-at-end-flag 'safe-local-variable 'booleanp)
 (put 'copyright-names-regexp 'safe-local-variable 'stringp)
@@ -4733,8 +4738,8 @@ If FIX is non-nil, run `copyright-fix-years' instead.
 
 ;;;***
 
-;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (21438
-;;;;;;  26670 609361 0))
+;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/cperl-mode.el
 (put 'cperl-indent-level 'safe-local-variable 'integerp)
 (put 'cperl-brace-offset 'safe-local-variable 'integerp)
@@ -4932,8 +4937,8 @@ Run a `perldoc' on the word around point.
 
 ;;;***
 
-;;;### (autoloads nil "cpp" "progmodes/cpp.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "cpp" "progmodes/cpp.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from progmodes/cpp.el
 
 (autoload 'cpp-highlight-buffer "cpp" "\
@@ -4951,8 +4956,8 @@ Edit display information for cpp conditionals.
 
 ;;;***
 
-;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (21263 7861 493097
-;;;;;;  0))
+;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/crm.el
 
 (autoload 'completing-read-multiple "crm" "\
@@ -4978,8 +4983,8 @@ with empty strings removed.
 
 ;;;***
 
-;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (21574 12970
-;;;;;;  82034 0))
+;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/css-mode.el
 
 (autoload 'css-mode "css-mode" "\
@@ -4995,8 +5000,8 @@ Major mode to edit \"Sassy CSS\" files.
 
 ;;;***
 
-;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (21319 49445
-;;;;;;  508378 0))
+;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emulation/cua-base.el
 
 (defvar cua-mode nil "\
@@ -5041,8 +5046,8 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v 
bindings.
 
 ;;;***
 
-;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (21503 425
-;;;;;;  992235 0))
+;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emulation/cua-rect.el
 
 (autoload 'cua-rectangle-mark-mode "cua-rect" "\
@@ -5053,8 +5058,8 @@ Activates the region if needed.  Only lasts until the 
region is deactivated.
 
 ;;;***
 
-;;;### (autoloads nil "cus-edit" "cus-edit.el" (21567 9155 113406
-;;;;;;  0))
+;;;### (autoloads nil "cus-edit" "cus-edit.el" (21646 49980 500843
+;;;;;;  452000))
 ;;; Generated autoloads from cus-edit.el
 
 (defvar custom-browse-sort-alphabetically nil "\
@@ -5280,6 +5285,13 @@ Customize all loaded groups matching REGEXP.
 
 \(fn REGEXP)" t nil)
 
+(autoload 'custom-prompt-customize-unsaved-options "cus-edit" "\
+Prompt user to customize any unsaved customization options.
+Return non-nil if user chooses to customize, for use in
+`kill-emacs-query-functions'.
+
+\(fn)" nil nil)
+
 (autoload 'custom-buffer-create "cus-edit" "\
 Create a buffer containing OPTIONS.
 Optional NAME is the name of the buffer.
@@ -5366,8 +5378,8 @@ The format is suitable for use with `easy-menu-define'.
 
 ;;;***
 
-;;;### (autoloads nil "cus-theme" "cus-theme.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "cus-theme" "cus-theme.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from cus-theme.el
 
 (autoload 'customize-create-theme "cus-theme" "\
@@ -5400,8 +5412,8 @@ omitted, a buffer named *Custom Themes* is used.
 
 ;;;***
 
-;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from vc/cvs-status.el
 
 (autoload 'cvs-status-mode "cvs-status" "\
@@ -5411,8 +5423,8 @@ Mode used for cvs status output.
 
 ;;;***
 
-;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (21383 2343 498187
-;;;;;;  0))
+;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from progmodes/cwarn.el
 (push (purecopy '(cwarn 1 3 1)) package--builtin-versions)
 
@@ -5456,8 +5468,8 @@ See `cwarn-mode' for more information on Cwarn mode.
 
 ;;;***
 
-;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (21193
-;;;;;;  16180 875828 0))
+;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from language/cyril-util.el
 
 (autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\
@@ -5485,8 +5497,8 @@ If the argument is nil, we return the display table to 
its standard state.
 
 ;;;***
 
-;;;### (autoloads nil "dabbrev" "dabbrev.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "dabbrev" "dabbrev.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from dabbrev.el
 (put 'dabbrev-case-fold-search 'risky-local-variable t)
 (put 'dabbrev-case-replace 'risky-local-variable t)
@@ -5532,8 +5544,8 @@ See also `dabbrev-abbrev-char-regexp' and 
\\[dabbrev-completion].
 
 ;;;***
 
-;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (21197 43194
-;;;;;;  200483 0))
+;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from cedet/data-debug.el
 
 (autoload 'data-debug-new-buffer "data-debug" "\
@@ -5543,7 +5555,7 @@ Create a new data-debug buffer with NAME.
 
 ;;;***
 
-;;;### (autoloads nil "dbus" "net/dbus.el" (21430 32550 215986 0))
+;;;### (autoloads nil "dbus" "net/dbus.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from net/dbus.el
 
 (autoload 'dbus-handle-event "dbus" "\
@@ -5556,8 +5568,8 @@ If the HANDLER returns a `dbus-error', it is propagated 
as return message.
 
 ;;;***
 
-;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/dcl-mode.el
 
 (autoload 'dcl-mode "dcl-mode" "\
@@ -5683,8 +5695,8 @@ There is some minimal font-lock support (see vars
 
 ;;;***
 
-;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/debug.el
 
 (setq debugger 'debug)
@@ -5727,8 +5739,8 @@ To specify a nil argument interactively, exit with an 
empty minibuffer.
 
 ;;;***
 
-;;;### (autoloads nil "decipher" "play/decipher.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "decipher" "play/decipher.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from play/decipher.el
 
 (autoload 'decipher "decipher" "\
@@ -5756,8 +5768,8 @@ The most useful commands are:
 
 ;;;***
 
-;;;### (autoloads nil "delim-col" "delim-col.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "delim-col" "delim-col.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from delim-col.el
 (push (purecopy '(delim-col 2 1)) package--builtin-versions)
 
@@ -5782,7 +5794,7 @@ START and END delimits the corners of text rectangle.
 
 ;;;***
 
-;;;### (autoloads nil "delsel" "delsel.el" (21414 44327 790846 0))
+;;;### (autoloads nil "delsel" "delsel.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from delsel.el
 
 (defalias 'pending-delete-mode 'delete-selection-mode)
@@ -5810,8 +5822,8 @@ point regardless of any selection.
 
 ;;;***
 
-;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/derived.el
 
 (autoload 'define-derived-mode "derived" "\
@@ -5877,8 +5889,8 @@ the first time the mode is used.
 
 ;;;***
 
-;;;### (autoloads nil "descr-text" "descr-text.el" (21567 8911 359241
-;;;;;;  0))
+;;;### (autoloads nil "descr-text" "descr-text.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from descr-text.el
 
 (autoload 'describe-text-properties "descr-text" "\
@@ -5912,8 +5924,8 @@ relevant to POS.
 
 ;;;***
 
-;;;### (autoloads nil "desktop" "desktop.el" (21526 48295 289762
-;;;;;;  0))
+;;;### (autoloads nil "desktop" "desktop.el" (21666 35265 825623
+;;;;;;  21000))
 ;;; Generated autoloads from desktop.el
 
 (defvar desktop-save-mode nil "\
@@ -6118,8 +6130,8 @@ Revert to the last loaded desktop.
 
 ;;;***
 
-;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/deuglify.el
 
 (autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\
@@ -6151,8 +6163,8 @@ Deuglify broken Outlook (Express) articles and redisplay.
 
 ;;;***
 
-;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (21561
-;;;;;;  934 250078 0))
+;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (21625
+;;;;;;  43838 483701 627000))
 ;;; Generated autoloads from calendar/diary-lib.el
 
 (autoload 'diary "diary-lib" "\
@@ -6194,7 +6206,7 @@ Major mode for editing the diary file.
 
 ;;;***
 
-;;;### (autoloads nil "diff" "vc/diff.el" (21240 46395 727291 0))
+;;;### (autoloads nil "diff" "vc/diff.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from vc/diff.el
 
 (defvar diff-switches (purecopy "-c") "\
@@ -6242,8 +6254,8 @@ This requires the external program `diff' to be in your 
`exec-path'.
 
 ;;;***
 
-;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (21546 33576
-;;;;;;  601815 0))
+;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (21628 45530
+;;;;;;  160140 360000))
 ;;; Generated autoloads from vc/diff-mode.el
 
 (autoload 'diff-mode "diff-mode" "\
@@ -6275,7 +6287,7 @@ the mode if ARG is omitted or nil.
 
 ;;;***
 
-;;;### (autoloads nil "dig" "net/dig.el" (21187 63826 213216 0))
+;;;### (autoloads nil "dig" "net/dig.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from net/dig.el
 
 (autoload 'dig "dig" "\
@@ -6286,7 +6298,7 @@ Optional arguments are passed to `dig-invoke'.
 
 ;;;***
 
-;;;### (autoloads nil "dired" "dired.el" (21452 59559 901066 0))
+;;;### (autoloads nil "dired" "dired.el" (21662 38238 226339 285000))
 ;;; Generated autoloads from dired.el
 
 (defvar dired-listing-switches (purecopy "-al") "\
@@ -6406,8 +6418,8 @@ Keybindings:
 
 ;;;***
 
-;;;### (autoloads nil "dirtrack" "dirtrack.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "dirtrack" "dirtrack.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from dirtrack.el
 
 (autoload 'dirtrack-mode "dirtrack" "\
@@ -6437,8 +6449,8 @@ from `default-directory'.
 
 ;;;***
 
-;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/disass.el
 
 (autoload 'disassemble "disass" "\
@@ -6452,8 +6464,8 @@ redefine OBJECT if it is a symbol.
 
 ;;;***
 
-;;;### (autoloads nil "disp-table" "disp-table.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "disp-table" "disp-table.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from disp-table.el
 
 (autoload 'make-display-table "disp-table" "\
@@ -6574,8 +6586,8 @@ in `.emacs'.
 
 ;;;***
 
-;;;### (autoloads nil "dissociate" "play/dissociate.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "dissociate" "play/dissociate.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from play/dissociate.el
 
 (autoload 'dissociated-press "dissociate" "\
@@ -6591,7 +6603,7 @@ Default is 2.
 
 ;;;***
 
-;;;### (autoloads nil "dnd" "dnd.el" (21240 46395 727291 0))
+;;;### (autoloads nil "dnd" "dnd.el" (21666 35265 825623 21000))
 ;;; Generated autoloads from dnd.el
 
 (defvar dnd-protocol-alist `((,(purecopy "^file:///") . dnd-open-local-file) 
(,(purecopy "^file://") . dnd-open-file) (,(purecopy "^file:") . 
dnd-open-local-file) (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . 
dnd-open-file)) "\
@@ -6611,8 +6623,8 @@ if some action was made, or nil if the URL is ignored.")
 
 ;;;***
 
-;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/dns-mode.el
 
 (autoload 'dns-mode "dns-mode" "\
@@ -6635,8 +6647,8 @@ Locate SOA record and increment the serial field.
 
 ;;;***
 
-;;;### (autoloads nil "doc-view" "doc-view.el" (21576 54696 780899
-;;;;;;  0))
+;;;### (autoloads nil "doc-view" "doc-view.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from doc-view.el
 
 (autoload 'doc-view-mode-p "doc-view" "\
@@ -6682,8 +6694,8 @@ See the command `doc-view-mode' for more information on 
this mode.
 
 ;;;***
 
-;;;### (autoloads nil "doctor" "play/doctor.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "doctor" "play/doctor.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/doctor.el
 
 (autoload 'doctor "doctor" "\
@@ -6693,7 +6705,7 @@ Switch to *doctor* buffer and start giving psychotherapy.
 
 ;;;***
 
-;;;### (autoloads nil "double" "double.el" (21187 63826 213216 0))
+;;;### (autoloads nil "double" "double.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from double.el
 
 (autoload 'double-mode "double" "\
@@ -6709,8 +6721,8 @@ strings when pressed twice.  See `double-map' for details.
 
 ;;;***
 
-;;;### (autoloads nil "dunnet" "play/dunnet.el" (21406 50214 284651
-;;;;;;  0))
+;;;### (autoloads nil "dunnet" "play/dunnet.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/dunnet.el
 (push (purecopy '(dunnet 2 1)) package--builtin-versions)
 
@@ -6721,8 +6733,8 @@ Switch to *dungeon* buffer and start game.
 
 ;;;***
 
-;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (21505
-;;;;;;  42150 427725 0))
+;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/easy-mmode.el
 
 (defalias 'easy-mmode-define-minor-mode 'define-minor-mode)
@@ -6861,8 +6873,8 @@ CSS contains a list of syntax specifications of the form 
(CHAR . SYNTAX).
 
 ;;;***
 
-;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/easymenu.el
 
 (autoload 'easy-menu-define "easymenu" "\
@@ -7000,8 +7012,8 @@ To implement dynamic menus, either call this from
 
 ;;;***
 
-;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/ebnf2ps.el
 (push (purecopy '(ebnf2ps 4 4)) package--builtin-versions)
 
@@ -7266,8 +7278,8 @@ See `ebnf-style-database' documentation.
 
 ;;;***
 
-;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/ebrowse.el
 
 (autoload 'ebrowse-tree-mode "ebrowse" "\
@@ -7415,8 +7427,8 @@ Display statistics for a class tree.
 
 ;;;***
 
-;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from ebuff-menu.el
 
 (autoload 'electric-buffer-list "ebuff-menu" "\
@@ -7448,8 +7460,8 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry.
 
 ;;;***
 
-;;;### (autoloads nil "echistory" "echistory.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "echistory" "echistory.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from echistory.el
 
 (autoload 'Electric-command-history-redo-expression "echistory" "\
@@ -7460,8 +7472,8 @@ With prefix arg NOCONFIRM, execute current line as-is 
without editing.
 
 ;;;***
 
-;;;### (autoloads nil "ecomplete" "gnus/ecomplete.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "ecomplete" "gnus/ecomplete.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/ecomplete.el
 
 (autoload 'ecomplete-setup "ecomplete" "\
@@ -7471,7 +7483,7 @@ With prefix arg NOCONFIRM, execute current line as-is 
without editing.
 
 ;;;***
 
-;;;### (autoloads nil "ede" "cedet/ede.el" (21350 58112 380040 0))
+;;;### (autoloads nil "ede" "cedet/ede.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from cedet/ede.el
 (push (purecopy '(ede 1 2)) package--builtin-versions)
 
@@ -7497,8 +7509,8 @@ an EDE controlled project.
 
 ;;;***
 
-;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (21452 59559
-;;;;;;  901066 0))
+;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/edebug.el
 
 (defvar edebug-all-defs nil "\
@@ -7562,7 +7574,7 @@ Toggle edebugging of all forms.
 
 ;;;***
 
-;;;### (autoloads nil "ediff" "vc/ediff.el" (21429 11690 49391 0))
+;;;### (autoloads nil "ediff" "vc/ediff.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from vc/ediff.el
 (push (purecopy '(ediff 2 81 4)) package--builtin-versions)
 
@@ -7834,8 +7846,8 @@ With optional NODE, goes to that node.
 
 ;;;***
 
-;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from vc/ediff-help.el
 
 (autoload 'ediff-customize "ediff-help" "\
@@ -7845,8 +7857,8 @@ With optional NODE, goes to that node.
 
 ;;;***
 
-;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (21429 11690
-;;;;;;  49391 0))
+;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from vc/ediff-mult.el
 
 (autoload 'ediff-show-registry "ediff-mult" "\
@@ -7858,8 +7870,8 @@ Display Ediff's registry.
 
 ;;;***
 
-;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (21458 11942
-;;;;;;  975332 0))
+;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from vc/ediff-util.el
 
 (autoload 'ediff-toggle-multiframe "ediff-util" "\
@@ -7878,8 +7890,8 @@ To change the default, set the variable 
`ediff-use-toolbar-p', which see.
 
 ;;;***
 
-;;;### (autoloads nil "edmacro" "edmacro.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "edmacro" "edmacro.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from edmacro.el
 (push (purecopy '(edmacro 2 1)) package--builtin-versions)
 
@@ -7928,8 +7940,8 @@ or nil, use a compact 80-column format.
 
 ;;;***
 
-;;;### (autoloads nil "edt" "emulation/edt.el" (21417 20521 870414
-;;;;;;  0))
+;;;### (autoloads nil "edt" "emulation/edt.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emulation/edt.el
 
 (autoload 'edt-set-scroll-margins "edt" "\
@@ -7946,7 +7958,7 @@ Turn on EDT Emulation.
 
 ;;;***
 
-;;;### (autoloads nil "ehelp" "ehelp.el" (21429 11690 49391 0))
+;;;### (autoloads nil "ehelp" "ehelp.el" (21607 54477 800124 118000))
 ;;; Generated autoloads from ehelp.el
 
 (autoload 'with-electric-help "ehelp" "\
@@ -7982,15 +7994,15 @@ BUFFER is put back into its original major mode.
 
 ;;;***
 
-;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (21571 36773
-;;;;;;  524862 0))
+;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/eieio.el
 (push (purecopy '(eieio 1 4)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (21571
-;;;;;;  36773 524862 0))
+;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (21634
+;;;;;;  58813 400848 500000))
 ;;; Generated autoloads from emacs-lisp/eieio-core.el
 (push (purecopy '(eieio-core 1 4)) package--builtin-versions)
 
@@ -8006,8 +8018,8 @@ It creates an autoload function for CNAME's constructor.
 
 ;;;***
 
-;;;### (autoloads nil "elec-pair" "elec-pair.el" (21327 43559 923043
-;;;;;;  0))
+;;;### (autoloads nil "elec-pair" "elec-pair.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from elec-pair.el
 
 (defvar electric-pair-text-pairs '((34 . 34)) "\
@@ -8042,8 +8054,8 @@ closing parenthesis.  (Likewise for brackets, etc.).
 
 ;;;***
 
-;;;### (autoloads nil "elide-head" "elide-head.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "elide-head" "elide-head.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from elide-head.el
 
 (autoload 'elide-head "elide-head" "\
@@ -8058,8 +8070,8 @@ This is suitable as an entry on `find-file-hook' or 
appropriate mode hooks.
 
 ;;;***
 
-;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (21195 23530
-;;;;;;  495420 0))
+;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/elint.el
 
 (autoload 'elint-file "elint" "\
@@ -8094,8 +8106,8 @@ optional prefix argument REINIT is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/elp.el
 
 (autoload 'elp-instrument-function "elp" "\
@@ -8129,8 +8141,8 @@ displayed.
 
 ;;;***
 
-;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lock.el
 
 (autoload 'emacs-lock-mode "emacs-lock" "\
@@ -8157,20 +8169,22 @@ Other values are interpreted as usual.
 
 ;;;***
 
-;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (21302 89 140834
-;;;;;;  615000))
+;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (21608 34742
+;;;;;;  2253 811000))
 ;;; Generated autoloads from mail/emacsbug.el
 
 (autoload 'report-emacs-bug "emacsbug" "\
 Report a bug in GNU Emacs.
 Prompts for bug subject.  Leaves you in a mail buffer.
 
-\(fn TOPIC &optional RECENT-KEYS)" t nil)
+\(fn TOPIC &optional UNUSED)" t nil)
+
+(set-advertised-calling-convention 'report-emacs-bug '(topic) '"24.5")
 
 ;;;***
 
-;;;### (autoloads nil "emerge" "vc/emerge.el" (21364 37926 837230
-;;;;;;  0))
+;;;### (autoloads nil "emerge" "vc/emerge.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from vc/emerge.el
 
 (autoload 'emerge-files "emerge" "\
@@ -8230,8 +8244,8 @@ Emerge two RCS revisions of a file, with another revision 
as ancestor.
 
 ;;;***
 
-;;;### (autoloads nil "enriched" "textmodes/enriched.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "enriched" "textmodes/enriched.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/enriched.el
 
 (autoload 'enriched-mode "enriched" "\
@@ -8266,7 +8280,7 @@ Commands:
 
 ;;;***
 
-;;;### (autoloads nil "epa" "epa.el" (21294 46247 414129 0))
+;;;### (autoloads nil "epa" "epa.el" (21624 22971 140149 848000))
 ;;; Generated autoloads from epa.el
 
 (autoload 'epa-list-keys "epa" "\
@@ -8454,8 +8468,8 @@ Insert selected KEYS after the point.
 
 ;;;***
 
-;;;### (autoloads nil "epa-dired" "epa-dired.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "epa-dired" "epa-dired.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from epa-dired.el
 
 (autoload 'epa-dired-do-decrypt "epa-dired" "\
@@ -8480,8 +8494,8 @@ Encrypt marked files.
 
 ;;;***
 
-;;;### (autoloads nil "epa-file" "epa-file.el" (21205 7349 58947
-;;;;;;  0))
+;;;### (autoloads nil "epa-file" "epa-file.el" (21611 10937 700236
+;;;;;;  3000))
 ;;; Generated autoloads from epa-file.el
 
 (autoload 'epa-file-handler "epa-file" "\
@@ -8501,8 +8515,8 @@ Encrypt marked files.
 
 ;;;***
 
-;;;### (autoloads nil "epa-mail" "epa-mail.el" (21294 46247 414129
-;;;;;;  0))
+;;;### (autoloads nil "epa-mail" "epa-mail.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from epa-mail.el
 
 (autoload 'epa-mail-mode "epa-mail" "\
@@ -8579,7 +8593,7 @@ if ARG is omitted or nil.
 
 ;;;***
 
-;;;### (autoloads nil "epg" "epg.el" (21578 10030 299837 0))
+;;;### (autoloads nil "epg" "epg.el" (21611 10937 700236 3000))
 ;;; Generated autoloads from epg.el
 (push (purecopy '(epg 1 0 0)) package--builtin-versions)
 
@@ -8590,8 +8604,8 @@ Return a context object.
 
 ;;;***
 
-;;;### (autoloads nil "epg-config" "epg-config.el" (21543 57381 284584
-;;;;;;  0))
+;;;### (autoloads nil "epg-config" "epg-config.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from epg-config.el
 
 (autoload 'epg-configuration "epg-config" "\
@@ -8611,7 +8625,7 @@ Look at CONFIG and try to expand GROUP.
 
 ;;;***
 
-;;;### (autoloads nil "erc" "erc/erc.el" (21584 48809 507899 0))
+;;;### (autoloads nil "erc" "erc/erc.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from erc/erc.el
 
 (autoload 'erc-select-read-args "erc" "\
@@ -8640,7 +8654,7 @@ then the server and full-name will be set to those 
values, whereas
 `erc-compute-port', `erc-compute-nick' and `erc-compute-full-name' will
 be invoked for the values of the other parameters.
 
-\(fn &key (server (erc-compute-server)) (port (erc-compute-port)) (nick 
(erc-compute-nick)) PASSWORD (full-name (erc-compute-full-name)))" t nil)
+\(fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port)) (NICK 
(erc-compute-nick)) PASSWORD (FULL-NAME (erc-compute-full-name)))" t nil)
 
 (defalias 'erc-select 'erc)
 
@@ -8659,36 +8673,36 @@ Otherwise, connect to HOST:PORT as USER and /join 
CHANNEL.
 
 ;;;***
 
-;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from erc/erc-autoaway.el
  (autoload 'erc-autoaway-mode "erc-autoaway")
 
 ;;;***
 
-;;;### (autoloads nil "erc-button" "erc/erc-button.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "erc-button" "erc/erc-button.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-button.el
  (autoload 'erc-button-mode "erc-button" nil t)
 
 ;;;***
 
-;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-capab.el
  (autoload 'erc-capab-identify-mode "erc-capab" nil t)
 
 ;;;***
 
-;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-compat.el
  (autoload 'erc-define-minor-mode "erc-compat")
 
 ;;;***
 
-;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from erc/erc-dcc.el
  (autoload 'erc-dcc-mode "erc-dcc")
 
@@ -8718,14 +8732,14 @@ that subcommand.
 ;;;***
 
 ;;;### (autoloads nil "erc-desktop-notifications" 
"erc/erc-desktop-notifications.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21617 49721 420132 227000))
 ;;; Generated autoloads from erc/erc-desktop-notifications.el
 (autoload 'erc-notifications-mode "erc-desktop-notifications" "" t)
 
 ;;;***
 
-;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from erc/erc-ezbounce.el
 
 (autoload 'erc-cmd-ezb "erc-ezbounce" "\
@@ -8787,8 +8801,8 @@ Add EZBouncer convenience functions to ERC.
 
 ;;;***
 
-;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from erc/erc-fill.el
  (autoload 'erc-fill-mode "erc-fill" nil t)
 
@@ -8800,8 +8814,8 @@ You can put this on `erc-insert-modify-hook' and/or 
`erc-send-modify-hook'.
 
 ;;;***
 
-;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-identd.el
  (autoload 'erc-identd-mode "erc-identd")
 
@@ -8822,8 +8836,8 @@ system.
 
 ;;;***
 
-;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-imenu.el
 
 (autoload 'erc-create-imenu-index "erc-imenu" "\
@@ -8833,22 +8847,22 @@ system.
 
 ;;;***
 
-;;;### (autoloads nil "erc-join" "erc/erc-join.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "erc-join" "erc/erc-join.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from erc/erc-join.el
  (autoload 'erc-autojoin-mode "erc-join" nil t)
 
 ;;;***
 
-;;;### (autoloads nil "erc-list" "erc/erc-list.el" (21308 46599 181916
-;;;;;;  0))
+;;;### (autoloads nil "erc-list" "erc/erc-list.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from erc/erc-list.el
  (autoload 'erc-list-mode "erc-list")
 
 ;;;***
 
-;;;### (autoloads nil "erc-log" "erc/erc-log.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "erc-log" "erc/erc-log.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from erc/erc-log.el
  (autoload 'erc-log-mode "erc-log" nil t)
 
@@ -8877,8 +8891,8 @@ You can save every individual message by putting this 
function on
 
 ;;;***
 
-;;;### (autoloads nil "erc-match" "erc/erc-match.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "erc-match" "erc/erc-match.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-match.el
  (autoload 'erc-match-mode "erc-match")
 
@@ -8924,15 +8938,15 @@ Delete dangerous-host interactively to 
`erc-dangerous-hosts'.
 
 ;;;***
 
-;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from erc/erc-menu.el
  (autoload 'erc-menu-mode "erc-menu" nil t)
 
 ;;;***
 
-;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from erc/erc-netsplit.el
  (autoload 'erc-netsplit-mode "erc-netsplit")
 
@@ -8943,8 +8957,8 @@ Show who's gone.
 
 ;;;***
 
-;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (21260
-;;;;;;  55795 711190 0))
+;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from erc/erc-networks.el
 
 (autoload 'erc-determine-network "erc-networks" "\
@@ -8961,8 +8975,8 @@ Interactively select a server to connect to using 
`erc-server-alist'.
 
 ;;;***
 
-;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-notify.el
  (autoload 'erc-notify-mode "erc-notify" nil t)
 
@@ -8980,36 +8994,36 @@ with args, toggle notify status of people.
 
 ;;;***
 
-;;;### (autoloads nil "erc-page" "erc/erc-page.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "erc-page" "erc/erc-page.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from erc/erc-page.el
  (autoload 'erc-page-mode "erc-page")
 
 ;;;***
 
-;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from erc/erc-pcomplete.el
  (autoload 'erc-completion-mode "erc-pcomplete" nil t)
 
 ;;;***
 
-;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-replace.el
  (autoload 'erc-replace-mode "erc-replace")
 
 ;;;***
 
-;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (21550 30640 287412
-;;;;;;  0))
+;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from erc/erc-ring.el
  (autoload 'erc-ring-mode "erc-ring" nil t)
 
 ;;;***
 
-;;;### (autoloads nil "erc-services" "erc/erc-services.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "erc-services" "erc/erc-services.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from erc/erc-services.el
  (autoload 'erc-services-mode "erc-services" nil t)
 
@@ -9026,15 +9040,15 @@ When called interactively, read the password using 
`read-passwd'.
 
 ;;;***
 
-;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-sound.el
  (autoload 'erc-sound-mode "erc-sound")
 
 ;;;***
 
-;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from erc/erc-speedbar.el
 
 (autoload 'erc-speedbar-browser "erc-speedbar" "\
@@ -9045,22 +9059,22 @@ This will add a speedbar major display mode.
 
 ;;;***
 
-;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from erc/erc-spelling.el
  (autoload 'erc-spelling-mode "erc-spelling" nil t)
 
 ;;;***
 
-;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (21546 33576
-;;;;;;  601815 0))
+;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-stamp.el
  (autoload 'erc-timestamp-mode "erc-stamp" nil t)
 
 ;;;***
 
-;;;### (autoloads nil "erc-track" "erc/erc-track.el" (21586 4146
-;;;;;;  376146 0))
+;;;### (autoloads nil "erc-track" "erc/erc-track.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from erc/erc-track.el
 
 (defvar erc-track-minor-mode nil "\
@@ -9085,8 +9099,8 @@ keybindings will not do anything useful.
 
 ;;;***
 
-;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from erc/erc-truncate.el
  (autoload 'erc-truncate-mode "erc-truncate" nil t)
 
@@ -9105,8 +9119,8 @@ Meant to be used in hooks, like `erc-insert-post-hook'.
 
 ;;;***
 
-;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from erc/erc-xdcc.el
  (autoload 'erc-xdcc-mode "erc-xdcc")
 
@@ -9117,8 +9131,8 @@ Add a file to `erc-xdcc-files'.
 
 ;;;***
 
-;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (21419 62246 751914
-;;;;;;  0))
+;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/ert.el
 
 (autoload 'ert-deftest "ert" "\
@@ -9136,7 +9150,11 @@ Tests that are expected to fail can be marked as such
 using :expected-result.  See `ert-test-result-type-p' for a
 description of valid values for RESULT-TYPE.
 
-\(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] [:tags '(TAG...)] 
BODY...)" nil (quote macro))
+\(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] [:tags '(TAG...)] 
BODY...)" nil t)
+
+(function-put 'ert-deftest 'doc-string-elt '3)
+
+(function-put 'ert-deftest 'lisp-indent-function '2)
 
 (put 'ert-deftest 'lisp-indent-function 2)
 
@@ -9183,8 +9201,8 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol 
or ert-test).
 
 ;;;***
 
-;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/ert-x.el
 
 (put 'ert-with-test-buffer 'lisp-indent-function 1)
@@ -9196,8 +9214,8 @@ Kill all test buffers that are still live.
 
 ;;;***
 
-;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (21213 1461
-;;;;;;  513511 0))
+;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from eshell/esh-mode.el
 
 (autoload 'eshell-mode "esh-mode" "\
@@ -9207,8 +9225,8 @@ Emacs shell interactive mode.
 
 ;;;***
 
-;;;### (autoloads nil "eshell" "eshell/eshell.el" (21403 21396 190131
-;;;;;;  14000))
+;;;### (autoloads nil "eshell" "eshell/eshell.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from eshell/eshell.el
 (push (purecopy '(eshell 2 4 2)) package--builtin-versions)
 
@@ -9243,8 +9261,8 @@ corresponding to a successful execution.
 
 ;;;***
 
-;;;### (autoloads nil "etags" "progmodes/etags.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "etags" "progmodes/etags.el" (21665 14401 955623
+;;;;;;  556000))
 ;;; Generated autoloads from progmodes/etags.el
 
 (defvar tags-file-name nil "\
@@ -9337,6 +9355,11 @@ as they appeared in the `etags' command that created the 
table, usually
 without directory names.
 
 \(fn)" nil nil)
+
+(autoload 'tags-lazy-completion-table "etags" "\
+
+
+\(fn)" nil nil)
  (defun tags-completion-at-point-function ()
   (if (or tags-table-list tags-file-name)
       (progn
@@ -9385,7 +9408,6 @@ Contrast this with the ring of marks gone to by the 
command.
 See documentation of variable `tags-file-name'.
 
 \(fn TAGNAME &optional NEXT-P REGEXP-P)" t nil)
- (define-key esc-map "." 'find-tag)
 
 (autoload 'find-tag-other-window "etags" "\
 Find tag (in current tags table) whose name contains TAGNAME.
@@ -9408,7 +9430,8 @@ Contrast this with the ring of marks gone to by the 
command.
 See documentation of variable `tags-file-name'.
 
 \(fn TAGNAME &optional NEXT-P REGEXP-P)" t nil)
- (define-key ctl-x-4-map "." 'find-tag-other-window)
+
+(make-obsolete 'find-tag-other-window 'xref-find-definitions-other-window 
'"25.1")
 
 (autoload 'find-tag-other-frame "etags" "\
 Find tag (in current tags table) whose name contains TAGNAME.
@@ -9431,7 +9454,8 @@ Contrast this with the ring of marks gone to by the 
command.
 See documentation of variable `tags-file-name'.
 
 \(fn TAGNAME &optional NEXT-P)" t nil)
- (define-key ctl-x-5-map "." 'find-tag-other-frame)
+
+(make-obsolete 'find-tag-other-frame 'xref-find-definitions-other-frame 
'"25.1")
 
 (autoload 'find-tag-regexp "etags" "\
 Find tag (in current tags table) whose name matches REGEXP.
@@ -9452,17 +9476,10 @@ Contrast this with the ring of marks gone to by the 
command.
 See documentation of variable `tags-file-name'.
 
 \(fn REGEXP &optional NEXT-P OTHER-WINDOW)" t nil)
- (define-key esc-map [?\C-.] 'find-tag-regexp)
- (define-key esc-map "*" 'pop-tag-mark)
-
-(autoload 'pop-tag-mark "etags" "\
-Pop back to where \\[find-tag] was last invoked.
 
-This is distinct from invoking \\[find-tag] with a negative argument
-since that pops a stack of markers at which tags were found, not from
-where they were found.
+(make-obsolete 'find-tag-regexp 'xref-find-apropos '"25.1")
 
-\(fn)" t nil)
+(defalias 'pop-tag-mark 'xref-pop-marker-stack)
 
 (autoload 'next-file "etags" "\
 Select next file among files in current tags table.
@@ -9491,7 +9508,8 @@ evaluate to operate on an interesting file.  If the 
latter evaluates to
 nil, we exit; otherwise we scan the next file.
 
 \(fn &optional FIRST-TIME)" t nil)
- (define-key esc-map "," 'tags-loop-continue)
+
+(make-obsolete 'tags-loop-continue '"use `xref-find-definitions' interface 
instead." '"25.1")
 
 (autoload 'tags-search "etags" "\
 Search through all files listed in tags table for match for REGEXP.
@@ -9535,6 +9553,8 @@ Display list of all tags in tags table REGEXP matches.
 
 \(fn REGEXP)" t nil)
 
+(make-obsolete 'tags-apropos 'xref-find-apropos '"25.1")
+
 (autoload 'select-tags-table "etags" "\
 Select a tags table file from a menu of those you have already used.
 The list of tags tables to select from is stored in `tags-table-set-list';
@@ -9550,10 +9570,15 @@ for \\[find-tag] (which see).
 
 \(fn)" t nil)
 
+(autoload 'etags-xref-find "etags" "\
+
+
+\(fn ACTION ID)" nil nil)
+
 ;;;***
 
-;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from language/ethio-util.el
 
 (autoload 'setup-ethiopic-environment-internal "ethio-util" "\
@@ -9721,7 +9746,7 @@ With ARG, insert that many delimiters.
 
 ;;;***
 
-;;;### (autoloads nil "eudc" "net/eudc.el" (21187 63826 213216 0))
+;;;### (autoloads nil "eudc" "net/eudc.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from net/eudc.el
 
 (autoload 'eudc-set-server "eudc" "\
@@ -9775,8 +9800,8 @@ This does nothing except loading eudc by autoload 
side-effect.
 
 ;;;***
 
-;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from net/eudc-bob.el
 
 (autoload 'eudc-display-generic-binary "eudc-bob" "\
@@ -9811,8 +9836,8 @@ Display a button for the JPEG DATA.
 
 ;;;***
 
-;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from net/eudc-export.el
 
 (autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\
@@ -9828,8 +9853,8 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a 
record.
 
 ;;;***
 
-;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from net/eudc-hotlist.el
 
 (autoload 'eudc-edit-hotlist "eudc-hotlist" "\
@@ -9839,8 +9864,8 @@ Edit the hotlist of directory servers in a specialized 
buffer.
 
 ;;;***
 
-;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/ewoc.el
 
 (autoload 'ewoc-create "ewoc" "\
@@ -9866,7 +9891,7 @@ fourth arg NOSEP non-nil inhibits this.
 
 ;;;***
 
-;;;### (autoloads nil "eww" "net/eww.el" (21546 33576 601815 0))
+;;;### (autoloads nil "eww" "net/eww.el" (21667 56163 185621 290000))
 ;;; Generated autoloads from net/eww.el
 
 (autoload 'eww "eww" "\
@@ -9882,15 +9907,26 @@ Render a file using EWW.
 
 \(fn FILE)" t nil)
 
+(autoload 'eww-search-words "eww" "\
+Search the web for the text between the point and marker.
+See the `eww-search-prefix' variable for the search engine used.
+
+\(fn &optional BEG END)" t nil)
+
 (autoload 'eww-browse-url "eww" "\
 
 
 \(fn URL &optional NEW-WINDOW)" nil nil)
 
+(autoload 'eww-list-bookmarks "eww" "\
+Display the bookmarks.
+
+\(fn)" t nil)
+
 ;;;***
 
-;;;### (autoloads nil "executable" "progmodes/executable.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "executable" "progmodes/executable.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/executable.el
 
 (autoload 'executable-command-find-posix-p "executable" "\
@@ -9931,7 +9967,7 @@ file modes.
 
 ;;;***
 
-;;;### (autoloads nil "expand" "expand.el" (21187 63826 213216 0))
+;;;### (autoloads nil "expand" "expand.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from expand.el
 
 (autoload 'expand-add-abbrevs "expand" "\
@@ -9980,8 +10016,8 @@ This is used only in conjunction with 
`expand-add-abbrevs'.
 
 ;;;***
 
-;;;### (autoloads nil "f90" "progmodes/f90.el" (21429 11690 49391
-;;;;;;  0))
+;;;### (autoloads nil "f90" "progmodes/f90.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from progmodes/f90.el
 
 (autoload 'f90-mode "f90" "\
@@ -10048,8 +10084,8 @@ with no args, if that value is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "face-remap" "face-remap.el" (21241 18251 378509
-;;;;;;  0))
+;;;### (autoloads nil "face-remap" "face-remap.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from face-remap.el
 
 (autoload 'face-remap-add-relative "face-remap" "\
@@ -10208,8 +10244,8 @@ Besides the choice of face, it is the same as 
`buffer-face-mode'.
 
 ;;;***
 
-;;;### (autoloads nil "feedmail" "mail/feedmail.el" (21002 1963 769129
-;;;;;;  0))
+;;;### (autoloads nil "feedmail" "mail/feedmail.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/feedmail.el
 (push (purecopy '(feedmail 11)) package--builtin-versions)
 
@@ -10263,7 +10299,7 @@ you can set `feedmail-queue-reminder-alist' to nil.
 
 ;;;***
 
-;;;### (autoloads nil "ffap" "ffap.el" (21546 33576 601815 0))
+;;;### (autoloads nil "ffap" "ffap.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from ffap.el
 
 (autoload 'ffap-next "ffap" "\
@@ -10326,8 +10362,8 @@ Evaluate the forms in variable `ffap-bindings'.
 
 ;;;***
 
-;;;### (autoloads nil "filecache" "filecache.el" (21265 49588 918402
-;;;;;;  0))
+;;;### (autoloads nil "filecache" "filecache.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from filecache.el
 
 (autoload 'file-cache-add-directory "filecache" "\
@@ -10384,8 +10420,8 @@ the name is considered already unique; only the second 
substitution
 
 ;;;***
 
-;;;### (autoloads nil "filenotify" "filenotify.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "filenotify" "filenotify.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from filenotify.el
 
 (autoload 'file-notify-handle-event "filenotify" "\
@@ -10397,8 +10433,8 @@ Otherwise, signal a `file-notify-error'.
 
 ;;;***
 
-;;;### (autoloads nil "files-x" "files-x.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "files-x" "files-x.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from files-x.el
 
 (autoload 'add-file-local-variable "files-x" "\
@@ -10463,8 +10499,8 @@ Copy directory-local variables to the -*- line.
 
 ;;;***
 
-;;;### (autoloads nil "filesets" "filesets.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "filesets" "filesets.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from filesets.el
 
 (autoload 'filesets-init "filesets" "\
@@ -10475,8 +10511,8 @@ Set up hooks, load the cache file -- if existing -- and 
build the menu.
 
 ;;;***
 
-;;;### (autoloads nil "find-cmd" "find-cmd.el" (21539 60334 648861
-;;;;;;  0))
+;;;### (autoloads nil "find-cmd" "find-cmd.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from find-cmd.el
 (push (purecopy '(find-cmd 0 6)) package--builtin-versions)
 
@@ -10496,8 +10532,8 @@ result is a string that should be ready for the command 
line.
 
 ;;;***
 
-;;;### (autoloads nil "find-dired" "find-dired.el" (21264 57319 597552
-;;;;;;  0))
+;;;### (autoloads nil "find-dired" "find-dired.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from find-dired.el
 
 (autoload 'find-dired "find-dired" "\
@@ -10537,8 +10573,8 @@ use in place of \"-ls\" as the final argument.
 
 ;;;***
 
-;;;### (autoloads nil "find-file" "find-file.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "find-file" "find-file.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from find-file.el
 
 (defvar ff-special-constructs `((,(purecopy "^#\\s *\\(include\\|import\\)\\s 
+[<\"]\\(.*\\)[>\"]") lambda nil (buffer-substring (match-beginning 2) 
(match-end 2)))) "\
@@ -10628,8 +10664,8 @@ Visit the file you click on in another window.
 
 ;;;***
 
-;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (21419
-;;;;;;  62246 751914 0))
+;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (21665
+;;;;;;  14401 955623 556000))
 ;;; Generated autoloads from emacs-lisp/find-func.el
 
 (autoload 'find-library "find-func" "\
@@ -10787,8 +10823,8 @@ Define some key bindings for the find-function family 
of functions.
 
 ;;;***
 
-;;;### (autoloads nil "find-lisp" "find-lisp.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "find-lisp" "find-lisp.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from find-lisp.el
 
 (autoload 'find-lisp-find-dired "find-lisp" "\
@@ -10808,7 +10844,7 @@ Change the filter on a `find-lisp-find-dired' buffer to 
REGEXP.
 
 ;;;***
 
-;;;### (autoloads nil "finder" "finder.el" (21429 11690 49391 0))
+;;;### (autoloads nil "finder" "finder.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from finder.el
 (push (purecopy '(finder 1 0)) package--builtin-versions)
 
@@ -10830,8 +10866,8 @@ Find packages matching a given keyword.
 
 ;;;***
 
-;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from flow-ctrl.el
 
 (autoload 'enable-flow-control "flow-ctrl" "\
@@ -10852,8 +10888,8 @@ to get the effect of a C-q.
 
 ;;;***
 
-;;;### (autoloads nil "flow-fill" "gnus/flow-fill.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "flow-fill" "gnus/flow-fill.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/flow-fill.el
 
 (autoload 'fill-flowed-encode "flow-fill" "\
@@ -10868,8 +10904,8 @@ to get the effect of a C-q.
 
 ;;;***
 
-;;;### (autoloads nil "flymake" "progmodes/flymake.el" (21245 64312
-;;;;;;  799897 0))
+;;;### (autoloads nil "flymake" "progmodes/flymake.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/flymake.el
 (push (purecopy '(flymake 0 3)) package--builtin-versions)
 
@@ -10899,8 +10935,8 @@ Turn flymake mode off.
 
 ;;;***
 
-;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/flyspell.el
 
 (autoload 'flyspell-prog-mode "flyspell" "\
@@ -10970,14 +11006,14 @@ Flyspell whole buffer.
 
 ;;;***
 
-;;;### (autoloads nil "foldout" "foldout.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "foldout" "foldout.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from foldout.el
 (push (purecopy '(foldout 1 10)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "follow" "follow.el" (21240 46395 727291 0))
+;;;### (autoloads nil "follow" "follow.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from follow.el
 
 (autoload 'turn-on-follow-mode "follow" "\
@@ -11045,8 +11081,8 @@ selected if the original window is the first one in the 
frame.
 
 ;;;***
 
-;;;### (autoloads nil "footnote" "mail/footnote.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "footnote" "mail/footnote.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/footnote.el
 (push (purecopy '(footnote 0 19)) package--builtin-versions)
 
@@ -11065,7 +11101,7 @@ play around with the following keys:
 
 ;;;***
 
-;;;### (autoloads nil "forms" "forms.el" (21187 63826 213216 0))
+;;;### (autoloads nil "forms" "forms.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from forms.el
 
 (autoload 'forms-mode "forms" "\
@@ -11101,8 +11137,8 @@ Visit a file in Forms mode in other window.
 
 ;;;***
 
-;;;### (autoloads nil "fortran" "progmodes/fortran.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "fortran" "progmodes/fortran.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/fortran.el
 
 (autoload 'fortran-mode "fortran" "\
@@ -11179,8 +11215,8 @@ with no args, if that value is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "fortune" "play/fortune.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "fortune" "play/fortune.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/fortune.el
 
 (autoload 'fortune-add-fortune "fortune" "\
@@ -11228,8 +11264,8 @@ and choose the directory as the fortune-file.
 
 ;;;***
 
-;;;### (autoloads nil "frameset" "frameset.el" (21549 9768 351453
-;;;;;;  0))
+;;;### (autoloads nil "frameset" "frameset.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from frameset.el
 
 (defvar frameset-session-filter-alist '((name . :never) (left . 
frameset-filter-iconified) (minibuffer . frameset-filter-minibuffer) (top . 
frameset-filter-iconified)) "\
@@ -11415,15 +11451,15 @@ Interactively, reads the register using 
`register-read-with-preview'.
 
 ;;;***
 
-;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from play/gamegrid.el
 (push (purecopy '(gamegrid 1 2)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (21350 58112
-;;;;;;  380040 0))
+;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/gdb-mi.el
 
 (defvar gdb-enable-debug nil "\
@@ -11500,8 +11536,8 @@ detailed description of this mode.
 
 ;;;***
 
-;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (21202 31159
-;;;;;;  541460 0))
+;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/generic.el
 
 (defvar generic-mode-list nil "\
@@ -11581,8 +11617,8 @@ regular expression that can be used as an element of
 
 ;;;***
 
-;;;### (autoloads nil "glasses" "progmodes/glasses.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "glasses" "progmodes/glasses.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/glasses.el
 
 (autoload 'glasses-mode "glasses" "\
@@ -11596,8 +11632,8 @@ add virtual separators (like underscores) at places 
they belong to.
 
 ;;;***
 
-;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (21326 22692
-;;;;;;  123234 0))
+;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gmm-utils.el
 
 (autoload 'gmm-regexp-concat "gmm-utils" "\
@@ -11651,7 +11687,7 @@ DEFAULT-MAP specifies the default key map for ICON-LIST.
 
 ;;;***
 
-;;;### (autoloads nil "gnus" "gnus/gnus.el" (21582 7079 522747 0))
+;;;### (autoloads nil "gnus" "gnus/gnus.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from gnus/gnus.el
 (push (purecopy '(gnus 5 13)) package--builtin-versions)
 (when (fboundp 'custom-autoload)
@@ -11701,8 +11737,8 @@ prompt the user for the name of an NNTP server to use.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (21274 64565
-;;;;;;  737222 0))
+;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-agent.el
 
 (autoload 'gnus-unplugged "gnus-agent" "\
@@ -11792,8 +11828,8 @@ CLEAN is obsolete and ignored.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (21546 33576
-;;;;;;  601815 0))
+;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (21652 2365 910127
+;;;;;;  752000))
 ;;; Generated autoloads from gnus/gnus-art.el
 
 (autoload 'gnus-article-prepare-display "gnus-art" "\
@@ -11803,8 +11839,8 @@ Make the current buffer look like a nice article.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (21645
+;;;;;;  29116 670141 789000))
 ;;; Generated autoloads from gnus/gnus-bookmark.el
 
 (autoload 'gnus-bookmark-set "gnus-bookmark" "\
@@ -11827,8 +11863,8 @@ deletion, or > if it is flagged for displaying.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (21296 1575
-;;;;;;  438327 0))
+;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-cache.el
 
 (autoload 'gnus-jog-cache "gnus-cache" "\
@@ -11869,8 +11905,8 @@ supported.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (21584 48809
-;;;;;;  507899 0))
+;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-delay.el
 
 (autoload 'gnus-delay-article "gnus-delay" "\
@@ -11905,8 +11941,8 @@ Checking delayed messages is skipped if optional arg 
NO-CHECK is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-diary.el
 
 (autoload 'gnus-user-format-function-d "gnus-diary" "\
@@ -11921,8 +11957,8 @@ Checking delayed messages is skipped if optional arg 
NO-CHECK is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-dired.el
 
 (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\
@@ -11932,8 +11968,8 @@ Convenience method to turn on gnus-dired-mode.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-draft.el
 
 (autoload 'gnus-draft-reminder "gnus-draft" "\
@@ -11943,8 +11979,8 @@ Reminder user if there are unsent drafts.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (21546 33576
-;;;;;;  601815 0))
+;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-fun.el
 
 (autoload 'gnus--random-face-with-type "gnus-fun" "\
@@ -12009,8 +12045,8 @@ Insert a random Face header from `gnus-face-directory'.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from gnus/gnus-gravatar.el
 
 (autoload 'gnus-treat-from-gravatar "gnus-gravatar" "\
@@ -12027,8 +12063,8 @@ If gravatars are already displayed, remove them.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (21296 1575
-;;;;;;  438327 0))
+;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-group.el
 
 (autoload 'gnus-fetch-group "gnus-group" "\
@@ -12045,8 +12081,8 @@ Pop up a frame and enter GROUP.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (21296 1575
-;;;;;;  438327 0))
+;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-html.el
 
 (autoload 'gnus-article-html "gnus-html" "\
@@ -12061,8 +12097,8 @@ Pop up a frame and enter GROUP.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-kill.el
 
 (defalias 'gnus-batch-kill 'gnus-batch-score)
@@ -12075,8 +12111,8 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f 
gnus-batch-score
 
 ;;;***
 
-;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/gnus-ml.el
 
 (autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\
@@ -12099,8 +12135,8 @@ Minor mode for providing mailing-list commands.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (21296 1575
-;;;;;;  438327 0))
+;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-mlspl.el
 
 (autoload 'gnus-group-split-setup "gnus-mlspl" "\
@@ -12200,8 +12236,8 @@ Calling (gnus-group-split-fancy nil nil 
\"mail.others\") returns:
 
 ;;;***
 
-;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (21467 26920
-;;;;;;  243336 0))
+;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-msg.el
 
 (autoload 'gnus-msg-mail "gnus-msg" "\
@@ -12228,7 +12264,7 @@ Like `message-reply'.
 ;;;***
 
 ;;;### (autoloads nil "gnus-notifications" "gnus/gnus-notifications.el"
-;;;;;;  (21296 1575 438327 0))
+;;;;;;  (21607 54478 300138 641000))
 ;;; Generated autoloads from gnus/gnus-notifications.el
 
 (autoload 'gnus-notifications "gnus-notifications" "\
@@ -12244,8 +12280,8 @@ This is typically a function to add in
 
 ;;;***
 
-;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (21296 1575
-;;;;;;  438327 0))
+;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-picon.el
 
 (autoload 'gnus-treat-from-picon "gnus-picon" "\
@@ -12268,8 +12304,8 @@ If picons are already displayed, remove them.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-range.el
 
 (autoload 'gnus-sorted-difference "gnus-range" "\
@@ -12336,8 +12372,8 @@ Add NUM into sorted LIST by side effect.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (21350
-;;;;;;  58112 380040 0))
+;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (21652
+;;;;;;  2365 910127 752000))
 ;;; Generated autoloads from gnus/gnus-registry.el
 
 (autoload 'gnus-registry-initialize "gnus-registry" "\
@@ -12352,8 +12388,8 @@ Install the registry hooks.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-sieve.el
 
 (autoload 'gnus-sieve-update "gnus-sieve" "\
@@ -12380,8 +12416,8 @@ See the documentation for these variables and functions 
for details.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (21296 1575
-;;;;;;  438327 0))
+;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-spec.el
 
 (autoload 'gnus-update-format "gnus-spec" "\
@@ -12391,8 +12427,8 @@ Update the format specification near point.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (21566 18857
-;;;;;;  282099 0))
+;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (21620 25920
+;;;;;;  601566 783000))
 ;;; Generated autoloads from gnus/gnus-start.el
 
 (autoload 'gnus-declare-backend "gnus-start" "\
@@ -12402,8 +12438,8 @@ Declare back end NAME with ABILITIES as a Gnus back end.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (21584 48809
-;;;;;;  507899 0))
+;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (21623 2108 292281
+;;;;;;  129000))
 ;;; Generated autoloads from gnus/gnus-sum.el
 
 (autoload 'gnus-summary-bookmark-jump "gnus-sum" "\
@@ -12414,8 +12450,8 @@ BOOKMARK is a bookmark name or a bookmark record.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-sync.el
 
 (autoload 'gnus-sync-initialize "gnus-sync" "\
@@ -12430,8 +12466,8 @@ Install the sync hooks.
 
 ;;;***
 
-;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gnus-win.el
 
 (autoload 'gnus-add-configuration "gnus-win" "\
@@ -12441,8 +12477,8 @@ Add the window configuration CONF to 
`gnus-buffer-configuration'.
 
 ;;;***
 
-;;;### (autoloads nil "gnutls" "net/gnutls.el" (21570 15914 957442
-;;;;;;  0))
+;;;### (autoloads nil "gnutls" "net/gnutls.el" (21638 55899 942254
+;;;;;;  689000))
 ;;; Generated autoloads from net/gnutls.el
 
 (defvar gnutls-min-prime-bits 256 "\
@@ -12458,8 +12494,8 @@ A value of nil says to use the default GnuTLS value.")
 
 ;;;***
 
-;;;### (autoloads nil "gomoku" "play/gomoku.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "gomoku" "play/gomoku.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/gomoku.el
 
 (autoload 'gomoku "gomoku" "\
@@ -12485,8 +12521,8 @@ Use \\[describe-mode] for more info.
 
 ;;;***
 
-;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from net/goto-addr.el
 
 (define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point 
"22.1")
@@ -12527,8 +12563,8 @@ Like `goto-address-mode', but only for comments and 
strings.
 
 ;;;***
 
-;;;### (autoloads nil "gravatar" "gnus/gravatar.el" (21296 1575 438327
-;;;;;;  0))
+;;;### (autoloads nil "gravatar" "gnus/gravatar.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/gravatar.el
 
 (autoload 'gravatar-retrieve "gravatar" "\
@@ -12544,8 +12580,8 @@ Retrieve MAIL-ADDRESS gravatar and returns it.
 
 ;;;***
 
-;;;### (autoloads nil "grep" "progmodes/grep.el" (21542 36519 256429
-;;;;;;  0))
+;;;### (autoloads nil "grep" "progmodes/grep.el" (21612 31801 50825
+;;;;;;  711000))
 ;;; Generated autoloads from progmodes/grep.el
 
 (defvar grep-window-height nil "\
@@ -12709,7 +12745,7 @@ file name to `*.gz', and sets `grep-highlight-matches' 
to `always'.
 
 ;;;***
 
-;;;### (autoloads nil "gs" "gs.el" (21240 46395 727291 0))
+;;;### (autoloads nil "gs" "gs.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from gs.el
 
 (autoload 'gs-load-image "gs" "\
@@ -12722,8 +12758,8 @@ the form \"WINDOW-ID PIXMAP-ID\".  Value is non-nil if 
successful.
 
 ;;;***
 
-;;;### (autoloads nil "gud" "progmodes/gud.el" (21549 9768 351453
-;;;;;;  0))
+;;;### (autoloads nil "gud" "progmodes/gud.el" (21638 55899 942254
+;;;;;;  689000))
 ;;; Generated autoloads from progmodes/gud.el
 
 (autoload 'gud-gdb "gud" "\
@@ -12818,8 +12854,8 @@ it if ARG is omitted or nil.
 
 ;;;***
 
-;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (21588 45860 859392
-;;;;;;  0))
+;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/gv.el
 
 (autoload 'gv-get "gv" "\
@@ -12921,8 +12957,8 @@ binding mode.
 
 ;;;***
 
-;;;### (autoloads nil "handwrite" "play/handwrite.el" (21207 49087
-;;;;;;  974317 0))
+;;;### (autoloads nil "handwrite" "play/handwrite.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from play/handwrite.el
 
 (autoload 'handwrite "handwrite" "\
@@ -12939,8 +12975,8 @@ Variables: `handwrite-linespace'     (default 12)
 
 ;;;***
 
-;;;### (autoloads nil "hanoi" "play/hanoi.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "hanoi" "play/hanoi.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/hanoi.el
 
 (autoload 'hanoi "hanoi" "\
@@ -12967,8 +13003,8 @@ to be updated.
 
 ;;;***
 
-;;;### (autoloads nil "hashcash" "mail/hashcash.el" (21296 1575 438327
-;;;;;;  0))
+;;;### (autoloads nil "hashcash" "mail/hashcash.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/hashcash.el
 
 (autoload 'hashcash-insert-payment "hashcash" "\
@@ -13010,8 +13046,8 @@ Prefix arg sets default accept amount temporarily.
 
 ;;;***
 
-;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (21231 31415 579137
-;;;;;;  0))
+;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from help-at-pt.el
 
 (autoload 'help-at-pt-string "help-at-pt" "\
@@ -13138,8 +13174,8 @@ different regions.  With numeric argument ARG, behaves 
like
 
 ;;;***
 
-;;;### (autoloads nil "help-fns" "help-fns.el" (21419 62246 751914
-;;;;;;  0))
+;;;### (autoloads nil "help-fns" "help-fns.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from help-fns.el
 
 (autoload 'describe-function "help-fns" "\
@@ -13218,8 +13254,8 @@ Produce a texinfo buffer with sorted doc-strings from 
the DOC file.
 
 ;;;***
 
-;;;### (autoloads nil "help-macro" "help-macro.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "help-macro" "help-macro.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from help-macro.el
 
 (defvar three-step-help nil "\
@@ -13233,8 +13269,8 @@ gives the window that lists the options.")
 
 ;;;***
 
-;;;### (autoloads nil "help-mode" "help-mode.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "help-mode" "help-mode.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from help-mode.el
 
 (autoload 'help-mode "help-mode" "\
@@ -13333,8 +13369,8 @@ BOOKMARK is a bookmark name or a bookmark record.
 
 ;;;***
 
-;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/helper.el
 
 (autoload 'Helper-describe-bindings "helper" "\
@@ -13349,7 +13385,7 @@ Provide help for current mode.
 
 ;;;***
 
-;;;### (autoloads nil "hexl" "hexl.el" (21271 1974 113743 0))
+;;;### (autoloads nil "hexl" "hexl.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from hexl.el
 
 (autoload 'hexl-mode "hexl" "\
@@ -13443,7 +13479,8 @@ This discards the buffer's undo information.
 
 ;;;***
 
-;;;### (autoloads nil "hi-lock" "hi-lock.el" (21383 2343 498187 0))
+;;;### (autoloads nil "hi-lock" "hi-lock.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from hi-lock.el
 
 (autoload 'hi-lock-mode "hi-lock" "\
@@ -13610,8 +13647,8 @@ be found in variable `hi-lock-interactive-patterns'.
 
 ;;;***
 
-;;;### (autoloads nil "hideif" "progmodes/hideif.el" (21546 33576
-;;;;;;  601815 0))
+;;;### (autoloads nil "hideif" "progmodes/hideif.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/hideif.el
 
 (autoload 'hide-ifdef-mode "hideif" "\
@@ -13658,8 +13695,8 @@ Several variables affect how the hiding is done:
 
 ;;;***
 
-;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (21460 53672
-;;;;;;  48319 0))
+;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/hideshow.el
 
 (defvar hs-special-modes-alist (mapcar 'purecopy '((c-mode "{" "}" "/[*/]" nil 
nil) (c++-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) 
(java-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil))) "\
@@ -13721,8 +13758,8 @@ Unconditionally turn off `hs-minor-mode'.
 
 ;;;***
 
-;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (21271 1974 113743
-;;;;;;  0))
+;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from hilit-chg.el
 
 (autoload 'highlight-changes-mode "hilit-chg" "\
@@ -13853,8 +13890,8 @@ See `highlight-changes-mode' for more information on 
Highlight-Changes mode.
 
 ;;;***
 
-;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (21402 53158 293492
-;;;;;;  0))
+;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from hippie-exp.el
 (push (purecopy '(hippie-exp 1 6)) package--builtin-versions)
 
@@ -13886,8 +13923,8 @@ argument VERBOSE non-nil makes the function verbose.
 
 ;;;***
 
-;;;### (autoloads nil "hl-line" "hl-line.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "hl-line" "hl-line.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from hl-line.el
 
 (autoload 'hl-line-mode "hl-line" "\
@@ -13936,8 +13973,8 @@ Global-Hl-Line mode uses the functions 
`global-hl-line-unhighlight' and
 
 ;;;***
 
-;;;### (autoloads nil "holidays" "calendar/holidays.el" (21554 27688
-;;;;;;  263871 0))
+;;;### (autoloads nil "holidays" "calendar/holidays.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from calendar/holidays.el
 
 (defvar holiday-general-holidays (mapcar 'purecopy '((holiday-fixed 1 1 "New 
Year's Day") (holiday-float 1 1 3 "Martin Luther King Day") (holiday-fixed 2 2 
"Groundhog Day") (holiday-fixed 2 14 "Valentine's Day") (holiday-float 2 1 3 
"President's Day") (holiday-fixed 3 17 "St. Patrick's Day") (holiday-fixed 4 1 
"April Fools' Day") (holiday-float 5 0 2 "Mother's Day") (holiday-float 5 1 -1 
"Memorial Day") (holiday-fixed 6 14 "Flag Day") (holiday-float 6 0 3 "Father's 
Day") (holiday-fixed 7 [...]
@@ -14047,8 +14084,8 @@ The optional LABEL is used to label the buffer created.
 
 ;;;***
 
-;;;### (autoloads nil "html2text" "gnus/html2text.el" (21417 20521
-;;;;;;  870414 0))
+;;;### (autoloads nil "html2text" "gnus/html2text.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/html2text.el
 
 (autoload 'html2text "html2text" "\
@@ -14058,8 +14095,8 @@ Convert HTML to plain text in the current buffer.
 
 ;;;***
 
-;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (21383 2343
-;;;;;;  498187 0))
+;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from htmlfontify.el
 (push (purecopy '(htmlfontify 0 21)) package--builtin-versions)
 
@@ -14092,8 +14129,8 @@ You may also want to set `hfy-page-header' and 
`hfy-page-footer'.
 
 ;;;***
 
-;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (21537 18599 384335
-;;;;;;  0))
+;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from ibuf-macs.el
 
 (autoload 'define-ibuffer-column "ibuf-macs" "\
@@ -14119,7 +14156,9 @@ inlined into the compiled format versions.  This means 
that if you
 change its definition, you should explicitly call
 `ibuffer-recompile-formats'.
 
-\(fn SYMBOL (&key NAME INLINE PROPS SUMMARIZER) &rest BODY)" nil (quote macro))
+\(fn SYMBOL (&key NAME INLINE PROPS SUMMARIZER) &rest BODY)" nil t)
+
+(function-put 'define-ibuffer-column 'lisp-indent-function 'defun)
 
 (autoload 'define-ibuffer-sorter "ibuf-macs" "\
 Define a method of sorting named NAME.
@@ -14131,7 +14170,11 @@ For sorting, the forms in BODY will be evaluated with 
`a' bound to one
 buffer object, and `b' bound to another.  BODY should return a non-nil
 value if and only if `a' is \"less than\" `b'.
 
-\(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)" nil (quote macro))
+\(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)" nil t)
+
+(function-put 'define-ibuffer-sorter 'lisp-indent-function '1)
+
+(function-put 'define-ibuffer-sorter 'doc-string-elt '2)
 
 (autoload 'define-ibuffer-op "ibuf-macs" "\
 Generate a function which operates on a buffer.
@@ -14164,7 +14207,11 @@ confirmation message, in the form:
 COMPLEX means this function is special; see the source code of this
 macro for exactly what it does.
 
-\(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS 
OPSTRING ACTIVE-OPSTRING COMPLEX) &rest BODY)" nil (quote macro))
+\(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS 
OPSTRING ACTIVE-OPSTRING COMPLEX) &rest BODY)" nil t)
+
+(function-put 'define-ibuffer-op 'lisp-indent-function '2)
+
+(function-put 'define-ibuffer-op 'doc-string-elt '3)
 
 (autoload 'define-ibuffer-filter "ibuf-macs" "\
 Define a filter named NAME.
@@ -14177,12 +14224,16 @@ not a particular buffer should be displayed or not.  
The forms in BODY
 will be evaluated with BUF bound to the buffer object, and QUALIFIER
 bound to the current value of the filter.
 
-\(fn NAME DOCUMENTATION (&key READER DESCRIPTION) &rest BODY)" nil (quote 
macro))
+\(fn NAME DOCUMENTATION (&key READER DESCRIPTION) &rest BODY)" nil t)
+
+(function-put 'define-ibuffer-filter 'lisp-indent-function '2)
+
+(function-put 'define-ibuffer-filter 'doc-string-elt '2)
 
 ;;;***
 
-;;;### (autoloads nil "ibuffer" "ibuffer.el" (21537 18854 710114
-;;;;;;  217000))
+;;;### (autoloads nil "ibuffer" "ibuffer.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from ibuffer.el
 
 (autoload 'ibuffer-list-buffers "ibuffer" "\
@@ -14221,8 +14272,8 @@ FORMATS is the value to use for `ibuffer-formats'.
 
 ;;;***
 
-;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (21584
-;;;;;;  48809 507899 0))
+;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (21611
+;;;;;;  10937 700236 3000))
 ;;; Generated autoloads from calendar/icalendar.el
 (push (purecopy '(icalendar 0 19)) package--builtin-versions)
 
@@ -14275,8 +14326,8 @@ buffer `*icalendar-errors*'.
 
 ;;;***
 
-;;;### (autoloads nil "icomplete" "icomplete.el" (21555 48550 492098
-;;;;;;  0))
+;;;### (autoloads nil "icomplete" "icomplete.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from icomplete.el
 
 (defvar icomplete-mode nil "\
@@ -14315,8 +14366,8 @@ completions:
 
 ;;;***
 
-;;;### (autoloads nil "icon" "progmodes/icon.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "icon" "progmodes/icon.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from progmodes/icon.el
 
 (autoload 'icon-mode "icon" "\
@@ -14356,8 +14407,8 @@ with no args, if that value is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (21429
-;;;;;;  11690 49391 0))
+;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/idlw-shell.el
 
 (autoload 'idlwave-shell "idlw-shell" "\
@@ -14382,8 +14433,8 @@ See also the variable `idlwave-shell-prompt-pattern'.
 
 ;;;***
 
-;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (21429 11690
-;;;;;;  49391 0))
+;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (21645 29117
+;;;;;;  170137 362000))
 ;;; Generated autoloads from progmodes/idlwave.el
 (push (purecopy '(idlwave 6 1 22)) package--builtin-versions)
 
@@ -14512,7 +14563,7 @@ The main features of this mode are
 
 ;;;***
 
-;;;### (autoloads nil "ido" "ido.el" (21584 48809 507899 0))
+;;;### (autoloads nil "ido" "ido.el" (21612 31801 50825 711000))
 ;;; Generated autoloads from ido.el
 
 (defvar ido-mode nil "\
@@ -14774,7 +14825,7 @@ DEF, if non-nil, is the default value.
 
 ;;;***
 
-;;;### (autoloads nil "ielm" "ielm.el" (21542 36519 256429 0))
+;;;### (autoloads nil "ielm" "ielm.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from ielm.el
 
 (autoload 'ielm "ielm" "\
@@ -14786,7 +14837,7 @@ See `inferior-emacs-lisp-mode' for details.
 
 ;;;***
 
-;;;### (autoloads nil "iimage" "iimage.el" (21289 28325 826818 0))
+;;;### (autoloads nil "iimage" "iimage.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from iimage.el
 
 (define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1")
@@ -14802,7 +14853,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG 
is `toggle'.
 
 ;;;***
 
-;;;### (autoloads nil "image" "image.el" (21526 48295 289762 0))
+;;;### (autoloads nil "image" "image.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from image.el
 
 (autoload 'image-type-from-data "image" "\
@@ -14995,8 +15046,8 @@ If Emacs is compiled without ImageMagick support, this 
does nothing.
 
 ;;;***
 
-;;;### (autoloads nil "image-dired" "image-dired.el" (21194 37048
-;;;;;;  599945 0))
+;;;### (autoloads nil "image-dired" "image-dired.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from image-dired.el
 (push (purecopy '(image-dired 0 4 11)) package--builtin-versions)
 
@@ -15133,8 +15184,8 @@ easy-to-use form.
 
 ;;;***
 
-;;;### (autoloads nil "image-file" "image-file.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "image-file" "image-file.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from image-file.el
 
 (defvar image-file-name-extensions (purecopy '("png" "jpeg" "jpg" "gif" "tiff" 
"tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")) "\
@@ -15196,8 +15247,8 @@ An image file is one whose name has an extension in
 
 ;;;***
 
-;;;### (autoloads nil "image-mode" "image-mode.el" (21532 676 459903
-;;;;;;  0))
+;;;### (autoloads nil "image-mode" "image-mode.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from image-mode.el
 
 (autoload 'image-mode "image-mode" "\
@@ -15244,7 +15295,7 @@ on these modes.
 
 ;;;***
 
-;;;### (autoloads nil "imenu" "imenu.el" (21574 12970 82034 0))
+;;;### (autoloads nil "imenu" "imenu.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from imenu.el
 
 (defvar imenu-sort-function nil "\
@@ -15382,8 +15433,8 @@ for more information.
 
 ;;;***
 
-;;;### (autoloads nil "ind-util" "language/ind-util.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "ind-util" "language/ind-util.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from language/ind-util.el
 
 (autoload 'indian-compose-region "ind-util" "\
@@ -15413,8 +15464,8 @@ Convert old Emacs Devanagari characters to UCS.
 
 ;;;***
 
-;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (21437 5802
-;;;;;;  125919 0))
+;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/inf-lisp.el
 
 (autoload 'inferior-lisp "inf-lisp" "\
@@ -15432,7 +15483,7 @@ of `inferior-lisp-program').  Runs the hooks from
 
 ;;;***
 
-;;;### (autoloads nil "info" "info.el" (21559 45607 560399 0))
+;;;### (autoloads nil "info" "info.el" (21669 11452 35624 425000))
 ;;; Generated autoloads from info.el
 
 (defcustom Info-default-directory-list (let* ((config-dir 
(file-name-as-directory (or (and (featurep 'ns) (let ((dir (expand-file-name 
"../info" data-directory))) (if (file-directory-p dir) dir))) 
configure-info-directory))) (prefixes (prune-directory-list '("/usr/local/" 
"/usr/" "/opt/" "/"))) (suffixes '("share/" "" "gnu/" "gnu/lib/" 
"gnu/lib/emacs/" "emacs/" "lib/" "lib/emacs/")) (standard-info-dirs (apply 
#'nconc (mapcar (lambda (pfx) (let ((dirs (mapcar (lambda (sfx) (concat pfx sfx 
[...]
@@ -15636,14 +15687,16 @@ type returned by `Info-bookmark-make-record', which 
see.
 (autoload 'info-display-manual "info" "\
 Display an Info buffer displaying MANUAL.
 If there is an existing Info buffer for MANUAL, display it.
-Otherwise, visit the manual in a new Info buffer.
+Otherwise, visit the manual in a new Info buffer.  In interactive
+use, a prefix argument directs this command to limit the
+completion alternatives to currently visited manuals.
 
 \(fn MANUAL)" t nil)
 
 ;;;***
 
-;;;### (autoloads nil "info-look" "info-look.el" (21238 4664 559807
-;;;;;;  0))
+;;;### (autoloads nil "info-look" "info-look.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from info-look.el
 
 (autoload 'info-lookup-reset "info-look" "\
@@ -15690,8 +15743,8 @@ Perform completion on file preceding point.
 
 ;;;***
 
-;;;### (autoloads nil "info-xref" "info-xref.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "info-xref" "info-xref.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from info-xref.el
 (push (purecopy '(info-xref 3)) package--builtin-versions)
 
@@ -15774,8 +15827,8 @@ the sources handy.
 
 ;;;***
 
-;;;### (autoloads nil "informat" "informat.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "informat" "informat.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from informat.el
 
 (autoload 'Info-tagify "informat" "\
@@ -15820,8 +15873,23 @@ For example, invoke \"emacs -batch -f 
batch-info-validate $info/ ~/*.info\"
 
 ;;;***
 
-;;;### (autoloads nil "inversion" "cedet/inversion.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "inline" "emacs-lisp/inline.el" (21632 17083
+;;;;;;  200835 890000))
+;;; Generated autoloads from emacs-lisp/inline.el
+
+(autoload 'define-inline "inline" "\
+
+
+\(fn NAME ARGS &rest BODY)" nil t)
+
+(function-put 'define-inline 'lisp-indent-function 'defun)
+
+(function-put 'define-inline 'doc-string-elt '3)
+
+;;;***
+
+;;;### (autoloads nil "inversion" "cedet/inversion.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from cedet/inversion.el
 (push (purecopy '(inversion 1 3)) package--builtin-versions)
 
@@ -15833,8 +15901,8 @@ Only checks one based on which kind of Emacs is being 
run.
 
 ;;;***
 
-;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from international/isearch-x.el
 
 (autoload 'isearch-toggle-specified-input-method "isearch-x" "\
@@ -15854,8 +15922,8 @@ Toggle input method in interactive search.
 
 ;;;***
 
-;;;### (autoloads nil "isearchb" "isearchb.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "isearchb" "isearchb.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from isearchb.el
 (push (purecopy '(isearchb 1 5)) package--builtin-versions)
 
@@ -15869,8 +15937,8 @@ accessed via isearchb.
 
 ;;;***
 
-;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from international/iso-cvt.el
 
 (autoload 'iso-spanish "iso-cvt" "\
@@ -15961,15 +16029,15 @@ Add submenus to the File menu, to convert to and from 
various formats.
 ;;;***
 
 ;;;### (autoloads nil "iso-transl" "international/iso-transl.el"
-;;;;;;  (21240 46395 727291 0))
+;;;;;;  (21607 54478 300138 641000))
 ;;; Generated autoloads from international/iso-transl.el
  (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map)
  (autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 
'keymap)
 
 ;;;***
 
-;;;### (autoloads nil "ispell" "textmodes/ispell.el" (21356 43818
-;;;;;;  957743 0))
+;;;### (autoloads nil "ispell" "textmodes/ispell.el" (21653 23227
+;;;;;;  760147 961000))
 ;;; Generated autoloads from textmodes/ispell.el
 
 (put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t 
exclusive))))
@@ -16202,8 +16270,8 @@ You can bind this to the key C-c i in GNUS or mail by 
adding to
 
 ;;;***
 
-;;;### (autoloads nil "japan-util" "language/japan-util.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "japan-util" "language/japan-util.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from language/japan-util.el
 
 (autoload 'setup-japanese-environment-internal "japan-util" "\
@@ -16280,8 +16348,8 @@ If non-nil, second arg INITIAL-INPUT is a string to 
insert before reading.
 
 ;;;***
 
-;;;### (autoloads nil "jka-compr" "jka-compr.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "jka-compr" "jka-compr.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from jka-compr.el
 
 (defvar jka-compr-inhibit nil "\
@@ -16304,7 +16372,7 @@ by `jka-compr-installed'.
 
 ;;;***
 
-;;;### (autoloads nil "js" "progmodes/js.el" (21529 24490 97012 0))
+;;;### (autoloads nil "js" "progmodes/js.el" (21663 59071 96337 184000))
 ;;; Generated autoloads from progmodes/js.el
 (push (purecopy '(js 9)) package--builtin-versions)
 
@@ -16318,14 +16386,14 @@ Major mode for editing JavaScript.
 
 ;;;***
 
-;;;### (autoloads nil "json" "json.el" (21187 63826 213216 0))
+;;;### (autoloads nil "json" "json.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from json.el
 (push (purecopy '(json 1 4)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "keypad" "emulation/keypad.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "keypad" "emulation/keypad.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emulation/keypad.el
 
 (defvar keypad-setup nil "\
@@ -16380,8 +16448,8 @@ the decimal key on the keypad is mapped to DECIMAL 
instead of `.'
 
 ;;;***
 
-;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from international/kinsoku.el
 
 (autoload 'kinsoku "kinsoku" "\
@@ -16402,8 +16470,8 @@ the context of text formatting.
 
 ;;;***
 
-;;;### (autoloads nil "kkc" "international/kkc.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "kkc" "international/kkc.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from international/kkc.el
 
 (defvar kkc-after-update-conversion-functions nil "\
@@ -16425,7 +16493,7 @@ and the return value is the length of the conversion.
 
 ;;;***
 
-;;;### (autoloads nil "kmacro" "kmacro.el" (21244 11875 194797 0))
+;;;### (autoloads nil "kmacro" "kmacro.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from kmacro.el
  (global-set-key "\C-x(" 'kmacro-start-macro)
  (global-set-key "\C-x)" 'kmacro-end-macro)
@@ -16537,8 +16605,8 @@ If kbd macro currently being defined end it before 
activating it.
 
 ;;;***
 
-;;;### (autoloads nil "korea-util" "language/korea-util.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "korea-util" "language/korea-util.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from language/korea-util.el
 
 (defvar default-korean-keyboard (purecopy (if (string-match "3" (or (getenv 
"HANGUL_KEYBOARD_TYPE") "")) "3" "")) "\
@@ -16552,8 +16620,8 @@ The kind of Korean keyboard for Korean input method.
 
 ;;;***
 
-;;;### (autoloads nil "landmark" "play/landmark.el" (21419 7843 195974
-;;;;;;  0))
+;;;### (autoloads nil "landmark" "play/landmark.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from play/landmark.el
 (push (purecopy '(landmark 1 0)) package--builtin-versions)
 
@@ -16584,8 +16652,8 @@ Use \\[describe-mode] for more info.
 
 ;;;***
 
-;;;### (autoloads nil "lao-util" "language/lao-util.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "lao-util" "language/lao-util.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from language/lao-util.el
 
 (autoload 'lao-compose-string "lao-util" "\
@@ -16622,8 +16690,8 @@ Transcribe Romanized Lao string STR to Lao character 
string.
 
 ;;;***
 
-;;;### (autoloads nil "latexenc" "international/latexenc.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "latexenc" "international/latexenc.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from international/latexenc.el
 
 (defvar latex-inputenc-coding-alist (purecopy '(("ansinew" . windows-1252) 
("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) 
("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . 
cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) 
("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) 
("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) 
("next" . next) ("utf8" . utf-8) ("utf8x" .  [...]
@@ -16655,7 +16723,7 @@ coding system names is determined from 
`latex-inputenc-coding-alist'.
 ;;;***
 
 ;;;### (autoloads nil "latin1-disp" "international/latin1-disp.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21607 54478 300138 641000))
 ;;; Generated autoloads from international/latin1-disp.el
 
 (defvar latin1-display nil "\
@@ -16696,8 +16764,8 @@ use either \\[customize] or the function 
`latin1-display'.")
 
 ;;;***
 
-;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/ld-script.el
 
 (autoload 'ld-script-mode "ld-script" "\
@@ -16707,7 +16775,47 @@ A major mode to edit GNU ld script files
 
 ;;;***
 
-;;;### (autoloads nil "life" "play/life.el" (21240 46395 727291 0))
+;;;### (autoloads nil "let-alist" "let-alist.el" (21661 17341 365638
+;;;;;;  429000))
+;;; Generated autoloads from let-alist.el
+(push (purecopy '(let-alist 1 0 3)) package--builtin-versions)
+
+(autoload 'let-alist "let-alist" "\
+Let-bind dotted symbols to their cdrs in ALIST and execute BODY.
+Dotted symbol is any symbol starting with a `.'.  Only those present
+in BODY are let-bound and this search is done at compile time.
+
+For instance, the following code
+
+  (let-alist alist
+    (if (and .title .body)
+        .body
+      .site
+      .site.contents))
+
+essentially expands to
+
+  (let ((.title (cdr (assq 'title alist)))
+        (.body  (cdr (assq 'body alist)))
+        (.site  (cdr (assq 'site alist)))
+        (.site.contents (cdr (assq 'contents (cdr (assq 'site alist))))))
+    (if (and .title .body)
+        .body
+      .site
+      .site.contents))
+
+If you nest `let-alist' invocations, the inner one can't access
+the variables of the outer one. You can, however, access alists
+inside the original alist by using dots inside the symbol, as
+displayed in the example above.
+
+\(fn ALIST &rest BODY)" nil t)
+
+(function-put 'let-alist 'lisp-indent-function '1)
+
+;;;***
+
+;;;### (autoloads nil "life" "play/life.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from play/life.el
 
 (autoload 'life "life" "\
@@ -16720,7 +16828,7 @@ generations (this defaults to 1).
 
 ;;;***
 
-;;;### (autoloads nil "linum" "linum.el" (21437 5802 125919 0))
+;;;### (autoloads nil "linum" "linum.el" (21652 2366 414435 564000))
 ;;; Generated autoloads from linum.el
 (push (purecopy '(linum 0 9 24)) package--builtin-versions)
 
@@ -16757,8 +16865,8 @@ See `linum-mode' for more information on Linum mode.
 
 ;;;***
 
-;;;### (autoloads nil "loadhist" "loadhist.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "loadhist" "loadhist.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from loadhist.el
 
 (autoload 'unload-feature "loadhist" "\
@@ -16789,7 +16897,7 @@ something strange, such as redefining an Emacs function.
 
 ;;;***
 
-;;;### (autoloads nil "locate" "locate.el" (21187 63826 213216 0))
+;;;### (autoloads nil "locate" "locate.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from locate.el
 
 (defvar locate-ls-subdir-switches (purecopy "-al") "\
@@ -16841,8 +16949,8 @@ except that FILTER is not optional.
 
 ;;;***
 
-;;;### (autoloads nil "log-edit" "vc/log-edit.el" (21442 23723 6983
-;;;;;;  0))
+;;;### (autoloads nil "log-edit" "vc/log-edit.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from vc/log-edit.el
 
 (autoload 'log-edit "log-edit" "\
@@ -16873,8 +16981,8 @@ done.  Otherwise, it uses the current buffer.
 
 ;;;***
 
-;;;### (autoloads nil "log-view" "vc/log-view.el" (21195 57908 940910
-;;;;;;  0))
+;;;### (autoloads nil "log-view" "vc/log-view.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from vc/log-view.el
 
 (autoload 'log-view-mode "log-view" "\
@@ -16884,7 +16992,7 @@ Major mode for browsing CVS log output.
 
 ;;;***
 
-;;;### (autoloads nil "lpr" "lpr.el" (21240 46395 727291 0))
+;;;### (autoloads nil "lpr" "lpr.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from lpr.el
 
 (defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\
@@ -16979,8 +17087,8 @@ for further customization of the printer command.
 
 ;;;***
 
-;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (21546 33576 601815
-;;;;;;  0))
+;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from ls-lisp.el
 
 (defvar ls-lisp-support-shell-wildcards t "\
@@ -16991,8 +17099,8 @@ Otherwise they are treated as Emacs regexps (for 
backward compatibility).")
 
 ;;;***
 
-;;;### (autoloads nil "lunar" "calendar/lunar.el" (21554 27688 263871
-;;;;;;  0))
+;;;### (autoloads nil "lunar" "calendar/lunar.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from calendar/lunar.el
 
 (autoload 'lunar-phases "lunar" "\
@@ -17004,8 +17112,8 @@ This function is suitable for execution in an init file.
 
 ;;;***
 
-;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (21567 8911
-;;;;;;  359241 0))
+;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/m4-mode.el
 
 (autoload 'm4-mode "m4-mode" "\
@@ -17015,7 +17123,7 @@ A major mode to edit m4 macro files.
 
 ;;;***
 
-;;;### (autoloads nil "macros" "macros.el" (21240 46395 727291 0))
+;;;### (autoloads nil "macros" "macros.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from macros.el
 
 (autoload 'name-last-kbd-macro "macros" "\
@@ -17104,8 +17212,8 @@ and then select the region of un-tablified names and use
 
 ;;;***
 
-;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/mail-extr.el
 
 (autoload 'mail-extract-address-components "mail-extr" "\
@@ -17135,8 +17243,8 @@ Convert mail domain DOMAIN to the country it 
corresponds to.
 
 ;;;***
 
-;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/mail-hist.el
 
 (autoload 'mail-hist-define-keys "mail-hist" "\
@@ -17165,8 +17273,8 @@ This function normally would be called when the message 
is sent.
 
 ;;;***
 
-;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/mail-utils.el
 
 (defvar mail-use-rfc822 nil "\
@@ -17240,8 +17348,8 @@ matches may be returned from the message body.
 
 ;;;***
 
-;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/mailabbrev.el
 
 (defvar mail-abbrevs-mode nil "\
@@ -17290,8 +17398,8 @@ double-quotes.
 
 ;;;***
 
-;;;### (autoloads nil "mailalias" "mail/mailalias.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "mailalias" "mail/mailalias.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/mailalias.el
 
 (defvar mail-complete-style 'angles "\
@@ -17344,8 +17452,8 @@ current header, calls `mail-complete-function' and 
passes prefix ARG if any.
 
 ;;;***
 
-;;;### (autoloads nil "mailclient" "mail/mailclient.el" (21215 8898
-;;;;;;  840126 623000))
+;;;### (autoloads nil "mailclient" "mail/mailclient.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/mailclient.el
 
 (autoload 'mailclient-send-it "mailclient" "\
@@ -17357,8 +17465,8 @@ The mail client is taken to be the handler of mailto 
URLs.
 
 ;;;***
 
-;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/make-mode.el
 
 (autoload 'makefile-mode "make-mode" "\
@@ -17475,8 +17583,8 @@ An adapted `makefile-mode' that knows about imake.
 
 ;;;***
 
-;;;### (autoloads nil "makesum" "makesum.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "makesum" "makesum.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from makesum.el
 
 (autoload 'make-command-summary "makesum" "\
@@ -17487,7 +17595,7 @@ Previous contents of that buffer are killed first.
 
 ;;;***
 
-;;;### (autoloads nil "man" "man.el" (21580 51751 606453 0))
+;;;### (autoloads nil "man" "man.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from man.el
 
 (defalias 'manual-entry 'man)
@@ -17543,7 +17651,7 @@ Default bookmark handler for Man buffers.
 
 ;;;***
 
-;;;### (autoloads nil "master" "master.el" (21187 63826 213216 0))
+;;;### (autoloads nil "master" "master.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from master.el
 (push (purecopy '(master 1 0 2)) package--builtin-versions)
 
@@ -17566,8 +17674,8 @@ yourself the value of `master-of' by calling 
`master-show-slave'.
 
 ;;;***
 
-;;;### (autoloads nil "mb-depth" "mb-depth.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "mb-depth" "mb-depth.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from mb-depth.el
 
 (defvar minibuffer-depth-indicate-mode nil "\
@@ -17594,14 +17702,14 @@ recursion depth in the minibuffer prompt.  This is 
only useful if
 
 ;;;***
 
-;;;### (autoloads nil "md4" "md4.el" (21187 63826 213216 0))
+;;;### (autoloads nil "md4" "md4.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from md4.el
 (push (purecopy '(md4 1 0)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "message" "gnus/message.el" (21584 48809 507899
-;;;;;;  0))
+;;;### (autoloads nil "message" "gnus/message.el" (21666 35265 825623
+;;;;;;  21000))
 ;;; Generated autoloads from gnus/message.el
 
 (define-mail-user-agent 'message-user-agent 'message-mail 
'message-send-and-exit 'message-kill-buffer 'message-send-hook)
@@ -17766,8 +17874,8 @@ which specify the range to operate on.
 
 ;;;***
 
-;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/meta-mode.el
 (push (purecopy '(meta-mode 1 0)) package--builtin-versions)
 
@@ -17783,8 +17891,8 @@ Major mode for editing MetaPost sources.
 
 ;;;***
 
-;;;### (autoloads nil "metamail" "mail/metamail.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "metamail" "mail/metamail.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/metamail.el
 
 (autoload 'metamail-interpret-header "metamail" "\
@@ -17827,8 +17935,8 @@ redisplayed as output is inserted.
 
 ;;;***
 
-;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (21546 33576 601815
-;;;;;;  0))
+;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from mh-e/mh-comp.el
 
 (autoload 'mh-smail "mh-comp" "\
@@ -17918,7 +18026,7 @@ delete the draft message.
 
 ;;;***
 
-;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (21546 33576 601815 0))
+;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from mh-e/mh-e.el
 (push (purecopy '(mh-e 8 6)) package--builtin-versions)
 
@@ -17935,8 +18043,8 @@ Display version information about MH-E and the MH mail 
handling system.
 
 ;;;***
 
-;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (21286 52150
-;;;;;;  476720 0))
+;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mh-e/mh-folder.el
 
 (autoload 'mh-rmail "mh-folder" "\
@@ -18017,8 +18125,8 @@ perform the operation on all messages in that region.
 
 ;;;***
 
-;;;### (autoloads nil "midnight" "midnight.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "midnight" "midnight.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from midnight.el
 
 (autoload 'clean-buffer-list "midnight" "\
@@ -18044,8 +18152,8 @@ to its second argument TM.
 
 ;;;***
 
-;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from minibuf-eldef.el
 
 (defvar minibuffer-electric-default-mode nil "\
@@ -18074,7 +18182,7 @@ is modified to remove the default indication.
 
 ;;;***
 
-;;;### (autoloads nil "misc" "misc.el" (21240 46395 727291 0))
+;;;### (autoloads nil "misc" "misc.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from misc.el
 
 (autoload 'butterfly "misc" "\
@@ -18102,8 +18210,8 @@ The return value is always nil.
 
 ;;;***
 
-;;;### (autoloads nil "misearch" "misearch.el" (21245 64312 799897
-;;;;;;  0))
+;;;### (autoloads nil "misearch" "misearch.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from misearch.el
  (add-hook 'isearch-mode-hook 'multi-isearch-setup)
 
@@ -18138,6 +18246,10 @@ Isearch starts.")
 The buffer where the search is currently searching.
 The value is nil when the search still is in the initial buffer.")
 
+(defvar multi-isearch-buffer-list nil)
+
+(defvar multi-isearch-file-list nil)
+
 (autoload 'multi-isearch-setup "misearch" "\
 Set up isearch to search multiple buffers.
 Intended to be added to `isearch-mode-hook'.
@@ -18184,8 +18296,8 @@ whose file names match the specified wildcard.
 
 ;;;***
 
-;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/mixal-mode.el
 (push (purecopy '(mixal-mode 0 1)) package--builtin-versions)
 
@@ -18196,8 +18308,8 @@ Major mode for the mixal asm language.
 
 ;;;***
 
-;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/mm-encode.el
 
 (autoload 'mm-default-file-encoding "mm-encode" "\
@@ -18207,8 +18319,8 @@ Return a default encoding for FILE.
 
 ;;;***
 
-;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (21296 1575
-;;;;;;  438327 0))
+;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/mm-extern.el
 
 (autoload 'mm-extern-cache-contents "mm-extern" "\
@@ -18226,8 +18338,8 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing 
after replacing.
 
 ;;;***
 
-;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/mm-partial.el
 
 (autoload 'mm-inline-partial "mm-partial" "\
@@ -18240,8 +18352,8 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing 
after replacing.
 
 ;;;***
 
-;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (21296 1575 438327
-;;;;;;  0))
+;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/mm-url.el
 
 (autoload 'mm-url-insert-file-contents "mm-url" "\
@@ -18257,8 +18369,8 @@ Insert file contents of URL using `mm-url-program'.
 
 ;;;***
 
-;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (21363 17065 850322
-;;;;;;  0))
+;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/mm-uu.el
 
 (autoload 'mm-uu-dissect "mm-uu" "\
@@ -18277,7 +18389,7 @@ Assume text has been decoded if DECODED is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "mml" "gnus/mml.el" (21546 33576 601815 0))
+;;;### (autoloads nil "mml" "gnus/mml.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from gnus/mml.el
 
 (autoload 'mml-to-mime "mml" "\
@@ -18302,8 +18414,8 @@ body) or \"attachment\" (separate from the body).
 
 ;;;***
 
-;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (21296 1575 438327
-;;;;;;  0))
+;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/mml1991.el
 
 (autoload 'mml1991-encrypt "mml1991" "\
@@ -18318,8 +18430,8 @@ body) or \"attachment\" (separate from the body).
 
 ;;;***
 
-;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (21546 33576 601815
-;;;;;;  0))
+;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/mml2015.el
 
 (autoload 'mml2015-decrypt "mml2015" "\
@@ -18359,16 +18471,16 @@ body) or \"attachment\" (separate from the body).
 
 ;;;***
 
-;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from cedet/mode-local.el
 
 (put 'define-overloadable-function 'doc-string-elt 3)
 
 ;;;***
 
-;;;### (autoloads nil "modula2" "progmodes/modula2.el" (21282 19826
-;;;;;;  403614 0))
+;;;### (autoloads nil "modula2" "progmodes/modula2.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/modula2.el
 
 (defalias 'modula-2-mode 'm2-mode)
@@ -18401,8 +18513,8 @@ followed by the first character of the construct.
 
 ;;;***
 
-;;;### (autoloads nil "morse" "play/morse.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "morse" "play/morse.el" (21616 28857 81577
+;;;;;;  239000))
 ;;; Generated autoloads from play/morse.el
 
 (autoload 'morse-region "morse" "\
@@ -18427,8 +18539,8 @@ Convert NATO phonetic alphabet in region to ordinary 
ASCII text.
 
 ;;;***
 
-;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (21202 31159 541460
-;;;;;;  0))
+;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from mouse-drag.el
 
 (autoload 'mouse-drag-throw "mouse-drag" "\
@@ -18475,7 +18587,7 @@ To test this function, evaluate:
 
 ;;;***
 
-;;;### (autoloads nil "mpc" "mpc.el" (21537 18599 384335 0))
+;;;### (autoloads nil "mpc" "mpc.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from mpc.el
 
 (autoload 'mpc "mpc" "\
@@ -18485,7 +18597,7 @@ Main entry point for MPC.
 
 ;;;***
 
-;;;### (autoloads nil "mpuz" "play/mpuz.el" (21187 63826 213216 0))
+;;;### (autoloads nil "mpuz" "play/mpuz.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from play/mpuz.el
 
 (autoload 'mpuz "mpuz" "\
@@ -18495,7 +18607,7 @@ Multiplication puzzle with GNU Emacs.
 
 ;;;***
 
-;;;### (autoloads nil "msb" "msb.el" (21528 3626 241769 0))
+;;;### (autoloads nil "msb" "msb.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from msb.el
 
 (defvar msb-mode nil "\
@@ -18520,8 +18632,8 @@ different buffer menu using the function `msb'.
 
 ;;;***
 
-;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (21652
+;;;;;;  2366 414435 564000))
 ;;; Generated autoloads from international/mule-diag.el
 
 (autoload 'list-character-sets "mule-diag" "\
@@ -18653,8 +18765,8 @@ The default is 20.  If LIMIT is negative, do not limit 
the listing.
 
 ;;;***
 
-;;;### (autoloads nil "mule-util" "international/mule-util.el" (21412
-;;;;;;  2598 318409 0))
+;;;### (autoloads nil "mule-util" "international/mule-util.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from international/mule-util.el
 
 (defsubst string-to-list (string) "\
@@ -18785,8 +18897,8 @@ per-character basis, this may not be accurate.
 
 ;;;***
 
-;;;### (autoloads nil "net-utils" "net/net-utils.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "net-utils" "net/net-utils.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from net/net-utils.el
 
 (autoload 'ifconfig "net-utils" "\
@@ -18880,8 +18992,8 @@ Open a network connection to HOST on PORT.
 
 ;;;***
 
-;;;### (autoloads nil "netrc" "net/netrc.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "netrc" "net/netrc.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from net/netrc.el
 
 (autoload 'netrc-credentials "netrc" "\
@@ -18893,8 +19005,8 @@ listed in the PORTS list.
 
 ;;;***
 
-;;;### (autoloads nil "network-stream" "net/network-stream.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "network-stream" "net/network-stream.el" (21644
+;;;;;;  8251 830117 252000))
 ;;; Generated autoloads from net/network-stream.el
 
 (autoload 'open-network-stream "network-stream" "\
@@ -18975,11 +19087,14 @@ values:
 :use-starttls-if-possible is a boolean that says to do opportunistic
 STARTTLS upgrades even if Emacs doesn't have built-in TLS functionality.
 
+:warn-unless-encrypted is a boolean which, if :return-list is
+non-nil, is used warn the user if the connection isn't encrypted.
+
 :nogreeting is a boolean that can be used to inhibit waiting for
 a greeting from the server.
 
 :nowait is a boolean that says the connection should be made
-  asynchronously, if possible.
+asynchronously, if possible.
 
 \(fn NAME BUFFER HOST SERVICE &rest PARAMETERS)" nil nil)
 
@@ -18987,8 +19102,8 @@ a greeting from the server.
 
 ;;;***
 
-;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (21584
-;;;;;;  48809 507899 0))
+;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (21628
+;;;;;;  45530 160140 360000))
 ;;; Generated autoloads from net/newst-backend.el
 
 (autoload 'newsticker-running-p "newst-backend" "\
@@ -19010,7 +19125,7 @@ Run `newsticker-start-hook' if newsticker was not 
running already.
 ;;;***
 
 ;;;### (autoloads nil "newst-plainview" "net/newst-plainview.el"
-;;;;;;  (21549 9768 351453 0))
+;;;;;;  (21607 54478 300138 641000))
 ;;; Generated autoloads from net/newst-plainview.el
 
 (autoload 'newsticker-plainview "newst-plainview" "\
@@ -19020,8 +19135,8 @@ Start newsticker plainview.
 
 ;;;***
 
-;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (21574
-;;;;;;  12970 82034 0))
+;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from net/newst-reader.el
 
 (autoload 'newsticker-show-news "newst-reader" "\
@@ -19031,8 +19146,8 @@ Start reading news.  You may want to bind this to a key.
 
 ;;;***
 
-;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (21549
-;;;;;;  9768 351453 0))
+;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from net/newst-ticker.el
 
 (autoload 'newsticker-ticker-running-p "newst-ticker" "\
@@ -19052,8 +19167,8 @@ running already.
 
 ;;;***
 
-;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (21572
-;;;;;;  57638 740412 0))
+;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (21636
+;;;;;;  14149 750837 46000))
 ;;; Generated autoloads from net/newst-treeview.el
 
 (autoload 'newsticker-treeview "newst-treeview" "\
@@ -19063,8 +19178,8 @@ Start newsticker treeview.
 
 ;;;***
 
-;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (21204 37210 187838
-;;;;;;  0))
+;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/nndiary.el
 
 (autoload 'nndiary-generate-nov-databases "nndiary" "\
@@ -19074,8 +19189,8 @@ Generate NOV databases in all nndiary directories.
 
 ;;;***
 
-;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/nndoc.el
 
 (autoload 'nndoc-add-type "nndoc" "\
@@ -19089,8 +19204,8 @@ symbol in the alist.
 
 ;;;***
 
-;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (21296 1575 438327
-;;;;;;  0))
+;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/nnfolder.el
 
 (autoload 'nnfolder-generate-active-file "nnfolder" "\
@@ -19101,7 +19216,7 @@ This command does not work if you use short group names.
 
 ;;;***
 
-;;;### (autoloads nil "nnml" "gnus/nnml.el" (21187 63826 213216 0))
+;;;### (autoloads nil "nnml" "gnus/nnml.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from gnus/nnml.el
 
 (autoload 'nnml-generate-nov-databases "nnml" "\
@@ -19111,7 +19226,7 @@ Generate NOV databases in all nnml directories.
 
 ;;;***
 
-;;;### (autoloads nil "novice" "novice.el" (21240 46395 727291 0))
+;;;### (autoloads nil "novice" "novice.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from novice.el
 
 (define-obsolete-variable-alias 'disabled-command-hook 
'disabled-command-function "22.1")
@@ -19143,8 +19258,8 @@ future sessions.
 
 ;;;***
 
-;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from textmodes/nroff-mode.el
 
 (autoload 'nroff-mode "nroff-mode" "\
@@ -19158,14 +19273,14 @@ closing requests for requests that are used in 
matched pairs.
 
 ;;;***
 
-;;;### (autoloads nil "ntlm" "net/ntlm.el" (21553 6820 877466 0))
+;;;### (autoloads nil "ntlm" "net/ntlm.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from net/ntlm.el
 (push (purecopy '(ntlm 1 0)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "nxml-glyph" "nxml/nxml-glyph.el" (21293 25385
-;;;;;;  120083 0))
+;;;### (autoloads nil "nxml-glyph" "nxml/nxml-glyph.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from nxml/nxml-glyph.el
 
 (autoload 'nxml-glyph-display-string "nxml-glyph" "\
@@ -19177,8 +19292,8 @@ Return nil if the face cannot display a glyph for N.
 
 ;;;***
 
-;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (21383 2343
-;;;;;;  498187 0))
+;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (21611 10937
+;;;;;;  700236 3000))
 ;;; Generated autoloads from nxml/nxml-mode.el
 
 (autoload 'nxml-mode "nxml-mode" "\
@@ -19238,8 +19353,8 @@ Many aspects this mode can be customized using
 
 ;;;***
 
-;;;### (autoloads nil "nxml-uchnm" "nxml/nxml-uchnm.el" (21293 25385
-;;;;;;  120083 0))
+;;;### (autoloads nil "nxml-uchnm" "nxml/nxml-uchnm.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from nxml/nxml-uchnm.el
 
 (autoload 'nxml-enable-unicode-char-name-sets "nxml-uchnm" "\
@@ -19251,8 +19366,8 @@ the variable `nxml-enabled-unicode-blocks'.
 
 ;;;***
 
-;;;### (autoloads nil "octave" "progmodes/octave.el" (21437 5802
-;;;;;;  125919 0))
+;;;### (autoloads nil "octave" "progmodes/octave.el" (21632 17083
+;;;;;;  200835 890000))
 ;;; Generated autoloads from progmodes/octave.el
 
 (autoload 'octave-mode "octave" "\
@@ -19289,8 +19404,8 @@ startup file, `~/.emacs-octave'.
 
 ;;;***
 
-;;;### (autoloads nil "opascal" "progmodes/opascal.el" (21584 48809
-;;;;;;  507899 0))
+;;;### (autoloads nil "opascal" "progmodes/opascal.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/opascal.el
 
 (define-obsolete-function-alias 'delphi-mode 'opascal-mode "24.4")
@@ -19325,7 +19440,7 @@ Coloring:
 
 ;;;***
 
-;;;### (autoloads nil "org" "org/org.el" (21584 48809 507899 0))
+;;;### (autoloads nil "org" "org/org.el" (21645 29117 170137 362000))
 ;;; Generated autoloads from org/org.el
 
 (autoload 'org-babel-do-load-languages "org" "\
@@ -19546,8 +19661,8 @@ Call the customize function with org as argument.
 
 ;;;***
 
-;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (21563 42665
-;;;;;;  706656 0))
+;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from org/org-agenda.el
 
 (autoload 'org-toggle-sticky-agenda "org-agenda" "\
@@ -19820,8 +19935,8 @@ to override `appt-message-warning-time'.
 
 ;;;***
 
-;;;### (autoloads nil "org-capture" "org/org-capture.el" (21551 51499
-;;;;;;  554352 0))
+;;;### (autoloads nil "org-capture" "org/org-capture.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from org/org-capture.el
 
 (autoload 'org-capture-string "org-capture" "\
@@ -19863,8 +19978,8 @@ Set `org-capture-templates' to be similar to 
`org-remember-templates'.
 
 ;;;***
 
-;;;### (autoloads nil "org-colview" "org/org-colview.el" (21335 37672
-;;;;;;  97862 0))
+;;;### (autoloads nil "org-colview" "org/org-colview.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from org/org-colview.el
 
 (autoload 'org-columns-remove-overlays "org-colview" "\
@@ -19927,8 +20042,8 @@ Turn on or update column view in the agenda.
 
 ;;;***
 
-;;;### (autoloads nil "org-compat" "org/org-compat.el" (21584 48809
-;;;;;;  507899 0))
+;;;### (autoloads nil "org-compat" "org/org-compat.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from org/org-compat.el
 
 (autoload 'org-check-version "org-compat" "\
@@ -19938,8 +20053,8 @@ Try very hard to provide sensible version strings.
 
 ;;;***
 
-;;;### (autoloads nil "org-macs" "org/org-macs.el" (21551 51499 554352
-;;;;;;  0))
+;;;### (autoloads nil "org-macs" "org/org-macs.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from org/org-macs.el
 
 (autoload 'org-load-noerror-mustsuffix "org-macs" "\
@@ -19949,8 +20064,8 @@ Load FILE with optional arguments NOERROR and 
MUSTSUFFIX.  Drop the MUSTSUFFIX a
 
 ;;;***
 
-;;;### (autoloads nil "org-version" "org/org-version.el" (21563 42665
-;;;;;;  706656 0))
+;;;### (autoloads nil "org-version" "org/org-version.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from org/org-version.el
 
 (autoload 'org-release "org-version" "\
@@ -19967,8 +20082,8 @@ The Git version of org-mode.
 
 ;;;***
 
-;;;### (autoloads nil "outline" "outline.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "outline" "outline.el" (21626 64704 823711
+;;;;;;  579000))
 ;;; Generated autoloads from outline.el
 (put 'outline-regexp 'safe-local-variable 'stringp)
 (put 'outline-heading-end-regexp 'safe-local-variable 'stringp)
@@ -20029,8 +20144,8 @@ See the command `outline-mode' for more information on 
this mode.
 
 ;;;***
 
-;;;### (autoloads nil "package" "emacs-lisp/package.el" (21579 30887
-;;;;;;  81406 0))
+;;;### (autoloads nil "package" "emacs-lisp/package.el" (21652 2365
+;;;;;;  910127 752000))
 ;;; Generated autoloads from emacs-lisp/package.el
 (push (purecopy '(package 1 0 1)) package--builtin-versions)
 
@@ -20102,7 +20217,7 @@ The list is displayed in a buffer named `*Packages*'.
 
 ;;;***
 
-;;;### (autoloads nil "paren" "paren.el" (21568 60581 999550 0))
+;;;### (autoloads nil "paren" "paren.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from paren.el
 
 (defvar show-paren-mode nil "\
@@ -20128,8 +20243,8 @@ matching parenthesis is highlighted in 
`show-paren-style' after
 
 ;;;***
 
-;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (21541
-;;;;;;  15655 55679 0))
+;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from calendar/parse-time.el
 (put 'parse-time-rules 'risky-local-variable t)
 
@@ -20142,8 +20257,8 @@ unknown are returned as nil.
 
 ;;;***
 
-;;;### (autoloads nil "pascal" "progmodes/pascal.el" (21429 11690
-;;;;;;  49391 0))
+;;;### (autoloads nil "pascal" "progmodes/pascal.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/pascal.el
 
 (autoload 'pascal-mode "pascal" "\
@@ -20192,8 +20307,8 @@ See also the user variables `pascal-type-keywords', 
`pascal-start-keywords' and
 
 ;;;***
 
-;;;### (autoloads nil "password-cache" "password-cache.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "password-cache" "password-cache.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from password-cache.el
 
 (defvar password-cache t "\
@@ -20214,8 +20329,8 @@ Check if KEY is in the cache.
 
 ;;;***
 
-;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (21542 36519
-;;;;;;  256429 0))
+;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/pcase.el
 
 (autoload 'pcase "pcase" "\
@@ -20297,8 +20412,8 @@ Define a pcase UPattern macro.
 
 ;;;***
 
-;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from pcmpl-cvs.el
 
 (autoload 'pcomplete/cvs "pcmpl-cvs" "\
@@ -20308,8 +20423,8 @@ Completion rules for the `cvs' command.
 
 ;;;***
 
-;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (21632 17083 200835
+;;;;;;  890000))
 ;;; Generated autoloads from pcmpl-gnu.el
 
 (autoload 'pcomplete/gzip "pcmpl-gnu" "\
@@ -20336,8 +20451,8 @@ Completion for the GNU tar utility.
 
 ;;;***
 
-;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from pcmpl-linux.el
 
 (autoload 'pcomplete/kill "pcmpl-linux" "\
@@ -20357,8 +20472,8 @@ Completion for GNU/Linux `mount'.
 
 ;;;***
 
-;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from pcmpl-rpm.el
 
 (autoload 'pcomplete/rpm "pcmpl-rpm" "\
@@ -20368,8 +20483,8 @@ Completion for the `rpm' command.
 
 ;;;***
 
-;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from pcmpl-unix.el
 
 (autoload 'pcomplete/cd "pcmpl-unix" "\
@@ -20424,8 +20539,8 @@ Includes files as well as host names followed by a 
colon.
 
 ;;;***
 
-;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from pcmpl-x.el
 
 (autoload 'pcomplete/tlmgr "pcmpl-x" "\
@@ -20449,8 +20564,8 @@ Completion for the `ag' command.
 
 ;;;***
 
-;;;### (autoloads nil "pcomplete" "pcomplete.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "pcomplete" "pcomplete.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from pcomplete.el
 
 (autoload 'pcomplete "pcomplete" "\
@@ -20507,7 +20622,7 @@ Setup `shell-mode' to use pcomplete.
 
 ;;;***
 
-;;;### (autoloads nil "pcvs" "vc/pcvs.el" (21280 13349 392544 0))
+;;;### (autoloads nil "pcvs" "vc/pcvs.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from vc/pcvs.el
 
 (autoload 'cvs-checkout "pcvs" "\
@@ -20582,8 +20697,8 @@ The exact behavior is determined also by 
`cvs-dired-use-hook'." (when (stringp d
 
 ;;;***
 
-;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (21280 13349
-;;;;;;  392544 0))
+;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from vc/pcvs-defs.el
 
 (defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key 
m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help 
,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] 
`(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check 
out a module from the repository"))) (define-key m [update] `(menu-item 
,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from 
the repository"))) (define-key m [ex [...]
@@ -20591,8 +20706,8 @@ Global menu used by PCL-CVS.")
 
 ;;;***
 
-;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (21535
-;;;;;;  63274 647253 0))
+;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/perl-mode.el
 (put 'perl-indent-level 'safe-local-variable 'integerp)
 (put 'perl-continued-statement-offset 'safe-local-variable 'integerp)
@@ -20653,8 +20768,8 @@ Turning on Perl mode runs the normal hook 
`perl-mode-hook'.
 
 ;;;***
 
-;;;### (autoloads nil "picture" "textmodes/picture.el" (21419 62246
-;;;;;;  751914 0))
+;;;### (autoloads nil "picture" "textmodes/picture.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/picture.el
 
 (autoload 'picture-mode "picture" "\
@@ -20734,8 +20849,8 @@ they are not by default assigned to keys.
 
 ;;;***
 
-;;;### (autoloads nil "plstore" "gnus/plstore.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "plstore" "gnus/plstore.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/plstore.el
 
 (autoload 'plstore-open "plstore" "\
@@ -20750,8 +20865,8 @@ Major mode for editing PLSTORE files.
 
 ;;;***
 
-;;;### (autoloads nil "po" "textmodes/po.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "po" "textmodes/po.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from textmodes/po.el
 
 (autoload 'po-find-file-coding-system "po" "\
@@ -20762,7 +20877,7 @@ Called through `file-coding-system-alist', before the 
file is visited for real.
 
 ;;;***
 
-;;;### (autoloads nil "pong" "play/pong.el" (21187 63826 213216 0))
+;;;### (autoloads nil "pong" "play/pong.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from play/pong.el
 
 (autoload 'pong "pong" "\
@@ -20778,7 +20893,7 @@ pong-mode keybindings:\\<pong-mode-map>
 
 ;;;***
 
-;;;### (autoloads nil "pop3" "gnus/pop3.el" (21240 46395 727291 0))
+;;;### (autoloads nil "pop3" "gnus/pop3.el" (21619 5051 260148 536000))
 ;;; Generated autoloads from gnus/pop3.el
 
 (autoload 'pop3-movemail "pop3" "\
@@ -20789,8 +20904,8 @@ Use streaming commands.
 
 ;;;***
 
-;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (21429 11690 49391
-;;;;;;  0))
+;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/pp.el
 
 (autoload 'pp-to-string "pp" "\
@@ -20840,8 +20955,8 @@ Ignores leading comment characters.
 
 ;;;***
 
-;;;### (autoloads nil "printing" "printing.el" (21546 33576 601815
-;;;;;;  0))
+;;;### (autoloads nil "printing" "printing.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from printing.el
 (push (purecopy '(printing 6 9 3)) package--builtin-versions)
 
@@ -21429,7 +21544,7 @@ are both set to t.
 
 ;;;***
 
-;;;### (autoloads nil "proced" "proced.el" (21187 63826 213216 0))
+;;;### (autoloads nil "proced" "proced.el" (21609 55608 852266 580000))
 ;;; Generated autoloads from proced.el
 
 (autoload 'proced "proced" "\
@@ -21447,8 +21562,8 @@ Proced buffers.
 
 ;;;***
 
-;;;### (autoloads nil "profiler" "profiler.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "profiler" "profiler.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from profiler.el
 
 (autoload 'profiler-start "profiler" "\
@@ -21476,8 +21591,8 @@ Open profile FILENAME.
 
 ;;;***
 
-;;;### (autoloads nil "prolog" "progmodes/prolog.el" (21563 42665
-;;;;;;  706656 0))
+;;;### (autoloads nil "prolog" "progmodes/prolog.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/prolog.el
 
 (autoload 'prolog-mode "prolog" "\
@@ -21510,7 +21625,7 @@ With prefix argument ARG, restart the Prolog process if 
running before.
 
 ;;;***
 
-;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (21187 63826 213216 0))
+;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from ps-bdf.el
 
 (defvar bdf-directory-list (if (memq system-type '(ms-dos windows-nt)) (list 
(expand-file-name "fonts/bdf" installation-directory)) 
'("/usr/local/share/emacs/fonts/bdf")) "\
@@ -21521,8 +21636,8 @@ The default value is 
'(\"/usr/local/share/emacs/fonts/bdf\").")
 
 ;;;***
 
-;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (21586 4146
-;;;;;;  376146 0))
+;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/ps-mode.el
 (push (purecopy '(ps-mode 1 1 9)) package--builtin-versions)
 
@@ -21568,8 +21683,8 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when 
the cursor is at the number
 
 ;;;***
 
-;;;### (autoloads nil "ps-print" "ps-print.el" (21549 9768 351453
-;;;;;;  0))
+;;;### (autoloads nil "ps-print" "ps-print.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from ps-print.el
 (push (purecopy '(ps-print 7 3 5)) package--builtin-versions)
 
@@ -21766,15 +21881,15 @@ If EXTENSION is any other symbol, it is ignored.
 
 ;;;***
 
-;;;### (autoloads nil "pulse" "cedet/pulse.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "pulse" "cedet/pulse.el" (21638 55899 942254
+;;;;;;  689000))
 ;;; Generated autoloads from cedet/pulse.el
 (push (purecopy '(pulse 1 0)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "python" "progmodes/python.el" (21563 42665
-;;;;;;  706656 0))
+;;;### (autoloads nil "python" "progmodes/python.el" (21663 59071
+;;;;;;  96337 184000))
 ;;; Generated autoloads from progmodes/python.el
 (push (purecopy '(python 0 24 4)) package--builtin-versions)
 
@@ -21784,20 +21899,23 @@ If EXTENSION is any other symbol, it is ignored.
 
 (autoload 'run-python "python" "\
 Run an inferior Python process.
-Input and output via buffer named after
-`python-shell-buffer-name'.  If there is a process already
-running in that buffer, just switch to it.
 
-With argument, allows you to define CMD so you can edit the
-command used to call the interpreter and define DEDICATED, so a
-dedicated process for the current buffer is open.  When numeric
-prefix arg is other than 0 or 4 do not SHOW.
+Argument CMD defaults to `python-shell-calculate-command' return
+value.  When called interactively with `prefix-arg', it allows
+the user to edit such value and choose whether the interpreter
+should be DEDICATED for the current buffer.  When numeric prefix
+arg is other than 0 or 4 do not SHOW.
+
+For a given buffer and same values of DEDICATED, if a process is
+already running for it, it will do nothing.  This means that if
+the current buffer is using a global process, the user is still
+able to switch it to use a dedicated one.
 
 Runs the hook `inferior-python-mode-hook' after
 `comint-mode-hook' is run.  (Type \\[describe-mode] in the
 process buffer for a list of commands.)
 
-\(fn CMD &optional DEDICATED SHOW)" t nil)
+\(fn &optional CMD DEDICATED SHOW)" t nil)
 
 (autoload 'python-mode "python" "\
 Major mode for editing Python files.
@@ -21808,7 +21926,7 @@ Major mode for editing Python files.
 
 ;;;***
 
-;;;### (autoloads nil "qp" "gnus/qp.el" (21187 63826 213216 0))
+;;;### (autoloads nil "qp" "gnus/qp.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from gnus/qp.el
 
 (autoload 'quoted-printable-decode-region "qp" "\
@@ -21827,8 +21945,8 @@ them into characters should be done separately.
 
 ;;;***
 
-;;;### (autoloads nil "quail" "international/quail.el" (21215 43189
-;;;;;;  822371 0))
+;;;### (autoloads nil "quail" "international/quail.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from international/quail.el
 
 (autoload 'quail-title "quail" "\
@@ -22058,8 +22176,8 @@ of each directory.
 
 ;;;***
 
-;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from leim/quail/hangul.el
 
 (autoload 'hangul-input-method-activate "quail/hangul" "\
@@ -22072,7 +22190,7 @@ HELP-TEXT is a text set in 
`hangul-input-method-help-text'.
 ;;;***
 
 ;;;### (autoloads nil "quail/uni-input" "leim/quail/uni-input.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21607 54478 300138 641000))
 ;;; Generated autoloads from leim/quail/uni-input.el
 
 (autoload 'ucs-input-activate "quail/uni-input" "\
@@ -22086,8 +22204,8 @@ While this input method is active, the variable
 
 ;;;***
 
-;;;### (autoloads nil "quickurl" "net/quickurl.el" (21222 16439 978802
-;;;;;;  0))
+;;;### (autoloads nil "quickurl" "net/quickurl.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from net/quickurl.el
 
 (defconst quickurl-reread-hook-postfix "\n;; Local Variables:\n;; eval: (progn 
(require 'quickurl) (add-hook 'local-write-file-hooks (lambda () 
(quickurl-read) nil)))\n;; End:\n" "\
@@ -22158,7 +22276,8 @@ Display `quickurl-list' as a formatted list using 
`quickurl-list-mode'.
 
 ;;;***
 
-;;;### (autoloads nil "rcirc" "net/rcirc.el" (21585 9772 592973 408000))
+;;;### (autoloads nil "rcirc" "net/rcirc.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from net/rcirc.el
 
 (autoload 'rcirc "rcirc" "\
@@ -22196,8 +22315,8 @@ if ARG is omitted or nil.
 
 ;;;***
 
-;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/re-builder.el
 
 (defalias 'regexp-builder 're-builder)
@@ -22215,8 +22334,8 @@ matching parts of the target buffer will be highlighted.
 
 ;;;***
 
-;;;### (autoloads nil "recentf" "recentf.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "recentf" "recentf.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from recentf.el
 
 (defvar recentf-mode nil "\
@@ -22242,7 +22361,7 @@ were operated on recently.
 
 ;;;***
 
-;;;### (autoloads nil "rect" "rect.el" (21546 33576 601815 0))
+;;;### (autoloads nil "rect" "rect.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from rect.el
 
 (autoload 'delete-rectangle "rect" "\
@@ -22382,8 +22501,8 @@ Activates the region if needed.  Only lasts until the 
region is deactivated.
 
 ;;;***
 
-;;;### (autoloads nil "refill" "textmodes/refill.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "refill" "textmodes/refill.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/refill.el
 
 (autoload 'refill-mode "refill" "\
@@ -22403,8 +22522,8 @@ For true \"word wrap\" behavior, use `visual-line-mode' 
instead.
 
 ;;;***
 
-;;;### (autoloads nil "reftex" "textmodes/reftex.el" (21534 42729
-;;;;;;  1557 881000))
+;;;### (autoloads nil "reftex" "textmodes/reftex.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/reftex.el
 (autoload 'reftex-citation "reftex-cite" nil t)
 (autoload 'reftex-all-document-files "reftex-parse")
@@ -22457,8 +22576,8 @@ This enforces rescanning the buffer on next use.
 
 ;;;***
 
-;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (21194
-;;;;;;  37048 599945 0))
+;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from textmodes/reftex-vars.el
 (put 'reftex-vref-is-default 'safe-local-variable (lambda (x) (or (stringp x) 
(symbolp x))))
 (put 'reftex-fref-is-default 'safe-local-variable (lambda (x) (or (stringp x) 
(symbolp x))))
@@ -22467,8 +22586,8 @@ This enforces rescanning the buffer on next use.
 
 ;;;***
 
-;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (21376
-;;;;;;  29092 815151 0))
+;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/regexp-opt.el
 
 (autoload 'regexp-opt "regexp-opt" "\
@@ -22497,15 +22616,15 @@ This means the number of non-shy regexp grouping 
constructs
 
 ;;;***
 
-;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/regi.el
 (push (purecopy '(regi 1 8)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "remember" "textmodes/remember.el" (21584 48809
-;;;;;;  507899 0))
+;;;### (autoloads nil "remember" "textmodes/remember.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/remember.el
 (push (purecopy '(remember 2 0)) package--builtin-versions)
 
@@ -22559,7 +22678,7 @@ to turn the *scratch* buffer into your notes buffer.
 
 ;;;***
 
-;;;### (autoloads nil "repeat" "repeat.el" (21239 25528 651427 0))
+;;;### (autoloads nil "repeat" "repeat.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from repeat.el
 (push (purecopy '(repeat 0 51)) package--builtin-versions)
 
@@ -22582,8 +22701,8 @@ recently executed command not bound to an input event\".
 
 ;;;***
 
-;;;### (autoloads nil "reporter" "mail/reporter.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "reporter" "mail/reporter.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/reporter.el
 
 (autoload 'reporter-submit-bug-report "reporter" "\
@@ -22614,8 +22733,8 @@ mail-sending package is used for editing and sending 
the message.
 
 ;;;***
 
-;;;### (autoloads nil "reposition" "reposition.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "reposition" "reposition.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from reposition.el
 
 (autoload 'reposition-window "reposition" "\
@@ -22641,7 +22760,7 @@ first comment line visible (if point is in a comment).
 
 ;;;***
 
-;;;### (autoloads nil "reveal" "reveal.el" (21359 20005 772941 0))
+;;;### (autoloads nil "reveal" "reveal.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from reveal.el
 
 (autoload 'reveal-mode "reveal" "\
@@ -22676,8 +22795,8 @@ the mode if ARG is omitted or nil.
 
 ;;;***
 
-;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/ring.el
 
 (autoload 'ring-p "ring" "\
@@ -22692,8 +22811,8 @@ Make a ring that can contain SIZE elements.
 
 ;;;***
 
-;;;### (autoloads nil "rlogin" "net/rlogin.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "rlogin" "net/rlogin.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from net/rlogin.el
 
 (autoload 'rlogin "rlogin" "\
@@ -22737,8 +22856,8 @@ variable.
 
 ;;;***
 
-;;;### (autoloads nil "rmail" "mail/rmail.el" (21546 33833 660830
-;;;;;;  846000))
+;;;### (autoloads nil "rmail" "mail/rmail.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from mail/rmail.el
 
 (defvar rmail-file-name (purecopy "~/RMAIL") "\
@@ -22935,8 +23054,8 @@ Set PASSWORD to be used for retrieving mail from a POP 
or IMAP server.
 
 ;;;***
 
-;;;### (autoloads nil "rmailout" "mail/rmailout.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "rmailout" "mail/rmailout.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/rmailout.el
 (put 'rmail-output-file-alist 'risky-local-variable t)
 
@@ -23000,8 +23119,8 @@ than appending to it.  Deletes the message after 
writing if
 
 ;;;***
 
-;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (21319 49445
-;;;;;;  508378 0))
+;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from nxml/rng-cmpct.el
 
 (autoload 'rng-c-load-schema "rng-cmpct" "\
@@ -23012,8 +23131,8 @@ Return a pattern.
 
 ;;;***
 
-;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (21293 25385
-;;;;;;  120083 0))
+;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from nxml/rng-nxml.el
 
 (autoload 'rng-nxml-mode-init "rng-nxml" "\
@@ -23025,8 +23144,8 @@ Validation will be enabled if 
`rng-nxml-auto-validate-flag' is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (21293 25385
-;;;;;;  120083 0))
+;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from nxml/rng-valid.el
 
 (autoload 'rng-validate-mode "rng-valid" "\
@@ -23056,8 +23175,8 @@ to use for finding the schema.
 
 ;;;***
 
-;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (21293 25385 120083
-;;;;;;  0))
+;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from nxml/rng-xsd.el
 
 (put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile 
'rng-xsd-compile)
@@ -23084,8 +23203,8 @@ must be equal.
 
 ;;;***
 
-;;;### (autoloads nil "robin" "international/robin.el" (20523 62082
-;;;;;;  997685 0))
+;;;### (autoloads nil "robin" "international/robin.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from international/robin.el
 
 (autoload 'robin-define-package "robin" "\
@@ -23117,7 +23236,7 @@ Start using robin package NAME, which is a string.
 
 ;;;***
 
-;;;### (autoloads nil "rot13" "rot13.el" (21240 46395 727291 0))
+;;;### (autoloads nil "rot13" "rot13.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from rot13.el
 
 (autoload 'rot13 "rot13" "\
@@ -23154,8 +23273,8 @@ Toggle the use of ROT13 encoding for the current window.
 
 ;;;***
 
-;;;### (autoloads nil "rst" "textmodes/rst.el" (21415 65191 692645
-;;;;;;  0))
+;;;### (autoloads nil "rst" "textmodes/rst.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from textmodes/rst.el
  (add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode)))
 
@@ -23185,8 +23304,8 @@ for modes derived from Text mode, like Mail mode.
 
 ;;;***
 
-;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (21437
-;;;;;;  5802 125919 0))
+;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (21657
+;;;;;;  20283 330825 807000))
 ;;; Generated autoloads from progmodes/ruby-mode.el
 (push (purecopy '(ruby-mode 1 2)) package--builtin-versions)
 
@@ -23197,14 +23316,14 @@ Major mode for editing Ruby code.
 
 \(fn)" t nil)
 
-(add-to-list 'auto-mode-alist (cons (purecopy (concat "\\(?:\\." 
"rb\\|ru\\|rake\\|thor" "\\|jbuilder\\|gemspec\\|podspec" "\\|/" 
"\\(?:Gem\\|Rake\\|Cap\\|Thor" "\\|Vagrant\\|Guard\\|Pod\\)file" "\\)\\'")) 
'ruby-mode))
+(add-to-list 'auto-mode-alist (cons (purecopy (concat "\\(?:\\." 
"rb\\|ru\\|rake\\|thor" "\\|jbuilder\\|rabl\\|gemspec\\|podspec" "\\|/" 
"\\(?:Gem\\|Rake\\|Cap\\|Thor" "\\|Puppet\\|Berks" 
"\\|Vagrant\\|Guard\\|Pod\\)file" "\\)\\'")) 'ruby-mode))
 
 (dolist (name (list "ruby" "rbx" "jruby" "ruby1.9" "ruby1.8")) (add-to-list 
'interpreter-mode-alist (cons (purecopy name) 'ruby-mode)))
 
 ;;;***
 
-;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (21419 62246 751914
-;;;;;;  0))
+;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from ruler-mode.el
 (push (purecopy '(ruler-mode 1 6)) package--builtin-versions)
 
@@ -23222,8 +23341,8 @@ if ARG is omitted or nil.
 
 ;;;***
 
-;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/rx.el
 
 (autoload 'rx-to-string "rx" "\
@@ -23534,15 +23653,15 @@ enclosed in `(and ...)'.
 
 ;;;***
 
-;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from net/sasl-ntlm.el
 (push (purecopy '(sasl 1 0)) package--builtin-versions)
 
 ;;;***
 
-;;;### (autoloads nil "savehist" "savehist.el" (21326 22692 123234
-;;;;;;  0))
+;;;### (autoloads nil "savehist" "savehist.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from savehist.el
 (push (purecopy '(savehist 24)) package--builtin-versions)
 
@@ -23574,8 +23693,8 @@ histories, which is probably undesirable.
 
 ;;;***
 
-;;;### (autoloads nil "scheme" "progmodes/scheme.el" (21379 5287
-;;;;;;  607434 0))
+;;;### (autoloads nil "scheme" "progmodes/scheme.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/scheme.el
 
 (autoload 'scheme-mode "scheme" "\
@@ -23614,8 +23733,8 @@ that variable's value is a string.
 
 ;;;***
 
-;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/score-mode.el
 
 (autoload 'gnus-score-mode "score-mode" "\
@@ -23628,8 +23747,8 @@ This mode is an extended emacs-lisp mode.
 
 ;;;***
 
-;;;### (autoloads nil "scroll-all" "scroll-all.el" (21388 20265 495157
-;;;;;;  0))
+;;;### (autoloads nil "scroll-all" "scroll-all.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from scroll-all.el
 
 (defvar scroll-all-mode nil "\
@@ -23654,8 +23773,8 @@ one window apply to all visible windows in the same 
frame.
 
 ;;;***
 
-;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from scroll-lock.el
 
 (autoload 'scroll-lock-mode "scroll-lock" "\
@@ -23671,16 +23790,16 @@ vertically fixed relative to window boundaries during 
scrolling.
 
 ;;;***
 
-;;;### (autoloads nil "secrets" "net/secrets.el" (21256 34613 967717
-;;;;;;  0))
+;;;### (autoloads nil "secrets" "net/secrets.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from net/secrets.el
 (when (featurep 'dbusbind)
  (autoload 'secrets-show-secrets "secrets" nil t))
 
 ;;;***
 
-;;;### (autoloads nil "semantic" "cedet/semantic.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "semantic" "cedet/semantic.el" (21645 29116
+;;;;;;  670141 789000))
 ;;; Generated autoloads from cedet/semantic.el
 (push (purecopy '(semantic 2 2)) package--builtin-versions)
 
@@ -23738,7 +23857,7 @@ Semantic mode.
 ;;;***
 
 ;;;### (autoloads nil "semantic/bovine/grammar" 
"cedet/semantic/bovine/grammar.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21607 54477 800124 118000))
 ;;; Generated autoloads from cedet/semantic/bovine/grammar.el
 
 (autoload 'bovine-grammar-mode "semantic/bovine/grammar" "\
@@ -23749,7 +23868,7 @@ Major mode for editing Bovine grammars.
 ;;;***
 
 ;;;### (autoloads nil "semantic/wisent/grammar" 
"cedet/semantic/wisent/grammar.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21607 54477 800124 118000))
 ;;; Generated autoloads from cedet/semantic/wisent/grammar.el
 
 (autoload 'wisent-grammar-mode "semantic/wisent/grammar" "\
@@ -23759,8 +23878,8 @@ Major mode for editing Wisent grammars.
 
 ;;;***
 
-;;;### (autoloads nil "sendmail" "mail/sendmail.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "sendmail" "mail/sendmail.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/sendmail.el
 
 (defvar mail-from-style 'default "\
@@ -24041,7 +24160,14 @@ Like `mail' command, but display mail buffer in 
another frame.
 
 ;;;***
 
-;;;### (autoloads nil "server" "server.el" (21437 5802 125919 0))
+;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (21649 26173 700491
+;;;;;;  498000))
+;;; Generated autoloads from emacs-lisp/seq.el
+(push (purecopy '(seq 1 0)) package--builtin-versions)
+
+;;;***
+
+;;;### (autoloads nil "server" "server.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from server.el
 
 (put 'server-host 'risky-local-variable t)
@@ -24108,7 +24234,7 @@ only these files will be asked to be saved.
 
 ;;;***
 
-;;;### (autoloads nil "ses" "ses.el" (21580 51751 606453 0))
+;;;### (autoloads nil "ses" "ses.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from ses.el
 
 (autoload 'ses-mode "ses" "\
@@ -24152,8 +24278,8 @@ formula:
 
 ;;;***
 
-;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (21481
-;;;;;;  59815 980216 0))
+;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (21623
+;;;;;;  2108 292281 129000))
 ;;; Generated autoloads from textmodes/sgml-mode.el
 
 (autoload 'sgml-mode "sgml-mode" "\
@@ -24218,8 +24344,8 @@ To work around that, do:
 
 ;;;***
 
-;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (21510
-;;;;;;  60072 112989 0))
+;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (21663
+;;;;;;  59071 96337 184000))
 ;;; Generated autoloads from progmodes/sh-script.el
 (push (purecopy '(sh-script 2 0 6)) package--builtin-versions)
 (put 'sh-shell 'safe-local-variable 'symbolp)
@@ -24283,8 +24409,8 @@ with your script for an edit-interpret-debug cycle.
 
 ;;;***
 
-;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (21271 54940
-;;;;;;  492268 31000))
+;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/shadow.el
 
 (autoload 'list-load-path-shadows "shadow" "\
@@ -24333,8 +24459,8 @@ function, `load-path-shadows-find'.
 
 ;;;***
 
-;;;### (autoloads nil "shadowfile" "shadowfile.el" (21222 16439 978802
-;;;;;;  0))
+;;;### (autoloads nil "shadowfile" "shadowfile.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from shadowfile.el
 
 (autoload 'shadow-define-cluster "shadowfile" "\
@@ -24372,7 +24498,7 @@ Set up file shadowing.
 
 ;;;***
 
-;;;### (autoloads nil "shell" "shell.el" (21374 22080 740835 768000))
+;;;### (autoloads nil "shell" "shell.el" (21658 41149 155622 310000))
 ;;; Generated autoloads from shell.el
 
 (defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\
@@ -24420,7 +24546,7 @@ Otherwise, one argument `-i' is passed to the shell.
 
 ;;;***
 
-;;;### (autoloads nil "shr" "net/shr.el" (21532 676 459903 0))
+;;;### (autoloads nil "shr" "net/shr.el" (21666 35265 825623 21000))
 ;;; Generated autoloads from net/shr.el
 
 (autoload 'shr-render-region "shr" "\
@@ -24437,8 +24563,8 @@ DOM should be a parse tree as generated by
 
 ;;;***
 
-;;;### (autoloads nil "sieve" "gnus/sieve.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "sieve" "gnus/sieve.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/sieve.el
 
 (autoload 'sieve-manage "sieve" "\
@@ -24463,8 +24589,8 @@ DOM should be a parse tree as generated by
 
 ;;;***
 
-;;;### (autoloads nil "sieve-mode" "gnus/sieve-mode.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "sieve-mode" "gnus/sieve-mode.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/sieve-mode.el
 
 (autoload 'sieve-mode "sieve-mode" "\
@@ -24479,8 +24605,8 @@ Turning on Sieve mode runs `sieve-mode-hook'.
 
 ;;;***
 
-;;;### (autoloads nil "simula" "progmodes/simula.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "simula" "progmodes/simula.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/simula.el
 
 (autoload 'simula-mode "simula" "\
@@ -24528,8 +24654,8 @@ with no arguments, if that value is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "skeleton" "skeleton.el" (21420 38312 308000
-;;;;;;  0))
+;;;### (autoloads nil "skeleton" "skeleton.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from skeleton.el
 
 (defvar skeleton-filter-function 'identity "\
@@ -24647,8 +24773,8 @@ symmetrical ones, and the same character twice for the 
others.
 
 ;;;***
 
-;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (21409 26408
-;;;;;;  607647 0))
+;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (21628 45530
+;;;;;;  160140 360000))
 ;;; Generated autoloads from vc/smerge-mode.el
 
 (autoload 'smerge-ediff "smerge-mode" "\
@@ -24675,8 +24801,8 @@ If no conflict maker is found, turn off `smerge-mode'.
 
 ;;;***
 
-;;;### (autoloads nil "smiley" "gnus/smiley.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "smiley" "gnus/smiley.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from gnus/smiley.el
 
 (autoload 'smiley-region "smiley" "\
@@ -24693,8 +24819,8 @@ interactively.  If there's no argument, do it at the 
current buffer.
 
 ;;;***
 
-;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (21322 25639
-;;;;;;  363230 0))
+;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (21619 5051 260148
+;;;;;;  536000))
 ;;; Generated autoloads from mail/smtpmail.el
 
 (autoload 'smtpmail-send-it "smtpmail" "\
@@ -24709,8 +24835,8 @@ Send mail that was queued as a result of setting 
`smtpmail-queue-mail'.
 
 ;;;***
 
-;;;### (autoloads nil "snake" "play/snake.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "snake" "play/snake.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/snake.el
 
 (autoload 'snake "snake" "\
@@ -24733,8 +24859,8 @@ Snake mode keybindings:
 
 ;;;***
 
-;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from net/snmp-mode.el
 
 (autoload 'snmp-mode "snmp-mode" "\
@@ -24763,8 +24889,8 @@ then `snmpv2-mode-hook'.
 
 ;;;***
 
-;;;### (autoloads nil "solar" "calendar/solar.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "solar" "calendar/solar.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from calendar/solar.el
 
 (autoload 'sunrise-sunset "solar" "\
@@ -24779,8 +24905,8 @@ This function is suitable for execution in an init file.
 
 ;;;***
 
-;;;### (autoloads nil "solitaire" "play/solitaire.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "solitaire" "play/solitaire.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from play/solitaire.el
 
 (autoload 'solitaire "solitaire" "\
@@ -24855,7 +24981,7 @@ Pick your favorite shortcuts:
 
 ;;;***
 
-;;;### (autoloads nil "sort" "sort.el" (21240 46395 727291 0))
+;;;### (autoloads nil "sort" "sort.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from sort.el
 (put 'sort-fold-case 'safe-local-variable 'booleanp)
 
@@ -25030,7 +25156,7 @@ is non-nil, it also prints a message describing the 
number of deletions.
 
 ;;;***
 
-;;;### (autoloads nil "spam" "gnus/spam.el" (21296 1575 438327 0))
+;;;### (autoloads nil "spam" "gnus/spam.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from gnus/spam.el
 
 (autoload 'spam-initialize "spam" "\
@@ -25044,8 +25170,8 @@ installed through `spam-necessary-extra-headers'.
 
 ;;;***
 
-;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from gnus/spam-report.el
 
 (autoload 'spam-report-process-queue "spam-report" "\
@@ -25087,8 +25213,8 @@ Spam reports will be queued with the method used when
 
 ;;;***
 
-;;;### (autoloads nil "speedbar" "speedbar.el" (21485 56871 932720
-;;;;;;  0))
+;;;### (autoloads nil "speedbar" "speedbar.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from speedbar.el
 
 (defalias 'speedbar 'speedbar-frame-mode)
@@ -25112,8 +25238,8 @@ selected.  If the speedbar frame is active, then select 
the attached frame.
 
 ;;;***
 
-;;;### (autoloads nil "spook" "play/spook.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "spook" "play/spook.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/spook.el
 
 (autoload 'spook "spook" "\
@@ -25128,8 +25254,8 @@ Return a vector containing the lines from 
`spook-phrases-file'.
 
 ;;;***
 
-;;;### (autoloads nil "sql" "progmodes/sql.el" (21546 33576 601815
-;;;;;;  0))
+;;;### (autoloads nil "sql" "progmodes/sql.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from progmodes/sql.el
 (push (purecopy '(sql 3 4)) package--builtin-versions)
 
@@ -25595,15 +25721,15 @@ Run vsql as an inferior process.
 
 ;;;***
 
-;;;### (autoloads nil "srecode" "cedet/srecode.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "srecode" "cedet/srecode.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from cedet/srecode.el
 (push (purecopy '(srecode 1 2)) package--builtin-versions)
 
 ;;;***
 
 ;;;### (autoloads nil "srecode/srt-mode" "cedet/srecode/srt-mode.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21657 20283 330825 807000))
 ;;; Generated autoloads from cedet/srecode/srt-mode.el
 
 (autoload 'srecode-template-mode "srecode/srt-mode" "\
@@ -25615,8 +25741,8 @@ Major-mode for writing SRecode macros.
 
 ;;;***
 
-;;;### (autoloads nil "starttls" "gnus/starttls.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "starttls" "gnus/starttls.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from gnus/starttls.el
 
 (autoload 'starttls-open-stream "starttls" "\
@@ -25639,7 +25765,8 @@ GnuTLS requires a port number.
 
 ;;;***
 
-;;;### (autoloads nil "strokes" "strokes.el" (21271 1974 113743 0))
+;;;### (autoloads nil "strokes" "strokes.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from strokes.el
 
 (autoload 'strokes-global-set-stroke "strokes" "\
@@ -25752,8 +25879,8 @@ Read a complex stroke and insert its glyph into the 
current buffer.
 
 ;;;***
 
-;;;### (autoloads nil "studly" "play/studly.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "studly" "play/studly.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/studly.el
 
 (autoload 'studlify-region "studly" "\
@@ -25773,8 +25900,8 @@ Studlify-case the current buffer.
 
 ;;;***
 
-;;;### (autoloads nil "subword" "progmodes/subword.el" (21546 33576
-;;;;;;  601815 0))
+;;;### (autoloads nil "subword" "progmodes/subword.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from progmodes/subword.el
 
 (define-obsolete-function-alias 'capitalized-words-mode 'subword-mode "25.1")
@@ -25866,8 +25993,8 @@ See `superword-mode' for more information on Superword 
mode.
 
 ;;;***
 
-;;;### (autoloads nil "supercite" "mail/supercite.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "supercite" "mail/supercite.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/supercite.el
 
 (autoload 'sc-cite-original "supercite" "\
@@ -25899,8 +26026,8 @@ and `sc-post-hook' is run after the guts of this 
function.
 
 ;;;***
 
-;;;### (autoloads nil "t-mouse" "t-mouse.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "t-mouse" "t-mouse.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from t-mouse.el
 
 (define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1")
@@ -25928,7 +26055,7 @@ It relies on the `gpm' daemon being activated.
 
 ;;;***
 
-;;;### (autoloads nil "tabify" "tabify.el" (21240 46395 727291 0))
+;;;### (autoloads nil "tabify" "tabify.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from tabify.el
 
 (autoload 'untabify "tabify" "\
@@ -25957,8 +26084,8 @@ The variable `tab-width' controls the spacing of tab 
stops.
 
 ;;;***
 
-;;;### (autoloads nil "table" "textmodes/table.el" (21194 37048 599945
-;;;;;;  0))
+;;;### (autoloads nil "table" "textmodes/table.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from textmodes/table.el
 
 (defvar table-cell-map-hook nil "\
@@ -26550,7 +26677,7 @@ converts a table into plain text without frames.  It is 
a companion to
 
 ;;;***
 
-;;;### (autoloads nil "talk" "talk.el" (21240 46395 727291 0))
+;;;### (autoloads nil "talk" "talk.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from talk.el
 
 (autoload 'talk-connect "talk" "\
@@ -26565,8 +26692,8 @@ Connect to the Emacs talk group from the current X 
display or tty frame.
 
 ;;;***
 
-;;;### (autoloads nil "tar-mode" "tar-mode.el" (21510 60072 112989
-;;;;;;  0))
+;;;### (autoloads nil "tar-mode" "tar-mode.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from tar-mode.el
 
 (autoload 'tar-mode "tar-mode" "\
@@ -26589,8 +26716,8 @@ See also: variables `tar-update-datestamp' and 
`tar-anal-blocksize'.
 
 ;;;***
 
-;;;### (autoloads nil "tcl" "progmodes/tcl.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "tcl" "progmodes/tcl.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from progmodes/tcl.el
 
 (autoload 'tcl-mode "tcl" "\
@@ -26638,8 +26765,8 @@ Prefix argument means invert sense of 
`tcl-use-smart-word-finder'.
 
 ;;;***
 
-;;;### (autoloads nil "telnet" "net/telnet.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "telnet" "net/telnet.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from net/telnet.el
 
 (autoload 'telnet "telnet" "\
@@ -26664,7 +26791,7 @@ Normally input is edited in Emacs and sent a line at a 
time.
 
 ;;;***
 
-;;;### (autoloads nil "term" "term.el" (21558 24747 65197 0))
+;;;### (autoloads nil "term" "term.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from term.el
 
 (autoload 'make-term "term" "\
@@ -26706,8 +26833,8 @@ use in that buffer.
 
 ;;;***
 
-;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/testcover.el
 
 (autoload 'testcover-this-defun "testcover" "\
@@ -26717,8 +26844,8 @@ Start coverage on function under point.
 
 ;;;***
 
-;;;### (autoloads nil "tetris" "play/tetris.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "tetris" "play/tetris.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from play/tetris.el
 (push (purecopy '(tetris 2 1)) package--builtin-versions)
 
@@ -26743,8 +26870,8 @@ tetris-mode keybindings:
 
 ;;;***
 
-;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (21546 33576
-;;;;;;  601815 0))
+;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (21663 59071
+;;;;;;  96337 184000))
 ;;; Generated autoloads from textmodes/tex-mode.el
 
 (defvar tex-shell-file-name nil "\
@@ -27045,8 +27172,8 @@ Major mode to edit DocTeX files.
 
 ;;;***
 
-;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/texinfmt.el
 
 (autoload 'texinfo-format-buffer "texinfmt" "\
@@ -27085,8 +27212,8 @@ if large.  You can use `Info-split' to do this manually.
 
 ;;;***
 
-;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (21414 44327
-;;;;;;  790846 0))
+;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from textmodes/texinfo.el
 
 (defvar texinfo-open-quote (purecopy "``") "\
@@ -27170,8 +27297,8 @@ value of `texinfo-mode-hook'.
 
 ;;;***
 
-;;;### (autoloads nil "thai-util" "language/thai-util.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "thai-util" "language/thai-util.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from language/thai-util.el
 
 (autoload 'thai-compose-region "thai-util" "\
@@ -27198,8 +27325,8 @@ Compose Thai characters in the current buffer.
 
 ;;;***
 
-;;;### (autoloads nil "thingatpt" "thingatpt.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "thingatpt" "thingatpt.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from thingatpt.el
 
 (autoload 'forward-thing "thingatpt" "\
@@ -27263,7 +27390,7 @@ Return the Lisp list at point, or nil if none is found.
 
 ;;;***
 
-;;;### (autoloads nil "thumbs" "thumbs.el" (21240 46395 727291 0))
+;;;### (autoloads nil "thumbs" "thumbs.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from thumbs.el
 
 (autoload 'thumbs-find-thumb "thumbs" "\
@@ -27297,8 +27424,8 @@ In dired, call the setroot program on the image at 
point.
 
 ;;;***
 
-;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from language/tibet-util.el
 
 (autoload 'tibetan-char-p "tibet-util" "\
@@ -27371,14 +27498,14 @@ See also docstring of the function 
tibetan-compose-region.
 
 ;;;***
 
-;;;### (autoloads nil "tildify" "textmodes/tildify.el" (21568 60581
-;;;;;;  999550 0))
+;;;### (autoloads nil "tildify" "textmodes/tildify.el" (21611 10938
+;;;;;;  204397 226000))
 ;;; Generated autoloads from textmodes/tildify.el
-(push (purecopy '(tildify 4 5 4)) package--builtin-versions)
+(push (purecopy '(tildify 4 5 7)) package--builtin-versions)
 
 (autoload 'tildify-region "tildify" "\
 Add hard spaces in the region between BEG and END.
-See variables `tildify-pattern-alist', `tildify-string-alist', and
+See variables `tildify-pattern', `tildify-space-string', and
 `tildify-ignored-environments-alist' for information about configuration
 parameters.
 This function performs no refilling of the changed text.
@@ -27389,7 +27516,7 @@ won't be prompted for confirmation of each substitution.
 
 (autoload 'tildify-buffer "tildify" "\
 Add hard spaces in the current buffer.
-See variables `tildify-pattern-alist', `tildify-string-alist', and
+See variables `tildify-pattern', `tildify-space-string', and
 `tildify-ignored-environments-alist' for information about configuration
 parameters.
 This function performs no refilling of the changed text.
@@ -27400,7 +27527,7 @@ won't be prompted for confirmation of each substitution.
 
 ;;;***
 
-;;;### (autoloads nil "time" "time.el" (21240 46395 727291 0))
+;;;### (autoloads nil "time" "time.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from time.el
 
 (defvar display-time-day-and-date nil "\
@@ -27462,8 +27589,8 @@ Return a string giving the duration of the Emacs 
initialization.
 
 ;;;***
 
-;;;### (autoloads nil "time-date" "calendar/time-date.el" (21584
-;;;;;;  48809 507899 0))
+;;;### (autoloads nil "time-date" "calendar/time-date.el" (21611
+;;;;;;  10937 700236 3000))
 ;;; Generated autoloads from calendar/time-date.el
 
 (autoload 'date-to-time "time-date" "\
@@ -27566,8 +27693,8 @@ Convert the time interval in seconds to a short string.
 
 ;;;***
 
-;;;### (autoloads nil "time-stamp" "time-stamp.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "time-stamp" "time-stamp.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from time-stamp.el
 (put 'time-stamp-format 'safe-local-variable 'stringp)
 (put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p)
@@ -27607,8 +27734,8 @@ With ARG, turn time stamping on if and only if arg is 
positive.
 
 ;;;***
 
-;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (21584
-;;;;;;  48809 507899 0))
+;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from calendar/timeclock.el
 (push (purecopy '(timeclock 2 6 1)) package--builtin-versions)
 
@@ -27718,7 +27845,7 @@ relative only to the time worked today, and not to past 
time.
 ;;;***
 
 ;;;### (autoloads nil "titdic-cnv" "international/titdic-cnv.el"
-;;;;;;  (21187 63826 213216 0))
+;;;;;;  (21607 54478 300138 641000))
 ;;; Generated autoloads from international/titdic-cnv.el
 
 (autoload 'titdic-convert "titdic-cnv" "\
@@ -27740,7 +27867,7 @@ To get complete usage, invoke \"emacs -batch -f 
batch-titdic-convert -h\".
 
 ;;;***
 
-;;;### (autoloads nil "tmm" "tmm.el" (21240 46395 727291 0))
+;;;### (autoloads nil "tmm" "tmm.el" (21652 2366 414435 564000))
 ;;; Generated autoloads from tmm.el
  (define-key global-map "\M-`" 'tmm-menubar)
  (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse)
@@ -27782,8 +27909,8 @@ Its value should be an event that has a binding in MENU.
 
 ;;;***
 
-;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (21471
-;;;;;;  23976 844614 0))
+;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (21625
+;;;;;;  43838 483701 627000))
 ;;; Generated autoloads from calendar/todo-mode.el
 
 (autoload 'todo-show "todo-mode" "\
@@ -27850,8 +27977,8 @@ Mode for displaying and reprioritizing top priority 
Todo.
 
 ;;;***
 
-;;;### (autoloads nil "tool-bar" "tool-bar.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "tool-bar" "tool-bar.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from tool-bar.el
 
 (autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\
@@ -27921,8 +28048,8 @@ holds a keymap.
 
 ;;;***
 
-;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (21607 54477 800124
+;;;;;;  118000))
 ;;; Generated autoloads from emacs-lisp/tq.el
 
 (autoload 'tq-create "tq" "\
@@ -27935,8 +28062,8 @@ to a tcp server on another machine.
 
 ;;;***
 
-;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (21240 46395
-;;;;;;  727291 0))
+;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/trace.el
 
 (defvar trace-buffer "*trace-output*" "\
@@ -27981,8 +28108,7 @@ the output buffer or changing the window configuration.
 
 ;;;***
 
-;;;### (autoloads nil "tramp" "net/tramp.el" (21525 27433 340807
-;;;;;;  0))
+;;;### (autoloads nil "tramp" "net/tramp.el" (21663 59071 96337 184000))
 ;;; Generated autoloads from net/tramp.el
 
 (defvar tramp-mode t "\
@@ -28068,7 +28194,7 @@ Invoke Tramp file name completion handler.
 Falls back to normal file name handler if no Tramp file name handler exists." 
(let ((directory-sep-char 47) (fn (assoc operation 
tramp-completion-file-name-handler-alist))) (if (and fn tramp-mode (or (eq 
tramp-syntax (quote sep)) (featurep (quote tramp)) (and (boundp (quote 
partial-completion-mode)) (symbol-value (quote partial-completion-mode))) 
(featurep (quote ido)) (featurep (quote icicles)))) (save-match-data (apply 
(cdr fn) args)) (tramp-completion-run-real-handler operation args))))
 
 (defun tramp-autoload-file-name-handler (operation &rest args) "\
-Load Tramp file name handler, and perform OPERATION." (let ((default-directory 
temporary-file-directory)) (load "tramp" nil t)) (apply operation args))
+Load Tramp file name handler, and perform OPERATION." (let ((default-directory 
(or (symbol-value (quote temporary-file-directory)) "/"))) (load "tramp" nil 
t)) (apply operation args))
 
 (defun tramp-register-autoload-file-name-handlers nil "\
 Add Tramp file name handlers to `file-name-handler-alist' during autoload." 
(add-to-list (quote file-name-handler-alist) (cons tramp-file-name-regexp 
(quote tramp-autoload-file-name-handler))) (put (quote 
tramp-autoload-file-name-handler) (quote safe-magic) t) (add-to-list (quote 
file-name-handler-alist) (cons tramp-completion-file-name-regexp (quote 
tramp-completion-file-name-handler))) (put (quote 
tramp-completion-file-name-handler) (quote safe-magic) t))
@@ -28097,8 +28223,8 @@ Discard Tramp from loading remote files.
 
 ;;;***
 
-;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (21476 41895
-;;;;;;  55661 0))
+;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from net/tramp-ftp.el
 
 (autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\
@@ -28108,8 +28234,8 @@ Discard Tramp from loading remote files.
 
 ;;;***
 
-;;;### (autoloads nil "tutorial" "tutorial.el" (21510 60072 112989
-;;;;;;  0))
+;;;### (autoloads nil "tutorial" "tutorial.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from tutorial.el
 
 (autoload 'help-with-tutorial "tutorial" "\
@@ -28133,8 +28259,8 @@ resumed later.
 
 ;;;***
 
-;;;### (autoloads nil "tv-util" "language/tv-util.el" (20355 10021
-;;;;;;  546955 0))
+;;;### (autoloads nil "tv-util" "language/tv-util.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from language/tv-util.el
 
 (autoload 'tai-viet-composition-function "tv-util" "\
@@ -28144,8 +28270,8 @@ resumed later.
 
 ;;;***
 
-;;;### (autoloads nil "two-column" "textmodes/two-column.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "two-column" "textmodes/two-column.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from textmodes/two-column.el
  (autoload '2C-command "two-column" () t 'keymap)
  (global-set-key "\C-x6" '2C-command)
@@ -28192,8 +28318,8 @@ First column's text    sSs  Second column's text
 
 ;;;***
 
-;;;### (autoloads nil "type-break" "type-break.el" (21222 16439 978802
-;;;;;;  0))
+;;;### (autoloads nil "type-break" "type-break.el" (21609 55608 852266
+;;;;;;  580000))
 ;;; Generated autoloads from type-break.el
 
 (defvar type-break-mode nil "\
@@ -28325,7 +28451,7 @@ FRAC should be the inverse of the fractional value; for 
example, a value of
 
 ;;;***
 
-;;;### (autoloads nil "uce" "mail/uce.el" (21199 54969 178188 0))
+;;;### (autoloads nil "uce" "mail/uce.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from mail/uce.el
 
 (autoload 'uce-reply-to-uce "uce" "\
@@ -28339,7 +28465,7 @@ You might need to set `uce-mail-reader' before using 
this.
 ;;;***
 
 ;;;### (autoloads nil "ucs-normalize" "international/ucs-normalize.el"
-;;;;;;  (21194 37048 599945 0))
+;;;;;;  (21607 54478 300138 641000))
 ;;; Generated autoloads from international/ucs-normalize.el
 
 (autoload 'ucs-normalize-NFD-region "ucs-normalize" "\
@@ -28404,8 +28530,8 @@ Normalize the string STR by the Unicode NFC and Mac 
OS's HFS Plus.
 
 ;;;***
 
-;;;### (autoloads nil "underline" "textmodes/underline.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "underline" "textmodes/underline.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from textmodes/underline.el
 
 (autoload 'underline-region "underline" "\
@@ -28425,8 +28551,8 @@ which specify the range to operate on.
 
 ;;;***
 
-;;;### (autoloads nil "unrmail" "mail/unrmail.el" (21240 46395 727291
-;;;;;;  0))
+;;;### (autoloads nil "unrmail" "mail/unrmail.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from mail/unrmail.el
 
 (autoload 'batch-unrmail "unrmail" "\
@@ -28446,8 +28572,8 @@ The variable `unrmail-mbox-format' controls which mbox 
format to use.
 
 ;;;***
 
-;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (21607 54477
+;;;;;;  800124 118000))
 ;;; Generated autoloads from emacs-lisp/unsafep.el
 
 (autoload 'unsafep "unsafep" "\
@@ -28459,7 +28585,7 @@ UNSAFEP-VARS is a list of symbols with local bindings.
 
 ;;;***
 
-;;;### (autoloads nil "url" "url/url.el" (21537 18599 384335 0))
+;;;### (autoloads nil "url" "url/url.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from url/url.el
 
 (autoload 'url-retrieve "url" "\
@@ -28506,8 +28632,8 @@ no further processing).  URL is either a string or a 
parsed URL.
 
 ;;;***
 
-;;;### (autoloads nil "url-auth" "url/url-auth.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "url-auth" "url/url-auth.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-auth.el
 
 (autoload 'url-get-authentication "url-auth" "\
@@ -28548,8 +28674,8 @@ RATING   a rating between 1 and 10 of the strength of 
the authentication.
 
 ;;;***
 
-;;;### (autoloads nil "url-cache" "url/url-cache.el" (21584 48809
-;;;;;;  507899 0))
+;;;### (autoloads nil "url-cache" "url/url-cache.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from url/url-cache.el
 
 (autoload 'url-store-in-cache "url-cache" "\
@@ -28570,8 +28696,8 @@ Extract FNAM from the local disk cache.
 
 ;;;***
 
-;;;### (autoloads nil "url-cid" "url/url-cid.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "url-cid" "url/url-cid.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-cid.el
 
 (autoload 'url-cid "url-cid" "\
@@ -28581,8 +28707,8 @@ Extract FNAM from the local disk cache.
 
 ;;;***
 
-;;;### (autoloads nil "url-dav" "url/url-dav.el" (21302 6606 390237
-;;;;;;  377000))
+;;;### (autoloads nil "url-dav" "url/url-dav.el" (21634 58813 400848
+;;;;;;  500000))
 ;;; Generated autoloads from url/url-dav.el
 
 (autoload 'url-dav-supported-p "url-dav" "\
@@ -28616,8 +28742,8 @@ added to this list, so most requests can just pass in 
nil.
 
 ;;;***
 
-;;;### (autoloads nil "url-file" "url/url-file.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "url-file" "url/url-file.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-file.el
 
 (autoload 'url-file "url-file" "\
@@ -28627,8 +28753,8 @@ Handle file: and ftp: URLs.
 
 ;;;***
 
-;;;### (autoloads nil "url-gw" "url/url-gw.el" (21545 12711 344259
-;;;;;;  0))
+;;;### (autoloads nil "url-gw" "url/url-gw.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-gw.el
 
 (autoload 'url-gateway-nslookup-host "url-gw" "\
@@ -28649,8 +28775,8 @@ overriding the value of `url-gateway-method'.
 
 ;;;***
 
-;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (21546
-;;;;;;  33576 601815 0))
+;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from url/url-handlers.el
 
 (defvar url-handler-mode nil "\
@@ -28704,8 +28830,8 @@ accessible.
 
 ;;;***
 
-;;;### (autoloads nil "url-http" "url/url-http.el" (21556 18779 796531
-;;;;;;  0))
+;;;### (autoloads nil "url-http" "url/url-http.el" (21638 55900 442275
+;;;;;;  524000))
 ;;; Generated autoloads from url/url-http.el
  (autoload 'url-default-expander "url-expand")
 
@@ -28717,8 +28843,8 @@ accessible.
 
 ;;;***
 
-;;;### (autoloads nil "url-irc" "url/url-irc.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "url-irc" "url/url-irc.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-irc.el
 
 (autoload 'url-irc "url-irc" "\
@@ -28728,8 +28854,8 @@ accessible.
 
 ;;;***
 
-;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-ldap.el
 
 (autoload 'url-ldap "url-ldap" "\
@@ -28742,8 +28868,8 @@ URL can be a URL string, or a URL vector of the type 
returned by
 
 ;;;***
 
-;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from url/url-mailto.el
 
 (autoload 'url-mail "url-mailto" "\
@@ -28758,8 +28884,8 @@ Handle the mailto: URL syntax.
 
 ;;;***
 
-;;;### (autoloads nil "url-misc" "url/url-misc.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "url-misc" "url/url-misc.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-misc.el
 
 (autoload 'url-man "url-misc" "\
@@ -28790,8 +28916,8 @@ Fetch a data URL (RFC 2397).
 
 ;;;***
 
-;;;### (autoloads nil "url-news" "url/url-news.el" (21301 65237 320114
-;;;;;;  350000))
+;;;### (autoloads nil "url-news" "url/url-news.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-news.el
 
 (autoload 'url-news "url-news" "\
@@ -28806,8 +28932,8 @@ Fetch a data URL (RFC 2397).
 
 ;;;***
 
-;;;### (autoloads nil "url-ns" "url/url-ns.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "url-ns" "url/url-ns.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-ns.el
 
 (autoload 'isPlainHostName "url-ns" "\
@@ -28847,8 +28973,8 @@ Fetch a data URL (RFC 2397).
 
 ;;;***
 
-;;;### (autoloads nil "url-parse" "url/url-parse.el" (21350 58112
-;;;;;;  380040 0))
+;;;### (autoloads nil "url-parse" "url/url-parse.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from url/url-parse.el
 
 (autoload 'url-recreate-url "url-parse" "\
@@ -28899,8 +29025,8 @@ parses to
 
 ;;;***
 
-;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from url/url-privacy.el
 
 (autoload 'url-setup-privacy-info "url-privacy" "\
@@ -28910,8 +29036,8 @@ Setup variables that expose info about you and your 
system.
 
 ;;;***
 
-;;;### (autoloads nil "url-queue" "url/url-queue.el" (21193 16180
-;;;;;;  875828 0))
+;;;### (autoloads nil "url-queue" "url/url-queue.el" (21619 5051
+;;;;;;  260148 536000))
 ;;; Generated autoloads from url/url-queue.el
 
 (autoload 'url-queue-retrieve "url-queue" "\
@@ -28925,8 +29051,8 @@ The variable `url-queue-timeout' sets a timeout.
 
 ;;;***
 
-;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (21546 33576
-;;;;;;  601815 0))
+;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from url/url-tramp.el
 
 (defvar url-tramp-protocols '("ftp" "ssh" "scp" "rsync" "telnet") "\
@@ -28944,8 +29070,8 @@ would have been passed to OPERATION.
 
 ;;;***
 
-;;;### (autoloads nil "url-util" "url/url-util.el" (21584 48809 507899
-;;;;;;  0))
+;;;### (autoloads nil "url-util" "url/url-util.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from url/url-util.el
 
 (defvar url-debug nil "\
@@ -29113,8 +29239,8 @@ This uses `url-current-object', set locally to the 
buffer.
 
 ;;;***
 
-;;;### (autoloads nil "userlock" "userlock.el" (21260 57764 872288
-;;;;;;  374000))
+;;;### (autoloads nil "userlock" "userlock.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from userlock.el
 
 (autoload 'ask-user-about-lock "userlock" "\
@@ -29142,8 +29268,8 @@ The buffer in question is current when this function is 
called.
 
 ;;;***
 
-;;;### (autoloads nil "utf-7" "international/utf-7.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "utf-7" "international/utf-7.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from international/utf-7.el
 
 (autoload 'utf-7-post-read-conversion "utf-7" "\
@@ -29168,7 +29294,7 @@ The buffer in question is current when this function is 
called.
 
 ;;;***
 
-;;;### (autoloads nil "utf7" "gnus/utf7.el" (21187 63826 213216 0))
+;;;### (autoloads nil "utf7" "gnus/utf7.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from gnus/utf7.el
 
 (autoload 'utf7-encode "utf7" "\
@@ -29178,8 +29304,8 @@ Encode UTF-7 STRING.  Use IMAP modification if FOR-IMAP 
is non-nil.
 
 ;;;***
 
-;;;### (autoloads nil "uudecode" "mail/uudecode.el" (21187 63826
-;;;;;;  213216 0))
+;;;### (autoloads nil "uudecode" "mail/uudecode.el" (21607 54478
+;;;;;;  300138 641000))
 ;;; Generated autoloads from mail/uudecode.el
 
 (autoload 'uudecode-decode-region-external "uudecode" "\
@@ -29203,7 +29329,7 @@ If FILE-NAME is non-nil, save the result to FILE-NAME.
 
 ;;;***
 
-;;;### (autoloads nil "vc" "vc/vc.el" (21332 61483 90708 0))
+;;;### (autoloads nil "vc" "vc/vc.el" (21649 26173 700491 498000))
 ;;; Generated autoloads from vc/vc.el
 
 (defvar vc-checkout-hook nil "\
@@ -29242,8 +29368,7 @@ For old-style locking-based version control systems, 
like RCS:
   If every file is registered and unlocked, check out (lock)
    the file(s) for editing.
   If every file is locked by you and has changes, pop up a
-   *vc-log* buffer to check in the changes.  If the variable
-   `vc-keep-workfiles' is non-nil (the default), leave a
+   *vc-log* buffer to check in the changes.  Leave a
    read-only copy of each changed file after checking in.
   If every file is locked by you and unchanged, unlock them.
   If every file is locked by someone else, offer to steal the lock.
@@ -29254,8 +29379,7 @@ For old-style locking-based version control systems, 
like RCS:
 Register into a version control system.
 If VC-FILESET is given, register the files in that fileset.
 Otherwise register the current file.
-With prefix argument SET-REVISION, allow user to specify initial revision
-level.  If COMMENT is present, use that as an initial comment.
+If COMMENT is present, use that as an initial comment.
 
 The version control system to use is found by cycling through the list
 `vc-handled-backends'.  The first backend in that list which declares
@@ -29264,7 +29388,7 @@ directory are already registered under that backend) 
will be used to
 register the file.  If no backend declares itself responsible, the
 first backend that could register the file is used.
 
-\(fn &optional SET-REVISION VC-FILESET COMMENT)" t nil)
+\(fn &optional VC-FILESET COMMENT)" t nil)
 
 (autoload 'vc-version-diff "vc" "\
 Report diffs between revisions of the fileset in the repository history.
@@ -29359,8 +29483,12 @@ checked out in that new branch.
 \(fn DIR NAME BRANCHP)" t nil)
 
 (autoload 'vc-retrieve-tag "vc" "\
-Descending recursively from DIR, retrieve the tag called NAME.
-If NAME is empty, it refers to the latest revisions.
+For each file in or below DIR, retrieve their tagged version NAME.
+NAME can name a branch, in which case this command will switch to the
+named branch in the directory DIR.
+Interactively, prompt for DIR only for VCS that works at file level;
+otherwise use the default directory of the current buffer.
+If NAME is empty, it refers to the latest revisions of the current branch.
 If locking is used for the files in DIR, then there must not be any
 locked files at or below DIR (but if NAME is empty, locked files are
 allowed and simply skipped).
@@ -29398,6 +29526,11 @@ When called interactively with a prefix argument, 
prompt for REMOTE-LOCATION.
 
 \(fn &optional REMOTE-LOCATION)" t nil)
 
+(autoload 'vc-region-history "vc" "\
+Show the history of the region FROM..TO.
+
+\(fn FROM TO)" t nil)
+
 (autoload 'vc-revert "vc" "\
 Revert working copies of the selected fileset to their repository contents.
 This asks for confirmation if the buffer contents are not identical
@@ -29405,13 +29538,6 @@ to the working revision (except for keyword expansion).
 
 \(fn)" t nil)
 
-(autoload 'vc-rollback "vc" "\
-Roll back (remove) the most recent changeset committed to the repository.
-This may be either a file-level or a repository-level operation,
-depending on the underlying version-control system.
-
-\(fn)" t nil)
-
 (define-obsolete-function-alias 'vc-revert-buffer 'vc-revert "23.1")
 
 (autoload 'vc-pull "vc" "\
@@ -29490,8 +29616,8 @@ Return the branch part of a revision number REV.
 
 ;;;***
 
-;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (21584 48809
-;;;;;;  507899 0))
+;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (21607 54478
+;;;;;;  800121 42000))
 ;;; Generated autoloads from vc/vc-annotate.el
 
 (autoload 'vc-annotate "vc-annotate" "\
@@ -29530,19 +29656,8 @@ should be applied to the background or to the 
foreground.
 
 ;;;***
 
-;;;### (autoloads nil "vc-arch" "vc/vc-arch.el" (21187 63826 213216
-;;;;;;  0))
-;;; Generated autoloads from vc/vc-arch.el
- (defun vc-arch-registered (file)
-  (if (vc-find-root file "{arch}/=tagging-method")
-      (progn
-        (load "vc-arch" nil t)
-        (vc-arch-registered file))))
-
-;;;***
-
-;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (21584 48809 507899
-;;;;;;  0))
+;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (21645 29117 170137
+;;;;;;  362000))
 ;;; Generated autoloads from vc/vc-bzr.el
 
 (defconst vc-bzr-admin-dirname ".bzr" "\
@@ -29558,8 +29673,8 @@ Name of the format file in a .bzr directory.")
 
 ;;;***
 
-;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (21584 48809 507899
-;;;;;;  0))
+;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (21645 29117 170137
+;;;;;;  362000))
 ;;; Generated autoloads from vc/vc-cvs.el
 (defun vc-cvs-registered (f)
   "Return non-nil if file F is registered with CVS."
@@ -29570,8 +29685,8 @@ Name of the format file in a .bzr directory.")
 
 ;;;***
 
-;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (21517 33344 974987
-;;;;;;  0))
+;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (21665 14401 955623
+;;;;;;  556000))
 ;;; Generated autoloads from vc/vc-dir.el
 
 (autoload 'vc-dir "vc-dir" "\
@@ -29595,8 +29710,8 @@ These are the commands available for use in the file 
status buffer:
 
 ;;;***
 
-;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (21575
-;;;;;;  33829 811769 0))
+;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (21640
+;;;;;;  46919 650145 897000))
 ;;; Generated autoloads from vc/vc-dispatcher.el
 
 (autoload 'vc-do-command "vc-dispatcher" "\
@@ -29619,8 +29734,8 @@ case, and the process object in the asynchronous case.
 
 ;;;***
 
-;;;### (autoloads nil "vc-git" "vc/vc-git.el" (21513 36261 278490
-;;;;;;  0))
+;;;### (autoloads nil "vc-git" "vc/vc-git.el" (21663 59071 96337
+;;;;;;  184000))
 ;;; Generated autoloads from vc/vc-git.el
  (defun vc-git-registered (file)
   "Return non-nil if FILE is registered with git."
@@ -29631,7 +29746,7 @@ case, and the process object in the asynchronous case.
 
 ;;;***
 
-;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (21396 14374 24888 0))
+;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (21645 29117 170137 362000))
 ;;; Generated autoloads from vc/vc-hg.el
  (defun vc-hg-registered (file)
   "Return non-nil if FILE is registered with hg."
@@ -29642,8 +29757,8 @@ case, and the process object in the asynchronous case.
 
 ;;;***
 
-;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (21645 29117 170137
+;;;;;;  362000))
 ;;; Generated autoloads from vc/vc-mtn.el
 
 (defconst vc-mtn-admin-dir "_MTN" "\
@@ -29659,8 +29774,8 @@ Name of the monotone directory's format file.")
 
 ;;;***
 
-;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (21584 48809 507899
-;;;;;;  0))
+;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (21645 29117 170137
+;;;;;;  362000))
 ;;; Generated autoloads from vc/vc-rcs.el
 
 (defvar vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) 
"\
@@ -29673,8 +29788,8 @@ For a description of possible values, see 
`vc-check-master-templates'.")
 
 ;;;***
 
-;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (21645 29117 170137
+;;;;;;  362000))
 ;;; Generated autoloads from vc/vc-sccs.el
 
 (defvar vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" 
vc-sccs-search-project-dir)) "\
@@ -29692,8 +29807,22 @@ find any project directory." (let ((project-dir 
(getenv "PROJECTDIR")) dirs dir)
 
 ;;;***
 
-;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (21551 51499 554352
-;;;;;;  0))
+;;;### (autoloads nil "vc-src" "vc/vc-src.el" (21645 29117 170137
+;;;;;;  362000))
+;;; Generated autoloads from vc/vc-src.el
+
+(defvar vc-src-master-templates (purecopy '("%s.src/%s,v")) "\
+Where to look for SRC master files.
+For a description of possible values, see `vc-check-master-templates'.")
+
+(custom-autoload 'vc-src-master-templates "vc-src" t)
+
+(defun vc-src-registered (f) (vc-default-registered 'src f))
+
+;;;***
+
+;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (21652 2366 414435
+;;;;;;  564000))
 ;;; Generated autoloads from vc/vc-svn.el
  (defun vc-svn-registered (f)
   (let ((admin-dir (cond ((and (eq system-type 'windows-nt)
@@ -29706,8 +29835,8 @@ find any project directory." (let ((project-dir (getenv 
"PROJECTDIR")) dirs dir)
 
 ;;;***
 
-;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (21546
-;;;;;;  33576 601815 0))
+;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/vera-mode.el
 (push (purecopy '(vera-mode 2 28)) package--builtin-versions)
  (add-to-list 'auto-mode-alist (cons (purecopy "\\.vr[hi]?\\'")  'vera-mode))
@@ -29766,7 +29895,7 @@ Key bindings:
 ;;;***
 
 ;;;### (autoloads nil "verilog-mode" "progmodes/verilog-mode.el"
-;;;;;;  (21555 48550 492098 0))
+;;;;;;  (21644 8251 830117 252000))
 ;;; Generated autoloads from progmodes/verilog-mode.el
 
 (autoload 'verilog-mode "verilog-mode" "\
@@ -29905,8 +30034,8 @@ Key bindings specific to `verilog-mode-map' are:
 
 ;;;***
 
-;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (21305
-;;;;;;  16557 836987 0))
+;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (21638
+;;;;;;  55900 442275 524000))
 ;;; Generated autoloads from progmodes/vhdl-mode.el
 
 (autoload 'vhdl-mode "vhdl-mode" "\
@@ -30021,7 +30150,7 @@ Usage:
     and vice versa.
 
       Syntax-based indentation can be very slow in large files.  Option
-    `vhdl-indent-syntax-based' allows to use faster but simpler indentation.
+    `vhdl-indent-syntax-based' allows you to use faster but simpler 
indentation.
 
       Option `vhdl-indent-comment-like-next-code-line' controls whether
     comment lines are indented like the preceding or like the following code
@@ -30054,7 +30183,7 @@ Usage:
 
 
   CODE FILLING:
-    Code filling allows to condense code (e.g. sensitivity lists or port
+    Code filling allows you to condense code (e.g. sensitivity lists or port
     maps) by removing comments and newlines and re-wrapping so that all
     lines are maximally filled (block filling).  `C-c C-f C-f' fills a list
     enclosed by parenthesis, `C-c C-f C-g' a group of lines separated by
@@ -30314,7 +30443,7 @@ Usage:
 
       Words with special syntax can be highlighted by specifying their
     syntax and color in option `vhdl-special-syntax-alist' and by setting
-    option `vhdl-highlight-special-words' to non-nil.  This allows to
+    option `vhdl-highlight-special-words' to non-nil.  This allows you to
     establish some naming conventions (e.g. to distinguish different kinds
     of signals or other objects by using name suffices) and to support them
     visually.
@@ -30460,8 +30589,8 @@ Key bindings:
 
 ;;;***
 
-;;;### (autoloads nil "viet-util" "language/viet-util.el" (21187
-;;;;;;  63826 213216 0))
+;;;### (autoloads nil "viet-util" "language/viet-util.el" (21607
+;;;;;;  54478 300138 641000))
 ;;; Generated autoloads from language/viet-util.el
 
 (autoload 'viet-encode-viscii-char "viet-util" "\
@@ -30505,7 +30634,7 @@ Convert Vietnamese characters of the current buffer to 
`VIQR' mnemonics.
 
 ;;;***
 
-;;;### (autoloads nil "view" "view.el" (21452 59559 901066 0))
+;;;### (autoloads nil "view" "view.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from view.el
 
 (defvar view-remove-frame-by-deleting t "\
@@ -30761,8 +30890,8 @@ Exit View mode and make the current buffer editable.
 
 ;;;***
 
-;;;### (autoloads nil "viper" "emulation/viper.el" (21586 4146 376146
-;;;;;;  0))
+;;;### (autoloads nil "viper" "emulation/viper.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from emulation/viper.el
 (push (purecopy '(viper 3 14 1)) package--builtin-versions)
 
@@ -30779,8 +30908,8 @@ Turn on Viper emulation of Vi in Emacs. See Info node 
`(viper)Top'.
 
 ;;;***
 
-;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (21240
-;;;;;;  46395 727291 0))
+;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (21607
+;;;;;;  54477 800124 118000))
 ;;; Generated autoloads from emacs-lisp/warnings.el
 
 (defvar warning-prefix-function nil "\
@@ -30870,7 +30999,7 @@ this is equivalent to `display-warning', using
 
 ;;;***
 
-;;;### (autoloads nil "wdired" "wdired.el" (21187 63826 213216 0))
+;;;### (autoloads nil "wdired" "wdired.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from wdired.el
 (push (purecopy '(wdired 2 0)) package--builtin-versions)
 
@@ -30888,8 +31017,8 @@ See `wdired-mode'.
 
 ;;;***
 
-;;;### (autoloads nil "webjump" "net/webjump.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "webjump" "net/webjump.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from net/webjump.el
 
 (autoload 'webjump "webjump" "\
@@ -30905,8 +31034,8 @@ Please submit bug reports and other feedback to the 
author, Neil W. Van Dyke
 
 ;;;***
 
-;;;### (autoloads nil "which-func" "progmodes/which-func.el" (21511
-;;;;;;  46035 786880 0))
+;;;### (autoloads nil "which-func" "progmodes/which-func.el" (21607
+;;;;;;  54478 800121 42000))
 ;;; Generated autoloads from progmodes/which-func.el
  (put 'which-func-format 'risky-local-variable t)
  (put 'which-func-current 'risky-local-variable t)
@@ -30936,8 +31065,8 @@ in certain major modes.
 
 ;;;***
 
-;;;### (autoloads nil "whitespace" "whitespace.el" (21570 15914 957442
-;;;;;;  0))
+;;;### (autoloads nil "whitespace" "whitespace.el" (21630 19673 940150
+;;;;;;  833000))
 ;;; Generated autoloads from whitespace.el
 (push (purecopy '(whitespace 13 2 2)) package--builtin-versions)
 
@@ -31305,8 +31434,8 @@ cleaning up these problems.
 
 ;;;***
 
-;;;### (autoloads nil "wid-browse" "wid-browse.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "wid-browse" "wid-browse.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from wid-browse.el
 
 (autoload 'widget-browse-at "wid-browse" "\
@@ -31334,8 +31463,8 @@ if ARG is omitted or nil.
 
 ;;;***
 
-;;;### (autoloads nil "wid-edit" "wid-edit.el" (21414 44327 790846
-;;;;;;  0))
+;;;### (autoloads nil "wid-edit" "wid-edit.el" (21634 58813 900130
+;;;;;;  256000))
 ;;; Generated autoloads from wid-edit.el
 
 (autoload 'widgetp "wid-edit" "\
@@ -31377,8 +31506,8 @@ Setup current buffer so editing string widgets works.
 
 ;;;***
 
-;;;### (autoloads nil "windmove" "windmove.el" (21187 63826 213216
-;;;;;;  0))
+;;;### (autoloads nil "windmove" "windmove.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from windmove.el
 
 (autoload 'windmove-left "windmove" "\
@@ -31430,7 +31559,7 @@ Default MODIFIER is 'shift.
 
 ;;;***
 
-;;;### (autoloads nil "winner" "winner.el" (21549 9768 351453 0))
+;;;### (autoloads nil "winner" "winner.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from winner.el
 
 (defvar winner-mode nil "\
@@ -31453,7 +31582,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG 
is `toggle'.
 
 ;;;***
 
-;;;### (autoloads nil "woman" "woman.el" (21393 38187 675040 0))
+;;;### (autoloads nil "woman" "woman.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from woman.el
 (push (purecopy '(woman 0 551)) package--builtin-versions)
 
@@ -31502,7 +31631,7 @@ Default bookmark handler for Woman buffers.
 
 ;;;***
 
-;;;### (autoloads nil "xml" "xml.el" (21187 63826 213216 0))
+;;;### (autoloads nil "xml" "xml.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from xml.el
 
 (autoload 'xml-parse-file "xml" "\
@@ -31558,8 +31687,8 @@ Both features can be combined by providing a cons cell
 
 ;;;***
 
-;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (21327 43559 923043
-;;;;;;  0))
+;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (21607 54478 300138
+;;;;;;  641000))
 ;;; Generated autoloads from nxml/xmltok.el
 
 (autoload 'xmltok-get-declared-encoding-position "xmltok" "\
@@ -31577,8 +31706,53 @@ If LIMIT is non-nil, then do not consider characters 
beyond LIMIT.
 
 ;;;***
 
-;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (21575 33829 811769
-;;;;;;  0))
+;;;### (autoloads nil "xref" "progmodes/xref.el" (21667 56163 185621
+;;;;;;  290000))
+;;; Generated autoloads from progmodes/xref.el
+
+(autoload 'xref-pop-marker-stack "xref" "\
+Pop back to where \\[xref-find-definitions] was last invoked.
+
+\(fn)" t nil)
+
+(autoload 'xref-find-definitions "xref" "\
+Find the definition of the identifier at point.
+With prefix argument or when there's no identifier at point,
+prompt for it.
+
+\(fn IDENTIFIER)" t nil)
+
+(autoload 'xref-find-definitions-other-window "xref" "\
+Like `xref-find-definitions' but switch to the other window.
+
+\(fn IDENTIFIER)" t nil)
+
+(autoload 'xref-find-definitions-other-frame "xref" "\
+Like `xref-find-definitions' but switch to the other frame.
+
+\(fn IDENTIFIER)" t nil)
+
+(autoload 'xref-find-references "xref" "\
+Find references to the identifier at point.
+With prefix argument, prompt for the identifier.
+
+\(fn IDENTIFIER)" t nil)
+
+(autoload 'xref-find-apropos "xref" "\
+Find all meaningful symbols that match PATTERN.
+The argument has the same meaning as in `apropos'.
+
+\(fn PATTERN)" t nil)
+ (define-key esc-map "." #'xref-find-definitions)
+ (define-key esc-map "," #'xref-pop-marker-stack)
+ (define-key esc-map [?\C-.] #'xref-find-apropos)
+ (define-key ctl-x-4-map "." #'xref-find-definitions-other-window)
+ (define-key ctl-x-5-map "." #'xref-find-definitions-other-frame)
+
+;;;***
+
+;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (21607 54478 800121
+;;;;;;  42000))
 ;;; Generated autoloads from xt-mouse.el
 
 (defvar xterm-mouse-mode nil "\
@@ -31607,7 +31781,7 @@ down the SHIFT key while pressing the mouse button.
 
 ;;;***
 
-;;;### (autoloads nil "yenc" "gnus/yenc.el" (21187 63826 213216 0))
+;;;### (autoloads nil "yenc" "gnus/yenc.el" (21607 54478 300138 641000))
 ;;; Generated autoloads from gnus/yenc.el
 
 (autoload 'yenc-decode-region "yenc" "\
@@ -31622,7 +31796,7 @@ Extract file name from an yenc header.
 
 ;;;***
 
-;;;### (autoloads nil "zone" "play/zone.el" (21187 63826 213216 0))
+;;;### (autoloads nil "zone" "play/zone.el" (21607 54478 800121 42000))
 ;;; Generated autoloads from play/zone.el
 
 (autoload 'zone "zone" "\
@@ -31654,21 +31828,21 @@ Zone out, completely.
 ;;;;;;  "calendar/diary-loaddefs.el" "calendar/hol-loaddefs.el" "cdl.el"
 ;;;;;;  "cedet/cedet-cscope.el" "cedet/cedet-files.el" "cedet/cedet-global.el"
 ;;;;;;  "cedet/cedet-idutils.el" "cedet/ede/auto.el" 
"cedet/ede/autoconf-edit.el"
-;;;;;;  "cedet/ede/base.el" "cedet/ede/cpp-root.el" "cedet/ede/custom.el"
-;;;;;;  "cedet/ede/dired.el" "cedet/ede/emacs.el" "cedet/ede/files.el"
-;;;;;;  "cedet/ede/generic.el" "cedet/ede/linux.el" "cedet/ede/loaddefs.el"
-;;;;;;  "cedet/ede/locate.el" "cedet/ede/make.el" "cedet/ede/makefile-edit.el"
-;;;;;;  "cedet/ede/pconf.el" "cedet/ede/pmake.el" "cedet/ede/proj-archive.el"
-;;;;;;  "cedet/ede/proj-aux.el" "cedet/ede/proj-comp.el" 
"cedet/ede/proj-elisp.el"
-;;;;;;  "cedet/ede/proj-info.el" "cedet/ede/proj-misc.el" 
"cedet/ede/proj-obj.el"
-;;;;;;  "cedet/ede/proj-prog.el" "cedet/ede/proj-scheme.el" 
"cedet/ede/proj-shared.el"
-;;;;;;  "cedet/ede/proj.el" "cedet/ede/project-am.el" "cedet/ede/shell.el"
-;;;;;;  "cedet/ede/simple.el" "cedet/ede/source.el" "cedet/ede/speedbar.el"
-;;;;;;  "cedet/ede/srecode.el" "cedet/ede/system.el" "cedet/ede/util.el"
-;;;;;;  "cedet/semantic/analyze.el" "cedet/semantic/analyze/complete.el"
-;;;;;;  "cedet/semantic/analyze/debug.el" "cedet/semantic/analyze/fcn.el"
-;;;;;;  "cedet/semantic/analyze/refs.el" "cedet/semantic/bovine.el"
-;;;;;;  "cedet/semantic/bovine/c.el" "cedet/semantic/bovine/debug.el"
+;;;;;;  "cedet/ede/base.el" "cedet/ede/config.el" "cedet/ede/cpp-root.el"
+;;;;;;  "cedet/ede/custom.el" "cedet/ede/detect.el" "cedet/ede/dired.el"
+;;;;;;  "cedet/ede/emacs.el" "cedet/ede/files.el" "cedet/ede/generic.el"
+;;;;;;  "cedet/ede/linux.el" "cedet/ede/loaddefs.el" "cedet/ede/locate.el"
+;;;;;;  "cedet/ede/make.el" "cedet/ede/makefile-edit.el" "cedet/ede/pconf.el"
+;;;;;;  "cedet/ede/pmake.el" "cedet/ede/proj-archive.el" 
"cedet/ede/proj-aux.el"
+;;;;;;  "cedet/ede/proj-comp.el" "cedet/ede/proj-elisp.el" 
"cedet/ede/proj-info.el"
+;;;;;;  "cedet/ede/proj-misc.el" "cedet/ede/proj-obj.el" 
"cedet/ede/proj-prog.el"
+;;;;;;  "cedet/ede/proj-scheme.el" "cedet/ede/proj-shared.el" 
"cedet/ede/proj.el"
+;;;;;;  "cedet/ede/project-am.el" "cedet/ede/shell.el" "cedet/ede/simple.el"
+;;;;;;  "cedet/ede/source.el" "cedet/ede/speedbar.el" "cedet/ede/srecode.el"
+;;;;;;  "cedet/ede/system.el" "cedet/ede/util.el" "cedet/semantic/analyze.el"
+;;;;;;  "cedet/semantic/analyze/complete.el" "cedet/semantic/analyze/debug.el"
+;;;;;;  "cedet/semantic/analyze/fcn.el" "cedet/semantic/analyze/refs.el"
+;;;;;;  "cedet/semantic/bovine.el" "cedet/semantic/bovine/c.el" 
"cedet/semantic/bovine/debug.el"
 ;;;;;;  "cedet/semantic/bovine/el.el" "cedet/semantic/bovine/gcc.el"
 ;;;;;;  "cedet/semantic/bovine/make.el" "cedet/semantic/bovine/scm.el"
 ;;;;;;  "cedet/semantic/chart.el" "cedet/semantic/complete.el" 
"cedet/semantic/ctxt.el"
@@ -31702,8 +31876,8 @@ Zone out, completely.
 ;;;;;;  "cedet/srecode/loaddefs.el" "cedet/srecode/map.el" 
"cedet/srecode/mode.el"
 ;;;;;;  "cedet/srecode/semantic.el" "cedet/srecode/srt.el" 
"cedet/srecode/table.el"
 ;;;;;;  "cedet/srecode/template.el" "cedet/srecode/texi.el" "cus-dep.el"
-;;;;;;  "dframe.el" "dired-aux.el" "dired-x.el" "dos-fns.el" "dos-vars.el"
-;;;;;;  "dos-w32.el" "dynamic-setting.el" "emacs-lisp/avl-tree.el"
+;;;;;;  "dframe.el" "dired-aux.el" "dired-x.el" "dom.el" "dos-fns.el"
+;;;;;;  "dos-vars.el" "dos-w32.el" "dynamic-setting.el" 
"emacs-lisp/avl-tree.el"
 ;;;;;;  "emacs-lisp/bindat.el" "emacs-lisp/byte-opt.el" 
"emacs-lisp/cl-extra.el"
 ;;;;;;  "emacs-lisp/cl-loaddefs.el" "emacs-lisp/cl-macs.el" 
"emacs-lisp/cl-seq.el"
 ;;;;;;  "emacs-lisp/cl.el" "emacs-lisp/eieio-base.el" 
"emacs-lisp/eieio-custom.el"
@@ -31777,37 +31951,38 @@ Zone out, completely.
 ;;;;;;  "net/dns.el" "net/eudc-vars.el" "net/eudcb-bbdb.el" "net/eudcb-ldap.el"
 ;;;;;;  "net/eudcb-mab.el" "net/eudcb-ph.el" "net/hmac-def.el" 
"net/hmac-md5.el"
 ;;;;;;  "net/imap.el" "net/ldap.el" "net/mairix.el" "net/newsticker.el"
-;;;;;;  "net/sasl-cram.el" "net/sasl-digest.el" "net/sasl.el" 
"net/shr-color.el"
-;;;;;;  "net/soap-client.el" "net/soap-inspect.el" "net/socks.el"
-;;;;;;  "net/tls.el" "net/tramp-adb.el" "net/tramp-cache.el" 
"net/tramp-cmds.el"
-;;;;;;  "net/tramp-compat.el" "net/tramp-gvfs.el" "net/tramp-gw.el"
-;;;;;;  "net/tramp-loaddefs.el" "net/tramp-sh.el" "net/tramp-smb.el"
-;;;;;;  "net/tramp-uu.el" "net/trampver.el" "net/zeroconf.el" 
"notifications.el"
-;;;;;;  "nxml/nxml-enc.el" "nxml/nxml-maint.el" "nxml/nxml-ns.el"
-;;;;;;  "nxml/nxml-outln.el" "nxml/nxml-parse.el" "nxml/nxml-rap.el"
-;;;;;;  "nxml/nxml-util.el" "nxml/rng-dt.el" "nxml/rng-loc.el" 
"nxml/rng-maint.el"
-;;;;;;  "nxml/rng-match.el" "nxml/rng-parse.el" "nxml/rng-pttrn.el"
-;;;;;;  "nxml/rng-uri.el" "nxml/rng-util.el" "nxml/xsd-regexp.el"
-;;;;;;  "org/ob-C.el" "org/ob-R.el" "org/ob-asymptote.el" "org/ob-awk.el"
-;;;;;;  "org/ob-calc.el" "org/ob-clojure.el" "org/ob-comint.el" 
"org/ob-core.el"
-;;;;;;  "org/ob-css.el" "org/ob-ditaa.el" "org/ob-dot.el" 
"org/ob-emacs-lisp.el"
-;;;;;;  "org/ob-eval.el" "org/ob-exp.el" "org/ob-fortran.el" 
"org/ob-gnuplot.el"
-;;;;;;  "org/ob-haskell.el" "org/ob-io.el" "org/ob-java.el" "org/ob-js.el"
-;;;;;;  "org/ob-keys.el" "org/ob-latex.el" "org/ob-ledger.el" 
"org/ob-lilypond.el"
-;;;;;;  "org/ob-lisp.el" "org/ob-lob.el" "org/ob-makefile.el" 
"org/ob-matlab.el"
-;;;;;;  "org/ob-maxima.el" "org/ob-mscgen.el" "org/ob-ocaml.el" 
"org/ob-octave.el"
-;;;;;;  "org/ob-org.el" "org/ob-perl.el" "org/ob-picolisp.el" 
"org/ob-plantuml.el"
-;;;;;;  "org/ob-python.el" "org/ob-ref.el" "org/ob-ruby.el" "org/ob-sass.el"
-;;;;;;  "org/ob-scala.el" "org/ob-scheme.el" "org/ob-screen.el" "org/ob-sh.el"
-;;;;;;  "org/ob-shen.el" "org/ob-sql.el" "org/ob-sqlite.el" "org/ob-table.el"
-;;;;;;  "org/ob-tangle.el" "org/ob.el" "org/org-archive.el" "org/org-attach.el"
-;;;;;;  "org/org-bbdb.el" "org/org-bibtex.el" "org/org-clock.el"
-;;;;;;  "org/org-crypt.el" "org/org-ctags.el" "org/org-datetree.el"
-;;;;;;  "org/org-docview.el" "org/org-element.el" "org/org-entities.el"
-;;;;;;  "org/org-eshell.el" "org/org-faces.el" "org/org-feed.el"
-;;;;;;  "org/org-footnote.el" "org/org-gnus.el" "org/org-habit.el"
-;;;;;;  "org/org-id.el" "org/org-indent.el" "org/org-info.el" 
"org/org-inlinetask.el"
-;;;;;;  "org/org-install.el" "org/org-irc.el" "org/org-list.el" 
"org/org-loaddefs.el"
+;;;;;;  "net/nsm.el" "net/sasl-cram.el" "net/sasl-digest.el" "net/sasl.el"
+;;;;;;  "net/shr-color.el" "net/soap-client.el" "net/soap-inspect.el"
+;;;;;;  "net/socks.el" "net/tls.el" "net/tramp-adb.el" "net/tramp-cache.el"
+;;;;;;  "net/tramp-cmds.el" "net/tramp-compat.el" "net/tramp-gvfs.el"
+;;;;;;  "net/tramp-gw.el" "net/tramp-loaddefs.el" "net/tramp-sh.el"
+;;;;;;  "net/tramp-smb.el" "net/tramp-uu.el" "net/trampver.el" 
"net/zeroconf.el"
+;;;;;;  "notifications.el" "nxml/nxml-enc.el" "nxml/nxml-maint.el"
+;;;;;;  "nxml/nxml-ns.el" "nxml/nxml-outln.el" "nxml/nxml-parse.el"
+;;;;;;  "nxml/nxml-rap.el" "nxml/nxml-util.el" "nxml/rng-dt.el" 
"nxml/rng-loc.el"
+;;;;;;  "nxml/rng-maint.el" "nxml/rng-match.el" "nxml/rng-parse.el"
+;;;;;;  "nxml/rng-pttrn.el" "nxml/rng-uri.el" "nxml/rng-util.el"
+;;;;;;  "nxml/xsd-regexp.el" "org/ob-C.el" "org/ob-R.el" "org/ob-asymptote.el"
+;;;;;;  "org/ob-awk.el" "org/ob-calc.el" "org/ob-clojure.el" "org/ob-comint.el"
+;;;;;;  "org/ob-core.el" "org/ob-css.el" "org/ob-ditaa.el" "org/ob-dot.el"
+;;;;;;  "org/ob-emacs-lisp.el" "org/ob-eval.el" "org/ob-exp.el" 
"org/ob-fortran.el"
+;;;;;;  "org/ob-gnuplot.el" "org/ob-haskell.el" "org/ob-io.el" "org/ob-java.el"
+;;;;;;  "org/ob-js.el" "org/ob-keys.el" "org/ob-latex.el" "org/ob-ledger.el"
+;;;;;;  "org/ob-lilypond.el" "org/ob-lisp.el" "org/ob-lob.el" 
"org/ob-makefile.el"
+;;;;;;  "org/ob-matlab.el" "org/ob-maxima.el" "org/ob-mscgen.el"
+;;;;;;  "org/ob-ocaml.el" "org/ob-octave.el" "org/ob-org.el" "org/ob-perl.el"
+;;;;;;  "org/ob-picolisp.el" "org/ob-plantuml.el" "org/ob-python.el"
+;;;;;;  "org/ob-ref.el" "org/ob-ruby.el" "org/ob-sass.el" "org/ob-scala.el"
+;;;;;;  "org/ob-scheme.el" "org/ob-screen.el" "org/ob-sh.el" "org/ob-shen.el"
+;;;;;;  "org/ob-sql.el" "org/ob-sqlite.el" "org/ob-table.el" "org/ob-tangle.el"
+;;;;;;  "org/ob.el" "org/org-archive.el" "org/org-attach.el" "org/org-bbdb.el"
+;;;;;;  "org/org-bibtex.el" "org/org-clock.el" "org/org-crypt.el"
+;;;;;;  "org/org-ctags.el" "org/org-datetree.el" "org/org-docview.el"
+;;;;;;  "org/org-element.el" "org/org-entities.el" "org/org-eshell.el"
+;;;;;;  "org/org-faces.el" "org/org-feed.el" "org/org-footnote.el"
+;;;;;;  "org/org-gnus.el" "org/org-habit.el" "org/org-id.el" 
"org/org-indent.el"
+;;;;;;  "org/org-info.el" "org/org-inlinetask.el" "org/org-install.el"
+;;;;;;  "org/org-irc.el" "org/org-list.el" "org/org-loaddefs.el"
 ;;;;;;  "org/org-macro.el" "org/org-mhe.el" "org/org-mobile.el" 
"org/org-mouse.el"
 ;;;;;;  "org/org-pcomplete.el" "org/org-plot.el" "org/org-protocol.el"
 ;;;;;;  "org/org-rmail.el" "org/org-src.el" "org/org-table.el" 
"org/org-timer.el"
@@ -31836,8 +32011,9 @@ Zone out, completely.
 ;;;;;;  "url/url-vars.el" "vc/ediff-diff.el" "vc/ediff-init.el" 
"vc/ediff-merg.el"
 ;;;;;;  "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el"
 ;;;;;;  "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el"
-;;;;;;  "vcursor.el" "vt-control.el" "vt100-led.el" "w32-fns.el"
-;;;;;;  "w32-vars.el" "x-dnd.el") (21588 45918 816738 407000))
+;;;;;;  "vc/vc-filewise.el" "vcursor.el" "vt-control.el" "vt100-led.el"
+;;;;;;  "w32-fns.el" "w32-vars.el" "x-dnd.el") (21669 11479 568273
+;;;;;;  504000))
 
 ;;;***
 
diff --git a/lisp/leim/.gitignore b/lisp/leim/.gitignore
deleted file mode 100644
index 57b77ba..0000000
--- a/lisp/leim/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-ja-dic/
-leim-list.el
diff --git a/lisp/leim/quail/.gitignore b/lisp/leim/quail/.gitignore
deleted file mode 100644
index c3f9e36..0000000
--- a/lisp/leim/quail/.gitignore
+++ /dev/null
@@ -1,22 +0,0 @@
-4Corner.el
-ARRAY30.el
-CCDOSPY.el
-CTLau-b5.el
-CTLau.el
-ECDICT.el
-ETZY.el
-PY-b5.el
-PY.el
-Punct-b5.el
-Punct.el
-QJ-b5.el
-QJ.el
-SW.el
-TONEPY.el
-ZIRANMA.el
-ZOZY.el
-quick-b5.el
-quick-cns.el
-tsang-b5.el
-tsang-cns.el
-
diff --git a/lisp/leim/quail/arabic.el b/lisp/leim/quail/arabic.el
index 2ec8378..d05fc47 100644
--- a/lisp/leim/quail/arabic.el
+++ b/lisp/leim/quail/arabic.el
@@ -1,6 +1,6 @@
 ;;; arabic.el --- Quail package for inputting Arabic   -*- coding: utf-8;-*-
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Cloos <address@hidden>
 ;; Keywords: mule, input method, Arabic
diff --git a/lisp/leim/quail/croatian.el b/lisp/leim/quail/croatian.el
index ed5e20e..e82be23 100644
--- a/lisp/leim/quail/croatian.el
+++ b/lisp/leim/quail/croatian.el
@@ -1,6 +1,6 @@
 ;;; croatian.el -- Quail package for inputting Croatian  -*-coding: utf-8;-*-
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Hrvoje Nikšić <address@hidden>
 ;; Keywords: i18n
diff --git a/lisp/leim/quail/cyril-jis.el b/lisp/leim/quail/cyril-jis.el
index 14dfd08..d771414 100644
--- a/lisp/leim/quail/cyril-jis.el
+++ b/lisp/leim/quail/cyril-jis.el
@@ -1,6 +1,6 @@
 ;;; cyril-jis.el --- Quail package for inputting JISX0208 Cyrillic letters
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/cyrillic.el b/lisp/leim/quail/cyrillic.el
index 464431d..a2983a3 100644
--- a/lisp/leim/quail/cyrillic.el
+++ b/lisp/leim/quail/cyrillic.el
@@ -1,6 +1,6 @@
 ;;; cyrillic.el --- Quail package for inputting Cyrillic characters
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/czech.el b/lisp/leim/quail/czech.el
index 131f64b..18e0ec6 100644
--- a/lisp/leim/quail/czech.el
+++ b/lisp/leim/quail/czech.el
@@ -1,6 +1,6 @@
 ;;; czech.el --- Quail package for inputting Czech -*-coding: utf-8;-*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Milan Zamazal <address@hidden>
 ;; Maintainer: Pavel Janík <address@hidden>
diff --git a/lisp/leim/quail/georgian.el b/lisp/leim/quail/georgian.el
index fab67ac..167c71f 100644
--- a/lisp/leim/quail/georgian.el
+++ b/lisp/leim/quail/georgian.el
@@ -1,6 +1,6 @@
 ;;; georgian.el --- Quail package for inputting Georgian characters  
-*-coding: utf-8;-*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: i18n
diff --git a/lisp/leim/quail/greek.el b/lisp/leim/quail/greek.el
index 5739a7b..5c5ead7 100644
--- a/lisp/leim/quail/greek.el
+++ b/lisp/leim/quail/greek.el
@@ -1,6 +1,6 @@
 ;;; greek.el --- Quail package for inputting Greek -*-coding: utf-8-*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/hangul.el b/lisp/leim/quail/hangul.el
index 9622509..243fa04 100644
--- a/lisp/leim/quail/hangul.el
+++ b/lisp/leim/quail/hangul.el
@@ -1,6 +1,6 @@
 ;;; hangul.el --- Korean Hangul input method
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Jihyun Cho <address@hidden>
 ;; Keywords: multilingual, input method, Korean, Hangul
diff --git a/lisp/leim/quail/hanja.el b/lisp/leim/quail/hanja.el
index 52b01d5..dbfc2a7 100644
--- a/lisp/leim/quail/hanja.el
+++ b/lisp/leim/quail/hanja.el
@@ -1,6 +1,6 @@
 ;;; hanja.el --- Quail-package for Korean Hanja (KSC5601)  -*-coding: utf-8;-*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/hanja3.el b/lisp/leim/quail/hanja3.el
index b84cc5b..14446a9 100644
--- a/lisp/leim/quail/hanja3.el
+++ b/lisp/leim/quail/hanja3.el
@@ -1,6 +1,6 @@
 ;;; hanja3.el --- Quail-package for Korean Hanja (KSC5601)  -*-coding: 
utf-8;-*-
 
-;; Copyright (C) 1997, 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Koaunghi Un <address@hidden>
 ;; Keywords: mule, quail, multilingual, input method, Korean, Hanja
diff --git a/lisp/leim/quail/indian.el b/lisp/leim/quail/indian.el
index 34911db..855ccc9 100644
--- a/lisp/leim/quail/indian.el
+++ b/lisp/leim/quail/indian.el
@@ -1,6 +1,6 @@
 ;;; indian.el --- Quail packages for inputting Indian
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: KAWABATA, Taichi <address@hidden>
 
diff --git a/lisp/leim/quail/ipa-praat.el b/lisp/leim/quail/ipa-praat.el
index 5322972..0a8db8c 100644
--- a/lisp/leim/quail/ipa-praat.el
+++ b/lisp/leim/quail/ipa-praat.el
@@ -1,6 +1,6 @@
 ;;; ipa-praat.el --- Inputting IPA characters with the conventions of Praat
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Oliver Scholz <address@hidden>
 ;; Keywords: multilingual, input method, IPA
diff --git a/lisp/leim/quail/ipa.el b/lisp/leim/quail/ipa.el
index e0e1c9f..d9c4515 100644
--- a/lisp/leim/quail/ipa.el
+++ b/lisp/leim/quail/ipa.el
@@ -1,6 +1,6 @@
 ;;; ipa.el --- Quail package for inputting IPA characters  -*-coding: utf-8;-*-
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/japanese.el b/lisp/leim/quail/japanese.el
index 9411af0..fd6628b 100644
--- a/lisp/leim/quail/japanese.el
+++ b/lisp/leim/quail/japanese.el
@@ -1,6 +1,6 @@
 ;;; japanese.el --- Quail package for inputting Japanese  -*-coding: 
iso-2022-7bit;-*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/latin-alt.el b/lisp/leim/quail/latin-alt.el
index 1fac1cc..4c886fa 100644
--- a/lisp/leim/quail/latin-alt.el
+++ b/lisp/leim/quail/latin-alt.el
@@ -1,6 +1,6 @@
 ;;; latin-alt.el --- Quail package for inputting various European characters 
-*-coding: utf-8;-*-
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
 ;;   2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/latin-ltx.el b/lisp/leim/quail/latin-ltx.el
index e4222d0..82c0aa3 100644
--- a/lisp/leim/quail/latin-ltx.el
+++ b/lisp/leim/quail/latin-ltx.el
@@ -1,6 +1,6 @@
 ;;; latin-ltx.el --- Quail package for TeX-style input -*-coding: utf-8;-*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
 ;;   2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/latin-post.el b/lisp/leim/quail/latin-post.el
index a4bb85e..e8957eb 100644
--- a/lisp/leim/quail/latin-post.el
+++ b/lisp/leim/quail/latin-post.el
@@ -1,6 +1,6 @@
 ;;; latin-post.el --- Quail packages for inputting various European characters 
 -*-coding: utf-8;-*-
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/latin-pre.el b/lisp/leim/quail/latin-pre.el
index 6202b89..41552b5 100644
--- a/lisp/leim/quail/latin-pre.el
+++ b/lisp/leim/quail/latin-pre.el
@@ -1,6 +1,6 @@
 ;;; latin-pre.el --- Quail packages for inputting various European characters  
-*-coding: utf-8;-*-
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/lrt.el b/lisp/leim/quail/lrt.el
index 1bf4dcf..081535a 100644
--- a/lisp/leim/quail/lrt.el
+++ b/lisp/leim/quail/lrt.el
@@ -1,6 +1,6 @@
 ;;; lrt.el --- Quail package for inputting Lao characters by LRT method  
-*-coding: utf-8;-*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/persian.el b/lisp/leim/quail/persian.el
index 54f90d8..7739c22 100644
--- a/lisp/leim/quail/persian.el
+++ b/lisp/leim/quail/persian.el
@@ -1,6 +1,6 @@
 ;;; persian.el  --- Quail package for inputting Persian/Farsi keyboard -*- 
coding: utf-8;-*-
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Mohsen BANAN <address@hidden>
 ;; X-URL: http://mohsen.1.banan.byname.net/contact
diff --git a/lisp/leim/quail/py-punct.el b/lisp/leim/quail/py-punct.el
index 780348f..fddabc6 100644
--- a/lisp/leim/quail/py-punct.el
+++ b/lisp/leim/quail/py-punct.el
@@ -1,6 +1,6 @@
 ;;; py-punct.el --- Quail packages for Chinese (pinyin + extra symbols)  
-*-coding: iso-2022-7bit;-*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/rfc1345.el b/lisp/leim/quail/rfc1345.el
index 884bd26..a21ba7a 100644
--- a/lisp/leim/quail/rfc1345.el
+++ b/lisp/leim/quail/rfc1345.el
@@ -1,6 +1,6 @@
 ;;; rfc1345.el --- Quail method for RFC 1345 mnemonics -*- coding: utf-8 -*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: i18n
diff --git a/lisp/leim/quail/sgml-input.el b/lisp/leim/quail/sgml-input.el
index ced0be7..2e447b1 100644
--- a/lisp/leim/quail/sgml-input.el
+++ b/lisp/leim/quail/sgml-input.el
@@ -1,6 +1,6 @@
 ;;; sgml-input.el --- Quail method for Unicode entered as SGML entities -*- 
coding: utf-8 -*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: i18n
diff --git a/lisp/leim/quail/sisheng.el b/lisp/leim/quail/sisheng.el
index 324188e..e43bf0a 100644
--- a/lisp/leim/quail/sisheng.el
+++ b/lisp/leim/quail/sisheng.el
@@ -1,6 +1,6 @@
 ;;; sisheng.el --- sisheng input method for Chinese pinyin transliteration
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Werner LEMBERG <address@hidden>
 
diff --git a/lisp/leim/quail/slovak.el b/lisp/leim/quail/slovak.el
index f120f15..ba1d37c 100644
--- a/lisp/leim/quail/slovak.el
+++ b/lisp/leim/quail/slovak.el
@@ -1,6 +1,6 @@
 ;;; slovak.el --- Quail package for inputting Slovak  -*-coding: utf-8;-*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Authors: Tibor Šimko <address@hidden>
 ;;     Milan Zamazal <address@hidden>
diff --git a/lisp/leim/quail/symbol-ksc.el b/lisp/leim/quail/symbol-ksc.el
index 4c39877..50a586c 100644
--- a/lisp/leim/quail/symbol-ksc.el
+++ b/lisp/leim/quail/symbol-ksc.el
@@ -1,6 +1,6 @@
 ;;; symbol-ksc.el --- Quail-package for Korean Symbol (KSC5601) -*-coding: 
utf-8;-*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/tibetan.el b/lisp/leim/quail/tibetan.el
index f6befb0..a54cbdc 100644
--- a/lisp/leim/quail/tibetan.el
+++ b/lisp/leim/quail/tibetan.el
@@ -1,6 +1,6 @@
 ;;; tibetan.el --- Quail package for inputting Tibetan characters -*-coding: 
utf-8-emacs;-*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/uni-input.el b/lisp/leim/quail/uni-input.el
index bd7e7f9..7d2cd26 100644
--- a/lisp/leim/quail/uni-input.el
+++ b/lisp/leim/quail/uni-input.el
@@ -1,6 +1,6 @@
 ;;; uni-input.el --- Hex Unicode input method
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
diff --git a/lisp/leim/quail/vntelex.el b/lisp/leim/quail/vntelex.el
index 4d1dc2b..4ee6a47 100644
--- a/lisp/leim/quail/vntelex.el
+++ b/lisp/leim/quail/vntelex.el
@@ -1,6 +1,6 @@
 ;;; vntelex.el --- Quail package for Vietnamese by Telex method
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author:   Werner Lemberg <address@hidden>
 ;; Keywords: multilingual, input method, Vietnamese
diff --git a/lisp/leim/quail/vnvni.el b/lisp/leim/quail/vnvni.el
index d0ea1ed..cbacca4 100644
--- a/lisp/leim/quail/vnvni.el
+++ b/lisp/leim/quail/vnvni.el
@@ -1,6 +1,6 @@
 ;;; vnvni.el --- Quail package for Vietnamese by VNI method
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author:   Werner Lemberg <address@hidden>
 ;;           Nguyen Thai Ngoc Duy <address@hidden>
diff --git a/lisp/leim/quail/welsh.el b/lisp/leim/quail/welsh.el
index 26e7648..a39bd42 100644
--- a/lisp/leim/quail/welsh.el
+++ b/lisp/leim/quail/welsh.el
@@ -1,6 +1,6 @@
 ;;; welsh.el --- Quail package for inputting Welsh characters  -*-coding: 
utf-8;-*-
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: i18n
diff --git a/lisp/let-alist.el b/lisp/let-alist.el
new file mode 100644
index 0000000..80b72d3
--- /dev/null
+++ b/lisp/let-alist.el
@@ -0,0 +1,142 @@
+;;; let-alist.el --- Easily let-bind values of an assoc-list by their names 
-*- lexical-binding: t; -*-
+
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
+
+;; Author: Artur Malabarba <address@hidden>
+;; Maintainer: Artur Malabarba <address@hidden>
+;; Version: 1.0.3
+;; Keywords: extensions lisp
+;; Prefix: let-alist
+;; Separator: -
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package offers a single macro, `let-alist'.  This macro takes a
+;; first argument (whose value must be an alist) and a body.
+;;
+;; The macro expands to a let form containing body, where each dotted
+;; symbol inside body is let-bound to their cdrs in the alist.  Dotted
+;; symbol is any symbol starting with a `.'.  Only those present in
+;; the body are let-bound and this search is done at compile time.
+;;
+;; For instance, the following code
+;;
+;;   (let-alist alist
+;;     (if (and .title .body)
+;;         .body
+;;       .site
+;;       .site.contents))
+;;
+;; essentially expands to
+;;
+;;   (let ((.title (cdr (assq 'title alist)))
+;;         (.body  (cdr (assq 'body alist)))
+;;         (.site  (cdr (assq 'site alist)))
+;;         (.site.contents (cdr (assq 'contents (cdr (assq 'site alist))))))
+;;     (if (and .title .body)
+;;         .body
+;;       .site
+;;       .site.contents))
+;;
+;; If you nest `let-alist' invocations, the inner one can't access
+;; the variables of the outer one. You can, however, access alists
+;; inside the original alist by using dots inside the symbol, as
+;; displayed in the example above by the `.site.contents'.
+;;
+;;; Code:
+
+
+(defun let-alist--deep-dot-search (data)
+  "Return alist of symbols inside DATA that start with a `.'.
+Perform a deep search and return an alist where each car is the
+symbol, and each cdr is the same symbol without the `.'."
+  (cond
+   ((symbolp data)
+    (let ((name (symbol-name data)))
+      (when (string-match "\\`\\." name)
+        ;; Return the cons cell inside a list, so it can be appended
+        ;; with other results in the clause below.
+        (list (cons data (intern (replace-match "" nil nil name)))))))
+   ((not (listp data)) nil)
+   (t (apply #'append
+        (mapcar #'let-alist--deep-dot-search data)))))
+
+(defun let-alist--access-sexp (symbol variable)
+  "Return a sexp used to access SYMBOL inside VARIABLE."
+  (let* ((clean (let-alist--remove-dot symbol))
+         (name (symbol-name clean)))
+    (if (string-match "\\`\\." name)
+        clean
+      (let-alist--list-to-sexp
+       (mapcar #'intern (nreverse (split-string name "\\.")))
+       variable))))
+
+(defun let-alist--list-to-sexp (list var)
+  "Turn symbols LIST into recursive calls to `cdr' `assq' on VAR."
+  `(cdr (assq ',(car list)
+              ,(if (cdr list) (let-alist--list-to-sexp (cdr list) var)
+                 var))))
+
+(defun let-alist--remove-dot (symbol)
+  "Return SYMBOL, sans an initial dot."
+  (let ((name (symbol-name symbol)))
+    (if (string-match "\\`\\." name)
+        (intern (replace-match "" nil nil name))
+      symbol)))
+
+
+;;; The actual macro.
+;;;###autoload
+(defmacro let-alist (alist &rest body)
+  "Let-bind dotted symbols to their cdrs in ALIST and execute BODY.
+Dotted symbol is any symbol starting with a `.'.  Only those present
+in BODY are let-bound and this search is done at compile time.
+
+For instance, the following code
+
+  (let-alist alist
+    (if (and .title .body)
+        .body
+      .site
+      .site.contents))
+
+essentially expands to
+
+  (let ((.title (cdr (assq 'title alist)))
+        (.body  (cdr (assq 'body alist)))
+        (.site  (cdr (assq 'site alist)))
+        (.site.contents (cdr (assq 'contents (cdr (assq 'site alist))))))
+    (if (and .title .body)
+        .body
+      .site
+      .site.contents))
+
+If you nest `let-alist' invocations, the inner one can't access
+the variables of the outer one. You can, however, access alists
+inside the original alist by using dots inside the symbol, as
+displayed in the example above."
+  (declare (indent 1) (debug t))
+  (let ((var (make-symbol "alist")))
+    `(let ((,var ,alist))
+       (let ,(mapcar (lambda (x) `(,(car x) ,(let-alist--access-sexp (car x) 
var)))
+               (delete-dups (let-alist--deep-dot-search body)))
+         ,@body))))
+
+(provide 'let-alist)
+
+;;; let-alist.el ends here
diff --git a/lisp/linum.el b/lisp/linum.el
index b13bd8d..de15274 100644
--- a/lisp/linum.el
+++ b/lisp/linum.el
@@ -1,6 +1,6 @@
 ;;; linum.el --- display line numbers in the left margin -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Markus Triska <address@hidden>
 ;; Maintainer: address@hidden
@@ -138,8 +138,13 @@ Linum mode is a buffer-local minor mode."
       (mapc #'delete-overlay linum-available)
       (setq linum-available nil))))
 
-(defun linum--face-height (face)
-  (aref (font-info (face-font face)) 2))
+(defun linum--face-width (face)
+  (let ((info (font-info (face-font face)))
+       width)
+    (setq width (aref info 11))
+    (if (<= width 0)
+       (setq width (aref info 10)))
+    width))
 
 (defun linum-update-window (win)
   "Update line numbers for the portion visible in window WIN."
@@ -183,10 +188,8 @@ Linum mode is a buffer-local minor mode."
       (setq line (1+ line)))
     (when (display-graphic-p)
       (setq width (ceiling
-                   ;; We'd really want to check the widths rather than the
-                   ;; heights, but it's a start.
-                   (/ (* width 1.0 (linum--face-height 'linum))
-                      (frame-char-height)))))
+                   (/ (* width 1.0 (linum--face-width 'linum))
+                      (frame-char-width)))))
     (set-window-margins win width (cdr (window-margins win)))))
 
 (defun linum-after-change (beg end _len)
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index b9b356c..056a4ef 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -1,6 +1,6 @@
 ;;; loadhist.el --- lisp functions for working with feature groups
 
-;; Copyright (C) 1995, 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 421c3d5..003b0db 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -1,7 +1,7 @@
 ;;; loadup.el --- load up standardly loaded Lisp files for Emacs
 
-;; Copyright (C) 1985-1986, 1992, 1994, 2001-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1992, 1994, 2001-2015 Free Software
+;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
@@ -145,7 +145,8 @@
   (file-error (load "ldefs-boot.el")))
 
 (load "emacs-lisp/nadvice")
-(load "minibuffer")
+(load "emacs-lisp/cl-preloaded")
+(load "minibuffer")            ;After loaddefs, for define-minor-mode.
 (load "abbrev")         ;lisp-mode.el and simple.el use define-abbrev-table.
 (load "simple")
 
diff --git a/lisp/locate.el b/lisp/locate.el
index 0149d01..ff1d11d 100644
--- a/lisp/locate.el
+++ b/lisp/locate.el
@@ -1,6 +1,6 @@
 ;;; locate.el --- interface to the locate command
 
-;; Copyright (C) 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Peter Breton <address@hidden>
 ;; Keywords: unix files
diff --git a/lisp/lpr.el b/lisp/lpr.el
index 40c530a..24c325c 100644
--- a/lisp/lpr.el
+++ b/lisp/lpr.el
@@ -1,6 +1,6 @@
 ;;; lpr.el --- print Emacs buffer on line printer
 
-;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2014 Free Software
+;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el
index 03ee0d2..c3d5705 100644
--- a/lisp/ls-lisp.el
+++ b/lisp/ls-lisp.el
@@ -1,6 +1,6 @@
 ;;; ls-lisp.el --- emulate insert-directory completely in Emacs Lisp
 
-;; Copyright (C) 1992, 1994, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1994, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Sebastian Kremer <address@hidden>
 ;; Modified by: Francis J. Wright <address@hidden>
diff --git a/lisp/macros.el b/lisp/macros.el
index eb7f980..bf1aa30 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -1,6 +1,6 @@
 ;;; macros.el --- non-primitive commands for keyboard macros
 
-;; Copyright (C) 1985-1987, 1992, 1994-1995, 2001-2014 Free Software
+;; Copyright (C) 1985-1987, 1992, 1994-1995, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/.gitignore b/lisp/mail/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/lisp/mail/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/lisp/mail/binhex.el b/lisp/mail/binhex.el
index 30872db..2a2137e 100644
--- a/lisp/mail/binhex.el
+++ b/lisp/mail/binhex.el
@@ -1,6 +1,6 @@
 ;;; binhex.el --- decode BinHex-encoded text
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <address@hidden>
 ;; Keywords: binhex news
diff --git a/lisp/mail/blessmail.el b/lisp/mail/blessmail.el
index 375b441..3290f30 100644
--- a/lisp/mail/blessmail.el
+++ b/lisp/mail/blessmail.el
@@ -1,6 +1,6 @@
 ;;; blessmail.el --- decide whether movemail needs special privileges -*- 
no-byte-compile: t -*-
 
-;; Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
diff --git a/lisp/mail/emacsbug.el b/lisp/mail/emacsbug.el
index 5dde90b..8cd5900 100644
--- a/lisp/mail/emacsbug.el
+++ b/lisp/mail/emacsbug.el
@@ -1,7 +1,7 @@
 ;;; emacsbug.el --- command to report Emacs bugs to appropriate mailing list
 
-;; Copyright (C) 1985, 1994, 1997-1998, 2000-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1994, 1997-1998, 2000-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/footnote.el b/lisp/mail/footnote.el
index 4f883a1..ea67443 100644
--- a/lisp/mail/footnote.el
+++ b/lisp/mail/footnote.el
@@ -1,6 +1,6 @@
 ;;; footnote.el --- footnote support for message mode  -*- coding: utf-8;-*-
 
-;; Copyright (C) 1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Steven L Baur <address@hidden>
 ;; Keywords: mail, news
diff --git a/lisp/mail/hashcash.el b/lisp/mail/hashcash.el
index fb8dfba8..7017065 100644
--- a/lisp/mail/hashcash.el
+++ b/lisp/mail/hashcash.el
@@ -1,6 +1,6 @@
 ;;; hashcash.el --- Add hashcash payments to email
 
-;; Copyright (C) 2003-2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Written by: Paul Foley <address@hidden> (1997-2002)
 ;; Maintainer: Paul Foley <address@hidden>
diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el
index d09f548..5164ea1 100644
--- a/lisp/mail/mail-extr.el
+++ b/lisp/mail/mail-extr.el
@@ -1,6 +1,6 @@
 ;;; mail-extr.el --- extract full name and address from RFC 822 mail header 
-*- coding: utf-8 -*-
 
-;; Copyright (C) 1991-1994, 1997, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1991-1994, 1997, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Joe Wells <address@hidden>
diff --git a/lisp/mail/mail-hist.el b/lisp/mail/mail-hist.el
index 7ee527c..adec35a 100644
--- a/lisp/mail/mail-hist.el
+++ b/lisp/mail/mail-hist.el
@@ -1,6 +1,6 @@
 ;;; mail-hist.el --- headers and message body history for outgoing mail
 
-;; Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Karl Fogel <address@hidden>
 ;; Created: March, 1994
diff --git a/lisp/mail/mail-utils.el b/lisp/mail/mail-utils.el
index 78696d6..736e3f5 100644
--- a/lisp/mail/mail-utils.el
+++ b/lisp/mail/mail-utils.el
@@ -1,6 +1,6 @@
 ;;; mail-utils.el --- utility functions used both by rmail and rnews
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: mail, news
diff --git a/lisp/mail/mailabbrev.el b/lisp/mail/mailabbrev.el
index 980f102..2f349b9 100644
--- a/lisp/mail/mailabbrev.el
+++ b/lisp/mail/mailabbrev.el
@@ -1,6 +1,6 @@
 ;;; mailabbrev.el --- abbrev-expansion of mail aliases
 
-;; Copyright (C) 1985-1987, 1992-1993, 1996-1997, 2000-2014 Free
+;; Copyright (C) 1985-1987, 1992-1993, 1996-1997, 2000-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <address@hidden; now address@hidden>
diff --git a/lisp/mail/mailalias.el b/lisp/mail/mailalias.el
index bee6209..4832916 100644
--- a/lisp/mail/mailalias.el
+++ b/lisp/mail/mailalias.el
@@ -1,6 +1,6 @@
 ;;; mailalias.el --- expand and complete mailing address aliases -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1987, 1995-1997, 2001-2014 Free Software
+;; Copyright (C) 1985, 1987, 1995-1997, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/mailclient.el b/lisp/mail/mailclient.el
index 6228559..31da6ee 100644
--- a/lisp/mail/mailclient.el
+++ b/lisp/mail/mailclient.el
@@ -1,6 +1,6 @@
 ;;; mailclient.el --- mail sending via system's mail client.
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: David Reitter <address@hidden>
 ;; Keywords: mail
diff --git a/lisp/mail/mailheader.el b/lisp/mail/mailheader.el
index daacc2b..7606e26 100644
--- a/lisp/mail/mailheader.el
+++ b/lisp/mail/mailheader.el
@@ -1,6 +1,6 @@
 ;;; mailheader.el --- mail header parsing, merging, formatting
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Erik Naggum <address@hidden>
 ;; Keywords: tools, mail, news
diff --git a/lisp/mail/metamail.el b/lisp/mail/metamail.el
index da42588..c962dcc 100644
--- a/lisp/mail/metamail.el
+++ b/lisp/mail/metamail.el
@@ -1,6 +1,6 @@
 ;;; metamail.el --- Metamail interface for GNU Emacs
 
-;; Copyright (C) 1993, 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <address@hidden>
 ;; Keywords: mail, news, mime, multimedia
diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el
index c2936cb..ddd5414 100644
--- a/lisp/mail/mspools.el
+++ b/lisp/mail/mspools.el
@@ -1,6 +1,6 @@
 ;;; mspools.el --- show mail spools waiting to be read
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Stephen Eglen <address@hidden>
 ;; Maintainer: Stephen Eglen <address@hidden>
diff --git a/lisp/mail/reporter.el b/lisp/mail/reporter.el
index 2d58c59..f8332a6 100644
--- a/lisp/mail/reporter.el
+++ b/lisp/mail/reporter.el
@@ -1,6 +1,6 @@
 ;;; reporter.el --- customizable bug reporting of lisp programs
 
-;; Copyright (C) 1993-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author:          1993-1998 Barry A. Warsaw
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/rfc2368.el b/lisp/mail/rfc2368.el
index 8175436..77fa0f5 100644
--- a/lisp/mail/rfc2368.el
+++ b/lisp/mail/rfc2368.el
@@ -1,6 +1,6 @@
 ;;; rfc2368.el --- support for rfc2368
 
-;; Copyright (C) 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Sen Nagata <address@hidden>
 ;; Keywords: mail
diff --git a/lisp/mail/rfc822.el b/lisp/mail/rfc822.el
index e478f86..e127c44 100644
--- a/lisp/mail/rfc822.el
+++ b/lisp/mail/rfc822.el
@@ -1,6 +1,6 @@
 ;;; rfc822.el --- hairy rfc822 parser for mail and news and suchlike
 
-;; Copyright (C) 1986-1987, 1990, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1986-1987, 1990, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Richard Mlynarik <address@hidden>
diff --git a/lisp/mail/rmail-spam-filter.el b/lisp/mail/rmail-spam-filter.el
index f51668d..ef6b6d0 100644
--- a/lisp/mail/rmail-spam-filter.el
+++ b/lisp/mail/rmail-spam-filter.el
@@ -1,6 +1,6 @@
 ;;; rmail-spam-filter.el --- spam filter for Rmail, the Emacs mail reader
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 ;; Keywords: email, spam, filter, rmail
 ;; Author: Eli Tziperman <eli AT deas.harvard.edu>
 ;; Package: rmail
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 8c43e09..855a4c2 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -1,6 +1,7 @@
 ;;; rmail.el --- main code of "RMAIL" mail reader for Emacs
 
-;; Copyright (C) 1985-1988, 1993-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1988, 1993-1998, 2000-2015 Free Software
+;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: mail
@@ -4659,7 +4660,7 @@ encoded string (and the same mask) will decode the 
string."
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "rmailedit" "rmailedit.el" 
"b155463a02e4aa9256ac21997ea003e9")
+;;;### (autoloads nil "rmailedit" "rmailedit.el" 
"f6da7267316d02c90b9d314ce95b3c22")
 ;;; Generated autoloads from rmailedit.el
 
 (autoload 'rmail-edit-current-message "rmailedit" "\
@@ -4669,7 +4670,7 @@ Edit the contents of this message.
 
 ;;;***
 
-;;;### (autoloads nil "rmailkwd" "rmailkwd.el" 
"d462d15a119ee2a1733de2bc31bf347c")
+;;;### (autoloads nil "rmailkwd" "rmailkwd.el" 
"298dcda7febb6e4ebf0a166101f40650")
 ;;; Generated autoloads from rmailkwd.el
 
 (autoload 'rmail-add-label "rmailkwd" "\
@@ -4712,7 +4713,7 @@ With prefix argument N moves forward N messages with 
these labels.
 
 ;;;***
 
-;;;### (autoloads nil "rmailmm" "rmailmm.el" 
"6446c799d49a6df8519b11bfe2e3cbea")
+;;;### (autoloads nil "rmailmm" "rmailmm.el" 
"43e0b9f680c4d2581640b286bd4b3107")
 ;;; Generated autoloads from rmailmm.el
 
 (autoload 'rmail-mime "rmailmm" "\
@@ -4738,7 +4739,7 @@ The arguments ARG and STATE have no effect in this case.
 
 ;;;***
 
-;;;### (autoloads nil "rmailmsc" "rmailmsc.el" 
"0950b0ad020610737220948bb3f37c17")
+;;;### (autoloads nil "rmailmsc" "rmailmsc.el" 
"c3f0d33739768fc12acc4258ae0da72e")
 ;;; Generated autoloads from rmailmsc.el
 
 (autoload 'set-rmail-inbox-list "rmailmsc" "\
@@ -4752,7 +4753,7 @@ This applies only to the current session.
 
 ;;;***
 
-;;;### (autoloads nil "rmailsort" "rmailsort.el" 
"4106a6e4898795822554ce931f531ab8")
+;;;### (autoloads nil "rmailsort" "rmailsort.el" 
"8f551773021df4fa1a14ec2517e6a4f1")
 ;;; Generated autoloads from rmailsort.el
 
 (autoload 'rmail-sort-by-date "rmailsort" "\
@@ -4809,7 +4810,7 @@ If prefix argument REVERSE is non-nil, sorts in reverse 
order.
 
 ;;;***
 
-;;;### (autoloads nil "rmailsum" "rmailsum.el" 
"ee1fa556cd65d7ef457a97ab560e15da")
+;;;### (autoloads nil "rmailsum" "rmailsum.el" 
"e3943ef45946f10b9b5cab8097d7f271")
 ;;; Generated autoloads from rmailsum.el
 
 (autoload 'rmail-summary "rmailsum" "\
@@ -4856,7 +4857,7 @@ SENDERS is a string of regexps separated by commas.
 
 ;;;***
 
-;;;### (autoloads nil "undigest" "undigest.el" 
"f30d93eb6a006ac64080a1ee8a45a1af")
+;;;### (autoloads nil "undigest" "undigest.el" 
"912d4d3bf762991df5d4d02f42358025")
 ;;; Generated autoloads from undigest.el
 
 (autoload 'undigestify-rmail-message "undigest" "\
diff --git a/lisp/mail/rmailedit.el b/lisp/mail/rmailedit.el
index 3d976d5..15d27a0 100644
--- a/lisp/mail/rmailedit.el
+++ b/lisp/mail/rmailedit.el
@@ -1,6 +1,6 @@
 ;;; rmailedit.el --- "RMAIL edit mode"  Edit the current message
 
-;; Copyright (C) 1985, 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: mail
diff --git a/lisp/mail/rmailkwd.el b/lisp/mail/rmailkwd.el
index 9c72abe..f46a687 100644
--- a/lisp/mail/rmailkwd.el
+++ b/lisp/mail/rmailkwd.el
@@ -1,6 +1,6 @@
 ;;; rmailkwd.el --- part of the "RMAIL" mail reader for Emacs
 
-;; Copyright (C) 1985, 1988, 1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985, 1988, 1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el
index 29f7d44..120d517 100644
--- a/lisp/mail/rmailmm.el
+++ b/lisp/mail/rmailmm.el
@@ -1,6 +1,6 @@
 ;;; rmailmm.el --- MIME decoding and display stuff for RMAIL
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Alexander Pohoyda
 ;;     Alex Schroeder
diff --git a/lisp/mail/rmailmsc.el b/lisp/mail/rmailmsc.el
index 2accd25..aefb35d 100644
--- a/lisp/mail/rmailmsc.el
+++ b/lisp/mail/rmailmsc.el
@@ -1,6 +1,6 @@
 ;;; rmailmsc.el --- miscellaneous support functions for the RMAIL mail reader
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: mail
diff --git a/lisp/mail/rmailout.el b/lisp/mail/rmailout.el
index ff4cf71..a00c66c 100644
--- a/lisp/mail/rmailout.el
+++ b/lisp/mail/rmailout.el
@@ -1,6 +1,6 @@
 ;;; rmailout.el --- "RMAIL" mail reader for Emacs: output message to a file
 
-;; Copyright (C) 1985, 1987, 1993-1994, 2001-2014 Free Software
+;; Copyright (C) 1985, 1987, 1993-1994, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/rmailsort.el b/lisp/mail/rmailsort.el
index 4cc0728..3e01b58 100644
--- a/lisp/mail/rmailsort.el
+++ b/lisp/mail/rmailsort.el
@@ -1,6 +1,6 @@
 ;;; rmailsort.el --- Rmail: sort messages
 
-;; Copyright (C) 1990, 1993-1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1990, 1993-1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Masanobu UMEDA <address@hidden>
diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el
index af08d0f..7ac147b 100644
--- a/lisp/mail/rmailsum.el
+++ b/lisp/mail/rmailsum.el
@@ -1,6 +1,6 @@
 ;;; rmailsum.el --- make summary buffers for the mail reader
 
-;; Copyright (C) 1985, 1993-1996, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1985, 1993-1996, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el
index 76764ce..7e9bd5b 100644
--- a/lisp/mail/sendmail.el
+++ b/lisp/mail/sendmail.el
@@ -1,6 +1,6 @@
 ;;; sendmail.el --- mail sending commands for Emacs
 
-;; Copyright (C) 1985-1986, 1992-1996, 1998, 2000-2014 Free Software
+;; Copyright (C) 1985-1986, 1992-1996, 1998, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index 3440741..20de353 100644
--- a/lisp/mail/smtpmail.el
+++ b/lisp/mail/smtpmail.el
@@ -1,6 +1,6 @@
 ;;; smtpmail.el --- simple SMTP protocol (RFC 821) for sending mail
 
-;; Copyright (C) 1995-1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Tomoji Kagatani <address@hidden>
 ;; Maintainer: Simon Josefsson <address@hidden>
@@ -687,6 +687,7 @@ Returns an error if the server cannot be contacted."
                   "smtpmail" process-buffer host port
                   :type smtpmail-stream-type
                   :return-list t
+                  :warn-unless-encrypted ask-for-password
                   :capability-command (format "EHLO %s\r\n" (smtpmail-fqdn))
                   :end-of-command "^[0-9]+ .*\r\n"
                   :success "^2.*\n"
diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el
index 988e6c9..cf3aac1 100644
--- a/lisp/mail/supercite.el
+++ b/lisp/mail/supercite.el
@@ -1,6 +1,6 @@
 ;;; supercite.el --- minor mode for citing mail and news replies
 
-;; Copyright (C) 1993, 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: 1993 Barry A. Warsaw <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/uce.el b/lisp/mail/uce.el
index a6e2513..74939d1 100644
--- a/lisp/mail/uce.el
+++ b/lisp/mail/uce.el
@@ -1,6 +1,6 @@
 ;;; uce.el --- facilitate reply to unsolicited commercial email
 
-;; Copyright (C) 1996, 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: stanislav shalunov <address@hidden>
 ;; Created: 10 Dec 1996
diff --git a/lisp/mail/undigest.el b/lisp/mail/undigest.el
index 06d1077..6dd2606 100644
--- a/lisp/mail/undigest.el
+++ b/lisp/mail/undigest.el
@@ -1,6 +1,6 @@
 ;;; undigest.el --- digest-cracking support for the RMAIL mail reader
 
-;; Copyright (C) 1985-1986, 1994, 1996, 2001-2014 Free Software
+;; Copyright (C) 1985-1986, 1994, 1996, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/mail/unrmail.el b/lisp/mail/unrmail.el
index 49103e5..321baa5 100644
--- a/lisp/mail/unrmail.el
+++ b/lisp/mail/unrmail.el
@@ -1,6 +1,6 @@
 ;;; unrmail.el --- convert Rmail Babyl files to mbox files
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: mail
diff --git a/lisp/mail/uudecode.el b/lisp/mail/uudecode.el
index 3d64734..419aefb 100644
--- a/lisp/mail/uudecode.el
+++ b/lisp/mail/uudecode.el
@@ -1,6 +1,6 @@
 ;;; uudecode.el -- elisp native uudecode
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <address@hidden>
 ;; Keywords: uudecode news
diff --git a/lisp/makefile.w32-in b/lisp/makefile.w32-in
index 08a4219..8f41041 100644
--- a/lisp/makefile.w32-in
+++ b/lisp/makefile.w32-in
@@ -1,5 +1,5 @@
 # -*- Makefile -*- for GNU Emacs on the Microsoft Windows API.
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/lisp/makesum.el b/lisp/makesum.el
index a52f18c..f2ac1e2 100644
--- a/lisp/makesum.el
+++ b/lisp/makesum.el
@@ -1,6 +1,6 @@
 ;;; makesum.el --- generate key binding summary for Emacs
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: help
diff --git a/lisp/man.el b/lisp/man.el
index a61524b..d9124c2 100644
--- a/lisp/man.el
+++ b/lisp/man.el
@@ -1,6 +1,7 @@
 ;;; man.el --- browse UNIX manual pages  -*- coding: utf-8 -*-
 
-;; Copyright (C) 1993-1994, 1996-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 1996-1997, 2001-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Barry A. Warsaw <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/master.el b/lisp/master.el
index c4f4680..b309cc4 100644
--- a/lisp/master.el
+++ b/lisp/master.el
@@ -1,6 +1,6 @@
 ;;; master.el --- make a buffer the master over another buffer
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: Alex Schroeder <address@hidden>
diff --git a/lisp/mb-depth.el b/lisp/mb-depth.el
index 7dbab4d..be11b2d 100644
--- a/lisp/mb-depth.el
+++ b/lisp/mb-depth.el
@@ -1,6 +1,6 @@
 ;;; mb-depth.el --- Indicate minibuffer-depth in prompt
 ;;
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <address@hidden>
 ;; Keywords: convenience
diff --git a/lisp/md4.el b/lisp/md4.el
index 26a5cbc..372d33d 100644
--- a/lisp/md4.el
+++ b/lisp/md4.el
@@ -1,6 +1,6 @@
 ;;; md4.el --- MD4 Message Digest Algorithm.
 
-;; Copyright (C) 2001, 2004, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Taro Kawagishi <address@hidden>
 ;; Keywords: MD4
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 5ae5da9..cd1a4d0 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -1,6 +1,6 @@
 ;;; menu-bar.el --- define a default menu bar
 
-;; Copyright (C) 1993-1995, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Richard M. Stallman
 ;; Maintainer: address@hidden
@@ -373,35 +373,31 @@
 
     (bindings--define-key menu [set-tags-name]
       '(menu-item "Set Tags File Name..." visit-tags-table
-                  :help "Tell Tags commands which tag table file to use"))
+                  :visible (menu-bar-goto-uses-etags-p)
+                  :help "Tell navigation commands which tag table file to 
use"))
 
     (bindings--define-key menu [separator-tag-file]
-      menu-bar-separator)
+      '(menu-item "--" nil :visible (menu-bar-goto-uses-etags-p)))
+
+    (bindings--define-key menu [xref-pop]
+      '(menu-item "Back" xref-pop-marker-stack
+                  :visible (and (featurep 'xref)
+                                (not (xref-marker-stack-empty-p)))
+                  :help "Back to the position of the last search"))
 
-    (bindings--define-key menu [apropos-tags]
-      '(menu-item "Tags Apropos..." tags-apropos
+    (bindings--define-key menu [xref-apropos]
+      '(menu-item "Find Apropos..." xref-find-apropos
                   :help "Find function/variables whose names match regexp"))
-    (bindings--define-key menu [next-tag-otherw]
-      '(menu-item "Next Tag in Other Window"
-                  menu-bar-next-tag-other-window
-                  :enable (and (boundp 'tags-location-ring)
-                               (not (ring-empty-p tags-location-ring)))
-                  :help "Find next function/variable matching last tag name in 
another window"))
-
-    (bindings--define-key menu [next-tag]
-      '(menu-item "Find Next Tag"
-                  menu-bar-next-tag
-                  :enable (and (boundp 'tags-location-ring)
-                               (not (ring-empty-p tags-location-ring)))
-                  :help "Find next function/variable matching last tag name"))
-    (bindings--define-key menu [find-tag-otherw]
-      '(menu-item "Find Tag in Other Window..." find-tag-other-window
+
+    (bindings--define-key menu [xref-find-otherw]
+      '(menu-item "Find Definition in Other Window..."
+                  xref-find-definitions-other-window
                   :help "Find function/variable definition in another window"))
-    (bindings--define-key menu [find-tag]
-      '(menu-item "Find Tag..." find-tag
+    (bindings--define-key menu [xref-find-def]
+      '(menu-item "Find Definition..." xref-find-definitions
                   :help "Find definition of function or variable"))
 
-    (bindings--define-key menu [separator-tags]
+    (bindings--define-key menu [separator-xref]
       menu-bar-separator)
 
     (bindings--define-key menu [end-of-buf]
@@ -416,6 +412,9 @@
                   :help "Read a line number and go to that line"))
     menu))
 
+(defun menu-bar-goto-uses-etags-p ()
+  (or (not (boundp 'xref-find-function))
+      (eq xref-find-function 'etags-xref-find)))
 
 (defvar yank-menu (cons (purecopy "Select Yank") nil))
 (fset 'yank-menu (cons 'keymap yank-menu))
@@ -514,16 +513,6 @@
 
     menu))
 
-(defun menu-bar-next-tag-other-window ()
-  "Find the next definition of the tag already specified."
-  (interactive)
-  (find-tag-other-window nil t))
-
-(defun menu-bar-next-tag ()
-  "Find the next definition of the tag already specified."
-  (interactive)
-  (find-tag nil t))
-
 (define-obsolete-function-alias
   'menu-bar-kill-ring-save 'kill-ring-save "24.1")
 
@@ -1938,6 +1927,19 @@ Buffers menu is regenerated."
   "Function to select the buffer chosen from the `Buffers' menu-bar menu.
 It must accept a buffer as its only required argument.")
 
+(defun menu-bar-buffer-vector (alist)
+  ;; turn ((name . buffer) ...) into a menu
+  (let ((buffers-vec (make-vector (length alist) nil))
+        (i (length alist)))
+    (dolist (pair alist)
+      (setq i (1- i))
+      (aset buffers-vec i
+            (cons (car pair)
+                  `(lambda ()
+                     (interactive)
+                     (funcall menu-bar-select-buffer-function ,(cdr pair))))))
+    buffers-vec))
+
 (defun menu-bar-update-buffers (&optional force)
   ;; If user discards the Buffers item, play along.
   (and (lookup-key (current-global-map) [menu-bar buffer])
@@ -1973,17 +1975,7 @@ It must accept a buffer as its only required argument.")
                                      name)
                                     ))
                              alist))))
-                ;; Now make the actual list of items.
-                 (let ((buffers-vec (make-vector (length alist) nil))
-                       (i (length alist)))
-                   (dolist (pair alist)
-                     (setq i (1- i))
-                     (aset buffers-vec i
-                          (cons (car pair)
-                                 `(lambda ()
-                                    (interactive)
-                                    (funcall menu-bar-select-buffer-function 
,(cdr pair))))))
-                   (list buffers-vec))))
+                (list (menu-bar-buffer-vector alist))))
 
         ;; Make a Frames menu if we have more than one frame.
         (when (cdr frames)
@@ -2303,13 +2295,33 @@ If FRAME is nil or not given, use the selected frame."
                       global-map (vector 'menu-bar menu))
                     (lookup-key-ignore-too-long
                       (current-local-map) (vector 'menu-bar menu))
-                    (cdar (minor-mode-key-binding (vector 'menu-bar menu))))
+                    (cdar (minor-mode-key-binding (vector 'menu-bar menu)))
+                     (mouse-menu-bar-map))
                    (posn-at-x-y x 0 nil t) nil t)))
      (t (with-selected-frame (or frame (selected-frame))
           (tmm-menubar))))))
 
 (global-set-key [f10] 'menu-bar-open)
 
+(defun buffer-menu-open ()
+  "Start key navigation of the buffer menu.
+This is the keyboard interface to \\[mouse-buffer-menu]."
+  (interactive)
+  (popup-menu (mouse-buffer-menu-keymap)
+              (posn-at-x-y 0 0 nil t)))
+
+(global-set-key [C-f10] 'buffer-menu-open)
+
+(defun mouse-buffer-menu-keymap ()
+  (let* ((menu (mouse-buffer-menu-map))
+         (km (make-sparse-keymap (pop menu))))
+    (dolist (item (nreverse menu))
+      (let* ((name (pop item)))
+        (define-key km (vector (intern name))
+          (list name 'keymap name
+                (menu-bar-buffer-vector item)))))
+    km))
+
 (defvar tty-menu-navigation-map
   (let ((map (make-sparse-keymap)))
     ;; The next line is disabled because it breaks interpretation of
diff --git a/lisp/mh-e/.gitignore b/lisp/mh-e/.gitignore
deleted file mode 100644
index 2e5b174..0000000
--- a/lisp/mh-e/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-mh-autoloads.el
-mh-cus-load.el
-mh-loaddefs.el
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
index 242c8f0..8b547df 100644
--- a/lisp/mh-e/ChangeLog
+++ b/lisp/mh-e/ChangeLog
@@ -2,7 +2,7 @@
 
        * Merge in all changes up to 24.4 release.
 
-2014-09-30  Bill Wohler         <address@hidden>
+2014-09-30  Bill Wohler  <address@hidden>
 
        Release MH-E version 8.6.
 
@@ -3672,7 +3672,7 @@
        * ChangeLog.1: New file.  Contains old ChangeLog.
 
 
-       Copyright (C) 2005-2014 Free Software Foundation, Inc.
+       Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/mh-e/ChangeLog.1 b/lisp/mh-e/ChangeLog.1
index 926c488..2f65eb1 100644
--- a/lisp/mh-e/ChangeLog.1
+++ b/lisp/mh-e/ChangeLog.1
@@ -11419,7 +11419,7 @@
        (dist): Leave release in current directory.
 
 
-  Copyright (C) 2003-2014 Free Software Foundation, Inc.
+  Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/mh-e/mh-acros.el b/lisp/mh-e/mh-acros.el
index 21526c8..0409624 100644
--- a/lisp/mh-e/mh-acros.el
+++ b/lisp/mh-e/mh-acros.el
@@ -1,6 +1,6 @@
 ;;; mh-acros.el --- macros used in MH-E
 
-;; Copyright (C) 2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-alias.el b/lisp/mh-e/mh-alias.el
index a34a840..de0038a 100644
--- a/lisp/mh-e/mh-alias.el
+++ b/lisp/mh-e/mh-alias.el
@@ -1,6 +1,6 @@
 ;;; mh-alias.el --- MH-E mail alias completion and expansion
 
-;; Copyright (C) 1994-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-buffers.el b/lisp/mh-e/mh-buffers.el
index 8fb0dd2..2963dae 100644
--- a/lisp/mh-e/mh-buffers.el
+++ b/lisp/mh-e/mh-buffers.el
@@ -1,6 +1,6 @@
 ;;; mh-buffers.el --- MH-E buffer constants and utilities
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index 35572c1..5875b41 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -1,6 +1,6 @@
 ;;; mh-comp.el --- MH-E functions for composing and sending messages
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-compat.el b/lisp/mh-e/mh-compat.el
index db46be7..82c7a4d 100644
--- a/lisp/mh-e/mh-compat.el
+++ b/lisp/mh-e/mh-compat.el
@@ -1,6 +1,6 @@
 ;;; mh-compat.el --- make MH-E compatible with various versions of Emacs
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index 06f48e9..f11511a 100644
--- a/lisp/mh-e/mh-e.el
+++ b/lisp/mh-e/mh-e.el
@@ -1,7 +1,7 @@
 ;;; mh-e.el --- GNU Emacs interface to the MH mail system
 
-;; Copyright (C) 1985-1988, 1990, 1992-1995, 1997, 1999-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985-1988, 1990, 1992-1995, 1997, 1999-2015 Free
+;; Software Foundation, Inc.
 
 ;; Author: Bill Wohler <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el
index acb4d7d..ae5e2bf 100644
--- a/lisp/mh-e/mh-folder.el
+++ b/lisp/mh-e/mh-folder.el
@@ -1,6 +1,6 @@
 ;;; mh-folder.el --- MH-Folder mode
 
-;; Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-funcs.el b/lisp/mh-e/mh-funcs.el
index d1cc879..f710b8c 100644
--- a/lisp/mh-e/mh-funcs.el
+++ b/lisp/mh-e/mh-funcs.el
@@ -1,6 +1,6 @@
 ;;; mh-funcs.el --- MH-E functions not everyone will use right away
 
-;; Copyright (C) 1993, 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-gnus.el b/lisp/mh-e/mh-gnus.el
index 8fcff25..b54355e 100644
--- a/lisp/mh-e/mh-gnus.el
+++ b/lisp/mh-e/mh-gnus.el
@@ -1,6 +1,6 @@
 ;;; mh-gnus.el --- make MH-E compatible with various versions of Gnus
 
-;; Copyright (C) 2003-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-identity.el b/lisp/mh-e/mh-identity.el
index 2df9ad1..cdd92fe 100644
--- a/lisp/mh-e/mh-identity.el
+++ b/lisp/mh-e/mh-identity.el
@@ -1,6 +1,6 @@
 ;;; mh-identity.el --- multiple identify support for MH-E
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-inc.el b/lisp/mh-e/mh-inc.el
index dc5a6e7..fc0bbf1 100644
--- a/lisp/mh-e/mh-inc.el
+++ b/lisp/mh-e/mh-inc.el
@@ -1,6 +1,6 @@
 ;;; mh-inc.el --- MH-E "inc" and separate mail spool handling
 
-;; Copyright (C) 2003-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-junk.el b/lisp/mh-e/mh-junk.el
index dfa3b37..4a6693c 100644
--- a/lisp/mh-e/mh-junk.el
+++ b/lisp/mh-e/mh-junk.el
@@ -1,6 +1,6 @@
 ;;; mh-junk.el --- MH-E interface to anti-spam measures
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <address@hidden>,
 ;;         Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-letter.el b/lisp/mh-e/mh-letter.el
index ef8fa7e..62e9b4a 100644
--- a/lisp/mh-e/mh-letter.el
+++ b/lisp/mh-e/mh-letter.el
@@ -1,6 +1,6 @@
 ;;; mh-letter.el --- MH-Letter mode
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-limit.el b/lisp/mh-e/mh-limit.el
index 658a3b9..daa9f8e 100644
--- a/lisp/mh-e/mh-limit.el
+++ b/lisp/mh-e/mh-limit.el
@@ -1,6 +1,6 @@
 ;;; mh-limit.el --- MH-E display limits
 
-;; Copyright (C) 2001-2003, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2003, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index 2272b89..31685e9 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -1,6 +1,6 @@
 ;;; mh-mime.el --- MH-E MIME support
 
-;; Copyright (C) 1993, 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-print.el b/lisp/mh-e/mh-print.el
index e2e3b70..d1233f0 100644
--- a/lisp/mh-e/mh-print.el
+++ b/lisp/mh-e/mh-print.el
@@ -1,6 +1,6 @@
 ;;; mh-print.el --- MH-E printing support
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Jeffrey C Honig <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-scan.el b/lisp/mh-e/mh-scan.el
index d991374..4e15ea8 100644
--- a/lisp/mh-e/mh-scan.el
+++ b/lisp/mh-e/mh-scan.el
@@ -1,6 +1,6 @@
 ;;; mh-scan.el --- MH-E scan line constants and utilities
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-search.el b/lisp/mh-e/mh-search.el
index 5dfd5ca..f30e6a6 100644
--- a/lisp/mh-e/mh-search.el
+++ b/lisp/mh-e/mh-search.el
@@ -1,6 +1,6 @@
 ;;; mh-search  ---  MH-Search mode
 
-;; Copyright (C) 1993, 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Indexed search by Satyaki Das <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-seq.el b/lisp/mh-e/mh-seq.el
index d0cd57d..8fd477c 100644
--- a/lisp/mh-e/mh-seq.el
+++ b/lisp/mh-e/mh-seq.el
@@ -1,6 +1,6 @@
 ;;; mh-seq.el --- MH-E sequences support
 
-;; Copyright (C) 1993, 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-show.el b/lisp/mh-e/mh-show.el
index afe2863..6d58670 100644
--- a/lisp/mh-e/mh-show.el
+++ b/lisp/mh-e/mh-show.el
@@ -1,6 +1,6 @@
 ;;; mh-show.el --- MH-Show mode
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-speed.el b/lisp/mh-e/mh-speed.el
index ad5c240..a260d74 100644
--- a/lisp/mh-e/mh-speed.el
+++ b/lisp/mh-e/mh-speed.el
@@ -1,6 +1,6 @@
 ;;; mh-speed.el --- MH-E speedbar support
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-thread.el b/lisp/mh-e/mh-thread.el
index 3fa7c2c..201b897 100644
--- a/lisp/mh-e/mh-thread.el
+++ b/lisp/mh-e/mh-thread.el
@@ -1,6 +1,6 @@
 ;;; mh-thread.el --- MH-E threading support
 
-;; Copyright (C) 2002-2004, 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-tool-bar.el b/lisp/mh-e/mh-tool-bar.el
index 610df3a..7200576 100644
--- a/lisp/mh-e/mh-tool-bar.el
+++ b/lisp/mh-e/mh-tool-bar.el
@@ -1,6 +1,6 @@
 ;;; mh-tool-bar.el --- MH-E tool bar support
 
-;; Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index 375efac..a9e9847 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -1,6 +1,6 @@
 ;;; mh-utils.el --- MH-E general utilities
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <address@hidden>
diff --git a/lisp/mh-e/mh-xface.el b/lisp/mh-e/mh-xface.el
index 20a61a5..b7b7feb 100644
--- a/lisp/mh-e/mh-xface.el
+++ b/lisp/mh-e/mh-xface.el
@@ -1,6 +1,6 @@
 ;;; mh-xface.el --- MH-E X-Face and Face header field display
 
-;; Copyright (C) 2002-2003, 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <address@hidden>
 ;; Maintainer: Bill Wohler <address@hidden>
diff --git a/lisp/midnight.el b/lisp/midnight.el
index 73300e5..dbf0c02 100644
--- a/lisp/midnight.el
+++ b/lisp/midnight.el
@@ -1,6 +1,6 @@
 ;;; midnight.el --- run something every midnight, e.g., kill old buffers
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Sam Steingold <address@hidden>
 ;; Maintainer: Sam Steingold <address@hidden>
diff --git a/lisp/minibuf-eldef.el b/lisp/minibuf-eldef.el
index 8dff6f4..14697ea 100644
--- a/lisp/minibuf-eldef.el
+++ b/lisp/minibuf-eldef.el
@@ -1,6 +1,6 @@
 ;;; minibuf-eldef.el --- Only show defaults in prompts when applicable  -*- 
lexical-binding: t -*-
 ;;
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <address@hidden>
 ;; Keywords: convenience
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index c9ce381..538bd97 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -1,6 +1,6 @@
 ;;; minibuffer.el --- Minibuffer completion functions -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Package: emacs
@@ -169,13 +169,15 @@ ACTION can be one of nil, t or `lambda'."
       (t 'test-completion))
      string table pred))))
 
-(defun completion-table-dynamic (fun)
+(defun completion-table-dynamic (fun &optional switch-buffer)
   "Use function FUN as a dynamic completion table.
 FUN is called with one argument, the string for which completion is required,
 and it should return an alist containing all the intended possible completions.
 This alist may be a full list of possible completions so that FUN can ignore
-the value of its argument.  If completion is performed in the minibuffer,
-FUN will be called in the buffer from which the minibuffer was entered.
+the value of its argument.
+If SWITCH-BUFFER is non-nil and completion is performed in the
+minibuffer, FUN will be called in the buffer from which the minibuffer
+was entered.
 
 The result of the `completion-table-dynamic' form is a function
 that can be used as the COLLECTION argument to `try-completion' and
@@ -187,9 +189,10 @@ See also the related function 
`completion-table-with-cache'."
         ;; `fun' is not supposed to return another function but a plain old
         ;; completion table, whose boundaries are always trivial.
         nil
-      (with-current-buffer (let ((win (minibuffer-selected-window)))
-                             (if (window-live-p win) (window-buffer win)
-                               (current-buffer)))
+      (with-current-buffer (if (not switch-buffer) (current-buffer)
+                             (let ((win (minibuffer-selected-window)))
+                               (if (window-live-p win) (window-buffer win)
+                                 (current-buffer))))
         (complete-with-action action (funcall fun string) string pred)))))
 
 (defun completion-table-with-cache (fun &optional ignore-case)
@@ -228,7 +231,8 @@ You should give VAR a non-nil `risky-local-variable' 
property."
       (lambda (,str)
         (when (functionp ,var)
           (setq ,var (funcall #',fun)))
-        ,var))))
+        ,var)
+      'do-switch-buffer)))
 
 (defun completion-table-case-fold (table &optional dont-fold)
   "Return new completion TABLE that is case insensitive.
@@ -822,16 +826,27 @@ styles for specific categories, such as files, buffers, 
etc."
   :type completion--styles-type
   :version "23.1")
 
-(defcustom completion-category-overrides
-  '((buffer (styles . (basic substring))))
-  "List of `completion-styles' overrides for specific categories.
+(defvar completion-category-defaults
+  '((buffer (styles . (basic substring)))
+    (unicode-name (styles . (basic substring))))
+  "Default settings for specific completion categories.
+Each entry has the shape (CATEGORY . ALIST) where ALIST is
+an association list that can specify properties such as:
+- `styles': the list of `completion-styles' to use for that category.
+- `cycle': the `completion-cycle-threshold' to use for that category.
+Categories are symbols such as `buffer' and `file', used when
+completing buffer and file names, respectively.")
+
+(defcustom completion-category-overrides nil
+  "List of category-specific user overrides for completion styles.
 Each override has the shape (CATEGORY . ALIST) where ALIST is
 an association list that can specify properties such as:
 - `styles': the list of `completion-styles' to use for that category.
 - `cycle': the `completion-cycle-threshold' to use for that category.
 Categories are symbols such as `buffer' and `file', used when
-completing buffer and file names, respectively."
-  :version "24.1"
+completing buffer and file names, respectively.
+This overrides the defaults specified in `completion-category-defaults'."
+  :version "25.1"
   :type `(alist :key-type (choice :tag "Category"
                                  (const buffer)
                                   (const file)
@@ -847,9 +862,13 @@ completing buffer and file names, respectively."
                 (const :tag "Select one value from the menu." cycle)
                  ,completion--cycling-threshold-type))))
 
+(defun completion--category-override (category tag)
+  (or (assq tag (cdr (assq category completion-category-overrides)))
+      (assq tag (cdr (assq category completion-category-defaults)))))
+
 (defun completion--styles (metadata)
   (let* ((cat (completion-metadata-get metadata 'category))
-         (over (assq 'styles (cdr (assq cat completion-category-overrides)))))
+         (over (completion--category-override cat 'styles)))
     (if over
         (delete-dups (append (cdr over) (copy-sequence completion-styles)))
        completion-styles)))
@@ -963,7 +982,7 @@ completion candidates than this number."
 
 (defun completion--cycle-threshold (metadata)
   (let* ((cat (completion-metadata-get metadata 'category))
-         (over (assq 'cycle (cdr (assq cat completion-category-overrides)))))
+         (over (completion--category-override cat 'cycle)))
     (if over (cdr over) completion-cycle-threshold)))
 
 (defvar-local completion-all-sorted-completions nil)
@@ -1811,14 +1830,14 @@ variables.")
              ;; Use `display-buffer-below-selected' for inline completions,
              ;; but not in the minibuffer (e.g. in `eval-expression')
              ;; for which `display-buffer-at-bottom' is used.
-             ;; Compare `this-command' with `completion-at-point'
-             ;; since `completion--in-region-1' sets `this-command'
-             ;; to this value for region completion commands.
-             ,(if (and (eq this-command 'completion-at-point)
-                       (not (minibuffer-selected-window)))
-                  'display-buffer-below-selected
-                'display-buffer-at-bottom))
-            (window-height . fit-window-to-buffer))
+             ,(if (eq (selected-window) (minibuffer-window))
+                  'display-buffer-at-bottom
+                'display-buffer-below-selected))
+           ,(if temp-buffer-resize-mode
+                '(window-height . resize-temp-buffer-window)
+              '(window-height . shrink-window-if-larger-than-buffer))
+           ,(when temp-buffer-resize-mode
+              '(preserve-size . (nil . t))))
           nil
           ;; Remove the base-size tail because `sort' requires a properly
           ;; nil-terminated list.
diff --git a/lisp/misc.el b/lisp/misc.el
index f9a837e..91ddd42 100644
--- a/lisp/misc.el
+++ b/lisp/misc.el
@@ -1,6 +1,6 @@
 ;;; misc.el --- some nonstandard editing and utility commands for Emacs
 
-;; Copyright (C) 1989, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: convenience
diff --git a/lisp/misearch.el b/lisp/misearch.el
index 4b003b9..dcc8195 100644
--- a/lisp/misearch.el
+++ b/lisp/misearch.el
@@ -1,6 +1,6 @@
 ;;; misearch.el --- isearch extensions for multi-buffer search
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <address@hidden>
 ;; Keywords: matching
@@ -377,6 +377,25 @@ whose file names match the specified wildcard."
     (goto-char (if isearch-forward (point-min) (point-max)))
     (isearch-forward-regexp nil t)))
 
+(defun multi-isearch-unload-function ()
+  "Remove autoloaded variables from `unload-function-defs-list'.
+Also prevent the feature from being reloaded via `isearch-mode-hook'."
+  (remove-hook 'isearch-mode-hook 'multi-isearch-setup)
+  (let ((defs (list (car unload-function-defs-list)))
+       (auto '(multi-isearch-next-buffer-function
+               multi-isearch-next-buffer-current-function
+               multi-isearch-current-buffer
+               multi-isearch-buffer-list multi-isearch-file-list)))
+    (dolist (def (cdr unload-function-defs-list))
+      (unless (and (symbolp def)
+                  (memq def auto))
+       (push def defs)))
+    (setq unload-function-defs-list (nreverse defs))
+    ;; .
+    nil))
+
+(defalias 'misearch-unload-function 'multi-isearch-unload-function)
+
 
 (provide 'multi-isearch)
 (provide 'misearch)
diff --git a/lisp/mouse-copy.el b/lisp/mouse-copy.el
index ddfb879..609713c 100644
--- a/lisp/mouse-copy.el
+++ b/lisp/mouse-copy.el
@@ -1,6 +1,6 @@
 ;;; mouse-copy.el --- one-click text copy and move
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: John Heidemann <address@hidden>
 ;; Keywords: mouse
diff --git a/lisp/mouse-drag.el b/lisp/mouse-drag.el
index 082c923..88838ed 100644
--- a/lisp/mouse-drag.el
+++ b/lisp/mouse-drag.el
@@ -1,6 +1,6 @@
 ;;; mouse-drag.el --- use mouse-2 to do a new style of scrolling
 
-;; Copyright (C) 1996-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: John Heidemann <address@hidden>
 ;; Keywords: mouse
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 800db63..e78eca4 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -1,6 +1,6 @@
 ;;; mouse.el --- window system-independent mouse support  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1993-1995, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1999-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: hardware, mouse
@@ -1516,8 +1516,17 @@ This switches buffers in the window that you clicked on,
 and selects that window."
   (interactive "e")
   (mouse-minibuffer-check event)
-  (let ((buffers (buffer-list))  alist menu split-by-major-mode sum-of-squares)
-    ;; Make an alist of elements that look like (MENU-ITEM . BUFFER).
+  (let ((buf (x-popup-menu event (mouse-buffer-menu-map)))
+        (window (posn-window (event-start event))))
+    (when buf
+      (select-window
+       (if (framep window) (frame-selected-window window)
+         window))
+      (switch-to-buffer buf))))
+
+(defun mouse-buffer-menu-map ()
+  ;; Make an alist of elements that look like (MENU-ITEM . BUFFER).
+  (let ((buffers (buffer-list)) split-by-major-mode sum-of-squares)
     (dolist (buf buffers)
       ;; Divide all buffers into buckets for various major modes.
       ;; Each bucket looks like (MODE NAMESTRING BUFFERS...).
@@ -1581,18 +1590,10 @@ and selects that window."
                     (setq subdivided-menus
                           (cons (cons "Others" others-list)
                                 subdivided-menus)))))
-         (setq menu (cons "Buffer Menu" (nreverse subdivided-menus))))
-      (progn
-       (setq alist (mouse-buffer-menu-alist buffers))
-       (setq menu (cons "Buffer Menu"
-                        (mouse-buffer-menu-split "Select Buffer" alist)))))
-    (let ((buf (x-popup-menu event menu))
-         (window (posn-window (event-start event))))
-      (when buf
-       (select-window
-        (if (framep window) (frame-selected-window window)
-          window))
-       (switch-to-buffer buf)))))
+          (cons "Buffer Menu" (nreverse subdivided-menus)))
+      (cons "Buffer Menu"
+            (mouse-buffer-menu-split "Select Buffer"
+                                     (mouse-buffer-menu-alist buffers))))))
 
 (defun mouse-buffer-menu-alist (buffers)
   (let (tail
diff --git a/lisp/mpc.el b/lisp/mpc.el
index 3dac7f9..76c08db 100644
--- a/lisp/mpc.el
+++ b/lisp/mpc.el
@@ -1,6 +1,6 @@
 ;;; mpc.el --- A client for the Music Player Daemon   -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: multimedia
diff --git a/lisp/msb.el b/lisp/msb.el
index 474d76b..149d193 100644
--- a/lisp/msb.el
+++ b/lisp/msb.el
@@ -1,6 +1,6 @@
 ;;; msb.el --- customizable buffer-selection with multiple menus
 
-;; Copyright (C) 1993-1995, 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Lindberg <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index 3824891..4b69ec0 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -1,6 +1,6 @@
 ;;; mwheel.el --- Wheel mouse support
 
-;; Copyright (C) 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2015 Free Software Foundation, Inc.
 ;; Maintainer: William M. Perry <address@hidden>
 ;; Keywords: mouse
 ;; Package: emacs
diff --git a/lisp/net/.gitignore b/lisp/net/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/lisp/net/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index d7632ed..52153ad 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -1,6 +1,6 @@
 ;;; ange-ftp.el --- transparent FTP support for GNU Emacs
 
-;; Copyright (C) 1989-1996, 1998, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1989-1996, 1998, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Andy Norman (address@hidden)
@@ -1536,8 +1536,8 @@ then kill the related FTP process."
       (signal 'file-error
              (list "Opening directory"
                    (if (file-exists-p directory)
-                       "not a directory"
-                     "no such file or directory")
+                       "Not a directory"
+                     "No such file or directory")
                    directory))))
 
 ;;;; ------------------------------------------------------------
@@ -2831,16 +2831,24 @@ match subdirectories as well.")
                      files ange-ftp-files-hashtable)))
 
 (defun ange-ftp-switches-ok (switches)
-  "Return SWITCHES (a string) if suitable for our use."
+  "Return SWITCHES (a string) if suitable for use with ls over ftp."
   (and (stringp switches)
-       ;; We allow the A switch, which lists all files except "." and
-       ;; "..".  This is OK because we manually insert these entries
-       ;; in the hash table.
+       ;; We allow the --almost-all switch, which lists all files
+       ;; except "." and "..".  This is OK because we manually
+       ;; insert these entries in the hash table.
        (string-match
-       "--\\(almost-\\)?all\\>\\|\\(\\`\\| \\)-[[:alpha:]]*[aA]" switches)
+        "--\\(almost-\\)?all\\>\\|\\(\\`\\| \\)-[[:alpha:]]*[aA]"
+        switches)
+       ;; Disallow other long flags except --(almost-)all.
+       (not (string-match "\\(\\`\\| \\)--\\w+"
+                          (replace-regexp-in-string
+                           "--\\(almost-\\)?all\\>" ""
+                           switches)))
+       ;; Must include 'l'.
        (string-match "\\(\\`\\| \\)-[[:alpha:]]*l" switches)
+       ;; Disallow recursive flag.
        (not (string-match
-            "--recursive\\>\\|\\(\\`\\| \\)-[[:alpha:]]*R" switches))
+             "\\(\\`\\| \\)-[[:alpha:]]*R" switches))
        switches))
 
 (defun ange-ftp-get-files (directory &optional no-error)
@@ -3656,7 +3664,7 @@ so return the size on the remote host exactly. See RFC 
3659."
 
   (or (file-exists-p filename)
       (signal 'file-error
-             (list "Copy file" "no such file or directory" filename)))
+             (list "Copy file" "No such file or directory" filename)))
 
   ;; canonicalize newname if a directory.
   (if (file-directory-p newname)
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index 09d8479..42fb954 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -1,6 +1,6 @@
 ;;; browse-url.el --- pass a URL to a WWW browser
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Denis Howe <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el
index 582f54f..bbce300 100644
--- a/lisp/net/dbus.el
+++ b/lisp/net/dbus.el
@@ -1,6 +1,6 @@
 ;;; dbus.el --- Elisp bindings for D-Bus.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, hardware
diff --git a/lisp/net/dig.el b/lisp/net/dig.el
index e1441fe..234139f 100644
--- a/lisp/net/dig.el
+++ b/lisp/net/dig.el
@@ -1,6 +1,6 @@
 ;;; dig.el --- Domain Name System dig interface
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Keywords: DNS BIND dig comm
diff --git a/lisp/net/dns.el b/lisp/net/dns.el
index ea1c805..ba6523f 100644
--- a/lisp/net/dns.el
+++ b/lisp/net/dns.el
@@ -1,6 +1,6 @@
 ;;; dns.el --- Domain Name Service lookups
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: network comm
diff --git a/lisp/net/eudc-bob.el b/lisp/net/eudc-bob.el
index c495e94..f01f671 100644
--- a/lisp/net/eudc-bob.el
+++ b/lisp/net/eudc-bob.el
@@ -1,9 +1,10 @@
 ;;; eudc-bob.el --- Binary Objects Support for EUDC -*- coding: utf-8 -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <address@hidden>
-;; Maintainer: Pavel Janík <address@hidden>
+;;         Pavel Janík <address@hidden>
+;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: comm
 ;; Package: eudc
 
diff --git a/lisp/net/eudc-export.el b/lisp/net/eudc-export.el
index 9ce623b..0e54d84 100644
--- a/lisp/net/eudc-export.el
+++ b/lisp/net/eudc-export.el
@@ -1,9 +1,10 @@
 ;;; eudc-export.el --- functions to export EUDC query results -*- coding: 
utf-8 -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <address@hidden>
-;; Maintainer: Pavel Janík <address@hidden>
+;;         Pavel Janík <address@hidden>
+;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: comm
 ;; Package: eudc
 
diff --git a/lisp/net/eudc-hotlist.el b/lisp/net/eudc-hotlist.el
index 6ec79cd..7416ad0 100644
--- a/lisp/net/eudc-hotlist.el
+++ b/lisp/net/eudc-hotlist.el
@@ -1,9 +1,10 @@
 ;;; eudc-hotlist.el --- hotlist management for EUDC -*- coding: utf-8 -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <address@hidden>
-;; Maintainer: Pavel Janík <address@hidden>
+;;         Pavel Janík <address@hidden>
+;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: comm
 ;; Package: eudc
 
diff --git a/lisp/net/eudc-vars.el b/lisp/net/eudc-vars.el
index 419b764..36a583d 100644
--- a/lisp/net/eudc-vars.el
+++ b/lisp/net/eudc-vars.el
@@ -1,9 +1,10 @@
 ;;; eudc-vars.el --- Emacs Unified Directory Client -*- coding: utf-8 -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <address@hidden>
-;; Maintainer: Pavel Janík <address@hidden>
+;;         Pavel Janík <address@hidden>
+;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: comm
 ;; Package: eudc
 
@@ -41,14 +42,36 @@
   "The name or IP address of the directory server.
 A port number may be specified by appending a colon and a
 number to the name of the server.  Use `localhost' if the directory
-server resides on your computer (BBDB backend)."
-  :type  '(choice (string :tag "Server") (const :tag "None" nil))
-  :group 'eudc)
+server resides on your computer (BBDB backend).
+
+To specify multiple servers, customize eudc-server-hotlist
+instead."
+  :type  '(choice (string :tag "Server") (const :tag "None" nil)))
 
 ;; Known protocols (used in completion)
 ;; Not to be mistaken with `eudc-supported-protocols'
 (defvar eudc-known-protocols '(bbdb ph ldap))
 
+(defcustom eudc-server-hotlist nil
+  "Directory servers to query.
+This is an alist of the form (SERVER . PROTOCOL).  SERVER is the
+host name or URI of the server, PROTOCOL is a symbol representing
+the EUDC backend with which to access the server.
+
+The BBDB backend ignores SERVER; `localhost' can be used as a
+placeholder string."
+  :tag   "Directory Servers to Query"
+  :type  `(repeat (cons :tag "Directory Server"
+                       (string :tag "Server Host Name or URI")
+                       (choice :tag "Protocol"
+                               :menu-tag "Protocol"
+                               ,@(mapcar (lambda (s)
+                                           (list 'const
+                                                 ':tag (symbol-name s) s))
+                                         eudc-known-protocols)
+                               (const :tag "None" nil))))
+  :version "25.1")
+
 (defvar eudc-supported-protocols nil
   "Protocols currently supported by EUDC.
 This variable is updated when protocol-specific libraries
@@ -61,15 +84,13 @@ Supported protocols are specified by 
`eudc-supported-protocols'."
                  ,@(mapcar (lambda (s)
                              (list 'const ':tag (symbol-name s) s))
                            eudc-known-protocols)
-                 (const :tag "None" nil))
-  :group 'eudc)
+                 (const :tag "None" nil)))
 
 
 (defcustom eudc-strict-return-matches t
   "Ignore or allow entries not containing all requested return attributes.
 If non-nil, such entries are ignored."
-  :type  'boolean
-  :group 'eudc)
+  :type  'boolean)
 
 (defcustom eudc-default-return-attributes nil
   "A list of default attributes to extract from directory entries.
@@ -82,8 +103,7 @@ server."
                  (repeat :menu-tag "Attribute list"
                          :tag "Attribute name"
                          :value (nil)
-                         (symbol :tag "Attribute name")))
-  :group 'eudc)
+                         (symbol :tag "Attribute name"))))
 
 (defcustom eudc-multiple-match-handling-method 'select
   "What to do when multiple entries match an inline expansion query.
@@ -102,8 +122,7 @@ Possible values are:
                  (const :menu-tag "Abort Operation"
                         :tag "Abort Operation"  abort)
                  (const :menu-tag "Default (Use First)"
-                        :tag "Default (Use First)" nil))
-  :group 'eudc)
+                        :tag "Default (Use First)" nil)))
 
 (defcustom eudc-duplicate-attribute-handling-method '((email . duplicate))
   "A method to handle entries containing duplicate attributes.
@@ -130,10 +149,10 @@ different values."
                                       (const :menu-tag "List" list)
                                       (const :menu-tag "First" first)
                                       (const :menu-tag "Concat" concat)
-                                      (const :menu-tag "Duplicate" 
duplicate)))))
-  :group 'eudc)
+                                      (const :menu-tag "Duplicate" 
duplicate))))))
 
-(defcustom eudc-inline-query-format '((name)
+(defcustom eudc-inline-query-format '((email)
+                                     (firstname)
                                      (firstname name))
   "Format of an inline expansion query.
 This is a list of FORMATs.  A FORMAT is itself a list of one or more
@@ -160,14 +179,16 @@ must be set in a protocol/server-local fashion, see 
`eudc-server-set' and
             (const :menu-tag "Email Address" :tag "Email Address" email)
             (const :menu-tag "Phone" :tag "Phone" phone)
             (symbol :menu-tag "Other" :tag "Attribute name"))))
-  :group 'eudc)
+  :version "25.1")
 
-(defcustom eudc-expansion-overwrites-query t
+;; Default to nil so that the most common use of eudc-expand-inline,
+;; where replace is nil, does not affect the kill ring.
+(defcustom eudc-expansion-overwrites-query nil
   "If non-nil, expanding a query overwrites the query string."
   :type  'boolean
-  :group 'eudc)
+  :version "25.1")
 
-(defcustom eudc-inline-expansion-format '("%s" email)
+(defcustom eudc-inline-expansion-format '("%s %s <%s>" firstname name email)
   "A list specifying the format of the expansion of inline queries.
 This variable controls what `eudc-expand-inline' actually inserts in
 the buffer.  First element is a string passed to `format'.  Remaining
@@ -185,7 +206,7 @@ are passed as additional arguments to `format'."
                    (const :menu-tag "Phone" :tag "Phone" phone)
                    (symbol :menu-tag "Other")
                    (symbol :tag "Attribute name"))))
-  :group 'eudc)
+  :version "25.1")
 
 (defcustom eudc-inline-expansion-servers 'server-then-hotlist
   "Which servers to contact for the expansion of inline queries.
@@ -198,8 +219,7 @@ Possible values are:
                 :menu-tag "Servers"
                 (const :menu-tag "Current server" current-server)
                 (const :menu-tag "Servers in the hotlist" hotlist)
-                (const :menu-tag "Current server then hotlist" 
server-then-hotlist))
-  :group 'eudc)
+                (const :menu-tag "Current server then hotlist" 
server-then-hotlist)))
 
 (defcustom eudc-max-servers-to-query nil
   "Maximum number of servers to query for an inline expansion.
@@ -213,8 +233,7 @@ If nil, query all servers available from 
`eudc-inline-expansion-servers'."
                 (const :menu-tag "3" 3)
                 (const :menu-tag "4" 4)
                 (const :menu-tag "5" 5)
-                (integer :menu-tag "Set"))
-  :group 'eudc)
+                (integer :menu-tag "Set")))
 
 (defcustom eudc-query-form-attributes '(name firstname email phone)
   "A list of attributes presented in the query form."
@@ -226,8 +245,7 @@ If nil, query all servers available from 
`eudc-inline-expansion-servers'."
            (const :menu-tag "Surname" :tag "Surname" name)
            (const :menu-tag "Email Address" :tag "Email Address" email)
            (const :menu-tag "Phone" :tag "Phone" phone)
-           (symbol :menu-tag "Other" :tag "Attribute name")))
-  :group 'eudc)
+           (symbol :menu-tag "Other" :tag "Attribute name"))))
 
 (defcustom eudc-user-attribute-names-alist '((url . "URL")
                                             (callsign . "HAM Call Sign")
@@ -257,15 +275,13 @@ at `_' characters and capitalizing the individual words."
   :tag   "User-defined Names of Directory Attributes"
   :type  '(repeat (cons :tag "Field"
                        (symbol :tag "Directory attribute")
-                       (string :tag "User friendly name ")))
-  :group 'eudc)
+                       (string :tag "User friendly name "))))
 
 (defcustom eudc-use-raw-directory-names nil
   "If non-nil, use attributes names as defined in the directory.
 Otherwise, directory query/response forms display the user attribute
 names defined in `eudc-user-attribute-names-alist'."
-  :type  'boolean
-  :group 'eudc)
+  :type  'boolean)
 
 (defcustom eudc-attribute-display-method-alist nil
   "An alist specifying methods to display attribute values.
@@ -277,8 +293,7 @@ attribute values for display."
   :tag "Attribute Decoding Functions"
   :type '(repeat (cons :tag "Attribute"
                       (symbol :tag "Name")
-                      (symbol :tag "Display Function")))
-  :group 'eudc)
+                      (symbol :tag "Display Function"))))
 
 (defcustom eudc-external-viewers '(("ImageMagick" "display" "-")
                                   ("ShowAudio" "showaudio"))
@@ -295,18 +310,15 @@ arguments that should be passed to the program."
                       (repeat
                        :tag "Arguments"
                        :inline t
-                       (string :tag "Argument"))))
-  :group 'eudc)
+                       (string :tag "Argument")))))
 
 (defcustom eudc-options-file "~/.eudc-options"
   "A file where the `servers' hotlist is stored."
-  :type '(file :Tag "File Name:")
-  :group 'eudc)
+  :type '(file :Tag "File Name:"))
 
 (defcustom eudc-mode-hook nil
   "Normal hook run on entry to EUDC mode."
-  :type '(repeat (sexp :tag "Hook definition"))
-  :group 'eudc)
+  :type 'hook)
 
 ;;}}}
 
@@ -341,8 +353,7 @@ BBDB fields.  SPECs are sexps which are evaluated:
   :tag "BBDB to PH Field Name Mapping"
   :type '(repeat (cons :tag "Field Name"
                       (symbol :tag "BBDB Field")
-                      (sexp :tag "Conversion Spec")))
-  :group 'eudc-ph)
+                      (sexp :tag "Conversion Spec"))))
 
 ;;}}}
 
@@ -376,8 +387,7 @@ BBDB fields.  SPECs are sexps which are evaluated:
   :tag "BBDB to LDAP Attribute Names Mapping"
   :type '(repeat (cons :tag "Field Name"
                       (symbol :tag "BBDB Field")
-                      (sexp :tag "Conversion Spec")))
-  :group 'eudc-ldap)
+                      (sexp :tag "Conversion Spec"))))
 
 ;;}}}
 
@@ -391,14 +401,12 @@ BBDB fields.  SPECs are sexps which are evaluated:
   "If non-nil, BBDB address and phone locations are used as attribute names.
 This has no effect on queries (you can't search for a specific location)
 but influences the way records are displayed."
-  :type 'boolean
-  :group 'eudc-bbdb)
+  :type 'boolean)
 
 (defcustom eudc-bbdb-enable-substring-matches t
   "If non-nil, authorize substring match in the same way BBDB does.
 Otherwise records must match queries exactly."
-  :type 'boolean
-  :group 'eudc-bbdb)
+  :type 'boolean)
 
 ;;}}}
 
diff --git a/lisp/net/eudc.el b/lisp/net/eudc.el
index bf67e4b..cf5d13f 100644
--- a/lisp/net/eudc.el
+++ b/lisp/net/eudc.el
@@ -1,9 +1,10 @@
 ;;; eudc.el --- Emacs Unified Directory Client -*- coding: utf-8 -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <address@hidden>
-;; Maintainer: Pavel Janík <address@hidden>
+;;         Pavel Janík <address@hidden>
+;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: comm
 
 ;; This file is part of GNU Emacs.
@@ -76,10 +77,6 @@
 
 (defvar mode-popup-menu)
 
-;; List of known servers
-;; Alist of (SERVER . PROTOCOL)
-(defvar eudc-server-hotlist nil)
-
 ;; List of variables that have server- or protocol-local bindings
 (defvar eudc-local-vars nil)
 
@@ -688,7 +685,8 @@ server for future sessions."
                                                    (cons (symbol-name elt)
                                                          elt))
                                                 eudc-known-protocols)))))
-  (unless (or (member protocol
+  (unless (or (null protocol)
+             (member protocol
                      eudc-supported-protocols)
              (load (concat "eudcb-" (symbol-name protocol)) t))
     (error "Unsupported protocol: %s" protocol))
@@ -766,7 +764,6 @@ otherwise a list of symbols is returned."
                  format (cdr format)))
          ;; If the same attribute appears more than once, merge
          ;; the corresponding values
-         (setq query-alist (nreverse query-alist))
          (while query-alist
            (setq key (eudc-caar query-alist)
                  val (eudc-cdar query-alist)
@@ -812,19 +809,29 @@ If REPLACE is non-nil, then this expansion replaces the 
name in the buffer.
 Multiple servers can be tried with the same query until one finds a match,
 see `eudc-inline-expansion-servers'"
   (interactive)
-  (if (memq eudc-inline-expansion-servers
-           '(current-server server-then-hotlist))
-      (or eudc-server
-         (call-interactively 'eudc-set-server))
+  (cond
+   ((eq eudc-inline-expansion-servers 'current-server)
+    (or eudc-server
+       (call-interactively 'eudc-set-server)))
+   ((eq eudc-inline-expansion-servers 'server-then-hotlist)
+    (or eudc-server
+       ;; Allow server to be nil if hotlist is set.
+       eudc-server-hotlist
+       (call-interactively 'eudc-set-server)))
+   ((eq eudc-inline-expansion-servers 'hotlist)
     (or eudc-server-hotlist
        (error "No server in the hotlist")))
+   (t
+    (error "Wrong value for `eudc-inline-expansion-servers': %S"
+          eudc-inline-expansion-servers)))
   (let* ((end (point))
         (beg (save-excursion
                (if (re-search-backward "\\([:,]\\|^\\)[ \t]*"
                                        (point-at-bol) 'move)
                    (goto-char (match-end 0)))
                (point)))
-        (query-words (split-string (buffer-substring beg end) "[ \t]+"))
+        (query-words (split-string (buffer-substring-no-properties beg end)
+                                   "[ \t]+"))
         query-formats
         response
         response-string
@@ -840,18 +847,17 @@ see `eudc-inline-expansion-servers'"
           ((eq eudc-inline-expansion-servers 'hotlist)
            eudc-server-hotlist)
           ((eq eudc-inline-expansion-servers 'server-then-hotlist)
-           (cons (cons eudc-server eudc-protocol)
-                 (delete (cons eudc-server eudc-protocol) servers)))
+           (if eudc-server
+               (cons (cons eudc-server eudc-protocol)
+                     (delete (cons eudc-server eudc-protocol) servers))
+             eudc-server-hotlist))
           ((eq eudc-inline-expansion-servers 'current-server)
-           (list (cons eudc-server eudc-protocol)))
-          (t
-           (error "Wrong value for `eudc-inline-expansion-servers': %S"
-                  eudc-inline-expansion-servers))))
+           (list (cons eudc-server eudc-protocol)))))
     (if (and eudc-max-servers-to-query
             (> (length servers) eudc-max-servers-to-query))
        (setcdr (nthcdr (1- eudc-max-servers-to-query) servers) nil))
 
-    (condition-case signal
+    (unwind-protect
        (progn
          (setq response
                (catch 'found
@@ -887,14 +893,15 @@ see `eudc-inline-expansion-servers'"
 
            ;; Process response through eudc-inline-expansion-format
            (while response
-             (setq response-string (apply 'format
-                                          (car eudc-inline-expansion-format)
-                                          (mapcar (function
-                                                   (lambda (field)
-                                                     (or (cdr (assq field (car 
response)))
-                                                         "")))
-                                                  
(eudc-translate-attribute-list
-                                                   (cdr 
eudc-inline-expansion-format)))))
+             (setq response-string
+                    (apply 'format
+                           (car eudc-inline-expansion-format)
+                           (mapcar (function
+                                    (lambda (field)
+                                      (or (cdr (assq field (car response)))
+                                          "")))
+                                   (eudc-translate-attribute-list
+                                    (cdr eudc-inline-expansion-format)))))
              (if (> (length response-string) 0)
                  (setq response-strings
                        (cons response-string response-strings)))
@@ -916,15 +923,10 @@ see `eudc-inline-expansion-servers'"
              (delete-region beg end)
              (insert (mapconcat 'identity response-strings ", ")))
             ((eq eudc-multiple-match-handling-method 'abort)
-             (error "There is more than one match for the query"))))
-         (or (and (equal eudc-server eudc-former-server)
-                  (equal eudc-protocol eudc-former-protocol))
-             (eudc-set-server eudc-former-server eudc-former-protocol t)))
-      (error
-       (or (and (equal eudc-server eudc-former-server)
-               (equal eudc-protocol eudc-former-protocol))
-          (eudc-set-server eudc-former-server eudc-former-protocol t))
-       (signal (car signal) (cdr signal))))))
+             (error "There is more than one match for the query")))))
+      (or (and (equal eudc-server eudc-former-server)
+              (equal eudc-protocol eudc-former-protocol))
+         (eudc-set-server eudc-former-server eudc-former-protocol t)))))
 
 ;;;###autoload
 (defun eudc-query-form (&optional get-fields-from-server)
diff --git a/lisp/net/eudcb-bbdb.el b/lisp/net/eudcb-bbdb.el
index bdcbf28..5be2bec 100644
--- a/lisp/net/eudcb-bbdb.el
+++ b/lisp/net/eudcb-bbdb.el
@@ -1,9 +1,10 @@
 ;;; eudcb-bbdb.el --- Emacs Unified Directory Client - BBDB Backend -*- 
coding: utf-8 -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <address@hidden>
-;; Maintainer: Pavel Janík <address@hidden>
+;;         Pavel Janík <address@hidden>
+;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: comm
 ;; Package: eudc
 
diff --git a/lisp/net/eudcb-ldap.el b/lisp/net/eudcb-ldap.el
index 6c806d7..1d426a7 100644
--- a/lisp/net/eudcb-ldap.el
+++ b/lisp/net/eudcb-ldap.el
@@ -1,9 +1,10 @@
 ;;; eudcb-ldap.el --- Emacs Unified Directory Client - LDAP Backend -*- 
coding: utf-8 -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <address@hidden>
-;; Maintainer: Pavel Janík <address@hidden>
+;;         Pavel Janík <address@hidden>
+;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: comm
 ;; Package: eudc
 
@@ -70,16 +71,17 @@
                     ("mail" . eudc-display-mail)
                     ("url" . eudc-display-url))
                   'ldap)
-(eudc-protocol-set 'eudc-switch-to-server-hook
-                  '(eudc-ldap-check-base)
-                  'ldap)
 
 (defun eudc-ldap-cleanup-record-simple (record)
   "Do some cleanup in a RECORD to make it suitable for EUDC."
   (mapcar
    (function
     (lambda (field)
-      (cons (intern (car field))
+      ;; Some servers return case-sensitive names (e.g. givenName
+      ;; instead of givenname); downcase the field's name so that it
+      ;; can be matched against
+      ;; eudc-ldap-attributes-translation-alist.
+      (cons (intern (downcase (car field)))
            (if (cdr (cdr field))
                (cdr field)
              (car (cdr field))))))
@@ -95,7 +97,7 @@
   (mapcar
    (function
     (lambda (field)
-      (let ((name (intern (car field)))
+      (let ((name (intern (downcase (car field))))
            (value (cdr field)))
        (if (memq name '(postaladdress registeredaddress))
            (setq value (mapcar 'eudc-filter-$ value)))
@@ -170,14 +172,16 @@ attribute names are returned. Default to `person'"
 
 (defun eudc-ldap-format-query-as-rfc1558 (query)
   "Format the EUDC QUERY list as a RFC1558 LDAP search filter."
-  (format "(&%s)"
-         (apply 'concat
-                (mapcar (lambda (item)
-                           (format "(%s=%s)"
-                                   (car item)
-                                   (eudc-ldap-escape-query-special-chars (cdr 
item))))
-                        query))))
-
+  (let ((formatter (lambda (item &optional wildcard)
+                    (format "(%s=%s)"
+                            (car item)
+                            (concat
+                             (eudc-ldap-escape-query-special-chars
+                              (cdr item)) (if wildcard "*" ""))))))
+    (format "(&%s)"
+           (concat
+            (mapconcat formatter (butlast query) "")
+            (funcall formatter (car (last query)) t)))))
 
 ;;}}}
 
diff --git a/lisp/net/eudcb-mab.el b/lisp/net/eudcb-mab.el
index 8175abe..a11cd95 100644
--- a/lisp/net/eudcb-mab.el
+++ b/lisp/net/eudcb-mab.el
@@ -1,9 +1,9 @@
 ;;; eudcb-mab.el --- Emacs Unified Directory Client - AddressBook backend
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
-;; Maintainer: address@hidden
+;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: comm
 ;; Package: eudc
 
diff --git a/lisp/net/eudcb-ph.el b/lisp/net/eudcb-ph.el
index f94ec55..1897e0b 100644
--- a/lisp/net/eudcb-ph.el
+++ b/lisp/net/eudcb-ph.el
@@ -1,9 +1,10 @@
 ;;; eudcb-ph.el --- Emacs Unified Directory Client - CCSO PH/QI Backend -*- 
coding: utf-8 -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <address@hidden>
-;; Maintainer: Pavel Janík <address@hidden>
+;;         Pavel Janík <address@hidden>
+;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: comm
 ;; Package: eudc
 
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index fbac428..ec7a0ba 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -1,6 +1,6 @@
-;;; eww.el --- Emacs Web Wowser
+;;; eww.el --- Emacs Web Wowser  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: html
@@ -29,6 +29,7 @@
 (require 'shr)
 (require 'url)
 (require 'url-queue)
+(require 'url-util)                    ; for url-get-url-at-point
 (require 'mm-url)
 (eval-when-compile (require 'subr-x)) ;; for string-trim
 
@@ -59,12 +60,64 @@
   :group 'eww
   :type 'string)
 
+(defcustom eww-suggest-uris
+  '(eww-links-at-point
+    url-get-url-at-point
+    eww-current-url)
+  "List of functions called to form the list of default URIs for `eww'.
+Each of the elements is a function returning either a string or a list
+of strings.  The results will be joined into a single list with
+duplicate entries (if any) removed."
+  :version "25.1"
+  :group 'eww
+  :type 'hook
+  :options '(eww-links-at-point
+            url-get-url-at-point
+            eww-current-url))
+
 (defcustom eww-bookmarks-directory user-emacs-directory
   "Directory where bookmark files will be stored."
   :version "25.1"
   :group 'eww
   :type 'string)
 
+(defcustom eww-desktop-remove-duplicates t
+  "Whether to remove duplicates from the history when saving desktop data.
+If non-nil, repetitive EWW history entries (comprising of the URI, the
+title, and the point position) will not be saved as part of the Emacs
+desktop.  Otherwise, such entries will be retained."
+  :version "25.1"
+  :group 'eww
+  :type 'boolean)
+
+(defcustom eww-restore-desktop nil
+  "How to restore EWW buffers on `desktop-restore'.
+If t or 'auto, the buffers will be reloaded automatically.
+If nil, buffers will require manual reload, and will contain the text
+specified in `eww-restore-reload-prompt' instead of the actual Web
+page contents."
+  :version "25.1"
+  :group 'eww
+  :type '(choice (const :tag "Restore all automatically" t)
+                 (const :tag "Require manual reload" nil)))
+
+(defcustom eww-restore-reload-prompt
+  "\n\n *** Use \\[eww-reload] to reload this buffer. ***\n"
+  "The string to put in the buffers not reloaded on `desktop-restore'.
+This prompt will be used if `eww-restore-desktop' is nil.
+
+The string will be passed through `substitute-command-keys'."
+  :version "25.1"
+  :group 'eww
+  :type 'string)
+
+(defcustom eww-history-limit 50
+  "Maximum number of entries to retain in the history."
+  :version "25.1"
+  :group 'eww
+  :type '(choice (const :tag "Unlimited" nil)
+                 integer))
+
 (defcustom eww-use-external-browser-for-content-type
   "\\`\\(video/\\|audio/\\|application/ogg\\)"
   "Always use external browser for specified content-type."
@@ -146,6 +199,20 @@ See also `eww-form-checkbox-selected-symbol'."
   :version "24.4"
   :group 'eww)
 
+(defface eww-invalid-certificate
+  '((default :weight bold)
+    (((class color)) :foreground "red"))
+  "Face for web pages with invalid certificates."
+  :version "25.1"
+  :group 'eww)
+
+(defface eww-valid-certificate
+  '((default :weight bold)
+    (((class color)) :foreground "ForestGreen"))
+  "Face for web pages with valid certificates."
+  :version "25.1"
+  :group 'eww)
+
 (defvar eww-data nil)
 (defvar eww-history nil)
 (defvar eww-history-position 0)
@@ -158,34 +225,67 @@ See also `eww-form-checkbox-selected-symbol'."
     (define-key map "\r" 'eww-follow-link)
     map))
 
+(defun eww-suggested-uris nil
+  "Return the list of URIs to suggest at the `eww' prompt.
+This list can be customized via `eww-suggest-uris'."
+  (let ((obseen (make-vector 42 0))
+       (uris nil))
+    (dolist (fun eww-suggest-uris)
+      (let ((ret (funcall fun)))
+       (dolist (uri (if (stringp ret) (list ret) ret))
+         (when (and uri (not (intern-soft uri obseen)))
+           (intern uri obseen)
+           (push   uri uris)))))
+    (nreverse uris)))
+
 ;;;###autoload
 (defun eww (url)
   "Fetch URL and render the page.
 If the input doesn't look like an URL or a domain name, the
 word(s) will be searched for via `eww-search-prefix'."
-  (interactive "sEnter URL or keywords: ")
+  (interactive
+   (let* ((uris (eww-suggested-uris))
+         (prompt (concat "Enter URL or keywords"
+                         (if uris (format " (default %s)" (car uris)) "")
+                         ": ")))
+     (list (read-string prompt nil nil uris))))
   (setq url (string-trim url))
   (cond ((string-match-p "\\`file:/" url))
        ;; Don't mangle file: URLs at all.
         ((string-match-p "\\`ftp://"; url)
          (user-error "FTP is not supported."))
         (t
-         (if (and (= (length (split-string url)) 1)
-                 (or (and (not (string-match-p "\\`[\"\'].*[\"\']\\'" url))
-                          (> (length (split-string url "[.:]")) 1))
-                     (string-match eww-local-regex url)))
+        ;; Anything that starts with something that vaguely looks
+        ;; like a protocol designator is interpreted as a full URL.
+         (if (or (string-match "\\`[A-Za-z]+:" url)
+                ;; Also try to match "naked" URLs like
+                ;; en.wikipedia.org/wiki/Free software
+                (string-match "\\`[A-Za-z_]+\\.[A-Za-z._]+/" url)
+                (and (= (length (split-string url)) 1)
+                     (or (and (not (string-match-p "\\`[\"\'].*[\"\']\\'" url))
+                              (> (length (split-string url "[.:]")) 1))
+                         (string-match eww-local-regex url))))
              (progn
                (unless (string-match-p "\\`[a-zA-Z][-a-zA-Z0-9+.]*://" url)
                  (setq url (concat "http://"; url)))
-               ;; some site don't redirect final /
+               ;; Some sites do not redirect final /
                (when (string= (url-filename (url-generic-parse-url url)) "")
                  (setq url (concat url "/"))))
            (setq url (concat eww-search-prefix
                              (replace-regexp-in-string " " "+" url))))))
+  (if (eq major-mode 'eww-mode)
+      (when (or (plist-get eww-data :url)
+               (plist-get eww-data :dom))
+       (eww-save-history))
+    (eww-setup-buffer)
+    (plist-put eww-data :url url)
+    (plist-put eww-data :title "")
+    (eww-update-header-line-format)
+    (let ((inhibit-read-only t))
+      (insert (format "Loading %s..." url))
+      (goto-char (point-min))))
   (url-retrieve url 'eww-render
-               (list url nil
-                     (and (eq major-mode 'eww-mode)
-                          (current-buffer)))))
+               (list url nil (current-buffer))))
 
 ;;;###autoload (defalias 'browse-web 'eww)
 
@@ -205,7 +305,7 @@ See the `eww-search-prefix' variable for the search engine 
used."
   (interactive "r")
   (eww (buffer-substring beg end)))
 
-(defun eww-render (status url &optional point buffer)
+(defun eww-render (status url &optional point buffer encode)
   (let ((redirect (plist-get status :redirect)))
     (when redirect
       (setq url redirect)))
@@ -219,29 +319,31 @@ See the `eww-search-prefix' variable for the search 
engine used."
                    (or (cdr (assq 'charset (cdr content-type)))
                        (eww-detect-charset (equal (car content-type)
                                                   "text/html"))
-                       "utf8"))))
+                       "utf-8"))))
         (data-buffer (current-buffer)))
+    ;; Save the https peer status.
+    (with-current-buffer buffer
+      (plist-put eww-data :peer (plist-get status :peer)))
     (unwind-protect
        (progn
-          (plist-put eww-data :title "")
          (cond
            ((and eww-use-external-browser-for-content-type
                  (string-match-p eww-use-external-browser-for-content-type
                                  (car content-type)))
             (eww-browse-with-external-browser url))
           ((equal (car content-type) "text/html")
-           (eww-display-html charset url nil point buffer))
+           (eww-display-html charset url nil point buffer encode))
           ((equal (car content-type) "application/pdf")
            (eww-display-pdf))
           ((string-match-p "\\`image/" (car content-type))
-           (eww-display-image buffer)
-           (eww-update-header-line-format))
+           (eww-display-image buffer))
           (t
-           (eww-display-raw buffer)
-           (eww-update-header-line-format)))
-         (plist-put eww-data :url url)
-         (setq eww-history-position 0)
-         (run-hooks 'eww-after-render-hook))
+           (eww-display-raw buffer encode)))
+         (with-current-buffer buffer
+           (plist-put eww-data :url url)
+           (eww-update-header-line-format)
+           (setq eww-history-position 0)
+           (run-hooks 'eww-after-render-hook)))
       (kill-buffer data-buffer))))
 
 (defun eww-parse-headers ()
@@ -273,9 +375,11 @@ See the `eww-search-prefix' variable for the search engine 
used."
 (declare-function libxml-parse-html-region "xml.c"
                  (start end &optional base-url))
 
-(defun eww-display-html (charset url &optional document point buffer)
-  (or (fboundp 'libxml-parse-html-region)
-      (error "This function requires Emacs to be compiled with libxml2"))
+(defun eww-display-html (charset url &optional document point buffer encode)
+  (unless (fboundp 'libxml-parse-html-region)
+    (error "This function requires Emacs to be compiled with libxml2"))
+  (unless (buffer-live-p buffer)
+    (error "Buffer %s doesn't exist" buffer))
   ;; There should be a better way to abort loading images
   ;; asynchronously.
   (setq url-queue nil)
@@ -284,130 +388,148 @@ See the `eww-search-prefix' variable for the search 
engine used."
             (list
              'base (list (cons 'href url))
              (progn
-               (unless (eq charset 'utf-8)
+               (when (or (and encode
+                              (not (eq charset encode)))
+                         (not (eq charset 'utf-8)))
                  (condition-case nil
-                     (decode-coding-region (point) (point-max) charset)
+                     (decode-coding-region (point) (point-max)
+                                           (or encode charset))
                    (coding-system-error nil)))
                (libxml-parse-html-region (point) (point-max))))))
        (source (and (null document)
                     (buffer-substring (point) (point-max)))))
-    (eww-setup-buffer buffer)
-    (plist-put eww-data :source source)
-    (plist-put eww-data :dom document)
-    (let ((inhibit-read-only t)
-         (after-change-functions nil)
-         (shr-target-id (url-target (url-generic-parse-url url)))
-         (shr-external-rendering-functions
-          '((title . eww-tag-title)
-            (form . eww-tag-form)
-            (input . eww-tag-input)
-            (textarea . eww-tag-textarea)
-            (body . eww-tag-body)
-            (select . eww-tag-select)
-            (link . eww-tag-link)
-            (a . eww-tag-a))))
-      (shr-insert-document document)
-      (cond
-       (point
-       (goto-char point))
-       (shr-target-id
-       (goto-char (point-min))
-       (let ((point (next-single-property-change
-                     (point-min) 'shr-target-id)))
-         (when point
-           (goto-char point))))
-       (t
-       (goto-char (point-min))
-       ;; Don't leave point inside forms, because the normal eww
-       ;; commands aren't available there.
-       (while (and (not (eobp))
-                   (get-text-property (point) 'eww-form))
-         (forward-line 1)))))
-    (plist-put eww-data :url url)
-    (setq eww-history-position 0)
-    (eww-update-header-line-format)))
-
-(defun eww-handle-link (cont)
-  (let* ((rel (assq :rel cont))
-       (href (assq :href cont))
-       (where (assoc
-               ;; The text associated with :rel is case-insensitive.
-               (if rel (downcase (cdr rel)))
-                     '(("next" . :next)
-                       ;; Texinfo uses "previous", but HTML specifies
-                       ;; "prev", so recognize both.
-                       ("previous" . :previous)
-                       ("prev" . :previous)
-                       ;; HTML specifies "start" but also "contents",
-                       ;; and Gtk seems to use "home".  Recognize
-                       ;; them all; but store them in different
-                       ;; variables so that we can readily choose the
-                       ;; "best" one.
-                       ("start" . :start)
-                       ("home" . :home)
-                       ("contents" . :contents)
-                       ("up" . up)))))
+    (with-current-buffer buffer
+      (plist-put eww-data :source source)
+      (plist-put eww-data :dom document)
+      (let ((inhibit-read-only t)
+           (inhibit-modification-hooks t)
+           (shr-target-id (url-target (url-generic-parse-url url)))
+           (shr-external-rendering-functions
+            '((title . eww-tag-title)
+              (form . eww-tag-form)
+              (input . eww-tag-input)
+              (textarea . eww-tag-textarea)
+              (body . eww-tag-body)
+              (select . eww-tag-select)
+              (link . eww-tag-link)
+              (a . eww-tag-a))))
+       (erase-buffer)
+       (shr-insert-document document)
+       (cond
+        (point
+         (goto-char point))
+        (shr-target-id
+         (goto-char (point-min))
+         (let ((point (next-single-property-change
+                       (point-min) 'shr-target-id)))
+           (when point
+             (goto-char point))))
+        (t
+         (goto-char (point-min))
+         ;; Don't leave point inside forms, because the normal eww
+         ;; commands aren't available there.
+         (while (and (not (eobp))
+                     (get-text-property (point) 'eww-form))
+           (forward-line 1)))))
+      (eww-size-text-inputs))))
+
+(defun eww-handle-link (dom)
+  (let* ((rel (dom-attr dom 'rel))
+        (href (dom-attr dom 'href))
+        (where (assoc
+                ;; The text associated with :rel is case-insensitive.
+                (if rel (downcase rel))
+                '(("next" . :next)
+                  ;; Texinfo uses "previous", but HTML specifies
+                  ;; "prev", so recognize both.
+                  ("previous" . :previous)
+                  ("prev" . :previous)
+                  ;; HTML specifies "start" but also "contents",
+                  ;; and Gtk seems to use "home".  Recognize
+                  ;; them all; but store them in different
+                  ;; variables so that we can readily choose the
+                  ;; "best" one.
+                  ("start" . :start)
+                  ("home" . :home)
+                  ("contents" . :contents)
+                  ("up" . :up)))))
     (and href
         where
-        (plist-put eww-data (cdr where) (cdr href)))))
+        (plist-put eww-data (cdr where) href))))
 
-(defun eww-tag-link (cont)
-  (eww-handle-link cont)
-  (shr-generic cont))
+(defun eww-tag-link (dom)
+  (eww-handle-link dom)
+  (shr-generic dom))
 
-(defun eww-tag-a (cont)
-  (eww-handle-link cont)
+(defun eww-tag-a (dom)
+  (eww-handle-link dom)
   (let ((start (point)))
-    (shr-tag-a cont)
+    (shr-tag-a dom)
     (put-text-property start (point) 'keymap eww-link-keymap)))
 
 (defun eww-update-header-line-format ()
-  (if eww-header-line-format
-      (setq header-line-format
-           (replace-regexp-in-string
-            "%" "%%"
-            ;; FIXME?  Title can be blank.  Default to, eg, last component
-            ;; of url?
-            (format-spec eww-header-line-format
-                         `((?u . ,(plist-get eww-data :url))
-                           (?t . ,(or (plist-get eww-data :title) ""))))))
-    (setq header-line-format nil)))
-
-(defun eww-tag-title (cont)
-  (let ((title ""))
-    (dolist (sub cont)
-      (when (eq (car sub) 'text)
-       (setq title (concat title (cdr sub)))))
-    (plist-put eww-data :title
+  (setq header-line-format
+       (and eww-header-line-format
+            (let ((title (plist-get eww-data :title))
+                  (peer (plist-get eww-data :peer)))
+              (when (zerop (length title))
+                (setq title "[untitled]"))
+              ;; This connection has is https.
+              (when peer
+                (setq title
+                      (propertize title 'face
+                                  (if (plist-get peer :warnings)
+                                      'eww-invalid-certificate
+                                    'eww-valid-certificate))))
               (replace-regexp-in-string
-               "^ \\| $" ""
-               (replace-regexp-in-string "[ \t\r\n]+" " " title))))
+               "%" "%%"
+               (format-spec
+                eww-header-line-format
+                `((?u . ,(or (plist-get eww-data :url) ""))
+                  (?t . ,title))))))))
+
+(defun eww-tag-title (dom)
+  (plist-put eww-data :title
+            (replace-regexp-in-string
+             "^ \\| $" ""
+             (replace-regexp-in-string "[ \t\r\n]+" " " (dom-text dom))))
   (eww-update-header-line-format))
 
-(defun eww-tag-body (cont)
+(defun eww-tag-body (dom)
   (let* ((start (point))
-        (fgcolor (cdr (or (assq :fgcolor cont)
-                           (assq :text cont))))
-        (bgcolor (cdr (assq :bgcolor cont)))
+        (fgcolor (or (dom-attr dom 'fgcolor) (dom-attr dom 'text)))
+        (bgcolor (dom-attr dom 'bgcolor))
         (shr-stylesheet (list (cons 'color fgcolor)
                               (cons 'background-color bgcolor))))
-    (shr-generic cont)
+    (shr-generic dom)
     (shr-colorize-region start (point) fgcolor bgcolor)))
 
-(defun eww-display-raw (&optional buffer)
+(defun eww-display-raw (buffer &optional encode)
   (let ((data (buffer-substring (point) (point-max))))
-    (eww-setup-buffer buffer)
-    (let ((inhibit-read-only t))
-      (insert data))
-    (goto-char (point-min))))
-
-(defun eww-display-image (&optional buffer)
+    (unless (buffer-live-p buffer)
+      (error "Buffer %s doesn't exist" buffer))
+    (with-current-buffer buffer
+      (let ((inhibit-read-only t))
+       (erase-buffer)
+       (insert data)
+       (unless (eq encode 'utf-8)
+         (encode-coding-region (point-min) (1+ (length data)) 'utf-8)
+         (condition-case nil
+             (decode-coding-region (point-min) (1+ (length data)) encode)
+           (coding-system-error nil))))
+      (goto-char (point-min)))))
+
+(defun eww-display-image (buffer)
   (let ((data (shr-parse-image-data)))
-    (eww-setup-buffer buffer)
-    (let ((inhibit-read-only t))
-      (shr-put-image data nil))
-    (goto-char (point-min))))
+    (unless (buffer-live-p buffer)
+      (error "Buffer %s doesn't exist" buffer))
+    (with-current-buffer buffer
+      (let ((inhibit-read-only t))
+       (erase-buffer)
+       (shr-put-image data nil))
+      (goto-char (point-min)))))
 
+(declare-function mailcap-view-mime "mailcap" (type))
 (defun eww-display-pdf ()
   (let ((data (buffer-substring (point) (point-max))))
     (switch-to-buffer (get-buffer-create "*eww pdf*"))
@@ -415,20 +537,27 @@ See the `eww-search-prefix' variable for the search 
engine used."
          (inhibit-read-only t))
       (erase-buffer)
       (insert data)
-      (doc-view-mode)))
+      (mailcap-view-mime "application/pdf")))
   (goto-char (point-min)))
 
-(defun eww-setup-buffer (&optional buffer)
-  (switch-to-buffer
-   (if (buffer-live-p buffer)
-       buffer
-     (get-buffer-create "*eww*")))
+(defun eww-setup-buffer ()
+  (switch-to-buffer (get-buffer-create "*eww*"))
   (let ((inhibit-read-only t))
     (remove-overlays)
     (erase-buffer))
   (unless (eq major-mode 'eww-mode)
     (eww-mode)))
 
+(defun eww-current-url nil
+  "Return URI of the Web page the current EWW buffer is visiting."
+  (plist-get eww-data :url))
+
+(defun eww-links-at-point ()
+  "Return list of URIs, if any, linked at point."
+  (remq nil
+       (list (get-text-property (point) 'shr-url)
+             (get-text-property (point) 'image-url))))
+
 (defun eww-view-source ()
   "View the HTML source code of the current page."
   (interactive)
@@ -450,18 +579,16 @@ contains the main textual portion, leaving out navigation 
menus and
 the like."
   (interactive)
   (let* ((old-data eww-data)
-        (dom (shr-transform-dom
-              (with-temp-buffer
-                (insert (plist-get old-data :source))
-                (condition-case nil
-                    (decode-coding-region (point-min) (point-max) 'utf-8)
-                  (coding-system-error nil))
-                (libxml-parse-html-region (point-min) (point-max))))))
+        (dom (with-temp-buffer
+               (insert (plist-get old-data :source))
+               (condition-case nil
+                   (decode-coding-region (point-min) (point-max) 'utf-8)
+                 (coding-system-error nil))
+               (libxml-parse-html-region (point-min) (point-max)))))
     (eww-score-readability dom)
     (eww-save-history)
     (eww-display-html nil nil
-                     (shr-retransform-dom
-                      (eww-highest-readability dom))
+                     (eww-highest-readability dom)
                      nil (current-buffer))
     (dolist (elem '(:source :url :title :next :previous :up))
       (plist-put eww-data elem (plist-get old-data elem)))
@@ -470,55 +597,47 @@ the like."
 (defun eww-score-readability (node)
   (let ((score -1))
     (cond
-     ((memq (car node) '(script head comment))
+     ((memq (dom-tag node) '(script head comment))
       (setq score -2))
-     ((eq (car node) 'meta)
+     ((eq (dom-tag node) 'meta)
       (setq score -1))
-     ((eq (car node) 'img)
+     ((eq (dom-tag node) 'img)
       (setq score 2))
-     ((eq (car node) 'a)
-      (setq score (- (length (split-string
-                             (or (cdr (assoc 'text (cdr node))) ""))))))
+     ((eq (dom-tag node) 'a)
+      (setq score (- (length (split-string (dom-text node))))))
      (t
-      (dolist (elem (cdr node))
-       (cond
-        ((and (stringp (cdr elem))
-              (eq (car elem) 'text))
-         (setq score (+ score (length (split-string (cdr elem))))))
-        ((consp (cdr elem))
+      (dolist (elem (dom-children node))
+       (if (stringp elem)
+           (setq score (+ score (length (split-string elem))))
          (setq score (+ score
                         (or (cdr (assoc :eww-readability-score (cdr elem)))
-                            (eww-score-readability elem)))))))))
+                            (eww-score-readability elem))))))))
     ;; Cache the score of the node to avoid recomputing all the time.
-    (setcdr node (cons (cons :eww-readability-score score) (cdr node)))
+    (dom-set-attribute node :eww-readability-score score)
     score))
 
 (defun eww-highest-readability (node)
   (let ((result node)
        highest)
-    (dolist (elem (cdr node))
-      (when (and (consp (cdr elem))
-                (> (or (cdr (assoc
-                             :eww-readability-score
-                             (setq highest
-                                   (eww-highest-readability elem))))
-                       most-negative-fixnum)
-                   (or (cdr (assoc :eww-readability-score (cdr result)))
-                       most-negative-fixnum)))
+    (dolist (elem (dom-non-text-children node))
+      (when (> (or (dom-attr
+                   (setq highest (eww-highest-readability elem))
+                   :eww-readability-score)
+                  most-negative-fixnum)
+              (or (dom-attr result :eww-readability-score)
+                  most-negative-fixnum))
        (setq result highest)))
     result))
 
 (defvar eww-mode-map
   (let ((map (make-sparse-keymap)))
-    (suppress-keymap map)
-    (define-key map "q" 'quit-window)
-    (define-key map "g" 'eww-reload)
+    (set-keymap-parent map special-mode-map)
+    (define-key map "g" 'eww-reload) ;FIXME: revert-buffer-function instead!
+    (define-key map "G" 'eww)
     (define-key map [?\t] 'shr-next-link)
     (define-key map [?\M-\t] 'shr-previous-link)
+    (define-key map [backtab] 'shr-previous-link)
     (define-key map [delete] 'scroll-down-command)
-    (define-key map [?\S-\ ] 'scroll-down-command)
-    (define-key map "\177" 'scroll-down-command)
-    (define-key map " " 'scroll-up-command)
     (define-key map "l" 'eww-back-url)
     (define-key map "r" 'eww-forward-url)
     (define-key map "n" 'eww-next-url)
@@ -532,6 +651,8 @@ the like."
     (define-key map "v" 'eww-view-source)
     (define-key map "R" 'eww-readable)
     (define-key map "H" 'eww-list-histories)
+    (define-key map "E" 'eww-set-character-encoding)
+    (define-key map "S" 'eww-list-buffers)
 
     (define-key map "b" 'eww-add-bookmark)
     (define-key map "B" 'eww-list-bookmarks)
@@ -552,9 +673,11 @@ the like."
        ["View page source" eww-view-source]
        ["Copy page URL" eww-copy-page-url t]
        ["List histories" eww-list-histories t]
+       ["List buffers" eww-list-buffers t]
        ["Add bookmark" eww-add-bookmark t]
        ["List bookmarks" eww-list-bookmarks t]
-       ["List cookies" url-cookie-list t]))
+       ["List cookies" url-cookie-list t]
+       ["Character Encoding" eww-set-character-encoding]))
     map))
 
 (defvar eww-tool-bar-map
@@ -572,25 +695,28 @@ the like."
     map)
   "Tool bar for `eww-mode'.")
 
-(define-derived-mode eww-mode nil "eww"
-  "Mode for browsing the web.
-
-\\{eww-mode-map}"
+(define-derived-mode eww-mode special-mode "eww"
+  "Mode for browsing the web."
   (setq-local eww-data (list :title ""))
-  (setq-local browse-url-browser-function 'eww-browse-url)
-  (setq-local after-change-functions 'eww-process-text-input)
+  (setq-local browse-url-browser-function #'eww-browse-url)
+  (add-hook 'after-change-functions #'eww-process-text-input nil t)
   (setq-local eww-history nil)
   (setq-local eww-history-position 0)
   (when (boundp 'tool-bar-map)
-   (setq-local tool-bar-map eww-tool-bar-map))
+    (setq-local tool-bar-map eww-tool-bar-map))
+  ;; desktop support
+  (setq-local desktop-save-buffer #'eww-desktop-misc-data)
+  ;; multi-page isearch support
+  (setq-local multi-isearch-next-buffer-function #'eww-isearch-next-buffer)
+  (setq truncate-lines t)
   (buffer-disable-undo)
   (setq buffer-read-only t))
 
 ;;;###autoload
-(defun eww-browse-url (url &optional _new-window)
-  (when (and (equal major-mode 'eww-mode)
-            (plist-get eww-data :url))
-    (eww-save-history))
+(defun eww-browse-url (url &optional new-window)
+  (cond (new-window
+        (switch-to-buffer (generate-new-buffer "*eww*"))
+         (eww-mode)))
   (eww url))
 
 (defun eww-back-url ()
@@ -611,12 +737,16 @@ the like."
   (eww-restore-history (elt eww-history (1- eww-history-position))))
 
 (defun eww-restore-history (elem)
-  (let ((inhibit-read-only t))
-    (erase-buffer)
-    (insert (plist-get elem :text))
-    (goto-char (plist-get elem :point))
+  (let ((inhibit-read-only t)
+       (inhibit-modification-hooks t)
+       (text (plist-get elem :text)))
     (setq eww-data elem)
-    (eww-update-header-line-format)))
+    (if (null text)
+       (eww-reload)                    ; FIXME: restore :point?
+      (erase-buffer)
+      (insert text)
+      (goto-char (plist-get elem :point))
+      (eww-update-header-line-format))))
 
 (defun eww-next-url ()
   "Go to the page marked `next'.
@@ -660,11 +790,19 @@ appears in a <link> or <a> tag."
        (eww-browse-url (shr-expand-url best-url (plist-get eww-data :url)))
       (user-error "No `top' for this page"))))
 
-(defun eww-reload ()
-  "Reload the current page."
-  (interactive)
+(defun eww-reload (&optional local encode)
+  "Reload the current page.
+If LOCAL (the command prefix), don't reload the page from the
+network, but just re-display the HTML already fetched."
+  (interactive "P")
   (let ((url (plist-get eww-data :url)))
-    (url-retrieve url 'eww-render (list url (point)))))
+    (if local
+       (if (null (plist-get eww-data :dom))
+           (error "No current HTML data")
+         (eww-display-html 'utf-8 url (plist-get eww-data :dom)
+                           (point) (current-buffer)))
+      (url-retrieve url 'eww-render
+                   (list url (point) (current-buffer) encode)))))
 
 ;; Form support.
 
@@ -746,13 +884,12 @@ appears in a <link> or <a> tag."
   (1- (next-single-property-change
        (point) 'eww-form nil (point-max))))
 
-(defun eww-tag-form (cont)
-  (let ((eww-form
-        (list (assq :method cont)
-              (assq :action cont)))
+(defun eww-tag-form (dom)
+  (let ((eww-form (list (cons :method (dom-attr dom 'method))
+                       (cons :action (dom-attr dom 'action))))
        (start (point)))
     (shr-ensure-paragraph)
-    (shr-generic cont)
+    (shr-generic dom)
     (unless (bolp)
       (insert "\n"))
     (insert "\n")
@@ -760,9 +897,9 @@ appears in a <link> or <a> tag."
       (put-text-property start (1+ start)
                         'eww-form eww-form))))
 
-(defun eww-form-submit (cont)
+(defun eww-form-submit (dom)
   (let ((start (point))
-       (value (cdr (assq :value cont))))
+       (value (dom-attr dom 'value)))
     (setq value
          (if (zerop (length value))
              "Submit"
@@ -773,28 +910,28 @@ appears in a <link> or <a> tag."
                       (list :eww-form eww-form
                             :value value
                             :type "submit"
-                            :name (cdr (assq :name cont))))
+                            :name (dom-attr dom 'name)))
     (put-text-property start (point) 'keymap eww-submit-map)
     (insert " ")))
 
-(defun eww-form-checkbox (cont)
+(defun eww-form-checkbox (dom)
   (let ((start (point)))
-    (if (cdr (assq :checked cont))
+    (if (dom-attr dom 'checked)
        (insert eww-form-checkbox-selected-symbol)
       (insert eww-form-checkbox-symbol))
     (add-face-text-property start (point) 'eww-form-checkbox)
     (put-text-property start (point) 'eww-form
                       (list :eww-form eww-form
-                            :value (cdr (assq :value cont))
-                            :type (downcase (cdr (assq :type cont)))
-                            :checked (cdr (assq :checked cont))
-                            :name (cdr (assq :name cont))))
+                            :value (dom-attr dom 'value)
+                            :type (downcase (dom-attr dom 'type))
+                            :checked (dom-attr dom 'checked)
+                            :name (dom-attr dom 'name)))
     (put-text-property start (point) 'keymap eww-checkbox-map)
     (insert " ")))
 
-(defun eww-form-file (cont)
+(defun eww-form-file (dom)
   (let ((start (point))
-       (value (cdr (assq :value cont))))
+       (value (dom-attr dom 'value)))
     (setq value
          (if (zerop (length value))
              " No file selected"
@@ -804,9 +941,9 @@ appears in a <link> or <a> tag."
     (insert value)
     (put-text-property start (point) 'eww-form
                       (list :eww-form eww-form
-                            :value (cdr (assq :value cont))
-                            :type (downcase (cdr (assq :type cont)))
-                            :name (cdr (assq :name cont))))
+                            :value (dom-attr dom 'value)
+                            :type (downcase (dom-attr dom 'type))
+                            :name (dom-attr dom 'name)))
     (put-text-property start (point) 'keymap eww-submit-file)
     (insert " ")))
 
@@ -820,16 +957,13 @@ appears in a <link> or <a> tag."
       (eww-update-field filename (length "Browse"))
               (plist-put input :filename filename))))
 
-(defun eww-form-text (cont)
+(defun eww-form-text (dom)
   (let ((start (point))
-       (type (downcase (or (cdr (assq :type cont))
-                           "text")))
-       (value (or (cdr (assq :value cont)) ""))
-       (width (string-to-number
-               (or (cdr (assq :size cont))
-                   "40")))
-        (readonly-property (if (or (cdr (assq :disabled cont))
-                                   (cdr (assq :readonly cont)))
+       (type (downcase (or (dom-attr dom 'type) "text")))
+       (value (or (dom-attr dom 'value) ""))
+       (width (string-to-number (or (dom-attr dom 'size) "40")))
+        (readonly-property (if (or (dom-attr dom 'disabled)
+                                  (dom-attr dom 'readonly))
                                'read-only
                              'inhibit-read-only)))
     (insert value)
@@ -843,7 +977,7 @@ appears in a <link> or <a> tag."
                        (list :eww-form eww-form
                              :value value
                              :type type
-                             :name (cdr (assq :name cont))))
+                             :name (dom-attr dom 'name)))
     (insert " ")))
 
 (defconst eww-text-input-types '("text" "password" "textarea"
@@ -853,63 +987,70 @@ appears in a <link> or <a> tag."
   "List of input types which represent a text input.
 See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
 
-(defun eww-process-text-input (beg end length)
-  (let* ((form (get-text-property (min (1+ end) (point-max)) 'eww-form))
-        (properties (text-properties-at end))
-        (type (plist-get form :type)))
-    (when (and form
-              (member type eww-text-input-types))
-      (cond
-       ((zerop length)
-       ;; Delete some space at the end.
-       (save-excursion
-         (goto-char
-          (if (equal type "textarea")
-              (1- (line-end-position))
-            (eww-end-of-field)))
-         (let ((new (- end beg)))
-           (while (and (> new 0)
+(defun eww-process-text-input (beg end replace-length)
+  (when-let (pos (and (< (1+ end) (point-max))
+                     (> (1- end) (point-min))
+                     (cond
+                      ((get-text-property (1+ end) 'eww-form)
+                       (1+ end))
+                      ((get-text-property (1- end) 'eww-form)
+                       (1- end)))))
+    (let* ((form (get-text-property pos 'eww-form))
+          (properties (text-properties-at pos))
+          (inhibit-read-only t)
+          (length (- end beg replace-length))
+          (type (plist-get form :type)))
+      (when (and form
+                (member type eww-text-input-types))
+       (cond
+        ((> length 0)
+         ;; Delete some space at the end.
+         (save-excursion
+           (goto-char
+            (if (equal type "textarea")
+                (1- (line-end-position))
+              (eww-end-of-field)))
+           (while (and (> length 0)
                        (eql (following-char) ? ))
-             (delete-region (point) (1+ (point)))
-             (setq new (1- new))))
-         (set-text-properties beg end properties)))
-       ((> length 0)
-       ;; Add padding.
-       (save-excursion
-         (goto-char
-          (if (equal type "textarea")
-              (1- (line-end-position))
-            (eww-end-of-field)))
-         (let ((start (point)))
-           (insert (make-string length ? ))
-           (set-text-properties start (point) properties)))))
-      (let ((value (buffer-substring-no-properties
-                   (eww-beginning-of-field)
-                   (eww-end-of-field))))
-       (when (string-match " +\\'" value)
-         (setq value (substring value 0 (match-beginning 0))))
-       (plist-put form :value value)
-       (when (equal type "password")
-         ;; Display passwords as asterisks.
-         (let ((start (eww-beginning-of-field)))
-           (put-text-property start (+ start (length value))
-                              'display (make-string (length value) ?*))))))))
-
-(defun eww-tag-textarea (cont)
+             (delete-region (1- (point)) (point))
+             (cl-decf length))))
+        ((< length 0)
+         ;; Add padding.
+         (save-excursion
+           (goto-char (1- end))
+           (goto-char
+            (if (equal type "textarea")
+                (1- (line-end-position))
+              (1+ (eww-end-of-field))))
+           (let ((start (point)))
+             (insert (make-string (abs length) ? ))
+             (set-text-properties start (point) properties))
+           (goto-char (1- end)))))
+       (set-text-properties (plist-get form :start) (plist-get form :end)
+                            properties)
+       (let ((value (buffer-substring-no-properties
+                     (eww-beginning-of-field)
+                     (eww-end-of-field))))
+         (when (string-match " +\\'" value)
+           (setq value (substring value 0 (match-beginning 0))))
+         (plist-put form :value value)
+         (when (equal type "password")
+           ;; Display passwords as asterisks.
+           (let ((start (eww-beginning-of-field)))
+             (put-text-property start (+ start (length value))
+                                'display (make-string (length value) 
?*)))))))))
+
+(defun eww-tag-textarea (dom)
   (let ((start (point))
-       (value (or (cdr (assq :value cont)) ""))
-       (lines (string-to-number
-               (or (cdr (assq :rows cont))
-                   "10")))
-       (width (string-to-number
-               (or (cdr (assq :cols cont))
-                   "10")))
+       (value (or (dom-attr dom 'value) ""))
+       (lines (string-to-number (or (dom-attr dom 'rows) "10")))
+       (width (string-to-number (or (dom-attr dom 'cols) "10")))
        end)
     (shr-ensure-newline)
     (insert value)
     (shr-ensure-newline)
     (when (< (count-lines start (point)) lines)
-      (dotimes (i (- lines (count-lines start (point))))
+      (dotimes (_ (- lines (count-lines start (point))))
        (insert "\n")))
     (setq end (point-marker))
     (goto-char start)
@@ -928,23 +1069,22 @@ See URL 
`https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
                       (list :eww-form eww-form
                             :value value
                             :type "textarea"
-                            :name (cdr (assq :name cont))))))
+                            :name (dom-attr dom 'name)))))
 
-(defun eww-tag-input (cont)
-  (let ((type (downcase (or (cdr (assq :type cont))
-                            "text")))
+(defun eww-tag-input (dom)
+  (let ((type (downcase (or (dom-attr dom 'type) "text")))
        (start (point)))
     (cond
      ((or (equal type "checkbox")
          (equal type "radio"))
-      (eww-form-checkbox cont))
+      (eww-form-checkbox dom))
      ((equal type "file")
-      (eww-form-file cont))
+      (eww-form-file dom))
      ((equal type "submit")
-      (eww-form-submit cont))
+      (eww-form-submit dom))
      ((equal type "hidden")
       (let ((form eww-form)
-           (name (cdr (assq :name cont))))
+           (name (dom-attr dom 'name)))
        ;; Don't add <input type=hidden> elements repeatedly.
        (while (and form
                    (or (not (consp (car form)))
@@ -956,34 +1096,33 @@ See URL 
`https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
          (nconc eww-form (list
                           (list 'hidden
                                 :name name
-                                :value (cdr (assq :value cont))))))))
+                                :value (dom-attr dom 'value)))))))
      (t
-      (eww-form-text cont)))
+      (eww-form-text dom)))
     (unless (= start (point))
       (put-text-property start (1+ start) 'help-echo "Input field"))))
 
-(defun eww-tag-select (cont)
+(defun eww-tag-select (dom)
   (shr-ensure-paragraph)
-  (let ((menu (list :name (cdr (assq :name cont))
+  (let ((menu (list :name (dom-attr dom 'name)
                    :eww-form eww-form))
        (options nil)
        (start (point))
        (max 0)
        opelem)
-    (if (eq (car (car cont)) 'optgroup)
-       (dolist (groupelem cont)
-         (unless (cdr (assq :disabled (cdr groupelem)))
-           (setq opelem (append opelem (cdr (cdr groupelem))))))
-      (setq opelem cont))
+    (if (eq (dom-tag dom) 'optgroup)
+       (dolist (groupelem (dom-children dom))
+         (unless (dom-attr groupelem 'disabled)
+           (setq opelem (append opelem (list groupelem)))))
+      (setq opelem (list dom)))
     (dolist (elem opelem)
-      (when (eq (car elem) 'option)
-       (when (cdr (assq :selected (cdr elem)))
-         (nconc menu (list :value
-                           (cdr (assq :value (cdr elem))))))
-       (let ((display (or (cdr (assq 'text (cdr elem))) "")))
+      (when (eq (dom-tag elem) 'option)
+       (when (dom-attr elem 'selected)
+         (nconc menu (list :value (dom-attr elem 'value))))
+       (let ((display (dom-text elem)))
          (setq max (max max (length display)))
          (push (list 'item
-                     :value (cdr (assq :value (cdr elem)))
+                     :value (dom-attr elem 'value)
                      :display display)
                options))))
     (when options
@@ -1087,6 +1226,18 @@ See URL 
`https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
        (setq start (next-single-property-change start 'eww-form))))
     (nreverse inputs)))
 
+(defun eww-size-text-inputs ()
+  (let ((start (point-min)))
+    (while (and start
+               (< start (point-max)))
+      (when (or (get-text-property start 'eww-form)
+               (setq start (next-single-property-change start 'eww-form)))
+       (let ((props (get-text-property start 'eww-form)))
+         (plist-put props :start start)
+         (setq start (next-single-property-change
+                      start 'eww-form nil (point-max)))
+         (plist-put props :end start))))))
+
 (defun eww-input-value (input)
   (let ((type (plist-get input :type))
        (value (plist-get input :value)))
@@ -1183,8 +1334,7 @@ See URL 
`https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
       (eww-browse-url
        (concat
        (if (cdr (assq :action form))
-           (shr-expand-url (cdr (assq :action form))
-                           (plist-get eww-data :url))
+           (shr-expand-url (cdr (assq :action form)) (plist-get eww-data :url))
          (plist-get eww-data :url))
        "?"
        (mm-url-encode-www-form-urlencoded values))))))
@@ -1197,7 +1347,8 @@ The browser to used is specified by the 
`shr-external-browser' variable."
 
 (defun eww-follow-link (&optional external mouse-event)
   "Browse the URL under point.
-If EXTERNAL, browse the URL using `shr-external-browser'."
+If EXTERNAL is single prefix, browse the URL using `shr-external-browser'.
+If EXTERNAL is double prefix, browse in new buffer."
   (interactive (list current-prefix-arg last-nonmenu-event))
   (mouse-set-point mouse-event)
   (let ((url (get-text-property (point) 'shr-url)))
@@ -1206,16 +1357,16 @@ If EXTERNAL, browse the URL using 
`shr-external-browser'."
       (message "No link under point"))
      ((string-match "^mailto:"; url)
       (browse-url-mail url))
-     (external
+     ((and (consp external) (<= (car external) 4))
       (funcall shr-external-browser url))
      ;; This is a #target url in the same page as the current one.
      ((and (url-target (url-generic-parse-url url))
           (eww-same-page-p url (plist-get eww-data :url)))
-      (eww-save-history)
-      (eww-display-html 'utf-8 url (plist-get eww-data :url)
-                       nil (current-buffer)))
+      (let ((dom (plist-get eww-data :dom)))
+       (eww-save-history)
+       (eww-display-html 'utf-8 url dom nil (current-buffer))))
      (t
-      (eww-browse-url url)))))
+      (eww-browse-url url external)))))
 
 (defun eww-same-page-p (url1 url2)
   "Return non-nil if both URLs represent the same page.
@@ -1227,6 +1378,7 @@ Differences in #targets are ignored."
     (equal (url-recreate-url obj1) (url-recreate-url obj2))))
 
 (defun eww-copy-page-url ()
+  "Copy the URL of the current page into the kill ring."
   (interactive)
   (message "%s" (plist-get eww-data :url))
   (kill-new (plist-get eww-data :url)))
@@ -1266,29 +1418,35 @@ Differences in #targets are ignored."
        (setq count (1+ count)))
       (expand-file-name file directory)))
 
+(defun eww-set-character-encoding (charset)
+  "Set character encoding."
+  (interactive "zUse character set (default utf-8): ")
+  (if (null charset)
+      (eww-reload nil 'utf-8)
+    (eww-reload nil charset)))
+
 ;;; Bookmarks code
 
 (defvar eww-bookmarks nil)
 
 (defun eww-add-bookmark ()
-  "Add the current page to the bookmarks."
+  "Bookmark the current page."
   (interactive)
   (eww-read-bookmarks)
   (dolist (bookmark eww-bookmarks)
     (when (equal (plist-get eww-data :url) (plist-get bookmark :url))
       (user-error "Already bookmarked")))
-  (if (y-or-n-p "bookmark this page? ")
-      (progn
-       (let ((title (replace-regexp-in-string "[\n\t\r]" " "
-                                              (plist-get eww-data :url))))
-         (setq title (replace-regexp-in-string "\\` +\\| +\\'" "" title))
-         (push (list :url (plist-get eww-data :url)
-                     :title title
-                     :time (current-time-string))
-               eww-bookmarks))
-       (eww-write-bookmarks)
-       (message "Bookmarked %s (%s)" (plist-get eww-data :url)
-                (plist-get eww-data :title)))))
+  (when (y-or-n-p "Bookmark this page?")
+    (let ((title (replace-regexp-in-string "[\n\t\r]" " "
+                                          (plist-get eww-data :title))))
+      (setq title (replace-regexp-in-string "\\` +\\| +\\'" "" title))
+      (push (list :url (plist-get eww-data :url)
+                 :title title
+                 :time (current-time-string))
+           eww-bookmarks))
+    (eww-write-bookmarks)
+    (message "Bookmarked %s (%s)" (plist-get eww-data :url)
+            (plist-get eww-data :title))))
 
 (defun eww-write-bookmarks ()
   (with-temp-file (expand-file-name "eww-bookmarks" eww-bookmarks-directory)
@@ -1316,19 +1474,18 @@ Differences in #targets are ignored."
     (user-error "No bookmarks are defined"))
   (set-buffer (get-buffer-create "*eww bookmarks*"))
   (eww-bookmark-mode)
-  (let ((format "%-40s %s")
-       (inhibit-read-only t)
-       start url)
+  (let* ((width (/ (window-width) 2))
+        (format (format "%%-%ds %%s" width))
+        (inhibit-read-only t)
+        start title)
     (erase-buffer)
-    (setq header-line-format (concat " " (format format "URL" "Title")))
+    (setq header-line-format (concat " " (format format "Title" "URL")))
     (dolist (bookmark eww-bookmarks)
-      (setq start (point))
-      (setq url (plist-get bookmark :url))
-      (when (> (length url) 40)
-       (setq url (substring url 0 40)))
-      (insert (format format url
-                     (plist-get bookmark :title))
-             "\n")
+      (setq start (point)
+           title (plist-get bookmark :title))
+      (when (> (length title) width)
+       (setq title (substring title 0 width)))
+      (insert (format format title (plist-get bookmark :url)) "\n")
       (put-text-property start (1+ start) 'eww-bookmark bookmark))
     (goto-char (point-min))))
 
@@ -1452,17 +1609,22 @@ Differences in #targets are ignored."
   (setq eww-data (list :title ""))
   ;; Don't let the history grow infinitely.  We store quite a lot of
   ;; data per page.
-  (when-let (tail (nthcdr 50 eww-history))
+  (when-let (tail (and eww-history-limit
+                      (nthcdr eww-history-limit eww-history)))
     (setcdr tail nil)))
 
+(defvar eww-current-buffer)
+
 (defun eww-list-histories ()
   "List the eww-histories."
   (interactive)
   (when (null eww-history)
     (error "No eww-histories are defined"))
-  (let ((eww-history-trans eww-history))
+  (let ((eww-history-trans eww-history)
+       (buffer (current-buffer)))
     (set-buffer (get-buffer-create "*eww history*"))
     (eww-history-mode)
+    (setq-local eww-current-buffer buffer)
     (let ((inhibit-read-only t)
          (domain-length 0)
          (title-length 0)
@@ -1491,7 +1653,10 @@ Differences in #targets are ignored."
   (let ((history (get-text-property (line-beginning-position) 'eww-history)))
     (unless history
       (error "No history on the current line"))
-    (quit-window)
+    (let ((buffer eww-current-buffer))
+      (quit-window)
+      (when buffer
+       (switch-to-buffer buffer)))
     (eww-restore-history history)))
 
 (defvar eww-history-mode-map
@@ -1518,6 +1683,223 @@ Differences in #targets are ignored."
   (setq buffer-read-only t
        truncate-lines t))
 
+;;; eww buffers list
+
+(defun eww-list-buffers ()
+  "Enlist eww buffers."
+  (interactive)
+  (let (buffers-info
+        (current (current-buffer)))
+    (dolist (buffer (buffer-list))
+      (with-current-buffer buffer
+        (when (derived-mode-p 'eww-mode)
+          (push (vector buffer (plist-get eww-data :title)
+                        (plist-get eww-data :url))
+                buffers-info))))
+    (unless buffers-info
+      (error "No eww buffers"))
+    (setq buffers-info (nreverse buffers-info)) ;more recent on top
+    (set-buffer (get-buffer-create "*eww buffers*"))
+    (eww-buffers-mode)
+    (let ((inhibit-read-only t)
+          (domain-length 0)
+          (title-length 0)
+          url title format start)
+      (erase-buffer)
+      (dolist (buffer-info buffers-info)
+        (setq title-length (max title-length
+                                (length (elt buffer-info 1)))
+              domain-length (max domain-length
+                                 (length (elt buffer-info 2)))))
+      (setq format (format "%%-%ds %%-%ds" title-length domain-length)
+            header-line-format
+            (concat " " (format format "Title" "URL")))
+      (let ((line 0)
+            (current-buffer-line 1))
+        (dolist (buffer-info buffers-info)
+          (setq start (point)
+                title (elt buffer-info 1)
+                url (elt buffer-info 2)
+                line (1+ line))
+          (insert (format format title url))
+          (insert "\n")
+          (let ((buffer (elt buffer-info 0)))
+            (put-text-property start (1+ start) 'eww-buffer
+                               buffer)
+            (when (eq current buffer)
+              (setq current-buffer-line line))))
+        (goto-char (point-min))
+        (forward-line (1- current-buffer-line)))))
+  (pop-to-buffer "*eww buffers*"))
+
+(defun eww-buffer-select ()
+  "Switch to eww buffer."
+  (interactive)
+  (let ((buffer (get-text-property (line-beginning-position)
+                                   'eww-buffer)))
+    (unless buffer
+      (error "No buffer on current line"))
+    (quit-window)
+    (switch-to-buffer buffer)))
+
+(defun eww-buffer-show ()
+  "Display buffer under point in eww buffer list."
+  (let ((buffer (get-text-property (line-beginning-position)
+                                   'eww-buffer)))
+    (unless buffer
+      (error "No buffer on current line"))
+    (other-window -1)
+    (switch-to-buffer buffer)
+    (other-window 1)))
+
+(defun eww-buffer-show-next ()
+  "Move to next eww buffer in the list and display it."
+  (interactive)
+  (forward-line)
+  (when (eobp)
+    (goto-char (point-min)))
+  (eww-buffer-show))
+
+(defun eww-buffer-show-previous ()
+  "Move to previous eww buffer in the list and display it."
+  (interactive)
+  (beginning-of-line)
+  (when (bobp)
+    (goto-char (point-max)))
+  (forward-line -1)
+  (eww-buffer-show))
+
+(defun eww-buffer-kill ()
+  "Kill buffer from eww list."
+  (interactive)
+  (let* ((start (line-beginning-position))
+        (buffer (get-text-property start 'eww-buffer))
+        (inhibit-read-only t))
+    (unless buffer
+      (user-error "No buffer on the current line"))
+    (kill-buffer buffer)
+    (forward-line 1)
+    (delete-region start (point)))
+  (when (eobp)
+    (forward-line -1))
+  (eww-buffer-show))
+
+(defvar eww-buffers-mode-map
+  (let ((map (make-sparse-keymap)))
+    (suppress-keymap map)
+    (define-key map "q" 'quit-window)
+    (define-key map [(control k)] 'eww-buffer-kill)
+    (define-key map "\r" 'eww-buffer-select)
+    (define-key map "n" 'eww-buffer-show-next)
+    (define-key map "p" 'eww-buffer-show-previous)
+
+    (easy-menu-define nil map
+      "Menu for `eww-buffers-mode-map'."
+      '("Eww Buffers"
+        ["Exit" quit-window t]
+        ["Select" eww-buffer-select
+         :active (get-text-property (line-beginning-position) 'eww-buffer)]
+        ["Kill" eww-buffer-kill
+         :active (get-text-property (line-beginning-position) 'eww-buffer)]))
+    map))
+
+(define-derived-mode eww-buffers-mode nil "eww buffers"
+  "Mode for listing buffers.
+
+\\{eww-buffers-mode-map}"
+  (buffer-disable-undo)
+  (setq buffer-read-only t
+       truncate-lines t))
+
+;;; Desktop support
+
+(defvar eww-desktop-data-save
+  '(:url :title :point)
+  "List of `eww-data' properties to preserve in the desktop file.
+Also used when saving `eww-history'.")
+
+(defun eww-desktop-data-1 (alist)
+  (let ((acc  nil)
+        (tail alist))
+    (while tail
+      (let ((k (car  tail))
+            (v (cadr tail)))
+        (when (memq k eww-desktop-data-save)
+          (setq acc (cons k (cons v acc)))))
+      (setq tail  (cddr tail)))
+    acc))
+
+(defun eww-desktop-history-duplicate (a b)
+  (let ((tail a) (r t))
+    (while tail
+      (if (or (memq (car tail) '(:point)) ; ignore :point
+             (equal (cadr tail)
+                    (plist-get b (car tail))))
+         (setq tail (cddr tail))
+       (setq tail nil
+             r    nil)))
+    ;; .
+    r))
+
+(defun eww-desktop-misc-data (_directory)
+  "Return a property list with data used to restore eww buffers.
+This list will contain, as :history, the list, whose first element is
+the value of `eww-data', and the tail is `eww-history'.
+
+If `eww-desktop-remove-duplicates' is non-nil, duplicate
+entries (if any) will be removed from the list.
+
+Only the properties listed in `eww-desktop-data-save' are included.
+Generally, the list should not include the (usually overly large)
+:dom, :source and :text properties."
+  (let ((history  (mapcar 'eww-desktop-data-1
+                         (cons eww-data eww-history))))
+    (list :history  (if eww-desktop-remove-duplicates
+                       (cl-remove-duplicates
+                        history :test 'eww-desktop-history-duplicate)
+                     history))))
+
+(defun eww-restore-desktop (file-name buffer-name misc-data)
+  "Restore an eww buffer from its desktop file record.
+If `eww-restore-desktop' is t or 'auto, this function will also
+initiate the retrieval of the respective URI in the background.
+Otherwise, the restored buffer will contain a prompt to do so by using
+\\[eww-reload]."
+  (with-current-buffer (get-buffer-create buffer-name)
+    (eww-mode)
+    ;; NB: eww-history, eww-data are buffer-local per (eww-mode)
+    (setq eww-history       (cdr (plist-get misc-data :history))
+         eww-data      (or (car (plist-get misc-data :history))
+                           ;; backwards compatibility
+                           (list :url (plist-get misc-data :uri))))
+    (unless file-name
+      (when (plist-get eww-data :url)
+       (case eww-restore-desktop
+         ((t auto) (eww (plist-get eww-data :url)))
+         ((zerop (buffer-size))
+          (insert (substitute-command-keys
+                   eww-restore-reload-prompt))))))
+    ;; .
+    (current-buffer)))
+
+(add-to-list 'desktop-locals-to-save
+            'eww-history-position)
+(add-to-list 'desktop-buffer-mode-handlers
+             '(eww-mode . eww-restore-desktop))
+
+;;; Isearch support
+
+(defun eww-isearch-next-buffer (&optional _buffer wrap)
+  "Go to the next page to search using `rel' attribute for navigation."
+  (if wrap
+      (condition-case nil
+         (eww-top-url)
+       (error nil))
+    (if isearch-forward
+       (eww-next-url)
+      (eww-previous-url)))
+  (current-buffer))
+
 (provide 'eww)
 
 ;;; eww.el ends here
diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el
index 3ad92c4..235b2a2 100644
--- a/lisp/net/gnutls.el
+++ b/lisp/net/gnutls.el
@@ -1,6 +1,6 @@
 ;;; gnutls.el --- Support SSL/TLS connections through GnuTLS
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <address@hidden>
 ;; Keywords: comm, tls, ssl, encryption
@@ -41,7 +41,7 @@
   "Emacs interface to the GnuTLS library."
   :version "24.1"
   :prefix "gnutls-"
-  :group 'net-utils)
+  :group 'comm)
 
 (defcustom gnutls-algorithm-priority nil
   "If non-nil, this should be a TLS priority string.
@@ -189,6 +189,9 @@ here's a recent version of the list.
 It must be omitted, a number, or nil; if omitted or nil it
 defaults to GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT."
   (let* ((type (or type 'gnutls-x509pki))
+        ;; The gnutls library doesn't understand files delivered via
+        ;; the special handlers, so ignore all files found via those.
+        (file-name-handler-alist nil)
          (trustfiles (or trustfiles
                          (delq nil
                                (mapcar (lambda (f) (and f (file-exists-p f) f))
diff --git a/lisp/net/goto-addr.el b/lisp/net/goto-addr.el
index f076cb9..51d8ed1 100644
--- a/lisp/net/goto-addr.el
+++ b/lisp/net/goto-addr.el
@@ -1,6 +1,6 @@
 ;;; goto-addr.el --- click to browse URL or to send to e-mail address
 
-;; Copyright (C) 1995, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Ding <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/net/hmac-def.el b/lisp/net/hmac-def.el
index 41d44b9..2855fa4 100644
--- a/lisp/net/hmac-def.el
+++ b/lisp/net/hmac-def.el
@@ -1,6 +1,6 @@
 ;;; hmac-def.el --- A macro for defining HMAC functions.
 
-;; Copyright (C) 1999, 2001, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Shuhei KOBAYASHI <address@hidden>
 ;; Keywords: HMAC, RFC2104
diff --git a/lisp/net/hmac-md5.el b/lisp/net/hmac-md5.el
index ed7aa86..26f448f 100644
--- a/lisp/net/hmac-md5.el
+++ b/lisp/net/hmac-md5.el
@@ -1,6 +1,6 @@
 ;;; hmac-md5.el --- Compute HMAC-MD5.
 
-;; Copyright (C) 1999, 2001, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Shuhei KOBAYASHI <address@hidden>
 ;; Keywords: HMAC, RFC2104, HMAC-MD5, MD5, KEYED-MD5, CRAM-MD5
diff --git a/lisp/net/imap.el b/lisp/net/imap.el
index cf19e6c..3e59823 100644
--- a/lisp/net/imap.el
+++ b/lisp/net/imap.el
@@ -1,6 +1,6 @@
 ;;; imap.el --- imap library
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Keywords: mail
diff --git a/lisp/net/ldap.el b/lisp/net/ldap.el
index 10ce7a7..a77fc3c 100644
--- a/lisp/net/ldap.el
+++ b/lisp/net/ldap.el
@@ -1,6 +1,6 @@
 ;;; ldap.el --- client interface to LDAP for Emacs
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <address@hidden>
 ;; Maintainer: address@hidden
@@ -34,6 +34,7 @@
 ;;; Code:
 
 (require 'custom)
+(require 'password-cache)
 
 (autoload 'auth-source-search "auth-source")
 
@@ -47,15 +48,13 @@
 A TCP port number can be appended to that name using a colon as
 a separator."
   :type '(choice (string :tag "Host name")
-                (const :tag "Use library default" nil))
-  :group 'ldap)
+                (const :tag "Use library default" nil)))
 
 (defcustom ldap-default-port nil
   "Default TCP port for LDAP connections.
 Initialized from the LDAP library at build time. Default value is 389."
   :type '(choice (const :tag "Use library default" nil)
-                (integer :tag "Port number"))
-  :group 'ldap)
+                (integer :tag "Port number")))
 
 (defcustom ldap-default-base nil
   "Default base for LDAP searches.
@@ -63,8 +62,7 @@ This is a string using the syntax of RFC 1779.
 For instance, \"o=ACME, c=US\" limits the search to the
 Acme organization in the United States."
   :type '(choice (const :tag "Use library default" nil)
-                (string :tag "Search base"))
-  :group 'ldap)
+                (string :tag "Search base")))
 
 
 (defcustom ldap-host-parameters-alist nil
@@ -144,35 +142,35 @@ Valid properties include:
                                   :tag "Size Limit"
                                   :inline t
                                   (const :tag "Size Limit" sizelimit)
-                                  (integer :tag "(number of records)")))))
-  :group 'ldap)
+                                  (integer :tag "(number of records)"))))))
 
 (defcustom ldap-ldapsearch-prog "ldapsearch"
   "The name of the ldapsearch command line program."
-  :type '(string :tag "`ldapsearch' Program")
-  :group 'ldap)
+  :type '(string :tag "`ldapsearch' Program"))
 
 (defcustom ldap-ldapsearch-args '("-LL" "-tt")
   "A list of additional arguments to pass to `ldapsearch'."
   :type '(repeat :tag "`ldapsearch' Arguments"
-                (string :tag "Argument"))
-  :group 'ldap)
+                (string :tag "Argument")))
+
+(defcustom ldap-ldapsearch-password-prompt-regexp "Enter LDAP Password: "
+  "A regular expression used to recognize the `ldapsearch'
+program's password prompt."
+  :type 'regexp
+  :version "25.1")
 
 (defcustom ldap-ignore-attribute-codings nil
   "If non-nil, do not encode/decode LDAP attribute values."
-  :type 'boolean
-  :group 'ldap)
+  :type 'boolean)
 
 (defcustom ldap-default-attribute-decoder nil
   "Decoder function to use for attributes whose syntax is unknown."
-  :type 'symbol
-  :group 'ldap)
+  :type 'symbol)
 
 (defcustom ldap-coding-system 'utf-8
   "Coding system of LDAP string values.
 LDAP v3 specifies the coding system of strings to be UTF-8."
-  :type 'symbol
-  :group 'ldap)
+  :type 'symbol)
 
 (defvar ldap-attribute-syntax-encoders
   [nil                                 ; 1  ACI Item                        N
@@ -476,6 +474,47 @@ Additional search parameters can be specified through
                (mapcar 'ldap-decode-attribute record))
              result))))
 
+(defun ldap-password-read (host)
+  "Read LDAP password for HOST.
+If the password is cached, it is read from the cache, otherwise the user
+is prompted for the password.  If `password-cache' is non-nil the password
+is verified and cached.  The `password-cache-expiry' variable
+controls for how long the password is cached.
+
+This function can be specified for the `passwd' property in
+`ldap-host-parameters-alist' when interactive password prompting
+is desired for HOST."
+  ;; Add ldap: namespace to allow empty string for default host.
+  (let* ((host-key (concat "ldap:" host))
+        (password (password-read
+                   (format "Enter LDAP Password%s: "
+                           (if (equal host "")
+                               ""
+                             (format " for %s" host)))
+                   host-key)))
+    (when (and password-cache
+              (not (password-in-cache-p host-key))
+              ;; Confirm the password is valid before adding it to
+              ;; the password cache.  ldap-search-internal will throw
+              ;; an error if the password is invalid.
+              (not (ldap-search-internal
+                    `(host ,host
+                           ;; Specify an arbitrary filter that should
+                           ;; produce no results, since only
+                           ;; authentication success is of interest.
+                           filter "emacs-test-password="
+                           attributes nil
+                           attrsonly nil
+                           withdn nil
+                           ;; Preempt passwd ldap-password-read
+                           ;; setting in ldap-host-parameters-alist.
+                           passwd ,password
+                           ,@(cdr
+                              (assoc
+                               host
+                               ldap-host-parameters-alist))))))
+      (password-cache-add host-key password))
+    password))
 
 (defun ldap-search-internal (search-plist)
   "Perform a search on a LDAP server.
@@ -531,7 +570,11 @@ an alist of attribute/value pairs."
          (passwd (or (plist-get search-plist 'passwd)
                      (plist-get asfound :secret)))
          ;; convert the password from a function call if needed
-         (passwd (if (functionp passwd) (funcall passwd) passwd))
+         (passwd (if (functionp passwd)
+                    (if (eq passwd 'ldap-password-read)
+                        (funcall passwd host)
+                      (funcall passwd))
+                  passwd))
          ;; get the binddn from the search-list or from the
          ;; auth-source user or binddn tokens
          (binddn (or (plist-get search-plist 'binddn)
@@ -550,7 +593,7 @@ an alist of attribute/value pairs."
        (sizelimit (plist-get search-plist 'sizelimit))
        (withdn (plist-get search-plist 'withdn))
        (numres 0)
-       arglist dn name value record result)
+       arglist dn name value record result proc)
     (if (or (null filter)
            (equal "" filter))
        (error "No search filter"))
@@ -559,7 +602,13 @@ an alist of attribute/value pairs."
       (erase-buffer)
       (if (and host
               (not (equal "" host)))
-         (setq arglist (nconc arglist (list (format "-h%s" host)))))
+         (setq arglist (nconc arglist
+                              (list (format
+                                     ;; Use -H if host is a new-style LDAP URI.
+                                     (if (string-match "^[a-zA-Z]+://" host)
+                                         "-H%s"
+                                       "-h%s")
+                                     host)))))
       (if (and attrsonly
               (not (equal "" attrsonly)))
          (setq arglist (nconc arglist (list "-A"))))
@@ -575,9 +624,9 @@ an alist of attribute/value pairs."
       (if (and auth
               (equal 'simple auth))
          (setq arglist (nconc arglist (list "-x"))))
-      (if (and passwd
-              (not (equal "" passwd)))
-         (setq arglist (nconc arglist (list (format "-w%s" passwd)))))
+      ;; Allow passwd to be set to "", representing a blank password.
+      (if passwd
+         (setq arglist (nconc arglist (list "-W"))))
       (if (and deref
               (not (equal "" deref)))
          (setq arglist (nconc arglist (list (format "-a%s" deref)))))
@@ -587,14 +636,43 @@ an alist of attribute/value pairs."
       (if (and sizelimit
               (not (equal "" sizelimit)))
          (setq arglist (nconc arglist (list (format "-z%s" sizelimit)))))
-      (apply #'call-process ldap-ldapsearch-prog
-            ;; Ignore stderr, which can corrupt results
-            nil (list buf nil) nil
-            (append arglist ldap-ldapsearch-args filter))
+      (if passwd
+         (let* ((process-connection-type nil)
+                (proc-args (append arglist ldap-ldapsearch-args
+                                   filter))
+                (proc (apply #'start-process "ldapsearch" buf
+                             ldap-ldapsearch-prog
+                             proc-args)))
+           (while (null (progn
+                          (goto-char (point-min))
+                          (re-search-forward
+                           ldap-ldapsearch-password-prompt-regexp
+                           (point-max) t)))
+             (accept-process-output proc 1))
+           (process-send-string proc passwd)
+           (process-send-string proc "\n")
+           (while (not (memq (process-status proc) '(exit signal)))
+             (sit-for 0.1))
+           (let ((status (process-exit-status proc)))
+             (when (not (eq status 0))
+               ;; Handle invalid credentials exit status specially
+               ;; for ldap-password-read.
+               (if (eq status 49)
+                   (error (concat "Incorrect LDAP password or"
+                                  " bind distinguished name (binddn)"))
+                 (error "Failed ldapsearch invocation: %s \"%s\""
+                        ldap-ldapsearch-prog
+                        (mapconcat 'identity proc-args "\" \""))))))
+       (apply #'call-process ldap-ldapsearch-prog
+              ;; Ignore stderr, which can corrupt results
+              nil (list buf nil) nil
+              (append arglist ldap-ldapsearch-args filter)))
       (insert "\n")
       (goto-char (point-min))
 
-      (while (re-search-forward "[\t\n\f]+ " nil t)
+      (while (re-search-forward (concat "[\t\n\f]+ \\|"
+                                       ldap-ldapsearch-password-prompt-regexp)
+                               nil t)
        (replace-match "" nil nil))
       (goto-char (point-min))
 
diff --git a/lisp/net/mairix.el b/lisp/net/mairix.el
index 181ab51..c1b1079 100644
--- a/lisp/net/mairix.el
+++ b/lisp/net/mairix.el
@@ -1,6 +1,6 @@
 ;;; mairix.el --- Mairix interface for Emacs
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: David Engster <address@hidden>
 ;; Keywords: mail searching
diff --git a/lisp/net/net-utils.el b/lisp/net/net-utils.el
index 580a3b7..ebcbc71 100644
--- a/lisp/net/net-utils.el
+++ b/lisp/net/net-utils.el
@@ -1,6 +1,6 @@
 ;;; net-utils.el --- network functions
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author:  Peter Breton <address@hidden>
 ;; Created: Sun Mar 16 1997
@@ -328,7 +328,15 @@ This variable is only used if the variable
 
 (defun net-utils-run-program (name header program args)
   "Run a network information program."
-  (let ((buf (get-buffer-create (concat "*" name "*"))))
+  (let ((buf (get-buffer-create (concat "*" name "*")))
+       (coding-system-for-read
+        ;; MS-Windows versions of network utilities output text
+        ;; encoded in the console (a.k.a. "OEM") codepage, which is
+        ;; different from the default system (a.k.a. "ANSI")
+        ;; codepage.
+        (if (eq system-type 'windows-nt)
+            (intern (format "cp%d" (w32-get-console-output-codepage)))
+          coding-system-for-read)))
     (set-buffer buf)
     (erase-buffer)
     (insert header "\n")
@@ -352,7 +360,15 @@ This variable is only used if the variable
       (when proc
         (set-process-filter proc nil)
         (delete-process proc)))
-    (let ((inhibit-read-only t))
+    (let ((inhibit-read-only t)
+       (coding-system-for-read
+        ;; MS-Windows versions of network utilities output text
+        ;; encoded in the console (a.k.a. "OEM") codepage, which is
+        ;; different from the default system (a.k.a. "ANSI")
+        ;; codepage.
+        (if (eq system-type 'windows-nt)
+            (intern (format "cp%d" (w32-get-console-output-codepage)))
+          coding-system-for-read)))
       (erase-buffer))
     (net-utils-mode)
     (setq-local net-utils--revert-cmd
diff --git a/lisp/net/netrc.el b/lisp/net/netrc.el
index bdeed03..61da85c 100644
--- a/lisp/net/netrc.el
+++ b/lisp/net/netrc.el
@@ -1,5 +1,5 @@
 ;;; netrc.el --- .netrc parsing functionality
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: news
diff --git a/lisp/net/network-stream.el b/lisp/net/network-stream.el
index 28e9d0c..e7b3150 100644
--- a/lisp/net/network-stream.el
+++ b/lisp/net/network-stream.el
@@ -1,6 +1,6 @@
 ;;; network-stream.el --- open network processes, possibly with encryption
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: network
@@ -45,6 +45,7 @@
 (require 'tls)
 (require 'starttls)
 (require 'auth-source)
+(require 'nsm)
 
 (autoload 'gnutls-negotiate "gnutls")
 (autoload 'open-gnutls-stream "gnutls")
@@ -128,11 +129,14 @@ values:
 :use-starttls-if-possible is a boolean that says to do opportunistic
 STARTTLS upgrades even if Emacs doesn't have built-in TLS functionality.
 
+:warn-unless-encrypted is a boolean which, if :return-list is
+non-nil, is used warn the user if the connection isn't encrypted.
+
 :nogreeting is a boolean that can be used to inhibit waiting for
 a greeting from the server.
 
 :nowait is a boolean that says the connection should be made
-  asynchronously, if possible."
+asynchronously, if possible."
   (unless (featurep 'make-network-process)
     (error "Emacs was compiled without networking support"))
   (let ((type (plist-get parameters :type))
@@ -196,6 +200,8 @@ a greeting from the server.
        (stream (make-network-process :name name :buffer buffer
                                      :host host :service service
                                      :nowait (plist-get parameters :nowait))))
+    (when (plist-get parameters :warn-unless-encrypted)
+      (setq stream (nsm-verify-connection stream host service nil t)))
     (list stream
          (network-stream-get-response stream start
                                       (plist-get parameters :end-of-command))
@@ -219,8 +225,6 @@ a greeting from the server.
         (capabilities (network-stream-command stream capability-command
                                               eo-capa))
         (resulting-type 'plain)
-        (builtin-starttls (and (fboundp 'gnutls-available-p)
-                               (gnutls-available-p)))
         starttls-available starttls-command error)
 
     ;; First check whether the server supports STARTTLS at all.
@@ -231,14 +235,14 @@ a greeting from the server.
     ;; connection.
     (when (and starttls-command
               (setq starttls-available
-                    (or builtin-starttls
+                    (or (gnutls-available-p)
                         (and (or require-tls
                                  (plist-get parameters 
:use-starttls-if-possible))
                              (starttls-available-p))))
               (not (eq (plist-get parameters :type) 'plain)))
       ;; If using external STARTTLS, drop this connection and start
       ;; anew with `starttls-open-stream'.
-      (unless builtin-starttls
+      (unless (gnutls-available-p)
        (delete-process stream)
        (setq start (with-current-buffer buffer (point-max)))
        (let* ((starttls-extra-arguments
@@ -271,7 +275,7 @@ a greeting from the server.
                   (network-stream-command stream starttls-command eoc)))
              (and response (string-match success-string response)))
        ;; The server said it was OK to begin STARTTLS negotiations.
-       (if builtin-starttls
+       (if (gnutls-available-p)
            (let ((cert (network-stream-certificate host service parameters)))
              (condition-case nil
                  (gnutls-negotiate :process stream :hostname host
@@ -319,6 +323,12 @@ a greeting from the server.
                        "' program was found"))))
       (delete-process stream)
       (setq stream nil))
+    ;; Check certificate validity etc.
+    (when (gnutls-available-p)
+      (setq stream (nsm-verify-connection
+                   stream host service
+                   (eq resulting-type 'tls)
+                   (plist-get parameters :warn-unless-encrypted))))
     ;; Return value:
     (list stream greeting capabilities resulting-type error)))
 
@@ -344,19 +354,20 @@ a greeting from the server.
 (defun network-stream-open-tls (name buffer host service parameters)
   (with-current-buffer buffer
     (let* ((start (point-max))
-          (use-builtin-gnutls (and (fboundp 'gnutls-available-p)
-                                   (gnutls-available-p)))
           (stream
-           (funcall (if use-builtin-gnutls
+           (funcall (if (gnutls-available-p)
                         'open-gnutls-stream
                       'open-tls-stream)
                     name buffer host service))
           (eoc (plist-get parameters :end-of-command)))
+      ;; Check certificate validity etc.
+      (when (and (gnutls-available-p) stream)
+       (setq stream (nsm-verify-connection stream host service)))
       (if (null stream)
          (list nil nil nil 'plain)
        ;; If we're using tls.el, we have to delete the output from
        ;; openssl/gnutls-cli.
-       (when (and (null use-builtin-gnutls)
+       (when (and (not (gnutls-available-p))
                   eoc)
          (network-stream-get-response stream start eoc)
          (goto-char (point-min))
diff --git a/lisp/net/newst-backend.el b/lisp/net/newst-backend.el
index ba10053..5db04eb 100644
--- a/lisp/net/newst-backend.el
+++ b/lisp/net/newst-backend.el
@@ -1,6 +1,6 @@
 ;;; newst-backend.el --- Retrieval backend for newsticker.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <address@hidden>
 ;; Filename:    newst-backend.el
@@ -745,10 +745,14 @@ from."
     (insert result)
     ;; remove MIME header
     (goto-char (point-min))
-    (search-forward "\n\n")
+    (search-forward "\n\n" nil t)
     (delete-region (point-min) (point))
     ;; read the rss/atom contents
-    (newsticker--sentinel-work nil t feed-name "url-retrieve" (current-buffer))
+    (newsticker--sentinel-work nil
+                               (or (not status)
+                                   (not (eq (car status) :error)))
+                               feed-name "url-retrieve"
+                               (current-buffer))
     (when status
       (let ((status-type (car status))
             (status-details (cdr status)))
@@ -831,7 +835,8 @@ Argument COMMAND is the command of the retrieval process.
 Argument BUFFER is the buffer of the retrieval process."
   (let ((time (current-time))
         (name-symbol (intern feed-name))
-        (something-was-added nil))
+        (something-was-added nil)
+        (ct (current-time)))
     ;; catch known errors (zombie processes, rubbish-xml etc.
     ;; if an error occurs the news feed is not updated!
     (catch 'oops
@@ -848,9 +853,10 @@ Argument BUFFER is the buffer of the retrieval process."
                 (format-time-string "%A, %H:%M")
                 feed-name event command)
                ""
-               (current-time)
+               ct
                'new
-               0 nil))
+               0 '((guid nil "newsticker--download-error"))
+               ct))
         (message "%s: Error while retrieving news from %s"
                  (format-time-string "%A, %H:%M")
                  feed-name)
@@ -879,10 +885,11 @@ Argument BUFFER is the buffer of the retrieval process."
                   (decode-coding-region (point-min) (point-max)
                                         coding-system))
                 (condition-case errordata
-                    ;; The xml parser might fail
-                    ;; or the xml might be bugged
+                    ;; The xml parser might fail or the xml might be
+                    ;; bugged
                     (if (fboundp 'libxml-parse-xml-region)
-                        (list (libxml-parse-xml-region (point-min) 
(point-max)))
+                        (list (libxml-parse-xml-region (point-min) (point-max)
+                                                       nil t))
                       (xml-parse-region (point-min) (point-max)))
                   (error (message "Could not parse %s: %s"
                                   (buffer-name) (cadr errordata))
@@ -1215,13 +1222,17 @@ URL 
`http://www.atompub.org/2005/08/17/draft-ietf-atompub-format-11.html'"
                             (car (xml-get-children node 'title)))))
                     ;; desc-fn
                     (lambda (node)
-                      ;; unxml the content node. Atom allows for
-                      ;; integrating (x)html into the atom structure
-                      ;; but we need the raw html string.
+                      ;; unxml the content or the summary node. Atom
+                      ;; allows for integrating (x)html into the atom
+                      ;; structure but we need the raw html string.
                       ;; e.g. http://www.heise.de/open/news/news-atom.xml
-                  (or (newsticker--unxml
+                      ;; http://feeds.feedburner.com/ru_nix_blogs
+                      (or (newsticker--unxml
+                           (car (xml-node-children
+                                 (car (xml-get-children node 'content)))))
+                          (newsticker--unxml
                            (car (xml-node-children
-                                (car (xml-get-children node 'content)))))
+                                 (car (xml-get-children node 'summary)))))
                           (car (xml-node-children
                                 (car (xml-get-children node 'summary))))))
                     ;; link-fn
@@ -1578,11 +1589,16 @@ argument, which is one of the items in ITEMLIST."
                   ;; item was not there
                   (setq item-new-p t)
                   (setq something-was-added t))
-                (setq newsticker--cache
-                      (newsticker--cache-add
-                       newsticker--cache (intern name) title desc link
-                       time age1 position (funcall extra-fn node)
-                       time age2))
+                (let ((extra-elements-with-guid (funcall extra-fn node)))
+                  (unless (assoc 'guid extra-elements-with-guid)
+                     (setq extra-elements-with-guid
+                           (cons `(guid nil ,(funcall guid-fn node))
+                                 extra-elements-with-guid)))
+                    (setq newsticker--cache
+                        (newsticker--cache-add
+                         newsticker--cache (intern name) title desc link
+                         time age1 position extra-elements-with-guid
+                         time age2)))
                 (when item-new-p
                   (let ((item (newsticker--cache-contains
                                newsticker--cache (intern name) title
diff --git a/lisp/net/newst-plainview.el b/lisp/net/newst-plainview.el
index dea24f1..4ab0007 100644
--- a/lisp/net/newst-plainview.el
+++ b/lisp/net/newst-plainview.el
@@ -1,6 +1,6 @@
 ;;; newst-plainview.el --- Single buffer frontend for newsticker.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <address@hidden>
 ;; Filename:    newst-plainview.el
diff --git a/lisp/net/newst-reader.el b/lisp/net/newst-reader.el
index e639ffd..be4179e 100644
--- a/lisp/net/newst-reader.el
+++ b/lisp/net/newst-reader.el
@@ -1,6 +1,6 @@
 ;;; newst-reader.el --- Generic RSS reader functions.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <address@hidden>
 ;; Filename:    newst-reader.el
diff --git a/lisp/net/newst-ticker.el b/lisp/net/newst-ticker.el
index 982bcfc..9426bb7 100644
--- a/lisp/net/newst-ticker.el
+++ b/lisp/net/newst-ticker.el
@@ -1,6 +1,6 @@
 ;; newst-ticker.el --- mode line ticker for newsticker.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <address@hidden>
 ;; Filename:    newst-ticker.el
diff --git a/lisp/net/newst-treeview.el b/lisp/net/newst-treeview.el
index 6d0720d..a964750 100644
--- a/lisp/net/newst-treeview.el
+++ b/lisp/net/newst-treeview.el
@@ -1,6 +1,6 @@
 ;;; newst-treeview.el --- Treeview frontend for newsticker.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <address@hidden>
 ;; Filename:    newst-treeview.el
@@ -132,8 +132,9 @@ Example: (\"Topmost group\" \"feed1\" (\"subgroup1\" \"feed 
2\")
 \"feed3\")")
 
 (defcustom newsticker-groups-filename
-  "~/.newsticker-groups"
-  "Name of the newsticker groups settings file."
+  nil
+  "Name of the newsticker groups settings file.  This variable is obsolete."
+  :version "25.1"                       ; changed default value to nil
   :type 'string
   :group 'newsticker-treeview)
 (make-obsolete-variable 'newsticker-groups-filename 'newsticker-dir "23.1")
@@ -327,7 +328,8 @@ If string SHOW-FEED is non-nil it is shown in the item 
string."
       (while (search-forward "\n" nil t)
         (replace-match " "))
       (let ((map (make-sparse-keymap)))
-        (define-key map [mouse-1] 'newsticker-treeview-tree-click)
+        (dolist (key'([mouse-1] [mouse-3]))
+                    (define-key map key 'newsticker-treeview-tree-click))
         (define-key map "\n" 'newsticker-treeview-show-item)
         (define-key map "\C-m" 'newsticker-treeview-show-item)
         (add-text-properties pos1 (point-max)
@@ -716,7 +718,9 @@ for the button."
       (remove-overlays)
 
       (when (and item feed-name-symbol)
-        (let ((wwidth (1- (window-width (newsticker--treeview-item-window)))))
+        (let ((wwidth (1- (if (window-live-p 
(newsticker--treeview-item-window))
+                              (window-width (newsticker--treeview-item-window))
+                            fill-column))))
           (if newsticker-use-full-width
               (set (make-local-variable 'fill-column) wwidth))
           (set (make-local-variable 'fill-column) (min fill-column
@@ -942,7 +946,8 @@ arguments NT-ID, FEED, and VFEED are added as properties."
         (map (make-sparse-keymap)))
     (if (and num-new (> num-new 0))
         (setq face 'newsticker-treeview-new-face))
-    (define-key map [mouse-1] 'newsticker-treeview-tree-click)
+    (dolist (key '([mouse-1] [mouse-3]))
+                 (define-key map key 'newsticker-treeview-tree-click))
     (define-key map "\n" 'newsticker-treeview-tree-do-click)
     (define-key map "\C-m" 'newsticker-treeview-tree-do-click)
     (propertize tag 'face face 'keymap map
@@ -1259,16 +1264,27 @@ Note: does not update the layout."
   "Load treeview settings."
   (let* ((coding-system-for-read 'utf-8)
          (filename
-          (or (and (file-exists-p newsticker-groups-filename)
+          (or (and newsticker-groups-filename
+                   (not (string=
+                         (expand-file-name newsticker-groups-filename)
+                         (expand-file-name (concat newsticker-dir "/groups"))))
+                   (file-exists-p newsticker-groups-filename)
                    (y-or-n-p
-                    (format "Old newsticker groups (%s) file exists.  Read it? 
"
-                            newsticker-groups-filename))
+                    (format
+                     (concat "Obsolete variable `newsticker-groups-filename' "
+                             "points to existing file \"%s\".\n"
+                             "Read it? ")
+                     newsticker-groups-filename))
                    newsticker-groups-filename)
               (concat newsticker-dir "/groups")))
          (buf (and (file-exists-p filename)
                    (find-file-noselect filename))))
-    (and (file-exists-p newsticker-groups-filename)
-        (y-or-n-p (format "Delete old newsticker groups file? "))
+    (and newsticker-groups-filename
+         (file-exists-p newsticker-groups-filename)
+        (y-or-n-p (format
+                    (concat "Delete the file \"%s\",\nto which the obsolete "
+                            "variable `newsticker-groups-filename' points ? ")
+                    newsticker-groups-filename))
         (delete-file newsticker-groups-filename))
     (when buf
       (set-buffer buf)
@@ -1946,37 +1962,22 @@ Return t if groups have changed, nil otherwise."
 ;; ======================================================================
 ;;; Modes
 ;; ======================================================================
-(defun newsticker--treeview-create-groups-menu (group-list
-                                                excluded-group)
-  "Create menu for GROUP-LIST omitting EXCLUDED-GROUP."
-  (let ((menu (make-sparse-keymap (if (stringp (car group-list))
-                                      (car group-list)
-                                    "Move to group..."))))
-    (mapc (lambda (g)
-            (when (listp g)
-              (let ((title (if (stringp (car g))
-                               (car g)
-                             "Move to group...")))
-                (unless (eq g excluded-group)
-                  (define-key menu (vector (intern title))
-                    (list 'menu-item title
-                          (newsticker--treeview-create-groups-menu
-                           (cdr g) excluded-group)))))))
-          (reverse group-list))
-    menu))
-
-(defun newsticker--treeview-create-tree-menu (feed-name)
-  "Create tree menu for FEED-NAME."
-  (let ((menu (make-sparse-keymap feed-name)))
+(defun newsticker--treeview-tree-open-menu (event)
+  "Open tree menu at position of EVENT."
+  (let* ((feed-name newsticker--treeview-current-feed)
+         (menu (make-sparse-keymap feed-name)))
     (define-key menu [newsticker-treeview-mark-list-items-old]
       (list 'menu-item "Mark all items old"
             'newsticker-treeview-mark-list-items-old))
-    (define-key menu [move]
-      (list 'menu-item "Move to group..."
-            (newsticker--treeview-create-groups-menu
-             newsticker-groups
-             (newsticker--group-get-group feed-name))))
-    menu))
+    (define-key menu [newsticker-treeview-get-news]
+      (list 'menu-item (concat "Get news for " feed-name)
+            'newsticker-treeview-get-news))
+    (define-key menu [newsticker-get-all-news]
+      (list 'menu-item "Get news for all feeds"
+            'newsticker-get-all-news))
+    (let ((choice (x-popup-menu event menu)))
+      (when choice
+        (funcall (car choice))))))
 
 (defvar newsticker-treeview-list-menu
   (let ((menu (make-sparse-keymap "Newsticker List")))
@@ -2085,7 +2086,7 @@ Return t if groups have changed, nil otherwise."
   (newsticker--treeview-restore-layout)
   (save-excursion
     (switch-to-buffer (window-buffer (posn-window (event-end event))))
-    (newsticker-treeview-tree-do-click (posn-point (event-end event)))))
+    (newsticker-treeview-tree-do-click (posn-point (event-end event)) event)))
 
 (defun newsticker-treeview-tree-do-click (&optional pos event)
   "Actually handle click event.
@@ -2105,7 +2106,11 @@ POS gives the position where EVENT occurred."
                (setq w (newsticker--treeview-get-node-by-id nt-id))
                (widget-put w :nt-selected t)
                (widget-apply w :action event)
-               (newsticker--treeview-set-current-node w))))))
+               (newsticker--treeview-set-current-node w)
+               (and event
+                    (eq 'mouse-3 (car event))
+                    (sit-for 0)
+                    (newsticker--treeview-tree-open-menu event)))))))
   (newsticker--treeview-tree-update-highlight))
 
 (defun newsticker--treeview-restore-layout ()
diff --git a/lisp/net/newsticker.el b/lisp/net/newsticker.el
index 630db67..9b16c1f 100644
--- a/lisp/net/newsticker.el
+++ b/lisp/net/newsticker.el
@@ -1,6 +1,6 @@
 ;;; newsticker.el --- A Newsticker for Emacs.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <address@hidden>
 ;; Filename:    newsticker.el
diff --git a/lisp/net/nsm.el b/lisp/net/nsm.el
new file mode 100644
index 0000000..2312e22
--- /dev/null
+++ b/lisp/net/nsm.el
@@ -0,0 +1,502 @@
+;;; nsm.el --- Network Security Manager
+
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <address@hidden>
+;; Keywords: encryption, security, network
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'cl-lib)
+
+(defvar nsm-permanent-host-settings nil)
+(defvar nsm-temporary-host-settings nil)
+
+(defgroup nsm nil
+  "Network Security Manager"
+  :version "25.1"
+  :group 'comm)
+
+(defcustom network-security-level 'medium
+  "How secure the network should be.
+If a potential problem with the security of the network
+connection is found, the user is asked to give input into how the
+connection should be handled.
+
+The following values are possible:
+
+`low': Absolutely no checks are performed.
+`medium': This is the default level, should be reasonable for most usage.
+`high': This warns about additional things that many people would
+not find useful.
+`paranoid': On this level, the user is queried for most new connections.
+
+See the Emacs manual for a description of all things that are
+checked and warned against."
+  :version "25.1"
+  :group 'nsm
+  :type '(choice (const :tag "Low" low)
+                (const :tag "Medium" medium)
+                (const :tag "High" high)
+                (const :tag "Paranoid" paranoid)))
+
+(defcustom nsm-settings-file (expand-file-name "network-security.data"
+                                                user-emacs-directory)
+  "The file the security manager settings will be stored in."
+  :version "25.1"
+  :group 'nsm
+  :type 'file)
+
+(defcustom nsm-save-host-names nil
+  "If non-nil, always save host names in the structures in `nsm-settings-file'.
+By default, only hosts that have exceptions have their names
+stored in plain text."
+  :version "25.1"
+  :group 'nsm
+  :type 'boolean)
+
+(defvar nsm-noninteractive nil
+  "If non-nil, the connection is opened in a non-interactive context.
+This means that no queries should be performed.")
+
+(defun nsm-verify-connection (process host port &optional
+                                     save-fingerprint warn-unencrypted)
+  "Verify the security status of PROCESS that's connected to HOST:PORT.
+If PROCESS is a gnutls connection, the certificate validity will
+be examined.  If it's a non-TLS connection, it may be compared
+against previous connections.  If the function determines that
+there is something odd about the connection, the user will be
+queried about what to do about it.
+
+The process it returned if everything is OK, and otherwise, the
+process will be deleted and nil is returned.
+
+If SAVE-FINGERPRINT, always save the fingerprint of the
+server (if the connection is a TLS connection).  This is useful
+to keep track of the TLS status of STARTTLS servers.
+
+If WARN-UNENCRYPTED, query the user if the connection is
+unencrypted."
+  (if (eq network-security-level 'low)
+      process
+    (let* ((status (gnutls-peer-status process))
+          (id (nsm-id host port))
+          (settings (nsm-host-settings id)))
+      (cond
+       ((not (process-live-p process))
+       nil)
+       ((not status)
+       ;; This is a non-TLS connection.
+       (nsm-check-plain-connection process host port settings
+                                   warn-unencrypted))
+       (t
+       (let ((process
+              (nsm-check-tls-connection process host port status settings)))
+         (when (and process save-fingerprint
+                    (null (nsm-host-settings id)))
+           (nsm-save-host host port status 'fingerprint 'always))
+         process))))))
+
+(defun nsm-check-tls-connection (process host port status settings)
+  (let ((process (nsm-check-certificate process host port status settings)))
+    (if (and process
+            (>= (nsm-level network-security-level) (nsm-level 'high)))
+       ;; Do further protocol-level checks if the security is high.
+       (nsm-check-protocol process host port status settings)
+      process)))
+
+(defun nsm-check-certificate (process host port status settings)
+  (let ((warnings (plist-get status :warnings)))
+    (cond
+
+     ;; The certificate validated, but perhaps we want to do
+     ;; certificate pinning.
+     ((null warnings)
+      (cond
+       ((< (nsm-level network-security-level) (nsm-level 'high))
+       process)
+       ;; The certificate is fine, but if we're paranoid, we might
+       ;; want to check whether it's changed anyway.
+       ((and (>= (nsm-level network-security-level) (nsm-level 'high))
+            (not (nsm-fingerprint-ok-p host port status settings)))
+       (delete-process process)
+       nil)
+       ;; We haven't seen this before, and we're paranoid.
+       ((and (eq network-security-level 'paranoid)
+            (null settings)
+            (not (nsm-new-fingerprint-ok-p host port status)))
+       (delete-process process)
+       nil)
+       ((>= (nsm-level network-security-level) (nsm-level 'high))
+       ;; Save the host fingerprint so that we can check it the
+       ;; next time we connect.
+       (nsm-save-host host port status 'fingerprint 'always)
+       process)
+       (t
+       process)))
+
+     ;; The certificate did not validate.
+     ((not (equal network-security-level 'low))
+      ;; We always want to pin the certificate of invalid connections
+      ;; to track man-in-the-middle or the like.
+      (if (not (nsm-fingerprint-ok-p host port status settings))
+         (progn
+           (delete-process process)
+           nil)
+       ;; We have a warning, so query the user.
+       (if (and (not (nsm-warnings-ok-p status settings))
+                (not (nsm-query
+                      host port status 'conditions
+                      "The TLS connection to %s:%s is insecure for the 
following reason%s:\n\n%s"
+                      host port
+                      (if (> (length warnings) 1)
+                          "s" "")
+                      (mapconcat #'gnutls-peer-status-warning-describe
+                                  warnings
+                                  "\n"))))
+           (progn
+             (delete-process process)
+             nil)
+         process))))))
+
+(defun nsm-check-protocol (process host port status settings)
+  (let ((prime-bits (plist-get status :diffie-hellman-prime-bits))
+       (encryption (format "%s-%s-%s"
+                           (plist-get status :key-exchange)
+                           (plist-get status :cipher)
+                           (plist-get status :mac)))
+       (protocol (plist-get status :protocol)))
+    (cond
+     ((and prime-bits
+          (< prime-bits 1024)
+          (not (memq :diffie-hellman-prime-bits
+                     (plist-get settings :conditions)))
+          (not
+           (nsm-query
+            host port status :diffie-hellman-prime-bits
+            "The Diffie-Hellman prime bits (%s) used for this connection to 
%s:%s is less than what is considered safe (%s)."
+            prime-bits host port 1024)))
+      (delete-process process)
+      nil)
+     ((and (string-match "\\bRC4\\b" encryption)
+          (not (memq :rc4 (plist-get settings :conditions)))
+          (not
+           (nsm-query
+            host port status :rc4
+            "The connection to %s:%s uses the RC4 algorithm (%s), which is 
believed to be unsafe."
+            host port encryption)))
+      (delete-process process)
+      nil)
+     ((and protocol
+          (string-match "SSL" protocol)
+          (not (memq :ssl (plist-get settings :conditions)))
+          (not
+           (nsm-query
+            host port status :ssl
+            "The connection to %s:%s uses the %s protocol, which is believed 
to be unsafe."
+            host port protocol)))
+      (delete-process process)
+      nil)
+     (t
+      process))))
+
+(defun nsm-fingerprint (status)
+  (plist-get (plist-get status :certificate) :public-key-id))
+
+(defun nsm-fingerprint-ok-p (host port status settings)
+  (let ((did-query nil))
+    (if (and settings
+            (not (eq (plist-get settings :fingerprint) :none))
+            (not (equal (nsm-fingerprint status)
+                        (plist-get settings :fingerprint)))
+            (not
+             (setq did-query
+                   (nsm-query
+                    host port status 'fingerprint
+                    "The fingerprint for the connection to %s:%s has changed 
from %s to %s"
+                    host port
+                    (plist-get settings :fingerprint)
+                    (nsm-fingerprint status)))))
+       ;; Not OK.
+       nil
+      (when did-query
+       ;; Remove any exceptions that have been set on the previous
+       ;; certificate.
+       (plist-put settings :conditions nil))
+      t)))
+
+(defun nsm-new-fingerprint-ok-p (host port status)
+  (nsm-query
+   host port status 'fingerprint
+   "The fingerprint for the connection to %s:%s is new: %s"
+   host port
+   (nsm-fingerprint status)))
+
+(defun nsm-check-plain-connection (process host port settings warn-unencrypted)
+  ;; If this connection used to be TLS, but is now plain, then it's
+  ;; possible that we're being Man-In-The-Middled by a proxy that's
+  ;; stripping out STARTTLS announcements.
+  (cond
+   ((and (plist-get settings :fingerprint)
+        (not (eq (plist-get settings :fingerprint) :none))
+        (not
+         (nsm-query
+          host port nil 'conditions
+          "The connection to %s:%s used to be an encrypted connection, but is 
now unencrypted.  This might mean that there's a man-in-the-middle tapping this 
connection."
+          host port)))
+    (delete-process process)
+    nil)
+   ((and warn-unencrypted
+        (not (memq :unencrypted (plist-get settings :conditions)))
+        (not (nsm-query
+              host port nil 'conditions
+              "The connection to %s:%s is unencrypted."
+              host port)))
+    (delete-process process)
+    nil)
+   (t
+    process)))
+
+(defun nsm-query (host port status what message &rest args)
+  ;; If there is no user to answer queries, then say `no' to everything.
+  (if (or noninteractive
+         nsm-noninteractive)
+      nil
+    (let ((response
+          (condition-case nil
+              (nsm-query-user message args (nsm-format-certificate status))
+            ;; Make sure we manage to close the process if the user hits
+            ;; `C-g'.
+            (quit 'no)
+            (error 'no))))
+      (if (eq response 'no)
+         nil
+       (nsm-save-host host port status what response)
+       t))))
+
+(defun nsm-query-user (message args cert)
+  (let ((buffer (get-buffer-create "*Network Security Manager*")))
+    (with-help-window buffer
+      (with-current-buffer buffer
+       (erase-buffer)
+       (when (> (length cert) 0)
+         (insert cert "\n"))
+       (let ((start (point)))
+         (insert (apply 'format message args))
+         (goto-char start)
+         ;; Fill the first line of the message, which usually
+         ;; contains lots of explanatory text.
+         (fill-region (point) (line-end-position)))))
+    (let ((responses '((?n . no)
+                      (?s . session)
+                      (?a . always)))
+         (prefix "")
+         response)
+      (while (not response)
+       (setq response
+             (cdr
+              (assq (downcase
+                     (read-char
+                      (concat prefix
+                              "Continue connecting? (No, Session only, 
Always)")))
+                    responses)))
+       (unless response
+         (ding)
+         (setq prefix "Invalid choice.  ")))
+      (kill-buffer buffer)
+      ;; If called from a callback, `read-char' will insert things
+      ;; into the pending input.  Clear that.
+      (clear-this-command-keys)
+      response)))
+
+(defun nsm-save-host (host port status what permanency)
+  (let* ((id (nsm-id host port))
+        (saved
+         (list :id id
+               :fingerprint (or (nsm-fingerprint status)
+                                ;; Plain connection.
+                                :none))))
+    (when (or (eq what 'conditions)
+             nsm-save-host-names)
+      (nconc saved (list :host (format "%s:%s" host port))))
+    ;; We either want to save/update the fingerprint or the conditions
+    ;; of the certificate/unencrypted connection.
+    (cond
+     ((eq what 'conditions)
+      (cond
+       ((not status)
+       (nconc saved '(:conditions (:unencrypted))))
+       ((plist-get status :warnings)
+       (nconc saved
+              (list :conditions (plist-get status :warnings))))))
+     ((not (eq what 'fingerprint))
+      ;; Store additional protocol settings.
+      (let ((settings (nsm-host-settings id)))
+       (when settings
+         (setq saved settings))
+       (if (plist-get saved :conditions)
+           (nconc (plist-get saved :conditions) (list what))
+         (nconc saved (list :conditions (list what)))))))
+    (if (eq permanency 'always)
+       (progn
+         (nsm-remove-temporary-setting id)
+         (nsm-remove-permanent-setting id)
+         (push saved nsm-permanent-host-settings)
+         (nsm-write-settings))
+      (nsm-remove-temporary-setting id)
+      (push saved nsm-temporary-host-settings))))
+
+(defun nsm-write-settings ()
+  (with-temp-file nsm-settings-file
+    (insert "(\n")
+    (dolist (setting nsm-permanent-host-settings)
+      (insert " ")
+      (prin1 setting (current-buffer))
+      (insert "\n"))
+    (insert ")\n")))
+
+(defun nsm-read-settings ()
+  (setq nsm-permanent-host-settings
+       (with-temp-buffer
+         (insert-file-contents nsm-settings-file)
+         (goto-char (point-min))
+         (ignore-errors (read (current-buffer))))))
+
+(defun nsm-id (host port)
+  (concat "sha1:" (sha1 (format "%s:%s" host port))))
+
+(defun nsm-host-settings (id)
+  (when (and (not nsm-permanent-host-settings)
+            (file-exists-p nsm-settings-file))
+    (nsm-read-settings))
+  (let ((result nil))
+    (dolist (elem (append nsm-temporary-host-settings
+                         nsm-permanent-host-settings))
+      (when (and (not result)
+                (equal (plist-get elem :id) id))
+       (setq result elem)))
+    result))
+
+(defun nsm-warnings-ok-p (status settings)
+  (let ((ok t)
+       (conditions (plist-get settings :conditions)))
+    (dolist (warning (plist-get status :warnings))
+      (unless (memq warning conditions)
+       (setq ok nil)))
+    ok))
+
+(defun nsm-remove-permanent-setting (id)
+  (setq nsm-permanent-host-settings
+       (cl-delete-if
+        (lambda (elem)
+          (equal (plist-get elem :id) id))
+        nsm-permanent-host-settings)))
+
+(defun nsm-remove-temporary-setting (id)
+  (setq nsm-temporary-host-settings
+       (cl-delete-if
+        (lambda (elem)
+          (equal (plist-get elem :id) id))
+        nsm-temporary-host-settings)))
+
+(defun nsm-format-certificate (status)
+  (let ((cert (plist-get status :certificate)))
+    (when cert
+      (with-temp-buffer
+       (insert
+        "Certificate information\n"
+        "Issued by:"
+        (nsm-certificate-part (plist-get cert :issuer) "CN" t) "\n"
+        "Issued to:"
+        (or (nsm-certificate-part (plist-get cert :subject) "O")
+            (nsm-certificate-part (plist-get cert :subject) "OU" t))
+        "\n"
+        "Hostname:"
+        (nsm-certificate-part (plist-get cert :subject) "CN" t) "\n")
+       (when (and (plist-get cert :public-key-algorithm)
+                  (plist-get cert :signature-algorithm))
+         (insert
+          "Public key:" (plist-get cert :public-key-algorithm)
+          ", signature: " (plist-get cert :signature-algorithm) "\n"))
+       (when (and (plist-get status :key-exchange)
+                  (plist-get status :cipher)
+                  (plist-get status :mac)
+                  (plist-get status :protocol))
+         (insert
+          "Protocol:" (plist-get status :protocol)
+          ", key: " (plist-get status :key-exchange)
+          ", cipher: " (plist-get status :cipher)
+          ", mac: " (plist-get status :mac) "\n"))
+       (when (plist-get cert :certificate-security-level)
+         (insert
+          "Security level:"
+          (propertize (plist-get cert :certificate-security-level)
+                      'face 'bold)
+          "\n"))
+       (insert
+        "Valid:From " (plist-get cert :valid-from)
+        " to " (plist-get cert :valid-to) "\n\n")
+       (goto-char (point-min))
+       (while (re-search-forward "^[^:]+:" nil t)
+         (insert (make-string (- 20 (current-column)) ? )))
+       (buffer-string)))))
+
+(defun nsm-certificate-part (string part &optional full)
+  (let ((part (cadr (assoc part (nsm-parse-subject string)))))
+    (cond
+     (part part)
+     (full string)
+     (t nil))))
+
+(defun nsm-parse-subject (string)
+  (with-temp-buffer
+    (insert string)
+    (goto-char (point-min))
+    (let ((start (point))
+         (result nil))
+      (while (not (eobp))
+       (push (replace-regexp-in-string
+              "[\\]\\(.\\)" "\\1"
+              (buffer-substring start
+                                (if (re-search-forward "[^\\]," nil 'move)
+                                    (1- (point))
+                                  (point))))
+             result)
+       (setq start (point)))
+      (mapcar
+       (lambda (elem)
+        (let ((pos (cl-position ?= elem)))
+          (if pos
+              (list (substring elem 0 pos)
+                    (substring elem (1+ pos)))
+            elem)))
+       (nreverse result)))))
+
+(defun nsm-level (symbol)
+  "Return a numerical level for SYMBOL for easier comparison."
+  (cond
+   ((eq symbol 'low) 0)
+   ((eq symbol 'medium) 1)
+   ((eq symbol 'high) 2)
+   (t 3)))
+
+(provide 'nsm)
+
+;;; nsm.el ends here
diff --git a/lisp/net/ntlm.el b/lisp/net/ntlm.el
index 30958aa..5f02e29 100644
--- a/lisp/net/ntlm.el
+++ b/lisp/net/ntlm.el
@@ -1,6 +1,6 @@
 ;;; ntlm.el --- NTLM (NT LanManager) authentication support
 
-;; Copyright (C) 2001, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Taro Kawagishi <address@hidden>
 ;; Keywords: NTLM, SASL
diff --git a/lisp/net/quickurl.el b/lisp/net/quickurl.el
index fdb117e..2d57125 100644
--- a/lisp/net/quickurl.el
+++ b/lisp/net/quickurl.el
@@ -1,6 +1,6 @@
 ;;; quickurl.el --- insert a URL based on text at point in buffer
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Pearson <address@hidden>
 ;; Maintainer: Dave Pearson <address@hidden>
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 4119321..74d03f5 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -1,6 +1,6 @@
 ;;; rcirc.el --- default, simple IRC client          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Ryan Yeske <address@hidden>
 ;; Maintainers: Ryan Yeske <address@hidden>,
diff --git a/lisp/net/rlogin.el b/lisp/net/rlogin.el
index 527d56b..d075820 100644
--- a/lisp/net/rlogin.el
+++ b/lisp/net/rlogin.el
@@ -1,6 +1,6 @@
 ;;; rlogin.el --- remote login interface
 
-;; Copyright (C) 1992-1995, 1997-1998, 2001-2014 Free Software
+;; Copyright (C) 1992-1995, 1997-1998, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Noah Friedman
diff --git a/lisp/net/sasl-cram.el b/lisp/net/sasl-cram.el
index e7f9e67..2351594 100644
--- a/lisp/net/sasl-cram.el
+++ b/lisp/net/sasl-cram.el
@@ -1,6 +1,6 @@
 ;;; sasl-cram.el --- CRAM-MD5 module for the SASL client framework
 
-;; Copyright (C) 2000, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;;     Kenichi OKADA <address@hidden>
diff --git a/lisp/net/sasl-digest.el b/lisp/net/sasl-digest.el
index f2242af..aa3843b 100644
--- a/lisp/net/sasl-digest.el
+++ b/lisp/net/sasl-digest.el
@@ -1,6 +1,6 @@
 ;;; sasl-digest.el --- DIGEST-MD5 module for the SASL client framework
 
-;; Copyright (C) 2000, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;;     Kenichi OKADA <address@hidden>
diff --git a/lisp/net/sasl-ntlm.el b/lisp/net/sasl-ntlm.el
index 275a2da..cab899e 100644
--- a/lisp/net/sasl-ntlm.el
+++ b/lisp/net/sasl-ntlm.el
@@ -1,6 +1,6 @@
 ;;; sasl-ntlm.el --- NTLM (NT Lan Manager) module for the SASL client framework
 
-;; Copyright (C) 2000, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Taro Kawagishi <address@hidden>
 ;; Keywords: SASL, NTLM
diff --git a/lisp/net/sasl.el b/lisp/net/sasl.el
index 03a8f72..648e622 100644
--- a/lisp/net/sasl.el
+++ b/lisp/net/sasl.el
@@ -1,6 +1,6 @@
 ;;; sasl.el --- SASL client framework
 
-;; Copyright (C) 2000, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Keywords: SASL
diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el
index 9ba9bd0..45caf7c 100644
--- a/lisp/net/secrets.el
+++ b/lisp/net/secrets.el
@@ -1,6 +1,6 @@
 ;;; secrets.el --- Client interface to gnome-keyring and kwallet.
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm password passphrase
diff --git a/lisp/net/shr-color.el b/lisp/net/shr-color.el
index 95ae513..433254d 100644
--- a/lisp/net/shr-color.el
+++ b/lisp/net/shr-color.el
@@ -1,6 +1,6 @@
 ;;; shr-color.el --- Simple HTML Renderer color management
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <address@hidden>
 ;; Keywords: html
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index 1ced4e0..59c277b 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -1,6 +1,6 @@
 ;;; shr.el --- Simple HTML Renderer
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: html
@@ -33,6 +33,8 @@
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'url))      ;For url-filename's setf handler.
 (require 'browse-url)
+(require 'subr-x)
+(require 'dom)
 
 (defgroup shr nil
   "Simple HTML Renderer"
@@ -76,11 +78,12 @@ If nil, don't draw horizontal table lines."
   :group 'shr
   :type 'character)
 
-(defcustom shr-width fill-column
+(defcustom shr-width nil
   "Frame width to use for rendering.
 May either be an integer specifying a fixed width in characters,
 or nil, meaning that the full width of the window should be
 used."
+  :version "25.1"
   :type '(choice (integer :tag "Fixed width in characters")
                 (const   :tag "Use the width of the window" nil))
   :group 'shr)
@@ -205,7 +208,7 @@ DOM should be a parse tree as generated by
        (shr-depth 0)
        (shr-warning nil)
        (shr-internal-width (or shr-width (1- (window-width)))))
-    (shr-descend (shr-transform-dom dom))
+    (shr-descend dom)
     (shr-remove-trailing-whitespace start (point))
     (when shr-warning
       (message "%s" shr-warning))))
@@ -263,8 +266,9 @@ redirects somewhere else."
   "Skip to the next link."
   (interactive)
   (let ((skip (text-property-any (point) (point-max) 'help-echo nil)))
-    (if (not (setq skip (text-property-not-all skip (point-max)
-                                              'help-echo nil)))
+    (if (or (eobp)
+           (not (setq skip (text-property-not-all skip (point-max)
+                                                  'help-echo nil))))
        (message "No next link")
       (goto-char skip)
       (message "%s" (get-text-property (point) 'help-echo)))))
@@ -299,7 +303,7 @@ redirects somewhere else."
   (let ((text (get-text-property (point) 'shr-alt)))
     (if (not text)
        (message "No image under point")
-      (message "%s" text))))
+      (message "%s" (shr-fold-text text)))))
 
 (defun shr-browse-image (&optional copy-url)
   "Browse the image under point.
@@ -366,53 +370,20 @@ size, and full-buffer size."
 
 ;;; Utility functions.
 
-(defun shr-transform-dom (dom)
-  (let ((result (list (pop dom))))
-    (dolist (arg (pop dom))
-      (push (cons (intern (concat ":" (symbol-name (car arg))) obarray)
-                 (cdr arg))
-           result))
-    (dolist (sub dom)
-      (if (stringp sub)
-         (push (cons 'text sub) result)
-       (push (shr-transform-dom sub) result)))
-    (nreverse result)))
-
-(defun shr-retransform-dom (dom)
-  "Transform the shr DOM back into the libxml DOM."
-  (let ((tag (car dom))
-       (attributes nil)
-       (sub-nodes nil))
-    (dolist (elem (cdr dom))
-      (cond
-       ((and (stringp (cdr elem))
-            (eq (car elem) 'text))
-       (push (cdr elem) sub-nodes))
-       ((not (listp (cdr elem)))
-       (push (cons (intern (substring (symbol-name (car elem)) 1) obarray)
-                   (cdr elem))
-             attributes))
-       (t
-       (push (shr-retransform-dom elem) sub-nodes))))
-    (append (list tag (nreverse attributes))
-           (nreverse sub-nodes))))
-
-(defsubst shr-generic (cont)
-  (dolist (sub cont)
-    (cond
-     ((eq (car sub) 'text)
-      (shr-insert (cdr sub)))
-     ((listp (cdr sub))
-      (shr-descend sub)))))
+(defsubst shr-generic (dom)
+  (dolist (sub (dom-children dom))
+    (if (stringp sub)
+       (shr-insert sub)
+      (shr-descend sub))))
 
 (defun shr-descend (dom)
   (let ((function
         (or
          ;; Allow other packages to override (or provide) rendering
          ;; of elements.
-         (cdr (assq (car dom) shr-external-rendering-functions))
-         (intern (concat "shr-tag-" (symbol-name (car dom))) obarray)))
-       (style (cdr (assq :style (cdr dom))))
+         (cdr (assq (dom-tag dom) shr-external-rendering-functions))
+         (intern (concat "shr-tag-" (symbol-name (dom-tag dom))) obarray)))
+       (style (dom-attr dom 'style))
        (shr-stylesheet shr-stylesheet)
        (shr-depth (1+ shr-depth))
        (start (point)))
@@ -427,10 +398,10 @@ size, and full-buffer size."
       ;; If we have a display:none, then just ignore this part of the DOM.
       (unless (equal (cdr (assq 'display shr-stylesheet)) "none")
        (if (fboundp function)
-           (funcall function (cdr dom))
-         (shr-generic (cdr dom)))
+           (funcall function dom)
+         (shr-generic dom))
        (when (and shr-target-id
-                  (equal (cdr (assq :id (cdr dom))) shr-target-id))
+                  (equal (dom-attr dom 'id) shr-target-id))
          ;; If the element was empty, we don't have anything to put the
          ;; anchor on.  So just insert a dummy character.
          (when (= start (point))
@@ -443,25 +414,36 @@ size, and full-buffer size."
           (cdr (assq 'color shr-stylesheet))
           (cdr (assq 'background-color shr-stylesheet))))))))
 
-(defmacro shr-char-breakable-p (char)
+(defun shr-fold-text (text)
+  (if (zerop (length text))
+      text
+    (with-temp-buffer
+      (let ((shr-indentation 0)
+           (shr-state nil)
+           (shr-start nil)
+           (shr-internal-width (window-width)))
+       (shr-insert text)
+       (buffer-string)))))
+
+(define-inline shr-char-breakable-p (char)
   "Return non-nil if a line can be broken before and after CHAR."
-  `(aref fill-find-break-point-function-table ,char))
-(defmacro shr-char-nospace-p (char)
+  (inline-quote (aref fill-find-break-point-function-table ,char)))
+(define-inline shr-char-nospace-p (char)
   "Return non-nil if no space is required before and after CHAR."
-  `(aref fill-nospace-between-words-table ,char))
+  (inline-quote (aref fill-nospace-between-words-table ,char)))
 
 ;; KINSOKU is a Japanese word meaning a rule that should not be violated.
 ;; In Emacs, it is a term used for characters, e.g. punctuation marks,
 ;; parentheses, and so on, that should not be placed in the beginning
 ;; of a line or the end of a line.
-(defmacro shr-char-kinsoku-bol-p (char)
+(define-inline shr-char-kinsoku-bol-p (char)
   "Return non-nil if a line ought not to begin with CHAR."
-  `(let ((char ,char))
-     (and (not (eq char ?'))
-         (aref (char-category-set char) ?>))))
-(defmacro shr-char-kinsoku-eol-p (char)
+  (inline-letevals (char)
+    (inline-quote (and (not (eq ,char ?'))
+                       (aref (char-category-set ,char) ?>)))))
+(define-inline shr-char-kinsoku-eol-p (char)
   "Return non-nil if a line ought not to end with CHAR."
-  `(aref (char-category-set ,char) ?<))
+  (inline-quote (aref (char-category-set ,char) ?<)))
 (unless (shr-char-kinsoku-bol-p (make-char 'japanese-jisx0208 33 35))
   (load "kinsoku" nil t))
 
@@ -684,9 +666,9 @@ size, and full-buffer size."
   (when (> shr-indentation 0)
     (insert (make-string shr-indentation ? ))))
 
-(defun shr-fontize-cont (cont &rest types)
+(defun shr-fontize-dom (dom &rest types)
   (let (shr-start)
-    (shr-generic cont)
+    (shr-generic dom)
     (dolist (type types)
       (shr-add-font (or shr-start (point)) (point) type))))
 
@@ -879,8 +861,7 @@ Return a string with image data."
     (when (eq content-type 'image/svg+xml)
       (setq data
            (shr-dom-to-xml
-            (shr-transform-dom
-             (libxml-parse-xml-region (point) (point-max))))))
+            (libxml-parse-xml-region (point) (point-max)))))
     (list data content-type)))
 
 (defun shr-image-displayer (content-function)
@@ -903,9 +884,9 @@ START, and END.  Note that START and END should be markers."
                       (list (current-buffer) start end)
                       t t)))))
 
-(defun shr-heading (cont &rest types)
+(defun shr-heading (dom &rest types)
   (shr-ensure-paragraph)
-  (apply #'shr-fontize-cont cont types)
+  (apply #'shr-fontize-dom dom types)
   (shr-ensure-paragraph))
 
 (defun shr-urlify (start url &optional title)
@@ -913,7 +894,12 @@ START, and END.  Note that START and END should be 
markers."
   (add-text-properties
    start (point)
    (list 'shr-url url
-        'help-echo (if title (format "%s (%s)" url title) url)
+        'help-echo (let ((iri (or (ignore-errors
+                                    (decode-coding-string
+                                     (url-unhex-string url)
+                                     'utf-8 t))
+                                  url)))
+                     (if title (format "%s (%s)" iri title) iri))
         'follow-link t
         'mouse-face 'highlight
         'keymap shr-map)))
@@ -1014,105 +1000,106 @@ ones, in case fg and bg are nil."
 
 ;;; Tag-specific rendering rules.
 
-(defun shr-tag-body (cont)
+(defun shr-tag-body (dom)
   (let* ((start (point))
-        (fgcolor (cdr (or (assq :fgcolor cont)
-                           (assq :text cont))))
-        (bgcolor (cdr (assq :bgcolor cont)))
+        (fgcolor (or (dom-attr dom 'fgcolor) (dom-attr dom 'text)))
+        (bgcolor (dom-attr dom 'bgcolor))
         (shr-stylesheet (list (cons 'color fgcolor)
                               (cons 'background-color bgcolor))))
-    (shr-generic cont)
+    (shr-generic dom)
     (shr-colorize-region start (point) fgcolor bgcolor)))
 
-(defun shr-tag-style (_cont)
+(defun shr-tag-style (_dom)
   )
 
-(defun shr-tag-script (_cont)
+(defun shr-tag-script (_dom)
   )
 
-(defun shr-tag-comment (_cont)
+(defun shr-tag-comment (_dom)
   )
 
 (defun shr-dom-to-xml (dom)
+  (with-temp-buffer
+    (shr-dom-print dom)
+    (buffer-string)))
+
+(defun shr-dom-print (dom)
   "Convert DOM into a string containing the xml representation."
-  (let ((arg " ")
-        (text "")
-       url)
-    (dolist (sub (cdr dom))
+  (insert (format "<%s" (dom-tag dom)))
+  (dolist (attr (dom-attributes dom))
+    ;; Ignore attributes that start with a colon because they are
+    ;; private elements.
+    (unless (= (aref (format "%s" (car attr)) 0) ?:)
+      (insert (format " %s=\"%s\"" (car attr) (cdr attr)))))
+  (insert ">")
+  (let (url)
+    (dolist (elem (dom-children dom))
       (cond
-       ((listp (cdr sub))
-       ;; Ignore external image definitions if required.
-       ;; <image xlink:href="http://TRACKING_URL/"/>
-       (when (or (not (eq (car sub) 'image))
-                 (not (setq url (cdr (assq ':xlink:href (cdr sub)))))
-                 (not shr-blocked-images)
-                 (not (string-match shr-blocked-images url)))
-         (setq text (concat text (shr-dom-to-xml sub)))))
-       ((eq (car sub) 'text)
-        (setq text (concat text (cdr sub))))
-       (t
-        (setq arg (concat arg (format "%s=\"%s\" "
-                                      (substring (symbol-name (car sub)) 1)
-                                      (cdr sub)))))))
-    (format "<%s%s>%s</%s>"
-            (car dom)
-            (substring arg 0 (1- (length arg)))
-            text
-            (car dom))))
-
-(defun shr-tag-svg (cont)
+       ((stringp elem)
+       (insert elem))
+       ((eq (dom-tag elem) 'comment)
+       )
+       ((or (not (eq (dom-tag elem) 'image))
+           ;; Filter out blocked elements inside the SVG image.
+           (not (setq url (dom-attr elem ':xlink:href)))
+           (not shr-blocked-images)
+           (not (string-match shr-blocked-images url)))
+       (insert " ")
+       (shr-dom-print elem)))))
+  (insert (format "</%s>" (dom-tag dom))))
+
+(defun shr-tag-svg (dom)
   (when (and (image-type-available-p 'svg)
             (not shr-inhibit-images))
-    (funcall shr-put-image-function
-             (shr-dom-to-xml (cons 'svg cont))
-             "SVG Image")))
+    (funcall shr-put-image-function (list (shr-dom-to-xml dom) 'image/svg+xml)
+            "SVG Image")))
 
-(defun shr-tag-sup (cont)
+(defun shr-tag-sup (dom)
   (let ((start (point)))
-    (shr-generic cont)
+    (shr-generic dom)
     (put-text-property start (point) 'display '(raise 0.5))))
 
-(defun shr-tag-sub (cont)
+(defun shr-tag-sub (dom)
   (let ((start (point)))
-    (shr-generic cont)
+    (shr-generic dom)
     (put-text-property start (point) 'display '(raise -0.5))))
 
-(defun shr-tag-label (cont)
-  (shr-generic cont)
+(defun shr-tag-label (dom)
+  (shr-generic dom)
   (shr-ensure-paragraph))
 
-(defun shr-tag-p (cont)
+(defun shr-tag-p (dom)
   (shr-ensure-paragraph)
   (shr-indent)
-  (shr-generic cont)
+  (shr-generic dom)
   (shr-ensure-paragraph))
 
-(defun shr-tag-div (cont)
+(defun shr-tag-div (dom)
   (shr-ensure-newline)
   (shr-indent)
-  (shr-generic cont)
+  (shr-generic dom)
   (shr-ensure-newline))
 
-(defun shr-tag-s (cont)
-  (shr-fontize-cont cont 'shr-strike-through))
+(defun shr-tag-s (dom)
+  (shr-fontize-dom dom 'shr-strike-through))
 
-(defun shr-tag-del (cont)
-  (shr-fontize-cont cont 'shr-strike-through))
+(defun shr-tag-del (dom)
+  (shr-fontize-dom dom 'shr-strike-through))
 
-(defun shr-tag-b (cont)
-  (shr-fontize-cont cont 'bold))
+(defun shr-tag-b (dom)
+  (shr-fontize-dom dom 'bold))
 
-(defun shr-tag-i (cont)
-  (shr-fontize-cont cont 'italic))
+(defun shr-tag-i (dom)
+  (shr-fontize-dom dom 'italic))
 
-(defun shr-tag-em (cont)
-  (shr-fontize-cont cont 'italic))
+(defun shr-tag-em (dom)
+  (shr-fontize-dom dom 'italic))
 
-(defun shr-tag-strong (cont)
-  (shr-fontize-cont cont 'bold))
+(defun shr-tag-strong (dom)
+  (shr-fontize-dom dom 'bold))
 
-(defun shr-tag-u (cont)
-  (shr-fontize-cont cont 'underline))
+(defun shr-tag-u (dom)
+  (shr-fontize-dom dom 'underline))
 
 (defun shr-parse-style (style)
   (when style
@@ -1134,20 +1121,19 @@ ones, in case fg and bg are nil."
                    plist)))))
       plist)))
 
-(defun shr-tag-base (cont)
-  (let ((base (cdr (assq :href cont))))
-    (when base
-      (setq shr-base (shr-parse-base base))))
-  (shr-generic cont))
+(defun shr-tag-base (dom)
+  (when-let (base (dom-attr dom 'href))
+    (setq shr-base (shr-parse-base base)))
+  (shr-generic dom))
 
-(defun shr-tag-a (cont)
-  (let ((url (cdr (assq :href cont)))
-        (title (cdr (assq :title cont)))
+(defun shr-tag-a (dom)
+  (let ((url (dom-attr dom 'href))
+        (title (dom-attr dom 'title))
        (start (point))
        shr-start)
-    (shr-generic cont)
+    (shr-generic dom)
     (when (and shr-target-id
-              (equal (cdr (assq :name cont)) shr-target-id))
+              (equal (dom-attr dom 'name) shr-target-id))
       ;; We have a zero-length <a name="foo"> element, so just
       ;; insert...  something.
       (when (= start (point))
@@ -1158,33 +1144,33 @@ ones, in case fg and bg are nil."
               (not shr-inhibit-decoration))
       (shr-urlify (or shr-start start) (shr-expand-url url) title))))
 
-(defun shr-tag-object (cont)
+(defun shr-tag-object (dom)
   (unless shr-inhibit-images
     (let ((start (point))
          url multimedia image)
-      (dolist (elem cont)
+      (when-let (type (dom-attr dom 'type))
+       (when (string-match "\\`image/svg" type)
+         (setq url (dom-attr dom 'data)
+               image t)))
+      (dolist (child (dom-non-text-children dom))
        (cond
-        ((eq (car elem) 'embed)
-         (setq url (or url (cdr (assq :src (cdr elem))))
-               multimedia t))
-        ((and (eq (car elem) 'param)
-              (equal (cdr (assq :name (cdr elem))) "movie"))
-         (setq url (or url (cdr (assq :value (cdr elem))))
+        ((eq (dom-tag child) 'embed)
+         (setq url (or url (dom-attr child 'src))
                multimedia t))
-        ((and (eq (car elem) :type)
-              (string-match "\\`image/svg" (cdr elem)))
-         (setq url (cdr (assq :data cont))
-               image t))))
+        ((and (eq (dom-tag child) 'param)
+              (equal (dom-attr child 'name) "movie"))
+         (setq url (or url (dom-attr child 'value))
+               multimedia t))))
       (when url
        (cond
         (image
-         (shr-tag-img cont url)
-         (setq cont nil))
+         (shr-tag-img dom url)
+         (setq dom nil))
         (multimedia
          (shr-insert " [multimedia] ")
          (shr-urlify start (shr-expand-url url)))))
-      (when cont
-       (shr-generic cont)))))
+      (when dom
+       (shr-generic dom)))))
 
 (defcustom shr-prefer-media-type-alist '(("webm" . 1.0)
                                          ("ogv"  . 1.0)
@@ -1203,10 +1189,10 @@ url if no type is specified.  The value should be a 
float in the range 0.0 to
 (defun shr--get-media-pref (elem)
   "Determine the preference for ELEM.
 The preference is a float determined from `shr-prefer-media-type'."
-  (let ((type (cdr (assq :type elem)))
+  (let ((type (dom-attr elem 'type))
         (p 0.0))
     (unless type
-      (setq type (cdr (assq :src elem))))
+      (setq type (dom-attr elem 'src)))
     (when type
       (dolist (pref shr-prefer-media-type-alist)
         (when (and
@@ -1215,61 +1201,61 @@ The preference is a float determined from 
`shr-prefer-media-type'."
           (setq p (cdr pref)))))
     p))
 
-(defun shr--extract-best-source (cont &optional url pref)
-  "Extract the best `:src' property from <source> blocks in CONT."
+(defun shr--extract-best-source (dom &optional url pref)
+  "Extract the best `:src' property from <source> blocks in DOM."
   (setq pref (or pref -1.0))
   (let (new-pref)
-    (dolist (elem cont)
-      (when (and (eq (car elem) 'source)
+    (dolist (elem (dom-non-text-children dom))
+      (when (and (eq (dom-tag elem) 'source)
                 (< pref
                    (setq new-pref
                          (shr--get-media-pref elem))))
        (setq pref new-pref
-             url (cdr (assq :src elem)))
+             url (dom-attr elem 'src))
         ;; libxml's html parser isn't HTML5 compliant and non terminated
         ;; source tags might end up as children.  So recursion it is...
-        (dolist (child (cdr elem))
-          (when (eq (car child) 'source)
+        (dolist (child (dom-non-text-children elem))
+          (when (eq (dom-tag child) 'source)
             (let ((ret (shr--extract-best-source (list child) url pref)))
               (when (< pref (cdr ret))
                 (setq url (car ret)
                       pref (cdr ret)))))))))
   (cons url pref))
 
-(defun shr-tag-video (cont)
-  (let ((image (cdr (assq :poster cont)))
-        (url (cdr (assq :src cont)))
+(defun shr-tag-video (dom)
+  (let ((image (dom-attr dom 'poster))
+        (url (dom-attr dom 'src))
         (start (point)))
     (unless url
-      (setq url (car (shr--extract-best-source cont))))
+      (setq url (car (shr--extract-best-source dom))))
     (if image
         (shr-tag-img nil image)
       (shr-insert " [video] "))
     (shr-urlify start (shr-expand-url url))))
 
-(defun shr-tag-audio (cont)
-  (let ((url (cdr (assq :src cont)))
+(defun shr-tag-audio (dom)
+  (let ((url (dom-attr dom 'src))
         (start (point)))
     (unless url
-      (setq url (car (shr--extract-best-source cont))))
+      (setq url (car (shr--extract-best-source dom))))
     (shr-insert " [audio] ")
     (shr-urlify start (shr-expand-url url))))
 
-(defun shr-tag-img (cont &optional url)
+(defun shr-tag-img (dom &optional url)
   (when (or url
-           (and cont
-                (> (length (cdr (assq :src cont))) 0)))
+           (and dom
+                (> (length (dom-attr dom 'src)) 0)))
     (when (and (> (current-column) 0)
               (not (eq shr-state 'image)))
       (insert "\n"))
-    (let ((alt (cdr (assq :alt cont)))
-         (url (shr-expand-url (or url (cdr (assq :src cont))))))
+    (let ((alt (dom-attr dom 'alt))
+         (url (shr-expand-url (or url (dom-attr dom 'src)))))
       (let ((start (point-marker)))
        (when (zerop (length alt))
          (setq alt "*"))
        (cond
-        ((or (member (cdr (assq :height cont)) '("0" "1"))
-             (member (cdr (assq :width cont)) '("0" "1")))
+        ((or (member (dom-attr dom 'height) '("0" "1"))
+             (member (dom-attr dom 'width) '("0" "1")))
          ;; Ignore zero-sized or single-pixel images.
          )
         ((and (not shr-inhibit-images)
@@ -1315,52 +1301,51 @@ The preference is a float determined from 
`shr-prefer-media-type'."
          (put-text-property start (point) 'image-displayer
                             (shr-image-displayer shr-content-function))
          (put-text-property start (point) 'help-echo
-                            (or (cdr (assq :title cont))
-                                alt)))
+                            (shr-fold-text (or (dom-attr dom 'title) alt))))
        (setq shr-state 'image)))))
 
-(defun shr-tag-pre (cont)
+(defun shr-tag-pre (dom)
   (let ((shr-folding-mode 'none))
     (shr-ensure-newline)
     (shr-indent)
-    (shr-generic cont)
+    (shr-generic dom)
     (shr-ensure-newline)))
 
-(defun shr-tag-blockquote (cont)
+(defun shr-tag-blockquote (dom)
   (shr-ensure-paragraph)
   (shr-indent)
   (let ((shr-indentation (+ shr-indentation 4)))
-    (shr-generic cont))
+    (shr-generic dom))
   (shr-ensure-paragraph))
 
-(defun shr-tag-dl (cont)
+(defun shr-tag-dl (dom)
   (shr-ensure-paragraph)
-  (shr-generic cont)
+  (shr-generic dom)
   (shr-ensure-paragraph))
 
-(defun shr-tag-dt (cont)
+(defun shr-tag-dt (dom)
   (shr-ensure-newline)
-  (shr-generic cont)
+  (shr-generic dom)
   (shr-ensure-newline))
 
-(defun shr-tag-dd (cont)
+(defun shr-tag-dd (dom)
   (shr-ensure-newline)
   (let ((shr-indentation (+ shr-indentation 4)))
-    (shr-generic cont)))
+    (shr-generic dom)))
 
-(defun shr-tag-ul (cont)
+(defun shr-tag-ul (dom)
   (shr-ensure-paragraph)
   (let ((shr-list-mode 'ul))
-    (shr-generic cont))
+    (shr-generic dom))
   (shr-ensure-paragraph))
 
-(defun shr-tag-ol (cont)
+(defun shr-tag-ol (dom)
   (shr-ensure-paragraph)
   (let ((shr-list-mode 1))
-    (shr-generic cont))
+    (shr-generic dom))
   (shr-ensure-paragraph))
 
-(defun shr-tag-li (cont)
+(defun shr-tag-li (dom)
   (shr-ensure-newline)
   (shr-indent)
   (let* ((bullet
@@ -1371,9 +1356,9 @@ The preference is a float determined from 
`shr-prefer-media-type'."
            shr-bullet))
         (shr-indentation (+ shr-indentation (length bullet))))
     (insert bullet)
-    (shr-generic cont)))
+    (shr-generic dom)))
 
-(defun shr-tag-br (cont)
+(defun shr-tag-br (dom)
   (when (and (not (bobp))
             ;; Only add a newline if we break the current line, or
             ;; the previous line isn't a blank line.
@@ -1382,42 +1367,42 @@ The preference is a float determined from 
`shr-prefer-media-type'."
                      (not (= (char-after (- (point) 2)) ?\n)))))
     (insert "\n")
     (shr-indent))
-  (shr-generic cont))
+  (shr-generic dom))
 
-(defun shr-tag-span (cont)
-  (shr-generic cont))
+(defun shr-tag-span (dom)
+  (shr-generic dom))
 
-(defun shr-tag-h1 (cont)
-  (shr-heading cont 'bold 'underline))
+(defun shr-tag-h1 (dom)
+  (shr-heading dom 'bold 'underline))
 
-(defun shr-tag-h2 (cont)
-  (shr-heading cont 'bold))
+(defun shr-tag-h2 (dom)
+  (shr-heading dom 'bold))
 
-(defun shr-tag-h3 (cont)
-  (shr-heading cont 'italic))
+(defun shr-tag-h3 (dom)
+  (shr-heading dom 'italic))
 
-(defun shr-tag-h4 (cont)
-  (shr-heading cont))
+(defun shr-tag-h4 (dom)
+  (shr-heading dom))
 
-(defun shr-tag-h5 (cont)
-  (shr-heading cont))
+(defun shr-tag-h5 (dom)
+  (shr-heading dom))
 
-(defun shr-tag-h6 (cont)
-  (shr-heading cont))
+(defun shr-tag-h6 (dom)
+  (shr-heading dom))
 
-(defun shr-tag-hr (_cont)
+(defun shr-tag-hr (_dom)
   (shr-ensure-newline)
   (insert (make-string shr-internal-width shr-hr-line) "\n"))
 
-(defun shr-tag-title (cont)
-  (shr-heading cont 'bold 'underline))
+(defun shr-tag-title (dom)
+  (shr-heading dom 'bold 'underline))
 
-(defun shr-tag-font (cont)
+(defun shr-tag-font (dom)
   (let* ((start (point))
-         (color (cdr (assq :color cont)))
+         (color (dom-attr dom 'color))
          (shr-stylesheet (nconc (list (cons 'color color))
                                shr-stylesheet)))
-    (shr-generic cont)
+    (shr-generic dom)
     (when color
       (shr-colorize-region start (point) color
                           (cdr (assq 'background-color shr-stylesheet))))))
@@ -1432,23 +1417,22 @@ The preference is a float determined from 
`shr-prefer-media-type'."
 ;; main buffer).  Now we know how much space each TD really takes, so
 ;; we then render everything again with the new widths, and finally
 ;; insert all these boxes into the main buffer.
-(defun shr-tag-table-1 (cont)
-  (setq cont (or (cdr (assq 'tbody cont))
-                cont))
+(defun shr-tag-table-1 (dom)
+  (setq dom (or (dom-child-by-tag dom 'tbody) dom))
   (let* ((shr-inhibit-images t)
         (shr-table-depth (1+ shr-table-depth))
         (shr-kinsoku-shorten t)
         ;; Find all suggested widths.
-        (columns (shr-column-specs cont))
+        (columns (shr-column-specs dom))
         ;; Compute how many characters wide each TD should be.
         (suggested-widths (shr-pro-rate-columns columns))
         ;; Do a "test rendering" to see how big each TD is (this can
         ;; be smaller (if there's little text) or bigger (if there's
         ;; unbreakable text).
-        (sketch (shr-make-table cont suggested-widths))
+        (sketch (shr-make-table dom suggested-widths))
         ;; Compute the "natural" width by setting each column to 500
         ;; characters and see how wide they really render.
-        (natural (shr-make-table cont (make-vector (length columns) 500)))
+        (natural (shr-make-table dom (make-vector (length columns) 500)))
         (sketch-widths (shr-table-widths sketch natural suggested-widths)))
     ;; This probably won't work very well.
     (when (> (+ (loop for width across sketch-widths
@@ -1457,15 +1441,16 @@ The preference is a float determined from 
`shr-prefer-media-type'."
             (frame-width))
       (setq truncate-lines t))
     ;; Then render the table again with these new "hard" widths.
-    (shr-insert-table (shr-make-table cont sketch-widths t) sketch-widths)))
+    (shr-insert-table (shr-make-table dom sketch-widths t) sketch-widths)))
 
-(defun shr-tag-table (cont)
+(defun shr-tag-table (dom)
   (shr-ensure-paragraph)
-  (let* ((caption (cdr (assq 'caption cont)))
-        (header (cdr (assq 'thead cont)))
-        (body (or (cdr (assq 'tbody cont)) cont))
-        (footer (cdr (assq 'tfoot cont)))
-         (bgcolor (cdr (assq :bgcolor cont)))
+  (let* ((caption (dom-children (dom-child-by-tag dom 'caption)))
+        (header (dom-non-text-children (dom-child-by-tag dom 'thead)))
+        (body (dom-non-text-children (or (dom-child-by-tag dom 'tbody)
+                                         dom)))
+        (footer (dom-non-text-children (dom-child-by-tag dom 'tfoot)))
+         (bgcolor (dom-attr dom 'bgcolor))
         (start (point))
         (shr-stylesheet (nconc (list (cons 'background-color bgcolor))
                                shr-stylesheet))
@@ -1474,51 +1459,71 @@ The preference is a float determined from 
`shr-prefer-media-type'."
         (nfooter (if footer (shr-max-columns footer))))
     (if (and (not caption)
             (not header)
-            (not (cdr (assq 'tbody cont)))
-            (not (cdr (assq 'tr cont)))
+            (not (dom-child-by-tag dom 'tbody))
+            (not (dom-child-by-tag dom 'tr))
             (not footer))
        ;; The table is totally invalid and just contains random junk.
        ;; Try to output it anyway.
-       (shr-generic cont)
+       (shr-generic dom)
       ;; It's a real table, so render it.
       (shr-tag-table-1
        (nconc
-       (if caption `((tr (td ,@caption))))
-       (if header
-           (if footer
-               ;; header + body + footer
-               (if (= nheader nbody)
-                   (if (= nbody nfooter)
-                       `((tr (td (table (tbody ,@header ,@body ,@footer)))))
-                     (nconc `((tr (td (table (tbody ,@header ,@body)))))
-                            (if (= nfooter 1)
-                                footer
-                              `((tr (td (table (tbody ,@footer))))))))
-                 (nconc `((tr (td (table (tbody ,@header)))))
-                        (if (= nbody nfooter)
-                            `((tr (td (table (tbody ,@body ,@footer)))))
-                          (nconc `((tr (td (table (tbody ,@body)))))
-                                 (if (= nfooter 1)
-                                     footer
-                                   `((tr (td (table (tbody ,@footer))))))))))
-             ;; header + body
-             (if (= nheader nbody)
-                 `((tr (td (table (tbody ,@header ,@body)))))
-               (if (= nheader 1)
-                   `(,@header (tr (td (table (tbody ,@body)))))
-                 `((tr (td (table (tbody ,@header))))
-                   (tr (td (table (tbody ,@body))))))))
-         (if footer
-             ;; body + footer
-             (if (= nbody nfooter)
-                 `((tr (td (table (tbody ,@body ,@footer)))))
-               (nconc `((tr (td (table (tbody ,@body)))))
-                      (if (= nfooter 1)
-                          footer
-                        `((tr (td (table (tbody ,@footer))))))))
-           (if caption
-               `((tr (td (table (tbody ,@body)))))
-             body))))))
+       (list 'table nil)
+       (if caption `((tr nil (td nil ,@caption))))
+       (cond (header
+              (if footer
+                  ;; header + body + footer
+                  (if (= nheader nbody)
+                      (if (= nbody nfooter)
+                          `((tr nil (td nil (table nil
+                                                   (tbody nil ,@header
+                                                          ,@body ,@footer)))))
+                        (nconc `((tr nil (td nil (table nil
+                                                        (tbody nil ,@header
+                                                               ,@body)))))
+                               (if (= nfooter 1)
+                                   footer
+                                 `((tr nil (td nil (table
+                                                    nil (tbody
+                                                         nil ,@footer))))))))
+                    (nconc `((tr nil (td nil (table nil (tbody
+                                                         nil ,@header)))))
+                           (if (= nbody nfooter)
+                               `((tr nil (td nil (table
+                                                  nil (tbody nil ,@body
+                                                             ,@footer)))))
+                             (nconc `((tr nil (td nil (table
+                                                       nil (tbody nil
+                                                                  ,@body)))))
+                                    (if (= nfooter 1)
+                                        footer
+                                      `((tr nil (td nil (table
+                                                         nil
+                                                         (tbody
+                                                          nil
+                                                          ,@footer))))))))))
+                ;; header + body
+                (if (= nheader nbody)
+                    `((tr nil (td nil (table nil (tbody nil ,@header
+                                                        ,@body)))))
+                  (if (= nheader 1)
+                      `(,@header (tr nil (td nil (table
+                                                  nil (tbody nil ,@body)))))
+                    `((tr nil (td nil (table nil (tbody nil ,@header))))
+                      (tr nil (td nil (table nil (tbody nil ,@body)))))))))
+             (footer
+              ;; body + footer
+              (if (= nbody nfooter)
+                  `((tr nil (td nil (table
+                                     nil (tbody nil ,@body ,@footer)))))
+                (nconc `((tr nil (td nil (table nil (tbody nil ,@body)))))
+                       (if (= nfooter 1)
+                           footer
+                         `((tr nil (td nil (table
+                                            nil (tbody nil ,@footer)))))))))
+             (caption
+              `((tr nil (td nil (table nil (tbody nil ,@body))))))
+             (body)))))
     (when bgcolor
       (shr-colorize-region start (point) (cdr (assq 'color shr-stylesheet))
                           bgcolor))
@@ -1526,19 +1531,10 @@ The preference is a float determined from 
`shr-prefer-media-type'."
     ;; model isn't strong enough to allow us to put the images actually
     ;; into the tables.
     (when (zerop shr-table-depth)
-      (dolist (elem (shr-find-elements cont 'object))
-       (shr-tag-object (cdr elem)))
-      (dolist (elem (shr-find-elements cont 'img))
-       (shr-tag-img (cdr elem))))))
-
-(defun shr-find-elements (cont type)
-  (let (result)
-    (dolist (elem cont)
-      (cond ((eq (car elem) type)
-            (push elem result))
-           ((consp (cdr elem))
-            (setq result (nconc (shr-find-elements (cdr elem) type) result)))))
-    (nreverse result)))
+      (dolist (elem (dom-by-tag dom 'object))
+       (shr-tag-object elem))
+      (dolist (elem (dom-by-tag dom 'img))
+       (shr-tag-img elem)))))
 
 (defun shr-insert-table (table widths)
   (let* ((collapse (equal (cdr (assq 'border-collapse shr-stylesheet))
@@ -1621,22 +1617,24 @@ The preference is a float determined from 
`shr-prefer-media-type'."
                               (aref widths i))))))))
     widths))
 
-(defun shr-make-table (cont widths &optional fill)
-  (or (cadr (assoc (list cont widths fill) shr-content-cache))
-      (let ((data (shr-make-table-1 cont widths fill)))
-       (push (list (list cont widths fill) data)
+(defun shr-make-table (dom widths &optional fill)
+  (or (cadr (assoc (list dom widths fill) shr-content-cache))
+      (let ((data (shr-make-table-1 dom widths fill)))
+       (push (list (list dom widths fill) data)
              shr-content-cache)
        data)))
 
-(defun shr-make-table-1 (cont widths &optional fill)
+(defun shr-make-table-1 (dom widths &optional fill)
   (let ((trs nil)
        (shr-inhibit-decoration (not fill))
        (rowspans (make-vector (length widths) 0))
+       (colspan-remaining 0)
+       colspan-width colspan-count
        width colspan)
-    (dolist (row cont)
-      (when (eq (car row) 'tr)
+    (dolist (row (dom-non-text-children dom))
+      (when (eq (dom-tag row) 'tr)
        (let ((tds nil)
-             (columns (cdr row))
+             (columns (dom-children row))
              (i 0)
              (width-column 0)
              column)
@@ -1650,12 +1648,12 @@ The preference is a float determined from 
`shr-prefer-media-type'."
                      (pop columns)
                    (aset rowspans i (1- (aref rowspans i)))
                    '(td)))
-           (when (or (memq (car column) '(td th))
-                     (not column))
-             (when (cdr (assq :rowspan (cdr column)))
+           (when (and (not (stringp column))
+                      (or (memq (dom-tag column) '(td th))
+                          (not column)))
+             (when-let (span (dom-attr column 'rowspan))
                (aset rowspans i (+ (aref rowspans i)
-                                   (1- (string-to-number
-                                        (cdr (assq :rowspan (cdr column))))))))
+                                   (1- (string-to-number span)))))
              ;; Sanity check for invalid column-spans.
              (when (>= width-column (length widths))
                (setq width-column 0))
@@ -1663,34 +1661,49 @@ The preference is a float determined from 
`shr-prefer-media-type'."
                    (if column
                        (aref widths width-column)
                      10))
-             (when (and fill
-                        (setq colspan (cdr (assq :colspan (cdr column)))))
+             (when (setq colspan (dom-attr column 'colspan))
                (setq colspan (min (string-to-number colspan)
                                   ;; The colspan may be wrong, so
                                   ;; truncate it to the length of the
                                   ;; remaining columns.
                                   (- (length widths) i)))
                (dotimes (j (1- colspan))
-                 (if (> (+ i 1 j) (1- (length widths)))
-                     (setq width (aref widths (1- (length widths))))
-                   (setq width (+ width
-                                  shr-table-separator-length
-                                  (aref widths (+ i 1 j))))))
-               (setq width-column (+ width-column (1- colspan))))
+                 (setq width
+                       (if (> (+ i 1 j) (1- (length widths)))
+                           ;; If we have a colspan spec that's longer
+                           ;; than the table is wide, just use the last
+                           ;; width as the width.
+                           (aref widths (1- (length widths)))
+                         ;; Sum up the widths of the columns we're
+                         ;; spanning.
+                         (+ width
+                            shr-table-separator-length
+                            (aref widths (+ i 1 j))))))
+               (setq width-column (+ width-column (1- colspan))
+                     colspan-count colspan
+                     colspan-remaining colspan))
              (when (or column
                        (not fill))
-               (push (shr-render-td (cdr column) width fill)
-                     tds))
+               (let ((data (shr-render-td column width fill)))
+                 (if (and (not fill)
+                          (> colspan-remaining 0))
+                     (progn
+                       (when (= colspan-count colspan-remaining)
+                         (setq colspan-width data))
+                       (let ((this-width (/ colspan-width colspan-count)))
+                         (push this-width tds)
+                         (setq colspan-remaining (1- colspan-remaining))))
+                   (push data tds))))
              (setq i (1+ i)
                    width-column (1+ width-column))))
          (push (nreverse tds) trs))))
     (nreverse trs)))
 
-(defun shr-render-td (cont width fill)
+(defun shr-render-td (dom width fill)
   (with-temp-buffer
-    (let ((bgcolor (cdr (assq :bgcolor cont)))
-         (fgcolor (cdr (assq :fgcolor cont)))
-         (style (cdr (assq :style cont)))
+    (let ((bgcolor (dom-attr dom 'bgcolor))
+         (fgcolor (dom-attr dom 'fgcolor))
+         (style (dom-attr dom 'style))
          (shr-stylesheet shr-stylesheet)
          actual-colors)
       (when style
@@ -1704,7 +1717,7 @@ The preference is a float determined from 
`shr-prefer-media-type'."
        (setq shr-stylesheet (append style shr-stylesheet)))
       (let ((shr-internal-width width)
            (shr-indentation 0))
-       (shr-descend (cons 'td cont)))
+       (shr-descend dom))
       ;; Delete padding at the bottom of the TDs.
       (delete-region
        (point)
@@ -1725,7 +1738,7 @@ The preference is a float determined from 
`shr-prefer-media-type'."
          (if (zerop (buffer-size))
              (insert (make-string width ? ))
            ;; Otherwise, fill the buffer.
-           (let ((align (cdr (assq :align cont)))
+           (let ((align (dom-attr dom 'align))
                  length)
              (while (not (eobp))
                (end-of-line)
@@ -1780,14 +1793,15 @@ The preference is a float determined from 
`shr-prefer-media-type'."
     widths))
 
 ;; Return a summary of the number and shape of the TDs in the table.
-(defun shr-column-specs (cont)
-  (let ((columns (make-vector (shr-max-columns cont) 1)))
-    (dolist (row cont)
-      (when (eq (car row) 'tr)
+(defun shr-column-specs (dom)
+  (let ((columns (make-vector (shr-max-columns dom) 1)))
+    (dolist (row (dom-non-text-children dom))
+      (when (eq (dom-tag row) 'tr)
        (let ((i 0))
-         (dolist (column (cdr row))
-           (when (memq (car column) '(td th))
-             (let ((width (cdr (assq :width (cdr column)))))
+         (dolist (column (dom-children row))
+           (when (and (not (stringp column))
+                      (memq (dom-tag column) '(td th)))
+             (let ((width (dom-attr column 'width)))
                (when (and width
                           (string-match "\\([0-9]+\\)%" width)
                           (not (zerop (setq width (string-to-number
@@ -1796,19 +1810,21 @@ The preference is a float determined from 
`shr-prefer-media-type'."
              (setq i (1+ i)))))))
     columns))
 
-(defun shr-count (cont elem)
+(defun shr-count (dom elem)
   (let ((i 0))
-    (dolist (sub cont)
-      (when (eq (car sub) elem)
+    (dolist (sub (dom-children dom))
+      (when (and (not (stringp sub))
+                (eq (dom-tag sub) elem))
        (setq i (1+ i))))
     i))
 
-(defun shr-max-columns (cont)
+(defun shr-max-columns (dom)
   (let ((max 0))
-    (dolist (row cont)
-      (when (eq (car row) 'tr)
-       (setq max (max max (+ (shr-count (cdr row) 'td)
-                             (shr-count (cdr row) 'th))))))
+    (dolist (row (dom-children dom))
+      (when (and (not (stringp row))
+                (eq (dom-tag row) 'tr))
+       (setq max (max max (+ (shr-count row 'td)
+                             (shr-count row 'th))))))
     max))
 
 (provide 'shr)
diff --git a/lisp/net/snmp-mode.el b/lisp/net/snmp-mode.el
index 07909bc..e5740ac 100644
--- a/lisp/net/snmp-mode.el
+++ b/lisp/net/snmp-mode.el
@@ -1,6 +1,6 @@
 ;;; snmp-mode.el --- SNMP & SNMPv2 MIB major mode
 
-;; Copyright (C) 1995, 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Paul D. Smith <address@hidden>
 ;; Keywords: data
diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el
index 10434f4..b19a432 100644
--- a/lisp/net/soap-client.el
+++ b/lisp/net/soap-client.el
@@ -1,6 +1,6 @@
 ;;;; soap-client.el -- Access SOAP web services from Emacs
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Alexandru Harsanyi <address@hidden>
 ;; Created: December, 2009
diff --git a/lisp/net/soap-inspect.el b/lisp/net/soap-inspect.el
index 9ca76a0..2f9cdcb 100644
--- a/lisp/net/soap-inspect.el
+++ b/lisp/net/soap-inspect.el
@@ -1,6 +1,6 @@
 ;;;; soap-inspect.el -- Interactive inspector for soap WSDL structures
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Alexandru Harsanyi <address@hidden>
 ;; Created: October 2010
diff --git a/lisp/net/socks.el b/lisp/net/socks.el
index 90ee20c..db95795 100644
--- a/lisp/net/socks.el
+++ b/lisp/net/socks.el
@@ -1,6 +1,6 @@
 ;;; socks.el --- A Socks v5 Client for Emacs
 
-;; Copyright (C) 1996-2000, 2002, 2007-2014 Free Software Foundation,
+;; Copyright (C) 1996-2000, 2002, 2007-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: William M. Perry <address@hidden>
diff --git a/lisp/net/telnet.el b/lisp/net/telnet.el
index 8e69000..f844f83 100644
--- a/lisp/net/telnet.el
+++ b/lisp/net/telnet.el
@@ -1,6 +1,6 @@
 ;;; telnet.el --- run a telnet session from within an Emacs buffer
 
-;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2014 Free Software
+;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: William F. Schelter
diff --git a/lisp/net/tls.el b/lisp/net/tls.el
index 6abb048..9e02945 100644
--- a/lisp/net/tls.el
+++ b/lisp/net/tls.el
@@ -1,6 +1,6 @@
 ;;; tls.el --- TLS/SSL support via wrapper around GnuTLS
 
-;; Copyright (C) 1996-1999, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Keywords: comm, tls, gnutls, ssl
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index 2401b4a..f5e2019 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -1,6 +1,6 @@
 ;;; tramp-adb.el --- Functions for calling Android Debug Bridge from Tramp
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Jürgen Hötzel <address@hidden>
 ;; Keywords: comm, processes
@@ -34,7 +34,6 @@
 ;;; Code:
 
 (require 'tramp)
-(require 'time-date)
 
 ;; Pacify byte-compiler.
 (defvar directory-sep-char)
@@ -468,7 +467,7 @@ Emacs dired can't find files."
     (setq time-a (apply 'encode-time (parse-time-string (match-string 0 a))))
     (string-match tramp-adb-ls-date-regexp b)
     (setq time-b (apply 'encode-time (parse-time-string (match-string 0 b))))
-    (tramp-time-less-p time-b time-a)))
+    (time-less-p time-b time-a)))
 
 (defun tramp-adb-ls-output-name-less-p (a b)
   "Sort \"ls\" output by name, ascending."
diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el
index a6b7500..fb9d5e8 100644
--- a/lisp/net/tramp-cache.el
+++ b/lisp/net/tramp-cache.el
@@ -1,6 +1,6 @@
 ;;; tramp-cache.el --- file information caching for Tramp
 
-;; Copyright (C) 2000, 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pittman <address@hidden>
 ;;         Michael Albinus <address@hidden>
@@ -136,7 +136,7 @@ Returns DEFAULT if not set."
                       (tramp-time-diff (current-time) (car value))
                       remote-file-name-inhibit-cache))
                 (and (consp remote-file-name-inhibit-cache)
-                     (tramp-time-less-p
+                     (time-less-p
                       remote-file-name-inhibit-cache (car value)))))
        (setq value (cdr value))
       (setq value default))
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index f1647e8..d45c0aa 100644
--- a/lisp/net/tramp-cmds.el
+++ b/lisp/net/tramp-cmds.el
@@ -1,6 +1,6 @@
 ;;; tramp-cmds.el --- Interactive commands for Tramp
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el
index cd336ec..3ec90ca 100644
--- a/lisp/net/tramp-compat.el
+++ b/lisp/net/tramp-compat.el
@@ -1,6 +1,6 @@
 ;;; tramp-compat.el --- Tramp compatibility functions
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, processes
@@ -35,6 +35,11 @@
 
 (eval-and-compile
 
+  ;; GNU Emacs 22.
+  (unless (fboundp 'ignore-errors)
+    (load "cl" 'noerror)
+    (load "cl-macs" 'noerror))
+
   ;; Some packages must be required for XEmacs, because we compile
   ;; with -no-autoloads.
   (when (featurep 'xemacs)
@@ -44,7 +49,8 @@
     (require 'outline)
     (require 'passwd)
     (require 'pp)
-    (require 'regexp-opt))
+    (require 'regexp-opt)
+    (require 'time-date))
 
   (require 'advice)
   (require 'custom)
@@ -585,6 +591,10 @@ and replace a sub-expression, e.g.
        (setq matches (cons (substring string start l) matches)) ; leftover
        (apply #'concat (nreverse matches))))))
 
+;; `default-toplevel-value' has been declared in Emacs 24.
+(unless (fboundp 'default-toplevel-value)
+  (defalias 'default-toplevel-value 'symbol-value))
+
 (add-hook 'tramp-unload-hook
          (lambda ()
            (unload-feature 'tramp-loaddefs 'force)
diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el
index a723e57..23646a0 100644
--- a/lisp/net/tramp-ftp.el
+++ b/lisp/net/tramp-ftp.el
@@ -1,6 +1,6 @@
 ;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 3080227..1ea52eb 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1,6 +1,6 @@
 ;;; tramp-gvfs.el --- Tramp access functions for GVFS daemon
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-gw.el b/lisp/net/tramp-gw.el
index 0decd88..16eff8c 100644
--- a/lisp/net/tramp-gw.el
+++ b/lisp/net/tramp-gw.el
@@ -1,6 +1,6 @@
 ;;; tramp-gw.el --- Tramp utility functions for HTTP tunnels and SOCKS gateways
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, processes
@@ -195,11 +195,12 @@ instead of the host name declared in TARGET-VEC."
     (setq tramp-gw-gw-proc
          (funcall
           socks-function
-          (tramp-get-connection-name gw-vec)
-          (tramp-get-connection-buffer gw-vec)
+          (let ((tramp-verbose 0)) (tramp-get-connection-name gw-vec))
+          (let ((tramp-verbose 0)) (tramp-get-connection-buffer gw-vec))
           (tramp-file-name-real-host target-vec)
           (tramp-file-name-port target-vec)))
     (set-process-sentinel tramp-gw-gw-proc 'tramp-gw-gw-proc-sentinel)
+    (set-process-coding-system tramp-gw-gw-proc 'binary 'binary)
     (tramp-compat-set-process-query-on-exit-flag tramp-gw-gw-proc nil)
     (tramp-message
      vec 4 "Opened %s process `%s'"
@@ -260,6 +261,10 @@ authentication is requested from proxy server, provide it."
          (200 (setq found t))
          ;; We need basic authentication.
          (401 (setq authentication (tramp-gw-basic-authentication nil first)))
+         ;; Access forbidden.
+         (403 (tramp-error-with-buffer
+               (current-buffer) tramp-gw-vector 'file-error
+               "Connection to %s:%d forbidden." host service))
          ;; Target host not found.
          (404 (tramp-error-with-buffer
                (current-buffer) tramp-gw-vector 'file-error
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 6e46df2..80a256c 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -1,6 +1,6 @@
 ;;; tramp-sh.el --- Tramp access functions for (s)sh-like connections
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; (copyright statements below in code to be updated with the above notice)
 
@@ -65,6 +65,22 @@ files conditionalize this setup based on the TERM 
environment variable."
   :type 'string)
 
 ;;;###tramp-autoload
+(defcustom tramp-histfile-override "/dev/null"
+  "When invoking a shell, override the HISTFILE with this value.
+By default, the HISTFILE is set to the \"/dev/null\" value, which
+is special on Unix systems and indicates the shell history should
+not be logged (this avoids clutter due to Tramp commands).
+
+If you set this variable to nil, however, the *override* is
+disabled, so the history will go to the default storage
+location, e.g. \"$HOME/.sh_history\"."
+  :group 'tramp
+  :version "25.1"
+  :type '(choice (const :tag "Do not override HISTFILE" nil)
+                 (const :tag "Empty the history (/dev/null)" "/dev/null")
+                 (string :tag "Redirect to a file")))
+
+;;;###tramp-autoload
 (defconst tramp-color-escape-sequence-regexp "\e[[;0-9]+m"
   "Escape sequences produced by the \"ls\" command.")
 
@@ -720,7 +736,7 @@ on the remote host.")
 (defconst tramp-perl-encode
   "%s -e '
 # This script contributed by Juanma Barranquero <address@hidden>.
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 use strict;
 
 my %%trans = do {
@@ -758,7 +774,7 @@ This string is passed to `format', so percent characters 
need to be doubled.")
 (defconst tramp-perl-decode
   "%s -e '
 # This script contributed by Juanma Barranquero <address@hidden>.
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 use strict;
 
 my %%trans = do {
@@ -2455,8 +2471,12 @@ The method used must be an out-of-band method."
                   (mapconcat 'identity (process-command p) " "))
                  (tramp-set-connection-property p "vector" orig-vec)
                  (tramp-compat-set-process-query-on-exit-flag p nil)
-                 (tramp-process-actions
-                  p v nil tramp-actions-copy-out-of-band)
+
+                 ;; We must adapt `tramp-local-end-of-line' for
+                 ;; sending the password.
+                 (let ((tramp-local-end-of-line tramp-rsh-end-of-line))
+                   (tramp-process-actions
+                    p v nil tramp-actions-copy-out-of-band))
 
                  ;; Check the return code.
                  (goto-char (point-max))
@@ -2835,16 +2855,27 @@ the result will be a local, non-Tramp, file name."
                        (list (replace-match " \\\\\n" nil nil (cadr args))))
                       (setq i (+ i 250))))
                   (cdr args)))
+          ;; Use a human-friendly prompt, for example for `shell'.
+          (prompt (format "PS1=%s"
+                          (format "%s %s"
+                                  (file-remote-p default-directory)
+                                  tramp-initial-end-of-output)))
+          ;; We use as environment the difference to toplevel
+          ;; `process-environment'.
+          env
+          (env
+           (dolist
+               (elt
+                (cons prompt (nreverse (copy-sequence process-environment)))
+                env)
+             (or (member elt (default-toplevel-value 'process-environment))
+                 (setq env (cons elt env)))))
           (command
            (when (stringp program)
-             (format "cd %s && exec %s env PS1=%s %s"
+             (format "cd %s && exec %s env %s %s"
                      (tramp-shell-quote-argument localname)
                      (if heredoc (format "<<'%s'" tramp-end-of-heredoc) "")
-                     ;; Use a human-friendly prompt, for example for `shell'.
-                     (tramp-shell-quote-argument
-                      (format "%s %s"
-                              (file-remote-p default-directory)
-                              tramp-initial-end-of-output))
+                     (mapconcat 'tramp-shell-quote-argument env " ")
                      (if heredoc
                          (format "%s\n(\n%s\n) </dev/tty\n%s"
                                  program (car args) tramp-end-of-heredoc)
@@ -2856,7 +2887,7 @@ the result will be a local, non-Tramp, file name."
           (name1 name)
           (i 0)
           ;; We do not want to raise an error when
-          ;; `start-file-process' has been started several time in
+          ;; `start-file-process' has been started several times in
           ;; `eshell' and friends.
           (tramp-current-connection nil))
 
@@ -2931,10 +2962,20 @@ the result will be a local, non-Tramp, file name."
     (error "Implementation does not handle immediate return"))
 
   (with-parsed-tramp-file-name default-directory nil
-    (let (command input tmpinput stderr tmpstderr outbuf ret)
+    (let (command env input tmpinput stderr tmpstderr outbuf ret)
       ;; Compute command.
       (setq command (mapconcat 'tramp-shell-quote-argument
                               (cons program args) " "))
+      ;; We use as environment the difference to toplevel 
`process-environment'.
+      (setq env
+           (dolist (elt (nreverse (copy-sequence process-environment)) env)
+             (or (member elt (default-toplevel-value 'process-environment))
+                 (setq env (cons elt env)))))
+      (when env
+       (setq command
+             (format
+              "env %s %s"
+              (mapconcat 'tramp-shell-quote-argument env " ") command)))
       ;; Determine input.
       (if (null infile)
          (setq input "/dev/null")
@@ -3847,9 +3888,24 @@ file exists and nonzero exit status otherwise."
        (setq item (pop alist))
        (when (string-match (car item) shell)
          (setq extra-args (cdr item))))
+      ;; It is useful to set the prompt in the following command
+      ;; because some people have a setting for $PS1 which /bin/sh
+      ;; doesn't know about and thus /bin/sh will display a strange
+      ;; prompt.  For example, if $PS1 has "${CWD}" in the value, then
+      ;; ksh will display the current working directory but /bin/sh
+      ;; will display a dollar sign.  The following command line sets
+      ;; $PS1 to a sane value, and works under Bourne-ish shells as
+      ;; well as csh-like shells.  We also unset the variable $ENV
+      ;; because that is read by some sh implementations (eg, bash
+      ;; when called as sh) on startup; this way, we avoid the startup
+      ;; file clobbering $PS1.  $PROMPT_COMMAND is another way to set
+      ;; the prompt in /bin/bash, it must be discarded as well.
       (tramp-send-command
        vec (format
-           "exec env ENV='' HISTFILE=/dev/null PROMPT_COMMAND='' PS1=%s PS2='' 
PS3='' %s %s"
+           "exec env ENV=''%s PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s %s"
+            (if tramp-histfile-override
+                (concat " HISTFILE=" tramp-histfile-override)
+              "")
            (tramp-shell-quote-argument tramp-end-of-output)
            shell (or extra-args ""))
        t))
@@ -3923,20 +3979,6 @@ seconds.  If not, it produces an error message with the 
given ERROR-ARGS."
 Mainly sets the prompt and the echo correctly.  PROC is the shell
 process to set up.  VEC specifies the connection."
   (let ((tramp-end-of-output tramp-initial-end-of-output))
-    ;; It is useful to set the prompt in the following command because
-    ;; some people have a setting for $PS1 which /bin/sh doesn't know
-    ;; about and thus /bin/sh will display a strange prompt.  For
-    ;; example, if $PS1 has "${CWD}" in the value, then ksh will
-    ;; display the current working directory but /bin/sh will display
-    ;; a dollar sign.  The following command line sets $PS1 to a sane
-    ;; value, and works under Bourne-ish shells as well as csh-like
-    ;; shells.  Daniel Pittman reports that the unusual positioning of
-    ;; the single quotes makes it work under `rc', too.  We also unset
-    ;; the variable $ENV because that is read by some sh
-    ;; implementations (eg, bash when called as sh) on startup; this
-    ;; way, we avoid the startup file clobbering $PS1.  $PROMPT_COMMAND
-    ;; is another way to set the prompt in /bin/bash, it must be
-    ;; discarded as well.
     (tramp-open-shell
      vec
      (or (tramp-get-connection-property vec "remote-shell" nil)
@@ -3971,9 +4013,9 @@ process to set up.  VEC specifies the connection."
     (if (featurep 'mule)
        ;; Use MULE to select the right EOL convention for communicating
        ;; with the process.
-       (let ((cs (or (when (string-match
-                            "utf8" (or (tramp-get-remote-locale vec) ""))
-                       (cons 'utf-8 'utf-8))
+       (let ((cs (or (and (memq 'utf-8 (coding-system-list))
+                          (string-match "utf8" (tramp-get-remote-locale vec))
+                          (cons 'utf-8 'utf-8))
                      (tramp-compat-funcall 'process-coding-system proc)
                      (cons 'undecided 'undecided)))
              cs-decode cs-encode)
@@ -4079,8 +4121,7 @@ process to set up.  VEC specifies the connection."
   ;; Set the environment.
   (tramp-message vec 5 "Setting default environment")
 
-  (let ((env (append (when (tramp-get-remote-locale vec) ; Discard `(nil)'.
-                      `(,(tramp-get-remote-locale vec)))
+  (let ((env (append `(,(tramp-get-remote-locale vec))
                     (copy-sequence tramp-remote-process-environment)))
        unset vars item)
     (while env
@@ -4473,7 +4514,8 @@ Gateway hops are already opened."
        ;; Therefore, we must remember the gateway vector.  But we
        ;; cannot do it as connection property, because it shouldn't
        ;; be persistent.  And we have no started process yet either.
-       (tramp-set-file-property (car target-alist) "" "gateway" hop)))
+       (let ((tramp-verbose 0))
+         (tramp-set-file-property (car target-alist) "" "gateway" hop))))
 
     ;; Foreign and out-of-band methods are not supported for multi-hops.
     (when (cdr target-alist)
@@ -4585,7 +4627,8 @@ connection if a previous connection has died for some 
reason."
                (delete-process p))
              (setenv "TERM" tramp-terminal-type)
              (setenv "LC_ALL" "en_US.utf8")
-             (setenv "HISTFILE" "/dev/null")
+             (when tramp-histfile-override
+                (setenv "HISTFILE" tramp-histfile-override))
              (setenv "PROMPT_COMMAND")
              (setenv "PS1" tramp-initial-end-of-output)
              (let* ((target-alist (tramp-compute-multi-hops vec))
@@ -4649,7 +4692,8 @@ connection if a previous connection has died for some 
reason."
                           l-method 'tramp-connection-timeout))
                         (gw-args
                          (tramp-get-method-parameter l-method 'tramp-gw-args))
-                        (gw (tramp-get-file-property hop "" "gateway" nil))
+                        (gw (let ((tramp-verbose 0))
+                              (tramp-get-file-property hop "" "gateway" nil)))
                         (g-method (and gw (tramp-file-name-method gw)))
                         (g-user (and gw (tramp-file-name-user gw)))
                         (g-host (and gw (tramp-file-name-real-host gw)))
@@ -4677,8 +4721,10 @@ connection if a previous connection has died for some 
reason."
                      (setq login-args (append async-args login-args)))
 
                    ;; Add gateway arguments if necessary.
-                   (when (and gw gw-args)
-                     (setq login-args (append gw-args login-args)))
+                   (when gw
+                     (tramp-set-connection-property p "gateway" t)
+                     (when gw-args
+                       (setq login-args (append gw-args login-args))))
 
                    ;; Check for port number.  Until now, there's no
                    ;; need for handling like method, user, host.
@@ -4864,8 +4910,9 @@ FMT and ARGS which are passed to `error'."
   (or (tramp-send-command-and-check vec command)
       (apply 'tramp-error vec 'file-error fmt args)))
 
-(defun tramp-send-command-and-read (vec command &optional noerror)
+(defun tramp-send-command-and-read (vec command &optional noerror marker)
   "Run COMMAND and return the output, which must be a Lisp expression.
+If MARKER is a regexp, read the output after that string.
 In case there is no valid Lisp expression and NOERROR is nil, it
 raises an error."
   (when (if noerror
@@ -4873,8 +4920,17 @@ raises an error."
          (tramp-barf-unless-okay
           vec command "`%s' returns with error" command))
     (with-current-buffer (tramp-get-connection-buffer vec)
-      ;; Read the expression.
       (goto-char (point-min))
+      ;; Read the marker.
+      (when (stringp marker)
+       (condition-case nil
+           (re-search-forward marker)
+         (error (unless noerror
+                  (tramp-error
+                   vec 'file-error
+                   "`%s' does not return the marker `%s': `%s'"
+                   command marker (buffer-string))))))
+      ;; Read the expression.
       (condition-case nil
          (prog1 (read (current-buffer))
            ;; Error handling.
@@ -5026,13 +5082,22 @@ Return ATTR."
                   "/bin:/usr/bin")
                  "/bin:/usr/bin"))))
           (own-remote-path
-            (when elt2
-              (condition-case nil
-                  (tramp-send-command-and-read vec "echo \\\"$PATH\\\"")
-                (error
-                 (tramp-message
-                  vec 3 "$PATH not set, ignoring `tramp-own-remote-path'.")
-                 nil)))))
+           ;; The login shell could return more than just the $PATH
+           ;; string.  So we use `tramp-end-of-heredoc' as marker.
+           (when elt2
+             (tramp-send-command-and-read
+              vec
+              (format
+               "%s -l %s 'echo %s \\\"$PATH\\\"'"
+               (tramp-get-method-parameter
+                (tramp-file-name-method vec) 'tramp-remote-shell)
+               (mapconcat
+                'identity
+                (tramp-get-method-parameter
+                 (tramp-file-name-method vec) 'tramp-remote-shell-args)
+                " ")
+               (tramp-shell-quote-argument tramp-end-of-heredoc))
+              nil (regexp-quote tramp-end-of-heredoc)))))
 
       ;; Replace place holder `tramp-default-remote-path'.
       (when elt1
@@ -5076,7 +5141,7 @@ Return ATTR."
 (defun tramp-get-remote-locale (vec)
   (with-tramp-connection-property vec "locale"
     (tramp-send-command vec "locale -a")
-    (let ((candidates '("en_US.utf8" "C.utf8" "C"))
+    (let ((candidates '("en_US.utf8" "C.utf8"))
          locale)
       (with-current-buffer (tramp-get-connection-buffer vec)
        (while candidates
@@ -5086,7 +5151,7 @@ Return ATTR."
                    candidates nil)
            (setq candidates (cdr candidates)))))
       ;; Return value.
-      (when locale (format "LC_ALL=%s" locale)))))
+      (format "LC_ALL=%s" (or locale "C")))))
 
 (defun tramp-get-ls-command (vec)
   (with-tramp-connection-property vec "ls"
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index 15ae9ed..d5fe17f 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -1,6 +1,6 @@
 ;;; tramp-smb.el --- Tramp access functions for SMB servers
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, processes
@@ -513,7 +513,7 @@ pass to the OPERATION."
                ;; Reset the transfer process properties.
                (tramp-set-connection-property v "process-name" nil)
                (tramp-set-connection-property v "process-buffer" nil)
-               (when t1 (delete-directory tmpdir 'recurse))))
+               (when t1 (tramp-compat-delete-directory tmpdir 'recurse))))
 
            ;; Handle KEEP-DATE argument.
            (when keep-date
@@ -976,7 +976,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are 
completely ignored."
                 (lambda (x y)
                   (if (string-match "t" switches)
                       ;; Sort by date.
-                      (tramp-time-less-p (nth 3 y) (nth 3 x))
+                      (time-less-p (nth 3 y) (nth 3 x))
                     ;; Sort by name.
                     (string-lessp (nth 0 x) (nth 0 y))))))
 
@@ -1010,8 +1010,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are 
completely ignored."
                     (or (nth 3 attr) "nogroup") ; gid
                     (or (nth 7 attr) (nth 2 x)) ; size
                     (format-time-string
-                     (if (tramp-time-less-p
-                          (tramp-time-subtract (current-time) (nth 3 x))
+                     (if (time-less-p (time-subtract (current-time) (nth 3 x))
                           tramp-half-a-year)
                          "%b %e %R"
                        "%b %e  %Y")
diff --git a/lisp/net/tramp-uu.el b/lisp/net/tramp-uu.el
index 394d513..efa43b5 100644
--- a/lisp/net/tramp-uu.el
+++ b/lisp/net/tramp-uu.el
@@ -1,6 +1,6 @@
 ;;; tramp-uu.el --- uuencode in Lisp
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <address@hidden>
 ;; Keywords: comm, terminals
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 01cd819..ba0d13e 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -1,6 +1,6 @@
 ;;; tramp.el --- Transparent Remote Access, Multiple Protocol
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <address@hidden>
 ;;         Michael Albinus <address@hidden>
@@ -64,7 +64,6 @@
 (defvar bkup-backup-directory-info)
 (defvar directory-sep-char)
 (defvar eshell-path-env)
-(defvar file-notify-descriptors)
 (defvar ls-lisp-use-insert-directory-program)
 (defvar outline-regexp)
 
@@ -1610,7 +1609,7 @@ an input event arrives.  The other arguments are passed 
to `tramp-error'."
          (let ((enable-recursive-minibuffers t))
            ;; `tramp-error' does not show messages.  So we must do it
            ;; ourselves.
-           (message fmt-string arguments)
+           (apply 'message fmt-string arguments)
            ;; Show buffer.
            (pop-to-buffer buf)
            (discard-input)
@@ -2253,8 +2252,9 @@ Falls back to normal file name handler if no Tramp file 
name handler exists."
 ;;;###autoload
 (progn (defun tramp-autoload-file-name-handler (operation &rest args)
   "Load Tramp file name handler, and perform OPERATION."
-  ;; Avoid recursive loading of tramp.el.
-  (let ((default-directory temporary-file-directory))
+  ;; Avoid recursive loading of tramp.el.  `temporary-file-directory'
+  ;; does not exist in XEmacs, so we must use something else.
+  (let ((default-directory (or (symbol-value 'temporary-file-directory) "/")))
     (load "tramp" nil t))
   (apply operation args)))
 
@@ -2968,8 +2968,8 @@ User is always nil."
   (cond
    ((not (file-exists-p file1)) nil)
    ((not (file-exists-p file2)) t)
-   (t (tramp-time-less-p (nth 5 (file-attributes file2))
-                        (nth 5 (file-attributes file1))))))
+   (t (time-less-p (nth 5 (file-attributes file2))
+                  (nth 5 (file-attributes file1))))))
 
 (defun tramp-handle-file-regular-p (filename)
   "Like `file-regular-p' for Tramp files."
@@ -3085,115 +3085,118 @@ User is always nil."
   (setq filename (expand-file-name filename))
   (let (result local-copy remote-copy)
     (with-parsed-tramp-file-name filename nil
-      (with-tramp-progress-reporter
-         v 3 (format "Inserting `%s'" filename)
-       (unwind-protect
-           (if (not (file-exists-p filename))
-               (progn
-                 ;; We don't raise a Tramp error, because it might be
-                 ;; suppressed, like in `find-file-noselect-1'.
-                 (tramp-message
-                  v 1 "File not `%s' found on remote host" filename)
-                 (signal 'file-error
-                         (list "File not found on remote host" filename)))
-
-             (if (and (tramp-local-host-p v)
-                      (let (file-name-handler-alist)
-                        (file-readable-p localname)))
-                 ;; Short track: if we are on the local host, we can
-                 ;; run directly.
-                 (setq result
-                       (tramp-run-real-handler
-                        'insert-file-contents
-                        (list localname visit beg end replace)))
-
-               ;; When we shall insert only a part of the file, we
-               ;; copy this part.  This works only for the shell file
-               ;; name handlers.
-               (when (and (or beg end)
-                          (tramp-get-method-parameter
-                           (tramp-file-name-method v) 'tramp-login-program))
-                 (setq remote-copy (tramp-make-tramp-temp-file v))
-                 ;; This is defined in tramp-sh.el.  Let's assume
-                 ;; this is loaded already.
-                 (tramp-compat-funcall
-                  'tramp-send-command
-                  v
-                  (cond
-                   ((and beg end)
-                    (format "dd bs=1 skip=%d if=%s count=%d of=%s"
-                            beg (tramp-shell-quote-argument localname)
-                            (- end beg) remote-copy))
-                   (beg
-                    (format "dd bs=1 skip=%d if=%s of=%s"
-                            beg (tramp-shell-quote-argument localname)
-                            remote-copy))
-                   (end
-                    (format "dd bs=1 count=%d if=%s of=%s"
-                            end (tramp-shell-quote-argument localname)
-                            remote-copy))))
-                 (setq tramp-temp-buffer-file-name nil beg nil end nil))
-
-               ;; `insert-file-contents-literally' takes care to
-               ;; avoid calling jka-compr.  By let-binding
-               ;; `inhibit-file-name-operation', we propagate that
-               ;; care to the `file-local-copy' operation.
-               (setq local-copy
-                     (let ((inhibit-file-name-operation
-                            (when (eq inhibit-file-name-operation
-                                      'insert-file-contents)
-                              'file-local-copy)))
-                       (cond
-                        ((stringp remote-copy)
-                         (file-local-copy
-                          (tramp-make-tramp-file-name
-                           method user host remote-copy)))
-                        ((stringp tramp-temp-buffer-file-name)
-                         (copy-file filename tramp-temp-buffer-file-name 'ok)
-                         tramp-temp-buffer-file-name)
-                        (t (file-local-copy filename)))))
-
-               ;; When the file is not readable for the owner, it
-               ;; cannot be inserted, even if it is readable for the
-               ;; group or for everybody.
-               (set-file-modes
-                local-copy (tramp-compat-octal-to-decimal "0600"))
-
-               (when (and (null remote-copy)
-                          (tramp-get-method-parameter
-                           method 'tramp-copy-keep-tmpfile))
-                 ;; We keep the local file for performance reasons,
-                 ;; useful for "rsync".
-                 (setq tramp-temp-buffer-file-name local-copy))
-
-               ;; We must ensure that `file-coding-system-alist'
-               ;; matches `local-copy'.  We must also use `visit',
-               ;; otherwise there might be an error in the
-               ;; `revert-buffer' function under XEmacs.
-               (let ((file-coding-system-alist
-                      (tramp-find-file-name-coding-system-alist
-                       filename local-copy)))
-                 (setq result
-                       (insert-file-contents
-                        local-copy visit beg end replace)))))
-
-         ;; Save exit.
-         (progn
-           (when visit
-             (setq buffer-file-name filename)
-             (setq buffer-read-only (not (file-writable-p filename)))
-             (set-visited-file-modtime)
-             (set-buffer-modified-p nil))
-           (when (and (stringp local-copy)
-                      (or remote-copy (null tramp-temp-buffer-file-name)))
-             (delete-file local-copy))
-           (when (stringp remote-copy)
-             (delete-file
-              (tramp-make-tramp-file-name method user host remote-copy)))))))
-
-    ;; Result.
-    (list (expand-file-name filename)
-         (cadr result))))
+      (unwind-protect
+         (if (not (file-exists-p filename))
+             (tramp-error
+              v 'file-error "File `%s' not found on remote host" filename)
+
+           (with-tramp-progress-reporter
+               v 3 (format "Inserting `%s'" filename)
+             (condition-case err
+                 (if (and (tramp-local-host-p v)
+                          (let (file-name-handler-alist)
+                            (file-readable-p localname)))
+                     ;; Short track: if we are on the local host, we can
+                     ;; run directly.
+                     (setq result
+                           (tramp-run-real-handler
+                            'insert-file-contents
+                            (list localname visit beg end replace)))
+
+                   ;; When we shall insert only a part of the file, we
+                   ;; copy this part.  This works only for the shell file
+                   ;; name handlers.
+                   (when (and (or beg end)
+                              (tramp-get-method-parameter
+                               (tramp-file-name-method v)
+                               'tramp-login-program))
+                     (setq remote-copy (tramp-make-tramp-temp-file v))
+                     ;; This is defined in tramp-sh.el.  Let's assume
+                     ;; this is loaded already.
+                     (tramp-compat-funcall
+                      'tramp-send-command
+                      v
+                      (cond
+                       ((and beg end)
+                        (format "dd bs=1 skip=%d if=%s count=%d of=%s"
+                                beg (tramp-shell-quote-argument localname)
+                                (- end beg) remote-copy))
+                       (beg
+                        (format "dd bs=1 skip=%d if=%s of=%s"
+                                beg (tramp-shell-quote-argument localname)
+                                remote-copy))
+                       (end
+                        (format "dd bs=1 count=%d if=%s of=%s"
+                                end (tramp-shell-quote-argument localname)
+                                remote-copy))))
+                     (setq tramp-temp-buffer-file-name nil beg nil end nil))
+
+                   ;; `insert-file-contents-literally' takes care to
+                   ;; avoid calling jka-compr.  By let-binding
+                   ;; `inhibit-file-name-operation', we propagate that
+                   ;; care to the `file-local-copy' operation.
+                   (setq local-copy
+                         (let ((inhibit-file-name-operation
+                                (when (eq inhibit-file-name-operation
+                                          'insert-file-contents)
+                                  'file-local-copy)))
+                           (cond
+                            ((stringp remote-copy)
+                             (file-local-copy
+                              (tramp-make-tramp-file-name
+                               method user host remote-copy)))
+                            ((stringp tramp-temp-buffer-file-name)
+                             (copy-file
+                              filename tramp-temp-buffer-file-name 'ok)
+                             tramp-temp-buffer-file-name)
+                            (t (file-local-copy filename)))))
+
+                   ;; When the file is not readable for the owner, it
+                   ;; cannot be inserted, even if it is readable for the
+                   ;; group or for everybody.
+                   (set-file-modes
+                    local-copy (tramp-compat-octal-to-decimal "0600"))
+
+                   (when (and (null remote-copy)
+                              (tramp-get-method-parameter
+                               method 'tramp-copy-keep-tmpfile))
+                     ;; We keep the local file for performance reasons,
+                     ;; useful for "rsync".
+                     (setq tramp-temp-buffer-file-name local-copy))
+
+                   ;; We must ensure that `file-coding-system-alist'
+                   ;; matches `local-copy'.  We must also use `visit',
+                   ;; otherwise there might be an error in the
+                   ;; `revert-buffer' function under XEmacs.
+                   (let ((file-coding-system-alist
+                          (tramp-find-file-name-coding-system-alist
+                           filename local-copy)))
+                     (setq result
+                           (insert-file-contents
+                            local-copy visit beg end replace))))
+               (error
+                (add-hook 'find-file-not-found-functions
+                          `(lambda () (signal ',(car err) ',(cdr err)))
+                          nil t)
+                (signal (car err) (cdr err))))))
+
+       ;; Save exit.
+       (progn
+         (when visit
+           (setq buffer-file-name filename)
+           (setq buffer-read-only (not (file-writable-p filename)))
+           (set-visited-file-modtime)
+           (set-buffer-modified-p nil))
+         (when (and (stringp local-copy)
+                    (or remote-copy (null tramp-temp-buffer-file-name)))
+           (delete-file local-copy))
+         (when (stringp remote-copy)
+           (delete-file
+            (tramp-make-tramp-file-name method user host remote-copy)))))
+
+      ;; Result.
+      (list (expand-file-name filename)
+           (cadr result)))))
 
 (defun tramp-handle-load (file &optional noerror nomessage nosuffix 
must-suffix)
   "Like `load' for Tramp files."
@@ -3225,7 +3228,7 @@ User is always nil."
       t)))
 
 (defun tramp-handle-make-symbolic-link
-  (filename linkname &optional ok-if-already-exists)
+  (filename linkname &optional _ok-if-already-exists)
   "Like `make-symbolic-link' for Tramp files."
   (with-parsed-tramp-file-name
       (if (tramp-tramp-file-p filename) filename linkname) nil
@@ -3411,7 +3414,7 @@ of."
 (defun tramp-handle-file-notify-rm-watch (proc)
   "Like `file-notify-rm-watch' for Tramp files."
   ;; The descriptor must be a process object.
-  (unless (and (processp proc) (gethash proc file-notify-descriptors))
+  (unless (processp proc)
     (tramp-error proc 'file-notify-error "Not a valid descriptor %S" proc))
   (tramp-message proc 6 "Kill %S" proc)
   (kill-process proc))
@@ -3444,9 +3447,9 @@ of."
       ;; Let's check whether a wrong password has been sent already.
       ;; Sometimes, the process returns a new password request
       ;; immediately after rejecting the previous (wrong) one.
-      (goto-char (point-min))
-      (when (search-forward-regexp tramp-wrong-passwd-regexp nil t)
+      (unless (tramp-get-connection-property vec "first-password-request" nil)
        (tramp-clear-passwd vec))
+      (goto-char (point-min))
       (tramp-check-for-regexp proc tramp-password-prompt-regexp)
       (tramp-message vec 3 "Sending %s" (match-string 1))
       ;; We don't call `tramp-send-string' in order to hide the
@@ -3608,15 +3611,19 @@ connection buffer."
 This is needed in order to hide `last-coding-system-used', which is set
 for process communication also."
   (with-current-buffer (process-buffer proc)
-    (tramp-message proc 10 "%s %s" proc (process-status proc))
-    (let (buffer-read-only last-coding-system-used)
+    ;; FIXME: If there is a gateway process, we need communication
+    ;; between several processes.  Too complicate to implement, so we
+    ;; read output from all processes.
+    (let ((p (if (tramp-get-connection-property proc "gateway" nil) nil proc))
+         buffer-read-only last-coding-system-used)
       ;; Under Windows XP, accept-process-output doesn't return
       ;; sometimes.  So we add an additional timeout.
       (with-timeout ((or timeout 1))
        (if (featurep 'xemacs)
-           (accept-process-output proc timeout timeout-msecs)
-         (accept-process-output proc timeout timeout-msecs (and proc t)))))
-    (tramp-message proc 10 "\n%s" (buffer-string))))
+           (accept-process-output p timeout timeout-msecs)
+         (accept-process-output p timeout timeout-msecs (and proc t))))
+      (tramp-message proc 10 "%s %s %s\n%s"
+                    proc (process-status proc) p (buffer-string)))))
 
 (defun tramp-check-for-regexp (proc regexp)
   "Check, whether REGEXP is contained in process buffer of PROC.
@@ -4171,7 +4178,8 @@ Invokes `password-read' if available, `read-passwd' else."
                (tramp-check-for-regexp proc tramp-password-prompt-regexp)
                (format "%s for %s " (capitalize (match-string 1)) key))))
         ;; We suspend the timers while reading the password.
-         (stimers (with-timeout-suspend))
+         (stimers (and (functionp 'with-timeout-suspend)
+                      (tramp-compat-funcall 'with-timeout-suspend)))
         auth-info auth-passwd)
 
     (unwind-protect
@@ -4182,25 +4190,27 @@ Invokes `password-read' if available, `read-passwd' 
else."
               ;; it's bound.  `auth-source-user-or-password' is an
               ;; obsoleted function, it has been replaced by
               ;; `auth-source-search'.
-              (and (boundp 'auth-sources)
-                   (tramp-get-connection-property
-                    v "first-password-request" nil)
-                   ;; Try with Tramp's current method.
-                   (if (fboundp 'auth-source-search)
-                       (setq auth-info
-                             (tramp-compat-funcall
-                              'auth-source-search
-                              :max 1
-                              :user (or tramp-current-user t)
-                              :host tramp-current-host
-                              :port tramp-current-method)
-                             auth-passwd (plist-get (nth 0 auth-info) :secret)
-                             auth-passwd (if (functionp auth-passwd)
-                                             (funcall auth-passwd)
-                                           auth-passwd))
-                     (tramp-compat-funcall
-                      'auth-source-user-or-password
-                      "password" tramp-current-host tramp-current-method)))
+              (ignore-errors
+                (and (boundp 'auth-sources)
+                     (tramp-get-connection-property
+                      v "first-password-request" nil)
+                     ;; Try with Tramp's current method.
+                     (if (fboundp 'auth-source-search)
+                         (setq auth-info
+                               (tramp-compat-funcall
+                                'auth-source-search
+                                :max 1
+                                :user (or tramp-current-user t)
+                                :host tramp-current-host
+                                :port tramp-current-method)
+                               auth-passwd (plist-get
+                                            (nth 0 auth-info) :secret)
+                               auth-passwd (if (functionp auth-passwd)
+                                               (funcall auth-passwd)
+                                             auth-passwd))
+                       (tramp-compat-funcall
+                        'auth-source-user-or-password
+                        "password" tramp-current-host tramp-current-method))))
               ;; Try the password cache.
               (when (functionp 'password-read)
                 (let ((password
@@ -4211,7 +4221,8 @@ Invokes `password-read' if available, `read-passwd' else."
               (read-passwd pw-prompt))
            (tramp-set-connection-property v "first-password-request" nil)))
       ;; Reenable the timers.
-      (with-timeout-unsuspend stimers))))
+      (and (functionp 'with-timeout-unsuspend)
+          (tramp-compat-funcall 'with-timeout-unsuspend stimers)))))
 
 ;;;###tramp-autoload
 (defun tramp-clear-passwd (vec)
@@ -4237,16 +4248,6 @@ Invokes `password-read' if available, `read-passwd' 
else."
   "Alist mapping month names to integers.")
 
 ;;;###tramp-autoload
-(defun tramp-time-less-p (t1 t2)
-  "Say whether time value T1 is less than time value T2."
-  (time-less-p (or t1 0) (or t2 0)))
-
-(defun tramp-time-subtract (t1 t2)
-  "Subtract two time values.
-Return the difference in the format of a time value."
-  (time-subtract (or t1 0) (or t2 0)))
-
-;;;###tramp-autoload
 (defun tramp-time-diff (t1 t2)
   "Return the difference between the two times, in seconds.
 T1 and T2 are time values (as returned by `current-time' for example)."
@@ -4264,7 +4265,7 @@ T1 and T2 are time values (as returned by `current-time' 
for example)."
          (if (< (length t1) 3) (append t1 '(0)) t1)
          (if (< (length t2) 3) (append t2 '(0)) t2)))
         (t
-        (let ((time (tramp-time-subtract t1 t2)))
+        (let ((time (time-subtract t1 t2)))
           (+ (* (car time) 65536.0)
              (cadr time)
              (/ (or (nth 2 time) 0) 1000000.0))))))
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 065c3f3..70092d2 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -1,7 +1,7 @@
 ;;; trampver.el --- Transparent Remote Access, Multiple Protocol
 ;;; lisp/trampver.el.  Generated from trampver.el.in by configure.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <address@hidden>
 ;; Keywords: comm, processes
@@ -31,7 +31,7 @@
 ;; should be changed only there.
 
 ;;;###tramp-autoload
-(defconst tramp-version "2.2.11-pre"
+(defconst tramp-version "2.2.11-24.5"
   "This version of Tramp.")
 
 ;;;###tramp-autoload
@@ -44,7 +44,7 @@
                      (= emacs-major-version 21)
                      (>= emacs-minor-version 4)))
             "ok"
-          (format "Tramp 2.2.11-pre is not fit for %s"
+          (format "Tramp 2.2.11-24.5 is not fit for %s"
                   (when (string-match "^.*$" (emacs-version))
                     (match-string 0 (emacs-version)))))))
   (unless (string-match "\\`ok\\'" x) (error "%s" x)))
diff --git a/lisp/net/webjump.el b/lisp/net/webjump.el
index f3626a7..7cb017f 100644
--- a/lisp/net/webjump.el
+++ b/lisp/net/webjump.el
@@ -1,6 +1,6 @@
 ;;; webjump.el --- programmable Web hotlist
 
-;; Copyright (C) 1996-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author:    Neil W. Van Dyke <address@hidden>
 ;; Created:   09-Aug-1996
diff --git a/lisp/net/zeroconf.el b/lisp/net/zeroconf.el
index 1e1aa3b..7fae9e6 100644
--- a/lisp/net/zeroconf.el
+++ b/lisp/net/zeroconf.el
@@ -1,6 +1,6 @@
 ;;; zeroconf.el --- Service browser using Avahi.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, hardware
diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index b607eb9..e307eac 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -1,6 +1,6 @@
 ;;; newcomment.el --- (un)comment regions of buffers -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: code extracted from Emacs-20's simple.el
 ;; Maintainer: Stefan Monnier <address@hidden>
diff --git a/lisp/notifications.el b/lisp/notifications.el
index 1da0ed3..ccd64fb 100644
--- a/lisp/notifications.el
+++ b/lisp/notifications.el
@@ -1,6 +1,6 @@
 ;;; notifications.el --- Client interface to desktop notifications.
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <address@hidden>
 ;; Keywords: comm desktop notifications
diff --git a/lisp/novice.el b/lisp/novice.el
index 46727d3..ce6e16f 100644
--- a/lisp/novice.el
+++ b/lisp/novice.el
@@ -1,6 +1,6 @@
 ;;; novice.el --- handling of disabled commands ("novice mode") for Emacs
 
-;; Copyright (C) 1985-1987, 1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/nxml/.gitignore b/lisp/nxml/.gitignore
deleted file mode 100644
index f18ed02..0000000
--- a/lisp/nxml/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.elc
-subdirs.el
diff --git a/lisp/nxml/nxml-enc.el b/lisp/nxml/nxml-enc.el
index 1f94e36..3291768 100644
--- a/lisp/nxml/nxml-enc.el
+++ b/lisp/nxml/nxml-enc.el
@@ -1,6 +1,6 @@
 ;;; nxml-enc.el --- XML encoding auto-detection
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-glyph.el b/lisp/nxml/nxml-glyph.el
index f05beea..449d92b 100644
--- a/lisp/nxml/nxml-glyph.el
+++ b/lisp/nxml/nxml-glyph.el
@@ -1,6 +1,6 @@
 ;;; nxml-glyph.el --- glyph-handling for nxml-mode
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-maint.el b/lisp/nxml/nxml-maint.el
index 7fd3372..73abfd9 100644
--- a/lisp/nxml/nxml-maint.el
+++ b/lisp/nxml/nxml-maint.el
@@ -1,6 +1,6 @@
 ;;; nxml-maint.el --- commands for maintainers of nxml-*.el
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el
index b198f4a..6c5c85b 100644
--- a/lisp/nxml/nxml-mode.el
+++ b/lisp/nxml/nxml-mode.el
@@ -1,6 +1,6 @@
 ;;; nxml-mode.el --- a new XML mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003-2004, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-ns.el b/lisp/nxml/nxml-ns.el
index 1087dd1..e55ecc3 100644
--- a/lisp/nxml/nxml-ns.el
+++ b/lisp/nxml/nxml-ns.el
@@ -1,6 +1,6 @@
 ;;; nxml-ns.el --- XML namespace processing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-outln.el b/lisp/nxml/nxml-outln.el
index e4b8fc7..a8dc5b1 100644
--- a/lisp/nxml/nxml-outln.el
+++ b/lisp/nxml/nxml-outln.el
@@ -1,6 +1,6 @@
 ;;; nxml-outln.el --- outline support for nXML mode
 
-;; Copyright (C) 2004, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-parse.el b/lisp/nxml/nxml-parse.el
index ecf9056..c0a8497 100644
--- a/lisp/nxml/nxml-parse.el
+++ b/lisp/nxml/nxml-parse.el
@@ -1,6 +1,6 @@
 ;;; nxml-parse.el --- XML parser, sharing infrastructure with nxml-mode
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-rap.el b/lisp/nxml/nxml-rap.el
index 7d360cb..e6857a9 100644
--- a/lisp/nxml/nxml-rap.el
+++ b/lisp/nxml/nxml-rap.el
@@ -1,6 +1,6 @@
 ;;; nxml-rap.el --- low-level support for random access parsing for nXML mode
 
-;; Copyright (C) 2003-2004, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-uchnm.el b/lisp/nxml/nxml-uchnm.el
index 5447b71..1d92ab3 100644
--- a/lisp/nxml/nxml-uchnm.el
+++ b/lisp/nxml/nxml-uchnm.el
@@ -1,6 +1,6 @@
 ;;; nxml-uchnm.el --- support for Unicode standard cha names in nxml-mode
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-util.el b/lisp/nxml/nxml-util.el
index 3d91a1a..27b4382 100644
--- a/lisp/nxml/nxml-util.el
+++ b/lisp/nxml/nxml-util.el
@@ -1,6 +1,6 @@
 ;;; nxml-util.el --- utility functions for nxml-*.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/rng-cmpct.el b/lisp/nxml/rng-cmpct.el
index 0dfdb42..5934031 100644
--- a/lisp/nxml/rng-cmpct.el
+++ b/lisp/nxml/rng-cmpct.el
@@ -1,6 +1,6 @@
 ;;; rng-cmpct.el --- parsing of RELAX NG Compact Syntax schemas
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-dt.el b/lisp/nxml/rng-dt.el
index d91acda..855bf93 100644
--- a/lisp/nxml/rng-dt.el
+++ b/lisp/nxml/rng-dt.el
@@ -1,6 +1,6 @@
 ;;; rng-dt.el --- datatype library interface for RELAX NG
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-loc.el b/lisp/nxml/rng-loc.el
index 2c59dd2..601e54a 100644
--- a/lisp/nxml/rng-loc.el
+++ b/lisp/nxml/rng-loc.el
@@ -1,6 +1,6 @@
 ;;; rng-loc.el --- locate the schema to use for validation
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-maint.el b/lisp/nxml/rng-maint.el
index d143cd4..be42e10 100644
--- a/lisp/nxml/rng-maint.el
+++ b/lisp/nxml/rng-maint.el
@@ -1,6 +1,6 @@
 ;;; rng-maint.el --- commands for RELAX NG maintainers
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-match.el b/lisp/nxml/rng-match.el
index f674878..8ebb573 100644
--- a/lisp/nxml/rng-match.el
+++ b/lisp/nxml/rng-match.el
@@ -1,6 +1,6 @@
 ;;; rng-match.el --- matching of RELAX NG patterns against XML events  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-nxml.el b/lisp/nxml/rng-nxml.el
index 000707b..30ae462 100644
--- a/lisp/nxml/rng-nxml.el
+++ b/lisp/nxml/rng-nxml.el
@@ -1,6 +1,6 @@
 ;;; rng-nxml.el --- make nxml-mode take advantage of rng-validate-mode
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-parse.el b/lisp/nxml/rng-parse.el
index 6888172..30878b4 100644
--- a/lisp/nxml/rng-parse.el
+++ b/lisp/nxml/rng-parse.el
@@ -1,6 +1,6 @@
 ;;; rng-parse.el --- parse an XML file and validate it against a schema
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-pttrn.el b/lisp/nxml/rng-pttrn.el
index b845f53..3324dc4 100644
--- a/lisp/nxml/rng-pttrn.el
+++ b/lisp/nxml/rng-pttrn.el
@@ -1,6 +1,6 @@
 ;;; rng-pttrn.el --- RELAX NG patterns
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-uri.el b/lisp/nxml/rng-uri.el
index b93624a..e95ad08 100644
--- a/lisp/nxml/rng-uri.el
+++ b/lisp/nxml/rng-uri.el
@@ -1,6 +1,6 @@
 ;;; rng-uri.el --- URI parsing and manipulation
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
@@ -85,7 +85,7 @@ Signal an error if URI is not a valid file URL."
          ((not (string= (downcase scheme) "file"))
           (rng-uri-error "URI `%s' does not use the `file:' scheme" uri)))
     (when (not (member authority
-                      (cons system-name '(nil "" "localhost"))))
+                      (cons (system-name) '(nil "" "localhost"))))
       (rng-uri-error "URI `%s' does not start with `file:///' or 
`file://localhost/'"
             uri))
     (when query
diff --git a/lisp/nxml/rng-util.el b/lisp/nxml/rng-util.el
index 3b6af42..cde4124 100644
--- a/lisp/nxml/rng-util.el
+++ b/lisp/nxml/rng-util.el
@@ -1,6 +1,6 @@
 ;;; rng-util.el --- utility functions for RELAX NG library
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-valid.el b/lisp/nxml/rng-valid.el
index baf63e9..2bf8f1d 100644
--- a/lisp/nxml/rng-valid.el
+++ b/lisp/nxml/rng-valid.el
@@ -1,6 +1,6 @@
 ;;; rng-valid.el --- real-time validation of XML using RELAX NG
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-xsd.el b/lisp/nxml/rng-xsd.el
index 1c36c22..9b585c0 100644
--- a/lisp/nxml/rng-xsd.el
+++ b/lisp/nxml/rng-xsd.el
@@ -1,6 +1,6 @@
 ;;; rng-xsd.el --- W3C XML Schema datatypes library for RELAX NG
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/xmltok.el b/lisp/nxml/xmltok.el
index f80a5fd..fe6a605 100644
--- a/lisp/nxml/xmltok.el
+++ b/lisp/nxml/xmltok.el
@@ -1,6 +1,6 @@
 ;;; xmltok.el --- XML tokenization  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/xsd-regexp.el b/lisp/nxml/xsd-regexp.el
index dc2194e..7b1e616 100644
--- a/lisp/nxml/xsd-regexp.el
+++ b/lisp/nxml/xsd-regexp.el
@@ -1,6 +1,6 @@
 ;;; xsd-regexp.el --- translate W3C XML Schema regexps to Emacs regexps
 
-;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, regexp
diff --git a/lisp/obsolete/.gitignore b/lisp/obsolete/.gitignore
deleted file mode 100644
index e69de29..0000000
diff --git a/lisp/obsolete/abbrevlist.el b/lisp/obsolete/abbrevlist.el
index 2e0ab2f..65fc370 100644
--- a/lisp/obsolete/abbrevlist.el
+++ b/lisp/obsolete/abbrevlist.el
@@ -1,6 +1,6 @@
 ;;; abbrevlist.el --- list one abbrev table alphabetically ordered
 
-;; Copyright (C) 1986, 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1992, 2001-2015 Free Software Foundation, Inc.
 ;; Suggested by a previous version by Gildea.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/assoc.el b/lisp/obsolete/assoc.el
index 868c7a0..cbf4c81 100644
--- a/lisp/obsolete/assoc.el
+++ b/lisp/obsolete/assoc.el
@@ -1,6 +1,6 @@
 ;;; assoc.el --- insert/delete functions on association lists  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Barry A. Warsaw <address@hidden>
 ;; Keywords: extensions
diff --git a/lisp/obsolete/awk-mode.el b/lisp/obsolete/awk-mode.el
index d44e8cf..10cd552 100644
--- a/lisp/obsolete/awk-mode.el
+++ b/lisp/obsolete/awk-mode.el
@@ -1,6 +1,6 @@
 ;;; awk-mode.el --- AWK code editing commands for Emacs
 
-;; Copyright (C) 1988, 1994, 1996, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1988, 1994, 1996, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/bruce.el b/lisp/obsolete/bruce.el
index c643a13..6b0d04e 100644
--- a/lisp/obsolete/bruce.el
+++ b/lisp/obsolete/bruce.el
@@ -1,7 +1,7 @@
 ;;; bruce.el --- bruce phrase utility for overloading the Communications -*- 
no-byte-compile: t -*-
 ;;; Decency Act snoops, if any.
 
-;; Copyright (C) 1988, 1993, 1997, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1988, 1993, 1997, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/cc-compat.el b/lisp/obsolete/cc-compat.el
index 1bd7c03..9a5754c 100644
--- a/lisp/obsolete/cc-compat.el
+++ b/lisp/obsolete/cc-compat.el
@@ -1,6 +1,6 @@
 ;;; cc-compat.el --- cc-mode compatibility with c-mode.el confusion
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    1998- Martin Stjernholm
 ;;            1994-1999 Barry A. Warsaw
diff --git a/lisp/obsolete/cl-compat.el b/lisp/obsolete/cl-compat.el
index bd702a8..d6918da 100644
--- a/lisp/obsolete/cl-compat.el
+++ b/lisp/obsolete/cl-compat.el
@@ -1,6 +1,6 @@
 ;;; cl-compat.el --- Common Lisp extensions for GNU Emacs Lisp (compatibility)
 
-;; Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <address@hidden>
 ;; Version: 2.02
diff --git a/lisp/obsolete/complete.el b/lisp/obsolete/complete.el
index 74c9134..7c7582f 100644
--- a/lisp/obsolete/complete.el
+++ b/lisp/obsolete/complete.el
@@ -1,6 +1,6 @@
 ;;; complete.el --- partial completion mechanism plus other goodies
 
-;; Copyright (C) 1990-1993, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <address@hidden>
 ;; Keywords: abbrev convenience
diff --git a/lisp/obsolete/crisp.el b/lisp/obsolete/crisp.el
index b9c2fc6..8bc6908 100644
--- a/lisp/obsolete/crisp.el
+++ b/lisp/obsolete/crisp.el
@@ -1,6 +1,6 @@
 ;;; crisp.el --- CRiSP/Brief Emacs emulator
 
-;; Copyright (C) 1997-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Gary D. Foster <address@hidden>
 ;; Keywords: emulations brief crisp
diff --git a/lisp/obsolete/cust-print.el b/lisp/obsolete/cust-print.el
index ed9995f..54f6563 100644
--- a/lisp/obsolete/cust-print.el
+++ b/lisp/obsolete/cust-print.el
@@ -1,6 +1,6 @@
 ;;; cust-print.el --- handles print-level and print-circle
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel LaLiberte <address@hidden>
 ;; Adapted-By: ESR
diff --git a/lisp/obsolete/erc-hecomplete.el b/lisp/obsolete/erc-hecomplete.el
index 37d8552..3dc02c1 100644
--- a/lisp/obsolete/erc-hecomplete.el
+++ b/lisp/obsolete/erc-hecomplete.el
@@ -1,6 +1,6 @@
 ;;; erc-hecomplete.el --- Provides Nick name completion for ERC
 
-;; Copyright (C) 2001-2002, 2004, 2006-2014 Free Software Foundation,
+;; Copyright (C) 2001-2002, 2004, 2006-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
diff --git a/lisp/obsolete/fast-lock.el b/lisp/obsolete/fast-lock.el
index 8816589..0f57dfd 100644
--- a/lisp/obsolete/fast-lock.el
+++ b/lisp/obsolete/fast-lock.el
@@ -1,6 +1,6 @@
 ;;; fast-lock.el --- automagic text properties caching for fast Font Lock mode
 
-;; Copyright (C) 1994-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Marshall <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/gulp.el b/lisp/obsolete/gulp.el
index 00cb896..5ff99f2 100644
--- a/lisp/obsolete/gulp.el
+++ b/lisp/obsolete/gulp.el
@@ -1,6 +1,6 @@
 ;;; gulp.el --- ask for updates for Lisp packages
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Sam Shteingold <address@hidden>
 ;; Maintainer: address@hidden
@@ -137,7 +137,7 @@ is left in the `*gulp*' buffer at the end."
   "Create the maintainer/package alist for files in FLIST in DIR.
 That is a list of elements, each of the form (MAINTAINER PACKAGES...)."
   (save-excursion
-    (let (mplist filen node mnt-tm mnt tm fl-tm)
+    (let (mplist filen node mnt tm fl-tm)
       (get-buffer-create gulp-tmp-buffer)
       (set-buffer gulp-tmp-buffer)
       (setq buffer-undo-list t)
diff --git a/lisp/obsolete/iso-acc.el b/lisp/obsolete/iso-acc.el
index 5eec99f..eaf732e 100644
--- a/lisp/obsolete/iso-acc.el
+++ b/lisp/obsolete/iso-acc.el
@@ -1,6 +1,6 @@
 ;;; iso-acc.el --- minor mode providing electric accent keys
 
-;; Copyright (C) 1993-1994, 1996, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1993-1994, 1996, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Johan Vromans
diff --git a/lisp/obsolete/iso-insert.el b/lisp/obsolete/iso-insert.el
index 4152189..358d0fc 100644
--- a/lisp/obsolete/iso-insert.el
+++ b/lisp/obsolete/iso-insert.el
@@ -1,6 +1,6 @@
 ;;; iso-insert.el --- insert functions for ISO 8859/1  -*- coding: utf-8;-*-
 
-;; Copyright (C) 1987, 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/iso-swed.el b/lisp/obsolete/iso-swed.el
index ca7cb1e..66847dd 100644
--- a/lisp/obsolete/iso-swed.el
+++ b/lisp/obsolete/iso-swed.el
@@ -1,6 +1,6 @@
 ;;; iso-swed.el --- set up char tables for ISO 8859/1 for Swedish/Finnish ttys
 
-;; Copyright (C) 1987, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/iswitchb.el b/lisp/obsolete/iswitchb.el
index 4a0338a..6b1e534 100644
--- a/lisp/obsolete/iswitchb.el
+++ b/lisp/obsolete/iswitchb.el
@@ -1,6 +1,6 @@
 ;;; iswitchb.el --- switch between buffers using substrings
 
-;; Copyright (C) 1996-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Stephen Eglen <address@hidden>
 ;; Maintainer: Stephen Eglen <address@hidden>
diff --git a/lisp/obsolete/keyswap.el b/lisp/obsolete/keyswap.el
index 088a2a2..3c8fd5f 100644
--- a/lisp/obsolete/keyswap.el
+++ b/lisp/obsolete/keyswap.el
@@ -1,6 +1,6 @@
 ;;; keyswap.el --- swap BS and DEL keys -*- no-byte-compile: t -*-
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <address@hidden>
 ;; Keywords: terminals
diff --git a/lisp/obsolete/lazy-lock.el b/lisp/obsolete/lazy-lock.el
index d1b2d92..885a11f 100644
--- a/lisp/obsolete/lazy-lock.el
+++ b/lisp/obsolete/lazy-lock.el
@@ -1,6 +1,6 @@
 ;;; lazy-lock.el --- lazy demand-driven fontification for fast Font Lock mode
 
-;; Copyright (C) 1994-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Marshall <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/ledit.el b/lisp/obsolete/ledit.el
index 47b5c68..4db741b 100644
--- a/lisp/obsolete/ledit.el
+++ b/lisp/obsolete/ledit.el
@@ -1,6 +1,6 @@
 ;;; ledit.el --- Emacs side of ledit interface
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: languages
diff --git a/lisp/obsolete/levents.el b/lisp/obsolete/levents.el
index d41fe84..96357da 100644
--- a/lisp/obsolete/levents.el
+++ b/lisp/obsolete/levents.el
@@ -1,6 +1,6 @@
 ;;; levents.el --- emulate the Lucid event data type and associated functions
 
-;; Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: emulations
diff --git a/lisp/obsolete/lmenu.el b/lisp/obsolete/lmenu.el
index 8f676e0..e4886ab 100644
--- a/lisp/obsolete/lmenu.el
+++ b/lisp/obsolete/lmenu.el
@@ -1,6 +1,6 @@
 ;;; lmenu.el --- emulate Lucid's menubar support
 
-;; Copyright (C) 1992-1994, 1997, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1992-1994, 1997, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Keywords: emulations obsolete
diff --git a/lisp/obsolete/longlines.el b/lisp/obsolete/longlines.el
index 9cbafc0..a27c43b 100644
--- a/lisp/obsolete/longlines.el
+++ b/lisp/obsolete/longlines.el
@@ -1,6 +1,6 @@
 ;;; longlines.el --- automatically wrap long lines   -*- coding:utf-8 -*-
 
-;; Copyright (C) 2000-2001, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2001, 2004-2015 Free Software Foundation, Inc.
 
 ;; Authors:    Kai Grossjohann <address@hidden>
 ;;             Alex Schroeder <address@hidden>
diff --git a/lisp/obsolete/lucid.el b/lisp/obsolete/lucid.el
index 2c6efa4..569abb6 100644
--- a/lisp/obsolete/lucid.el
+++ b/lisp/obsolete/lucid.el
@@ -1,6 +1,6 @@
 ;;; lucid.el --- emulate some Lucid Emacs functions
 
-;; Copyright (C) 1993, 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: emulations
diff --git a/lisp/obsolete/mouse-sel.el b/lisp/obsolete/mouse-sel.el
index 837aefb..25eb3e6 100644
--- a/lisp/obsolete/mouse-sel.el
+++ b/lisp/obsolete/mouse-sel.el
@@ -1,6 +1,6 @@
 ;;; mouse-sel.el --- multi-click selection support
 
-;; Copyright (C) 1993-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Mike Williams <address@hidden>
 ;; Keywords: mouse
diff --git a/lisp/obsolete/old-emacs-lock.el b/lisp/obsolete/old-emacs-lock.el
index 8e8cb2d..009ae53 100644
--- a/lisp/obsolete/old-emacs-lock.el
+++ b/lisp/obsolete/old-emacs-lock.el
@@ -1,6 +1,6 @@
 ;;; emacs-lock.el --- prevents you from exiting Emacs if a buffer is locked
 
-;; Copyright (C) 1994, 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Tom Wurgler <address@hidden>
 ;; Created: 12/8/94
diff --git a/lisp/obsolete/old-whitespace.el b/lisp/obsolete/old-whitespace.el
index 1b7ca5b..4619a58 100644
--- a/lisp/obsolete/old-whitespace.el
+++ b/lisp/obsolete/old-whitespace.el
@@ -1,6 +1,6 @@
 ;;; whitespace.el --- warn about and clean bogus whitespaces in the file
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Rajesh Vaidheeswarran <address@hidden>
 ;; Keywords: convenience
diff --git a/lisp/obsolete/options.el b/lisp/obsolete/options.el
index 69fe36d..35ec7fd 100644
--- a/lisp/obsolete/options.el
+++ b/lisp/obsolete/options.el
@@ -1,6 +1,6 @@
 ;;; options.el --- edit Options command for Emacs
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Obsolete-since: 22.1
diff --git a/lisp/obsolete/otodo-mode.el b/lisp/obsolete/otodo-mode.el
index d551d16..69364f6 100644
--- a/lisp/obsolete/otodo-mode.el
+++ b/lisp/obsolete/otodo-mode.el
@@ -1,6 +1,6 @@
 ;;; todo-mode.el --- major mode for editing TODO list files
 
-;; Copyright (C) 1997, 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Oliver Seidel <address@hidden>
 ;; Maintainer: Stephen Berman <address@hidden>
diff --git a/lisp/obsolete/pc-mode.el b/lisp/obsolete/pc-mode.el
index 81f929f..d776768 100644
--- a/lisp/obsolete/pc-mode.el
+++ b/lisp/obsolete/pc-mode.el
@@ -1,6 +1,6 @@
 ;;; pc-mode.el --- emulate certain key bindings used on PCs
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: emulations
diff --git a/lisp/obsolete/pc-select.el b/lisp/obsolete/pc-select.el
index 5ee0818..371c338 100644
--- a/lisp/obsolete/pc-select.el
+++ b/lisp/obsolete/pc-select.el
@@ -2,7 +2,7 @@
 ;;;                 (or MAC GUI or MS-windoze (bah)) look-and-feel
 ;;;                 including key bindings.
 
-;; Copyright (C) 1995-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Staats <address@hidden>
 ;; Keywords: convenience emulations
@@ -337,7 +337,7 @@ but before calling PC Selection mode):
                            (cadr pc-select-meta-moves-sexps-key-bindings))
                          (if  (or pc-select-selection-keys-only
                                   (eq window-system 'x)
-                                  (memq system-name '(ms-dos windows-nt)))
+                                  (memq system-type '(ms-dos windows-nt)))
                              nil
                            pc-select-tty-key-bindings)))
 
@@ -346,7 +346,7 @@ but before calling PC Selection mode):
 
            (unless  (or pc-select-selection-keys-only
                         (eq window-system 'x)
-                        (memq system-name '(ms-dos windows-nt)))
+                        (memq system-type '(ms-dos windows-nt)))
              ;; it is not clear that we need the following line
              ;; I hope it doesn't do too much harm to leave it in, though...
              (setq pc-select-old-M-delete-binding
@@ -355,7 +355,7 @@ but before calling PC Selection mode):
 
            (when (and (not pc-select-selection-keys-only)
                       (or (eq window-system 'x)
-                          (memq system-name '(ms-dos windows-nt)))
+                          (memq system-type '(ms-dos windows-nt)))
                       (fboundp 'normal-erase-is-backspace-mode))
              (pc-select-save-and-set-mode normal-erase-is-backspace-mode 1
                                           normal-erase-is-backspace))
@@ -378,13 +378,13 @@ but before calling PC Selection mode):
                               (current-global-map))
        (unless  (or pc-select-selection-keys-only
                     (eq window-system 'x)
-                    (memq system-name '(ms-dos windows-nt)))
+                    (memq system-type '(ms-dos windows-nt)))
          ;; it is not clear that we need the following line
          ;; I hope it doesn't do too much harm to leave it in, though...
          (define-key function-key-map  [M-delete] [?\M-d]))
        (when (and (not pc-select-selection-keys-only)
                   (or (eq window-system 'x)
-                      (memq system-name '(ms-dos windows-nt)))
+                      (memq system-type '(ms-dos windows-nt)))
                   (fboundp 'normal-erase-is-backspace-mode))
          (normal-erase-is-backspace-mode 1))
        (setq highlight-nonselected-windows nil)
@@ -395,7 +395,7 @@ but before calling PC Selection mode):
     (when pc-select-key-bindings-alist
       (when (and (not pc-select-selection-keys-only)
                 (or (eq window-system 'x)
-                    (memq system-name '(ms-dos windows-nt))))
+                    (memq system-type '(ms-dos windows-nt))))
        (pc-select-restore-mode normal-erase-is-backspace-mode))
 
       (pc-select-restore-keys
diff --git a/lisp/obsolete/pgg-def.el b/lisp/obsolete/pgg-def.el
index 5d9fd6e..c1ebe4f 100644
--- a/lisp/obsolete/pgg-def.el
+++ b/lisp/obsolete/pgg-def.el
@@ -1,6 +1,6 @@
 ;;; pgg-def.el --- functions/macros for defining PGG functions
 
-;; Copyright (C) 1999, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Created: 1999/11/02
diff --git a/lisp/obsolete/pgg-gpg.el b/lisp/obsolete/pgg-gpg.el
index 585da09..5b405e4 100644
--- a/lisp/obsolete/pgg-gpg.el
+++ b/lisp/obsolete/pgg-gpg.el
@@ -1,6 +1,6 @@
 ;;; pgg-gpg.el --- GnuPG support for PGG.
 
-;; Copyright (C) 1999-2000, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Symmetric encryption and gpg-agent support added by:
diff --git a/lisp/obsolete/pgg-parse.el b/lisp/obsolete/pgg-parse.el
index 160e297..ed0912f 100644
--- a/lisp/obsolete/pgg-parse.el
+++ b/lisp/obsolete/pgg-parse.el
@@ -1,6 +1,6 @@
 ;;; pgg-parse.el --- OpenPGP packet parsing
 
-;; Copyright (C) 1999, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Created: 1999/10/28
diff --git a/lisp/obsolete/pgg-pgp.el b/lisp/obsolete/pgg-pgp.el
index 5d6ae9c..af2b2aa 100644
--- a/lisp/obsolete/pgg-pgp.el
+++ b/lisp/obsolete/pgg-pgp.el
@@ -1,6 +1,6 @@
 ;;; pgg-pgp.el --- PGP 2.* and 6.* support for PGG.
 
-;; Copyright (C) 1999-2000, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Created: 1999/11/02
diff --git a/lisp/obsolete/pgg-pgp5.el b/lisp/obsolete/pgg-pgp5.el
index 944800c..97caedb 100644
--- a/lisp/obsolete/pgg-pgp5.el
+++ b/lisp/obsolete/pgg-pgp5.el
@@ -1,6 +1,6 @@
 ;;; pgg-pgp5.el --- PGP 5.* support for PGG.
 
-;; Copyright (C) 1999-2000, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Created: 1999/11/02
diff --git a/lisp/obsolete/pgg.el b/lisp/obsolete/pgg.el
index 796a07a..dd50d26 100644
--- a/lisp/obsolete/pgg.el
+++ b/lisp/obsolete/pgg.el
@@ -1,6 +1,6 @@
 ;;; pgg.el --- glue for the various PGP implementations.
 
-;; Copyright (C) 1999-2000, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <address@hidden>
 ;; Symmetric encryption added by: Sascha Wilde <address@hidden>
diff --git a/lisp/obsolete/rcompile.el b/lisp/obsolete/rcompile.el
index 1c07f99..dfa3ce3 100644
--- a/lisp/obsolete/rcompile.el
+++ b/lisp/obsolete/rcompile.el
@@ -1,6 +1,6 @@
 ;;; rcompile.el --- run a compilation on a remote machine
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Alon Albert <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/resume.el b/lisp/obsolete/resume.el
index aa80ba6..678786c 100644
--- a/lisp/obsolete/resume.el
+++ b/lisp/obsolete/resume.el
@@ -1,6 +1,6 @@
 ;;; resume.el --- process command line args from within a suspended Emacs job
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Joe Wells <address@hidden>
 ;; Adapted-By: ESR
diff --git a/lisp/obsolete/s-region.el b/lisp/obsolete/s-region.el
index 9cf95d5..bcce640 100644
--- a/lisp/obsolete/s-region.el
+++ b/lisp/obsolete/s-region.el
@@ -1,6 +1,6 @@
 ;;; s-region.el --- set region using shift key
 
-;; Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Morten Welinder <address@hidden>
 ;; Keywords: terminals
diff --git a/lisp/obsolete/scribe.el b/lisp/obsolete/scribe.el
index 04dd7a9..122b1bf 100644
--- a/lisp/obsolete/scribe.el
+++ b/lisp/obsolete/scribe.el
@@ -1,6 +1,6 @@
 ;;; scribe.el --- scribe mode, and its idiosyncratic commands
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: William Sommerfeld
 ;; (according to ack.texi)
diff --git a/lisp/obsolete/spell.el b/lisp/obsolete/spell.el
index 145d9e5..251b72d 100644
--- a/lisp/obsolete/spell.el
+++ b/lisp/obsolete/spell.el
@@ -1,6 +1,6 @@
 ;;; spell.el --- spelling correction interface for Emacs
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: wp, unix
diff --git a/lisp/obsolete/sregex.el b/lisp/obsolete/sregex.el
index 740b2cb..4959072 100644
--- a/lisp/obsolete/sregex.el
+++ b/lisp/obsolete/sregex.el
@@ -1,6 +1,6 @@
 ;;; sregex.el --- symbolic regular expressions
 
-;; Copyright (C) 1997-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Bob Glickstein <address@hidden>
 ;; Maintainer: Bob Glickstein <address@hidden>
diff --git a/lisp/obsolete/sup-mouse.el b/lisp/obsolete/sup-mouse.el
index 682b7d7..c837eb3 100644
--- a/lisp/obsolete/sup-mouse.el
+++ b/lisp/obsolete/sup-mouse.el
@@ -1,6 +1,6 @@
 ;;; sup-mouse.el --- supdup mouse support for lisp machines
 
-;; Copyright (C) 1985-1986, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Wolfgang Rupprecht
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/swedish.el b/lisp/obsolete/swedish.el
index 398453c..0db7a36 100644
--- a/lisp/obsolete/swedish.el
+++ b/lisp/obsolete/swedish.el
@@ -1,6 +1,6 @@
 ;;; swedish.el --- miscellaneous functions for dealing with Swedish
 
-;; Copyright (C) 1988, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: address@hidden
diff --git a/lisp/obsolete/sym-comp.el b/lisp/obsolete/sym-comp.el
index 5043dab..c633bd5 100644
--- a/lisp/obsolete/sym-comp.el
+++ b/lisp/obsolete/sym-comp.el
@@ -1,6 +1,6 @@
 ;;; sym-comp.el --- mode-dependent symbol completion
 
-;; Copyright (C) 2004, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: extensions
diff --git a/lisp/obsolete/terminal.el b/lisp/obsolete/terminal.el
index 420ac78..6bab61b 100644
--- a/lisp/obsolete/terminal.el
+++ b/lisp/obsolete/terminal.el
@@ -1,6 +1,6 @@
 ;;; terminal.el --- terminal emulator for GNU Emacs
 
-;; Copyright (C) 1986-1989, 1993-1994, 2001-2014 Free Software
+;; Copyright (C) 1986-1989, 1993-1994, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Richard Mlynarik <address@hidden>
diff --git a/lisp/obsolete/tpu-edt.el b/lisp/obsolete/tpu-edt.el
index 4318931..c5959d1 100644
--- a/lisp/obsolete/tpu-edt.el
+++ b/lisp/obsolete/tpu-edt.el
@@ -1,6 +1,6 @@
 ;;; tpu-edt.el --- Emacs emulating TPU emulating EDT
 
-;; Copyright (C) 1993-1995, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <address@hidden>
 ;; Maintainer: Rob Riepel <address@hidden>
diff --git a/lisp/obsolete/tpu-extras.el b/lisp/obsolete/tpu-extras.el
index 32257e8..a71e45e 100644
--- a/lisp/obsolete/tpu-extras.el
+++ b/lisp/obsolete/tpu-extras.el
@@ -1,6 +1,6 @@
 ;;; tpu-extras.el --- scroll margins and free cursor mode for TPU-edt
 
-;; Copyright (C) 1993-1995, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <address@hidden>
 ;; Maintainer: Rob Riepel <address@hidden>
diff --git a/lisp/obsolete/tpu-mapper.el b/lisp/obsolete/tpu-mapper.el
index d653685..4c5ea13 100644
--- a/lisp/obsolete/tpu-mapper.el
+++ b/lisp/obsolete/tpu-mapper.el
@@ -1,6 +1,6 @@
 ;;; tpu-mapper.el --- create a TPU-edt X-windows keymap file
 
-;; Copyright (C) 1993-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <address@hidden>
 ;; Maintainer: Rob Riepel <address@hidden>
diff --git a/lisp/vc/vc-arch.el b/lisp/obsolete/vc-arch.el
similarity index 97%
rename from lisp/vc/vc-arch.el
rename to lisp/obsolete/vc-arch.el
index 2bc8b7b..2469f76 100644
--- a/lisp/vc/vc-arch.el
+++ b/lisp/obsolete/vc-arch.el
@@ -1,6 +1,6 @@
 ;;; vc-arch.el --- VC backend for the Arch version-control system  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  Stefan Monnier <address@hidden>
@@ -231,8 +231,7 @@ Only the value `maybe' can be trusted :-(."
   "Return the administrative directory of FILE."
   (expand-file-name "{arch}" (vc-arch-root file)))
 
-(defun vc-arch-register (files &optional rev _comment)
-  (if rev (error "Explicit initial revision not supported for Arch"))
+(defun vc-arch-register (files &optional _comment)
   (dolist (file files)
     (let ((tagmet (vc-arch-tagging-method file)))
       (if (and (memq tagmet '(tagline implicit)) comment-start)
@@ -262,10 +261,6 @@ Only the value `maybe' can be trusted :-(."
               ;; Strip the terminating newline.
               (buffer-substring (point-min) (1- (point-max)))))))))
 
-(defun vc-arch-workfile-unchanged-p (_file)
-  "Stub: arch workfiles are always considered to be in a changed state,"
-  nil)
-
 (defun vc-arch-state (file)
   ;; There's no checkout operation and merging is not done from VC
   ;; so the only operation that's state dependent that VC supports is commit
@@ -315,10 +310,11 @@ Only the value `maybe' can be trusted :-(."
                    'up-to-date
                  'edited)))))))))
 
-;; -dir-status called from vc-dir, which loads vc, which loads vc-dispatcher.
+;; dir-status-files called from vc-dir, which loads vc,
+;; which loads vc-dispatcher.
 (declare-function vc-exec-after "vc-dispatcher" (code))
 
-(defun vc-arch-dir-status (dir callback)
+(defun vc-arch-dir-status-files (dir _files callback)
   "Run 'tla inventory' for DIR and pass results to CALLBACK.
 CALLBACK expects (ENTRIES &optional MORE-TO-COME); see
 `vc-dir-refresh'."
@@ -441,8 +437,7 @@ CALLBACK expects (ENTRIES &optional MORE-TO-COME); see
 
 (autoload 'vc-switches "vc")
 
-(defun vc-arch-checkin (files rev comment)
-  (if rev (error "Committing to a specific revision is unsupported"))
+(defun vc-arch-checkin (files comment)
   ;; FIXME: This implementation probably only works for singleton filesets
   (let ((summary (file-relative-name (car files) (vc-arch-root (car files)))))
     ;; Extract a summary from the comment.
@@ -453,7 +448,7 @@ CALLBACK expects (ENTRIES &optional MORE-TO-COME); see
     (vc-arch-command nil 0 files "commit" "-s" summary "-L" comment "--"
                     (vc-switches 'Arch 'checkin))))
 
-(defun vc-arch-diff (files &optional oldvers newvers buffer)
+(defun vc-arch-diff (files &optional oldvers newvers buffer async)
   "Get a difference report using Arch between two versions of FILES."
   ;; FIXME: This implementation only works for singleton filesets.  To make
   ;; it work for more cases, we have to either call `file-diffs' manually on
@@ -470,7 +465,6 @@ CALLBACK expects (ENTRIES &optional MORE-TO-COME); see
     (if newvers
         (error "Diffing specific revisions not implemented")
       (let* (process-file-side-effects
-            (async (not vc-disable-async-diff))
              ;; Run the command from the root dir.
              (default-directory (vc-arch-root file))
              (status
@@ -497,8 +491,6 @@ CALLBACK expects (ENTRIES &optional MORE-TO-COME); see
   "A wrapper around `vc-do-command' for use in vc-arch.el."
   (apply 'vc-do-command (or buffer "*vc*") okstatus vc-arch-program file 
flags))
 
-(defun vc-arch-init-revision () nil)
-
 ;;; Completion of versions and revisions.
 
 (defun vc-arch--version-completion-table (root string)
diff --git a/lisp/obsolete/vc-mcvs.el b/lisp/obsolete/vc-mcvs.el
index d752021..d78f24b 100644
--- a/lisp/obsolete/vc-mcvs.el
+++ b/lisp/obsolete/vc-mcvs.el
@@ -1,6 +1,6 @@
 ;;; vc-mcvs.el --- VC backend for the Meta-CVS version-control system
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  None
diff --git a/lisp/obsolete/vip.el b/lisp/obsolete/vip.el
index ea102cb..d6adbd4 100644
--- a/lisp/obsolete/vip.el
+++ b/lisp/obsolete/vip.el
@@ -1,7 +1,7 @@
 ;;; vip.el --- a VI Package for GNU Emacs
 
-;; Copyright (C) 1986-1988, 1992-1993, 1998, 2001-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1986-1988, 1992-1993, 1998, 2001-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Masahiko Sato <address@hidden>
 ;; Keywords: emulations
diff --git a/lisp/obsolete/ws-mode.el b/lisp/obsolete/ws-mode.el
index d87cc73..af637ca 100644
--- a/lisp/obsolete/ws-mode.el
+++ b/lisp/obsolete/ws-mode.el
@@ -1,6 +1,6 @@
 ;;; ws-mode.el --- WordStar emulation mode for GNU Emacs
 
-;; Copyright (C) 1991, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Juergen Nickelsen <address@hidden>
 ;; Version: 0.7
diff --git a/lisp/obsolete/xesam.el b/lisp/obsolete/xesam.el
index 36da1c1..4ee8c6f 100644
--- a/lisp/obsolete/xesam.el
+++ b/lisp/obsolete/xesam.el
@@ -1,6 +1,6 @@
 ;;; xesam.el --- Xesam interface to search engines.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: tools, hypermedia
diff --git a/lisp/obsolete/yow.el b/lisp/obsolete/yow.el
index b41bdfb..908491d 100644
--- a/lisp/obsolete/yow.el
+++ b/lisp/obsolete/yow.el
@@ -1,6 +1,6 @@
 ;;; yow.el --- quote random zippyisms
 
-;; Copyright (C) 1993-1995, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Author: Richard Mlynarik
diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog
index 0f50e57..081da5d 100644
--- a/lisp/org/ChangeLog
+++ b/lisp/org/ChangeLog
@@ -1,3 +1,7 @@
+2014-12-29  Paul Eggert  <address@hidden>
+
+       * org-clock.el (org-clock-save): Prefer (system-name) to system-name.
+
 2014-10-29  Paul Eggert  <address@hidden>
 
        Simplify use of current-time and friends.
@@ -25397,7 +25401,7 @@
        (org-ascii-replace-entities): New function.
 
 2010-04-10  Carsten Dominik  <address@hidden>
-            Ulf Stegemann  <address@hidden>
+           Ulf Stegemann  <address@hidden>
 
        * org-entities.el: New file.
 
@@ -32829,7 +32833,7 @@
 ;; add-log-time-zone-rule: t
 ;; End:
 
-       Copyright (C) 2008-2014 Free Software Foundation, Inc.
+       Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/org/ob-C.el b/lisp/org/ob-C.el
index 2fcec79..733f74c 100644
--- a/lisp/org/ob-C.el
+++ b/lisp/org/ob-C.el
@@ -1,6 +1,6 @@
 ;;; ob-C.el --- org-babel functions for C and similar languages
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-R.el b/lisp/org/ob-R.el
index b97fd91..5bae913 100644
--- a/lisp/org/ob-R.el
+++ b/lisp/org/ob-R.el
@@ -1,6 +1,6 @@
 ;;; ob-R.el --- org-babel functions for R code evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;;     Dan Davison
diff --git a/lisp/org/ob-asymptote.el b/lisp/org/ob-asymptote.el
index 21c0a17..9782cf9 100644
--- a/lisp/org/ob-asymptote.el
+++ b/lisp/org/ob-asymptote.el
@@ -1,6 +1,6 @@
 ;;; ob-asymptote.el --- org-babel functions for asymptote evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-awk.el b/lisp/org/ob-awk.el
index ed98afd..d17049a 100644
--- a/lisp/org/ob-awk.el
+++ b/lisp/org/ob-awk.el
@@ -1,6 +1,6 @@
 ;;; ob-awk.el --- org-babel functions for awk evaluation
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-calc.el b/lisp/org/ob-calc.el
index cdb528a..5dec244 100644
--- a/lisp/org/ob-calc.el
+++ b/lisp/org/ob-calc.el
@@ -1,6 +1,6 @@
 ;;; ob-calc.el --- org-babel functions for calc code evaluation
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-clojure.el b/lisp/org/ob-clojure.el
index 78f3c6d..dd730a2 100644
--- a/lisp/org/ob-clojure.el
+++ b/lisp/org/ob-clojure.el
@@ -1,6 +1,6 @@
 ;;; ob-clojure.el --- org-babel functions for clojure evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Joel Boehland
 ;;     Eric Schulte
diff --git a/lisp/org/ob-comint.el b/lisp/org/ob-comint.el
index 40bfaf7..bc6ee78 100644
--- a/lisp/org/ob-comint.el
+++ b/lisp/org/ob-comint.el
@@ -1,6 +1,6 @@
 ;;; ob-comint.el --- org-babel functions for interaction with comint buffers
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research, comint
diff --git a/lisp/org/ob-core.el b/lisp/org/ob-core.el
index a83f6b2..fd14462 100644
--- a/lisp/org/ob-core.el
+++ b/lisp/org/ob-core.el
@@ -1,6 +1,6 @@
 ;;; ob-core.el --- working with code blocks in org-mode
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;     Dan Davison
diff --git a/lisp/org/ob-css.el b/lisp/org/ob-css.el
index 2fedb35..a0f0ad1 100644
--- a/lisp/org/ob-css.el
+++ b/lisp/org/ob-css.el
@@ -1,6 +1,6 @@
 ;;; ob-css.el --- org-babel functions for css evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-ditaa.el b/lisp/org/ob-ditaa.el
index 26f0e4f..dbf63f1 100644
--- a/lisp/org/ob-ditaa.el
+++ b/lisp/org/ob-ditaa.el
@@ -1,6 +1,6 @@
 ;;; ob-ditaa.el --- org-babel functions for ditaa evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-dot.el b/lisp/org/ob-dot.el
index b35d7bb..21a40b3 100644
--- a/lisp/org/ob-dot.el
+++ b/lisp/org/ob-dot.el
@@ -1,6 +1,6 @@
 ;;; ob-dot.el --- org-babel functions for dot evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-emacs-lisp.el b/lisp/org/ob-emacs-lisp.el
index 3219344..f861194 100644
--- a/lisp/org/ob-emacs-lisp.el
+++ b/lisp/org/ob-emacs-lisp.el
@@ -1,6 +1,6 @@
 ;;; ob-emacs-lisp.el --- org-babel functions for emacs-lisp code evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-eval.el b/lisp/org/ob-eval.el
index 057590f..112525c 100644
--- a/lisp/org/ob-eval.el
+++ b/lisp/org/ob-eval.el
@@ -1,6 +1,6 @@
 ;;; ob-eval.el --- org-babel functions for external code evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research, comint
diff --git a/lisp/org/ob-exp.el b/lisp/org/ob-exp.el
index 761c9f1..3bfa8c5 100644
--- a/lisp/org/ob-exp.el
+++ b/lisp/org/ob-exp.el
@@ -1,6 +1,6 @@
 ;;; ob-exp.el --- Exportation of org-babel source blocks
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;     Dan Davison
diff --git a/lisp/org/ob-fortran.el b/lisp/org/ob-fortran.el
index 0211fda..7fbfaf2 100644
--- a/lisp/org/ob-fortran.el
+++ b/lisp/org/ob-fortran.el
@@ -1,6 +1,6 @@
 ;;; ob-fortran.el --- org-babel functions for fortran
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Authors: Sergey Litvinov
 ;;       Eric Schulte
diff --git a/lisp/org/ob-gnuplot.el b/lisp/org/ob-gnuplot.el
index ffe5dcf..da7a398 100644
--- a/lisp/org/ob-gnuplot.el
+++ b/lisp/org/ob-gnuplot.el
@@ -1,6 +1,6 @@
 ;;; ob-gnuplot.el --- org-babel functions for gnuplot evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-haskell.el b/lisp/org/ob-haskell.el
index 0006670..d984a0f 100644
--- a/lisp/org/ob-haskell.el
+++ b/lisp/org/ob-haskell.el
@@ -1,6 +1,6 @@
 ;;; ob-haskell.el --- org-babel functions for haskell evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-io.el b/lisp/org/ob-io.el
index 971b37f..25e012d 100644
--- a/lisp/org/ob-io.el
+++ b/lisp/org/ob-io.el
@@ -1,6 +1,6 @@
 ;;; ob-io.el --- org-babel functions for Io evaluation
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Andrzej Lichnerowicz
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-java.el b/lisp/org/ob-java.el
index 22f8785..660262e 100644
--- a/lisp/org/ob-java.el
+++ b/lisp/org/ob-java.el
@@ -1,6 +1,6 @@
 ;;; ob-java.el --- org-babel functions for java evaluation
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-js.el b/lisp/org/ob-js.el
index 7789449..8d0cf7f 100644
--- a/lisp/org/ob-js.el
+++ b/lisp/org/ob-js.el
@@ -1,6 +1,6 @@
 ;;; ob-js.el --- org-babel functions for Javascript
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research, js
diff --git a/lisp/org/ob-keys.el b/lisp/org/ob-keys.el
index 90b5196..440d8e8 100644
--- a/lisp/org/ob-keys.el
+++ b/lisp/org/ob-keys.el
@@ -1,6 +1,6 @@
 ;;; ob-keys.el --- key bindings for org-babel
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-latex.el b/lisp/org/ob-latex.el
index 35b6650..d0a413f 100644
--- a/lisp/org/ob-latex.el
+++ b/lisp/org/ob-latex.el
@@ -1,6 +1,6 @@
 ;;; ob-latex.el --- org-babel functions for latex "evaluation"
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-ledger.el b/lisp/org/ob-ledger.el
index 806fec6..cda2d32 100644
--- a/lisp/org/ob-ledger.el
+++ b/lisp/org/ob-ledger.el
@@ -1,6 +1,6 @@
 ;;; ob-ledger.el --- org-babel functions for ledger evaluation
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric S Fraga
 ;; Keywords: literate programming, reproducible research, accounting
diff --git a/lisp/org/ob-lilypond.el b/lisp/org/ob-lilypond.el
index 00a951d..5391edf 100644
--- a/lisp/org/ob-lilypond.el
+++ b/lisp/org/ob-lilypond.el
@@ -1,6 +1,6 @@
 ;;; ob-lilypond.el --- org-babel functions for lilypond evaluation
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Martyn Jago
 ;; Keywords: babel language, literate programming
diff --git a/lisp/org/ob-lisp.el b/lisp/org/ob-lisp.el
index 6bddd61..c201e58 100644
--- a/lisp/org/ob-lisp.el
+++ b/lisp/org/ob-lisp.el
@@ -1,6 +1,6 @@
 ;;; ob-lisp.el --- org-babel functions for common lisp evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Authors: Joel Boehland
 ;;      Eric Schulte
diff --git a/lisp/org/ob-lob.el b/lisp/org/ob-lob.el
index 4e635da..b083011 100644
--- a/lisp/org/ob-lob.el
+++ b/lisp/org/ob-lob.el
@@ -1,6 +1,6 @@
 ;;; ob-lob.el --- functions supporting the Library of Babel
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;      Dan Davison
diff --git a/lisp/org/ob-makefile.el b/lisp/org/ob-makefile.el
index af7e66e..b43a9b3 100644
--- a/lisp/org/ob-makefile.el
+++ b/lisp/org/ob-makefile.el
@@ -1,6 +1,6 @@
 ;;; ob-makefile.el --- org-babel functions for makefile evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;;        Thomas S. Dye
diff --git a/lisp/org/ob-matlab.el b/lisp/org/ob-matlab.el
index ef77de3..31464f9 100644
--- a/lisp/org/ob-matlab.el
+++ b/lisp/org/ob-matlab.el
@@ -1,6 +1,6 @@
 ;;; ob-matlab.el --- org-babel support for matlab evaluation
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Dan Davison
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-maxima.el b/lisp/org/ob-maxima.el
index 7435f1d..a44b3c3 100644
--- a/lisp/org/ob-maxima.el
+++ b/lisp/org/ob-maxima.el
@@ -1,6 +1,6 @@
 ;;; ob-maxima.el --- org-babel functions for maxima evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric S Fraga
 ;;     Eric Schulte
diff --git a/lisp/org/ob-mscgen.el b/lisp/org/ob-mscgen.el
index 4a4dc05..6d57210 100644
--- a/lisp/org/ob-mscgen.el
+++ b/lisp/org/ob-mscgen.el
@@ -1,6 +1,6 @@
 ;;; ob-msc.el --- org-babel functions for mscgen evaluation
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Juan Pechiar
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-ocaml.el b/lisp/org/ob-ocaml.el
index 1f29a25..e73af25 100644
--- a/lisp/org/ob-ocaml.el
+++ b/lisp/org/ob-ocaml.el
@@ -1,6 +1,6 @@
 ;;; ob-ocaml.el --- org-babel functions for ocaml evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-octave.el b/lisp/org/ob-octave.el
index 8cc66b6..e0775db 100644
--- a/lisp/org/ob-octave.el
+++ b/lisp/org/ob-octave.el
@@ -1,6 +1,6 @@
 ;;; ob-octave.el --- org-babel functions for octave and matlab evaluation
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Dan Davison
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-org.el b/lisp/org/ob-org.el
index bc02f23..ab0db67 100644
--- a/lisp/org/ob-org.el
+++ b/lisp/org/ob-org.el
@@ -1,6 +1,6 @@
 ;;; ob-org.el --- org-babel functions for org code block evaluation
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-perl.el b/lisp/org/ob-perl.el
index ff4cbea..d27c18e 100644
--- a/lisp/org/ob-perl.el
+++ b/lisp/org/ob-perl.el
@@ -1,6 +1,6 @@
 ;;; ob-perl.el --- org-babel functions for perl evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Authors: Dan Davison
 ;;      Eric Schulte
diff --git a/lisp/org/ob-picolisp.el b/lisp/org/ob-picolisp.el
index b240138..5b696f1 100644
--- a/lisp/org/ob-picolisp.el
+++ b/lisp/org/ob-picolisp.el
@@ -1,6 +1,6 @@
 ;;; ob-picolisp.el --- org-babel functions for picolisp evaluation
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Authors: Thorsten Jolitz
 ;;      Eric Schulte
diff --git a/lisp/org/ob-plantuml.el b/lisp/org/ob-plantuml.el
index ebc5a10..f0f7220 100644
--- a/lisp/org/ob-plantuml.el
+++ b/lisp/org/ob-plantuml.el
@@ -1,6 +1,6 @@
 ;;; ob-plantuml.el --- org-babel functions for plantuml evaluation
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Zhang Weize
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-python.el b/lisp/org/ob-python.el
index 7cee104..3d441a3 100644
--- a/lisp/org/ob-python.el
+++ b/lisp/org/ob-python.el
@@ -1,6 +1,6 @@
 ;;; ob-python.el --- org-babel functions for python evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;      Dan Davison
diff --git a/lisp/org/ob-ref.el b/lisp/org/ob-ref.el
index 152af86..e5085ac 100644
--- a/lisp/org/ob-ref.el
+++ b/lisp/org/ob-ref.el
@@ -1,6 +1,6 @@
 ;;; ob-ref.el --- org-babel functions for referencing external data
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;      Dan Davison
diff --git a/lisp/org/ob-ruby.el b/lisp/org/ob-ruby.el
index 5b31247..7e09d6d 100644
--- a/lisp/org/ob-ruby.el
+++ b/lisp/org/ob-ruby.el
@@ -1,6 +1,6 @@
 ;;; ob-ruby.el --- org-babel functions for ruby evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-sass.el b/lisp/org/ob-sass.el
index 78c0c95..a39248d 100644
--- a/lisp/org/ob-sass.el
+++ b/lisp/org/ob-sass.el
@@ -1,6 +1,6 @@
 ;;; ob-sass.el --- org-babel functions for the sass css generation language
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-scala.el b/lisp/org/ob-scala.el
index 0584342..663ce29 100644
--- a/lisp/org/ob-scala.el
+++ b/lisp/org/ob-scala.el
@@ -1,6 +1,6 @@
 ;;; ob-scala.el --- org-babel functions for Scala evaluation
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Andrzej Lichnerowicz
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-scheme.el b/lisp/org/ob-scheme.el
index b7117e9..02b9dc3 100644
--- a/lisp/org/ob-scheme.el
+++ b/lisp/org/ob-scheme.el
@@ -1,6 +1,6 @@
 ;;; ob-scheme.el --- org-babel functions for Scheme
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;         Michael Gauland
diff --git a/lisp/org/ob-screen.el b/lisp/org/ob-screen.el
index 1d4ccdd..54ae5e1 100644
--- a/lisp/org/ob-screen.el
+++ b/lisp/org/ob-screen.el
@@ -1,6 +1,6 @@
 ;;; ob-screen.el --- org-babel support for interactive terminal
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Benjamin Andresen
 ;; Keywords: literate programming, interactive shell
diff --git a/lisp/org/ob-sh.el b/lisp/org/ob-sh.el
index 856c7a0..2ff5c20 100644
--- a/lisp/org/ob-sh.el
+++ b/lisp/org/ob-sh.el
@@ -1,6 +1,6 @@
 ;;; ob-sh.el --- org-babel functions for shell evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-shen.el b/lisp/org/ob-shen.el
index e40e45c..190d69b 100644
--- a/lisp/org/ob-shen.el
+++ b/lisp/org/ob-shen.el
@@ -1,6 +1,6 @@
 ;;; ob-shen.el --- org-babel functions for Shen
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research, shen
diff --git a/lisp/org/ob-sql.el b/lisp/org/ob-sql.el
index 08d4419..7ed61b1 100644
--- a/lisp/org/ob-sql.el
+++ b/lisp/org/ob-sql.el
@@ -1,6 +1,6 @@
 ;;; ob-sql.el --- org-babel functions for sql evaluation
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-sqlite.el b/lisp/org/ob-sqlite.el
index 098626f..33c8d9b 100644
--- a/lisp/org/ob-sqlite.el
+++ b/lisp/org/ob-sqlite.el
@@ -1,6 +1,6 @@
 ;;; ob-sqlite.el --- org-babel functions for sqlite database interaction
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-table.el b/lisp/org/ob-table.el
index 831e352..1f381db 100644
--- a/lisp/org/ob-table.el
+++ b/lisp/org/ob-table.el
@@ -1,6 +1,6 @@
 ;;; ob-table.el --- support for calling org-babel functions from tables
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-tangle.el b/lisp/org/ob-tangle.el
index 3a43b42..c0846f9 100644
--- a/lisp/org/ob-tangle.el
+++ b/lisp/org/ob-tangle.el
@@ -1,6 +1,6 @@
 ;;; ob-tangle.el --- extract source code from org-mode files
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob.el b/lisp/org/ob.el
index 87657fe..42137c2 100644
--- a/lisp/org/ob.el
+++ b/lisp/org/ob.el
@@ -1,6 +1,6 @@
 ;;; ob.el --- working with code blocks in org-mode
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
index c11c1c8..8f7611f 100644
--- a/lisp/org/org-agenda.el
+++ b/lisp/org/org-agenda.el
@@ -1,6 +1,6 @@
 ;;; org-agenda.el --- Dynamic task and appointment lists for Org
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-archive.el b/lisp/org/org-archive.el
index 87471a9..2637623 100644
--- a/lisp/org/org-archive.el
+++ b/lisp/org/org-archive.el
@@ -1,6 +1,6 @@
 ;;; org-archive.el --- Archiving for Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-attach.el b/lisp/org/org-attach.el
index bcf7ba7..71e2dba 100644
--- a/lisp/org/org-attach.el
+++ b/lisp/org/org-attach.el
@@ -1,6 +1,6 @@
 ;;; org-attach.el --- Manage file attachments to org-mode tasks
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Keywords: org data task
diff --git a/lisp/org/org-bbdb.el b/lisp/org/org-bbdb.el
index cfd5b3b..a0711cc 100644
--- a/lisp/org/org-bbdb.el
+++ b/lisp/org/org-bbdb.el
@@ -1,6 +1,6 @@
 ;;; org-bbdb.el --- Support for links to BBDB entries from within Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Authors: Carsten Dominik <carsten at orgmode dot org>
 ;;       Thomas Baumann <thomas dot baumann at ch dot tum dot de>
diff --git a/lisp/org/org-bibtex.el b/lisp/org/org-bibtex.el
index 75ac69b..8b5da8f 100644
--- a/lisp/org/org-bibtex.el
+++ b/lisp/org/org-bibtex.el
@@ -1,6 +1,6 @@
 ;;; org-bibtex.el --- Org links to BibTeX entries
 ;;
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 ;;
 ;; Authors: Bastien Guerry <address@hidden>
 ;;       Carsten Dominik <carsten dot dominik at gmail dot com>
diff --git a/lisp/org/org-capture.el b/lisp/org/org-capture.el
index c708683..7f1f7ed 100644
--- a/lisp/org/org-capture.el
+++ b/lisp/org/org-capture.el
@@ -1,6 +1,6 @@
 ;;; org-capture.el --- Fast note taking in Org-mode
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-clock.el b/lisp/org/org-clock.el
index 51c8789..d21d270 100644
--- a/lisp/org/org-clock.el
+++ b/lisp/org/org-clock.el
@@ -1,6 +1,6 @@
 ;;; org-clock.el --- The time clocking code for Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -2811,8 +2811,8 @@ The details of what will be saved are regulated by the 
variable
          (delete-region (point-min) (point-max))
          ;;Store clock
          (insert (format ";; org-persist.el - %s at %s\n"
-                         system-name (format-time-string
-                                      (cdr org-time-stamp-formats))))
+                         (system-name) (format-time-string
+                                        (cdr org-time-stamp-formats))))
          (if (and (memq org-clock-persist '(t clock))
                   (setq b (org-clocking-buffer))
                   (setq b (or (buffer-base-buffer b) b))
diff --git a/lisp/org/org-colview.el b/lisp/org/org-colview.el
index 07ee69f..e14849f 100644
--- a/lisp/org/org-colview.el
+++ b/lisp/org/org-colview.el
@@ -1,6 +1,6 @@
 ;;; org-colview.el --- Column View in Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-compat.el b/lisp/org/org-compat.el
index 447505c..9c92903 100644
--- a/lisp/org/org-compat.el
+++ b/lisp/org/org-compat.el
@@ -1,6 +1,6 @@
 ;;; org-compat.el --- Compatibility code for Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-crypt.el b/lisp/org/org-crypt.el
index 46fd3e6..f527673 100644
--- a/lisp/org/org-crypt.el
+++ b/lisp/org/org-crypt.el
@@ -1,6 +1,6 @@
 ;;; org-crypt.el --- Public key encryption for org-mode entries
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Emacs Lisp Archive Entry
 ;; Filename: org-crypt.el
diff --git a/lisp/org/org-ctags.el b/lisp/org/org-ctags.el
index 41775bd..a9baf04 100644
--- a/lisp/org/org-ctags.el
+++ b/lisp/org/org-ctags.el
@@ -1,6 +1,6 @@
 ;;; org-ctags.el - Integrate Emacs "tags" facility with org mode.
 ;;
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Paul Sexton <address@hidden>
 
@@ -63,19 +63,19 @@
 ;; with the same name as the link; then, if unsuccessful, ask the user if
 ;; he/she wants to rebuild the 'TAGS' database and try again; then ask if
 ;; the user wishes to append 'tag' as a new toplevel heading at the end of
-;; the buffer; and finally, defer to org's default behaviour which is to
+;; the buffer; and finally, defer to org's default behavior which is to
 ;; search the entire text of the current buffer for 'tag'.
 ;;
-;; This behaviour can be modified by changing the value of
+;; This behavior can be modified by changing the value of
 ;; ORG-CTAGS-OPEN-LINK-FUNCTIONS. For example I have the following in my
-;; .emacs, which describes the same behaviour as the above paragraph with
+;; .emacs, which describes the same behavior as the above paragraph with
 ;; one difference:
 ;;
 ;; (setq org-ctags-open-link-functions
 ;;       '(org-ctags-find-tag
 ;;         org-ctags-ask-rebuild-tags-file-then-find-tag
 ;;         org-ctags-ask-append-topic
-;;         org-ctags-fail-silently))  ; <-- prevents org default behaviour
+;;         org-ctags-fail-silently))  ; <-- prevents org default behavior
 ;;
 ;;
 ;; Usage
diff --git a/lisp/org/org-datetree.el b/lisp/org/org-datetree.el
index 0646c3b..77dfd7d 100644
--- a/lisp/org/org-datetree.el
+++ b/lisp/org/org-datetree.el
@@ -1,6 +1,6 @@
 ;;; org-datetree.el --- Create date entries in a tree
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-docview.el b/lisp/org/org-docview.el
index d2db685..07224d3 100644
--- a/lisp/org/org-docview.el
+++ b/lisp/org/org-docview.el
@@ -1,6 +1,6 @@
 ;;; org-docview.el --- support for links to doc-view-mode buffers
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Jan Böcker <jan.boecker at jboecker dot de>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-element.el b/lisp/org/org-element.el
index eb8ff41..651ce67 100644
--- a/lisp/org/org-element.el
+++ b/lisp/org/org-element.el
@@ -1,6 +1,6 @@
 ;;; org-element.el --- Parser And Applications for Org syntax
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-entities.el b/lisp/org/org-entities.el
index 6324a62..f8f218f 100644
--- a/lisp/org/org-entities.el
+++ b/lisp/org/org-entities.el
@@ -1,6 +1,6 @@
 ;;; org-entities.el --- Support for special entities in Org-mode
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>,
 ;;         Ulf Stegemann <ulf at zeitform dot de>
diff --git a/lisp/org/org-eshell.el b/lisp/org/org-eshell.el
index 1256bc3..115b333 100644
--- a/lisp/org/org-eshell.el
+++ b/lisp/org/org-eshell.el
@@ -1,6 +1,6 @@
 ;;; org-eshell.el - Support for links to working directories in eshell
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Konrad Hinsen <konrad.hinsen AT fastmail.net>
 
diff --git a/lisp/org/org-faces.el b/lisp/org/org-faces.el
index f8625f1..46936f4 100644
--- a/lisp/org/org-faces.el
+++ b/lisp/org/org-faces.el
@@ -1,6 +1,6 @@
 ;;; org-faces.el --- Face definitions for Org-mode.
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-feed.el b/lisp/org/org-feed.el
index 6e68071..f012124 100644
--- a/lisp/org/org-feed.el
+++ b/lisp/org/org-feed.el
@@ -1,6 +1,6 @@
 ;;; org-feed.el --- Add RSS feed items to Org files
 ;;
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-footnote.el b/lisp/org/org-footnote.el
index c8b8c2e..0f08697 100644
--- a/lisp/org/org-footnote.el
+++ b/lisp/org/org-footnote.el
@@ -1,6 +1,6 @@
 ;;; org-footnote.el --- Footnote support in Org and elsewhere
 ;;
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-gnus.el b/lisp/org/org-gnus.el
index 785b577..880994a 100644
--- a/lisp/org/org-gnus.el
+++ b/lisp/org/org-gnus.el
@@ -1,6 +1,6 @@
 ;;; org-gnus.el --- Support for links to Gnus groups and messages from within 
Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;;         Tassilo Horn <tassilo at member dot fsf dot org>
diff --git a/lisp/org/org-habit.el b/lisp/org/org-habit.el
index 6013756..cf2f4c8 100644
--- a/lisp/org/org-habit.el
+++ b/lisp/org/org-habit.el
@@ -1,6 +1,6 @@
 ;;; org-habit.el --- The habit tracking code for Org-mode
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw at gnu dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-id.el b/lisp/org/org-id.el
index fdd0ff0..5c85d7a 100644
--- a/lisp/org/org-id.el
+++ b/lisp/org/org-id.el
@@ -1,6 +1,6 @@
 ;;; org-id.el --- Global identifiers for Org-mode entries
 ;;
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-indent.el b/lisp/org/org-indent.el
index fa5f060..c8d3325 100644
--- a/lisp/org/org-indent.el
+++ b/lisp/org/org-indent.el
@@ -1,5 +1,5 @@
 ;;; org-indent.el --- Dynamic indentation for  Org-mode
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-info.el b/lisp/org/org-info.el
index 8a2d717..1c18793 100644
--- a/lisp/org/org-info.el
+++ b/lisp/org/org-info.el
@@ -1,6 +1,6 @@
 ;;; org-info.el --- Support for links to Info nodes from within Org-Mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-inlinetask.el b/lisp/org/org-inlinetask.el
index de4267c..38b68e1 100644
--- a/lisp/org/org-inlinetask.el
+++ b/lisp/org/org-inlinetask.el
@@ -1,6 +1,6 @@
 ;;; org-inlinetask.el --- Tasks independent of outline hierarchy
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-irc.el b/lisp/org/org-irc.el
index 8f9761b..62f3d95 100644
--- a/lisp/org/org-irc.el
+++ b/lisp/org/org-irc.el
@@ -1,6 +1,6 @@
 ;;; org-irc.el --- Store links to IRC sessions
 ;;
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Philip Jackson <address@hidden>
 ;; Keywords: erc, irc, link, org
diff --git a/lisp/org/org-list.el b/lisp/org/org-list.el
index a00e557..c8db77b 100644
--- a/lisp/org/org-list.el
+++ b/lisp/org/org-list.el
@@ -1,6 +1,6 @@
 ;;; org-list.el --- Plain lists for Org-mode
 ;;
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;;        Bastien Guerry <address@hidden>
diff --git a/lisp/org/org-macro.el b/lisp/org/org-macro.el
index 5b89034..a79b539 100644
--- a/lisp/org/org-macro.el
+++ b/lisp/org/org-macro.el
@@ -1,6 +1,6 @@
 ;;; org-macro.el --- Macro Replacement Code for Org Mode
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <address@hidden>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-macs.el b/lisp/org/org-macs.el
index 96265ec..23c3017 100644
--- a/lisp/org/org-macs.el
+++ b/lisp/org/org-macs.el
@@ -1,6 +1,6 @@
 ;;; org-macs.el --- Top-level definitions for Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-mhe.el b/lisp/org/org-mhe.el
index bdd6e15..e184440 100644
--- a/lisp/org/org-mhe.el
+++ b/lisp/org/org-mhe.el
@@ -1,6 +1,6 @@
 ;;; org-mhe.el --- Support for links to MH-E messages from within Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Thomas Baumann <thomas dot baumann at ch dot tum dot de>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-mobile.el b/lisp/org/org-mobile.el
index 41a9958..ce74206 100644
--- a/lisp/org/org-mobile.el
+++ b/lisp/org/org-mobile.el
@@ -1,5 +1,5 @@
 ;;; org-mobile.el --- Code for asymmetric sync with a mobile device
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-mouse.el b/lisp/org/org-mouse.el
index 718f346..160099f 100644
--- a/lisp/org/org-mouse.el
+++ b/lisp/org/org-mouse.el
@@ -1,6 +1,6 @@
 ;;; org-mouse.el --- Better mouse support for org-mode
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Piotr Zielinski <piotr dot zielinski at gmail dot com>
 ;; Maintainer: Carsten Dominik <carsten at orgmode dot org>
diff --git a/lisp/org/org-pcomplete.el b/lisp/org/org-pcomplete.el
index 32dcaa6..30d3b1c 100644
--- a/lisp/org/org-pcomplete.el
+++ b/lisp/org/org-pcomplete.el
@@ -1,6 +1,6 @@
 ;;; org-pcomplete.el --- In-buffer completion code
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;;         John Wiegley <johnw at gnu dot org>
diff --git a/lisp/org/org-plot.el b/lisp/org/org-plot.el
index 556b9ef..f092c71 100644
--- a/lisp/org/org-plot.el
+++ b/lisp/org/org-plot.el
@@ -1,6 +1,6 @@
 ;;; org-plot.el --- Support for plotting from Org-mode
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric Schulte <schulte dot eric at gmail dot com>
 ;; Keywords: tables, plotting
diff --git a/lisp/org/org-protocol.el b/lisp/org/org-protocol.el
index 0c6f2de..eeefc8d 100644
--- a/lisp/org/org-protocol.el
+++ b/lisp/org/org-protocol.el
@@ -1,6 +1,6 @@
 ;;; org-protocol.el --- Intercept calls from emacsclient to trigger custom 
actions.
 ;;
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 ;;
 ;; Authors: Bastien Guerry <address@hidden>
 ;;       Daniel M German <dmg AT uvic DOT org>
diff --git a/lisp/org/org-rmail.el b/lisp/org/org-rmail.el
index 6859b65..da515e2 100644
--- a/lisp/org/org-rmail.el
+++ b/lisp/org/org-rmail.el
@@ -1,6 +1,6 @@
 ;;; org-rmail.el --- Support for links to Rmail messages from within Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-src.el b/lisp/org/org-src.el
index 26b10ce..5c2ceaf 100644
--- a/lisp/org/org-src.el
+++ b/lisp/org/org-src.el
@@ -1,6 +1,6 @@
 ;;; org-src.el --- Source code examples in Org
 ;;
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;;        Bastien Guerry <address@hidden>
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index f28e96c..d84c51b 100644
--- a/lisp/org/org-table.el
+++ b/lisp/org/org-table.el
@@ -1,6 +1,6 @@
 ;;; org-table.el --- The table editor for Org-mode
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -2351,7 +2351,7 @@ For all numbers larger than LIMIT, shift them by DELTA."
                     (string-match "^[a-zA-Z][_a-zA-Z0-9]*$" field))
            (push (cons field v) org-table-local-parameters)
            (push (list field line col) org-table-named-field-locations))))
-      ;; Analyse the line types
+      ;; Analyze the line types.
       (goto-char beg)
       (setq org-table-current-begin-line (org-current-line)
            org-table-current-begin-pos (point)
diff --git a/lisp/org/org-timer.el b/lisp/org/org-timer.el
index b22db7b..55717ab 100644
--- a/lisp/org/org-timer.el
+++ b/lisp/org/org-timer.el
@@ -1,6 +1,6 @@
 ;;; org-timer.el --- The relative timer code for Org-mode
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-w3m.el b/lisp/org/org-w3m.el
index c8ddc82..24693de 100644
--- a/lisp/org/org-w3m.el
+++ b/lisp/org/org-w3m.el
@@ -1,6 +1,6 @@
 ;;; org-w3m.el --- Support from copy and paste from w3m to Org-mode
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Andy Stewart <lazycat dot manatee at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org.el b/lisp/org/org.el
index 30bb98d..3e032d4 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -1,7 +1,7 @@
 ;;; org.el --- Outline-based notes management and organizer
 
 ;; Carstens outline-mode for keeping track of everything.
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Maintainer: Carsten Dominik <carsten at orgmode dot org>
@@ -19148,7 +19148,7 @@ BEG and END default to the buffer boundaries."
 (org-defkey org-mode-map "\C-c\M-f" 'org-next-block)
 (org-defkey org-mode-map "\C-c\M-b" 'org-previous-block)
 (org-defkey org-mode-map "\C-c$"    'org-archive-subtree)
-(org-defkey org-mode-map "\C-c\C-x\C-s" 'org-advertized-archive-subtree)
+(org-defkey org-mode-map "\C-c\C-x\C-s" 'org-archive-subtree)
 (org-defkey org-mode-map "\C-c\C-x\C-a" 'org-archive-subtree-default)
 (org-defkey org-mode-map "\C-c\C-xd" 'org-insert-drawer)
 (org-defkey org-mode-map "\C-c\C-xa" 'org-toggle-archive-tag)
@@ -20348,7 +20348,7 @@ This command does many different things, depending on 
context:
          (item
           ;; At an item: a double C-u set checkbox to "[-]"
           ;; unconditionally, whereas a single one will toggle its
-          ;; presence.  Without an universal argument, if the item
+          ;; presence.  Without a universal argument, if the item
           ;; has a checkbox, toggle it.  Otherwise repair the list.
           (let* ((box (org-element-property :checkbox context))
                  (struct (org-element-property :structure context))
@@ -20943,7 +20943,7 @@ on context.  See the individual commands for more 
information."
     ("Archive"
      ["Archive (default method)" org-archive-subtree-default 
(org-in-subtree-not-table-p)]
      "--"
-     ["Move Subtree to Archive file" org-advertized-archive-subtree 
(org-in-subtree-not-table-p)]
+     ["Move Subtree to Archive file" org-archive-subtree 
(org-in-subtree-not-table-p)]
      ["Toggle ARCHIVE tag" org-toggle-archive-tag (org-in-subtree-not-table-p)]
      ["Move subtree to Archive sibling" org-archive-to-archive-sibling 
(org-in-subtree-not-table-p)]
      )
diff --git a/lisp/org/ox-ascii.el b/lisp/org/ox-ascii.el
index cd2a9af..65b6f75 100644
--- a/lisp/org/ox-ascii.el
+++ b/lisp/org/ox-ascii.el
@@ -1,6 +1,6 @@
 ;;; ox-ascii.el --- ASCII Back-End for Org Export Engine
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -185,7 +185,7 @@ original Org buffer at the same place."
   :package-version '(Org . "8.0")
   :type '(choice
          (const :tag "Replicate original spacing" nil)
-         (cons :tag "Set an uniform spacing"
+         (cons :tag "Set a uniform spacing"
                (integer :tag "Number of blank lines before contents")
                (integer :tag "Number of blank lines after contents"))))
 
diff --git a/lisp/org/ox-beamer.el b/lisp/org/ox-beamer.el
index 5ab805d..765f289 100644
--- a/lisp/org/ox-beamer.el
+++ b/lisp/org/ox-beamer.el
@@ -1,6 +1,6 @@
 ;;; ox-beamer.el --- Beamer Back-End for Org Export Engine
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik AT gmail DOT com>
 ;;         Nicolas Goaziou <n.goaziou AT gmail DOT com>
diff --git a/lisp/org/ox-html.el b/lisp/org/ox-html.el
index a3f0b50..36984b5 100644
--- a/lisp/org/ox-html.el
+++ b/lisp/org/ox-html.el
@@ -1,6 +1,6 @@
 ;;; ox-html.el --- HTML Back-End for Org Export Engine
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;;      Jambunathan K <kjambunathan at gmail dot com>
@@ -581,7 +581,7 @@ The function must accept two parameters:
 The function should return the string to be exported.
 
 For example, the variable could be set to the following function
-in order to mimic default behaviour:
+in order to mimic default behavior:
 
 The default value simply returns the value of CONTENTS."
   :group 'org-export-html
diff --git a/lisp/org/ox-icalendar.el b/lisp/org/ox-icalendar.el
index 38bdcf9..a77eaed 100644
--- a/lisp/org/ox-icalendar.el
+++ b/lisp/org/ox-icalendar.el
@@ -1,6 +1,6 @@
 ;;; ox-icalendar.el --- iCalendar Back-End for Org Export Engine
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;;      Nicolas Goaziou <n dot goaziou at gmail dot com>
diff --git a/lisp/org/ox-latex.el b/lisp/org/ox-latex.el
index 2c71f7d..98023a4 100644
--- a/lisp/org/ox-latex.el
+++ b/lisp/org/ox-latex.el
@@ -1,6 +1,6 @@
 ;;; ox-latex.el --- LaTeX Back-End for Org Export Engine
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -589,7 +589,7 @@ The function must accept six parameters:
 The function should return the string to be exported.
 
 For example, the variable could be set to the following function
-in order to mimic default behaviour:
+in order to mimic default behavior:
 
 \(defun org-latex-format-inlinetask \(todo type priority name tags contents\)
 \"Format an inline task element for LaTeX export.\"
diff --git a/lisp/org/ox-man.el b/lisp/org/ox-man.el
index d58c119..2b8348f 100644
--- a/lisp/org/ox-man.el
+++ b/lisp/org/ox-man.el
@@ -1,6 +1,6 @@
 ;; ox-man.el --- Man Back-End for Org Export Engine
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;;      Luis R Anaya <papoanaya aroba hot mail punto com>
diff --git a/lisp/org/ox-md.el b/lisp/org/ox-md.el
index 99a4ae0..2da005b 100644
--- a/lisp/org/ox-md.el
+++ b/lisp/org/ox-md.el
@@ -1,6 +1,6 @@
 ;;; ox-md.el --- Markdown Back-End for Org Export Engine
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <address@hidden>
 ;; Keywords: org, wp, markdown
diff --git a/lisp/org/ox-odt.el b/lisp/org/ox-odt.el
index 8b61d5c..29bc878 100644
--- a/lisp/org/ox-odt.el
+++ b/lisp/org/ox-odt.el
@@ -1,6 +1,6 @@
 ;;; ox-odt.el --- OpenDocument Text Exporter for Org Mode
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Jambunathan K <kjambunathan at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/ox-org.el b/lisp/org/ox-org.el
index 4bee45a..5904ca2 100644
--- a/lisp/org/ox-org.el
+++ b/lisp/org/ox-org.el
@@ -1,6 +1,6 @@
 ;;; ox-org.el --- Org Back-End for Org Export Engine
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <address@hidden>
 ;; Keywords: org, wp
diff --git a/lisp/org/ox-publish.el b/lisp/org/ox-publish.el
index efc70d2..f35df1b 100644
--- a/lisp/org/ox-publish.el
+++ b/lisp/org/ox-publish.el
@@ -1,5 +1,5 @@
 ;;; ox-publish.el --- Publish Related Org Mode Files as a Website
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: David O'Toole <address@hidden>
 ;; Maintainer: Carsten Dominik <carsten DOT dominik AT gmail DOT com>
@@ -228,7 +228,7 @@ If you create a site-map file, adjust the sorting like this:
   `:sitemap-sort-files'
 
     The site map is normally sorted alphabetically.  You can
-    change this behaviour setting this to `anti-chronologically',
+    change this behavior setting this to `anti-chronologically',
     `chronologically', or nil.
 
   `:sitemap-ignore-case'
diff --git a/lisp/org/ox-texinfo.el b/lisp/org/ox-texinfo.el
index 37841d7..0c81b62 100644
--- a/lisp/org/ox-texinfo.el
+++ b/lisp/org/ox-texinfo.el
@@ -1,6 +1,6 @@
 ;;; ox-texinfo.el --- Texinfo Back-End for Org Export Engine
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 ;; Author: Jonathan Leech-Pepin <jonathan.leechpepin at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
 
diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index 1327ae4..efac2f8 100644
--- a/lisp/org/ox.el
+++ b/lisp/org/ox.el
@@ -1,6 +1,6 @@
 ;;; ox.el --- Generic Export Engine for Org Mode
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -493,7 +493,7 @@ t           Allow export of math snippets."
   "The last level which is still exported as a headline.
 
 Inferior levels will usually produce itemize or enumerate lists
-when exported, but back-end behaviour may differ.
+when exported, but back-end behavior may differ.
 
 This option can also be set with the OPTIONS keyword,
 e.g. \"H:2\"."
@@ -1736,13 +1736,13 @@ Assume buffer is in Org mode.  Narrowing, if any, is 
ignored."
                      (t
                       ;; Options in `org-export-options-alist'.
                       (dolist (property (funcall find-properties key))
-                        (let ((behaviour (nth 4 (assq property options))))
+                        (let ((behavior (nth 4 (assq property options))))
                           (setq plist
                                 (plist-put
                                  plist property
                                  ;; Handle value depending on specified
                                  ;; BEHAVIOR.
-                                 (case behaviour
+                                 (case behavior
                                    (space
                                     (if (not (plist-get plist property))
                                         (org-trim val)
diff --git a/lisp/outline.el b/lisp/outline.el
index c7cad31..ae31b80 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -1,6 +1,6 @@
 ;;; outline.el --- outline mode commands for Emacs
 
-;; Copyright (C) 1986, 1993-1995, 1997, 2000-2014 Free Software
+;; Copyright (C) 1986, 1993-1995, 1997, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -35,9 +35,6 @@
 
 ;;; Code:
 
-(defvar font-lock-warning-face)
-
-
 (defgroup outlines nil
   "Support for hierarchical outlining."
   :prefix "outline-"
@@ -65,73 +62,66 @@ in the file it applies to.")
     (define-key map "@" 'outline-mark-subtree)
     (define-key map "\C-n" 'outline-next-visible-heading)
     (define-key map "\C-p" 'outline-previous-visible-heading)
-    (define-key map "\C-i" 'show-children)
-    (define-key map "\C-s" 'show-subtree)
-    (define-key map "\C-d" 'hide-subtree)
+    (define-key map "\C-i" 'outline-show-children)
+    (define-key map "\C-s" 'outline-show-subtree)
+    (define-key map "\C-d" 'outline-hide-subtree)
     (define-key map "\C-u" 'outline-up-heading)
     (define-key map "\C-f" 'outline-forward-same-level)
     (define-key map "\C-b" 'outline-backward-same-level)
-    (define-key map "\C-t" 'hide-body)
-    (define-key map "\C-a" 'show-all)
-    (define-key map "\C-c" 'hide-entry)
-    (define-key map "\C-e" 'show-entry)
-    (define-key map "\C-l" 'hide-leaves)
-    (define-key map "\C-k" 'show-branches)
-    (define-key map "\C-q" 'hide-sublevels)
-    (define-key map "\C-o" 'hide-other)
+    (define-key map "\C-t" 'outline-hide-body)
+    (define-key map "\C-a" 'outline-show-all)
+    (define-key map "\C-c" 'outline-hide-entry)
+    (define-key map "\C-e" 'outline-show-entry)
+    (define-key map "\C-l" 'outline-hide-leaves)
+    (define-key map "\C-k" 'outline-show-branches)
+    (define-key map "\C-q" 'outline-hide-sublevels)
+    (define-key map "\C-o" 'outline-hide-other)
     (define-key map "\C-^" 'outline-move-subtree-up)
     (define-key map "\C-v" 'outline-move-subtree-down)
     (define-key map [(control ?<)] 'outline-promote)
     (define-key map [(control ?>)] 'outline-demote)
     (define-key map "\C-m" 'outline-insert-heading)
-    ;; Where to bind outline-cycle ?
     map))
 
 (defvar outline-mode-menu-bar-map
   (let ((map (make-sparse-keymap)))
-
     (define-key map [hide] (cons "Hide" (make-sparse-keymap "Hide")))
-
-    (define-key map [hide hide-other]
-      '(menu-item "Hide Other" hide-other
+    (define-key map [hide outline-hide-other]
+      '(menu-item "Hide Other" outline-hide-other
                  :help "Hide everything except current body and parent and 
top-level headings"))
-    (define-key map [hide hide-sublevels]
-      '(menu-item "Hide Sublevels" hide-sublevels
+    (define-key map [hide outline-hide-sublevels]
+      '(menu-item "Hide Sublevels" outline-hide-sublevels
                  :help "Hide everything but the top LEVELS levels of headers, 
in whole buffer"))
-    (define-key map [hide hide-subtree]
-      '(menu-item "Hide Subtree" hide-subtree
+    (define-key map [hide outline-hide-subtree]
+      '(menu-item "Hide Subtree" outline-hide-subtree
                  :help "Hide everything after this heading at deeper levels"))
-    (define-key map [hide hide-entry]
-      '(menu-item "Hide Entry" hide-entry
+    (define-key map [hide outline-hide-entry]
+      '(menu-item "Hide Entry" outline-hide-entry
                  :help "Hide the body directly following this heading"))
-    (define-key map [hide hide-body]
-      '(menu-item "Hide Body" hide-body
+    (define-key map [hide outline-hide-body]
+      '(menu-item "Hide Body" outline-hide-body
                  :help "Hide all body lines in buffer, leaving all headings 
visible"))
-    (define-key map [hide hide-leaves]
-      '(menu-item "Hide Leaves" hide-leaves
+    (define-key map [hide outline-hide-leaves]
+      '(menu-item "Hide Leaves" outline-hide-leaves
                  :help "Hide the body after this heading and at deeper 
levels"))
-
     (define-key map [show] (cons "Show" (make-sparse-keymap "Show")))
-
-    (define-key map [show show-subtree]
-      '(menu-item "Show Subtree" show-subtree
+    (define-key map [show outline-show-subtree]
+      '(menu-item "Show Subtree" outline-show-subtree
                  :help "Show everything after this heading at deeper levels"))
-    (define-key map [show show-children]
-      '(menu-item "Show Children" show-children
+    (define-key map [show outline-show-children]
+      '(menu-item "Show Children" outline-show-children
                  :help "Show all direct subheadings of this heading"))
-    (define-key map [show show-branches]
-      '(menu-item "Show Branches" show-branches
+    (define-key map [show outline-show-branches]
+      '(menu-item "Show Branches" outline-show-branches
                  :help "Show all subheadings of this heading, but not their 
bodies"))
-    (define-key map [show show-entry]
-      '(menu-item "Show Entry" show-entry
+    (define-key map [show outline-show-entry]
+      '(menu-item "Show Entry" outline-show-entry
                  :help "Show the body directly following this heading"))
-    (define-key map [show show-all]
-      '(menu-item "Show All" show-all
+    (define-key map [show outline-show-all]
+      '(menu-item "Show All" outline-show-all
                  :help "Show all of the text in the buffer"))
-
     (define-key map [headings]
       (cons "Headings" (make-sparse-keymap "Headings")))
-
     (define-key map [headings demote-subtree]
       '(menu-item "Demote Subtree" outline-demote
                  :help "Demote headings lower down the tree"))
@@ -152,23 +142,18 @@ in the file it applies to.")
       '(menu-item "New Heading" outline-insert-heading
                  :help "Insert a new heading at same depth at point"))
     (define-key map [headings outline-backward-same-level]
-
       '(menu-item "Previous Same Level" outline-backward-same-level
                  :help "Move backward to the arg'th subheading at same level 
as this one."))
     (define-key map [headings outline-forward-same-level]
-
       '(menu-item "Next Same Level" outline-forward-same-level
                  :help "Move forward to the arg'th subheading at same level as 
this one"))
     (define-key map [headings outline-previous-visible-heading]
-
       '(menu-item "Previous" outline-previous-visible-heading
                  :help "Move to the previous heading line"))
     (define-key map [headings outline-next-visible-heading]
-
       '(menu-item "Next" outline-next-visible-heading
                  :help "Move to the next visible heading line"))
     (define-key map [headings outline-up-heading]
-
       '(menu-item "Up" outline-up-heading
                  :help "Move to the visible heading line of which the present 
line is a subheading"))
     map))
@@ -190,7 +175,6 @@ in the file it applies to.")
                                   outline-mode-menu-bar-map))))))
     map))
 
-
 (defvar outline-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "\C-c" outline-mode-prefix-map)
@@ -198,7 +182,7 @@ in the file it applies to.")
     map))
 
 (defvar outline-font-lock-keywords
-  '(;;
+  '(
     ;; Highlight headings according to the level.
     (eval . (list (concat "^\\(?:" outline-regexp "\\).+")
                  0 '(outline-font-lock-face) nil t)))
@@ -248,33 +232,14 @@ in the file it applies to.")
   [outline-1 outline-2 outline-3 outline-4
    outline-5 outline-6 outline-7 outline-8])
 
-;; (defvar outline-font-lock-levels nil)
-;; (make-variable-buffer-local 'outline-font-lock-levels)
-
 (defun outline-font-lock-face ()
-  ;; (save-excursion
-  ;;   (outline-back-to-heading t)
-  ;;   (let* ((count 0)
-  ;;      (start-level (funcall outline-level))
-  ;;      (level start-level)
-  ;;      face-level)
-  ;;     (while (not (setq face-level
-  ;;                   (if (or (bobp) (eq level 1)) 0
-  ;;                     (cdr (assq level outline-font-lock-levels)))))
-  ;;   (outline-up-heading 1 t)
-  ;;   (setq count (1+ count))
-  ;;   (setq level (funcall outline-level)))
-  ;;     ;; Remember for later.
-  ;;     (unless (zerop count)
-  ;;   (setq face-level (+ face-level count))
-  ;;   (push (cons start-level face-level) outline-font-lock-levels))
-  ;;     (condition-case nil
-  ;;     (aref outline-font-lock-faces face-level)
-  ;;   (error font-lock-warning-face))))
+  "Return one of `outline-font-lock-faces' for current level."
   (save-excursion
     (goto-char (match-beginning 0))
     (looking-at outline-regexp)
-    (aref outline-font-lock-faces (% (1- (funcall outline-level)) (length 
outline-font-lock-faces)))))
+    (aref outline-font-lock-faces
+          (% (1- (funcall outline-level))
+             (length outline-font-lock-faces)))))
 
 (defvar outline-view-change-hook nil
   "Normal hook to be run after outline visibility changes.")
@@ -296,29 +261,11 @@ invisible, or visible again.  Invisible lines are 
attached to the end
 of the heading, so they move with it, if the line is killed and yanked
 back.  A heading with text hidden under it is marked with an ellipsis (...).
 
-Commands:\\<outline-mode-map>
-\\[outline-next-visible-heading]   outline-next-visible-heading      move by 
visible headings
-\\[outline-previous-visible-heading]   outline-previous-visible-heading
-\\[outline-forward-same-level]   outline-forward-same-level        similar but 
skip subheadings
-\\[outline-backward-same-level]   outline-backward-same-level
-\\[outline-up-heading]   outline-up-heading                move from 
subheading to heading
-
-\\[hide-body]  make all text invisible (not headings).
-\\[show-all]   make everything in buffer visible.
-\\[hide-sublevels]  make only the first N levels of headers visible.
-
-The remaining commands are used when point is on a heading line.
-They apply to some of the body or subheadings of that heading.
-\\[hide-subtree]   hide-subtree        make body and subheadings invisible.
-\\[show-subtree]   show-subtree        make body and subheadings visible.
-\\[show-children]   show-children      make direct subheadings visible.
-                No effect on body, or subheadings 2 or more levels down.
-                With arg N, affects subheadings N levels down.
-\\[hide-entry]    make immediately following body invisible.
-\\[show-entry]    make it visible.
-\\[hide-leaves]           make body under heading and under its subheadings 
invisible.
-                    The subheadings remain visible.
-\\[show-branches]  make all subheadings at all levels visible.
+\\{outline-mode-map}
+The commands `outline-hide-subtree', `outline-show-subtree',
+`outline-show-children', `outline-hide-entry',
+`outline-show-entry', `outline-hide-leaves', and `outline-show-branches'
+are used when point is on a heading line.
 
 The variable `outline-regexp' can be changed to control what is a heading.
 A line is a heading if `outline-regexp' matches something at the
@@ -340,7 +287,7 @@ Turning on outline mode calls the value of `text-mode-hook' 
and then of
        '(outline-font-lock-keywords t nil nil backward-paragraph))
   (setq imenu-generic-expression
        (list (list nil (concat "^\\(?:" outline-regexp "\\).*$") 0)))
-  (add-hook 'change-major-mode-hook 'show-all nil t))
+  (add-hook 'change-major-mode-hook 'outline-show-all nil t))
 
 (defcustom outline-minor-mode-prefix "\C-c@"
   "Prefix key to use for Outline commands in Outline minor mode.
@@ -373,7 +320,7 @@ See the command `outline-mode' for more information on this 
mode."
     ;; Cause use of ellipses for invisible text.
     (remove-from-invisibility-spec '(outline . t))
     ;; When turning off outline mode, get rid of any outline hiding.
-    (show-all)))
+    (outline-show-all)))
 
 (defvar outline-level 'outline-level
   "Function of no args to compute a header's nesting level in an outline.
@@ -441,7 +388,8 @@ at the end of the buffer."
                      nil 'move))
 
 (defsubst outline-invisible-p (&optional pos)
-  "Non-nil if the character after point is invisible."
+  "Non-nil if the character after POS is invisible.
+If POS is nil, use `point' instead."
   (get-char-property (or pos (point)) 'invisible))
 
 (defun outline-back-to-heading (&optional invisible-ok)
@@ -454,7 +402,7 @@ Only visible heading lines are considered, unless 
INVISIBLE-OK is non-nil."
          (while (not found)
            (or (re-search-backward (concat "^\\(?:" outline-regexp "\\)")
                                    nil t)
-               (error "before first heading"))
+                (error "Before first heading"))
            (setq found (and (or invisible-ok (not (outline-invisible-p)))
                             (point)))))
        (goto-char found)
@@ -489,6 +437,9 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok 
too."
     (run-hooks 'outline-insert-heading-hook)))
 
 (defun outline-invent-heading (head up)
+  "Create a heading by using heading HEAD as a template.
+When UP is non-nil, the created heading will be one level above.
+Otherwise, it will be one level below."
   (save-match-data
     ;; Let's try to invent one by repeating or deleting the last char.
     (let ((new-head (if up (substring head 0 -1)
@@ -504,7 +455,7 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok 
too."
 
 (defun outline-promote (&optional which)
   "Promote headings higher up the tree.
-If transient-mark-mode is on, and mark is active, promote headings in
+If `transient-mark-mode' is on, and mark is active, promote headings in
 the region (from a Lisp program, pass `region' for WHICH).  Otherwise:
 without prefix argument, promote current heading and all headings in the
 subtree (from a Lisp program, pass `subtree' for WHICH); with prefix
@@ -543,7 +494,7 @@ nil for WHICH, or do not pass any argument)."
 
 (defun outline-demote (&optional which)
   "Demote headings lower down the tree.
-If transient-mark-mode is on, and mark is active, demote headings in
+If `transient-mark-mode' is on, and mark is active, demote headings in
 the region (from a Lisp program, pass `region' for WHICH).  Otherwise:
 without prefix argument, demote current heading and all headings in the
 subtree (from a Lisp program, pass `subtree' for WHICH); with prefix
@@ -585,7 +536,7 @@ nil for WHICH, or do not pass any argument)."
       (replace-match down-head nil t)))))
 
 (defun outline-head-from-level (level head &optional alist)
-  "Get new heading with level LEVEL from ALIST.
+  "Get new heading with level LEVEL, closest to HEAD, from ALIST.
 If there are no such entries, return nil.
 ALIST defaults to `outline-heading-alist'.
 Similar to (car (rassoc LEVEL ALIST)).
@@ -645,44 +596,49 @@ the match data is set appropriately."
 (defun outline-move-subtree-down (&optional arg)
   "Move the current subtree down past ARG headlines of the same level."
   (interactive "p")
-  (let ((movfunc (if (> arg 0) 'outline-get-next-sibling
-                  'outline-get-last-sibling))
-       (ins-point (make-marker))
-       (cnt (abs arg))
-       beg end folded)
-    ;; Select the tree
-    (outline-back-to-heading)
-    (setq beg (point))
-    (save-match-data
-      (save-excursion (outline-end-of-heading)
-                     (setq folded (outline-invisible-p)))
-      (outline-end-of-subtree))
-    (if (= (char-after) ?\n) (forward-char 1))
-    (setq end (point))
-    ;; Find insertion point, with error handling
+  (outline-back-to-heading)
+  (let* ((movfunc (if (> arg 0) 'outline-get-next-sibling
+                   'outline-get-last-sibling))
+        ;; Find the end of the subtree to be moved as well as the point to
+        ;; move it to, adding a newline if necessary, to ensure these points
+        ;; are at bol on the line below the subtree.
+         (end-point-func (lambda ()
+                          (outline-end-of-subtree)
+                          (if (eq (char-after) ?\n) (forward-char 1)
+                               (if (and (eobp) (not (bolp))) (insert "\n")))
+                          (point)))
+         (beg (point))
+         (folded (save-match-data
+                  (outline-end-of-heading)
+                  (outline-invisible-p)))
+         (end (save-match-data
+               (funcall end-point-func)))
+         (ins-point (make-marker))
+         (cnt (abs arg)))
+    ;; Find insertion point, with error handling.
     (goto-char beg)
     (while (> cnt 0)
       (or (funcall movfunc)
          (progn (goto-char beg)
-                (error "Cannot move past superior level")))
+                (user-error "Cannot move past superior level")))
       (setq cnt (1- cnt)))
     (if (> arg 0)
-       ;; Moving forward - still need to move over subtree
-       (progn (outline-end-of-subtree)
-              (if (= (char-after) ?\n) (forward-char 1))))
+       ;; Moving forward - still need to move over subtree.
+       (funcall end-point-func))
     (move-marker ins-point (point))
     (insert (delete-and-extract-region beg end))
     (goto-char ins-point)
-    (if folded (hide-subtree))
+    (if folded (outline-hide-subtree))
     (move-marker ins-point nil)))
 
 (defun outline-end-of-heading ()
+  "Move to one char before the next `outline-heading-end-regexp'."
   (if (re-search-forward outline-heading-end-regexp nil 'move)
       (forward-char -1)))
 
 (defun outline-next-visible-heading (arg)
   "Move to the next visible heading line.
-With argument, repeats or can move backward if negative.
+With ARG, repeats or can move backward if negative.
 A heading line is one that starts with a `*' (or that
 `outline-regexp' matches)."
   (interactive "p")
@@ -710,7 +666,7 @@ A heading line is one that starts with a `*' (or that
 
 (defun outline-previous-visible-heading (arg)
   "Move to the previous heading line.
-With argument, repeats or can move forward if negative.
+With ARG, repeats or can move forward if negative.
 A heading line is one that starts with a `*' (or that
 `outline-regexp' matches)."
   (interactive "p")
@@ -735,7 +691,7 @@ This puts point at the start of the current subtree, and 
mark at the end."
 (defvar outline-isearch-open-invisible-function nil
   "Function called if `isearch' finishes in an invisible overlay.
 The function is called with the overlay as its only argument.
-If nil, `show-entry' is called to reveal the invisible text.")
+If nil, `outline-show-entry' is called to reveal the invisible text.")
 
 (put 'outline 'reveal-toggle-invisible 'outline-reveal-toggle-invisible)
 (defun outline-flag-region (from to flag)
@@ -759,51 +715,51 @@ If FLAG is nil then text is shown, while if FLAG is t the 
text is hidden."
   (save-excursion
     (goto-char (overlay-start o))
     (if hidep
-       ;; When hiding the area again, we could just clean it up and let
-       ;; reveal do the rest, by simply doing:
-       ;; (remove-overlays (overlay-start o) (overlay-end o)
-       ;;                  'invisible 'outline)
-       ;;
-       ;; That works fine as long as everything is in sync, but if the
-       ;; structure of the document is changed while revealing parts of it,
-       ;; the resulting behavior can be ugly.  I.e. we need to make
-       ;; sure that we hide exactly a subtree.
-       (progn
-         (let ((end (overlay-end o)))
-           (delete-overlay o)
-           (while (progn
-                    (hide-subtree)
-                    (outline-next-visible-heading 1)
-                    (and (not (eobp)) (< (point) end))))))
+        ;; When hiding the area again, we could just clean it up and let
+        ;; reveal do the rest, by simply doing:
+        ;; (remove-overlays (overlay-start o) (overlay-end o)
+        ;;                  'invisible 'outline)
+        ;;
+        ;; That works fine as long as everything is in sync, but if the
+        ;; structure of the document is changed while revealing parts of it,
+        ;; the resulting behavior can be ugly.  I.e. we need to make
+        ;; sure that we hide exactly a subtree.
+        (progn
+          (let ((end (overlay-end o)))
+            (delete-overlay o)
+            (while (progn
+                     (outline-hide-subtree)
+                     (outline-next-visible-heading 1)
+                     (and (not (eobp)) (< (point) end))))))
 
       ;; When revealing, we just need to reveal sublevels.  If point is
       ;; inside one of the sublevels, reveal will call us again.
       ;; But we need to preserve the original overlay.
       (let ((o1 (copy-overlay o)))
-       (overlay-put o 'invisible nil)  ;Show (most of) the text.
-       (while (progn
-                (show-entry)
-                (show-children)
-                ;; Normally just the above is needed.
-                ;; But in odd cases, the above might fail to show anything.
-                ;; To avoid an infinite loop, we have to make sure that
-                ;; *something* gets shown.
-                (and (equal (overlay-start o) (overlay-start o1))
-                     (< (point) (overlay-end o))
-                     (= 0 (forward-line 1)))))
-       ;; If still nothing was shown, just kill the damn thing.
-       (when (equal (overlay-start o) (overlay-start o1))
-         ;; I've seen it happen at the end of buffer.
-         (delete-overlay o1))))))
+        (overlay-put o 'invisible nil)  ;Show (most of) the text.
+        (while (progn
+                 (outline-show-entry)
+                 (outline-show-children)
+                 ;; Normally just the above is needed.
+                 ;; But in odd cases, the above might fail to show anything.
+                 ;; To avoid an infinite loop, we have to make sure that
+                 ;; *something* gets shown.
+                 (and (equal (overlay-start o) (overlay-start o1))
+                      (< (point) (overlay-end o))
+                      (= 0 (forward-line 1)))))
+        ;; If still nothing was shown, just kill the damn thing.
+        (when (equal (overlay-start o) (overlay-start o1))
+          ;; I've seen it happen at the end of buffer.
+          (delete-overlay o1))))))
 
 ;; Function to be set as an outline-isearch-open-invisible' property
 ;; to the overlay that makes the outline invisible (see
 ;; `outline-flag-region').
 (defun outline-isearch-open-invisible (_overlay)
   ;; We rely on the fact that isearch places point on the matched text.
-  (show-entry))
+  (outline-show-entry))
 
-(defun hide-entry ()
+(defun outline-hide-entry ()
   "Hide the body directly following this heading."
   (interactive)
   (save-excursion
@@ -811,22 +767,31 @@ If FLAG is nil then text is shown, while if FLAG is t the 
text is hidden."
     (outline-end-of-heading)
     (outline-flag-region (point) (progn (outline-next-preface) (point)) t)))
 
-(defun show-entry ()
+(define-obsolete-function-alias
+    'hide-entry 'outline-hide-entry "25.1")
+
+(defun outline-show-entry ()
   "Show the body directly following this heading.
 Show the heading too, if it is currently invisible."
   (interactive)
   (save-excursion
     (outline-back-to-heading t)
     (outline-flag-region (1- (point))
-                        (progn (outline-next-preface) (point)) nil)))
+                         (progn (outline-next-preface) (point)) nil)))
 
-(defun hide-body ()
+(define-obsolete-function-alias
+    'show-entry 'outline-show-entry "25.1")
+
+(defun outline-hide-body ()
   "Hide all body lines in buffer, leaving all headings visible."
   (interactive)
-  (hide-region-body (point-min) (point-max)))
+  (outline-hide-region-body (point-min) (point-max)))
+
+(define-obsolete-function-alias
+    'hide-body 'outline-hide-body "25.1")
 
-(defun hide-region-body (start end)
-  "Hide all body lines in the region, but not headings."
+(defun outline-hide-region-body (start end)
+  "Hide all body lines between START and END, but not headings."
   ;; Nullify the hook to avoid repeated calls to `outline-flag-region'
   ;; wasting lots of time running `lazy-lock-fontify-after-outline'
   ;; and run the hook finally.
@@ -846,30 +811,47 @@ Show the heading too, if it is currently invisible."
            (outline-end-of-heading))))))
   (run-hooks 'outline-view-change-hook))
 
-(defun show-all ()
+(define-obsolete-function-alias
+    'hide-region-body 'outline-hide-region-body "25.1")
+
+(defun outline-show-all ()
   "Show all of the text in the buffer."
   (interactive)
   (outline-flag-region (point-min) (point-max) nil))
 
-(defun hide-subtree ()
+(define-obsolete-function-alias
+    'show-all 'outline-show-all "25.1")
+
+(defun outline-hide-subtree ()
   "Hide everything after this heading at deeper levels."
   (interactive)
   (outline-flag-subtree t))
 
-(defun hide-leaves ()
+(define-obsolete-function-alias
+    'hide-subtree 'outline-hide-subtree "25.1")
+
+(defun outline-hide-leaves ()
   "Hide the body after this heading and at deeper levels."
   (interactive)
   (save-excursion
     (outline-back-to-heading)
-;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005.
-;;    (outline-end-of-heading)
-    (hide-region-body (point) (progn (outline-end-of-subtree) (point)))))
+    ;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005.
+    ;;    (outline-end-of-heading)
+    (outline-hide-region-body
+     (point)
+     (progn (outline-end-of-subtree) (point)))))
+
+(define-obsolete-function-alias
+    'hide-leaves 'outline-hide-leaves "25.1")
 
-(defun show-subtree ()
+(defun outline-show-subtree ()
   "Show everything after this heading at deeper levels."
   (interactive)
   (outline-flag-subtree nil))
 
+(define-obsolete-function-alias
+    'show-subtree 'outline-show-subtree "25.1")
+
 (defun outline-show-heading ()
   "Show the current heading and move to its end."
   (outline-flag-region (- (point)
@@ -880,7 +862,7 @@ Show the heading too, if it is currently invisible."
                       (progn (outline-end-of-heading) (point))
                       nil))
 
-(defun hide-sublevels (levels)
+(defun outline-hide-sublevels (levels)
   "Hide everything but the top LEVELS levels of headers, in whole buffer."
   (interactive (list
                (cond
@@ -918,14 +900,17 @@ Show the heading too, if it is currently invisible."
           (outline-flag-region (1- (point)) (point) nil))))
   (run-hooks 'outline-view-change-hook))
 
-(defun hide-other ()
+(define-obsolete-function-alias
+    'hide-sublevels 'outline-hide-sublevels "25.1")
+
+(defun outline-hide-other ()
   "Hide everything except current body and parent and top-level headings."
   (interactive)
-  (hide-sublevels 1)
+  (outline-hide-sublevels 1)
   (let (outline-view-change-hook)
     (save-excursion
       (outline-back-to-heading t)
-      (show-entry)
+      (outline-show-entry)
       (while (condition-case nil (progn (outline-up-heading 1 t) (not (bobp)))
               (error nil))
        (outline-flag-region (1- (point))
@@ -933,17 +918,21 @@ Show the heading too, if it is currently invisible."
                             nil))))
   (run-hooks 'outline-view-change-hook))
 
+(define-obsolete-function-alias
+    'hide-other 'outline-hide-other "25.1")
+
 (defun outline-toggle-children ()
   "Show or hide the current subtree depending on its current state."
   (interactive)
   (save-excursion
     (outline-back-to-heading)
     (if (not (outline-invisible-p (line-end-position)))
-       (hide-subtree)
-      (show-children)
-      (show-entry))))
+        (outline-hide-subtree)
+      (outline-show-children)
+      (outline-show-entry))))
 
 (defun outline-flag-subtree (flag)
+  "Assign FLAG to the current subtree."
   (save-excursion
     (outline-back-to-heading)
     (outline-end-of-heading)
@@ -952,6 +941,7 @@ Show the heading too, if it is currently invisible."
                          flag)))
 
 (defun outline-end-of-subtree ()
+  "Move to the end of the current subtree."
   (outline-back-to-heading)
   (let ((first t)
        (level (funcall outline-level)))
@@ -968,12 +958,15 @@ Show the heading too, if it is currently invisible."
              ;; leave blank line before heading
              (forward-char -1))))))
 
-(defun show-branches ()
+(defun outline-show-branches ()
   "Show all subheadings of this heading, but not their bodies."
   (interactive)
-  (show-children 1000))
+  (outline-show-children 1000))
+
+(define-obsolete-function-alias
+    'show-branches 'outline-show-branches "25.1")
 
-(defun show-children (&optional level)
+(defun outline-show-children (&optional level)
   "Show all direct subheadings of this heading.
 Prefix arg LEVEL is how many levels below the current level should be shown.
 Default is enough to cause the following heading to appear."
@@ -1000,6 +993,9 @@ Default is enough to cause the following heading to 
appear."
              (if (eobp) (point-max) (1+ (point)))))))
   (run-hooks 'outline-view-change-hook))
 
+(define-obsolete-function-alias
+    'show-children 'outline-show-children "25.1")
+
 
 
 (defun outline-up-heading (arg &optional invisible-ok)
@@ -1082,7 +1078,7 @@ If there is no such heading, return nil."
         (point)))))
 
 (defun outline-headers-as-kill (beg end)
-  "Save the visible outline headers in region at the start of the kill ring.
+  "Save the visible outline headers between BEG and END to the kill ring.
 
 Text shown between the headers isn't copied.  Two newlines are
 inserted between saved headers.  Yanking the result may be a
diff --git a/lisp/paren.el b/lisp/paren.el
index 0a34a6f..30314c2 100644
--- a/lisp/paren.el
+++ b/lisp/paren.el
@@ -1,6 +1,6 @@
 ;;; paren.el --- highlight matching paren
 
-;; Copyright (C) 1993, 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: address@hidden
 ;; Maintainer: address@hidden
diff --git a/lisp/password-cache.el b/lisp/password-cache.el
index 523b620..59357f7 100644
--- a/lisp/password-cache.el
+++ b/lisp/password-cache.el
@@ -1,6 +1,6 @@
 ;;; password-cache.el --- Read passwords, possibly using a password cache.
 
-;; Copyright (C) 1999-2000, 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Created: 2003-12-21
diff --git a/lisp/pcmpl-cvs.el b/lisp/pcmpl-cvs.el
index ac1a6fa..458e420 100644
--- a/lisp/pcmpl-cvs.el
+++ b/lisp/pcmpl-cvs.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-cvs.el --- functions for dealing with cvs completions
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Package: pcomplete
diff --git a/lisp/pcmpl-gnu.el b/lisp/pcmpl-gnu.el
index bcab1f7..ada2a04 100644
--- a/lisp/pcmpl-gnu.el
+++ b/lisp/pcmpl-gnu.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-gnu.el --- completions for GNU project tools -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
@@ -323,8 +323,8 @@
                 (let ((file (pcomplete-arg 1)))
                   (completion-table-dynamic
                    (lambda (_string)
-                     (pcmpl-gnu-with-file-buffer file
-                       (mapcar #'tar-header-name tar-parse-info)))))
+                     (pcmpl-gnu-with-file-buffer
+                      file (mapcar #'tar-header-name tar-parse-info)))))
              (pcomplete-entries))
            nil 'identity))))
 
diff --git a/lisp/pcmpl-linux.el b/lisp/pcmpl-linux.el
index 9da931b..5e52309 100644
--- a/lisp/pcmpl-linux.el
+++ b/lisp/pcmpl-linux.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-linux.el --- functions for dealing with GNU/Linux completions
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-rpm.el b/lisp/pcmpl-rpm.el
index f7eac8c..81d1f7e 100644
--- a/lisp/pcmpl-rpm.el
+++ b/lisp/pcmpl-rpm.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-rpm.el --- functions for dealing with rpm completions
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el
index 6ac3e15..3598cd6 100644
--- a/lisp/pcmpl-unix.el
+++ b/lisp/pcmpl-unix.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-unix.el --- standard UNIX completions
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-x.el b/lisp/pcmpl-x.el
index 9217316..7072d92 100644
--- a/lisp/pcmpl-x.el
+++ b/lisp/pcmpl-x.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-x.el --- completion for miscellaneous tools  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Leo Liu <address@hidden>
 ;; Keywords: processes, tools, convenience
diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el
index dbeefda..7bcf2c1 100644
--- a/lisp/pcomplete.el
+++ b/lisp/pcomplete.el
@@ -1,6 +1,6 @@
 ;;; pcomplete.el --- programmable completion -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Keywords: processes abbrev
@@ -755,8 +755,7 @@ this is `comint-dynamic-complete-functions'."
            pcomplete-index 0
            pcomplete-stub (pcomplete-arg 'last))
       (let ((begin (pcomplete-begin 'last)))
-       (if (and pcomplete-cycle-completions
-                (listp pcomplete-stub) ;??
+       (if (and (listp pcomplete-stub) ;??
                 (not pcomplete-expand-only-p))
            (let* ((completions pcomplete-stub) ;??
                   (common-stub (car completions))
diff --git a/lisp/play/.gitignore b/lisp/play/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/lisp/play/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/lisp/play/5x5.el b/lisp/play/5x5.el
index 4359f3f..0258f1e 100644
--- a/lisp/play/5x5.el
+++ b/lisp/play/5x5.el
@@ -1,6 +1,6 @@
 ;;; 5x5.el --- simple little puzzle game -*- coding: utf-8 -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Pearson <address@hidden>
 ;; Maintainer: Dave Pearson <address@hidden>
diff --git a/lisp/play/animate.el b/lisp/play/animate.el
index 8b286ab..e869f2c 100644
--- a/lisp/play/animate.el
+++ b/lisp/play/animate.el
@@ -1,6 +1,6 @@
 ;;; animate.el --- make text dance
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: Richard Stallman <address@hidden>
 ;; Keywords: games
diff --git a/lisp/play/blackbox.el b/lisp/play/blackbox.el
index 8e4106e..74ac70b 100644
--- a/lisp/play/blackbox.el
+++ b/lisp/play/blackbox.el
@@ -1,6 +1,6 @@
 ;;; blackbox.el --- blackbox game in Emacs Lisp
 
-;; Copyright (C) 1985-1987, 1992, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1992, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: F. Thomas May <address@hidden>
diff --git a/lisp/play/bubbles.el b/lisp/play/bubbles.el
index cae151f..2c40310 100644
--- a/lisp/play/bubbles.el
+++ b/lisp/play/bubbles.el
@@ -1,6 +1,6 @@
 ;;; bubbles.el --- Puzzle game for Emacs -*- coding: utf-8 -*-
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <address@hidden>
 ;; URL:         http://ulf.epplejasper.de/
diff --git a/lisp/play/cookie1.el b/lisp/play/cookie1.el
index 4d49fca..d4e553b 100644
--- a/lisp/play/cookie1.el
+++ b/lisp/play/cookie1.el
@@ -1,6 +1,6 @@
 ;;; cookie1.el --- retrieve random phrases from fortune cookie files
 
-;; Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/play/decipher.el b/lisp/play/decipher.el
index 247b15b..f42ae90 100644
--- a/lisp/play/decipher.el
+++ b/lisp/play/decipher.el
@@ -1,6 +1,6 @@
 ;;; decipher.el --- cryptanalyze monoalphabetic substitution ciphers
 ;;
-;; Copyright (C) 1995-1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 2001-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Christopher J. Madsen <address@hidden>
 ;; Keywords: games
diff --git a/lisp/play/dissociate.el b/lisp/play/dissociate.el
index 0d980d6..c0180a2 100644
--- a/lisp/play/dissociate.el
+++ b/lisp/play/dissociate.el
@@ -1,6 +1,6 @@
 ;;; dissociate.el --- scramble text amusingly for Emacs
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: games
diff --git a/lisp/play/doctor.el b/lisp/play/doctor.el
index 13e6f8e..3da7267 100644
--- a/lisp/play/doctor.el
+++ b/lisp/play/doctor.el
@@ -1,6 +1,6 @@
 ;;; doctor.el --- psychological help for frustrated users
 
-;; Copyright (C) 1985, 1987, 1994, 1996, 2000-2014 Free Software
+;; Copyright (C) 1985, 1987, 1994, 1996, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/play/dunnet.el b/lisp/play/dunnet.el
index 3f4b8e8..2f4536c 100644
--- a/lisp/play/dunnet.el
+++ b/lisp/play/dunnet.el
@@ -1,6 +1,6 @@
 ;;; dunnet.el --- text adventure for Emacs
 
-;; Copyright (C) 1992-1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Ron Schnell <address@hidden>
 ;; Created: 25 Jul 1992
diff --git a/lisp/play/fortune.el b/lisp/play/fortune.el
index 9e56215..965f6a9 100644
--- a/lisp/play/fortune.el
+++ b/lisp/play/fortune.el
@@ -1,6 +1,6 @@
 ;;; fortune.el --- use fortune to create signatures
 
-;; Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Holger Schauer <address@hidden>
 ;; Keywords: games utils mail
diff --git a/lisp/play/gamegrid.el b/lisp/play/gamegrid.el
index 4f2be48..b4c3c59 100644
--- a/lisp/play/gamegrid.el
+++ b/lisp/play/gamegrid.el
@@ -1,6 +1,6 @@
 ;;; gamegrid.el --- library for implementing grid-based games on Emacs
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Glynn Clements <address@hidden>
 ;; Version: 1.02
@@ -486,13 +486,13 @@ FILE is created there."
         (not (zerop (logand (file-modes
                              (expand-file-name "update-game-score"
                                                exec-directory))
-                            #o4000)))))
+                            #o6000)))))
     (cond ((file-name-absolute-p file)
           (gamegrid-add-score-insecure file score))
          ((and gamegrid-shared-game-dir
                (file-exists-p (expand-file-name file 
shared-game-score-directory)))
-          ;; Use the setuid "update-game-score" program to update a
-          ;; system-wide score file.
+          ;; Use the setuid (or setgid) "update-game-score" program
+          ;; to update a system-wide score file.
           (gamegrid-add-score-with-update-game-score-1 file
            (expand-file-name file shared-game-score-directory) score))
          ;; Else: Add the score to a score file in the user's home
diff --git a/lisp/play/gametree.el b/lisp/play/gametree.el
index b71eb56..ef55015 100644
--- a/lisp/play/gametree.el
+++ b/lisp/play/gametree.el
@@ -1,6 +1,6 @@
 ;;; gametree.el --- manage game analysis trees in Emacs
 
-;; Copyright (C) 1997, 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Ian T Zimmerman <address@hidden>
 ;; Created: Wed Dec 10 07:41:46 PST 1997
diff --git a/lisp/play/gomoku.el b/lisp/play/gomoku.el
index 1cd1f81..8e6165f 100644
--- a/lisp/play/gomoku.el
+++ b/lisp/play/gomoku.el
@@ -1,6 +1,6 @@
 ;;; gomoku.el --- Gomoku game between you and Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1988, 1994, 1996, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1988, 1994, 1996, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Philippe Schnoebelen <address@hidden>
diff --git a/lisp/play/handwrite.el b/lisp/play/handwrite.el
index 51e0a0f..32ea663 100644
--- a/lisp/play/handwrite.el
+++ b/lisp/play/handwrite.el
@@ -1,6 +1,6 @@
 ;;; handwrite.el --- turns your emacs buffer into a handwritten document -*- 
coding: utf-8; -*-
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Danny Roozendaal (was: <address@hidden>)
 ;; Created: October 21 1996
diff --git a/lisp/play/landmark.el b/lisp/play/landmark.el
index c117594..2a64cdf 100644
--- a/lisp/play/landmark.el
+++ b/lisp/play/landmark.el
@@ -1,6 +1,6 @@
 ;;; landmark.el --- Neural-network robot that learns landmarks  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Terrence Brannon (was: <address@hidden>)
 ;; Created: December 16, 1996 - first release to usenet
diff --git a/lisp/play/life.el b/lisp/play/life.el
index a79fc9c..5bf8a9b 100644
--- a/lisp/play/life.el
+++ b/lisp/play/life.el
@@ -1,6 +1,6 @@
 ;;; life.el --- John Horton Conway's `Life' game for GNU Emacs
 
-;; Copyright (C) 1988, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Kyle Jones <kyleuunet.uu.net>
 ;; Maintainer: address@hidden
diff --git a/lisp/play/morse.el b/lisp/play/morse.el
index 5394d3f..5352341 100644
--- a/lisp/play/morse.el
+++ b/lisp/play/morse.el
@@ -1,6 +1,6 @@
 ;;; morse.el --- convert text to morse code and back             -*- coding: 
utf-8 -*-
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Rick Farnbach <address@hidden>
 ;; Keywords: games
@@ -146,7 +146,7 @@
   "NATO phonetic alphabet.
 See ''International Code of Signals'' (INTERCO), United States
 Edition, 1969 Edition (Revised 2003) available from National
-Geospatial-Intelligence Agency at http://www.nga.mil/";)
+Geospatial-Intelligence Agency at URL `http://www.nga.mil/'")
 
 ;;;###autoload
 (defun morse-region (beg end)
diff --git a/lisp/play/mpuz.el b/lisp/play/mpuz.el
index d3d55b3..9b90e2c 100644
--- a/lisp/play/mpuz.el
+++ b/lisp/play/mpuz.el
@@ -1,6 +1,6 @@
 ;;; mpuz.el --- multiplication puzzle for GNU Emacs
 
-;; Copyright (C) 1990, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Philippe Schnoebelen <address@hidden>
 ;; Overhauled: Daniel Pfeiffer <address@hidden>
diff --git a/lisp/play/pong.el b/lisp/play/pong.el
index 463d412..54d8d53 100644
--- a/lisp/play/pong.el
+++ b/lisp/play/pong.el
@@ -1,6 +1,6 @@
 ;;; pong.el --- classical implementation of pong
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Benjamin Drieu <address@hidden>
 ;; Keywords: games
diff --git a/lisp/play/snake.el b/lisp/play/snake.el
index d1874c6..d42ba44 100644
--- a/lisp/play/snake.el
+++ b/lisp/play/snake.el
@@ -1,6 +1,6 @@
 ;;; snake.el --- implementation of Snake for Emacs
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Glynn Clements <address@hidden>
 ;; Created: 1997-09-10
diff --git a/lisp/play/solitaire.el b/lisp/play/solitaire.el
index 884b126..4eda2eb 100644
--- a/lisp/play/solitaire.el
+++ b/lisp/play/solitaire.el
@@ -1,6 +1,6 @@
 ;;; solitaire.el --- game of solitaire in Emacs Lisp
 
-;; Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Jan Schormann <address@hidden>
 ;; Created: Fri afternoon, Jun  3,  1994
diff --git a/lisp/play/spook.el b/lisp/play/spook.el
index fdc3c69..02976c0 100644
--- a/lisp/play/spook.el
+++ b/lisp/play/spook.el
@@ -1,6 +1,6 @@
 ;;; spook.el --- spook phrase utility for overloading the NSA line eater
 
-;; Copyright (C) 1988, 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: games
diff --git a/lisp/play/tetris.el b/lisp/play/tetris.el
index 26fd73f..586d1d5 100644
--- a/lisp/play/tetris.el
+++ b/lisp/play/tetris.el
@@ -1,6 +1,6 @@
 ;;; tetris.el --- implementation of Tetris for Emacs
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Glynn Clements <address@hidden>
 ;; Version: 2.01
diff --git a/lisp/play/zone.el b/lisp/play/zone.el
index 17b6993..71037af 100644
--- a/lisp/play/zone.el
+++ b/lisp/play/zone.el
@@ -1,6 +1,6 @@
 ;;; zone.el --- idle display hacks
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Victor Zandy <address@hidden>
 ;; Maintainer: Thien-Thi Nguyen <address@hidden>
diff --git a/lisp/printing.el b/lisp/printing.el
index 101c8e2..86d569a 100644
--- a/lisp/printing.el
+++ b/lisp/printing.el
@@ -1,6 +1,6 @@
 ;;; printing.el --- printing utilities
 
-;; Copyright (C) 2000-2001, 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2001, 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/proced.el b/lisp/proced.el
index 188b8c3..69355ab 100644
--- a/lisp/proced.el
+++ b/lisp/proced.el
@@ -1,6 +1,6 @@
 ;;; proced.el --- operate on system processes like dired
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Roland Winkler <address@hidden>
 ;; Keywords: Processes, Unix
diff --git a/lisp/profiler.el b/lisp/profiler.el
index 6238e7d..2425d8c 100644
--- a/lisp/profiler.el
+++ b/lisp/profiler.el
@@ -1,6 +1,6 @@
 ;;; profiler.el --- UI and helper functions for Emacs's native profiler -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Tomohiro Matsuyama <address@hidden>
 ;; Keywords: lisp
diff --git a/lisp/progmodes/.gitignore b/lisp/progmodes/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/lisp/progmodes/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el
index 0d07d57..8afb92f 100644
--- a/lisp/progmodes/ada-mode.el
+++ b/lisp/progmodes/ada-mode.el
@@ -1,6 +1,6 @@
 ;;; ada-mode.el --- major-mode for editing Ada sources
 
-;; Copyright (C) 1994-1995, 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Rolf Ebert      <address@hidden>
 ;;      Markus Heritsch <address@hidden>
diff --git a/lisp/progmodes/ada-prj.el b/lisp/progmodes/ada-prj.el
index 585bfd0..4b1c1c2 100644
--- a/lisp/progmodes/ada-prj.el
+++ b/lisp/progmodes/ada-prj.el
@@ -1,6 +1,6 @@
 ;;; ada-prj.el --- GUI editing of project files for the ada-mode
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Emmanuel Briot <address@hidden>
 ;; Maintainer: Stephen Leake <address@hidden>
diff --git a/lisp/progmodes/ada-stmt.el b/lisp/progmodes/ada-stmt.el
index e35b582..302bbc9 100644
--- a/lisp/progmodes/ada-stmt.el
+++ b/lisp/progmodes/ada-stmt.el
@@ -1,6 +1,6 @@
 ;;; ada-stmt.el --- an extension to Ada mode for inserting statement templates
 
-;; Copyright (C) 1987, 1993-1994, 1996-2014 Free Software Foundation,
+;; Copyright (C) 1987, 1993-1994, 1996-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Authors: Daniel Pfeiffer
diff --git a/lisp/progmodes/ada-xref.el b/lisp/progmodes/ada-xref.el
index 4bc3745..6b611e6 100644
--- a/lisp/progmodes/ada-xref.el
+++ b/lisp/progmodes/ada-xref.el
@@ -1,6 +1,6 @@
 ;; ada-xref.el --- for lookup and completion in Ada mode
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Markus Heritsch <address@hidden>
 ;;      Rolf Ebert <address@hidden>
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el
index 9557fc8..28049e9 100644
--- a/lisp/progmodes/antlr-mode.el
+++ b/lisp/progmodes/antlr-mode.el
@@ -1,6 +1,6 @@
 ;;; antlr-mode.el --- major mode for ANTLR grammar files
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Christoph Wedler <address@hidden>
 ;; Keywords: languages, ANTLR, code generator
diff --git a/lisp/progmodes/asm-mode.el b/lisp/progmodes/asm-mode.el
index 3532b4a..7df6a5d 100644
--- a/lisp/progmodes/asm-mode.el
+++ b/lisp/progmodes/asm-mode.el
@@ -1,6 +1,6 @@
 ;;; asm-mode.el --- mode for editing assembler code
 
-;; Copyright (C) 1991, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/progmodes/autoconf.el b/lisp/progmodes/autoconf.el
index 7baf906..0bcc315 100644
--- a/lisp/progmodes/autoconf.el
+++ b/lisp/progmodes/autoconf.el
@@ -1,6 +1,6 @@
 ;;; autoconf.el --- mode for editing Autoconf configure.ac files
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: languages
diff --git a/lisp/progmodes/bat-mode.el b/lisp/progmodes/bat-mode.el
index 266c24a..2c5f192 100644
--- a/lisp/progmodes/bat-mode.el
+++ b/lisp/progmodes/bat-mode.el
@@ -1,6 +1,6 @@
 ;;; bat-mode.el --- Major mode for editing DOS/Windows scripts
 
-;; Copyright (C) 2003, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Arni Magnusson <address@hidden>
 ;; Keywords: languages
diff --git a/lisp/progmodes/bug-reference.el b/lisp/progmodes/bug-reference.el
index a4b374e..53d2958 100644
--- a/lisp/progmodes/bug-reference.el
+++ b/lisp/progmodes/bug-reference.el
@@ -1,6 +1,6 @@
 ;; bug-reference.el --- buttonize bug references
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <address@hidden>
 ;; Created: 21 Mar 2007
diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el
index 05d796c..4db310d 100644
--- a/lisp/progmodes/cc-align.el
+++ b/lisp/progmodes/cc-align.el
@@ -1,6 +1,6 @@
 ;;; cc-align.el --- custom indentation functions for CC Mode
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    2004- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -1229,6 +1229,18 @@ Works with: Any syntactic symbol."
     (back-to-indentation)
     (vector (current-column))))
 
+(defun c-lineup-respect-col-0 (langelem)
+  "If the current line starts at column 0, return [0].  Otherwise return nil.
+
+This can be used for comments (in conjunction with, say,
+`c-lineup-comment'), to keep comments already at column 0
+anchored there, but reindent other comments."
+  (save-excursion
+    (back-to-indentation)
+    (if (eq (current-column) 0)
+       [0]
+      nil)))
+
 
 (defun c-snug-do-while (syntax pos)
   "Dynamically calculate brace hanginess for do-while statements.
@@ -1333,4 +1345,8 @@ For other semicolon contexts, no determination is made."
 
 (cc-provide 'cc-align)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-align.el ends here
diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el
index d57d601..1ef80c8 100644
--- a/lisp/progmodes/cc-awk.el
+++ b/lisp/progmodes/cc-awk.el
@@ -1,6 +1,6 @@
 ;;; cc-awk.el --- AWK specific code within cc-mode.
 
-;; Copyright (C) 1988, 1994, 1996, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1988, 1994, 1996, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Alan Mackenzie <address@hidden> (originally based on awk-mode.el)
@@ -1146,4 +1146,8 @@ comment at the start of cc-engine.el for more info."
 
 (cc-provide 'cc-awk)                   ; Changed from 'awk-mode, ACM 2002/5/21
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; awk-mode.el ends here
diff --git a/lisp/progmodes/cc-bytecomp.el b/lisp/progmodes/cc-bytecomp.el
index 1936627..b63eeb4 100644
--- a/lisp/progmodes/cc-bytecomp.el
+++ b/lisp/progmodes/cc-bytecomp.el
@@ -1,6 +1,6 @@
 ;;; cc-bytecomp.el --- compile time setup for proper compilation
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author:     Martin Stjernholm
 ;; Maintainer: address@hidden
@@ -65,8 +65,7 @@
 ;; elsewhere in the load path.
 ;;
 ;; To suppress byte compiler warnings, use the macros
-;; `cc-bytecomp-defun', `cc-bytecomp-defvar',
-;; `cc-bytecomp-obsolete-fun', and `cc-bytecomp-obsolete-var'.
+;; `cc-bytecomp-defun' and `cc-bytecomp-defvar'.
 ;;
 ;; This file is not used at all after the package has been byte
 ;; compiled.  It is however necessary when running uncompiled.
@@ -78,19 +77,72 @@
 (defvar cc-bytecomp-original-functions nil)
 (defvar cc-bytecomp-original-properties nil)
 (defvar cc-bytecomp-loaded-files nil)
+
+(setq cc-bytecomp-unbound-variables nil)
+(setq cc-bytecomp-original-functions nil)
+(setq cc-bytecomp-original-properties nil)
+(setq cc-bytecomp-loaded-files nil)
+
 (defvar cc-bytecomp-environment-set nil)
 
 (defmacro cc-bytecomp-debug-msg (&rest args)
   ;;`(message ,@args)
   )
 
+(defun cc-bytecomp-compiling-or-loading ()
+  ;; Determine whether byte-compilation or loading is currently active,
+  ;; returning 'compiling, 'loading or nil.
+  ;; If both are active, the "innermost" activity counts.  Note that
+  ;; compilation can trigger loading (various `require' type forms)
+  ;; and loading can trigger compilation (the package manager does
+  ;; this).  We walk the lisp stack if necessary.
+  (cond
+   ((and load-in-progress
+        (boundp 'byte-compile-dest-file)
+        (stringp byte-compile-dest-file))
+    (let ((n 0) elt)
+      (while (and
+             (setq elt (backtrace-frame n))
+             (not (and (car elt)
+                       (memq (cadr elt)
+                             '(load require
+                               byte-compile-file byte-recompile-directory
+                               batch-byte-compile)))))
+       (setq n (1+ n)))
+      (cond
+       ((memq (cadr elt) '(load require))
+       'loading)
+       ((memq (cadr elt) '(byte-compile-file
+                          byte-recompile-directory
+                          batch-byte-compile))
+       'compiling)
+       (t                              ; Can't happen.
+       (message "cc-bytecomp-compiling-or-loading: System flags spuriously 
set")
+       nil))))
+   (load-in-progress
+    ;; Being loaded.
+    'loading)
+   ((and (boundp 'byte-compile-dest-file)
+        (stringp byte-compile-dest-file))
+    ;; Being compiled.
+    'compiling)
+   (t
+    ;; Being evaluated interactively.
+    nil)))
+
+(defsubst cc-bytecomp-is-compiling ()
+  "Return non-nil if eval'ed during compilation."
+  (eq (cc-bytecomp-compiling-or-loading) 'compiling))
+
+(defsubst cc-bytecomp-is-loading ()
+  "Return non-nil if eval'ed during loading.
+Nil will be returned if we're in a compilation triggered by the loading."
+  (eq (cc-bytecomp-compiling-or-loading) 'loading))
+
 (defun cc-bytecomp-setup-environment ()
   ;; Eval'ed during compilation to setup variables, functions etc
   ;; declared with `cc-bytecomp-defvar' et al.
-  (if (not load-in-progress)
-      ;; Look at `load-in-progress' to tell whether we're called
-      ;; directly in the file being compiled or just from some file
-      ;; being loaded during compilation.
+  (if (not (cc-bytecomp-is-loading))
       (let (p)
        (if cc-bytecomp-environment-set
            (error "Byte compilation environment already set - \
@@ -138,7 +190,7 @@ perhaps a `cc-bytecomp-restore-environment' is forgotten 
somewhere"))
 (defun cc-bytecomp-restore-environment ()
   ;; Eval'ed during compilation to restore variables, functions etc
   ;; declared with `cc-bytecomp-defvar' et al.
-  (if (not load-in-progress)
+  (if (not (cc-bytecomp-is-loading))
       (let (p)
        (setq p cc-bytecomp-unbound-variables)
        (while p
@@ -282,8 +334,7 @@ use within `eval-when-compile'."
   `(eval-when-compile
      (if (and (fboundp 'cc-bytecomp-is-compiling)
              (cc-bytecomp-is-compiling))
-        (if (or (not load-in-progress)
-                (not (featurep ,cc-part)))
+        (if (not (featurep ,cc-part))
             (cc-bytecomp-load (symbol-name ,cc-part)))
        (require ,cc-part))))
 
@@ -296,12 +347,6 @@ afterwards.  Don't use within `eval-when-compile'."
      (require ,feature)
      (eval-when-compile (cc-bytecomp-setup-environment))))
 
-(defun cc-bytecomp-is-compiling ()
-  "Return non-nil if eval'ed during compilation.  Don't use outside
-`eval-when-compile'."
-  (and (boundp 'byte-compile-dest-file)
-       (stringp byte-compile-dest-file)))
-
 (defmacro cc-bytecomp-defvar (var)
   "Binds the symbol as a variable during compilation of the file,
 to silence the byte compiler.  Don't use within `eval-when-compile'."
@@ -315,8 +360,7 @@ to silence the byte compiler.  Don't use within 
`eval-when-compile'."
              "cc-bytecomp-defvar: Saving %s (as unbound)" ',var)
             (setq cc-bytecomp-unbound-variables
                   (cons ',var cc-bytecomp-unbound-variables))))
-       (if (and (cc-bytecomp-is-compiling)
-               (not load-in-progress))
+       (if (cc-bytecomp-is-compiling)
           (progn
             (defvar ,var)
             (set ',var (intern (concat "cc-bytecomp-ignore-var:"
@@ -344,8 +388,7 @@ at compile time, e.g. for macros and inline functions."
             (setq cc-bytecomp-original-functions
                   (cons (list ',fun nil 'unbound)
                         cc-bytecomp-original-functions))))
-       (if (and (cc-bytecomp-is-compiling)
-               (not load-in-progress))
+       (if (cc-bytecomp-is-compiling)
           (progn
             (fset ',fun (intern (concat "cc-bytecomp-ignore-fun:"
                                         (symbol-name ',fun))))
@@ -370,33 +413,6 @@ the file.  Don't use outside `eval-when-compile'."
       "cc-bytecomp-put: Bound property %s for %s to %s"
       ,propname ,symbol ,value)))
 
-(defmacro cc-bytecomp-obsolete-var (symbol)
-  "Suppress warnings that the given symbol is an obsolete variable.
-Don't use within `eval-when-compile'."
-  `(eval-when-compile
-     (if (get ',symbol 'byte-obsolete-variable)
-        (cc-bytecomp-put ',symbol 'byte-obsolete-variable nil)
-       ;; This avoids a superfluous compiler warning
-       ;; about calling `get' for effect.
-       t)))
-
-(defun cc-bytecomp-ignore-obsolete (form)
-  ;; Wraps a call to `byte-compile-obsolete' that suppresses the warning.
-  (let ((byte-compile-warnings byte-compile-warnings))
-    (byte-compile-disable-warning 'obsolete)
-    (byte-compile-obsolete form)))
-
-(defmacro cc-bytecomp-obsolete-fun (symbol)
-  "Suppress warnings that the given symbol is an obsolete function.
-Don't use within `eval-when-compile'."
-  `(eval-when-compile
-     (if (eq (get ',symbol 'byte-compile) 'byte-compile-obsolete)
-        (cc-bytecomp-put ',symbol 'byte-compile
-                         'cc-bytecomp-ignore-obsolete)
-       ;; This avoids a superfluous compiler warning
-       ;; about calling `get' for effect.
-       t)))
-
 (defmacro cc-bytecomp-boundp (symbol)
   "Return non-nil if the given symbol is bound as a variable outside
 the compilation.  This is the same as using `boundp' but additionally
@@ -423,4 +439,8 @@ exclude any functions that have been bound during 
compilation with
 
 (provide 'cc-bytecomp)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-bytecomp.el ends here
diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index 5fa3b25..68075f3 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -1,6 +1,6 @@
 ;;; cc-cmds.el --- user level commands for CC Mode
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -258,9 +258,11 @@ With universal argument, inserts the analysis as a comment 
on that line."
                         "a" "")
                     (if c-hungry-delete-key "h" "")
                     (if (and
-                         ;; subword might not be loaded.
-                         (boundp 'subword-mode)
-                         (symbol-value 'subword-mode))
+                         ;; (cc-)subword might not be loaded.
+                         (boundp 'c-subword-mode)
+                         (symbol-value 'c-subword-mode))
+                         ;; FIXME: subword-mode already comes with its
+                         ;; own lighter!
                         "w"
                       "")))
         ;; FIXME: Derived modes might want to use something else
@@ -1304,20 +1306,43 @@ keyword on the line, the keyword is not inserted inside 
a literal, and
 (declare-function subword-forward "subword" (&optional arg))
 (declare-function subword-backward "subword" (&optional arg))
 
+(cond
+ ((and (fboundp 'subword-mode) (not (fboundp 'c-subword-mode)))
+  ;; Recent Emacsen come with their own subword support.  Use that.
+  (define-obsolete-function-alias 'c-subword-mode 'subword-mode "24.3")
+  (define-obsolete-variable-alias 'c-subword-mode 'subword-mode "24.3"))
+ (t
+  ;; Autoload directive for emacsen that doesn't have an older CC Mode
+  ;; version in the dist.
+  (autoload 'c-subword-mode "cc-subword"
+    "Mode enabling subword movement and editing keys." t)))
+
 ;; "nomenclature" functions + c-scope-operator.
 (defun c-forward-into-nomenclature (&optional arg)
   "Compatibility alias for `c-forward-subword'."
   (interactive "p")
-  (require 'subword)
-  (subword-forward arg))
-(make-obsolete 'c-forward-into-nomenclature 'subword-forward "23.2")
+  (if (fboundp 'subword-mode)
+      (progn
+        (require 'subword)
+        (subword-forward arg))
+    (require 'cc-subword)
+    (c-forward-subword arg)))
+(make-obsolete 'c-forward-into-nomenclature
+               (if (fboundp 'subword-mode) 'subword-forward 'c-forward-subword)
+               "23.2")
 
 (defun c-backward-into-nomenclature (&optional arg)
   "Compatibility alias for `c-backward-subword'."
   (interactive "p")
-  (require 'subword)
-  (subword-backward arg))
-(make-obsolete 'c-backward-into-nomenclature 'subword-backward "23.2")
+  (if (fboundp 'subword-mode)
+      (progn
+        (require 'subword)
+        (subword-backward arg))
+    (require 'cc-subword)
+    (c-backward-subword arg)))
+(make-obsolete
+ 'c-backward-into-nomenclature
+ (if (fboundp 'subword-mode) 'subword-backward 'c-backward-subword) "23.2")
 
 (defun c-scope-operator ()
   "Insert a double colon scope operator at point.
@@ -1417,12 +1442,15 @@ No indentation or other \"electric\" behavior is 
performed."
              (car (c-beginning-of-decl-1
                    ;; NOTE: If we're in a K&R region, this might be the start
                    ;; of a parameter declaration, not the actual function.
+                   ;; It might also leave us at a label or "label" like
+                   ;; "private:".
                    (and least-enclosing ; LIMIT for c-b-of-decl-1
                         (c-safe-position least-enclosing paren-state)))))
 
        ;; Has the declaration we've gone back to got braces?
-       (setq brace-decl-p
-             (save-excursion
+       (or (eq decl-result 'label)
+           (setq brace-decl-p
+                 (save-excursion
                    (and (c-syntactic-re-search-forward "[;{]" nil t t)
                         (or (eq (char-before) ?\{)
                             (and c-recognize-knr-p
@@ -1430,10 +1458,11 @@ No indentation or other \"electric\" behavior is 
performed."
                                  ;; ';' in a K&R argdecl.  In
                                  ;; that case the declaration
                                  ;; should contain a block.
-                                 (c-in-knr-argdecl))))))
+                                 (c-in-knr-argdecl)))))))
 
        (cond
-        ((= (point) kluge-start)       ; might be BOB or unbalanced parens.
+        ((or (eq decl-result 'label)   ; e.g. "private:" or invalid syntax.
+             (= (point) kluge-start))  ; might be BOB or unbalanced parens.
          'outwith-function)
         ((eq decl-result 'same)
          (if brace-decl-p
@@ -1581,7 +1610,7 @@ defun."
 
   (or (not (eq this-command 'c-beginning-of-defun))
       (eq last-command 'c-beginning-of-defun)
-      (and transient-mark-mode mark-active)
+      (c-region-is-active-p)
       (push-mark))
 
   (c-save-buffer-state
@@ -1705,7 +1734,7 @@ the open-parenthesis that starts a defun; see 
`beginning-of-defun'."
 
   (or (not (eq this-command 'c-end-of-defun))
       (eq last-command 'c-end-of-defun)
-      (and transient-mark-mode mark-active)
+      (c-region-is-active-p)
       (push-mark))
 
   (c-save-buffer-state
@@ -1809,7 +1838,7 @@ with a brace block."
              (looking-at c-symbol-key))
            (match-string-no-properties 0))
 
-          ((looking-at "DEFUN\\_>")
+          ((looking-at "DEFUN\\s-*(") ;"DEFUN\\_>") think of XEmacs!
            ;; DEFUN ("file-name-directory", Ffile_name_directory, 
Sfile_name_directory, ...) ==> Ffile_name_directory
            ;; DEFUN(POSIX::STREAM-LOCK, stream lockp &key BLOCK SHARED START 
LENGTH) ==> POSIX::STREAM-LOCK
            (down-list 1)
@@ -2002,7 +2031,7 @@ function does not require the declaration to contain a 
brace block."
                   (eq last-command 'c-mark-function)))
             (push-mark-p (and (eq this-command 'c-mark-function)
                               (not extend-region-p)
-                              (not (and transient-mark-mode mark-active)))))
+                              (not (c-region-is-active-p)))))
        (if push-mark-p (push-mark (point)))
        (if extend-region-p
            (progn
@@ -3339,7 +3368,7 @@ Otherwise, with a prefix argument, rigidly reindent the 
expression
 starting on the current line.
 Otherwise reindent just the current line."
   (interactive
-   (list current-prefix-arg (use-region-p)))
+   (list current-prefix-arg (c-region-is-active-p)))
   (if region
       (c-indent-region (region-beginning) (region-end))
     (c-indent-command arg)))
@@ -4728,4 +4757,8 @@ normally bound to C-o.  See `c-context-line-break' for 
the details."
 
 (cc-provide 'cc-cmds)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-cmds.el ends here
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index 1d8b8ab..d0beab1 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -1,6 +1,6 @@
 ;;; cc-defs.el --- compile time definitions for CC Mode
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -64,15 +64,14 @@
          (not (fboundp 'push)))
       (cc-load "cc-fix")))
 
-; (eval-after-load "font-lock"  ; 2006-07-09.  font-lock is now preloaded
-;   '
-(if (and (featurep 'xemacs)    ; There is now (2005/12) code in GNU Emacs CVS
-                               ; to make the call to f-l-c-k throw an error.
-        (not (featurep 'cc-fix)) ; only load the file once.
-        (let (font-lock-keywords)
-          (font-lock-compile-keywords '("\\<\\>"))
-          font-lock-keywords))     ; did the previous call foul this up?
-    (load "cc-fix")) ;)
+(when (featurep 'xemacs) ; There is now (2005/12) code in GNU Emacs CVS
+                        ; to make the call to f-l-c-k throw an error.
+  (eval-after-load "font-lock"
+    '(if (and (not (featurep 'cc-fix)) ; only load the file once.
+             (let (font-lock-keywords)
+               (font-lock-compile-keywords '("\\<\\>"))
+               font-lock-keywords)) ; did the previous call foul this up?
+         (load "cc-fix"))))
 
 ;; The above takes care of the delayed loading, but this is necessary
 ;; to ensure correct byte compilation.
@@ -94,7 +93,7 @@
 
 ;;; Variables also used at compile time.
 
-(defconst c-version "5.32.5"
+(defconst c-version "5.33"
   "CC Mode version number.")
 
 (defconst c-version-sym (intern c-version))
@@ -336,16 +335,42 @@ to it is returned.  This function does not modify the 
point or the mark."
          (t (error "Unknown buffer position requested: %s" position))))
        (point))))
 
+(eval-and-compile
+  ;; Constant to decide at compilation time whether to use category
+  ;; properties.  Currently (2010-03) they're available only on GNU Emacs.
+  (defconst c-use-category
+    (with-temp-buffer
+      (let ((parse-sexp-lookup-properties t)
+           (lookup-syntax-properties t))
+        (set-syntax-table (make-syntax-table))
+        (insert "<()>")
+        (put-text-property (point-min) (1+ (point-min))
+                          'category 'c-<-as-paren-syntax)
+        (put-text-property (+ 3 (point-min)) (+ 4 (point-min))
+                          'category 'c->-as-paren-syntax)
+        (goto-char (point-min))
+        (forward-sexp)
+        (= (point) (+ 4 (point-min)))))))
+
+(defvar c-use-extents)
+
+(defmacro c-next-single-property-change (position prop &optional object limit)
+  ;; See the doc string for either of the defuns expanded to.
+  (if (and c-use-extents
+          (fboundp 'next-single-char-property-change))
+      ;; XEmacs >= 2005-01-25
+      `(next-single-char-property-change ,position ,prop ,object ,limit)
+    ;; Emacs and earlier XEmacs
+    `(next-single-property-change ,position ,prop ,object ,limit)))
+
 (defmacro c-region-is-active-p ()
   ;; Return t when the region is active.  The determination of region
   ;; activeness is different in both Emacs and XEmacs.
-  ;; FIXME? Emacs has region-active-p since 23.1, so maybe this test
-  ;; should be updated.
-  (if (cc-bytecomp-boundp 'mark-active)
-      ;; Emacs.
-      'mark-active
-    ;; XEmacs.
-    '(region-active-p)))
+  (if (cc-bytecomp-fboundp 'region-active-p)
+      ;; XEmacs.
+      '(region-active-p)
+    ;; Old Emacs.
+    'mark-active))
 
 (defmacro c-set-region-active (activate)
   ;; Activate the region if ACTIVE is non-nil, deactivate it
@@ -1061,8 +1086,8 @@ nil; point is then left undefined."
      (while
         (and
          (< place ,(or limit '(point-max)))
-         (not (equal (get-text-property place ,property) ,value)))
-       (setq place (next-single-property-change
+         (not (equal (c-get-char-property place ,property) ,value)))
+       (setq place (c-next-single-property-change
                    place ,property nil ,(or limit '(point-max)))))
      (when (< place ,(or limit '(point-max)))
        (goto-char place)
@@ -1080,10 +1105,15 @@ point is then left undefined."
      (while
         (and
          (> place ,(or limit '(point-min)))
-         (not (equal (get-text-property (1- place) ,property) ,value)))
-       (setq place (previous-single-property-change
+         (not (equal (c-get-char-property (1- place) ,property) ,value)))
+       (setq place (,(if (and c-use-extents
+                             (fboundp 'previous-single-char-property-change))
+                        ;; XEmacs > 2005-01-25.
+                        'previous-single-char-property-change
+                      ;; Emacs and earlier XEmacs.
+                      'previous-single-property-change)
                    place ,property nil ,(or limit '(point-min)))))
-     (when (> place ,(or limit '(point-max)))
+     (when (> place ,(or limit '(point-min)))
        (goto-char place)
        (search-backward-regexp ".")    ; to set the match-data.
        (point))))
@@ -1100,9 +1130,9 @@ been put there by c-put-char-property.  POINT remains 
unchanged."
              (and
               (< place to)
               (not (equal (get-text-property place property) value)))
-           (setq place (next-single-property-change place property nil to)))
+           (setq place (c-next-single-property-change place property nil to)))
          (< place to))
-      (setq end-place (next-single-property-change place property nil to))
+      (setq end-place (c-next-single-property-change place property nil to))
       (remove-text-properties place end-place (cons property nil))
       ;; Do we have to do anything with stickiness here?
       (setq place end-place))))
@@ -1119,7 +1149,7 @@ been put there by c-put-char-property.  POINT remains 
unchanged."
                        (if (equal (extent-property ext -property-) val)
                            (delete-extent ext)))
                      nil ,from ,to ,value nil -property-))
-  ;; Gnu Emacs
+    ;; GNU Emacs
     `(c-clear-char-property-with-value-function ,from ,to ,property ,value)))
 
 ;; Macros to put overlays (Emacs) or extents (XEmacs) on buffer text.
@@ -1203,36 +1233,43 @@ been put there by c-put-char-property.  POINT remains 
unchanged."
     (if (< (point) start)
        (goto-char (point-max)))))
 
-(defsubst c-mark-<-as-paren (pos)
+(defmacro c-mark-<-as-paren (pos)
   ;; Mark the "<" character at POS as a template opener using the
-  ;; `syntax-table' property via the `category' property.
+  ;; `syntax-table' property either directly (XEmacs) or via a `category'
+  ;; property (GNU Emacs).
   ;;
   ;; This function does a hidden buffer change.  Note that we use
   ;; indirection through the `category' text property.  This allows us to
   ;; toggle the property in all template brackets simultaneously and
   ;; cheaply.  We use this, for instance, in `c-parse-state'.
-  (c-put-char-property pos 'category 'c-<-as-paren-syntax))
+  (if c-use-category
+      `(c-put-char-property ,pos 'category 'c-<-as-paren-syntax)
+    `(c-put-char-property ,pos 'syntax-table c-<-as-paren-syntax)))
+
 
-(defsubst c-mark->-as-paren (pos)
+(defmacro c-mark->-as-paren (pos)
   ;; Mark the ">" character at POS as an sexp list closer using the
-  ;; syntax-table property.
+  ;; `syntax-table' property either directly (XEmacs) or via a `category'
+  ;; property (GNU Emacs).
   ;;
   ;; This function does a hidden buffer change.  Note that we use
   ;; indirection through the `category' text property.  This allows us to
   ;; toggle the property in all template brackets simultaneously and
   ;; cheaply.  We use this, for instance, in `c-parse-state'.
-  (c-put-char-property pos 'category 'c->-as-paren-syntax))
-
-(defsubst c-unmark-<->-as-paren (pos)
-  ;; Unmark the "<" or "<" character at POS as an sexp list opener using
-  ;; the syntax-table property indirectly through the `category' text
-  ;; property.
+  (if c-use-category
+      `(c-put-char-property ,pos 'category 'c->-as-paren-syntax)
+    `(c-put-char-property ,pos 'syntax-table c->-as-paren-syntax)))
+
+(defmacro c-unmark-<->-as-paren (pos)
+  ;; Unmark the "<" or "<" character at POS as an sexp list opener using the
+  ;; `syntax-table' property either directly or indirectly through a
+  ;; `category' text property.
   ;;
-  ;; This function does a hidden buffer change.  Note that we use
+  ;; This function does a hidden buffer change.  Note that we try to use
   ;; indirection through the `category' text property.  This allows us to
   ;; toggle the property in all template brackets simultaneously and
   ;; cheaply.  We use this, for instance, in `c-parse-state'.
-  (c-clear-char-property pos 'category))
+  `(c-clear-char-property ,pos ,(if c-use-category ''category ''syntax-table)))
 
 (defsubst c-suppress-<->-as-parens ()
   ;; Suppress the syntactic effect of all marked < and > as parens.  Note
@@ -1313,6 +1350,124 @@ been put there by c-put-char-property.  POINT remains 
unchanged."
         (widen)
         (c-set-cpp-delimiters ,beg ,end)))))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; The following macros are to be used only in `c-parse-state' and its
+;; subroutines.  Their main purpose is to simplify the handling of C++/Java
+;; template delimiters and CPP macros.  In GNU Emacs, this is done slickly by
+;; the judicious use of 'category properties.  These don't exist in XEmacs.
+;;
+;; Note: in the following macros, there is no special handling for parentheses
+;; inside CPP constructs.  That is because CPPs are always syntactically
+;; balanced, thanks to `c-neutralize-CPP-line' in cc-mode.el.
+(defmacro c-sc-scan-lists-no-category+1+1 (from)
+  ;; Do a (scan-lists FROM 1 1).  Any finishing position which either (i) is
+  ;; determined by and angle bracket; or (ii) is inside a macro whose start
+  ;; isn't POINT-MACRO-START doesn't count as a finishing position.
+  `(let ((here (point))
+        (pos (scan-lists ,from 1 1)))
+     (while (eq (char-before pos) ?>)
+       (setq pos (scan-lists pos 1 1)))
+     pos))
+
+(defmacro c-sc-scan-lists-no-category+1-1 (from)
+  ;; Do a (scan-lists FROM 1 -1).  Any finishing position which either (i) is
+  ;; determined by an angle bracket; or (ii) is inside a macro whose start
+  ;; isn't POINT-MACRO-START doesn't count as a finishing position.
+  `(let ((here (point))
+        (pos (scan-lists ,from 1 -1)))
+     (while (eq (char-before pos) ?<)
+       (setq pos (scan-lists pos 1 1))
+       (setq pos (scan-lists pos 1 -1)))
+     pos))
+
+(defmacro c-sc-scan-lists-no-category-1+1 (from)
+  ;; Do a (scan-lists FROM -1 1).  Any finishing position which either (i) is
+  ;; determined by and angle bracket; or (ii) is inside a macro whose start
+  ;; isn't POINT-MACRO-START doesn't count as a finishing position.
+  `(let ((here (point))
+        (pos (scan-lists ,from -1 1)))
+     (while (eq (char-after pos) ?<)
+       (setq pos (scan-lists pos -1 1)))
+     pos))
+
+(defmacro c-sc-scan-lists-no-category-1-1 (from)
+  ;; Do a (scan-lists FROM -1 -1).  Any finishing position which either (i) is
+  ;; determined by and angle bracket; or (ii) is inside a macro whose start
+  ;; isn't POINT-MACRO-START doesn't count as a finishing position.
+  `(let ((here (point))
+        (pos (scan-lists ,from -1 -1)))
+     (while (eq (char-after pos) ?>)
+       (setq pos (scan-lists pos -1 1))
+       (setq pos (scan-lists pos -1 -1)))
+     pos))
+
+(defmacro c-sc-scan-lists (from count depth)
+  (if c-use-category
+      `(scan-lists ,from ,count ,depth)
+    (cond
+     ((and (eq count 1) (eq depth 1))
+      `(c-sc-scan-lists-no-category+1+1 ,from))
+     ((and (eq count 1) (eq depth -1))
+      `(c-sc-scan-lists-no-category+1-1 ,from))
+     ((and (eq count -1) (eq depth 1))
+      `(c-sc-scan-lists-no-category-1+1 ,from))
+     ((and (eq count -1) (eq depth -1))
+      `(c-sc-scan-lists-no-category-1-1 ,from))
+     (t (error "Invalid parameter(s) to c-sc-scan-lists")))))
+
+
+(defun c-sc-parse-partial-sexp-no-category (from to targetdepth stopbefore
+                                                oldstate)
+  ;; Do a parse-partial-sexp using the supplied arguments, disregarding
+  ;; template/generic delimiters < > and disregarding macros other than the
+  ;; one at POINT-MACRO-START.
+  ;;
+  ;; NOTE that STOPBEFORE must be nil.  TARGETDEPTH should be one less than
+  ;; the depth in OLDSTATE.  This function is thus a SPECIAL PURPOSE variation
+  ;; on parse-partial-sexp, designed for calling from
+  ;; `c-remove-stale-state-cache'.
+  ;;
+  ;; Any finishing position which is determined by an angle bracket delimiter
+  ;; doesn't count as a finishing position.
+  ;;
+  ;; Note there is no special handling of CPP constructs here, since these are
+  ;; always syntactically balanced (thanks to `c-neutralize-CPP-line').
+  (let ((state
+        (parse-partial-sexp from to targetdepth stopbefore oldstate)))
+    (while
+       (and (< (point) to)
+            ;; We must have hit targetdepth.
+            (or (eq (char-before) ?<)
+                (eq (char-before) ?>)))
+      (setcar state
+             (if (memq (char-before) '(?> ?\) ?\} ?\]))
+                 (1+ (car state))
+               (1- (car state))))
+      (setq state
+           (parse-partial-sexp (point) to targetdepth stopbefore oldstate)))
+    state))
+
+(defmacro c-sc-parse-partial-sexp (from to &optional targetdepth stopbefore
+                                       oldstate)
+  (if c-use-category
+      `(parse-partial-sexp ,from ,to ,targetdepth ,stopbefore ,oldstate)
+    `(c-sc-parse-partial-sexp-no-category ,from ,to ,targetdepth ,stopbefore
+                                         ,oldstate)))
+
+
+(defvar c-emacs-features)
+
+(defmacro c-looking-at-non-alphnumspace ()
+  "Are we looking at a character which isn't alphanumeric or space?"
+  (if (memq 'gen-comment-delim c-emacs-features)
+      `(looking-at
+"\\([;#]\\|\\'\\|\\s(\\|\\s)\\|\\s\"\\|\\s\\\\|\\s$\\|\\s<\\|\\s>\\|\\s!\\)")
+    `(or (looking-at
+"\\([;#]\\|\\'\\|\\s(\\|\\s)\\|\\s\"\\|\\s\\\\|\\s$\\|\\s<\\|\\s>\\)"
+        (let ((prop (c-get-char-property (point) 'syntax-table)))
+          (eq prop '(14)))))))         ; '(14) is generic comment delimiter.
+
+
 (defsubst c-intersect-lists (list alist)
   ;; return the element of ALIST that matches the first element found
   ;; in LIST.  Uses assq.
@@ -1614,6 +1769,9 @@ non-nil, a caret is prepended to invert the set."
                               (not (end-of-defun))))
          (setq list (cons 'argumentative-bod-function list))))
 
+    ;; Record whether the `category' text property works.
+    (if c-use-category (setq list (cons 'category-properties list)))
+
     (let ((buf (generate-new-buffer " test"))
          parse-sexp-lookup-properties
          parse-sexp-ignore-comments
@@ -1719,6 +1877,8 @@ might be present:
                    in the buffer with the 'syntax-table property.  It's
                    always set - CC Mode no longer works in emacsen without
                    this feature.
+'category-properties Syntax routines can add a level of indirection to text
+                   properties using the 'category property.
 'gen-comment-delim  Generic comment delimiters work
                    (i.e. the syntax class `!').
 'gen-string-delim   Generic string delimiters work
@@ -1823,19 +1983,22 @@ system."
 
 (defvar c-lang-const-expansion nil)
 
+;; Ugly hack to pull in the definition of `cc-bytecomp-compiling-or-loading`
+;; from cc-bytecomp to make it available at loadtime.  This is the same
+;; mechanism used in cc-mode.el for `c-populate-syntax-table'.
+(defalias 'cc-bytecomp-compiling-or-loading
+  (cc-eval-when-compile
+    (let ((f (symbol-function 'cc-bytecomp-compiling-or-loading)))
+      (if (byte-code-function-p f) f (byte-compile f)))))
+
 (defsubst c-get-current-file ()
   ;; Return the base name of the current file.
-  (let ((file (cond
-              (load-in-progress
-               ;; Being loaded.
-               load-file-name)
-              ((and (boundp 'byte-compile-dest-file)
-                    (stringp byte-compile-dest-file))
-               ;; Being compiled.
-               byte-compile-dest-file)
-              (t
-               ;; Being evaluated interactively.
-               (buffer-file-name)))))
+  (let* ((c-or-l (cc-bytecomp-compiling-or-loading))
+        (file
+         (cond
+          ((eq c-or-l 'loading) load-file-name)
+          ((eq c-or-l 'compiling) byte-compile-dest-file)
+          ((null c-or-l) (buffer-file-name)))))
     (and file
         (file-name-sans-extension
          (file-name-nondirectory file)))))
@@ -1902,6 +2065,9 @@ constant.  A file is identified by its base name."
         ;; language constant source definitions.)
         (c-lang-const-expansion 'call)
         (c-langs-are-parametric t)
+        (file (intern
+               (or (c-get-current-file)
+                   (error "`c-lang-defconst' can only be used in a file"))))
         bindings
         pre-files)
 
@@ -1961,9 +2127,14 @@ constant.  A file is identified by its base name."
     ;; definitions for this symbol, to make sure the order in the
     ;; `source' property is correct even when files are loaded out of
     ;; order.
-    (setq pre-files (nreverse
-                    ;; Reverse to get the right load order.
-                    (mapcar 'car (get sym 'source))))
+    (setq pre-files (mapcar 'car (get sym 'source)))
+    (if (memq file pre-files)
+       ;; This can happen when the source file (e.g. cc-langs.el) is first
+       ;; loaded as source, setting a 'source property entry, and then itself
+       ;; being compiled.
+       (setq pre-files (cdr (memq file pre-files))))
+    ;; Reverse to get the right load order.
+    (setq pre-files (nreverse pre-files))
 
     `(eval-and-compile
        (c-define-lang-constant ',name ,bindings
@@ -2073,9 +2244,7 @@ quoted."
         (if (or (eq c-lang-const-expansion 'call)
                 (and (not c-lang-const-expansion)
                      (not mode))
-                load-in-progress
-                (not (boundp 'byte-compile-dest-file))
-                (not (stringp byte-compile-dest-file)))
+               (not (cc-bytecomp-is-compiling)))
             ;; Either a straight call is requested in the context, or
             ;; we're in an "uncontrolled" context and got no language,
             ;; or we're not being byte compiled so the compile time
@@ -2277,4 +2446,8 @@ fallback definition for all modes, to break the cycle).")
 
 (cc-provide 'cc-defs)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-defs.el ends here
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index e596f07..328e0f7 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -1,6 +1,6 @@
 ;;; cc-engine.el --- core syntax guessing engine for CC mode -*- coding: utf-8 
-*-
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    2001- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -534,7 +534,7 @@ comment at the start of cc-engine.el for more info."
     (while (progn
             (when (eq (get-text-property (point) 'c-type) value)
               (c-clear-char-property (point) 'c-type))
-            (goto-char (next-single-property-change (point) 'c-type nil to))
+            (goto-char (c-next-single-property-change (point) 'c-type nil to))
             (< (point) to)))))
 
 
@@ -1723,7 +1723,7 @@ comment at the start of cc-engine.el for more info."
          ;; the cases when the marked rung is complete.
          ;; (`next-single-property-change' is certain to move at least one
          ;; step forward.)
-         (setq rung-pos (1- (next-single-property-change
+         (setq rung-pos (1- (c-next-single-property-change
                              rung-is-marked 'c-is-sws nil rung-end-pos)))
        ;; Got no marked rung here.  Since the simple ws might have started
        ;; inside a line comment or cpp directive we must set `rung-pos' as
@@ -1739,7 +1739,7 @@ comment at the start of cc-engine.el for more info."
 
                  ;; The following search is the main reason that `c-in-sws'
                  ;; and `c-is-sws' aren't combined to one property.
-                 (goto-char (next-single-property-change
+                 (goto-char (c-next-single-property-change
                              (point) 'c-in-sws nil (point-max)))
                  (unless (get-text-property (point) 'c-is-sws)
                    ;; If the `c-in-sws' region extended past the last
@@ -1861,7 +1861,7 @@ comment at the start of cc-engine.el for more info."
          ;; possible since we can't be in the ending ws of a line comment or
          ;; cpp directive now.
          (if (setq rung-is-marked next-rung-is-marked)
-             (setq rung-pos (1- (next-single-property-change
+             (setq rung-pos (1- (c-next-single-property-change
                                  rung-is-marked 'c-is-sws nil rung-end-pos)))
            (setq rung-pos next-rung-pos))
          (setq safe-start t)))
@@ -1939,7 +1939,7 @@ comment at the start of cc-engine.el for more info."
                  (unless (get-text-property (point) 'c-is-sws)
                    ;; If the `c-in-sws' region extended past the first
                    ;; `c-is-sws' char we have to go forward a bit.
-                   (goto-char (next-single-property-change
+                   (goto-char (c-next-single-property-change
                                (point) 'c-is-sws)))
 
                  (c-debug-sws-msg
@@ -2240,8 +2240,7 @@ comment at the start of cc-engine.el for more info."
        ((and (not not-in-delimiter)    ; inside a comment starter
             (not (bobp))
             (progn (backward-char)
-                   (and (not (and (memq 'category-properties c-emacs-features)
-                                  (looking-at "\\s!")))
+                   (and (not (looking-at "\\s!"))
                         (looking-at c-comment-start-regexp))))
        (setq ty (if (looking-at c-block-comment-start-regexp) 'c 'c++)
              co-st (point))
@@ -2548,7 +2547,7 @@ comment at the start of cc-engine.el for more info."
        (setq pos here+)
        (c-safe
          (while
-             (setq ren+1 (scan-lists pos 1 1)) ; might signal
+             (setq ren+1 (c-sc-scan-lists pos 1 1)) ; might signal
            (setq lonely-rens (cons ren+1 lonely-rens)
                  pos ren+1)))))
 
@@ -2560,7 +2559,7 @@ comment at the start of cc-engine.el for more info."
       (c-safe
        (while
            (and lonely-rens            ; actual values aren't used.
-                (setq pa (scan-lists pos -1 1)))
+                (setq pa (c-sc-scan-lists pos -1 1)))
          (setq pos pa)
          (setq lonely-rens (cdr lonely-rens)))))
     pos))
@@ -2716,8 +2715,8 @@ comment at the start of cc-engine.el for more info."
              (progn
                (c-safe
                  (while
-                     (and (setq ce (scan-lists bra -1 -1)) ; back past )/]/}; 
might signal
-                          (setq bra (scan-lists ce -1 1)) ; back past (/[/{; 
might signal
+                     (and (setq ce (c-sc-scan-lists bra -1 -1)) ; back past 
)/]/}; might signal
+                          (setq bra (c-sc-scan-lists ce -1 1)) ; back past 
(/[/{; might signal
                           (or (> bra here) ;(> ce here)
                               (and
                                (< ce here)
@@ -2769,7 +2768,7 @@ comment at the start of cc-engine.el for more info."
                     (not (c-beginning-of-macro))))
          (setq c-state-cache
                (cons (cons (1- bra+1)
-                           (scan-lists bra+1 1 1))
+                           (c-sc-scan-lists bra+1 1 1))
                      (if (consp (car c-state-cache))
                          (cdr c-state-cache)
                        c-state-cache)))
@@ -2819,9 +2818,9 @@ comment at the start of cc-engine.el for more info."
              ;; are no more b/b/p's to scan.
              (c-safe
                (while t
-                 (setq pa+1 (scan-lists ren+1 1 -1) ; Into (/{/[; might signal
+                 (setq pa+1 (c-sc-scan-lists ren+1 1 -1) ; Into (/{/[; might 
signal
                        paren+1s (cons pa+1 paren+1s))
-                 (setq ren+1 (scan-lists pa+1 1 1)) ; Out of )/}/]; might 
signal
+                 (setq ren+1 (c-sc-scan-lists pa+1 1 1)) ; Out of )/}/]; might 
signal
                  (if (and (eq (char-before pa+1) ?{)) ; Check for a macro 
later.
                      (setq bra+1 pa+1))
                  (setcar paren+1s ren+1)))
@@ -2845,7 +2844,7 @@ comment at the start of cc-engine.el for more info."
                ;; finished - we just need to check for having found an
                ;; unmatched )/}/], which we ignore.  Such a )/}/] can't be in a
                ;; macro, due the action of `c-neutralize-syntax-in-CPP'.
-               (c-safe (setq ren+1 (scan-lists ren+1 1 1)))))) ; acts as loop 
control.
+               (c-safe (setq ren+1 (c-sc-scan-lists ren+1 1 1)))))) ; acts as 
loop control.
 
        ;; Record the final, innermost, brace-pair if there is one.
        (c-state-push-any-brace-pair bra+1 macro-start-or-here)
@@ -2948,7 +2947,7 @@ comment at the start of cc-engine.el for more info."
        ;; The next loop jumps forward out of a nested level of parens each
        ;; time round; the corresponding elements in `c-state-cache' are
        ;; removed.  `pos' is just after the brace-pair or the open paren at
-       ;; (car c-state-cache).  There can be no open parens/braces/brackets
+       ;; (car c-state-cache).  There can be no open parens/braces/brackets
        ;; between `start-point'/`start-point-actual-macro-start' and HERE,
        ;; due to the interface spec to this function.
        (setq pos (if (and start-point-actual-macro-end
@@ -2972,7 +2971,7 @@ comment at the start of cc-engine.el for more info."
 
          ;; Scan!
          (setq pps-state
-               (parse-partial-sexp
+               (c-sc-parse-partial-sexp
                 (point) (if (< (point) pps-point) pps-point here)
                 target-depth
                 nil pps-state))
@@ -3003,9 +3002,10 @@ comment at the start of cc-engine.el for more info."
             )))
 
        (if (< (point) pps-point)
-           (setq pps-state (parse-partial-sexp (point) pps-point
-                                               nil nil ; TARGETDEPTH, 
STOPBEFORE
-                                               pps-state)))
+           (setq pps-state (c-sc-parse-partial-sexp
+                            (point) pps-point
+                            nil nil ; TARGETDEPTH, STOPBEFORE
+                            pps-state)))
 
        ;; If the last paren pair we moved out of was actually a brace pair,
        ;; insert it into `c-state-cache'.
@@ -3126,12 +3126,15 @@ comment at the start of cc-engine.el for more info."
        (save-restriction
          (narrow-to-region here-bol (point-max))
          (setq pos here-lit-start)
-         (c-safe (while (setq pa (scan-lists pos -1 1))
+         (c-safe (while (setq pa (c-sc-scan-lists pos -1 1))
                    (setq pos pa))))    ; might signal
        nil))                           ; for the cond
 
-     ((setq ren (c-safe-scan-lists pos -1 -1 too-far-back))
-       ;; CASE 3: After a }/)/] before `here''s BOL.
+     ((save-restriction
+        (narrow-to-region too-far-back (point-max))
+        (setq ren (c-safe (c-sc-scan-lists pos -1 -1))))
+
+      ;; CASE 3: After a }/)/] before `here''s BOL.
       (list (1+ ren) (and dropped-cons pos) nil)) ; Return value
 
      (t
@@ -3353,15 +3356,19 @@ comment at the start of cc-engine.el for more info."
   ;; of all parens in preprocessor constructs, except for any such construct
   ;; containing point.  We can then call `c-invalidate-state-cache-1' without
   ;; worrying further about macros and template delimiters.
-  (c-with-<->-as-parens-suppressed
-   (if (and c-state-old-cpp-beg
-           (< c-state-old-cpp-beg here))
-       (c-with-all-but-one-cpps-commented-out
-       c-state-old-cpp-beg
-       (min c-state-old-cpp-end here)
-       (c-invalidate-state-cache-1 here))
-     (c-with-cpps-commented-out
-      (c-invalidate-state-cache-1 here)))))
+  (if (eval-when-compile (memq 'category-properties c-emacs-features))
+      ;; Emacs
+      (c-with-<->-as-parens-suppressed
+       (if (and c-state-old-cpp-beg
+               (< c-state-old-cpp-beg here))
+          (c-with-all-but-one-cpps-commented-out
+           c-state-old-cpp-beg
+           (min c-state-old-cpp-end here)
+           (c-invalidate-state-cache-1 here))
+        (c-with-cpps-commented-out
+         (c-invalidate-state-cache-1 here))))
+    ;; XEmacs
+    (c-invalidate-state-cache-1 here)))
 
 (defmacro c-state-maybe-marker (place marker)
   ;; If PLACE is non-nil, return a marker marking it, otherwise nil.
@@ -3389,13 +3396,17 @@ comment at the start of cc-engine.el for more info."
     ;; FIXME!!! Put in a `condition-case' here to protect the integrity of the
     ;; subsystem.
     (prog1
-       (c-with-<->-as-parens-suppressed
-        (if (and here-cpp-beg (> here-cpp-end here-cpp-beg))
-            (c-with-all-but-one-cpps-commented-out
-             here-cpp-beg here-cpp-end
-             (c-parse-state-1))
-          (c-with-cpps-commented-out
-           (c-parse-state-1))))
+       (if (eval-when-compile (memq 'category-properties c-emacs-features))
+           ;; Emacs
+           (c-with-<->-as-parens-suppressed
+            (if (and here-cpp-beg (> here-cpp-end here-cpp-beg))
+                (c-with-all-but-one-cpps-commented-out
+                 here-cpp-beg here-cpp-end
+                 (c-parse-state-1))
+              (c-with-cpps-commented-out
+               (c-parse-state-1))))
+         ;; XEmacs
+         (c-parse-state-1))
       (setq c-state-old-cpp-beg
            (c-state-maybe-marker here-cpp-beg c-state-old-cpp-beg-marker)
            c-state-old-cpp-end
@@ -3418,9 +3429,9 @@ comment at the start of cc-engine.el for more info."
         (lambda (arg)
           (let ((val (symbol-value arg)))
             (cons arg
-                  (if (consp val)
-                      (copy-tree val)
-                    val))))
+                  (cond ((consp val) (copy-tree val))
+                        ((markerp val) (copy-marker val))
+                        (t val)))))
         '(c-state-cache
           c-state-cache-good-pos
           c-state-nonlit-pos-cache
@@ -3440,7 +3451,11 @@ comment at the start of cc-engine.el for more info."
    (concat "(setq "
     (mapconcat
      (lambda (arg)
-       (format "%s %s%s" (car arg) (if (atom (cdr arg)) "" "'") (cdr arg)))
+       (format "%s %s%s" (car arg)
+              (if (atom (cdr arg)) "" "'")
+              (if (markerp (cdr arg))
+                  (format "(copy-marker %s)" (marker-position (cdr arg)))
+                (cdr arg))))
      c-parse-state-state "  ")
     ")")))
 
@@ -4784,7 +4799,7 @@ comment at the start of cc-engine.el for more info."
      (unless cfd-prop-match
        (save-excursion
         (while (progn
-                 (goto-char (next-single-property-change
+                 (goto-char (c-next-single-property-change
                              (point) 'c-type nil cfd-limit))
                  (and (< (point) cfd-limit)
                       (not (eq (c-get-char-property (1- (point)) 'c-type)
@@ -4824,7 +4839,7 @@ comment at the start of cc-engine.el for more info."
               ;; Pseudo match inside a comment or string literal.  Skip out
               ;; of comments and string literals.
               (while (progn
-                       (goto-char (next-single-property-change
+                       (goto-char (c-next-single-property-change
                                    (point) 'face nil cfd-limit))
                        (and (< (point) cfd-limit)
                             (c-got-face-at (point) c-literal-faces))))
@@ -5013,7 +5028,7 @@ comment at the start of cc-engine.el for more info."
         (save-excursion
           (goto-char cfd-start-pos)
           (while (progn
-                   (goto-char (next-single-property-change
+                   (goto-char (c-next-single-property-change
                                (point) 'face nil cfd-limit))
                    (and (< (point) cfd-limit)
                         (c-got-face-at (point) c-literal-faces))))
@@ -5433,8 +5448,8 @@ comment at the start of cc-engine.el for more info."
        (c-go-list-forward))
       (when (equal (c-get-char-property (1- (point)) 'syntax-table)
                   c->-as-paren-syntax) ; should always be true.
-       (c-clear-char-property (1- (point)) 'category))
-      (c-clear-char-property pos 'category))))
+       (c-unmark-<->-as-paren (1- (point))))
+      (c-unmark-<->-as-paren pos))))
 
 (defun c-clear->-pair-props (&optional pos)
   ;; POS (default point) is at a > character.  If it is marked with
@@ -5450,8 +5465,8 @@ comment at the start of cc-engine.el for more info."
        (c-go-up-list-backward))
       (when (equal (c-get-char-property (point) 'syntax-table)
                        c-<-as-paren-syntax) ; should always be true.
-       (c-clear-char-property (point) 'category))
-      (c-clear-char-property pos 'category))))
+       (c-unmark-<->-as-paren (point)))
+      (c-unmark-<->-as-paren pos))))
 
 (defun c-clear-<>-pair-props (&optional pos)
   ;; POS (default point) is at a < or > character.  If it has an
@@ -5540,9 +5555,10 @@ comment at the start of cc-engine.el for more info."
       (c-syntactic-skip-backward "^;{}" (c-determine-limit 512))
       (setq new-beg (point))
 
-      ;; Remove the syntax-table properties from each pertinent <...> pair.
-      ;; Firsly, the ones with the < before beg and > after beg.
-      (while (c-search-forward-char-property 'category 'c-<-as-paren-syntax 
beg)
+      ;; Remove the syntax-table/category properties from each pertinent <...>
+      ;; pair.  Firsly, the ones with the < before beg and > after beg.
+      (while
+         (c-search-forward-char-property 'syntax-table c-<-as-paren-syntax beg)
        (if (c-clear-<-pair-props-if-match-after beg (1- (point)))
            (setq need-new-beg t)))
 
@@ -5553,7 +5569,7 @@ comment at the start of cc-engine.el for more info."
 
       ;; Remove syntax-table properties from the remaining pertinent <...>
       ;; pairs, those with a > after end and < before end.
-      (while (c-search-backward-char-property 'category 'c->-as-paren-syntax 
end)
+      (while (c-search-backward-char-property 'syntax-table 
c->-as-paren-syntax end)
        (if (c-clear->-pair-props-if-match-before end)
            (setq need-new-end t)))
 
@@ -5935,32 +5951,31 @@ comment at the start of cc-engine.el for more info."
        (while (and
                (progn
                  (c-forward-syntactic-ws)
-                 (let ((orig-record-found-types c-record-found-types))
-                   (when (or (and c-record-type-identifiers all-types)
-                             (c-major-mode-is 'java-mode))
-                     ;; All encountered identifiers are types, so set the
-                     ;; promote flag and parse the type.
-                     (progn
-                       (c-forward-syntactic-ws)
-                       (if (looking-at "\\?")
-                           (forward-char)
-                         (when (looking-at c-identifier-start)
-                           (let ((c-promote-possible-types t)
-                                 (c-record-found-types t))
-                             (c-forward-type))))
-
-                       (c-forward-syntactic-ws)
-
-                       (when (or (looking-at "extends")
-                                 (looking-at "super"))
-                         (forward-word)
-                         (c-forward-syntactic-ws)
+                 (when (or (and c-record-type-identifiers all-types)
+                           (c-major-mode-is 'java-mode))
+                   ;; All encountered identifiers are types, so set the
+                   ;; promote flag and parse the type.
+                   (progn
+                     (c-forward-syntactic-ws)
+                     (if (looking-at "\\?")
+                         (forward-char)
+                       (when (looking-at c-identifier-start)
                          (let ((c-promote-possible-types t)
                                (c-record-found-types t))
-                           (c-forward-type)
-                           (c-forward-syntactic-ws))))))
+                           (c-forward-type))))
+
+                     (c-forward-syntactic-ws)
 
-                 (setq pos (point))    ; e.g. first token inside the '<'
+                     (when (or (looking-at "extends")
+                               (looking-at "super"))
+                       (forward-word)
+                       (c-forward-syntactic-ws)
+                       (let ((c-promote-possible-types t)
+                             (c-record-found-types t))
+                         (c-forward-type)
+                         (c-forward-syntactic-ws)))))
+
+                 (setq pos (point))    ; e.g. first token inside the '<'
 
                  ;; Note: These regexps exploit the match order in \| so
                  ;; that "<>" is matched by "<" rather than "[^>:-]>".
@@ -6050,7 +6065,7 @@ comment at the start of cc-engine.el for more info."
                       (or (and (eq (char-before) ?&)
                                (not (eq (char-after) ?&)))
                           (eq (char-before) ?,)))
-                 ;; Just another argument.      Record the position.  The
+                 ;; Just another argument.  Record the position.  The
                  ;; type check stuff that made us stop at it is at
                  ;; the top of the loop.
                  (setq arg-start-pos (cons (point) arg-start-pos)))
@@ -6473,13 +6488,14 @@ comment at the start of cc-engine.el for more info."
             (setq res nil)))))
 
     (when res
-      ;; Skip trailing type modifiers. If any are found we know it's
+      ;; Skip trailing type modifiers.  If any are found we know it's
       ;; a type.
       (when c-opt-type-modifier-key
        (while (looking-at c-opt-type-modifier-key) ; e.g. "const", "volatile"
          (goto-char (match-end 1))
          (c-forward-syntactic-ws)
          (setq res t)))
+
       ;; Step over any type suffix operator.  Do not let the existence
       ;; of these alter the classification of the found type, since
       ;; these operators typically are allowed in normal expressions
@@ -6561,7 +6577,7 @@ comment at the start of cc-engine.el for more info."
        (progn (c-forward-syntactic-ws) t)
        (if (looking-at "(")
           (c-go-list-forward)
-         t)))
+        t)))
 
 (defmacro c-pull-open-brace (ps)
   ;; Pull the next open brace from PS (which has the form of paren-state),
@@ -6572,6 +6588,36 @@ comment at the start of cc-engine.el for more info."
      (prog1 (car ,ps)
        (setq ,ps (cdr ,ps)))))
 
+(defun c-back-over-member-initializer-braces ()
+  ;; Point is just after a closing brace/parenthesis.  Try to parse this as a
+  ;; C++ member initializer list, going back to just after the introducing ":"
+  ;; and returning t.  Otherwise return nil, leaving point unchanged.
+  (let ((here (point)) res)
+    (setq res
+       (catch 'done
+         (when (not (c-go-list-backward))
+           (throw 'done nil))
+         (c-backward-syntactic-ws)
+         (when (not (c-simple-skip-symbol-backward))
+           (throw 'done nil))
+         (c-backward-syntactic-ws)
+
+         (while (eq (char-before) ?,)
+           (backward-char)
+           (c-backward-syntactic-ws)
+           (when (not (memq (char-before) '(?\) ?})))
+             (throw 'done nil))
+           (when (not (c-go-list-backward))
+             (throw 'done nil))
+           (c-backward-syntactic-ws)
+           (when (not (c-simple-skip-symbol-backward))
+             (throw 'done nil))
+           (c-backward-syntactic-ws))
+
+         (eq (char-before) ?:)))
+    (or res (goto-char here))
+    res))
+
 (defun c-back-over-member-initializers ()
   ;; Test whether we are in a C++ member initializer list, and if so, go back
   ;; to the introducing ":", returning the position of the opening paren of
@@ -7148,7 +7194,7 @@ comment at the start of cc-engine.el for more info."
 
         ;; Now we've collected info about various characteristics of
         ;; the construct we're looking at.  Below follows a decision
-        ;; tree based on that.  It's ordered to check more certain
+        ;; tree based on that.  It's ordered to check more certain
         ;; signs before less certain ones.
 
         (if got-identifier
@@ -7234,7 +7280,7 @@ comment at the start of cc-engine.el for more info."
                    at-decl-end
                    (cond
                     ((eq context 'decl)
-                     ;; Inside an arglist that contains declarations.  If K&R
+                     ;; Inside an arglist that contains declarations.  If K&R
                      ;; style declarations and parenthesis style initializers
                      ;; aren't allowed then the single identifier must be a
                      ;; type, else we require that it's known or found
@@ -7267,7 +7313,7 @@ comment at the start of cc-engine.el for more info."
                                    c-after-suffixed-type-maybe-decl-key))))))
               ;; Got an empty paren pair and a preceding type that probably
               ;; really is the identifier.  Shift the type backwards to make
-              ;; the last one the identifier.  This is analogous to the
+              ;; the last one the identifier.  This is analogous to the
               ;; "backtracking" done inside the `c-type-decl-suffix-key' loop
               ;; above.
               ;;
@@ -7275,7 +7321,7 @@ comment at the start of cc-engine.el for more info."
               ;; "backtracking" code, do not shift backward if we're not
               ;; looking at either `c-after-suffixed-type-decl-key' or "[;,]".
               ;; Since there's no preceding type, the shift would mean that
-              ;; the declaration is typeless.  But if the regexp doesn't match
+              ;; the declaration is typeless.  But if the regexp doesn't match
               ;; then we will simply fall through in the tests below and not
               ;; recognize it at all, so it's better to try it as an abstract
               ;; declarator instead.
@@ -7414,7 +7460,7 @@ comment at the start of cc-engine.el for more info."
                          (not got-suffix))
                 ;; Got something like "foo * bar;".  Since we're not inside an
                 ;; arglist it would be a meaningless expression because the
-                ;; result isn't used.  We therefore choose to recognize it as
+                ;; result isn't used.  We therefore choose to recognize it as
                 ;; a declaration.  Do not allow a suffix since it could then
                 ;; be a function call.
                 (throw 'at-decl-or-cast t))
@@ -7425,7 +7471,7 @@ comment at the start of cc-engine.el for more info."
                          (eq at-type 'found)
                          (not (eq context 'arglist)))
                 ;; Got something like "a (*b) (c);" or "a (b) = c;".  It could
-                ;; be an odd expression or it could be a declaration.  Treat
+                ;; be an odd expression or it could be a declaration.  Treat
                 ;; it as a declaration if "a" has been used as a type
                 ;; somewhere else (if it's a known type we won't get here).
                 (throw 'at-decl-or-cast t)))
@@ -7436,7 +7482,7 @@ comment at the start of cc-engine.el for more info."
                          (and (eq context 'decl)
                               (not c-recognize-paren-inits)
                               (or got-parens got-suffix))))
-            ;; Got a type followed by an abstract declarator.  If `got-prefix'
+            ;; Got a type followed by an abstract declarator.  If `got-prefix'
             ;; is set it's something like "a *" without anything after it.  If
             ;; `got-parens' or `got-suffix' is set it's "a()", "a[]", "a()[]",
             ;; or similar, which we accept only if the context rules out
@@ -8106,7 +8152,7 @@ comment at the start of cc-engine.el for more info."
                            (c-forward-token-2))
                          (eq (char-after) ?\))))))
 
-                   ;; ...Yes.  We've identified the function's argument list.
+                   ;; ...Yes.  We've identified the function's argument list.
                    (throw 'knr
                           (progn (goto-char after-rparen)
                                  (c-forward-syntactic-ws)
@@ -8433,10 +8479,7 @@ comment at the start of cc-engine.el for more info."
     (when (and c-recognize-<>-arglists
               (eq (char-before) ?>))
       ;; Could be at the end of a template arglist.
-      (let ((c-parse-and-markup-<>-arglists t)
-           (c-disallow-comma-in-<>-arglists
-            (and containing-sexp
-                 (not (eq (char-after containing-sexp) ?{)))))
+      (let ((c-parse-and-markup-<>-arglists t))
        (while (and
                (c-backward-<>-arglist nil limit)
                (progn
@@ -8699,7 +8742,7 @@ comment at the start of cc-engine.el for more info."
         (goto-char containing-sexp)
         (if (c-looking-at-inexpr-block next-containing next-containing)
             ;; We're in an in-expression block of some kind.  Do not
-            ;; check nesting.  We deliberately set the limit to the
+            ;; check nesting.  We deliberately set the limit to the
             ;; containing sexp, so that c-looking-at-inexpr-block
             ;; doesn't check for an identifier before it.
             (setq containing-sexp nil)
@@ -9461,15 +9504,15 @@ comment at the start of cc-engine.el for more info."
      ;;annotations.
      ((and (c-major-mode-is 'java-mode)
           (setq placeholder (point))
-            (c-beginning-of-statement-1)
-            (progn
-              (while (and (c-forward-annotation)
-                          (< (point) placeholder))
-                (c-forward-syntactic-ws))
-              t)
-            (prog1
-                (>= (point) placeholder)
-              (goto-char placeholder)))
+          (c-beginning-of-statement-1)
+          (progn
+            (while (and (c-forward-annotation)
+                        (< (point) placeholder))
+              (c-forward-syntactic-ws))
+            t)
+          (prog1
+              (>= (point) placeholder)
+            (goto-char placeholder)))
        (c-beginning-of-statement-1 containing-sexp)
        (c-add-syntax 'annotation-var-cont (point)))
 
@@ -9520,7 +9563,7 @@ comment at the start of cc-engine.el for more info."
        ((indent-point (point))
         (case-fold-search nil)
         open-paren-in-column-0-is-defun-start
-        ;; A whole ugly bunch of various temporary variables.  Have
+        ;; A whole ugly bunch of various temporary variables.  Have
         ;; to declare them here since it's not possible to declare
         ;; a variable with only the scope of a cond test and the
         ;; following result clauses, and most of this function is a
@@ -9575,22 +9618,26 @@ comment at the start of cc-engine.el for more info."
                                       (c-keyword-sym (match-string 1)))))
 
       ;; Init some position variables.
-      (if c-state-cache
+      (if paren-state
          (progn
            (setq containing-sexp (car paren-state)
                  paren-state (cdr paren-state))
            (if (consp containing-sexp)
-               (progn
-                 (setq lim (cdr containing-sexp))
-                 (if (cdr c-state-cache)
-                     ;; Ignore balanced paren.  The next entry
-                     ;; can't be another one.
-                     (setq containing-sexp (car (cdr c-state-cache))
-                           paren-state (cdr paren-state))
-                   ;; If there is no surrounding open paren then
-                   ;; put the last balanced pair back on paren-state.
-                   (setq paren-state (cons containing-sexp paren-state)
-                         containing-sexp nil)))
+             (save-excursion
+               (goto-char (cdr containing-sexp))
+               (if (and (c-major-mode-is 'c++-mode)
+                        (c-back-over-member-initializer-braces))
+                     (c-syntactic-skip-backward "^}" nil t))
+               (setq lim (point))
+               (if paren-state
+                   ;; Ignore balanced paren.    The next entry
+                   ;; can't be another one.
+                   (setq containing-sexp (car paren-state)
+                         paren-state (cdr paren-state))
+                 ;; If there is no surrounding open paren then
+                 ;; put the last balanced pair back on paren-state.
+                 (setq paren-state (cons containing-sexp paren-state)
+                       containing-sexp nil)))
              (setq lim (1+ containing-sexp))))
        (setq lim (point-min)))
 
@@ -10432,7 +10479,7 @@ comment at the start of cc-engine.el for more info."
                             paren-state))
 
         ;; CASE 7B: Looking at the opening brace of an
-        ;; in-expression block or brace list.  C.f. cases 4, 16A
+        ;; in-expression block or brace list.  C.f. cases 4, 16A
         ;; and 17E.
         ((and (eq char-after-ip ?{)
               (progn
@@ -10554,7 +10601,7 @@ comment at the start of cc-engine.el for more info."
          )))
 
        ;; CASE 9: we are inside a brace-list
-       ((and (not (c-major-mode-is 'awk-mode)) ; Maybe this isn't needed (ACM, 
2002/3/29)
+       ((and (not (c-major-mode-is 'awk-mode))  ; Maybe this isn't needed 
(ACM, 2002/3/29)
             (setq special-brace-list
                   (or (and c-special-brace-lists ;;;; ALWAYS NIL FOR AWK!!
                            (save-excursion
@@ -10768,9 +10815,9 @@ comment at the start of cc-engine.el for more info."
         ))
 
        ;; CASE 19: line is an expression, not a statement, and is directly
-       ;; contained by a template delimiter.   Most likely, we are in a
+       ;; contained by a template delimiter.  Most likely, we are in a
        ;; template arglist within a statement.  This case is based on CASE
-       ;; 7.   At some point in the future, we may wish to create more
+       ;; 7.  At some point in the future, we may wish to create more
        ;; syntactic symbols such as `template-intro',
        ;; `template-cont-nonempty', etc., and distinguish between them as we
        ;; do for `arglist-intro' etc. (2009-12-07).
@@ -11106,7 +11153,7 @@ Cannot combine absolute offsets %S and %S in `add' 
method"
   ;;
   ;; This function might do hidden buffer changes.
   (let* ((symbol (c-langelem-sym langelem))
-        (match  (assq symbol c-offsets-alist))
+        (match (assq symbol c-offsets-alist))
         (offset (cdr-safe match)))
     (if match
        (setq offset (c-evaluate-offset offset langelem symbol))
@@ -11177,4 +11224,8 @@ Cannot combine absolute offsets %S and %S in `add' 
method"
 
 (cc-provide 'cc-engine)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-engine.el ends here
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 8035c18..9a1273d 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -1,6 +1,6 @@
 ;;; cc-fonts.el --- font lock support for CC Mode
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             2002- Martin Stjernholm
@@ -266,7 +266,7 @@
     ;; This function might do hidden buffer changes.
     (when (c-got-face-at (point) c-literal-faces)
       (while (progn
-              (goto-char (next-single-property-change
+              (goto-char (c-next-single-property-change
                           (point) 'face nil limit))
               (and (< (point) limit)
                    (c-got-face-at (point) c-literal-faces))))
@@ -559,8 +559,7 @@ stuff.  Used on level 1 and higher."
                                   (progn
                                     (c-mark-<-as-paren beg)
                                     (c-mark->-as-paren end))
-                                ;; (c-clear-char-property beg 'syntax-table)
-                                (c-clear-char-property beg 'category)))
+                                (c-unmark-<->-as-paren beg)))
                             nil)))))))
 
              ;; #define.
@@ -1465,36 +1464,38 @@ casts and declarations are fontified.  Used on level 2 
and higher."
                    c-recognize-knr-p) ; Strictly speaking, bogus, but it
                                       ; speeds up lisp.h tremendously.
                (save-excursion
-                 (unless (or (eobp)
-                             (looking-at "\\s(\\|\\s)"))
-                   (forward-char))
-                 (setq bod-res (car (c-beginning-of-decl-1 decl-search-lim)))
-                 (if (and (eq bod-res 'same)
-                          (save-excursion
-                            (c-backward-syntactic-ws)
-                            (eq (char-before) ?\})))
-                     (c-beginning-of-decl-1 decl-search-lim))
-
-                 ;; We're now putatively at the declaration.
-                 (setq paren-state (c-parse-state))
-                 ;; At top level or inside a "{"?
-                 (if (or (not (setq encl-pos
-                                    (c-most-enclosing-brace paren-state)))
-                         (eq (char-after encl-pos) ?\{))
-                     (progn
-                       (when (looking-at c-typedef-key) ; "typedef"
-                         (setq is-typedef t)
-                         (goto-char (match-end 0))
-                         (c-forward-syntactic-ws))
-                       ;; At a real declaration?
-                       (if (memq (c-forward-type t) '(t known found decltype))
-                           (progn
-                             (c-font-lock-declarators (point-max) t is-typedef)
-                             nil)
-                         ;; False alarm.  Return t to go on to the next check.
-                         (goto-char start-pos)
-                         t))
-                   t))))))
+                 (if (c-back-over-member-initializers)
+                    t                  ; Can't be at a declarator
+                   (unless (or (eobp)
+                               (looking-at "\\s(\\|\\s)"))
+                     (forward-char))
+                   (setq bod-res (car (c-beginning-of-decl-1 decl-search-lim)))
+                   (if (and (eq bod-res 'same)
+                            (save-excursion
+                              (c-backward-syntactic-ws)
+                              (eq (char-before) ?\})))
+                       (c-beginning-of-decl-1 decl-search-lim))
+
+                   ;; We're now putatively at the declaration.
+                   (setq paren-state (c-parse-state))
+                   ;; At top level or inside a "{"?
+                   (if (or (not (setq encl-pos
+                                      (c-most-enclosing-brace paren-state)))
+                           (eq (char-after encl-pos) ?\{))
+                       (progn
+                         (when (looking-at c-typedef-key) ; "typedef"
+                           (setq is-typedef t)
+                           (goto-char (match-end 0))
+                           (c-forward-syntactic-ws))
+                         ;; At a real declaration?
+                         (if (memq (c-forward-type t) '(t known found 
decltype))
+                             (progn
+                               (c-font-lock-declarators (point-max) t 
is-typedef)
+                               nil)
+                           ;; False alarm.  Return t to go on to the next 
check.
+                           (goto-char start-pos)
+                           t))
+                     t)))))))
 
          ;; It was a false alarm.  Check if we're in a label (or other
          ;; construct with `:' except bitfield) instead.
@@ -2702,4 +2703,8 @@ need for `pike-font-lock-extra-types'.")
 ;; 2006-07-10:  awk-font-lock-keywords has been moved back to cc-awk.el.
 (cc-provide 'cc-fonts)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-fonts.el ends here
diff --git a/lisp/progmodes/cc-guess.el b/lisp/progmodes/cc-guess.el
index f46ae0f..2053473 100644
--- a/lisp/progmodes/cc-guess.el
+++ b/lisp/progmodes/cc-guess.el
@@ -1,7 +1,7 @@
 ;;; cc-guess.el --- guess indentation values by scanning existing code
 
-;; Copyright (C) 1985, 1987, 1992-2006, 2011-2014
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2006, 2011-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author:     1994-1995 Barry A. Warsaw
 ;;             2011-     Masatake YAMATO
@@ -572,4 +572,9 @@ WITH-NAME is asked to the user."
 
 
 (cc-provide 'cc-guess)
+
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-guess.el ends here
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 68b2d62..4d16a9b 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -1,6 +1,6 @@
 ;;; cc-langs.el --- language specific settings for CC Mode -*- coding: utf-8 
-*-
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    2002- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -318,9 +318,9 @@ the evaluated constant value at compile time."
        :style toggle :selected c-auto-newline]
        ["Hungry delete"         c-toggle-hungry-state
        :style toggle :selected c-hungry-delete-key]
-       ["Subword mode"          subword-mode
-       :style toggle :selected (and (boundp 'subword-mode)
-                                     subword-mode)])))
+       ["Subword mode"          c-subword-mode
+       :style toggle :selected (and (boundp 'c-subword-mode)
+                                     c-subword-mode)])))
 
 
 ;;; Syntax tables.
@@ -577,9 +577,18 @@ EOL terminated statements."
   (c c++ objc) t)
 (c-lang-defvar c-has-bitfields (c-lang-const c-has-bitfields))
 
+(c-lang-defconst c-modified-constant
+  "Regexp that matches a \"modified\" constant literal such as \"L'a'\",
+a \"long character\".  In particular, this recognizes forms of constant
+which `c-backward-sexp' needs to be called twice to move backwards over."
+  t nil
+  (c c++ objc) "L'\\([^\\'\t\f\n\r]\\|\\\\.\\)'")
+;; FIXME!!!  Extend this to cover strings, if needed.  2008-04-11
+(c-lang-defvar c-modified-constant (c-lang-const c-modified-constant))
+
 (c-lang-defconst c-symbol-start
   "Regexp that matches the start of a symbol, i.e. any identifier or
-keyword.  It's unspecified how far it matches. Does not contain a \\|
+keyword.  It's unspecified how far it matches.  Does not contain a \\|
 operator at the top level."
   t    (concat "[" c-alpha "_]")
   java (concat "[" c-alpha "address@hidden")
@@ -1144,7 +1153,8 @@ operators."
   c++  (append '("&" "<%" "%>" "<:" ":>" "%:" "%:%:")
               (c-lang-const c-other-op-syntax-tokens))
   objc (append '("#" "##"              ; Used by cpp.
-                "+" "-") (c-lang-const c-other-op-syntax-tokens))
+                "+" "-")
+               (c-lang-const c-other-op-syntax-tokens))
   idl  (append '("#" "##")             ; Used by cpp.
               (c-lang-const c-other-op-syntax-tokens))
   pike (append '("..")
@@ -1731,7 +1741,7 @@ but they don't build a type of themselves.  Unlike the 
keywords on
 not the type face."
   t    nil
   c    '("const" "restrict" "volatile")
-  c++  '("const" "constexpr" "noexcept" "volatile" "throw")
+  c++  '("const" "constexpr" "noexcept" "volatile" "throw" "final" "override")
   objc '("const" "volatile"))
 
 (c-lang-defconst c-opt-type-modifier-key
@@ -2996,17 +3006,15 @@ is in effect or not."
          (when (boundp (c-mode-symbol "font-lock-extra-types"))
            (c-mode-var "font-lock-extra-types")))
         (regexp-strings
-         (apply 'nconc
-                (mapcar (lambda (re)
-                   (when (string-match "[][.*+?^$\\]" re)
-                     (list re)))
-                 extra-types)))
+         (delq nil (mapcar (lambda (re)
+                             (when (string-match "[][.*+?^$\\]" re)
+                               re))
+                           extra-types)))
         (plain-strings
-         (apply 'nconc
-                (mapcar (lambda (re)
-                   (unless (string-match "[][.*+?^$\\]" re)
-                     (list re)))
-                 extra-types))))
+         (delq nil (mapcar (lambda (re)
+                             (unless (string-match "[][.*+?^$\\]" re)
+                               re))
+                           extra-types))))
     (concat "\\<\\("
            (c-concat-separated
             (append (list (c-make-keywords-re nil
@@ -3252,10 +3260,7 @@ function it returns is byte compiled with all the 
evaluated results
 from the language constants.  Use the `c-init-language-vars' macro to
 accomplish that conveniently."
 
-  (if (and (not load-in-progress)
-          (boundp 'byte-compile-dest-file)
-          (stringp byte-compile-dest-file))
-
+  (if (cc-bytecomp-is-compiling)
       ;; No need to byte compile this lambda since the byte compiler is
       ;; smart enough to detect the `funcall' construct in the
       ;; `c-init-language-vars' macro below and compile it all straight
@@ -3350,4 +3355,8 @@ evaluated and should not be quoted."
 
 (cc-provide 'cc-langs)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-langs.el ends here
diff --git a/lisp/progmodes/cc-menus.el b/lisp/progmodes/cc-menus.el
index 735c2cb..414b957 100644
--- a/lisp/progmodes/cc-menus.el
+++ b/lisp/progmodes/cc-menus.el
@@ -1,6 +1,6 @@
 ;;; cc-menus.el --- imenu support for CC Mode
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    1998- Martin Stjernholm
 ;;             1992-1999 Barry A. Warsaw
@@ -269,7 +269,7 @@ nested angle brackets constructs."
        "\\("                                 ; method name which gets captured
                                              ; into index
          "[" c-alpha "_]"
-         "[" c-alnum "_]*"
+        "[" c-alnum "_]*"
        "\\)"
        "[ \t\n\r]*"
        ;; An argument list that contains zero or more arguments.
@@ -521,4 +521,8 @@ Example:
 
 (cc-provide 'cc-menus)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-menus.el ends here
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index cb138d5..01e93b3 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -1,6 +1,6 @@
 ;;; cc-mode.el --- major mode for editing C and similar languages
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -108,11 +108,6 @@
 ;; with your version of Emacs, you are incompatible!
 (cc-external-require 'easymenu)
 
-;; Autoload directive for emacsen that doesn't have an older CC Mode
-;; version in the dist.
-(autoload 'subword-mode "subword"
-  "Mode enabling subword movement and editing keys." t)
-
 ;; Load cc-fonts first after font-lock is loaded, since it isn't
 ;; necessary until font locking is requested.
 ; (eval-after-load "font-lock" ; 2006-07-09: font-lock is now preloaded.
@@ -379,7 +374,7 @@ control).  See \"cc-mode.el\" for more info."
   ;; conflicts with OOBR
   ;;(define-key c-mode-base-map "\C-c\C-v"  'c-version)
   ;; (define-key c-mode-base-map "\C-c\C-y"  'c-toggle-hungry-state)  
Commented out by ACM, 2005-11-22.
-  (define-key c-mode-base-map "\C-c\C-w" 'subword-mode)
+  (define-key c-mode-base-map "\C-c\C-w" 'c-subword-mode)
   )
 
 ;; We don't require the outline package, but we configure it a bit anyway.
@@ -471,6 +466,14 @@ preferably use the `c-mode-menu' language constant 
directly."
 (defvar c-maybe-stale-found-type nil)
 (make-variable-buffer-local 'c-maybe-stale-found-type)
 
+(defvar c-just-done-before-change nil)
+(make-variable-buffer-local 'c-just-done-before-change)
+;; This variable is set to t by `c-before-change' and to nil by
+;; `c-after-change'.  It is used to detect a spurious invocation of
+;; `before-change-functions' directly following on from a correct one.  This
+;; happens in some Emacsen, for example when `basic-save-buffer' does (insert
+;; ?\n) when `require-final-newline' is non-nil.
+
 (defun c-basic-common-init (mode default-style)
   "Do the necessary initialization for the syntax handling routines
 and the line breaking/filling code.  Intended to be used by other
@@ -541,10 +544,11 @@ that requires a literal mode spec at compile time."
   ;; Use this in Emacs 21+ to avoid meddling with the rear-nonsticky
   ;; property on each character.
   (when (boundp 'text-property-default-nonsticky)
+    (make-local-variable 'text-property-default-nonsticky)
     (mapc (lambda (tprop)
            (unless (assq tprop text-property-default-nonsticky)
-             (set (make-local-variable 'text-property-default-nonsticky)
-                   (cons `(,tprop . t) text-property-default-nonsticky))))
+             (setq text-property-default-nonsticky
+                    (cons `(,tprop . t) text-property-default-nonsticky))))
          '(syntax-table category c-type)))
 
   ;; In Emacs 21 and later it's possible to turn off the ad-hoc
@@ -604,10 +608,12 @@ that requires a literal mode spec at compile time."
     (make-local-hook 'before-change-functions)
     (make-local-hook 'after-change-functions))
   (add-hook 'before-change-functions 'c-before-change nil t)
+  (setq c-just-done-before-change nil)
   (add-hook 'after-change-functions 'c-after-change nil t)
-  (set (make-local-variable 'font-lock-extend-after-change-region-function)
-       'c-extend-after-change-region)) ; Currently (2009-05) used by all
-                       ; languages with #define (C, C++,; ObjC), and by AWK.
+  (when (boundp 'font-lock-extend-after-change-region-function)
+    (set (make-local-variable 'font-lock-extend-after-change-region-function)
+         'c-extend-after-change-region))) ; Currently (2009-05) used by all
+                          ; languages with #define (C, C++,; ObjC), and by AWK.
 
 (defun c-setup-doc-comment-style ()
   "Initialize the variables that depend on the value of `c-doc-comment-style'."
@@ -668,9 +674,11 @@ compatible with old code; callers should always specify 
it."
         (or (c-cpp-define-name) (c-defun-name))))
   (let ((rfn (assq mode c-require-final-newline)))
     (when rfn
-      (and (cdr rfn)
-          (set (make-local-variable 'require-final-newline)
-                mode-require-final-newline)))))
+      (if (boundp 'mode-require-final-newline)
+          (and (cdr rfn)
+               (set (make-local-variable 'require-final-newline)
+                    mode-require-final-newline))
+        (set (make-local-variable 'require-final-newline) (cdr rfn))))))
 
 (defun c-count-cfss (lv-alist)
   ;; LV-ALIST is an alist like `file-local-variables-alist'.  Count how many
@@ -947,7 +955,11 @@ Note that the style variables are always made local to the 
buffer."
          c-new-END (min (cdr new-bounds) (c-determine-+ve-limit 500 endd)))
     ;; Clear all old relevant properties.
     (c-clear-char-property-with-value c-new-BEG c-new-END 'syntax-table '(1))
-    (c-clear-char-property-with-value c-new-BEG c-new-END 'category 
'c-cpp-delimiter)
+
+    ;; CPP "comment" markers:
+    (if (eval-when-compile (memq 'category-properties c-emacs-features));Emacs.
+       (c-clear-char-property-with-value
+        c-new-BEG c-new-END 'category 'c-cpp-delimiter))
     ;; FIXME!!!  What about the "<" and ">" category properties?  2009-11-16
 
     ;; Add needed properties to each CPP construct in the region.
@@ -966,8 +978,10 @@ Note that the style variables are always made local to the 
buffer."
          (setq mbeg (point))
          (if (> (c-syntactic-end-of-macro) mbeg)
              (progn
-               (c-neutralize-CPP-line mbeg (point))
-               (c-set-cpp-delimiters mbeg (point)))
+               (c-neutralize-CPP-line mbeg (point)) ; "punctuation" properties
+               (if (eval-when-compile
+                      (memq 'category-properties c-emacs-features)) ;Emacs.
+                   (c-set-cpp-delimiters mbeg (point)))) ; "comment" markers
            (forward-line))           ; no infinite loop with, e.g., "#//"
          )))))
 
@@ -987,64 +1001,71 @@ Note that the style variables are always made local to 
the buffer."
   ;; it/them from the cache.  Don't worry about being inside a string
   ;; or a comment - "wrongly" removing a symbol from `c-found-types'
   ;; isn't critical.
-  (setq c-maybe-stale-found-type nil)
-  (save-restriction
-    (save-match-data
-      (widen)
-      (save-excursion
-       ;; Are we inserting/deleting stuff in the middle of an identifier?
-       (c-unfind-enclosing-token beg)
-       (c-unfind-enclosing-token end)
-       ;; Are we coalescing two tokens together, e.g. "fo o" -> "foo"?
-       (when (< beg end)
-         (c-unfind-coalesced-tokens beg end))
-       ;; Are we (potentially) disrupting the syntactic context which
-       ;; makes a type a type?  E.g. by inserting stuff after "foo" in
-       ;; "foo bar;", or before "foo" in "typedef foo *bar;"?
-       ;;
-       ;; We search for appropriate c-type properties "near" the change.
-       ;; First, find an appropriate boundary for this property search.
-       (let (lim
-             type type-pos
-             marked-id term-pos
-             (end1
-              (or (and (eq (get-text-property end 'face) 
'font-lock-comment-face)
-                       (previous-single-property-change end 'face))
-                  end)))
-         (when (>= end1 beg) ; Don't hassle about changes entirely in comments.
-           ;; Find a limit for the search for a `c-type' property
-           (while
-               (and (/= (skip-chars-backward "^;{}") 0)
-                    (> (point) (point-min))
-                    (memq (c-get-char-property (1- (point)) 'face)
-                          '(font-lock-comment-face font-lock-string-face))))
-           (setq lim (max (point-min) (1- (point))))
-
-           ;; Look for the latest `c-type' property before end1
-           (when (and (> end1 (point-min))
-                      (setq type-pos
-                            (if (get-text-property (1- end1) 'c-type)
-                                end1
-                              (previous-single-property-change end1 'c-type 
nil lim))))
-             (setq type (get-text-property (max (1- type-pos) lim) 'c-type))
-
-             (when (memq type '(c-decl-id-start c-decl-type-start))
-               ;; Get the identifier, if any, that the property is on.
-               (goto-char (1- type-pos))
-               (setq marked-id
-                     (when (looking-at "\\(\\sw\\|\\s_\\)")
-                       (c-beginning-of-current-token)
-                       (buffer-substring-no-properties (point) type-pos)))
-
-               (goto-char end1)
-               (skip-chars-forward "^;{}") ; FIXME!!!  loop for comment, maybe
-               (setq lim (point))
-               (setq term-pos
-                     (or (next-single-property-change end 'c-type nil lim) 
lim))
-               (setq c-maybe-stale-found-type
-                     (list type marked-id
-                           type-pos term-pos
-                           (buffer-substring-no-properties type-pos term-pos)
+  (unless c-just-done-before-change  ; Guard against a spurious second
+                             ; invocation of before-change-functions.
+    (setq c-just-done-before-change t)
+    (setq c-maybe-stale-found-type nil)
+    (save-restriction
+      (save-match-data
+       (widen)
+       (save-excursion
+         ;; Are we inserting/deleting stuff in the middle of an identifier?
+         (c-unfind-enclosing-token beg)
+         (c-unfind-enclosing-token end)
+         ;; Are we coalescing two tokens together, e.g. "fo o" -> "foo"?
+         (when (< beg end)
+           (c-unfind-coalesced-tokens beg end))
+         ;; Are we (potentially) disrupting the syntactic context which
+         ;; makes a type a type?  E.g. by inserting stuff after "foo" in
+         ;; "foo bar;", or before "foo" in "typedef foo *bar;"?
+         ;;
+         ;; We search for appropriate c-type properties "near" the change.
+         ;; First, find an appropriate boundary for this property search.
+         (let (lim
+               type type-pos
+               marked-id term-pos
+               (end1
+                (or (and (eq (get-text-property end 'face)
+                             'font-lock-comment-face)
+                         (previous-single-property-change end 'face))
+                    end)))
+           (when (>= end1 beg) ; Don't hassle about changes entirely in 
comments.
+             ;; Find a limit for the search for a `c-type' property
+             (while
+                 (and (/= (skip-chars-backward "^;{}") 0)
+                      (> (point) (point-min))
+                      (memq (c-get-char-property (1- (point)) 'face)
+                            '(font-lock-comment-face font-lock-string-face))))
+             (setq lim (max (point-min) (1- (point))))
+
+             ;; Look for the latest `c-type' property before end1
+             (when (and (> end1 (point-min))
+                        (setq type-pos
+                              (if (get-text-property (1- end1) 'c-type)
+                                  end1
+                                (previous-single-property-change end1 'c-type
+                                                                 nil lim))))
+               (setq type (get-text-property (max (1- type-pos) lim) 'c-type))
+
+               (when (memq type '(c-decl-id-start c-decl-type-start))
+                 ;; Get the identifier, if any, that the property is on.
+                 (goto-char (1- type-pos))
+                 (setq marked-id
+                       (when (looking-at "\\(\\sw\\|\\s_\\)")
+                         (c-beginning-of-current-token)
+                         (buffer-substring-no-properties (point) type-pos)))
+
+                 (goto-char end1)
+                 (skip-chars-forward "^;{}") ;FIXME!!! loop for comment, maybe
+                 (setq lim (point))
+                 (setq term-pos
+                       (or (c-next-single-property-change end 'c-type nil lim)
+                           lim))
+                 (setq c-maybe-stale-found-type
+                       (list type marked-id
+                             type-pos term-pos
+                             (buffer-substring-no-properties type-pos
+                                                             term-pos)
                              (buffer-substring-no-properties beg end)))))))
 
          (if c-get-state-before-change-functions
@@ -1055,7 +1076,7 @@ Note that the style variables are always made local to 
the buffer."
          )))
     ;; The following must be done here rather than in `c-after-change' because
     ;; newly inserted parens would foul up the invalidation algorithm.
-  (c-invalidate-state-cache beg))
+    (c-invalidate-state-cache beg)))
 
 (defvar c-in-after-change-fontification nil)
 (make-variable-buffer-local 'c-in-after-change-fontification)
@@ -1076,6 +1097,7 @@ Note that the style variables are always made local to 
the buffer."
   ;; This calls the language variable c-before-font-lock-functions, if non nil.
   ;; This typically sets `syntax-table' properties.
 
+  (setq c-just-done-before-change nil)
   (c-save-buffer-state (case-fold-search open-paren-in-column-0-is-defun-start)
     ;; When `combine-after-change-calls' is used we might get calls
     ;; with regions outside the current narrowing.  This has been
@@ -1096,11 +1118,12 @@ Note that the style variables are always made local to 
the buffer."
        ;; C-y is capable of spuriously converting category properties
        ;; c-</>-as-paren-syntax and c-cpp-delimiter into hard syntax-table
        ;; properties.  Remove these when it happens.
-       (c-clear-char-property-with-value beg end 'syntax-table
-                                         c-<-as-paren-syntax)
-       (c-clear-char-property-with-value beg end 'syntax-table
-                                         c->-as-paren-syntax)
-       (c-clear-char-property-with-value beg end 'syntax-table nil)
+       (when (eval-when-compile (memq 'category-properties c-emacs-features))
+         (c-clear-char-property-with-value beg end 'syntax-table
+                                           c-<-as-paren-syntax)
+         (c-clear-char-property-with-value beg end 'syntax-table
+                                           c->-as-paren-syntax)
+         (c-clear-char-property-with-value beg end 'syntax-table nil))
 
        (c-trim-found-types beg end old-len) ; maybe we don't need all of these.
        (c-invalidate-sws-region-after beg end)
@@ -1238,6 +1261,7 @@ This function is called from `c-common-init', once per 
mode initialization."
       (make-local-hook 'font-lock-mode-hook))
   (add-hook 'font-lock-mode-hook 'c-after-font-lock-init nil t))
 
+;; Emacs 22 and later.
 (defun c-extend-after-change-region (_beg _end _old-len)
   "Extend the region to be fontified, if necessary."
   ;; Note: the parameters are ignored here.  This somewhat indirect
@@ -1251,6 +1275,21 @@ This function is called from `c-common-init', once per 
mode initialization."
   ;; function.
   (cons c-new-BEG c-new-END))
 
+;; Emacs < 22 and XEmacs
+(defmacro c-advise-fl-for-region (function)
+  `(defadvice ,function (before get-awk-region activate)
+     ;; Make sure that any string/regexp is completely font-locked.
+     (when c-buffer-is-cc-mode
+       (save-excursion
+        (ad-set-arg 1 c-new-END)   ; end
+        (ad-set-arg 0 c-new-BEG)))))   ; beg
+
+(unless (boundp 'font-lock-extend-after-change-region-function)
+  (c-advise-fl-for-region font-lock-after-change-function)
+  (c-advise-fl-for-region jit-lock-after-change)
+  (c-advise-fl-for-region lazy-lock-defer-rest-after-change)
+  (c-advise-fl-for-region lazy-lock-defer-line-after-change))
+
 ;; Connect up to `electric-indent-mode' (Emacs 24.4 and later).
 (defun c-electric-indent-mode-hook ()
   ;; Emacs has en/disabled `electric-indent-mode'.  Propagate this through to
@@ -1779,4 +1818,8 @@ Key bindings:
 
 (cc-provide 'cc-mode)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-mode.el ends here
diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el
index 337ef92..9a29c01 100644
--- a/lisp/progmodes/cc-styles.el
+++ b/lisp/progmodes/cc-styles.el
@@ -1,6 +1,6 @@
 ;;; cc-styles.el --- support for styles in CC Mode
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    2004- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -165,8 +165,8 @@
      (c-offsets-alist . ((topmost-intro        . 0)
                         (substatement         . +)
                         (substatement-open    . 0)
-                         (case-label           . +)
-                         (access-label         . -)
+                        (case-label           . +)
+                        (access-label         . -)
                         (inclass              . +)
                         (inline-open          . 0))))
     ("linux"
@@ -209,15 +209,15 @@
      (c-offsets-alist . ((inline-open . 0)
                         (topmost-intro-cont    . +)
                         (statement-block-intro . +)
-                        (knr-argdecl-intro     . 5)
+                        (knr-argdecl-intro     . 5)
                         (substatement-open     . +)
                         (substatement-label    . +)
-                        (label                 . +)
-                        (statement-case-open   . +)
-                        (statement-cont        . +)
-                        (arglist-intro  . c-lineup-arglist-intro-after-paren)
-                        (arglist-close  . c-lineup-arglist)
-                        (access-label   . 0)
+                        (label                 . +)
+                        (statement-case-open   . +)
+                        (statement-cont        . +)
+                        (arglist-intro  . c-lineup-arglist-intro-after-paren)
+                        (arglist-close  . c-lineup-arglist)
+                        (access-label   . 0)
                         (inher-cont     . c-lineup-java-inher)
                         (func-decl-cont . c-lineup-java-throws))))
 
@@ -663,4 +663,8 @@ DEFAULT-STYLE has the same format as `c-default-style'."
 
 (cc-provide 'cc-styles)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-styles.el ends here
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index ac8dbfc..022bc22 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -1,6 +1,6 @@
 ;;; cc-vars.el --- user customization variables for CC Mode
 
-;; Copyright (C) 1985, 1987, 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:    2002- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -271,12 +271,13 @@ nil."
   :group 'c)
 ;;;###autoload(put 'c-basic-offset 'safe-local-variable 'integerp)
 
+
 (defcustom c-tab-always-indent t
   "*Controls the operation of the TAB key.
 If t, hitting TAB always just indents the current line.  If nil, hitting
 TAB indents the current line if point is at the left margin or in the
 line's indentation, otherwise it inserts a `real' tab character \(see
-note\).         If some other value (not nil or t), then tab is inserted only
+note\).  If some other value (not nil or t), then tab is inserted only
 within literals \(comments and strings), but the line is always
 reindented.
 
@@ -540,7 +541,7 @@ variable in a mode hook."
                  (const :format "IDL   " idl-mode) (regexp :format "%v"))
            (cons :format "%v"
                  (const :format "Pike  " pike-mode) (regexp :format "%v"))
-            (cons :format "%v"
+           (cons :format "%v"
                  (const :format "AWK   " awk-mode) (regexp :format "%v")))
           (cons :format "    %v"
                 (const :format "Other " other) (regexp :format "%v"))))
@@ -1175,7 +1176,7 @@ can always override the use of `c-default-style' by 
making calls to
        (objc-method-args-cont . c-lineup-ObjC-method-args)
        ;; Anchor pos: At the method start (always at boi).
        (objc-method-call-cont . (c-lineup-ObjC-method-call-colons
-                               c-lineup-ObjC-method-call +))
+                               c-lineup-ObjC-method-call +))
        ;; Anchor pos: At the open bracket.
        (extern-lang-open      . 0)
        (namespace-open        . 0)
@@ -1771,4 +1772,8 @@ It treats escaped EOLs as whitespace.")
 
 (cc-provide 'cc-vars)
 
+;;; Local Variables:
+;;; indent-tabs-mode: t
+;;; tab-width: 8
+;;; End:
 ;;; cc-vars.el ends here
diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el
index 53d5be9..aec7d20 100644
--- a/lisp/progmodes/cfengine.el
+++ b/lisp/progmodes/cfengine.el
@@ -1,6 +1,6 @@
 ;;; cfengine.el --- mode for editing Cfengine files
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Maintainer: Ted Zlatanov <address@hidden>
@@ -1350,7 +1350,8 @@ to the action header."
                  (when buffer-file-name
                    (shell-quote-argument buffer-file-name)))))
 
-  (setq-local eldoc-documentation-function #'cfengine3-documentation-function)
+  (add-function :before-until (local 'eldoc-documentation-function)
+                #'cfengine3-documentation-function)
 
   (add-hook 'completion-at-point-functions
             #'cfengine3-completion-function nil t)
diff --git a/lisp/progmodes/cmacexp.el b/lisp/progmodes/cmacexp.el
index ce5502a..357625d 100644
--- a/lisp/progmodes/cmacexp.el
+++ b/lisp/progmodes/cmacexp.el
@@ -1,6 +1,6 @@
 ;;; cmacexp.el --- expand C macros in a region
 
-;; Copyright (C) 1992, 1994, 1996, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1992, 1994, 1996, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Francesco Potortì <address@hidden>
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 5de2c6a..362bbf5 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1,6 +1,6 @@
 ;;; compile.el --- run compiler as inferior of Emacs, parse error messages
 
-;; Copyright (C) 1985-1987, 1993-1999, 2001-2014 Free Software
+;; Copyright (C) 1985-1987, 1993-1999, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Authors: Roland McGrath <address@hidden>,
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index cd60475..3b8742e 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -1,6 +1,6 @@
 ;;; cperl-mode.el --- Perl code editing commands for Emacs
 
-;; Copyright (C) 1985-1987, 1991-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1991-2015 Free Software Foundation, Inc.
 
 ;; Author: Ilya Zakharevich
 ;;     Bob Olson
diff --git a/lisp/progmodes/cpp.el b/lisp/progmodes/cpp.el
index c5fa539..bf8458e 100644
--- a/lisp/progmodes/cpp.el
+++ b/lisp/progmodes/cpp.el
@@ -1,6 +1,6 @@
 ;;; cpp.el --- highlight or hide text according to cpp conditionals
 
-;; Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Keywords: c, faces, tools
diff --git a/lisp/progmodes/cwarn.el b/lisp/progmodes/cwarn.el
index 1aa5170..2f501f2 100644
--- a/lisp/progmodes/cwarn.el
+++ b/lisp/progmodes/cwarn.el
@@ -1,6 +1,6 @@
 ;;; cwarn.el --- highlight suspicious C and C++ constructions
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren <address@hidden>
 ;; Keywords: c, languages, faces
diff --git a/lisp/progmodes/dcl-mode.el b/lisp/progmodes/dcl-mode.el
index 289ca3f..eab4ae8 100644
--- a/lisp/progmodes/dcl-mode.el
+++ b/lisp/progmodes/dcl-mode.el
@@ -1,6 +1,6 @@
 ;;; dcl-mode.el --- major mode for editing DCL command files
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Odd Gripenstam <address@hidden>
 ;; Maintainer: Odd Gripenstam <address@hidden>
diff --git a/lisp/progmodes/ebnf-abn.el b/lisp/progmodes/ebnf-abn.el
index 5363f61..d409139 100644
--- a/lisp/progmodes/ebnf-abn.el
+++ b/lisp/progmodes/ebnf-abn.el
@@ -1,6 +1,6 @@
 ;;; ebnf-abn.el --- parser for ABNF (Augmented BNF)
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/progmodes/ebnf-bnf.el b/lisp/progmodes/ebnf-bnf.el
index 848124b..e339818 100644
--- a/lisp/progmodes/ebnf-bnf.el
+++ b/lisp/progmodes/ebnf-bnf.el
@@ -1,6 +1,6 @@
 ;;; ebnf-bnf.el --- parser for EBNF
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/progmodes/ebnf-dtd.el b/lisp/progmodes/ebnf-dtd.el
index 5b41e14..35bd8df 100644
--- a/lisp/progmodes/ebnf-dtd.el
+++ b/lisp/progmodes/ebnf-dtd.el
@@ -1,6 +1,6 @@
 ;;; ebnf-dtd.el --- parser for DTD (Data Type Description for XML)
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/progmodes/ebnf-ebx.el b/lisp/progmodes/ebnf-ebx.el
index 607abd6..28058e3 100644
--- a/lisp/progmodes/ebnf-ebx.el
+++ b/lisp/progmodes/ebnf-ebx.el
@@ -1,6 +1,6 @@
 ;;; ebnf-ebx.el --- parser for EBNF used to specify XML (EBNFX)
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/progmodes/ebnf-iso.el b/lisp/progmodes/ebnf-iso.el
index e1bd1a1..2cbe901 100644
--- a/lisp/progmodes/ebnf-iso.el
+++ b/lisp/progmodes/ebnf-iso.el
@@ -1,6 +1,6 @@
 ;;; ebnf-iso.el --- parser for ISO EBNF
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/progmodes/ebnf-otz.el b/lisp/progmodes/ebnf-otz.el
index 0e8909c..3e5cf38 100644
--- a/lisp/progmodes/ebnf-otz.el
+++ b/lisp/progmodes/ebnf-otz.el
@@ -1,6 +1,6 @@
 ;;; ebnf-otz.el --- syntactic chart OpTimiZer
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/progmodes/ebnf-yac.el b/lisp/progmodes/ebnf-yac.el
index a72ca2c..d9e8a15 100644
--- a/lisp/progmodes/ebnf-yac.el
+++ b/lisp/progmodes/ebnf-yac.el
@@ -1,6 +1,6 @@
 ;;; ebnf-yac.el --- parser for Yacc/Bison
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el
index eb41916..a897f96 100644
--- a/lisp/progmodes/ebnf2ps.el
+++ b/lisp/progmodes/ebnf2ps.el
@@ -1,6 +1,6 @@
 ;;; ebnf2ps.el --- translate an EBNF to a syntactic chart on PostScript
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el
index 177c341..f91e4a7 100644
--- a/lisp/progmodes/ebrowse.el
+++ b/lisp/progmodes/ebrowse.el
@@ -1,6 +1,6 @@
 ;;; ebrowse.el --- Emacs C++ class browser & tags facility
 
-;; Copyright (C) 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2015 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 2be81a5..b2c5fbf 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -1,6 +1,6 @@
 ;;; elisp-mode.el --- Emacs Lisp mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1999-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: lisp, languages
@@ -227,10 +227,15 @@ Blank lines separate paragraphs.  Semicolons start 
comments.
 
 \\{emacs-lisp-mode-map}"
   :group 'lisp
+  (defvar xref-find-function)
+  (defvar xref-identifier-completion-table-function)
   (lisp-mode-variables nil nil 'elisp)
   (setq imenu-case-fold-search nil)
-  (setq-local eldoc-documentation-function
-              #'elisp-eldoc-documentation-function)
+  (add-function :before-until (local 'eldoc-documentation-function)
+                #'elisp-eldoc-documentation-function)
+  (setq-local xref-find-function #'elisp-xref-find)
+  (setq-local xref-identifier-completion-table-function
+              #'elisp--xref-identifier-completion-table)
   (add-hook 'completion-at-point-functions
             #'elisp-completion-at-point nil 'local))
 
@@ -293,7 +298,7 @@ Blank lines separate paragraphs.  Semicolons start comments.
       (let* ((sexp (condition-case nil
                        (car (read-from-string
                              (concat txt "elisp--witness--lisp" closer)))
-                     (end-of-file nil)))
+                     ((invalid-read-syntax end-of-file) nil)))
              (macroexpand-advice (lambda (expander form &rest args)
                                    (condition-case nil
                                        (apply expander form args)
@@ -413,6 +418,7 @@ It can be quoted, or be inside a quoted form."
          (match-string 0 doc))))
 
 (declare-function find-library-name "find-func" (library))
+(declare-function find-function-library "find-func" (function &optional l-o v))
 
 (defun elisp--company-location (str)
   (let ((sym (intern-soft str)))
@@ -467,11 +473,11 @@ It can be quoted, or be inside a quoted form."
                            :company-location #'elisp--company-location))
                     ((elisp--form-quoted-p beg)
                      (list nil obarray
-                           ;; Don't include all symbols
-                           ;; (bug#16646).
+                           ;; Don't include all symbols (bug#16646).
                            :predicate (lambda (sym)
                                         (or (boundp sym)
                                             (fboundp sym)
+                                            (featurep sym)
                                             (symbol-plist sym)))
                            :annotation-function
                            (lambda (str) (if (fboundp (intern-soft str)) " 
<f>"))
@@ -548,6 +554,79 @@ It can be quoted, or be inside a quoted form."
 (define-obsolete-function-alias
   'lisp-completion-at-point 'elisp-completion-at-point "25.1")
 
+;;; Xref backend
+
+(declare-function xref-make-elisp-location "xref" (symbol type file))
+(declare-function xref-make-bogus-location "xref" (message))
+(declare-function xref-make "xref" (description location))
+
+(defun elisp-xref-find (action id)
+  (require 'find-func)
+  (pcase action
+    (`definitions
+      (let ((sym (intern-soft id)))
+        (when sym
+          (elisp--xref-find-definitions sym))))
+    (`apropos
+     (elisp--xref-find-apropos id))))
+
+(defun elisp--xref-identifier-location (type sym)
+  (let ((file
+         (pcase type
+           (`defun (when (fboundp sym)
+                     (let ((fun-lib
+                            (find-function-library sym)))
+                       (setq sym (car fun-lib))
+                       (cdr fun-lib))))
+           (`defvar (when (boundp sym)
+                      (or (symbol-file sym 'defvar)
+                          (help-C-file-name sym 'var))))
+           (`feature (when (featurep sym)
+                       (ignore-errors
+                         (find-library-name (symbol-name sym)))))
+           (`defface (when (facep sym)
+                       (symbol-file sym 'defface))))))
+    (when file
+      (when (string-match-p "\\.elc\\'" file)
+        (setq file (substring file 0 -1)))
+      (xref-make-elisp-location sym type file))))
+
+(defun elisp--xref-find-definitions (symbol)
+  (save-excursion
+    (let (lst)
+      (dolist (type '(feature defface defvar defun))
+        (let ((loc
+               (condition-case err
+                   (elisp--xref-identifier-location type symbol)
+                 (error
+                  (xref-make-bogus-location (error-message-string err))))))
+          (when loc
+            (push
+             (xref-make (format "(%s %s)" type symbol)
+                        loc)
+             lst))))
+      lst)))
+
+(defun elisp--xref-find-apropos (regexp)
+  (apply #'nconc
+         (let (lst)
+           (dolist (sym (apropos-internal regexp))
+            (push (elisp--xref-find-definitions sym) lst))
+           (nreverse lst))))
+
+(defvar elisp--xref-identifier-completion-table
+  (apply-partially #'completion-table-with-predicate
+                   obarray
+                   (lambda (sym)
+                     (or (boundp sym)
+                         (fboundp sym)
+                         (featurep sym)
+                         (facep sym)))
+                   'strict))
+
+(defun elisp--xref-identifier-completion-table ()
+  elisp--xref-identifier-completion-table)
+
 ;;; Elisp Interaction mode
 
 (defvar lisp-interaction-mode-map
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index b89b4cf..b470352 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -1,6 +1,6 @@
 ;;; etags.el --- etags facility for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1988-1989, 1992-1996, 1998, 2000-2014 Free
+;; Copyright (C) 1985-1986, 1988-1989, 1992-1996, 1998, 2000-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Roland McGrath <address@hidden>
@@ -28,6 +28,7 @@
 
 (require 'ring)
 (require 'button)
+(require 'xref)
 
 ;;;###autoload
 (defvar tags-file-name nil
@@ -141,11 +142,8 @@ Otherwise, `find-tag-default' is used."
   :group 'etags
   :type '(choice (const nil) function))
 
-(defcustom find-tag-marker-ring-length 16
-  "Length of marker rings `find-tag-marker-ring' and `tags-location-ring'."
-  :group 'etags
-  :type 'integer
-  :version "20.3")
+(define-obsolete-variable-alias 'find-tag-marker-ring-length
+  'xref-marker-ring-length "25.1")
 
 (defcustom tags-tag-face 'default
   "Face for tags in the output of `tags-apropos'."
@@ -182,15 +180,18 @@ Example value:
                       (sexp :tag "Tags to search")))
   :version "21.1")
 
-(defvar find-tag-marker-ring (make-ring find-tag-marker-ring-length)
-  "Ring of markers which are locations from which \\[find-tag] was invoked.")
+(defvaralias 'find-tag-marker-ring 'xref--marker-ring)
+(make-obsolete-variable
+ 'find-tag-marker-ring
+ "use `xref-push-marker-stack' or `xref-pop-marker-stack' instead."
+ "25.1")
 
 (defvar default-tags-table-function nil
   "If non-nil, a function to choose a default tags file for a buffer.
 This function receives no arguments and should return the default
 tags table file to use for the current buffer.")
 
-(defvar tags-location-ring (make-ring find-tag-marker-ring-length)
+(defvar tags-location-ring (make-ring xref-marker-ring-length)
   "Ring of markers which are locations visited by \\[find-tag].
 Pop back to the last location with \\[negative-argument] \\[find-tag].")
 
@@ -307,7 +308,7 @@ file the tag was in."
     (save-excursion
       (or (visit-tags-table-buffer file)
          (signal 'file-error (list "Visiting tags table"
-                                   "file does not exist"
+                                   "No such file or directory"
                                    file)))
       ;; Set FILE to the expanded name.
       (setq file tags-file-name)))
@@ -713,15 +714,13 @@ Returns t if it visits a tags table, or nil if there are 
no more in the list."
   (interactive)
   ;; Clear out the markers we are throwing away.
   (let ((i 0))
-    (while (< i find-tag-marker-ring-length)
+    (while (< i xref-marker-ring-length)
       (if (aref (cddr tags-location-ring) i)
          (set-marker (aref (cddr tags-location-ring) i) nil))
-      (if (aref (cddr find-tag-marker-ring) i)
-         (set-marker (aref (cddr find-tag-marker-ring) i) nil))
       (setq i (1+ i))))
+  (xref-clear-marker-stack)
   (setq tags-file-name nil
-       tags-location-ring (make-ring find-tag-marker-ring-length)
-       find-tag-marker-ring (make-ring find-tag-marker-ring-length)
+       tags-location-ring (make-ring xref-marker-ring-length)
        tags-table-list nil
        tags-table-computed-list nil
        tags-table-computed-list-for nil
@@ -780,6 +779,7 @@ tags table and its (recursively) included tags tables."
        (quit (message "Tags completion table construction aborted.")
              (setq tags-completion-table nil)))))
 
+;;;###autoload
 (defun tags-lazy-completion-table ()
   (let ((buf (current-buffer)))
     (lambda (string pred action)
@@ -898,7 +898,7 @@ See documentation of variable `tags-file-name'."
              ;; Run the user's hook.  Do we really want to do this for pop?
              (run-hooks 'local-find-tag-hook))))
       ;; Record whence we came.
-      (ring-insert find-tag-marker-ring (point-marker))
+      (xref-push-marker-stack)
       (if (and next-p last-tag)
          ;; Find the same table we last used.
          (visit-tags-table-buffer 'same)
@@ -954,7 +954,6 @@ See documentation of variable `tags-file-name'."
        (switch-to-buffer buf)
       (error (pop-to-buffer buf)))
     (goto-char pos)))
-;;;###autoload (define-key esc-map "." 'find-tag)
 
 ;;;###autoload
 (defun find-tag-other-window (tagname &optional next-p regexp-p)
@@ -976,6 +975,7 @@ onto a ring and may be popped back to with \\[pop-tag-mark].
 Contrast this with the ring of marks gone to by the command.
 
 See documentation of variable `tags-file-name'."
+  (declare (obsolete xref-find-definitions-other-window "25.1"))
   (interactive (find-tag-interactive "Find tag other window: "))
 
   ;; This hair is to deal with the case where the tag is found in the
@@ -995,7 +995,6 @@ See documentation of variable `tags-file-name'."
                        ;; the window's point from the buffer.
                        (set-window-point (selected-window) tagpoint))
                      window-point)))
-;;;###autoload (define-key ctl-x-4-map "." 'find-tag-other-window)
 
 ;;;###autoload
 (defun find-tag-other-frame (tagname &optional next-p)
@@ -1017,10 +1016,10 @@ onto a ring and may be popped back to with 
\\[pop-tag-mark].
 Contrast this with the ring of marks gone to by the command.
 
 See documentation of variable `tags-file-name'."
+  (declare (obsolete xref-find-definitions-other-frame "25.1"))
   (interactive (find-tag-interactive "Find tag other frame: "))
   (let ((pop-up-frames t))
     (find-tag-other-window tagname next-p)))
-;;;###autoload (define-key ctl-x-5-map "." 'find-tag-other-frame)
 
 ;;;###autoload
 (defun find-tag-regexp (regexp &optional next-p other-window)
@@ -1040,29 +1039,15 @@ onto a ring and may be popped back to with 
\\[pop-tag-mark].
 Contrast this with the ring of marks gone to by the command.
 
 See documentation of variable `tags-file-name'."
+  (declare (obsolete xref-find-apropos "25.1"))
   (interactive (find-tag-interactive "Find tag regexp: " t))
   ;; We go through find-tag-other-window to do all the display hair there.
   (funcall (if other-window 'find-tag-other-window 'find-tag)
           regexp next-p t))
-;;;###autoload (define-key esc-map [?\C-.] 'find-tag-regexp)
-
-;;;###autoload (define-key esc-map "*" 'pop-tag-mark)
 
 ;;;###autoload
-(defun pop-tag-mark ()
-  "Pop back to where \\[find-tag] was last invoked.
+(defalias 'pop-tag-mark 'xref-pop-marker-stack)
 
-This is distinct from invoking \\[find-tag] with a negative argument
-since that pops a stack of markers at which tags were found, not from
-where they were found."
-  (interactive)
-  (if (ring-empty-p find-tag-marker-ring)
-      (error "No previous locations for find-tag invocation"))
-  (let ((marker (ring-remove find-tag-marker-ring 0)))
-    (switch-to-buffer (or (marker-buffer marker)
-                          (error "The marked buffer has been deleted")))
-    (goto-char (marker-position marker))
-    (set-marker marker nil nil)))
 
 (defvar tag-lines-already-matched nil
   "Matches remembered between calls.") ; Doc string: calls to what?
@@ -1804,6 +1789,7 @@ Two variables control the processing we do on each file: 
the value of
 interesting (it returns non-nil if so) and `tags-loop-operate' is a form to
 evaluate to operate on an interesting file.  If the latter evaluates to
 nil, we exit; otherwise we scan the next file."
+  (declare (obsolete "use `xref-find-definitions' interface instead." "25.1"))
   (interactive)
   (let (new
        ;; Non-nil means we have finished one file
@@ -1859,7 +1845,6 @@ nil, we exit; otherwise we scan the next file."
     (and messaged
         (null tags-loop-operate)
         (message "Scanning file %s...found" buffer-file-name))))
-;;;###autoload (define-key esc-map "," 'tags-loop-continue)
 
 ;;;###autoload
 (defun tags-search (regexp &optional file-list-form)
@@ -1948,6 +1933,7 @@ directory specification."
 ;;;###autoload
 (defun tags-apropos (regexp)
   "Display list of all tags in tags table REGEXP matches."
+  (declare (obsolete xref-find-apropos "25.1"))
   (interactive "sTags apropos (regexp): ")
   (with-output-to-temp-buffer "*Tags List*"
     (princ "Click mouse-2 to follow tags.\n\nTags matching regexp `")
@@ -2077,6 +2063,72 @@ for \\[find-tag] (which see)."
       (completion-in-region (car comp-data) (cadr comp-data)
                            (nth 2 comp-data)
                            (plist-get (nthcdr 3 comp-data) :predicate)))))
+
+
+;;; Xref backend
+
+;; Stop searching if we find more than xref-limit matches, as the xref
+;; infrastructure is not designed to handle very long lists.
+;; Switching to some kind of lazy list might be better, but hopefully
+;; we hit the limit rarely.
+(defconst etags--xref-limit 1000)
+
+;;;###autoload
+(defun etags-xref-find (action id)
+  (pcase action
+    (`definitions (etags--xref-find-definitions id))
+    (`apropos (etags--xref-find-definitions id t))))
+
+(defun etags--xref-find-definitions (pattern &optional regexp?)
+  ;; This emulates the behaviour of `find-tag-in-order' but instead of
+  ;; returning one match at a time all matches are returned as list.
+  ;; NOTE: find-tag-tag-order is typically a buffer-local variable.
+  (let* ((xrefs '())
+         (first-time t)
+         (search-fun (if regexp? #'re-search-forward #'search-forward))
+         (marks (make-hash-table :test 'equal))
+         (case-fold-search (if (memq tags-case-fold-search '(nil t))
+                               tags-case-fold-search
+                             case-fold-search)))
+    (save-excursion
+      (while (visit-tags-table-buffer (not first-time))
+        (setq first-time nil)
+        (dolist (order-fun (cond (regexp? find-tag-regexp-tag-order)
+                                 (t find-tag-tag-order)))
+          (goto-char (point-min))
+          (while (and (funcall search-fun pattern nil t)
+                      (< (hash-table-count marks) etags--xref-limit))
+            (when (funcall order-fun pattern)
+              (beginning-of-line)
+              (pcase-let* ((tag-info (etags-snarf-tag))
+                           (`(,hint ,line . _) tag-info))
+                (unless (eq hint t) ; hint==t if we are in a filename line
+                  (let* ((file (file-of-tag))
+                         (mark-key (cons file line)))
+                    (unless (gethash mark-key marks)
+                      (let ((loc (xref-make-etags-location
+                                  tag-info (expand-file-name file))))
+                        (push (xref-make hint loc) xrefs)
+                        (puthash mark-key t marks)))))))))))
+    (nreverse xrefs)))
+
+(defclass xref-etags-location (xref-location)
+  ((tag-info :type list   :initarg :tag-info)
+   (file     :type string :initarg :file
+             :reader xref-location-group))
+  :documentation "Location of an etags tag.")
+
+(defun xref-make-etags-location (tag-info file)
+  (make-instance 'xref-etags-location :tag-info tag-info
+                 :file (expand-file-name file)))
+
+(cl-defmethod xref-location-marker ((l xref-etags-location))
+  (with-slots (tag-info file) l
+    (let ((buffer (find-file-noselect file)))
+      (with-current-buffer buffer
+        (etags-goto-tag-location tag-info)
+        (point-marker)))))
+
 
 (provide 'etags)
 
diff --git a/lisp/progmodes/executable.el b/lisp/progmodes/executable.el
index 9891598..bdc6403 100644
--- a/lisp/progmodes/executable.el
+++ b/lisp/progmodes/executable.el
@@ -1,6 +1,6 @@
 ;;; executable.el --- base functionality for executable interpreter scripts 
-*- byte-compile-dynamic: t -*-
 
-;; Copyright (C) 1994-1996, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <address@hidden>
 ;; Keywords: languages, unix
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el
index c7f018f..aeb4dde 100644
--- a/lisp/progmodes/f90.el
+++ b/lisp/progmodes/f90.el
@@ -1,6 +1,6 @@
 ;;; f90.el --- Fortran-90 mode (free format)  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1995-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Torbjörn Einarsson <address@hidden>
 ;; Maintainer: Glenn Morris <address@hidden>
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 10aed7d..696ab52 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -1,6 +1,6 @@
 ;;; flymake.el --- a universal on-the-fly syntax checker  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author:  Pavel Kobyakov <address@hidden>
 ;; Maintainer: Leo Liu <address@hidden>
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el
index cf324b4..c0d4454 100644
--- a/lisp/progmodes/fortran.el
+++ b/lisp/progmodes/fortran.el
@@ -1,6 +1,6 @@
 ;;; fortran.el --- Fortran mode for GNU Emacs
 
-;; Copyright (C) 1986, 1993-1995, 1997-2014 Free Software Foundation,
+;; Copyright (C) 1986, 1993-1995, 1997-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Michael D. Prange <address@hidden>
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 0c81a85..27846ed 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -1,6 +1,6 @@
 ;;; gdb-mi.el --- User Interface for running GDB  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Nick Roberts <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/progmodes/glasses.el b/lisp/progmodes/glasses.el
index 23fced7..257c3d2 100644
--- a/lisp/progmodes/glasses.el
+++ b/lisp/progmodes/glasses.el
@@ -1,6 +1,6 @@
 ;;; glasses.el --- make cantReadThis readable
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Milan Zamazal <address@hidden>
 ;; Maintainer: Milan Zamazal <address@hidden>
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index fd48adc..048fa11 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -1,6 +1,7 @@
 ;;; grep.el --- run `grep' and display the results  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1987, 1993-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1993-1999, 2001-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Roland McGrath <address@hidden>
 ;; Maintainer: address@hidden
@@ -556,6 +557,18 @@ This function is called from `compilation-filter-hook'."
                        (looking-at
                         (concat (regexp-quote hello-file)
                                 ":[0-9]+:English")))))))))
+
+    (when (eq grep-highlight-matches 'auto-detect)
+      (setq grep-highlight-matches
+           (with-temp-buffer
+             (and (grep-probe grep-program '(nil t nil "--help"))
+                  (progn
+                    (goto-char (point-min))
+                    (search-forward "--color" nil t))
+                  ;; Windows and DOS pipes fail `isatty' detection in Grep.
+                  (if (memq system-type '(windows-nt ms-dos))
+                      'always 'auto)))))
+
     (unless (and grep-command grep-find-command
                 grep-template grep-find-template)
       (let ((grep-options
@@ -632,16 +645,6 @@ This function is called from `compilation-filter-hook'."
                        (t
                         (format "%s . <X> -type f <F> -print | \"%s\" %s"
                                 find-program xargs-program gcmd))))))))
-    (when (eq grep-highlight-matches 'auto-detect)
-      (setq grep-highlight-matches
-           (with-temp-buffer
-             (and (grep-probe grep-program '(nil t nil "--help"))
-                  (progn
-                    (goto-char (point-min))
-                    (search-forward "--color" nil t))
-                  ;; Windows and DOS pipes fail `isatty' detection in Grep.
-                  (if (memq system-type '(windows-nt ms-dos))
-                      'always 'auto)))))
 
     ;; Save defaults for this host.
     (setq grep-host-defaults-alist
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 24d5469..42c5b20 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -1,6 +1,6 @@
 ;;; gud.el --- Grand Unified Debugger mode for running GDB and other debuggers
 
-;; Copyright (C) 1992-1996, 1998, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1992-1996, 1998, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric S. Raymond <address@hidden>
@@ -803,8 +803,7 @@ directory and source-file directory for your debugger."
   "Completion table for GDB commands.
 COMMAND is the prefix for which we seek completion.
 CONTEXT is the text before COMMAND on the line."
-  (let* ((start (- (point) (field-beginning)))
-         (complete-list
+  (let* ((complete-list
          (gud-gdb-run-command-fetch-lines (concat "complete " context command)
                                           (current-buffer)
                                           ;; From string-match above.
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index cda421f..7f2fd92 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -1,6 +1,6 @@
 ;;; hideif.el --- hides selected code within ifdef  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1988, 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Brian Marick
 ;;     Daniel LaLiberte <address@hidden>
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el
index a016c32..fb4d445 100644
--- a/lisp/progmodes/hideshow.el
+++ b/lisp/progmodes/hideshow.el
@@ -1,6 +1,6 @@
 ;;; hideshow.el --- minor mode cmds to selectively display code/comment blocks 
-*- coding: utf-8 -*-
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Thien-Thi Nguyen <address@hidden>
 ;;      Dan Nicolaescu <address@hidden>
diff --git a/lisp/progmodes/icon.el b/lisp/progmodes/icon.el
index 88c0a01..b716e7d 100644
--- a/lisp/progmodes/icon.el
+++ b/lisp/progmodes/icon.el
@@ -1,6 +1,6 @@
 ;;; icon.el --- mode for editing Icon code
 
-;; Copyright (C) 1989, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Chris Smith <address@hidden>
 ;; Created: 15 Feb 89
diff --git a/lisp/progmodes/idlw-complete-structtag.el 
b/lisp/progmodes/idlw-complete-structtag.el
index 6cb04a0..a9ddeba 100644
--- a/lisp/progmodes/idlw-complete-structtag.el
+++ b/lisp/progmodes/idlw-complete-structtag.el
@@ -1,6 +1,6 @@
 ;;; idlw-complete-structtag.el --- Completion of structure tags.
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: J.D. Smith <address@hidden>
diff --git a/lisp/progmodes/idlw-help.el b/lisp/progmodes/idlw-help.el
index 3d42fe2..c411139 100644
--- a/lisp/progmodes/idlw-help.el
+++ b/lisp/progmodes/idlw-help.el
@@ -1,6 +1,6 @@
 ;;; idlw-help.el --- HTML Help code for IDLWAVE
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 ;;
 ;; Authors: J.D. Smith <address@hidden>
 ;;          Carsten Dominik <address@hidden>
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el
index 876695b..40c40ee 100644
--- a/lisp/progmodes/idlw-shell.el
+++ b/lisp/progmodes/idlw-shell.el
@@ -1,6 +1,6 @@
 ;; idlw-shell.el --- run IDL as an inferior process of Emacs.
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Authors: J.D. Smith <address@hidden>
 ;;          Carsten Dominik <address@hidden>
diff --git a/lisp/progmodes/idlw-toolbar.el b/lisp/progmodes/idlw-toolbar.el
index 45672be..89284ca 100644
--- a/lisp/progmodes/idlw-toolbar.el
+++ b/lisp/progmodes/idlw-toolbar.el
@@ -1,6 +1,6 @@
 ;;; idlw-toolbar.el --- a debugging toolbar for IDLWAVE
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: J.D. Smith <address@hidden>
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index e66c9655..7e269cb 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -1,6 +1,6 @@
 ;; idlwave.el --- IDL editing mode for GNU Emacs
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Authors: J.D. Smith <address@hidden>
 ;;          Carsten Dominik <address@hidden>
@@ -3713,7 +3713,7 @@ expression to enter.
 The lines containing S1 and S2 are reindented using `indent-region'
 unless the optional second argument NOINDENT is non-nil."
   (if (derived-mode-p 'idlwave-shell-mode)
-      ;; This is a gross hack to avoit template abbrev expansion
+      ;; This is a gross hack to avoid template abbrev expansion
       ;; in the shell.  FIXME: This is a dirty hack.
       (if (and (eq this-command 'self-insert-command)
               (equal last-abbrev-location (point)))
diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el
index ba64ae3..cdedbce 100644
--- a/lisp/progmodes/inf-lisp.el
+++ b/lisp/progmodes/inf-lisp.el
@@ -1,6 +1,6 @@
 ;;; inf-lisp.el --- an inferior-lisp mode
 
-;; Copyright (C) 1988, 1993-1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1988, 1993-1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Olin Shivers <address@hidden>
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index d7017e9..c25e52c 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -1,6 +1,6 @@
 ;;; js.el --- Major mode for editing JavaScript  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Karl Landstrom <address@hidden>
 ;;         Daniel Colascione <address@hidden>
@@ -248,7 +248,7 @@ name as matched contains
 
 (defconst js--function-heading-1-re
   (concat
-   "^\\s-*function\\s-+\\(" js--name-re "\\)")
+   "^\\s-*function\\(?:\\s-\\|\\*\\)+\\(" js--name-re "\\)")
   "Regexp matching the start of a JavaScript function header.
 Match group 1 is the name of the function.")
 
@@ -796,6 +796,9 @@ determined.  Otherwise, return nil."
   (let ((name t))
     (forward-word)
     (forward-comment most-positive-fixnum)
+    (when (eq (char-after) ?*)
+      (forward-char)
+      (forward-comment most-positive-fixnum))
     (when (looking-at js--name-re)
       (setq name (match-string-no-properties 0))
       (goto-char (match-end 0)))
@@ -1637,12 +1640,29 @@ This performs fontification according to 
`js--class-styles'."
                                    js--font-lock-keywords-3)
   "Font lock keywords for `js-mode'.  See `font-lock-keywords'.")
 
+(defconst js--syntax-propertize-regexp-syntax-table
+  (let ((st (make-char-table 'syntax-table (string-to-syntax "."))))
+    (modify-syntax-entry ?\[ "(]" st)
+    (modify-syntax-entry ?\] ")[" st)
+    (modify-syntax-entry ?\\ "\\" st)
+    st))
+
 (defun js-syntax-propertize-regexp (end)
-  (when (eq (nth 3 (syntax-ppss)) ?/)
-    ;; A /.../ regexp.
-    (when (re-search-forward "\\(?:\\=\\|[^\\]\\)\\(?:\\\\\\\\\\)*/" end 'move)
-      (put-text-property (1- (point)) (point)
-                         'syntax-table (string-to-syntax "\"/")))))
+  (let ((ppss (syntax-ppss)))
+    (when (eq (nth 3 ppss) ?/)
+      ;; A /.../ regexp.
+      (while
+          (when (re-search-forward "\\(?:\\=\\|[^\\]\\)\\(?:\\\\\\\\\\)*/"
+                                   end 'move)
+            (if (nth 1 (with-syntax-table
+                           js--syntax-propertize-regexp-syntax-table
+                         (let ((parse-sexp-lookup-properties nil))
+                           (parse-partial-sexp (nth 8 ppss) (point)))))
+                ;; A / within a character class is not the end of a regexp.
+                t
+              (put-text-property (1- (point)) (point)
+                                 'syntax-table (string-to-syntax "\"/"))
+              nil))))))
 
 (defun js-syntax-propertize (start end)
   ;; Javascript allows immediate regular expression objects, written /.../.
@@ -1656,7 +1676,7 @@ This performs fontification according to 
`js--class-styles'."
     ;; We can probably just add +, -, !, <, >, %, ^, ~, |, &, ?, : at which
     ;; point I think only * and / would be missing which could also be added,
     ;; but need care to avoid affecting the // and */ comment markers.
-    ("\\(?:^\\|[=([{,:;]\\)\\(?:[ \t]\\)*\\(/\\)[^/*]"
+    ("\\(?:^\\|[=([{,:;]\\|\\_<return\\_>\\)\\(?:[ \t]\\)*\\(/\\)[^/*]"
      (1 (ignore
         (forward-char -1)
          (when (or (not (memq (char-after (match-beginning 0)) '(?\s ?\t)))
@@ -1685,7 +1705,7 @@ This performs fontification according to 
`js--class-styles'."
   "Regular expression matching variable declaration keywords.")
 
 (defconst js--indent-operator-re
-  (concat "[-+*/%<>=&^|?:.]\\([^-+*/]\\|$\\)\\|"
+  (concat "[-+*/%<>&^|?:.]\\([^-+*/]\\|$\\)\\|!?=\\|"
           (js--regexp-opt-symbol '("in" "instanceof")))
   "Regexp matching operators that affect indentation of continued 
expressions.")
 
@@ -1712,7 +1732,7 @@ This performs fontification according to 
`js--class-styles'."
                     (save-excursion (backward-char) (not (looking-at "[/*]/")))
                     (js--looking-at-operator-p)
                    (and (progn (backward-char)
-                               (not (looking-at "++\\|--\\|/[/*]"))))))))))
+                               (not (looking-at "+\\+\\|--\\|/[/*]"))))))))))
 
 
 (defun js--end-of-do-while-loop-p ()
diff --git a/lisp/progmodes/ld-script.el b/lisp/progmodes/ld-script.el
index 430dd5f..0c180df 100644
--- a/lisp/progmodes/ld-script.el
+++ b/lisp/progmodes/ld-script.el
@@ -1,6 +1,6 @@
 ;;; ld-script.el --- GNU linker script editing mode for Emacs
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Masatake YAMATO<address@hidden>
 ;; Keywords: languages, faces
diff --git a/lisp/progmodes/m4-mode.el b/lisp/progmodes/m4-mode.el
index 573acf4..511b254 100644
--- a/lisp/progmodes/m4-mode.el
+++ b/lisp/progmodes/m4-mode.el
@@ -1,6 +1,6 @@
 ;;; m4-mode.el --- m4 code editing commands for Emacs
 
-;; Copyright (C) 1996-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Andrew Csillag <address@hidden>
 ;; Maintainer: Andrew Csillag <address@hidden>
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el
index 30d9f45..fc0be60 100644
--- a/lisp/progmodes/make-mode.el
+++ b/lisp/progmodes/make-mode.el
@@ -1,6 +1,6 @@
 ;;; make-mode.el --- makefile editing commands for Emacs -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1992, 1994, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1994, 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Thomas Neumann <address@hidden>
 ;;     Eric S. Raymond <address@hidden>
diff --git a/lisp/progmodes/mantemp.el b/lisp/progmodes/mantemp.el
index 01396c3..6b92c7e 100644
--- a/lisp/progmodes/mantemp.el
+++ b/lisp/progmodes/mantemp.el
@@ -1,6 +1,6 @@
 ;;; mantemp.el --- create manual template instantiations from g++ 2.7.2 output
 
-;; Copyright (C) 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Tom Houlder <address@hidden>
 ;; Created: 10 Dec 1996
diff --git a/lisp/progmodes/meta-mode.el b/lisp/progmodes/meta-mode.el
index 3171867..62ff2fa 100644
--- a/lisp/progmodes/meta-mode.el
+++ b/lisp/progmodes/meta-mode.el
@@ -1,6 +1,6 @@
 ;;; meta-mode.el --- major mode for editing Metafont or MetaPost sources -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Ulrik Vieth <address@hidden>
 ;; Version: 1.0
diff --git a/lisp/progmodes/mixal-mode.el b/lisp/progmodes/mixal-mode.el
index f8b497e..c953157 100644
--- a/lisp/progmodes/mixal-mode.el
+++ b/lisp/progmodes/mixal-mode.el
@@ -1,6 +1,6 @@
 ;;; mixal-mode.el --- Major mode for the mix asm language.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Pieter E.J. Pareit <address@hidden>
 ;; Maintainer: Pieter E.J. Pareit <address@hidden>
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el
index 25b0815..8541cce 100644
--- a/lisp/progmodes/octave.el
+++ b/lisp/progmodes/octave.el
@@ -1,6 +1,6 @@
 ;;; octave.el --- editing octave source files under emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Kurt Hornik <address@hidden>
 ;;        John Eaton <address@hidden>
@@ -45,13 +45,13 @@
     (defun completion-table-with-cache (fun &optional ignore-case)
       ;; See eg bug#11906.
       (let* (last-arg last-result
-                      (new-fun
-                       (lambda (arg)
-                         (if (and last-arg (string-prefix-p last-arg arg 
ignore-case))
-                             last-result
-                           (prog1
-                               (setq last-result (funcall fun arg))
-                             (setq last-arg arg))))))
+             (new-fun
+              (lambda (arg)
+                (if (and last-arg (string-prefix-p last-arg arg ignore-case))
+                    last-result
+                  (prog1
+                      (setq last-result (funcall fun arg))
+                    (setq last-arg arg))))))
         (completion-table-dynamic new-fun)))))
 (eval-when-compile
   (unless (fboundp 'setq-local)
@@ -601,7 +601,8 @@ Key bindings:
   (add-hook 'before-save-hook 'octave-sync-function-file-names nil t)
   (setq-local beginning-of-defun-function 'octave-beginning-of-defun)
   (and octave-font-lock-texinfo-comment (octave-font-lock-texinfo-comment))
-  (setq-local eldoc-documentation-function 'octave-eldoc-function)
+  (add-function :before-until (local 'eldoc-documentation-function)
+                'octave-eldoc-function)
 
   (easy-menu-add octave-mode-menu))
 
diff --git a/lisp/progmodes/opascal.el b/lisp/progmodes/opascal.el
index 2f3704b..2eba620 100644
--- a/lisp/progmodes/opascal.el
+++ b/lisp/progmodes/opascal.el
@@ -1,6 +1,6 @@
 ;;; opascal.el --- major mode for editing Object Pascal source in Emacs  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Authors: Ray Blaak <address@hidden>,
 ;;          Simon South <address@hidden>
diff --git a/lisp/progmodes/pascal.el b/lisp/progmodes/pascal.el
index f32d464..c05bda5 100644
--- a/lisp/progmodes/pascal.el
+++ b/lisp/progmodes/pascal.el
@@ -1,6 +1,6 @@
 ;;; pascal.el --- major mode for editing pascal source in Emacs -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2015 Free Software Foundation, Inc.
 
 ;; Author: Espen Skoglund <address@hidden>
 ;; Keywords: languages
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index b4a96e7..a64944f 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -1,6 +1,6 @@
 ;;; perl-mode.el --- Perl code editing commands for GNU Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990, 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: William F. Mann
 ;; Maintainer: address@hidden
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index 5037020..0d9fabd 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -1,6 +1,6 @@
 ;;; prog-mode.el --- Generic major mode for programming  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
@@ -73,11 +73,13 @@ Regexp match data 0 points to the chars."
   ;; Check that the chars should really be composed into a symbol.
   (let* ((start (match-beginning 0))
         (end (match-end 0))
-        (syntaxes (if (eq (char-syntax (char-after start)) ?w)
+        (syntaxes-beg (if (memq (char-syntax (char-after start)) '(?w ?_))
+                           '(?w ?_) '(?. ?\\)))
+        (syntaxes-end (if (memq (char-syntax (char-before end)) '(?w ?_))
                       '(?w ?_) '(?. ?\\)))
         match)
-    (if (or (memq (char-syntax (or (char-before start) ?\s)) syntaxes)
-           (memq (char-syntax (or (char-after end) ?\s)) syntaxes)
+    (if (or (memq (char-syntax (or (char-before start) ?\s)) syntaxes-beg)
+           (memq (char-syntax (or (char-after end) ?\s)) syntaxes-end)
             ;; syntax-ppss could modify the match data (bug#14595)
             (progn (setq match (match-string 0)) (nth 8 (syntax-ppss))))
        ;; No composition for you.  Let's actually remove any composition
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el
index 3f98708..2d95345 100644
--- a/lisp/progmodes/prolog.el
+++ b/lisp/progmodes/prolog.el
@@ -1,6 +1,6 @@
 ;;; prolog.el --- major mode for Prolog (and Mercury) -*- lexical-binding:t -*-
 
-;; Copyright (C) 1986-1987, 1997-1999, 2002-2003, 2011-2014 Free
+;; Copyright (C) 1986-1987, 1997-1999, 2002-2003, 2011-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Authors: Emil Åström <emil_astrom(at)hotmail(dot)com>
diff --git a/lisp/progmodes/ps-mode.el b/lisp/progmodes/ps-mode.el
index 9d74c40..077be53 100644
--- a/lisp/progmodes/ps-mode.el
+++ b/lisp/progmodes/ps-mode.el
@@ -1,6 +1,6 @@
 ;;; ps-mode.el --- PostScript mode for GNU Emacs
 
-;; Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author:     Peter Kleiweg <address@hidden>
 ;; Maintainer: Peter Kleiweg <address@hidden>
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 3e204a9..d340550 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1,6 +1,6 @@
 ;;; python.el --- Python's flying circus support for Emacs -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Fabián E. Gallina <address@hidden>
 ;; URL: https://github.com/fgallina/python.el
@@ -69,7 +69,7 @@
 ;; Besides that only the standard CPython (2.x and 3.x) shell and
 ;; IPython are officially supported out of the box, the interaction
 ;; should support any other readline based Python shells as well
-;; (e.g. Jython and Pypy have been reported to work).  You can change
+;; (e.g. Jython and PyPy have been reported to work).  You can change
 ;; your default interpreter and commandline arguments by setting the
 ;; `python-shell-interpreter' and `python-shell-interpreter-args'
 ;; variables.  This example enables IPython globally:
@@ -94,13 +94,13 @@
 ;;       python-shell-interpreter-args
 ;;       "-i C:\\Python27\\Scripts\\ipython-script.py")
 
-;; If you are experiencing missing or delayed output in your shells,
-;; that's likely caused by your Operating System's pipe buffering
-;; (e.g. this is known to happen running CPython 3.3.4 in Windows 7.
+;; Missing or delayed output used to happen due to differences between
+;; Operating Systems' pipe buffering (e.g. CPython 3.3.4 in Windows 7.
 ;; See URL `http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17304').  To
-;; fix this, using CPython's "-u" commandline argument or setting the
-;; "PYTHONUNBUFFERED" environment variable should help: See URL
-;; `https://docs.python.org/3/using/cmdline.html#cmdoption-u'.
+;; avoid this, the `python-shell-unbuffered' defaults to non-nil and
+;; controls whether `python-shell-calculate-process-environment'
+;; should set the "PYTHONUNBUFFERED" environment variable on startup:
+;; See URL `https://docs.python.org/3/using/cmdline.html#cmdoption-u'.
 
 ;; The interaction relies upon having prompts for input (e.g. ">>> "
 ;; and "... " in standard Python shell) and output (e.g. "Out[1]: " in
@@ -119,18 +119,24 @@
 ;; modify its behavior.
 
 ;; Shell completion: hitting tab will try to complete the current
-;; word.  Shell completion is implemented in such way that if you
-;; change the `python-shell-interpreter' it should be possible to
-;; integrate custom logic to calculate completions.  To achieve this
-;; you just need to set `python-shell-completion-setup-code' and
-;; `python-shell-completion-string-code'.  The default provided code,
-;; enables autocompletion for both CPython and IPython (and ideally
-;; any readline based Python shell).  This code depends on the
-;; readline module, so if you are using some Operating System that
-;; bundles Python without it (like Windows), installing pyreadline
-;; from URL `http://ipython.scipy.org/moin/PyReadline/Intro' should
-;; suffice.  To troubleshoot why you are not getting any completions
-;; you can try the following in your Python shell:
+;; word.  The two built-in mechanisms depend on Python's readline
+;; module: the "native" completion is tried first and is activated
+;; when `python-shell-completion-native-enable' is non-nil, the
+;; current `python-shell-interpreter' is not a member of the
+;; `python-shell-completion-native-disabled-interpreters' variable and
+;; `python-shell-completion-native-setup' succeeds; the "fallback" or
+;; "legacy" mechanism works by executing Python code in the background
+;; and enables auto-completion for shells that do not support
+;; receiving escape sequences (with some limitations, i.e. completion
+;; in blocks does not work).  The code executed for the "fallback"
+;; completion can be found in `python-shell-completion-setup-code' and
+;; `python-shell-completion-string-code' variables.  Their default
+;; values enable completion for both CPython and IPython, and probably
+;; any readline based shell (it's known to work with PyPy).  If your
+;; Python installation lacks readline (like CPython for Windows),
+;; installing pyreadline (URL `http://ipython.org/pyreadline.html')
+;; should suffice.  To troubleshoot why you are not getting any
+;; completions, you can try the following in your Python shell:
 
 ;; >>> import readline, rlcompleter
 
@@ -217,11 +223,13 @@
 ;; `python-imenu-format-parent-item-jump-label-function' variables for
 ;; changing the way labels are formatted in the tree version.
 
-;; If you used python-mode.el you probably will miss auto-indentation
-;; when inserting newlines.  To achieve the same behavior you have
-;; two options:
+;; If you used python-mode.el you may miss auto-indentation when
+;; inserting newlines.  To achieve the same behavior you have two
+;; options:
 
-;; 1) Use GNU/Emacs' standard binding for `newline-and-indent': C-j.
+;; 1) Enable the minor-mode `electric-indent-mode' (enabled by
+;;    default) and use RET.  If this mode is disabled use
+;;    `newline-and-indent', bound to C-j.
 
 ;; 2) Add the following hook in your .emacs:
 
@@ -254,6 +262,7 @@
 (defvar outline-heading-end-regexp)
 
 (autoload 'comint-mode "comint")
+(autoload 'help-function-arglist "help-fns")
 
 ;;;###autoload
 (add-to-list 'auto-mode-alist (cons (purecopy "\\.py\\'")  'python-mode))
@@ -393,7 +402,18 @@
                                          (* ?\\ ?\\) (any ?\' ?\")))
                                 (* ?\\ ?\\)
                                 ;; Match single or triple quotes of any kind.
-                                (group (or  "\"" "\"\"\"" "'" "'''"))))))
+                                (group (or  "\"" "\"\"\"" "'" "'''")))))
+      (coding-cookie . ,(rx line-start ?# (* space)
+                            (or
+                             ;; # coding=<encoding name>
+                             (: "coding" (or ?: ?=) (* space) (group-n 1 (+ 
(or word ?-))))
+                             ;; # -*- coding: <encoding name> -*-
+                             (: "-*-" (* space) "coding:" (* space)
+                                (group-n 1 (+ (or word ?-))) (* space) "-*-")
+                             ;; # vim: set fileencoding=<encoding name> :
+                             (: "vim:" (* space) "set" (+ space)
+                                "fileencoding" (* space) ?= (* space)
+                                (group-n 1 (+ (or word ?-))) (* space) ":")))))
     "Additional Python specific sexps for `python-rx'")
 
   (defmacro python-rx (&rest regexps)
@@ -443,9 +463,14 @@ The type returned can be `comment', `string' or `paren'."
      ((nth 8 ppss) (if (nth 4 ppss) 'comment 'string))
      ((nth 1 ppss) 'paren))))
 
-(defsubst python-syntax-comment-or-string-p ()
-  "Return non-nil if point is inside 'comment or 'string."
-  (nth 8 (syntax-ppss)))
+(defsubst python-syntax-comment-or-string-p (&optional ppss)
+  "Return non-nil if PPSS is inside 'comment or 'string."
+  (nth 8 (or ppss (syntax-ppss))))
+
+(defsubst python-syntax-closing-paren-p ()
+  "Return non-nil if char after point is a closing paren."
+  (= (syntax-class (syntax-after (point)))
+     (syntax-class (string-to-syntax ")"))))
 
 (define-obsolete-function-alias
   'python-info-ppss-context #'python-syntax-context "24.3")
@@ -457,6 +482,23 @@ The type returned can be `comment', `string' or `paren'."
   'python-info-ppss-comment-or-string-p
   #'python-syntax-comment-or-string-p "24.3")
 
+(defun python-docstring-at-p (pos)
+  "Check to see if there is a docstring at POS."
+  (save-excursion
+    (goto-char pos)
+    (if (looking-at-p "'''\\|\"\"\"")
+        (progn
+          (python-nav-backward-statement)
+          (looking-at "\\`\\|class \\|def "))
+      nil)))
+
+(defun python-font-lock-syntactic-face-function (state)
+  (if (nth 3 state)
+      (if (python-docstring-at-p (nth 8 state))
+          font-lock-doc-face
+        font-lock-string-face)
+    font-lock-comment-face))
+
 (defvar python-font-lock-keywords
   ;; Keywords
   `(,(rx symbol-start
@@ -667,10 +709,28 @@ It makes underscores and dots word constituent chars.")
   'python-guess-indent 'python-indent-guess-indent-offset "24.3")
 
 (defvar python-indent-current-level 0
-  "Current indentation level `python-indent-line-function' is using.")
+  "Deprecated var available for compatibility.")
 
 (defvar python-indent-levels '(0)
-  "Levels of indentation available for `python-indent-line-function'.")
+  "Deprecated var available for compatibility.")
+
+(make-obsolete-variable
+ 'python-indent-current-level
+ "The indentation API changed to avoid global state.
+The function `python-indent-calculate-levels' does not use it
+anymore.  If you were defadvising it and or depended on this
+variable for indentation customizations, refactor your code to
+work on `python-indent-calculate-indentation' instead."
+ "24.5")
+
+(make-obsolete-variable
+ 'python-indent-levels
+ "The indentation API changed to avoid global state.
+The function `python-indent-calculate-levels' does not use it
+anymore.  If you were defadvising it and or depended on this
+variable for indentation customizations, refactor your code to
+work on `python-indent-calculate-indentation' instead."
+ "24.5")
 
 (defun python-indent-guess-indent-offset ()
   "Guess and set `python-indent-offset' for the current buffer."
@@ -710,356 +770,358 @@ It makes underscores and dots word constituent chars.")
                      python-indent-offset)))))))
 
 (defun python-indent-context ()
-  "Get information on indentation context.
-Context information is returned with a cons with the form:
-    (STATUS . START)
-
-Where status can be any of the following symbols:
-
- * after-comment: When current line might continue a comment block
- * inside-paren: If point in between (), {} or []
- * inside-string: If point is inside a string
- * after-backslash: Previous line ends in a backslash
- * after-beginning-of-block: Point is after beginning of block
- * after-line: Point is after normal line
- * dedenter-statement: Point is on a dedenter statement.
- * no-indent: Point is at beginning of buffer or other special case
-START is the buffer position where the sexp starts."
+  "Get information about the current indentation context.
+Context is returned in a cons with the form (STATUS . START).
+
+STATUS can be one of the following:
+
+keyword
+-------
+
+:after-comment
+ - Point is after a comment line.
+ - START is the position of the \"#\" character.
+:inside-string
+ - Point is inside string.
+ - START is the position of the first quote that starts it.
+:no-indent
+ - No possible indentation case matches.
+ - START is always zero.
+
+:inside-paren
+ - Fallback case when point is inside paren.
+ - START is the first non space char position *after* the open paren.
+:inside-paren-at-closing-nested-paren
+ - Point is on a line that contains a nested paren closer.
+ - START is the position of the open paren it closes.
+:inside-paren-at-closing-paren
+ - Point is on a line that contains a paren closer.
+ - START is the position of the open paren.
+:inside-paren-newline-start
+ - Point is inside a paren with items starting in their own line.
+ - START is the position of the open paren.
+:inside-paren-newline-start-from-block
+ - Point is inside a paren with items starting in their own line
+   from a block start.
+ - START is the position of the open paren.
+
+:after-backslash
+ - Fallback case when point is after backslash.
+ - START is the char after the position of the backslash.
+:after-backslash-assignment-continuation
+ - Point is after a backslashed assignment.
+ - START is the char after the position of the backslash.
+:after-backslash-block-continuation
+ - Point is after a backslashed block continuation.
+ - START is the char after the position of the backslash.
+:after-backslash-dotted-continuation
+ - Point is after a backslashed dotted continuation.  Previous
+   line must contain a dot to align with.
+ - START is the char after the position of the backslash.
+:after-backslash-first-line
+ - First line following a backslashed continuation.
+ - START is the char after the position of the backslash.
+
+:after-block-end
+ - Point is after a line containing a block ender.
+ - START is the position where the ender starts.
+:after-block-start
+ - Point is after a line starting a block.
+ - START is the position where the block starts.
+:after-line
+ - Point is after a simple line.
+ - START is the position where the previous line starts.
+:at-dedenter-block-start
+ - Point is on a line starting a dedenter block.
+ - START is the position where the dedenter block starts."
   (save-restriction
     (widen)
-    (let ((ppss (save-excursion (beginning-of-line) (syntax-ppss)))
-          (start))
-      (cons
-       (cond
-        ;; Beginning of buffer
-        ((save-excursion
-           (goto-char (line-beginning-position))
-           (bobp))
-         'no-indent)
-        ;; Comment continuation
-        ((save-excursion
-           (when (and
-                  (or
-                   (python-info-current-line-comment-p)
-                   (python-info-current-line-empty-p))
-                  (progn
-                    (forward-comment -1)
-                    (python-info-current-line-comment-p)))
-             (setq start (point))
-             'after-comment)))
-        ;; Inside string
-        ((setq start (python-syntax-context 'string ppss))
-         'inside-string)
-        ;; Inside a paren
-        ((setq start (python-syntax-context 'paren ppss))
-         'inside-paren)
-        ;; After backslash
-        ((setq start (when (not (or (python-syntax-context 'string ppss)
-                                    (python-syntax-context 'comment ppss)))
-                       (let ((line-beg-pos (line-number-at-pos)))
-                         (python-info-line-ends-backslash-p
-                          (1- line-beg-pos)))))
-         'after-backslash)
-        ;; After beginning of block
-        ((setq start (save-excursion
-                       (when (progn
-                               (back-to-indentation)
-                               (python-util-forward-comment -1)
-                               (equal (char-before) ?:))
-                         ;; Move to the first block start that's not in within
-                         ;; a string, comment or paren and that's not a
-                         ;; continuation line.
-                         (while (and (re-search-backward
-                                      (python-rx block-start) nil t)
-                                     (or
-                                      (python-syntax-context-type)
-                                      (python-info-continuation-line-p))))
-                         (when (looking-at (python-rx block-start))
-                           (point-marker)))))
-         'after-beginning-of-block)
-        ((when (setq start (python-info-dedenter-statement-p))
-           'dedenter-statement))
-        ;; After normal line
-        ((setq start (save-excursion
+    (let ((ppss (save-excursion
+                  (beginning-of-line)
+                  (syntax-ppss))))
+      (cond
+       ;; Beginning of buffer.
+       ((= (line-number-at-pos) 1)
+        (cons :no-indent 0))
+       ;; Comment continuation (maybe).
+       ((save-excursion
+          (when (and
+                 (or
+                  (python-info-current-line-comment-p)
+                  (python-info-current-line-empty-p))
+                 (forward-comment -1)
+                 (python-info-current-line-comment-p))
+            (cons :after-comment (point)))))
+       ;; Inside a string.
+       ((let ((start (python-syntax-context 'string ppss)))
+          (when start
+            (cons :inside-string start))))
+       ;; Inside a paren.
+       ((let* ((start (python-syntax-context 'paren ppss))
+               (starts-in-newline
+                (when start
+                  (save-excursion
+                    (goto-char start)
+                    (forward-char)
+                    (not
+                     (= (line-number-at-pos)
+                        (progn
+                          (python-util-forward-comment)
+                          (line-number-at-pos))))))))
+          (when start
+            (cond
+             ;; Current line only holds the closing paren.
+             ((save-excursion
+                (skip-syntax-forward " ")
+                (when (and (python-syntax-closing-paren-p)
+                           (progn
+                             (forward-char 1)
+                             (not (python-syntax-context 'paren))))
+                  (cons :inside-paren-at-closing-paren start))))
+             ;; Current line only holds a closing paren for nested.
+             ((save-excursion
+                (back-to-indentation)
+                (python-syntax-closing-paren-p))
+              (cons :inside-paren-at-closing-nested-paren start))
+             ;; This line starts from a opening block in its own line.
+             ((save-excursion
+                (goto-char start)
+                (when (and
+                       starts-in-newline
+                       (save-excursion
+                         (back-to-indentation)
+                         (looking-at (python-rx block-start))))
+                  (cons
+                   :inside-paren-newline-start-from-block start))))
+             (starts-in-newline
+              (cons :inside-paren-newline-start start))
+             ;; General case.
+             (t (cons :inside-paren
+                      (save-excursion
+                        (goto-char (1+ start))
+                        (skip-syntax-forward "(" 1)
+                        (skip-syntax-forward " ")
+                        (point))))))))
+       ;; After backslash.
+       ((let ((start (when (not (python-syntax-comment-or-string-p ppss))
+                       (python-info-line-ends-backslash-p
+                        (1- (line-number-at-pos))))))
+          (when start
+            (cond
+             ;; Continuation of dotted expression.
+             ((save-excursion
+                (back-to-indentation)
+                (when (eq (char-after) ?\.)
+                  ;; Move point back until it's not inside a paren.
+                  (while (prog2
+                             (forward-line -1)
+                             (and (not (bobp))
+                                  (python-syntax-context 'paren))))
+                  (goto-char (line-end-position))
+                  (while (and (search-backward
+                               "." (line-beginning-position) t)
+                              (python-syntax-context-type)))
+                  ;; Ensure previous statement has dot to align with.
+                  (when (and (eq (char-after) ?\.)
+                             (not (python-syntax-context-type)))
+                    (cons :after-backslash-dotted-continuation (point))))))
+             ;; Continuation of block definition.
+             ((let ((block-continuation-start
+                     (python-info-block-continuation-line-p)))
+                (when block-continuation-start
+                  (save-excursion
+                    (goto-char block-continuation-start)
+                    (re-search-forward
+                     (python-rx block-start (* space))
+                     (line-end-position) t)
+                    (cons :after-backslash-block-continuation (point))))))
+             ;; Continuation of assignment.
+             ((let ((assignment-continuation-start
+                     (python-info-assignment-continuation-line-p)))
+                (when assignment-continuation-start
+                  (save-excursion
+                    (goto-char assignment-continuation-start)
+                    (cons :after-backslash-assignment-continuation (point))))))
+             ;; First line after backslash continuation start.
+             ((save-excursion
+                (goto-char start)
+                (when (or (= (line-number-at-pos) 1)
+                          (not (python-info-beginning-of-backslash
+                                (1- (line-number-at-pos)))))
+                  (cons :after-backslash-first-line start))))
+             ;; General case.
+             (t (cons :after-backslash start))))))
+       ;; After beginning of block.
+       ((let ((start (save-excursion
+                       (back-to-indentation)
+                       (python-util-forward-comment -1)
+                       (when (equal (char-before) ?:)
+                         (python-nav-beginning-of-block)))))
+          (when start
+            (cons :after-block-start start))))
+       ;; At dedenter statement.
+       ((let ((start (python-info-dedenter-statement-p)))
+          (when start
+            (cons :at-dedenter-block-start start))))
+       ;; After normal line.
+       ((let ((start (save-excursion
                        (back-to-indentation)
-                       (skip-chars-backward (rx (or whitespace ?\n)))
+                       (skip-chars-backward " \t\n")
                        (python-nav-beginning-of-statement)
-                       (point-marker)))
-         'after-line)
-        ;; Do not indent
-        (t 'no-indent))
-       start))))
-
-(defun python-indent-calculate-indentation ()
-  "Calculate correct indentation offset for the current line."
-  (let* ((indentation-context (python-indent-context))
-         (context-status (car indentation-context))
-         (context-start (cdr indentation-context)))
-    (save-restriction
-      (widen)
-      (save-excursion
-        (pcase context-status
-          (`no-indent 0)
-          (`after-comment
-           (goto-char context-start)
-           (current-indentation))
-          ;; When point is after beginning of block just add one level
-          ;; of indentation relative to the context-start
-          (`after-beginning-of-block
-           (goto-char context-start)
-           (+ (current-indentation) python-indent-offset))
-          ;; When after a simple line just use previous line
-          ;; indentation.
-          (`after-line
-           (let* ((pair (save-excursion
-                          (goto-char context-start)
-                          (cons
-                           (current-indentation)
-                           (python-info-beginning-of-block-p))))
-                  (context-indentation (car pair))
-                  ;; TODO: Separate block enders into its own case.
-                  (adjustment
-                   (if (save-excursion
-                         (python-util-forward-comment -1)
-                         (python-nav-beginning-of-statement)
-                         (looking-at (python-rx block-ender)))
-                       python-indent-offset
-                     0)))
-             (- context-indentation adjustment)))
-          ;; When point is on a dedenter statement, search for the
-          ;; opening block that corresponds to it and use its
-          ;; indentation.  If no opening block is found just remove
-          ;; indentation as this is an invalid python file.
-          (`dedenter-statement
-           (let ((block-start-point
-                  (python-info-dedenter-opening-block-position)))
-             (save-excursion
-               (if (not block-start-point)
-                   0
-                 (goto-char block-start-point)
-                 (current-indentation)))))
-          ;; When inside of a string, do nothing. just use the current
-          ;; indentation.  XXX: perhaps it would be a good idea to
-          ;; invoke standard text indentation here
-          (`inside-string
-           (goto-char context-start)
-           (current-indentation))
-          ;; After backslash we have several possibilities.
-          (`after-backslash
-           (cond
-            ;; Check if current line is a dot continuation.  For this
-            ;; the current line must start with a dot and previous
-            ;; line must contain a dot too.
-            ((save-excursion
-               (back-to-indentation)
-               (when (looking-at "\\.")
-                 ;; If after moving one line back point is inside a paren it
-                 ;; needs to move back until it's not anymore
-                 (while (prog2
-                            (forward-line -1)
-                            (and (not (bobp))
-                                 (python-syntax-context 'paren))))
-                 (goto-char (line-end-position))
-                 (while (and (re-search-backward
-                              "\\." (line-beginning-position) t)
-                             (python-syntax-context-type)))
-                 (if (and (looking-at "\\.")
-                          (not (python-syntax-context-type)))
-                     ;; The indentation is the same column of the
-                     ;; first matching dot that's not inside a
-                     ;; comment, a string or a paren
-                     (current-column)
-                   ;; No dot found on previous line, just add another
-                   ;; indentation level.
-                   (+ (current-indentation) python-indent-offset)))))
-            ;; Check if prev line is a block continuation
-            ((let ((block-continuation-start
-                    (python-info-block-continuation-line-p)))
-               (when block-continuation-start
-                 ;; If block-continuation-start is set jump to that
-                 ;; marker and use first column after the block start
-                 ;; as indentation value.
-                 (goto-char block-continuation-start)
-                 (re-search-forward
-                  (python-rx block-start (* space))
-                  (line-end-position) t)
-                 (current-column))))
-            ;; Check if current line is an assignment continuation
-            ((let ((assignment-continuation-start
-                    (python-info-assignment-continuation-line-p)))
-               (when assignment-continuation-start
-                 ;; If assignment-continuation is set jump to that
-                 ;; marker and use first column after the assignment
-                 ;; operator as indentation value.
-                 (goto-char assignment-continuation-start)
-                 (current-column))))
-            (t
-             (forward-line -1)
-             (goto-char (python-info-beginning-of-backslash))
-             (if (save-excursion
-                   (and
-                    (forward-line -1)
-                    (goto-char
-                     (or (python-info-beginning-of-backslash) (point)))
-                    (python-info-line-ends-backslash-p)))
-                 ;; The two previous lines ended in a backslash so we must
-                 ;; respect previous line indentation.
-                 (current-indentation)
-               ;; What happens here is that we are dealing with the second
-               ;; line of a backslash continuation, in that case we just going
-               ;; to add one indentation level.
-               (+ (current-indentation) python-indent-offset)))))
-          ;; When inside a paren there's a need to handle nesting
-          ;; correctly
-          (`inside-paren
-           (cond
-            ;; If current line closes the outermost open paren use the
-            ;; current indentation of the context-start line.
-            ((save-excursion
-               (skip-syntax-forward "\s" (line-end-position))
-               (when (and (looking-at (regexp-opt '(")" "]" "}")))
-                          (progn
-                            (forward-char 1)
-                            (not (python-syntax-context 'paren))))
-                 (goto-char context-start)
-                 (current-indentation))))
-            ;; If open paren is contained on a line by itself add another
-            ;; indentation level, else look for the first word after the
-            ;; opening paren and use it's column position as indentation
-            ;; level.
-            ((let* ((content-starts-in-newline)
-                    (indent
-                     (save-excursion
-                       (if (setq content-starts-in-newline
-                                 (progn
-                                   (goto-char context-start)
-                                   (forward-char)
-                                   (save-restriction
-                                     (narrow-to-region
-                                      (line-beginning-position)
-                                      (line-end-position))
-                                     (python-util-forward-comment))
-                                   (looking-at "$")))
-                           (+ (current-indentation) python-indent-offset)
-                         (current-column)))))
-               ;; Adjustments
-               (cond
-                ;; If current line closes a nested open paren de-indent one
-                ;; level.
-                ((progn
-                   (back-to-indentation)
-                   (looking-at (regexp-opt '(")" "]" "}"))))
-                 (- indent python-indent-offset))
-                ;; If the line of the opening paren that wraps the current
-                ;; line starts a block add another level of indentation to
-                ;; follow new pep8 recommendation. See: http://ur1.ca/5rojx
-                ((save-excursion
-                   (when (and content-starts-in-newline
-                              (progn
-                                (goto-char context-start)
-                                (back-to-indentation)
-                                (looking-at (python-rx block-start))))
-                     (+ indent python-indent-offset))))
-                (t indent)))))))))))
-
-(defun python-indent-calculate-levels ()
-  "Calculate `python-indent-levels' and reset `python-indent-current-level'."
-  (if (or (python-info-continuation-line-p)
-          (not (python-info-dedenter-statement-p)))
-      ;; XXX: This asks for a refactor.  Even if point is on a
-      ;; dedenter statement, it could be multiline and in that case
-      ;; the continuation lines should be indented with normal rules.
-      (let* ((indentation (python-indent-calculate-indentation))
-             (remainder (% indentation python-indent-offset))
-             (steps (/ (- indentation remainder) python-indent-offset)))
-        (setq python-indent-levels (list 0))
-        (dotimes (step steps)
-          (push (* python-indent-offset (1+ step)) python-indent-levels))
-        (when (not (eq 0 remainder))
-          (push (+ (* python-indent-offset steps) remainder) 
python-indent-levels)))
-    (setq python-indent-levels
-          (or
-           (mapcar (lambda (pos)
-                     (save-excursion
-                       (goto-char pos)
-                       (current-indentation)))
-                   (python-info-dedenter-opening-block-positions))
-           (list 0))))
-  (setq python-indent-current-level (1- (length python-indent-levels))
-        python-indent-levels (nreverse python-indent-levels)))
-
-(defun python-indent-toggle-levels ()
-  "Toggle `python-indent-current-level' over `python-indent-levels'."
-  (setq python-indent-current-level (1- python-indent-current-level))
-  (when (< python-indent-current-level 0)
-    (setq python-indent-current-level (1- (length python-indent-levels)))))
-
-(defun python-indent-line (&optional force-toggle)
+                       (point))))
+          (when start
+            (if (save-excursion
+                  (python-util-forward-comment -1)
+                  (python-nav-beginning-of-statement)
+                  (looking-at (python-rx block-ender)))
+                (cons :after-block-end start)
+              (cons :after-line start)))))
+       ;; Default case: do not indent.
+       (t (cons :no-indent 0))))))
+
+(defun python-indent--calculate-indentation ()
+  "Internal implementation of `python-indent-calculate-indentation'.
+May return an integer for the maximum possible indentation at
+current context or a list of integers.  The latter case is only
+happening for :at-dedenter-block-start context since the
+possibilities can be narrowed to especific indentation points."
+  (save-restriction
+    (widen)
+    (save-excursion
+      (pcase (python-indent-context)
+        (`(:no-indent . ,_) 0)
+        (`(,(or :after-line
+                :after-comment
+                :inside-string
+                :after-backslash
+                :inside-paren-at-closing-paren
+                :inside-paren-at-closing-nested-paren) . ,start)
+         ;; Copy previous indentation.
+         (goto-char start)
+         (current-indentation))
+        (`(,(or :after-block-start
+                :after-backslash-first-line
+                :inside-paren-newline-start) . ,start)
+         ;; Add one indentation level.
+         (goto-char start)
+         (+ (current-indentation) python-indent-offset))
+        (`(,(or :inside-paren
+                :after-backslash-block-continuation
+                :after-backslash-assignment-continuation
+                :after-backslash-dotted-continuation) . ,start)
+         ;; Use the column given by the context.
+         (goto-char start)
+         (current-column))
+        (`(:after-block-end . ,start)
+         ;; Subtract one indentation level.
+         (goto-char start)
+         (- (current-indentation) python-indent-offset))
+        (`(:at-dedenter-block-start . ,_)
+         ;; List all possible indentation levels from opening blocks.
+         (let ((opening-block-start-points
+                (python-info-dedenter-opening-block-positions)))
+           (if (not opening-block-start-points)
+               0  ; if not found default to first column
+             (mapcar (lambda (pos)
+                       (save-excursion
+                         (goto-char pos)
+                         (current-indentation)))
+                     opening-block-start-points))))
+        (`(,(or :inside-paren-newline-start-from-block) . ,start)
+         ;; Add two indentation levels to make the suite stand out.
+         (goto-char start)
+         (+ (current-indentation) (* python-indent-offset 2)))))))
+
+(defun python-indent--calculate-levels (indentation)
+  "Calculate levels list given INDENTATION.
+Argument INDENTATION can either be an integer or a list of
+integers.  Levels are returned in ascending order, and in the
+case INDENTATION is a list, this order is enforced."
+  (if (listp indentation)
+      (sort (copy-sequence indentation) #'<)
+    (let* ((remainder (% indentation python-indent-offset))
+           (steps (/ (- indentation remainder) python-indent-offset))
+           (levels (mapcar (lambda (step)
+                             (* python-indent-offset step))
+                           (number-sequence steps 0 -1))))
+      (reverse
+       (if (not (zerop remainder))
+           (cons indentation levels)
+         levels)))))
+
+(defun python-indent--previous-level (levels indentation)
+  "Return previous level from LEVELS relative to INDENTATION."
+  (let* ((levels (sort (copy-sequence levels) #'>))
+         (default (car levels)))
+    (catch 'return
+      (dolist (level levels)
+        (when (funcall #'< level indentation)
+          (throw 'return level)))
+      default)))
+
+(defun python-indent-calculate-indentation (&optional previous)
+  "Calculate indentation.
+Get indentation of PREVIOUS level when argument is non-nil.
+Return the max level of the cycle when indentation reaches the
+minimum."
+  (let* ((indentation (python-indent--calculate-indentation))
+         (levels (python-indent--calculate-levels indentation)))
+    (if previous
+        (python-indent--previous-level levels (current-indentation))
+      (apply #'max levels))))
+
+(defun python-indent-line (&optional previous)
   "Internal implementation of `python-indent-line-function'.
-Uses the offset calculated in
-`python-indent-calculate-indentation' and available levels
-indicated by the variable `python-indent-levels' to set the
-current indentation.
+Use the PREVIOUS level when argument is non-nil, otherwise indent
+to the maxium available level.  When indentation is the minimum
+possible and PREVIOUS is non-nil, cycle back to the maximum
+level."
+  (let ((follow-indentation-p
+         ;; Check if point is within indentation.
+         (and (<= (line-beginning-position) (point))
+              (>= (+ (line-beginning-position)
+                     (current-indentation))
+                  (point)))))
+    (save-excursion
+      (indent-line-to
+       (python-indent-calculate-indentation previous))
+      (python-info-dedenter-opening-block-message))
+    (when follow-indentation-p
+      (back-to-indentation))))
 
-When the variable `last-command' is equal to one of the symbols
-inside `python-indent-trigger-commands' or FORCE-TOGGLE is
-non-nil it cycles levels indicated in the variable
-`python-indent-levels' by setting the current level in the
-variable `python-indent-current-level'.
-
-When the variable `last-command' is not equal to one of the
-symbols inside `python-indent-trigger-commands' and FORCE-TOGGLE
-is nil it calculates possible indentation levels and saves them
-in the variable `python-indent-levels'.  Afterwards it sets the
-variable `python-indent-current-level' correctly so offset is
-equal to
-   (nth python-indent-current-level python-indent-levels)"
-  (or
-   (and (or (and (memq this-command python-indent-trigger-commands)
-                 (eq last-command this-command))
-            force-toggle)
-        (not (equal python-indent-levels '(0)))
-        (or (python-indent-toggle-levels) t))
-   (python-indent-calculate-levels))
-  (let* ((starting-pos (point-marker))
-         (indent-ending-position
-          (+ (line-beginning-position) (current-indentation)))
-         (follow-indentation-p
-          (or (bolp)
-              (and (<= (line-beginning-position) starting-pos)
-                   (>= indent-ending-position starting-pos))))
-         (next-indent (nth python-indent-current-level python-indent-levels)))
-    (unless (= next-indent (current-indentation))
-      (beginning-of-line)
-      (delete-horizontal-space)
-      (indent-to next-indent)
-      (goto-char starting-pos))
-    (and follow-indentation-p (back-to-indentation)))
-  (python-info-dedenter-opening-block-message))
+(defun python-indent-calculate-levels ()
+  "Return possible indentation levels."
+  (python-indent--calculate-levels
+   (python-indent--calculate-indentation)))
 
 (defun python-indent-line-function ()
   "`indent-line-function' for Python mode.
-See `python-indent-line' for details."
-  (python-indent-line))
+When the variable `last-command' is equal to one of the symbols
+inside `python-indent-trigger-commands' it cycles possible
+indentation levels from right to left."
+  (python-indent-line
+   (and (memq this-command python-indent-trigger-commands)
+        (eq last-command this-command))))
 
 (defun python-indent-dedent-line ()
   "De-indent current line."
   (interactive "*")
-  (when (and (not (python-syntax-comment-or-string-p))
-             (<= (point) (save-excursion
-                                  (back-to-indentation)
-                           (point)))
-             (> (current-column) 0))
-    (python-indent-line t)
-    t))
+  (when (and (not (bolp))
+           (not (python-syntax-comment-or-string-p))
+           (= (+ (line-beginning-position)
+                 (current-indentation))
+              (point)))
+      (python-indent-line t)
+      t))
 
 (defun python-indent-dedent-line-backspace (arg)
   "De-indent current line.
 Argument ARG is passed to `backward-delete-char-untabify' when
 point is not in between the indentation."
   (interactive "*p")
-  (when (not (python-indent-dedent-line))
+  (unless (python-indent-dedent-line)
     (backward-delete-char-untabify arg)))
+
 (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)
 
 (defun python-indent-region (start end)
@@ -1170,7 +1232,7 @@ the line will be re-indented automatically if needed."
       (save-excursion
         (goto-char (line-beginning-position))
         (let ((indentation (python-indent-calculate-indentation)))
-          (when (< (current-indentation) indentation)
+          (when (and (numberp indentation) (< (current-indentation) 
indentation))
             (indent-line-to indentation)))))
      ;; Electric colon
      ((and (eq ?: last-command-event)
@@ -1180,12 +1242,18 @@ the line will be re-indented automatically if needed."
            (eolp)
            ;; Avoid re-indenting on extra colon
            (not (equal ?: (char-before (1- (point)))))
-           (not (python-syntax-comment-or-string-p))
-           ;; Never re-indent at beginning of defun
-           (not (save-excursion
-                  (python-nav-beginning-of-statement)
-                  (python-info-looking-at-beginning-of-defun))))
-      (python-indent-line)))))
+           (not (python-syntax-comment-or-string-p)))
+      ;; Just re-indent dedenters
+      (let ((dedenter-pos (python-info-dedenter-statement-p))
+            (current-pos (point)))
+        (when dedenter-pos
+          (save-excursion
+            (goto-char dedenter-pos)
+            (python-indent-line)
+            (unless (= (line-number-at-pos dedenter-pos)
+                       (line-number-at-pos current-pos))
+              ;; Reindent region if this is a multiline statement
+              (python-indent-region dedenter-pos current-pos)))))))))
 
 
 ;;; Navigation
@@ -1824,6 +1892,14 @@ Restart the Python shell after changing this variable 
for it to take effect."
   :group 'python
   :safe 'booleanp)
 
+(defcustom python-shell-unbuffered t
+  "Should shell output be unbuffered?.
+When non-nil, this may prevent delayed and missing output in the
+Python shell.  See commentary for details."
+  :type 'boolean
+  :group 'python
+  :safe 'booleanp)
+
 (defcustom python-shell-process-environment nil
   "List of environment variables for Python shell.
 This variable follows the same rules as `process-environment'
@@ -2053,36 +2129,18 @@ and `python-shell-output-prompt-regexp' using the 
values from
 
 (defun python-shell-get-process-name (dedicated)
   "Calculate the appropriate process name for inferior Python process.
-If DEDICATED is t and the variable `buffer-file-name' is non-nil
-returns a string with the form
-`python-shell-buffer-name'[variable `buffer-file-name'] else
-returns the value of `python-shell-buffer-name'."
-  (let ((process-name
-         (if (and dedicated
-                  buffer-file-name)
-             (format "%s[%s]" python-shell-buffer-name buffer-file-name)
-           (format "%s" python-shell-buffer-name))))
-    process-name))
+If DEDICATED is t returns a string with the form
+`python-shell-buffer-name'[`buffer-name'] else returns the value
+of `python-shell-buffer-name'."
+  (if dedicated
+      (format "%s[%s]" python-shell-buffer-name (buffer-name))
+    python-shell-buffer-name))
 
 (defun python-shell-internal-get-process-name ()
   "Calculate the appropriate process name for Internal Python process.
 The name is calculated from `python-shell-global-buffer-name' and
-a hash of all relevant global shell settings in order to ensure
-uniqueness for different types of configurations."
-  (format "%s [%s]"
-          python-shell-internal-buffer-name
-          (md5
-           (concat
-            python-shell-interpreter
-            python-shell-interpreter-args
-            python-shell--prompt-calculated-input-regexp
-            python-shell--prompt-calculated-output-regexp
-            (mapconcat #'symbol-value python-shell-setup-codes "")
-            (mapconcat #'identity python-shell-process-environment "")
-            (mapconcat #'identity python-shell-extra-pythonpaths "")
-            (mapconcat #'identity python-shell-exec-path "")
-            (or python-shell-virtualenv-root "")
-            (mapconcat #'identity python-shell-exec-path "")))))
+the `buffer-name'."
+  (format "%s[%s]" python-shell-internal-buffer-name (buffer-name)))
 
 (defun python-shell-calculate-command ()
   "Calculate the string used to execute the inferior Python process."
@@ -2091,7 +2149,9 @@ uniqueness for different types of configurations."
     ;; `python-shell-interpreter' absolute path can be found by
     ;; `executable-find'.
     (format "%s %s"
-            (executable-find python-shell-interpreter)
+            ;; FIXME: Why executable-find?
+            (shell-quote-argument
+             (executable-find python-shell-interpreter))
             python-shell-interpreter-args)))
 
 (define-obsolete-function-alias
@@ -2116,6 +2176,8 @@ uniqueness for different types of configurations."
         (virtualenv (if python-shell-virtualenv-root
                         (directory-file-name python-shell-virtualenv-root)
                       nil)))
+    (when python-shell-unbuffered
+      (setenv "PYTHONUNBUFFERED" "1"))
     (when python-shell-extra-pythonpaths
       (setenv "PYTHONPATH" (python-shell-calculate-pythonpath)))
     (if (not virtualenv)
@@ -2218,11 +2280,9 @@ Avoids `recenter' calls until OUTPUT is completely sent."
   "Execute the forms in BODY with the shell buffer temporarily current.
 Signals an error if no shell buffer is available for current buffer."
   (declare (indent 0) (debug t))
-  (let ((shell-buffer (make-symbol "shell-buffer")))
-    `(let ((,shell-buffer (python-shell-get-buffer)))
-       (when (not ,shell-buffer)
-         (error "No inferior Python buffer available."))
-       (with-current-buffer ,shell-buffer
+  (let ((shell-process (make-symbol "shell-process")))
+    `(let ((,shell-process (python-shell-get-process-or-error)))
+       (with-current-buffer (process-buffer ,shell-process)
          ,@body))))
 
 (defvar python-shell--font-lock-buffer nil)
@@ -2412,8 +2472,8 @@ variable.
   (set (make-local-variable 'python-shell--prompt-calculated-input-regexp) nil)
   (set (make-local-variable 'python-shell--prompt-calculated-output-regexp) 
nil)
   (python-shell-prompt-set-calculated-regexps)
-  (setq comint-prompt-regexp python-shell--prompt-calculated-input-regexp
-        comint-prompt-read-only t)
+  (setq comint-prompt-regexp python-shell--prompt-calculated-input-regexp)
+  (set (make-local-variable 'comint-prompt-read-only) t)
   (setq mode-line-process '(":%s"))
   (set (make-local-variable 'comint-output-filter-functions)
        '(ansi-color-process-output
@@ -2434,12 +2494,12 @@ variable.
   (python-shell-accept-process-output
    (get-buffer-process (current-buffer))))
 
-(defun python-shell-make-comint (cmd proc-name &optional pop internal)
+(defun python-shell-make-comint (cmd proc-name &optional show internal)
   "Create a Python shell comint buffer.
 CMD is the Python command to be executed and PROC-NAME is the
 process name the comint buffer will get.  After the comint buffer
 is created the `inferior-python-mode' is activated.  When
-optional argument POP is non-nil the buffer is shown.  When
+optional argument SHOW is non-nil the buffer is shown.  When
 optional argument INTERNAL is non-nil this process is run on a
 buffer with a name that starts with a space, following the Emacs
 convention for temporary/internal buffers, and also makes sure
@@ -2468,16 +2528,13 @@ killed."
                 (mapconcat #'identity args " ")))
           (with-current-buffer buffer
             (inferior-python-mode))
-          (and pop (pop-to-buffer buffer t))
+          (when show (display-buffer buffer))
           (and internal (set-process-query-on-exit-flag process nil))))
       proc-buffer-name)))
 
 ;;;###autoload
 (defun run-python (&optional cmd dedicated show)
   "Run an inferior Python process.
-Input and output via buffer named after
-`python-shell-buffer-name'.  If there is a process already
-running in that buffer, just switch to it.
 
 Argument CMD defaults to `python-shell-calculate-command' return
 value.  When called interactively with `prefix-arg', it allows
@@ -2485,6 +2542,11 @@ the user to edit such value and choose whether the 
interpreter
 should be DEDICATED for the current buffer.  When numeric prefix
 arg is other than 0 or 4 do not SHOW.
 
+For a given buffer and same values of DEDICATED, if a process is
+already running for it, it will do nothing.  This means that if
+the current buffer is using a global process, the user is still
+able to switch it to use a dedicated one.
+
 Runs the hook `inferior-python-mode-hook' after
 `comint-mode-hook' is run.  (Type \\[describe-mode] in the
 process buffer for a list of commands.)"
@@ -2495,10 +2557,10 @@ process buffer for a list of commands.)"
         (y-or-n-p "Make dedicated process? ")
         (= (prefix-numeric-value current-prefix-arg) 4))
      (list (python-shell-calculate-command) nil t)))
-  (python-shell-make-comint
-   (or cmd (python-shell-calculate-command))
-   (python-shell-get-process-name dedicated) show)
-  dedicated)
+  (get-buffer-process
+   (python-shell-make-comint
+    (or cmd (python-shell-calculate-command))
+    (python-shell-get-process-name dedicated) show)))
 
 (defun run-python-internal ()
   "Run an inferior Internal Python process.
@@ -2541,6 +2603,21 @@ If current buffer is in `inferior-python-mode', return 
it."
   "Return inferior Python process for current buffer."
   (get-buffer-process (python-shell-get-buffer)))
 
+(defun python-shell-get-process-or-error (&optional interactivep)
+  "Return inferior Python process for current buffer or signal error.
+When argument INTERACTIVEP is non-nil, use `user-error' instead
+of `error' with a user-friendly message."
+  (or (python-shell-get-process)
+      (if interactivep
+          (user-error
+           "Start a Python process first with `M-x run-python' or `%s'."
+           ;; Get the binding.
+           (key-description
+            (where-is-internal
+             #'run-python overriding-local-map t)))
+        (error
+         "No inferior Python process running."))))
+
 (defun python-shell-get-or-create-process (&optional cmd dedicated show)
   "Get or create an inferior Python process for current buffer and return it.
 Arguments CMD, DEDICATED and SHOW are those of `run-python' and
@@ -2556,6 +2633,11 @@ be asked for their values."
         (run-python cmd dedicated show)))
     (or shell-process (python-shell-get-process))))
 
+(make-obsolete
+ #'python-shell-get-or-create-process
+ "Instead call `python-shell-get-process' and create one if returns nil."
+ "25.1")
+
 (defvar python-shell-internal-buffer nil
   "Current internal shell buffer for the current buffer.
 This is really not necessary at all for the code to work but it's
@@ -2568,12 +2650,10 @@ there for compatibility with CEDET.")
 
 (defun python-shell-internal-get-or-create-process ()
   "Get or create an inferior Internal Python process."
-  (let* ((proc-name (python-shell-internal-get-process-name))
-         (proc-buffer-name (format " *%s*" proc-name)))
-    (when (not (process-live-p proc-name))
-      (run-python-internal)
-      (setq python-shell-internal-buffer proc-buffer-name))
-    (get-buffer-process proc-buffer-name)))
+  (let ((proc-name (python-shell-internal-get-process-name)))
+    (if (process-live-p proc-name)
+        (get-process proc-name)
+      (run-python-internal))))
 
 (define-obsolete-function-alias
   'python-proc 'python-shell-internal-get-or-create-process "24.3")
@@ -2590,20 +2670,24 @@ there for compatibility with CEDET.")
               (concat (file-remote-p default-directory) "/tmp")
             temporary-file-directory))
          (temp-file-name (make-temp-file "py"))
-         (coding-system-for-write 'utf-8))
+         (coding-system-for-write (python-info-encoding)))
     (with-temp-file temp-file-name
-      (insert "# -*- coding: utf-8 -*-\n") ;Not needed for Python-3.
       (insert string)
       (delete-trailing-whitespace))
     temp-file-name))
 
-(defun python-shell-send-string (string &optional process)
-  "Send STRING to inferior Python PROCESS."
-  (interactive "sPython command: ")
-  (let ((process (or process (python-shell-get-or-create-process))))
+(defun python-shell-send-string (string &optional process msg)
+  "Send STRING to inferior Python PROCESS.
+When optional argument MSG is non-nil, forces display of a
+user-friendly message if there's no process running; defaults to
+t when called interactively."
+  (interactive
+   (list (read-string "Python command: ") nil t))
+  (let ((process (or process (python-shell-get-process-or-error msg))))
     (if (string-match ".\n+." string)   ;Multiline.
-        (let* ((temp-file-name (python-shell--save-temp-file string)))
-          (python-shell-send-file temp-file-name process temp-file-name t))
+        (let* ((temp-file-name (python-shell--save-temp-file string))
+               (file-name (or (buffer-file-name) temp-file-name)))
+          (python-shell-send-file file-name process temp-file-name t))
       (comint-send-string process string)
       (when (or (not (string-match "\n\\'" string))
                 (string-match "\n[ \t].*\n?\\'" string))
@@ -2642,7 +2726,7 @@ detecting a prompt at the end of the buffer."
 (defun python-shell-send-string-no-output (string &optional process)
   "Send STRING to PROCESS and inhibit output.
 Return the output."
-  (let ((process (or process (python-shell-get-or-create-process)))
+  (let ((process (or process (python-shell-get-process-or-error)))
         (comint-preoutput-filter-functions
          '(python-shell-output-filter))
         (python-shell-output-filter-in-progress t)
@@ -2679,12 +2763,6 @@ Returns the output.  See 
`python-shell-send-string-no-output'."
 (define-obsolete-function-alias
   'python-send-string 'python-shell-internal-send-string "24.3")
 
-(defvar python--use-fake-loc nil
-  "If non-nil, use `compilation-fake-loc' to trace errors back to the buffer.
-If nil, regions of text are prepended by the corresponding number of empty
-lines and Python is told to output error messages referring to the whole
-source file.")
-
 (defun python-shell-buffer-substring (start end &optional nomain)
   "Send buffer substring from START to END formatted for shell.
 This is a wrapper over `buffer-substring' that takes care of
@@ -2694,27 +2772,32 @@ the python shell:
      \"if __name__ == '__main__'\" block will be removed.
   2. When a subregion of the buffer is sent, it takes care of
      appending extra empty lines so tracebacks are correct.
-  3. Wraps indented regions under an \"if True:\" block so the
+  3. When the region sent is a substring of the current buffer, a
+     coding cookie is added.
+  4. Wraps indented regions under an \"if True:\" block so the
      interpreter evaluates them correctly."
-  (let ((substring (buffer-substring-no-properties start end))
-        (fillstr (unless python--use-fake-loc
-                   (make-string (1- (line-number-at-pos start)) ?\n)))
-        (toplevel-block-p (save-excursion
-                            (goto-char start)
-                            (or (zerop (line-number-at-pos start))
-                                (progn
-                                  (python-util-forward-comment 1)
-                                  (zerop (current-indentation)))))))
+  (let* ((substring (buffer-substring-no-properties start end))
+         (starts-at-point-min-p (save-restriction
+                                  (widen)
+                                  (= (point-min) start)))
+         (encoding (python-info-encoding))
+         (fillstr (when (not starts-at-point-min-p)
+                    (concat
+                     (format "# -*- coding: %s -*-\n" encoding)
+                     (make-string
+                      ;; Subtract 2 because of the coding cookie.
+                      (- (line-number-at-pos start) 2) ?\n))))
+         (toplevel-block-p (save-excursion
+                             (goto-char start)
+                             (or (zerop (line-number-at-pos start))
+                                 (progn
+                                   (python-util-forward-comment 1)
+                                   (zerop (current-indentation)))))))
     (with-temp-buffer
       (python-mode)
       (if fillstr (insert fillstr))
       (insert substring)
       (goto-char (point-min))
-      (unless python--use-fake-loc
-        ;; python-shell--save-temp-file adds an extra coding line, which would
-        ;; throw off the line-counts, so let's try to compensate here.
-        (if (looking-at "[ \t]*[#\n]")
-            (delete-region (point) (line-beginning-position 2))))
       (when (not toplevel-block-p)
         (insert "if True:")
         (delete-region (point) (line-end-position)))
@@ -2725,53 +2808,65 @@ the python shell:
                        (when (python-nav-if-name-main)
                          (cons (point)
                                (progn (python-nav-forward-sexp-safe)
+                                      ;; Include ending newline
+                                      (forward-line 1)
                                       (point)))))))
                ;; Oh destructuring bind, how I miss you.
                (if-name-main-start (car if-name-main-start-end))
-               (if-name-main-end (cdr if-name-main-start-end)))
+               (if-name-main-end (cdr if-name-main-start-end))
+               (fillstr (make-string
+                         (- (line-number-at-pos if-name-main-end)
+                            (line-number-at-pos if-name-main-start)) ?\n)))
           (when if-name-main-start-end
             (goto-char if-name-main-start)
             (delete-region if-name-main-start if-name-main-end)
-            (insert
-             (make-string
-              (- (line-number-at-pos if-name-main-end)
-                 (line-number-at-pos if-name-main-start)) ?\n)))))
+            (insert fillstr))))
+      ;; Ensure there's only one coding cookie in the generated string.
+      (goto-char (point-min))
+      (when (looking-at-p (python-rx coding-cookie))
+        (forward-line 1)
+        (when (looking-at-p (python-rx coding-cookie))
+          (delete-region
+           (line-beginning-position) (line-end-position))))
       (buffer-substring-no-properties (point-min) (point-max)))))
 
-(declare-function compilation-fake-loc "compile"
-                  (marker file &optional line col))
-
-(defun python-shell-send-region (start end &optional nomain)
-  "Send the region delimited by START and END to inferior Python process."
-  (interactive "r")
-  (let* ((python--use-fake-loc
-          (or python--use-fake-loc (not buffer-file-name)))
-         (string (python-shell-buffer-substring start end nomain))
-         (process (python-shell-get-or-create-process))
-         (_ (string-match "\\`\n*\\(.*\\)" string)))
-    (message "Sent: %s..." (match-string 1 string))
-    (let* ((temp-file-name (python-shell--save-temp-file string))
-           (file-name (or (buffer-file-name) temp-file-name)))
-      (python-shell-send-file file-name process temp-file-name t)
-      (unless python--use-fake-loc
-        (with-current-buffer (process-buffer process)
-          (compilation-fake-loc (copy-marker start) temp-file-name
-                                2)) ;; Not 1, because of the added coding line.
-        ))))
-
-(defun python-shell-send-buffer (&optional arg)
+(defun python-shell-send-region (start end &optional send-main msg)
+  "Send the region delimited by START and END to inferior Python process.
+When optional argument SEND-MAIN is non-nil, allow execution of
+code inside blocks delimited by \"if __name__== '__main__':\".
+When called interactively SEND-MAIN defaults to nil, unless it's
+called with prefix argument.  When optional argument MSG is
+non-nil, forces display of a user-friendly message if there's no
+process running; defaults to t when called interactively."
+  (interactive
+   (list (region-beginning) (region-end) current-prefix-arg t))
+  (let* ((string (python-shell-buffer-substring start end (not send-main)))
+         (process (python-shell-get-process-or-error msg))
+         (original-string (buffer-substring-no-properties start end))
+         (_ (string-match "\\`\n*\\(.*\\)" original-string)))
+    (message "Sent: %s..." (match-string 1 original-string))
+    (python-shell-send-string string process)))
+
+(defun python-shell-send-buffer (&optional send-main msg)
   "Send the entire buffer to inferior Python process.
-With prefix ARG allow execution of code inside blocks delimited
-by \"if __name__== '__main__':\"."
-  (interactive "P")
+When optional argument SEND-MAIN is non-nil, allow execution of
+code inside blocks delimited by \"if __name__== '__main__':\".
+When called interactively SEND-MAIN defaults to nil, unless it's
+called with prefix argument.  When optional argument MSG is
+non-nil, forces display of a user-friendly message if there's no
+process running; defaults to t when called interactively."
+  (interactive (list current-prefix-arg t))
   (save-restriction
     (widen)
-    (python-shell-send-region (point-min) (point-max) (not arg))))
+    (python-shell-send-region (point-min) (point-max) send-main msg)))
 
-(defun python-shell-send-defun (arg)
+(defun python-shell-send-defun (&optional arg msg)
   "Send the current defun to inferior Python process.
-When argument ARG is non-nil do not include decorators."
-  (interactive "P")
+When argument ARG is non-nil do not include decorators.  When
+optional argument MSG is non-nil, forces display of a
+user-friendly message if there's no process running; defaults to
+t when called interactively."
+  (interactive (list current-prefix-arg t))
   (save-excursion
     (python-shell-send-region
      (progn
@@ -2787,42 +2882,60 @@ When argument ARG is non-nil do not include decorators."
      (progn
        (or (python-nav-end-of-defun)
            (end-of-line 1))
-       (point-marker)))))
+       (point-marker))
+     nil  ;; noop
+     msg)))
 
 (defun python-shell-send-file (file-name &optional process temp-file-name
-                                         delete)
+                                         delete msg)
   "Send FILE-NAME to inferior Python PROCESS.
 If TEMP-FILE-NAME is passed then that file is used for processing
-instead, while internally the shell will continue to use FILE-NAME.
-If DELETE is non-nil, delete the file afterwards."
-  (interactive "fFile to send: ")
-  (let* ((process (or process (python-shell-get-or-create-process)))
+instead, while internally the shell will continue to use
+FILE-NAME.  If TEMP-FILE-NAME and DELETE are non-nil, then
+TEMP-FILE-NAME is deleted after evaluation is performed.  When
+optional argument MSG is non-nil, forces display of a
+user-friendly message if there's no process running; defaults to
+t when called interactively."
+  (interactive
+   (list
+    (read-file-name "File to send: ")   ; file-name
+    nil                                 ; process
+    nil                                 ; temp-file-name
+    nil                                 ; delete
+    t))                                 ; msg
+  (let* ((process (or process (python-shell-get-process-or-error msg)))
+         (encoding (with-temp-buffer
+                     (insert-file-contents
+                      (or temp-file-name file-name))
+                     (python-info-encoding)))
+         (file-name (expand-file-name
+                     (or (file-remote-p file-name 'localname)
+                         file-name)))
          (temp-file-name (when temp-file-name
                            (expand-file-name
                             (or (file-remote-p temp-file-name 'localname)
-                                temp-file-name))))
-         (file-name (or (when file-name
-                          (expand-file-name
-                           (or (file-remote-p file-name 'localname)
-                               file-name)))
-                        temp-file-name)))
-    (when (not file-name)
-      (error "If FILE-NAME is nil then TEMP-FILE-NAME must be non-nil"))
+                                temp-file-name)))))
     (python-shell-send-string
      (format
-      (concat "__pyfile = open('''%s''');"
-              "exec(compile(__pyfile.read(), '''%s''', 'exec'));"
-              "__pyfile.close()%s")
-      (or temp-file-name file-name) file-name
-      (if delete (format "; import os; os.remove('''%s''')"
-                         (or temp-file-name file-name))
-        ""))
+      (concat
+       "import codecs, os;"
+       "__pyfile = codecs.open('''%s''', encoding='''%s''');"
+       "__code = __pyfile.read().encode('''%s''');"
+       "__pyfile.close();"
+       (when (and delete temp-file-name)
+         (format "os.remove('''%s''');" temp-file-name))
+       "exec(compile(__code, '''%s''', 'exec'));")
+      (or temp-file-name file-name) encoding encoding file-name)
      process)))
 
-(defun python-shell-switch-to-shell ()
-  "Switch to inferior Python process buffer."
-  (interactive)
-  (process-buffer (python-shell-get-or-create-process)) t)
+(defun python-shell-switch-to-shell (&optional msg)
+  "Switch to inferior Python process buffer.
+When optional argument MSG is non-nil, forces display of a
+user-friendly message if there's no process running; defaults to
+t when called interactively."
+  (interactive "p")
+  (pop-to-buffer
+   (process-buffer (python-shell-get-process-or-error msg)) nil t))
 
 (defun python-shell-send-setup-code ()
   "Send all setup code for shell.
@@ -2849,25 +2962,30 @@ This function takes the list of setup code to send from 
the
 
 (defcustom python-shell-completion-setup-code
   "try:
-    import readline, rlcompleter
+    import __builtin__
 except ImportError:
+    # Python 3
+    import builtins as __builtin__
+try:
+    import readline, rlcompleter
+except:
     def __PYTHON_EL_get_completions(text):
         return []
 else:
     def __PYTHON_EL_get_completions(text):
+        builtins = dir(__builtin__)
         completions = []
         try:
             splits = text.split()
             is_module = splits and splits[0] in ('from', 'import')
-            is_ipython = getattr(
-                __builtins__, '__IPYTHON__',
-                getattr(__builtins__, '__IPYTHON__active', False))
+            is_ipython = ('__IPYTHON__' in builtins or
+                          '__IPYTHON__active' in builtins)
             if is_module:
                 from IPython.core.completerlib import module_completion
                 completions = module_completion(text.strip())
-            elif is_ipython and getattr(__builtins__, '__IP', None):
+            elif is_ipython and '__IP' in builtins:
                 completions = __IP.complete(text)
-            elif is_ipython and getattr(__builtins__, 'get_ipython', None):
+            elif is_ipython and 'get_ipython' in builtins:
                 completions = get_ipython().Completer.all_completions(text)
             else:
                 i = 0
@@ -2904,6 +3022,194 @@ the full statement in the case of imports."
   "25.1"
   "Completion string code must work for (i)pdb.")
 
+(defcustom python-shell-completion-native-disabled-interpreters
+  ;; PyPy's readline cannot handle some escape sequences yet.
+  (list "pypy")
+  "List of disabled interpreters.
+When a match is found, native completion is disabled."
+  :type '(repeat string))
+
+(defcustom python-shell-completion-native-enable t
+  "Enable readline based native completion."
+  :type 'boolean)
+
+(defcustom python-shell-completion-native-output-timeout 0.01
+  "Time in seconds to wait for completion output before giving up."
+  :type 'float)
+
+(defvar python-shell-completion-native-redirect-buffer
+  " *Python completions redirect*"
+  "Buffer to be used to redirect output of readline commands.")
+
+(defun python-shell-completion-native-interpreter-disabled-p ()
+  "Return non-nil if interpreter has native completion disabled."
+  (when python-shell-completion-native-disabled-interpreters
+    (string-match
+     (regexp-opt python-shell-completion-native-disabled-interpreters)
+     (file-name-nondirectory python-shell-interpreter))))
+
+(defun python-shell-completion-native-try ()
+  "Return non-nil if can trigger native completion."
+  (let ((python-shell-completion-native-enable t))
+    (python-shell-completion-native-get-completions
+     (get-buffer-process (current-buffer))
+     nil "int")))
+
+(defun python-shell-completion-native-setup ()
+  "Try to setup native completion, return non-nil on success."
+  (let ((process (python-shell-get-process)))
+    (python-shell-send-string
+     (funcall
+      'mapconcat
+      #'identity
+      (list
+       "try:"
+       "    import readline, rlcompleter"
+       ;; Remove parens on callables as it breaks completion on
+       ;; arguments (e.g. str(Ari<tab>)).
+       "    class Completer(rlcompleter.Completer):"
+       "        def _callable_postfix(self, val, word):"
+       "            return word"
+       "    readline.set_completer(Completer().complete)"
+       "    if readline.__doc__ and 'libedit' in readline.__doc__:"
+       "        readline.parse_and_bind('bind ^I rl_complete')"
+       "    else:"
+       "        readline.parse_and_bind('tab: complete')"
+       "    print ('python.el: readline is available')"
+       "except:"
+       "    print ('python.el: readline not available')")
+      "\n")
+     process)
+    (python-shell-accept-process-output process)
+    (when (save-excursion
+            (re-search-backward
+             (regexp-quote "python.el: readline is available") nil t 1))
+      (python-shell-completion-native-try))))
+
+(defun python-shell-completion-native-turn-off (&optional msg)
+  "Turn off shell native completions.
+With argument MSG show deactivation message."
+  (interactive "p")
+  (python-shell-with-shell-buffer
+    (set (make-local-variable 'python-shell-completion-native-enable) nil)
+    (when msg
+      (message "Shell native completion is disabled, using fallback"))))
+
+(defun python-shell-completion-native-turn-on (&optional msg)
+  "Turn on shell native completions.
+With argument MSG show deactivation message."
+  (interactive "p")
+  (python-shell-with-shell-buffer
+    (set (make-local-variable 'python-shell-completion-native-enable) t)
+    (python-shell-completion-native-turn-on-maybe msg)))
+
+(defun python-shell-completion-native-turn-on-maybe (&optional msg)
+  "Turn on native completions if enabled and available.
+With argument MSG show activation/deactivation message."
+  (interactive "p")
+  (python-shell-with-shell-buffer
+    (when python-shell-completion-native-enable
+      (cond
+       ((python-shell-completion-native-interpreter-disabled-p)
+        (python-shell-completion-native-turn-off msg))
+       ((python-shell-completion-native-setup)
+        (when msg
+          (message "Shell native completion is enabled.")))
+       (t (lwarn
+           '(python python-shell-completion-native-turn-on-maybe)
+           :warning
+           (concat
+            "Your `python-shell-interpreter' doesn't seem to "
+            "support readline, yet `python-shell-completion-native' "
+            (format "was `t' and %S is not part of the "
+                    (file-name-nondirectory python-shell-interpreter))
+            "`python-shell-completion-native-disabled-interpreters' "
+            "list.  Native completions have been disabled locally. "))
+          (python-shell-completion-native-turn-off msg))))))
+
+(defun python-shell-completion-native-turn-on-maybe-with-msg ()
+  "Like `python-shell-completion-native-turn-on-maybe' but force messages."
+  (python-shell-completion-native-turn-on-maybe t))
+
+(add-hook 'inferior-python-mode-hook
+          #'python-shell-completion-native-turn-on-maybe-with-msg)
+
+(defun python-shell-completion-native-toggle (&optional msg)
+  "Toggle shell native completion.
+With argument MSG show activation/deactivation message."
+  (interactive "p")
+  (python-shell-with-shell-buffer
+    (if python-shell-completion-native-enable
+        (python-shell-completion-native-turn-off msg)
+      (python-shell-completion-native-turn-on msg))
+    python-shell-completion-native-enable))
+
+(defun python-shell-completion-native-get-completions (process import input)
+  "Get completions using native readline for PROCESS.
+When IMPORT is non-nil takes precedence over INPUT for
+completion."
+  (when (and python-shell-completion-native-enable
+             (python-util-comint-last-prompt)
+             (>= (point) (cdr (python-util-comint-last-prompt))))
+    (let* ((input (or import input))
+           (original-filter-fn (process-filter process))
+           (redirect-buffer (get-buffer-create
+                             python-shell-completion-native-redirect-buffer))
+           (separators (python-rx
+                        (or whitespace open-paren close-paren)))
+           (trigger "\t\t\t")
+           (new-input (concat input trigger))
+           (input-length
+            (save-excursion
+              (+ (- (point-max) (comint-bol)) (length new-input))))
+           (delete-line-command (make-string input-length ?\b))
+           (input-to-send (concat new-input delete-line-command)))
+      ;; Ensure restoring the process filter, even if the user quits
+      ;; or there's some other error.
+      (unwind-protect
+          (with-current-buffer redirect-buffer
+            ;; Cleanup the redirect buffer
+            (delete-region (point-min) (point-max))
+            ;; Mimic `comint-redirect-send-command', unfortunately it
+            ;; can't be used here because it expects a newline in the
+            ;; command and that's exactly what we are trying to avoid.
+            (let ((comint-redirect-echo-input nil)
+                  (comint-redirect-verbose nil)
+                  (comint-redirect-perform-sanity-check nil)
+                  (comint-redirect-insert-matching-regexp nil)
+                  ;; Feed it some regex that will never match.
+                  (comint-redirect-finished-regexp "^\\'$")
+                  (comint-redirect-output-buffer redirect-buffer))
+              ;; Compatibility with Emacs 24.x.  Comint changed and
+              ;; now `comint-redirect-filter' gets 3 args.  This
+              ;; checks which version of `comint-redirect-filter' is
+              ;; in use based on its args and uses `apply-partially'
+              ;; to make it up for the 3 args case.
+              (if (= (length
+                      (help-function-arglist 'comint-redirect-filter)) 3)
+                  (set-process-filter
+                   process (apply-partially
+                            #'comint-redirect-filter original-filter-fn))
+                (set-process-filter process #'comint-redirect-filter))
+              (process-send-string process input-to-send)
+              (accept-process-output
+               process
+               python-shell-completion-native-output-timeout)
+              ;; XXX: can't use `python-shell-accept-process-output'
+              ;; here because there are no guarantees on how output
+              ;; ends.  The workaround here is to call
+              ;; `accept-process-output' until we don't find anything
+              ;; else to accept.
+              (while (accept-process-output
+                      process
+                      python-shell-completion-native-output-timeout))
+              (cl-remove-duplicates
+               (split-string
+                (buffer-substring-no-properties
+                 (point-min) (point-max))
+                separators t))))
+        (set-process-filter process original-filter-fn)))))
+
 (defun python-shell-completion-get-completions (process import input)
   "Do completion at point using PROCESS for IMPORT or INPUT.
 When IMPORT is non-nil takes precedence over INPUT for
@@ -2961,11 +3267,15 @@ using that one instead of current buffer's process."
                 last-prompt-end
               (forward-char (length (match-string-no-properties 0)))
               (point))))
-         (end (point)))
+         (end (point))
+         (completion-fn
+          (if python-shell-completion-native-enable
+              #'python-shell-completion-native-get-completions
+            #'python-shell-completion-get-completions)))
     (list start end
           (completion-table-dynamic
            (apply-partially
-            #'python-shell-completion-get-completions
+            completion-fn
             process import-statement)))))
 
 (define-obsolete-function-alias
@@ -3524,7 +3834,9 @@ The skeleton will be bound to python-skeleton-NAME."
 ;;; Code check
 
 (defcustom python-check-command
-  "pyflakes"
+  (or (executable-find "pyflakes")
+      (executable-find "epylint")
+      "install pyflakes, pylint or something else")
   "Command used to check a Python file."
   :type 'string
   :group 'python)
@@ -3535,7 +3847,7 @@ The skeleton will be bound to python-skeleton-NAME."
   :type 'string
   :group 'python)
 
-(defvar python-check-custom-command nil
+(defvar-local python-check-custom-command nil
   "Internal use.")
 
 (defun python-check (command)
@@ -3615,9 +3927,12 @@ returns will be used.  If not FORCE-PROCESS is passed 
what
       (let ((input (or force-input
                        (python-info-current-symbol t))))
         (and input
-             (python-shell-send-string-no-output
-              (format python-eldoc-string-code input)
-              process))))))
+             ;; Prevent resizing the echo area when iPython is
+             ;; enabled.  Bug#18794.
+             (python-util-strip-string
+              (python-shell-send-string-no-output
+               (format python-eldoc-string-code input)
+               process)))))))
 
 (defun python-eldoc-function ()
   "`eldoc-documentation-function' for Python.
@@ -4109,6 +4424,32 @@ operator."
                 (* whitespace) line-end))
     (string-equal "" (match-string-no-properties 1))))
 
+(defun python-info-encoding-from-cookie ()
+  "Detect current buffer's encoding from its coding cookie.
+Returns the encoding as a symbol."
+  (let ((first-two-lines
+         (save-excursion
+           (save-restriction
+             (widen)
+             (goto-char (point-min))
+             (forward-line 2)
+             (buffer-substring-no-properties
+              (point)
+              (point-min))))))
+    (when (string-match (python-rx coding-cookie) first-two-lines)
+      (intern (match-string-no-properties 1 first-two-lines)))))
+
+(defun python-info-encoding ()
+  "Return encoding for file.
+Try `python-info-encoding-from-cookie', if none is found then
+default to utf-8."
+  ;; If no encoding is defined, then it's safe to use UTF-8: Python 2
+  ;; uses ASCII as default while Python 3 uses UTF-8.  This means that
+  ;; in the worst case scenario python.el will make things work for
+  ;; Python 2 files with unicode data and no encoding defined.
+  (or (python-info-encoding-from-cookie)
+      'utf-8))
+
 
 ;;; Utility functions
 
@@ -4292,7 +4633,10 @@ Arguments START and END narrow the buffer region to work 
on."
        'python-nav-forward-sexp)
 
   (set (make-local-variable 'font-lock-defaults)
-       '(python-font-lock-keywords nil nil nil nil))
+       '(python-font-lock-keywords
+         nil nil nil nil
+         (font-lock-syntactic-face-function
+          . python-font-lock-syntactic-face-function)))
 
   (set (make-local-variable 'syntax-propertize-function)
        python-syntax-propertize-function)
@@ -4338,8 +4682,8 @@ Arguments START and END narrow the buffer region to work 
on."
                                                  (current-column))))
          (^ '(- (1+ (current-indentation))))))
 
-  (set (make-local-variable 'eldoc-documentation-function)
-       #'python-eldoc-function)
+  (add-function :before-until (local 'eldoc-documentation-function)
+                #'python-eldoc-function)
 
   (add-to-list 'hs-special-modes-alist
                `(python-mode "^\\s-*\\(?:def\\|class\\)\\>" nil "#"
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 2f23e33..d1e42ca 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -1,6 +1,6 @@
 ;;; ruby-mode.el --- Major mode for editing Ruby files
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Authors: Yukihiro Matsumoto
 ;;     Nobuyoshi Nakada
@@ -152,6 +152,7 @@ This should only be called after matching against 
`ruby-here-doc-beg-re'."
     (define-key map (kbd "M-C-p") 'ruby-beginning-of-block)
     (define-key map (kbd "M-C-n") 'ruby-end-of-block)
     (define-key map (kbd "C-c {") 'ruby-toggle-block)
+    (define-key map (kbd "C-c '") 'ruby-toggle-string-quotes)
     map)
   "Keymap used in Ruby mode.")
 
@@ -164,6 +165,8 @@ This should only be called after matching against 
`ruby-here-doc-beg-re'."
     ["End of Block" ruby-end-of-block t]
     ["Toggle Block" ruby-toggle-block t]
     "--"
+    ["Toggle String Quotes" ruby-toggle-string-quotes t]
+    "--"
     ["Backward Sexp" ruby-backward-sexp
      :visible (not ruby-use-smie)]
     ["Backward Sexp" backward-sexp
@@ -1763,6 +1766,43 @@ If the result is do-end block, it will always be 
multiline."
               (ruby-do-end-to-brace beg end)))
       (goto-char start))))
 
+(defun ruby--string-region ()
+  "Return region for string at point."
+  (let ((state (syntax-ppss)))
+    (when (memq (nth 3 state) '(?' ?\"))
+      (save-excursion
+        (goto-char (nth 8 state))
+        (forward-sexp)
+        (list (nth 8 state) (point))))))
+
+(defun ruby-string-at-point-p ()
+  "Check if cursor is at a string or not."
+  (ruby--string-region))
+
+(defun ruby--inverse-string-quote (string-quote)
+  "Get the inverse string quoting for STRING-QUOTE."
+  (if (equal string-quote "\"") "'" "\""))
+
+(defun ruby-toggle-string-quotes ()
+  "Toggle string literal quoting between single and double."
+  (interactive)
+  (when (ruby-string-at-point-p)
+    (let* ((region (ruby--string-region))
+           (min (nth 0 region))
+           (max (nth 1 region))
+           (string-quote (ruby--inverse-string-quote 
(buffer-substring-no-properties min (1+ min))))
+           (content
+            (buffer-substring-no-properties (1+ min) (1- max))))
+      (setq content
+            (if (equal string-quote "\"")
+                (replace-regexp-in-string "\\\\\"" "\"" 
(replace-regexp-in-string "\\([^\\\\]\\)'" "\\1\\\\'" content))
+              (replace-regexp-in-string "\\\\\'" "'" (replace-regexp-in-string 
"\\([^\\\\]\\)\"" "\\1\\\\\"" content))))
+      (let ((orig-point (point)))
+        (delete-region min max)
+        (insert
+         (format "%s%s%s" string-quote content string-quote))
+        (goto-char orig-point)))))
+
 (eval-and-compile
   (defconst ruby-percent-literal-beg-re
     "\\(%\\)[qQrswWxIi]?\\([[:punct:]]\\)"
@@ -2206,9 +2246,10 @@ See `font-lock-syntax-table'.")
 (add-to-list 'auto-mode-alist
              (cons (purecopy (concat "\\(?:\\."
                                      "rb\\|ru\\|rake\\|thor"
-                                     "\\|jbuilder\\|gemspec\\|podspec"
+                                     "\\|jbuilder\\|rabl\\|gemspec\\|podspec"
                                      "\\|/"
                                      "\\(?:Gem\\|Rake\\|Cap\\|Thor"
+                                     "\\|Puppet\\|Berks"
                                      "\\|Vagrant\\|Guard\\|Pod\\)file"
                                      "\\)\\'")) 'ruby-mode))
 
diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el
index c47a3bd..a21bc19 100644
--- a/lisp/progmodes/scheme.el
+++ b/lisp/progmodes/scheme.el
@@ -1,6 +1,6 @@
 ;;; scheme.el --- Scheme (and DSSSL) editing mode    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1986-1988, 1997-1998, 2001-2014 Free Software
+;; Copyright (C) 1986-1988, 1997-1998, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Bill Rozas <address@hidden>
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index 5631358..135f945 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -1,6 +1,6 @@
 ;;; sh-script.el --- shell-script editing commands for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1993-1997, 1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1997, 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <address@hidden>
 ;; Version: 2.0f
@@ -1598,7 +1598,6 @@ buffer indents as it currently is indented.
 
 
 \\[backward-delete-char-untabify]       Delete backward one position, even if 
it was a tab.
-\\[newline-and-indent]  Delete unquoted space and indent new line same as this 
one.
 \\[sh-end-of-command]   Go to end of successive commands.
 \\[sh-beginning-of-command]     Go to beginning of successive commands.
 \\[sh-set-shell]        Set this buffer's shell, and maybe its magic number.
@@ -2014,12 +2013,12 @@ May return nil if the line should not be treated as 
continued."
                    (and (numberp indent) (numberp initial)
                         (<= indent initial)))))
      `(column . ,(+ initial sh-indentation)))
-    (`(:before . ,(or `"(" `"{" `"["))
+    (`(:before . ,(or `"(" `"{" `"[" "while" "if" "for" "case"))
      (if (not (smie-rule-prev-p "&&" "||" "|"))
          (when (smie-rule-hanging-p)
            (smie-rule-parent))
        (unless (smie-rule-bolp)
-        (smie-backward-sexp 'halfexp)
+        (while (equal "|" (nth 2 (smie-backward-sexp 'halfexp))))
         `(column . ,(smie-indent-virtual)))))
     ;; FIXME: Maybe this handling of ;; should be made into
     ;; a smie-rule-terminator function that takes the substitute ";" as arg.
@@ -2374,7 +2373,7 @@ Calls the value of `sh-set-shell-hook' if set."
            (sh-make-vars-local))
        (message "Indentation setup for shell type %s" sh-shell))
     (message "No indentation for this shell type.")
-    (setq indent-line-function 'sh-basic-indent-line))
+    (setq-local indent-line-function 'sh-basic-indent-line))
   (when font-lock-mode
     (setq font-lock-set-defaults nil)
     (font-lock-set-defaults)
@@ -2500,7 +2499,8 @@ Lines containing only comments are considered empty."
                    (current-column)))
        current)
     (save-excursion
-      (indent-to (if (eq this-command 'newline-and-indent)
+      (indent-to (if (or (eq this-command 'newline-and-indent)
+                         (and electric-indent-mode (eq this-command 'newline)))
                     previous
                   (if (< (current-column)
                          (setq current (progn (back-to-indentation)
diff --git a/lisp/progmodes/simula.el b/lisp/progmodes/simula.el
index 2dfd893..bc01338 100644
--- a/lisp/progmodes/simula.el
+++ b/lisp/progmodes/simula.el
@@ -1,6 +1,6 @@
 ;;; simula.el --- SIMULA 87 code editing commands for Emacs
 
-;; Copyright (C) 1992, 1994, 1996, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1992, 1994, 1996, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Hans Henrik Eriksen <address@hidden>
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index e8a95ec..2ed3a74 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -1,6 +1,6 @@
 ;;; sql.el --- specialized comint.el for SQL interpreters  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: Michael Mauger <address@hidden>
diff --git a/lisp/progmodes/subword.el b/lisp/progmodes/subword.el
index e49037e..a279e29 100644
--- a/lisp/progmodes/subword.el
+++ b/lisp/progmodes/subword.el
@@ -1,6 +1,6 @@
 ;;; subword.el --- Handling capitalized subwords in a nomenclature -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Masatake YAMATO
 
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index c98c204..8f7705b 100644
--- a/lisp/progmodes/tcl.el
+++ b/lisp/progmodes/tcl.el
@@ -1,6 +1,6 @@
 ;;; tcl.el --- Tcl code editing commands for Emacs
 
-;; Copyright (C) 1994, 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1998-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Author: Tom Tromey <address@hidden>
diff --git a/lisp/progmodes/vera-mode.el b/lisp/progmodes/vera-mode.el
index 6a88c6f..5f1cb53 100644
--- a/lisp/progmodes/vera-mode.el
+++ b/lisp/progmodes/vera-mode.el
@@ -1,6 +1,6 @@
 ;;; vera-mode.el --- major mode for editing Vera files
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author:      Reto Zimmermann <address@hidden>
 ;; Maintainer:  Reto Zimmermann <address@hidden>
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 71af582..7b6f2d3 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -1,6 +1,6 @@
 ;;; verilog-mode.el --- major mode for editing verilog source in Emacs
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael McNamara <address@hidden>
 ;;    Wilson Snyder <address@hidden>
@@ -123,7 +123,7 @@
 ;;; Code:
 
 ;; This variable will always hold the version number of the mode
-(defconst verilog-mode-version "2014-10-03-c075a49-vpo"
+(defconst verilog-mode-version "2014-11-12-aa4b777-vpo"
   "Version of this Verilog mode.")
 (defconst verilog-mode-release-emacs t
   "If non-nil, this version of Verilog mode was released with Emacs itself.")
@@ -2269,8 +2269,9 @@ find the errors."
 (defconst verilog-no-indent-begin-re
   (eval-when-compile
     (verilog-regexp-words
-     '( "if" "else" "while" "for" "repeat" "always" "always_comb" "always_ff" 
"always_latch"
-       "initial" "final"))))
+     '("always" "always_comb" "always_ff" "always_latch" "initial" "final" ;; 
procedural blocks
+       "if" "else"                                                         ;; 
conditional statements
+       "while" "for" "foreach" "repeat" "do" "forever" ))))                ;; 
loop statements
 
 (defconst verilog-ends-re
   ;; Parenthesis indicate type of keyword found
@@ -2328,6 +2329,7 @@ find the errors."
                "endinterface"
                "endpackage"
                "endsequence"
+               "endproperty"
                "endspecify"
                "endtable"
                "endtask"
@@ -2360,6 +2362,7 @@ find the errors."
           "\\(program\\)\\|"      ; 13
           "\\(sequence\\)\\|"     ; 14
          "\\(clocking\\)\\|"      ; 15
+         "\\(property\\)\\|"      ; 16
          "\\)\\>\\)"))
 (defconst verilog-end-block-re
   (eval-when-compile
@@ -2424,7 +2427,7 @@ find the errors."
    "\\(\\<package\\>\\)\\|"
    "\\(\\<final\\>\\)\\|"
    "\\(@\\)\\|"
-   "\\(\\<while\\>\\)\\|"
+   "\\(\\<while\\>\\)\\|\\(\\<do\\>\\)\\|"
    "\\(\\<for\\(ever\\|each\\)?\\>\\)\\|"
    "\\(\\<repeat\\>\\)\\|\\(\\<wait\\>\\)\\|"
    "#"))
@@ -2518,15 +2521,20 @@ find the errors."
        "join" "join_any" "join_none"
        "end"
        "endcase"
-       "endconfig"
+       "endchecker"
        "endclass"
        "endclocking"
+       "endconfig"
        "endfunction"
        "endgenerate"
+       "endgroup"
        "endmodule"
        "endprimitive"
        "endinterface"
        "endpackage"
+       "endprogram"
+       "endproperty"
+       "endsequence"
        "endspecify"
        "endtable"
        "endtask" )
@@ -2756,10 +2764,45 @@ find the errors."
   "String used to mark end of excluded text.")
 (defconst verilog-preprocessor-re
   (eval-when-compile
-    (verilog-regexp-words
-     `(
-       "`define" "`include" "`ifdef" "`ifndef" "`if" "`endif" "`else"
-       ))))
+    (concat
+     ;; single words
+     "\\(?:"
+     (verilog-regexp-words
+      `("`__FILE__"
+       "`__LINE__"
+       "`celldefine"
+       "`else"
+       "`end_keywords"
+       "`endcelldefine"
+       "`endif"
+       "`nounconnected_drive"
+       "`resetall"
+       "`unconnected_drive"
+       "`undefineall"))
+     "\\)\\|\\(?:"
+     ;; two words: i.e. `ifdef DEFINE
+     
"\\<\\(`elsif\\|`ifn?def\\|`undef\\|`default_nettype\\|`begin_keywords\\)\\>\\s-"
+     "\\)\\|\\(?:"
+     ;; `line number "filename" level
+     "\\<\\(`line\\)\\>\\s-+[0-9]+\\s-+\"[^\"]+\"\\s-+[012]"
+     "\\)\\|\\(?:"
+     ;;`include "file" or `include <file>
+     "\\<\\(`include\\)\\>\\s-+\\(?:\"[^\"]+\"\\|<[^>]+>\\)"
+     "\\)\\|\\(?:"
+     ;; `pragma <stuff> (no mention in IEEE 1800-2012 that pragma can span 
multiple lines
+     "\\<\\(`pragma\\)\\>\\s-+.+$"
+     "\\)\\|\\(?:"
+     ;; `timescale time_unit / time_precision
+     
"\\<\\(`timescale\\)\\>\\s-+10\\{0,2\\}\\s-*[munpf]?s\\s-*\\/\\s-*10\\{0,2\\}\\s-*[munpf]?s"
+     "\\)\\|\\(?:"
+     ;; `define and `if can span multiple lines if line ends in '\'. NOTE: `if 
is not IEEE 1800-2012
+     ;; from http://www.emacswiki.org/emacs/MultilineRegexp
+     (concat "\\<\\(`define\\|`if\\)\\>" ;; directive
+            "\\s-+" ;; separator
+            "\\(.*\\(?:\n.*\\)*?\\)" ;; definition: to tend of line, the maybe 
more lines (excludes any trailing \n)
+            "\\(?:\n\\s-*\n\\|\\'\\)") ;; blank line or EOF
+     "\\)"
+     )))
 
 (defconst verilog-keywords
   '( "`case" "`default" "`define" "`else" "`endfor" "`endif"
@@ -4126,9 +4169,7 @@ Uses `verilog-scan' cache."
     (while (and
            (> (marker-position e) (point))
            (verilog-re-search-forward
-            (concat
-             
"\\<end\\(\\(function\\)\\|\\(task\\)\\|\\(module\\)\\|\\(primitive\\)\\|\\(interface\\)\\|\\(package\\)\\|\\(case\\)\\)?\\>"
-             "\\|\\(`endif\\)\\|\\(`else\\)")
+            verilog-auto-end-comment-lines-re
             nil 'move))
       (goto-char (match-beginning 0))
       (let ((indent-str (verilog-indent-line)))
@@ -4157,45 +4198,47 @@ Uses `verilog-scan' cache."
        ;; or the token before us unambiguously ends a statement,
        ;; then move back a token and test again.
        (not (or
-          ;; stop if beginning of buffer
-             (bolp)
-          ;; stop if we find a ;
+             ;; stop if beginning of buffer
+             (bobp)
+             ;; stop if we find a ;
              (= (preceding-char) ?\;)
-          ;; stop if we see a named coverpoint
+             ;; stop if we see a named coverpoint
              (looking-at "\\w+\\W*:\\W*\\(coverpoint\\|cross\\|constraint\\)")
-          ;; keep going if we are in the middle of a word
+             ;; keep going if we are in the middle of a word
              (not (or (looking-at "\\<") (forward-word -1)))
-          ;; stop if we see an assertion (perhaps labeled)
+             ;; stop if we see an assertion (perhaps labeled)
              (and
               (looking-at 
"\\(\\<\\(assert\\|assume\\|cover\\)\\>\\s-+\\<property\\>\\)\\|\\(\\<assert\\>\\)")
               (progn
-             (setq h (point))
-             (save-excursion
-               (verilog-backward-token)
-               (if (looking-at verilog-label-re)
-                   (setq h (point))))
-             (goto-char h)))
-          ;; stop if we see an extended complete reg, perhaps a complete one
+                (setq h (point))
+                (save-excursion
+                  (verilog-backward-token)
+                  (if (looking-at verilog-label-re)
+                      (setq h (point))))
+                (goto-char h)))
+             ;; stop if we see an extended complete reg, perhaps a complete one
              (and
-           (looking-at verilog-complete-reg)
-           (let* ((p (point)))
-             (while (and (looking-at verilog-extended-complete-re)
-                         (progn (setq p (point))
-                                (verilog-backward-token)
-                                (/= p (point)))))
-             (goto-char p)))
-          ;; stop if we see a complete reg (previous found extended ones)
+              (looking-at verilog-complete-reg)
+              (let* ((p (point)))
+                (while (and (looking-at verilog-extended-complete-re)
+                            (progn (setq p (point))
+                                   (verilog-backward-token)
+                                   (/= p (point)))))
+                (goto-char p)))
+             ;; stop if we see a complete reg (previous found extended ones)
              (looking-at verilog-basic-complete-re)
-          ;; stop if previous token is an ender
+             ;; stop if previous token is an ender
              (save-excursion
-            (verilog-backward-token)
-            (or
-             (looking-at verilog-end-block-re)
-             (looking-at verilog-preprocessor-re))))) ;; end of test
-    (verilog-backward-syntactic-ws)
-    (verilog-backward-token))
+               (verilog-backward-token)
+               (looking-at verilog-end-block-re))))
+      (verilog-backward-syntactic-ws)
+      (verilog-backward-token))
     ;; Now point is where the previous line ended.
-    (verilog-forward-syntactic-ws)))
+    (verilog-forward-syntactic-ws)
+    ;; Skip forward over any preprocessor directives, as they have wacky 
indentation
+    (if (looking-at verilog-preprocessor-re)
+       (progn (goto-char (match-end 0))
+              (verilog-forward-syntactic-ws)))))
 
 (defun verilog-beg-of-statement-1 ()
   "Move backward to beginning of statement."
@@ -4209,13 +4252,12 @@ Uses `verilog-scan' cache."
         (verilog-backward-syntactic-ws)
         (if (or (bolp)
                 (= (preceding-char) ?\;)
-               (save-excursion
+               (progn
                  (verilog-backward-token)
                  (looking-at verilog-ends-re)))
             (progn
               (goto-char pt)
-              (throw 'done t))
-          (verilog-backward-token))))
+              (throw 'done t)))))
     (verilog-forward-syntactic-ws)))
 ;
 ;    (while (and
@@ -4773,10 +4815,10 @@ primitive or interface named NAME."
                  (cond
                   ((match-end 5) ;; of verilog-end-block-ordered-re
                    (setq reg 
"\\(\\<function\\>\\)\\|\\(\\<\\(endfunction\\|task\\|\\(macro\\)?module\\|primitive\\)\\>\\)")
-                   (setq name-re "\\w+\\s-*("))
+                   (setq name-re "\\w+\\(?:\n\\|\\s-\\)*[(;]"))
                   ((match-end 6) ;; of verilog-end-block-ordered-re
                    (setq reg 
"\\(\\<task\\>\\)\\|\\(\\<\\(endtask\\|function\\|\\(macro\\)?module\\|primitive\\)\\>\\)")
-                   (setq name-re "\\w+\\s-*("))
+                   (setq name-re "\\w+\\(?:\n\\|\\s-\\)*[(;]"))
                   ((match-end 7) ;; of verilog-end-block-ordered-re
                    (setq reg 
"\\(\\<\\(macro\\)?module\\>\\)\\|\\<endmodule\\>"))
                   ((match-end 8) ;; of verilog-end-block-ordered-re
@@ -4795,6 +4837,8 @@ primitive or interface named NAME."
                    (setq reg 
"\\(\\<\\(rand\\)?sequence\\>\\)\\|\\(\\<\\(endsequence\\|primitive\\|interface\\|\\(macro\\)?module\\)\\>\\)"))
                   ((match-end 15) ;; of verilog-end-block-ordered-re
                    (setq reg "\\(\\<clocking\\>\\)\\|\\<endclocking\\>"))
+                  ((match-end 16) ;; of verilog-end-block-ordered-re
+                   (setq reg "\\(\\<property\\>\\)\\|\\<endproperty\\>"))
 
                   (t (error "Problem in verilog-set-auto-endcomments")))
                  (let (b e)
@@ -5849,7 +5893,9 @@ Set point to where line starts."
    (;-- any of begin|initial|while are complete statements; 'begin : foo' is 
also complete
     t
     (forward-word -1)
-    (while (= (preceding-char) ?\_)
+    (while (or (= (preceding-char) ?\_)
+               (= (preceding-char) ?\@)
+               (= (preceding-char) ?\.))
       (forward-word -1))
     (cond
      ((looking-at "\\<else\\>")
@@ -6103,14 +6149,18 @@ Return >0 for nested struct."
 (defun verilog-at-constraint-p ()
   "If at the { of a constraint or coverpoint definition, return true, moving 
point to constraint."
   (if (save-excursion
+       (let ((p (point)))
        (and
         (equal (char-after) ?\{)
         (forward-list)
         (progn (backward-char 1)
                (verilog-backward-ws&directives)
+         (and
                (or (equal (char-before) ?\{) ;; empty case
                     (equal (char-before) ?\;)
-                    (equal (char-before) ?\})))))
+                    (equal (char-before) ?\}))
+                    ;; skip what looks like bus repetition operator {#{
+                    (not (string-match "^{\\s-*[0-9]+\\s-*{" (buffer-substring 
p (point)))))))))
       (progn
         (let ( (pt (point)) (pass 0))
           (verilog-backward-ws&directives)
@@ -6429,6 +6479,9 @@ Only look at a few lines to determine indent level."
           (looking-at verilog-declaration-re))
       (verilog-indent-declaration ind))
 
+     (;-- form feeds - ignored as bug in indent-line-to in < 24.5
+      (looking-at "\f"))
+
      (;-- Everything else
       t
       (let ((val (eval (cdr (assoc type verilog-indent-alist)))))
@@ -8894,7 +8947,6 @@ IGNORE-NEXT is true to ignore next token, fake from 
inside case statement."
   (save-excursion
     (let* (;;(dbg "")
           sigs-out-d sigs-out-i sigs-out-unk sigs-temp sigs-in)
-      (search-forward ")")
       (verilog-read-always-signals-recurse nil nil nil)
       (setq sigs-out-i (append sigs-out-i sigs-out-unk)
            sigs-out-unk nil)
@@ -11731,6 +11783,9 @@ Limitations:
 
   Typedefs must match `verilog-typedef-regexp', which is disabled by default.
 
+  Types are added to declarations if an AUTOLOGIC or
+  `verilog-auto-wire-type' is set to logic.
+
   Signals matching `verilog-auto-output-ignore-regexp' are not included.
 
 An example (see `verilog-auto-inst' for what else is going on here):
@@ -11872,6 +11927,9 @@ Limitations:
 
   Typedefs must match `verilog-typedef-regexp', which is disabled by default.
 
+  Types are added to declarations if an AUTOLOGIC or
+  `verilog-auto-wire-type' is set to logic.
+
   Signals matching `verilog-auto-input-ignore-regexp' are not included.
 
 An example (see `verilog-auto-inst' for what else is going on here):
@@ -11952,6 +12010,9 @@ Limitations:
 
   Typedefs must match `verilog-typedef-regexp', which is disabled by default.
 
+  Types are added to declarations if an AUTOLOGIC or
+  `verilog-auto-wire-type' is set to logic.
+
   Signals matching `verilog-auto-inout-ignore-regexp' are not included.
 
 An example (see `verilog-auto-inst' for what else is going on here):
@@ -12068,13 +12129,14 @@ same expansion will result from only extracting 
signals starting with i:
 
           /*AUTOINOUTMODULE(\"ExampMain\",\"^i\")*/
 
-You may also provide an optional second regular expression, in
-which case only signals which have that pin direction and data
-type will be included.  This matches against everything before
-the signal name in the declaration, for example against
-\"input\" (single bit), \"output logic\" (direction and type) or
-\"output [1:0]\" (direction and implicit type).  You also
-probably want to skip spaces in your regexp.
+You may also provide an optional third argument regular
+expression, in which case only signals which have that pin
+direction and data type matching that regular expression will be
+included.  This matches against everything before the signal name
+in the declaration, for example against \"input\" (single bit),
+\"output logic\" (direction and type) or \"output
+[1:0]\" (direction and implicit type).  You also probably want to
+skip spaces in your regexp.
 
 For example, the below will result in matching the output \"o\"
 against the previous example's module:
@@ -12193,7 +12255,21 @@ You may also provide an optional regular expression, 
in which case only
 signals matching the regular expression will be included.  For example the
 same expansion will result from only extracting signals starting with i:
 
-          /*AUTOINOUTCOMP(\"ExampMain\",\"^i\")*/"
+          /*AUTOINOUTCOMP(\"ExampMain\",\"^i\")*/
+
+You may also provide an optional third argument regular
+expression, in which case only signals which have that pin
+direction and data type matching that regular expression will be
+included.  This matches against everything before the signal name
+in the declaration, for example against \"input\" (single bit),
+\"output logic\" (direction and type) or \"output
+[1:0]\" (direction and implicit type).  You also probably want to
+skip spaces in your regexp.
+
+For example, the below will result in matching the output \"o\"
+against the previous example's module:
+
+          /*AUTOINOUTCOMP(\"ExampMain\",\"\",\"^output.*\")*/"
   (verilog-auto-inout-module t nil))
 
 (defun verilog-auto-inout-in ()
@@ -12244,7 +12320,7 @@ You may also provide an optional regular expression, in 
which case only
 signals matching the regular expression will be included.  For example the
 same expansion will result from only extracting signals starting with i:
 
-          /*AUTOINOUTCOMP(\"ExampMain\",\"^i\")*/"
+          /*AUTOINOUTIN(\"ExampMain\",\"^i\")*/"
   (verilog-auto-inout-module nil t))
 
 (defun verilog-auto-inout-param ()
@@ -12516,7 +12592,9 @@ See `verilog-auto-insert-lisp' for examples."
 
 (defun verilog-auto-sense-sigs (moddecls presense-sigs)
   "Return list of signals for current AUTOSENSE block."
-  (let* ((sigss (verilog-read-always-signals))
+  (let* ((sigss (save-excursion
+                 (search-forward ")")
+                 (verilog-read-always-signals)))
         (sig-list (verilog-signals-not-params
                    (verilog-signals-not-in (verilog-alw-get-inputs sigss)
                                            (append (and (not 
verilog-auto-sense-include-inputs)
@@ -12706,11 +12784,12 @@ Typing \\[verilog-auto] will make this into:
                           (save-excursion
                             (verilog-read-signals
                              (save-excursion
-                               (verilog-re-search-backward-quick 
"\\(@\\|\\<begin\\>\\|\\<if\\>\\|\\<case\\>\\)" nil t)
+                               (verilog-re-search-backward-quick
+                                
"\\(@\\|\\<\\(begin\\|if\\|case\\|always\\(_latch\\|_ff\\|_comb\\)?\\)\\>\\)" 
nil t)
                                (point))
                              (point)))))
       (save-excursion
-       (verilog-re-search-backward-quick "@" nil t)
+       (verilog-re-search-backward-quick 
"\\(@\\|\\<\\(always\\(_latch\\|_ff\\|_comb\\)?\\)\\>\\)" nil t)
         (setq sigss (verilog-read-always-signals)))
       (setq dly-list (verilog-alw-get-outputs-delayed sigss))
       (setq sig-list (verilog-signals-not-in (append
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index 9f54b24..875de3b 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -1,6 +1,6 @@
 ;;; vhdl-mode.el --- major mode for editing VHDL code
 
-;; Copyright (C) 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2015 Free Software Foundation, Inc.
 
 ;; Authors:     Reto Zimmermann <address@hidden>
 ;;              Rodney J. Whitby <address@hidden>
@@ -13,10 +13,10 @@
 ;; filed in the Emacs bug reporting system against this file, a copy
 ;; of the bug report be sent to the maintainer's email address.
 
-(defconst vhdl-version "3.35.2"
+(defconst vhdl-version "3.36.1"
   "VHDL Mode version number.")
 
-(defconst vhdl-time-stamp "2014-03-28"
+(defconst vhdl-time-stamp "2014-11-27"
   "VHDL Mode time stamp for last update.")
 
 ;; This file is part of GNU Emacs.
@@ -215,20 +215,20 @@ Overrides local variable `indent-tabs-mode'."
     ;; [Error] Assignment error: variable is illegal target of signal 
assignment
     ("ADVance MS" "vacom" "-work \\1" "make" "-f \\1"
      nil "valib \\1; vamap \\2 \\1" "./" "work/" "Makefile" "adms"
-     ("^\\s-+\\([0-9]+\\):\\s-+" nil 1 nil) ("Compiling file \\(.+\\)" 1)
+     ("^\\s-+\\([0-9]+\\):\\s-+" nil 1 nil) ("^Compiling file \\(.+\\)" 1)
      ("ENTI/\\1.vif" "ARCH/\\1-\\2.vif" "CONF/\\1.vif"
       "PACK/\\1.vif" "BODY/\\1.vif" upcase))
     ;; Aldec
     ;; COMP96 ERROR COMP96_0018: "Identifier expected." "test.vhd" 66 3
     ("Aldec" "vcom" "-work \\1" "make" "-f \\1"
      nil "vlib \\1; vmap \\2 \\1" "./" "work/" "Makefile" "aldec"
-     (".* ERROR [^:]+: \".*\" \"\\([^ \\t\\n]+\\)\" \\([0-9]+\\) \\([0-9]+\\)" 
1 2 3) ("" 0)
+     ("^.* ERROR [^:]+: \".*\" \"\\([^ \t\n]+\\)\" \\([0-9]+\\) \\([0-9]+\\)" 
1 2 3) ("" 0)
      nil)
     ;; Cadence Leapfrog: cv -file test.vhd
     ;; duluth: *E,430 (test.vhd,13): identifier (POSITIV) is not declared
     ("Cadence Leapfrog" "cv" "-work \\1 -file" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "leapfrog"
-     ("duluth: \\*E,[0-9]+ (\\([^ \\t\\n]+\\),\\([0-9]+\\)):" 1 2 nil) ("" 0)
+     ("^duluth: \\*E,[0-9]+ (\\([^ \t\n]+\\),\\([0-9]+\\)):" 1 2 nil) ("" 0)
      ("\\1/entity" "\\2/\\1" "\\1/configuration"
       "\\1/package" "\\1/body" downcase))
     ;; Cadence Affirma NC vhdl: ncvhdl test.vhd
@@ -236,27 +236,29 @@ Overrides local variable `indent-tabs-mode'."
     ;; (PLL_400X_TOP) is not declared [10.3].
     ("Cadence NC" "ncvhdl" "-work \\1" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "ncvhdl"
-     ("ncvhdl_p: \\*E,\\w+ (\\([^ \\t\\n]+\\),\\([0-9]+\\)|\\([0-9]+\\)):" 1 2 
3) ("" 0)
+     ("^ncvhdl_p: \\*E,\\w+ (\\([^ \t\n]+\\),\\([0-9]+\\)|\\([0-9]+\\)):" 1 2 
3) ("" 0)
      ("\\1/entity/pc.db" "\\2/\\1/pc.db" "\\1/configuration/pc.db"
       "\\1/package/pc.db" "\\1/body/pc.db" downcase))
-    ;; ghdl vhdl: ghdl test.vhd
+    ;; ghdl vhdl
+    ;; ghdl -a bad_counter.vhdl
+    ;; bad_counter.vhdl:13:14: operator "=" is overloaded
     ("GHDL" "ghdl" "-i --workdir=\\1 --ieee=synopsys -fexplicit " "make" "-f 
\\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "ghdl"
-     ("ghdl_p: \\*E,\\w+ (\\([^ \\t\\n]+\\),\\([0-9]+\\)|\\([0-9]+\\)):" 1 2 
3) ("" 0)
+     ("^ghdl_p: \\*E,\\w+ (\\([^ \t\n]+\\),\\([0-9]+\\)|\\([0-9]+\\)):" 1 2 3) 
("" 0)
      ("\\1/entity" "\\2/\\1" "\\1/configuration"
       "\\1/package" "\\1/body" downcase))
     ;; IBM Compiler
     ;; 00 COACHDL* | [CCHDL-1]: File: adder.vhd, line.column: 120.6
     ("IBM Compiler" "g2tvc" "-src" "precomp" "\\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "ibm"
-     ("[0-9]+ COACHDL.*: File: \\([^ \\t\\n]+\\), line.column: 
\\([0-9]+\\).\\([0-9]+\\)" 1 2 3) (" " 0)
+     ("^[0-9]+ COACHDL.*: File: \\([^ \t\n]+\\), *line.column: 
\\([0-9]+\\).\\([0-9]+\\)" 1 2 3) (" " 0)
      nil)
     ;; Ikos Voyager: analyze test.vhd
     ;; analyze test.vhd
     ;; E L4/C5:        this library unit is inaccessible
     ("Ikos" "analyze" "-l \\1" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "ikos"
-     ("E L\\([0-9]+\\)/C\\([0-9]+\\):" nil 1 2)
+     ("^E L\\([0-9]+\\)/C\\([0-9]+\\):" nil 1 2)
      ("^analyze +\\(.+ +\\)*\\(.+\\)$" 2)
      nil)
     ;; ModelSim, Model Technology: vcom test.vhd
@@ -266,14 +268,14 @@ Overrides local variable `indent-tabs-mode'."
     ;; ** Error: adder.vhd(190): Unknown identifier: ctl_numb
     ("ModelSim" "vcom" "-93 -work \\1" "make" "-f \\1"
      nil "vlib \\1; vmap \\2 \\1" "./" "work/" "Makefile" "modelsim"
-     ("\\(ERROR\\|WARNING\\|\\*\\* Error\\|\\*\\* Warning\\)[^:]*:\\( 
*\[[0-9]+\]\\)? \\([^ \\t\\n]+\\)(\\([0-9]+\\)):" 3 4 nil) ("" 0)
+     ("^\\(ERROR\\|WARNING\\|\\*\\* Error\\|\\*\\* Warning\\)[^:]*:\\( 
*\[[0-9]+\]\\)? \\([^ \t\n]+\\)(\\([0-9]+\\)):" 3 4 nil) ("" 0)
      ("\\1/_primary.dat" "\\2/\\1.dat" "\\1/_primary.dat"
       "\\1/_primary.dat" "\\1/body.dat" downcase))
     ;; ProVHDL, Synopsys LEDA: provhdl -w work -f test.vhd
     ;; test.vhd:34: error message
     ("LEDA ProVHDL" "provhdl" "-w \\1 -f" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "provhdl"
-     ("\\([^ \\t\\n]+\\):\\([0-9]+\\): " 1 2 nil) ("" 0)
+     ("^\\([^ \t\n:]+\\):\\([0-9]+\\): " 1 2 nil) ("" 0)
      ("ENTI/\\1.vif" "ARCH/\\1-\\2.vif" "CONF/\\1.vif"
       "PACK/\\1.vif" "BODY/BODY-\\1.vif" upcase))
     ;; Quartus compiler
@@ -284,21 +286,21 @@ Overrides local variable `indent-tabs-mode'."
     ;; Warning: VHDL Process Statement warning at dvi2sdi_tst.vhd(172): ...
     ("Quartus" "make" "-work \\1" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "quartus"
-     ("\\(Error\\|Warning\\): .* \\([^ \\t\\n]+\\)(\\([0-9]+\\))" 2 3 nil) ("" 
0)
+     ("^\\(Error\\|Warning\\): .* \\([^ \t\n]+\\)(\\([0-9]+\\))" 2 3 nil) ("" 
0)
      nil)
     ;; QuickHDL, Mentor Graphics: qvhcom test.vhd
     ;; ERROR: test.vhd(24): near "dnd": expecting: END
     ;; WARNING[4]: test.vhd(30): A space is required between ...
     ("QuickHDL" "qvhcom" "-work \\1" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "quickhdl"
-     ("\\(ERROR\\|WARNING\\)[^:]*: \\([^ \\t\\n]+\\)(\\([0-9]+\\)):" 2 3 nil) 
("" 0)
+     ("^\\(ERROR\\|WARNING\\)[^:]*: \\([^ \t\n]+\\)(\\([0-9]+\\)):" 2 3 nil) 
("" 0)
      ("\\1/_primary.dat" "\\2/\\1.dat" "\\1/_primary.dat"
       "\\1/_primary.dat" "\\1/body.dat" downcase))
     ;; Savant: scram -publish-cc test.vhd
     ;; test.vhd:87: _set_passed_through_out_port(IIR_Boolean) not defined for
     ("Savant" "scram" "-publish-cc -design-library-name \\1" "make" "-f \\1"
      nil "mkdir \\1" "./" "work._savant_lib/" "Makefile" "savant"
-     ("\\([^ \\t\\n]+\\):\\([0-9]+\\): " 1 2 nil) ("" 0)
+     ("^\\([^ \t\n:]+\\):\\([0-9]+\\): " 1 2 nil) ("" 0)
      ("\\1_entity.vhdl" "\\2_secondary_units._savant_lib/\\2_\\1.vhdl"
       "\\1_config.vhdl" "\\1_package.vhdl"
       "\\1_secondary_units._savant_lib/\\1_package_body.vhdl" downcase))
@@ -306,39 +308,39 @@ Overrides local variable `indent-tabs-mode'."
     ;; Error: CSVHDL0002: test.vhd: (line 97): Invalid prefix
     ("Simili" "vhdlp" "-work \\1" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "simili"
-     ("\\(Error\\|Warning\\): \\w+: \\([^ \\t\\n]+\\): (line \\([0-9]+\\)): " 
2 3 nil) ("" 0)
+     ("^\\(Error\\|Warning\\): \\w+: \\([^ \t\n]+\\): (line \\([0-9]+\\)): " 2 
3 nil) ("" 0)
      ("\\1/prim.var" "\\2/_\\1.var" "\\1/prim.var"
       "\\1/prim.var" "\\1/_body.var" downcase))
     ;; Speedwave (Innoveda): analyze -libfile vsslib.ini -src test.vhd
     ;;     ERROR[11]::File test.vhd Line 100: Use of undeclared identifier
     ("Speedwave" "analyze" "-libfile vsslib.ini -src" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "speedwave"
-     ("^ *ERROR\[[0-9]+\]::File \\([^ \\t\\n]+\\) Line \\([0-9]+\\):" 1 2 nil) 
("" 0)
+     ("^ *ERROR\[[0-9]+\]::File \\([^ \t\n]+\\) Line \\([0-9]+\\):" 1 2 nil) 
("" 0)
      nil)
     ;; Synopsys, VHDL Analyzer (sim): vhdlan -nc test.vhd
     ;; **Error: vhdlan,703 test.vhd(22): OTHERS is not legal in this context.
     ("Synopsys" "vhdlan" "-nc -work \\1" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "synopsys"
-     ("\\*\\*Error: vhdlan,[0-9]+ \\([^ \\t\\n]+\\)(\\([0-9]+\\)):" 1 2 nil) 
("" 0)
+     ("^\\*\\*Error: vhdlan,[0-9]+ \\([^ \t\n]+\\)(\\([0-9]+\\)):" 1 2 nil) 
("" 0)
      ("\\1.sim" "\\2__\\1.sim" "\\1.sim" "\\1.sim" "\\1__.sim" upcase))
     ;; Synopsys, VHDL Analyzer (syn): vhdlan -nc -spc test.vhd
     ;; **Error: vhdlan,703 test.vhd(22): OTHERS is not legal in this context.
     ("Synopsys Design Compiler" "vhdlan" "-nc -spc -work \\1" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "synopsys_dc"
-     ("\\*\\*Error: vhdlan,[0-9]+ \\([^ \\t\\n]+\\)(\\([0-9]+\\)):" 1 2 nil) 
("" 0)
+     ("^\\*\\*Error: vhdlan,[0-9]+ \\([^ \t\n]+\\)(\\([0-9]+\\)):" 1 2 nil) 
("" 0)
      ("\\1.syn" "\\2__\\1.syn" "\\1.syn" "\\1.syn" "\\1__.syn" upcase))
     ;; Synplify:
     ;; @W:"test.vhd":57:8:57:9|Optimizing register bit count_x(5) to a 
constant 0
     ("Synplify" "n/a" "n/a" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "synplify"
-     ("@[EWN]:\"\\([^ \\t\\n]+\\)\":\\([0-9]+\\):\\([0-9]+\\):" 1 2 3) ("" 0)
+     ("address@hidden:\"\\([^ \t\n]+\\)\":\\([0-9]+\\):\\([0-9]+\\):" 1 2 3) 
("" 0)
      nil)
     ;; Vantage: analyze -libfile vsslib.ini -src test.vhd
     ;;     Compiling "test.vhd" line 1...
     ;; **Error: LINE 49 *** No aggregate value is valid in this context.
     ("Vantage" "analyze" "-libfile vsslib.ini -src" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "vantage"
-     ("\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" nil 1 nil)
+     ("^\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" nil 1 nil)
      ("^ *Compiling \"\\(.+\\)\" " 1)
      nil)
     ;; VeriBest: vc vhdl test.vhd
@@ -355,14 +357,14 @@ Overrides local variable `indent-tabs-mode'."
     ;; **Error: LINE 49 *** No aggregate value is valid in this context.
     ("Viewlogic" "analyze" "-libfile vsslib.ini -src" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "viewlogic"
-     ("\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" nil 1 nil)
+     ("^\\*\\*Error: LINE \\([0-9]+\\) \\*\\*\\*" nil 1 nil)
      ("^ *Compiling \"\\(.+\\)\" " 1)
      nil)
     ;; Xilinx XST:
     ;; ERROR:HDLParsers:164 - "test.vhd" Line 3. parse error
     ("Xilinx XST" "xflow" "" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "xilinx"
-     ("^ERROR:HDLParsers:[0-9]+ - \"\\([^ \\t\\n]+\\)\" Line \\([0-9]+\\)\." 1 
2 nil) ("" 0)
+     ("^ERROR:HDLParsers:[0-9]+ - \"\\([^ \t\n]+\\)\" Line \\([0-9]+\\)\." 1 2 
nil) ("" 0)
      nil)
     )
   "List of available VHDL compilers and their properties.
@@ -487,7 +489,7 @@ Select a compiler name from the ones defined in option 
`vhdl-compiler-alist'."
          (append '(choice) (nreverse list)))
   :group 'vhdl-compile)
 
-(defcustom vhdl-compile-use-local-error-regexp t
+(defcustom vhdl-compile-use-local-error-regexp nil
   "Non-nil means use buffer-local `compilation-error-regexp-alist'.
 In this case, only error message regexps for VHDL compilers are active if
 compilation is started from a VHDL buffer.  Otherwise, the error message
@@ -496,6 +498,7 @@ active all the time.  Note that by doing that, the 
predefined global regexps
 might result in erroneous parsing of error messages for some VHDL compilers.
 
 NOTE: Activate the new setting by restarting Emacs."
+  :version "25.1"                      ; t -> nil
   :type 'boolean
   :group 'vhdl-compile)
 
@@ -2137,73 +2140,36 @@ your style, only those that are different from the 
default.")
   (require 'ps-print)
     (require 'speedbar)))              ; for speedbar-with-writable
 
-;; functions from obsolete assoc.el package (obsoleted in GNU Emacs 24.3)
-(defun vhdl-asort (alist-symbol key)
-  "Move a specified key-value pair to the head of an alist.
-The alist is referenced by ALIST-SYMBOL.  Key-value pair to move to
-head is one matching KEY.  Returns the sorted list and doesn't affect
-the order of any other key-value pair.  Side effect sets alist to new
-sorted list."
-  (set alist-symbol
-       (sort (copy-alist (symbol-value alist-symbol))
-             (lambda (a _b) (equal (car a) key)))))
-
-(defun vhdl-anot-head-p (alist key)
-  "Find out if a specified key-value pair is not at the head of an alist.
-The alist to check is specified by ALIST and the key-value pair is the
-one matching the supplied KEY.  Returns nil if ALIST is nil, or if
-key-value pair is at the head of the alist.  Returns t if key-value
-pair is not at the head of alist.  ALIST is not altered."
-  (not (equal (car (car alist)) key)))
-
 (defun vhdl-aput (alist-symbol key &optional value)
   "Insert a key-value pair into an alist.
 The alist is referenced by ALIST-SYMBOL.  The key-value pair is made
-from KEY and optionally, VALUE.  Returns the altered alist.
-
-If the key-value pair referenced by KEY can be found in the alist, and
-VALUE is supplied non-nil, then the value of KEY will be set to VALUE.
-If VALUE is not supplied, or is nil, the key-value pair will not be
-modified, but will be moved to the head of the alist.  If the key-value
-pair cannot be found in the alist, it will be inserted into the head
-of the alist (with value nil if VALUE is nil or not supplied)."
-  (let ((elem (list (cons key value)))
-        alist)
-    (vhdl-asort alist-symbol key)
-    (setq alist (symbol-value alist-symbol))
-    (cond ((null alist) (set alist-symbol elem))
-         ((vhdl-anot-head-p alist key) (set alist-symbol (nconc elem alist)))
-         (value (setcar alist (car elem)) alist)
-         (t alist))))
+from KEY and VALUE.  If the key-value pair referenced by KEY can be
+found in the alist, the value of KEY will be set to VALUE.  If the
+key-value pair cannot be found in the alist, it will be inserted into
+the head of the alist."
+  (let* ((alist (symbol-value alist-symbol))
+        (elem (assoc key alist)))
+    (if elem
+       (setcdr elem value)
+      (set alist-symbol (cons (cons key value) alist)))))
 
 (defun vhdl-adelete (alist-symbol key)
   "Delete a key-value pair from the alist.
 Alist is referenced by ALIST-SYMBOL and the key-value pair to remove
-is pair matching KEY.  Returns the altered alist."
-  (vhdl-asort alist-symbol key)
-  (let ((alist (symbol-value alist-symbol)))
-    (cond ((null alist) nil)
-         ((vhdl-anot-head-p alist key) alist)
-         (t (set alist-symbol (cdr alist))))))
-
-(defun vhdl-aget (alist key &optional keynil-p)
-  "Return the value in ALIST that is associated with KEY.
-Optional KEYNIL-P describes what to do if the value associated with
-KEY is nil.  If KEYNIL-P is not supplied or is nil, and the value is
-nil, then KEY is returned.  If KEYNIL-P is non-nil, then nil would be
-returned.
-
-If no key-value pair matching KEY could be found in ALIST, or ALIST is
-nil then nil is returned.  ALIST is not altered."
-  (let ((copy (copy-alist alist)))
-    (cond ((null alist) nil)
-         ((progn (vhdl-asort 'copy key)
-                 (vhdl-anot-head-p copy key)) nil)
-         ((cdr (car copy)))
-         (keynil-p nil)
-         ((car (car copy)))
-         (t nil))))
-
+is pair matching KEY."
+  (let ((alist (symbol-value alist-symbol)) alist-cdr)
+    (while (equal key (caar alist))
+      (setq alist (cdr alist))
+      (set alist-symbol alist))
+    (while (setq alist-cdr (cdr alist))
+      (if (equal key (caar alist-cdr))
+         (setcdr alist (cdr alist-cdr))
+       (setq alist alist-cdr)))))
+
+(defun vhdl-aget (alist key)
+  "Return the value in ALIST that is associated with KEY.  If KEY is
+not found, then nil is returned."
+  (cdr (assoc key alist)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; Compatibility
@@ -12981,16 +12947,18 @@ File statistics: \"%s\"\n\
     (condition-case ()
        (let ((current-project vhdl-project))
          (load-file file-name)
-         (when (/= (length (vhdl-aget vhdl-project-alist vhdl-project t)) 10)
+         (when (/= (length (vhdl-aget vhdl-project-alist vhdl-project)) 10)
            (vhdl-adelete 'vhdl-project-alist vhdl-project)
            (error ""))
-         (when not-make-current
-           (setq vhdl-project current-project))
+         (if not-make-current
+             (setq vhdl-project current-project)
+           (setq vhdl-compiler
+                 (caar (nth 4 (vhdl-aget vhdl-project-alist vhdl-project)))))
          (vhdl-update-mode-menu)
          (vhdl-speedbar-refresh)
          (unless not-make-current
-           (message "Current VHDL project: \"%s\"%s"
-                    vhdl-project (if auto " (auto-loaded)" ""))))
+           (message "Current VHDL project: \"%s\"; compiler: \"%s\"%s"
+                    vhdl-project vhdl-compiler (if auto " (auto-loaded)" ""))))
       (error (vhdl-warning
              (format "ERROR:  Invalid project setup file: \"%s\"" 
file-name))))))
 
@@ -12998,7 +12966,7 @@ File statistics: \"%s\"\n\
   "Duplicate setup of current project."
   (interactive)
   (let ((new-name (read-from-minibuffer "New project name: "))
-       (project-entry (vhdl-aget vhdl-project-alist vhdl-project t)))
+       (project-entry (vhdl-aget vhdl-project-alist vhdl-project)))
     (setq vhdl-project-alist
          (append vhdl-project-alist
                  (list (cons new-name project-entry))))
@@ -13746,11 +13714,11 @@ hierarchy otherwise.")
         ent-alist conf-alist pack-alist ent-inst-list file-alist
         tmp-list tmp-entry no-files files-exist big-files)
     (when (or project update)
-      (setq ent-alist (vhdl-aget vhdl-entity-alist key t)
-           conf-alist (vhdl-aget vhdl-config-alist key t)
-           pack-alist (vhdl-aget vhdl-package-alist key t)
-           ent-inst-list (car (vhdl-aget vhdl-ent-inst-alist key t))
-           file-alist (vhdl-aget vhdl-file-alist key t)))
+      (setq ent-alist (vhdl-aget vhdl-entity-alist key)
+           conf-alist (vhdl-aget vhdl-config-alist key)
+           pack-alist (vhdl-aget vhdl-package-alist key)
+           ent-inst-list (car (vhdl-aget vhdl-ent-inst-alist key))
+           file-alist (vhdl-aget vhdl-file-alist key)))
     (when (and (not is-directory) (null file-list))
       (message "No such file: \"%s\"" name))
     (setq files-exist file-list)
@@ -13792,7 +13760,7 @@ hierarchy otherwise.")
                (while (re-search-forward "^[ \t]*entity[ \t\n\r\f]+\\(\\w+\\)[ 
\t\n\r\f]+is\\>" nil t)
                  (let* ((ent-name (match-string-no-properties 1))
                         (ent-key (downcase ent-name))
-                        (ent-entry (vhdl-aget ent-alist ent-key t))
+                        (ent-entry (vhdl-aget ent-alist ent-key))
                         (lib-alist (vhdl-scan-context-clause)))
                    (if (nth 1 ent-entry)
                        (vhdl-warning-when-idle
@@ -13811,9 +13779,9 @@ hierarchy otherwise.")
                         (arch-key (downcase arch-name))
                         (ent-name (match-string-no-properties 2))
                         (ent-key (downcase ent-name))
-                        (ent-entry (vhdl-aget ent-alist ent-key t))
+                        (ent-entry (vhdl-aget ent-alist ent-key))
                         (arch-alist (nth 3 ent-entry))
-                        (arch-entry (vhdl-aget arch-alist arch-key t))
+                        (arch-entry (vhdl-aget arch-alist arch-key))
                         (lib-arch-alist (vhdl-scan-context-clause)))
                    (if arch-entry
                        (vhdl-warning-when-idle
@@ -13835,7 +13803,7 @@ hierarchy otherwise.")
                (while (re-search-forward "^[ \t]*configuration[ 
\t\n\r\f]+\\(\\w+\\)[ \t\n\r\f]+of[ \t\n\r\f]+\\(\\w+\\)[ \t\n\r\f]+is\\>" nil 
t)
                  (let* ((conf-name (match-string-no-properties 1))
                         (conf-key (downcase conf-name))
-                        (conf-entry (vhdl-aget conf-alist conf-key t))
+                        (conf-entry (vhdl-aget conf-alist conf-key))
                         (ent-name (match-string-no-properties 2))
                         (ent-key (downcase ent-name))
                         (lib-alist (vhdl-scan-context-clause))
@@ -13885,7 +13853,7 @@ hierarchy otherwise.")
                  (let* ((pack-name (match-string-no-properties 2))
                         (pack-key (downcase pack-name))
                         (is-body (match-string-no-properties 1))
-                        (pack-entry (vhdl-aget pack-alist pack-key t))
+                        (pack-entry (vhdl-aget pack-alist pack-key))
                         (pack-line (vhdl-current-line))
                         (end-of-unit (vhdl-get-end-of-unit))
                         comp-name func-name comp-alist func-alist lib-alist)
@@ -13940,9 +13908,9 @@ hierarchy otherwise.")
                         (ent-key (downcase ent-name))
                         (arch-name (match-string-no-properties 1))
                         (arch-key (downcase arch-name))
-                        (ent-entry (vhdl-aget ent-alist ent-key t))
+                        (ent-entry (vhdl-aget ent-alist ent-key))
                         (arch-alist (nth 3 ent-entry))
-                        (arch-entry (vhdl-aget arch-alist arch-key t))
+                        (arch-entry (vhdl-aget arch-alist arch-key))
                         (beg-of-unit (point))
                         (end-of-unit (vhdl-get-end-of-unit))
                         (inst-no 0)
@@ -14077,8 +14045,8 @@ hierarchy otherwise.")
       ;; check whether configuration has a corresponding entity/architecture
       (setq tmp-list conf-alist)
       (while tmp-list
-       (if (setq tmp-entry (vhdl-aget ent-alist (nth 4 (car tmp-list)) t))
-           (unless (vhdl-aget (nth 3 tmp-entry) (nth 5 (car tmp-list)) t)
+       (if (setq tmp-entry (vhdl-aget ent-alist (nth 4 (car tmp-list))))
+           (unless (vhdl-aget (nth 3 tmp-entry) (nth 5 (car tmp-list)))
              (setq tmp-entry (car tmp-list))
              (vhdl-warning-when-idle
               "Configuration of non-existing architecture: \"%s\" of 
\"%s(%s)\"\n  in \"%s\" (line %d)"
@@ -14205,15 +14173,15 @@ of PROJECT."
        (let* ((vhdl-project (nth 0 (car directory-alist)))
               (project (vhdl-project-p))
               (ent-alist (vhdl-aget vhdl-entity-alist
-                                    (or project dir-name) t))
+                                    (or project dir-name)))
               (conf-alist (vhdl-aget vhdl-config-alist
-                                     (or project dir-name) t))
+                                     (or project dir-name)))
               (pack-alist (vhdl-aget vhdl-package-alist
-                                     (or project dir-name) t))
+                                     (or project dir-name)))
               (ent-inst-list (car (vhdl-aget vhdl-ent-inst-alist
-                                        (or project dir-name) t)))
-              (file-alist (vhdl-aget vhdl-file-alist (or project dir-name) t))
-              (file-entry (vhdl-aget file-alist file-name t))
+                                        (or project dir-name))))
+              (file-alist (vhdl-aget vhdl-file-alist (or project dir-name)))
+              (file-entry (vhdl-aget file-alist file-name))
               (ent-list (nth 0 file-entry))
               (arch-list (nth 1 file-entry))
               (arch-ent-list (nth 2 file-entry))
@@ -14227,7 +14195,7 @@ of PROJECT."
          ;; entities
          (while ent-list
            (setq key (car ent-list)
-                 entry (vhdl-aget ent-alist key t))
+                 entry (vhdl-aget ent-alist key))
            (when (equal file-name (nth 1 entry))
              (if (nth 3 entry)
                  (vhdl-aput 'ent-alist key
@@ -14238,9 +14206,9 @@ of PROJECT."
          (while arch-list
            (setq key (car arch-list)
                  ent-key (car arch-ent-list)
-                 entry (vhdl-aget ent-alist ent-key t)
+                 entry (vhdl-aget ent-alist ent-key)
                  arch-alist (nth 3 entry))
-           (when (equal file-name (nth 1 (vhdl-aget arch-alist key t)))
+           (when (equal file-name (nth 1 (vhdl-aget arch-alist key)))
              (vhdl-adelete 'arch-alist key)
              (if (or (nth 1 entry) arch-alist)
                  (vhdl-aput 'ent-alist ent-key
@@ -14252,13 +14220,13 @@ of PROJECT."
          ;; configurations
          (while conf-list
            (setq key (car conf-list))
-           (when (equal file-name (nth 1 (vhdl-aget conf-alist key t)))
+           (when (equal file-name (nth 1 (vhdl-aget conf-alist key)))
              (vhdl-adelete 'conf-alist key))
            (setq conf-list (cdr conf-list)))
          ;; package declarations
          (while pack-list
            (setq key (car pack-list)
-                 entry (vhdl-aget pack-alist key t))
+                 entry (vhdl-aget pack-alist key))
            (when (equal file-name (nth 1 entry))
              (if (nth 6 entry)
                  (vhdl-aput 'pack-alist key
@@ -14270,7 +14238,7 @@ of PROJECT."
          ;; package bodies
          (while pack-body-list
            (setq key (car pack-body-list)
-                 entry (vhdl-aget pack-alist key t))
+                 entry (vhdl-aget pack-alist key))
            (when (equal file-name (nth 6 entry))
              (if (nth 1 entry)
                  (vhdl-aput 'pack-alist key
@@ -14321,8 +14289,8 @@ of PROJECT."
                                     &optional include-top ent-hier)
   "Get instantiation hierarchy beginning in architecture ARCH-KEY of
 entity ENT-KEY."
-  (let* ((ent-entry (vhdl-aget ent-alist ent-key t))
-        (arch-entry (if arch-key (vhdl-aget (nth 3 ent-entry) arch-key t)
+  (let* ((ent-entry (vhdl-aget ent-alist ent-key))
+        (arch-entry (if arch-key (vhdl-aget (nth 3 ent-entry) arch-key)
                       (cdar (last (nth 3 ent-entry)))))
         (inst-alist (nth 3 arch-entry))
         inst-entry inst-ent-entry inst-arch-entry inst-conf-entry comp-entry
@@ -14348,17 +14316,17 @@ entity ENT-KEY."
                                   (downcase (or inst-comp-name ""))))))
        (setq tmp-list (cdr tmp-list)))
       (setq inst-conf-key (or (nth 4 (car tmp-list)) inst-conf-key))
-      (setq inst-conf-entry (vhdl-aget conf-alist inst-conf-key t))
+      (setq inst-conf-entry (vhdl-aget conf-alist inst-conf-key))
       (when (and inst-conf-key (not inst-conf-entry))
        (vhdl-warning-when-idle "Configuration not found: \"%s\"" 
inst-conf-key))
       ;; determine entity
       (setq inst-ent-key
            (or (nth 2 (car tmp-list))  ; from configuration
                (nth 3 inst-conf-entry) ; from subconfiguration
-               (nth 3 (vhdl-aget conf-alist (nth 7 inst-entry) t))
+               (nth 3 (vhdl-aget conf-alist (nth 7 inst-entry)))
                                        ; from configuration spec.
                (nth 5 inst-entry)))    ; from direct instantiation
-      (setq inst-ent-entry (vhdl-aget ent-alist inst-ent-key t))
+      (setq inst-ent-entry (vhdl-aget ent-alist inst-ent-key))
       ;; determine architecture
       (setq inst-arch-key
            (or (nth 3 (car tmp-list))          ; from configuration
@@ -14368,7 +14336,7 @@ entity ENT-KEY."
                                                ; from configuration spec.
                (nth 4 inst-ent-entry)          ; MRA
                (caar (nth 3 inst-ent-entry)))) ; first alphabetically
-      (setq inst-arch-entry (vhdl-aget (nth 3 inst-ent-entry) inst-arch-key t))
+      (setq inst-arch-entry (vhdl-aget (nth 3 inst-ent-entry) inst-arch-key))
       ;; set library
       (setq inst-lib-key
            (or (nth 5 (car tmp-list))          ; from configuration
@@ -14408,7 +14376,7 @@ entity ENT-KEY."
 (defun vhdl-get-instantiations (ent-key indent)
   "Get all instantiations of entity ENT-KEY."
   (let ((ent-alist (vhdl-aget vhdl-entity-alist
-                             (vhdl-speedbar-line-key indent) t))
+                             (vhdl-speedbar-line-key indent)))
        arch-alist inst-alist ent-inst-list
        ent-entry arch-entry inst-entry)
     (while ent-alist
@@ -14495,28 +14463,28 @@ entity ENT-KEY."
       (when (member 'hierarchy vhdl-speedbar-save-cache)
        (insert "\n;; entity and architecture cache\n"
                "(vhdl-aput 'vhdl-entity-alist " key " '")
-       (print (vhdl-aget vhdl-entity-alist cache-key t) (current-buffer))
+       (print (vhdl-aget vhdl-entity-alist cache-key) (current-buffer))
        (insert ")\n\n;; configuration cache\n"
                "(vhdl-aput 'vhdl-config-alist " key " '")
-       (print (vhdl-aget vhdl-config-alist cache-key t) (current-buffer))
+       (print (vhdl-aget vhdl-config-alist cache-key) (current-buffer))
        (insert ")\n\n;; package cache\n"
                "(vhdl-aput 'vhdl-package-alist " key " '")
-       (print (vhdl-aget vhdl-package-alist cache-key t) (current-buffer))
+       (print (vhdl-aget vhdl-package-alist cache-key) (current-buffer))
        (insert ")\n\n;; instantiated entities cache\n"
                "(vhdl-aput 'vhdl-ent-inst-alist " key " '")
-       (print (vhdl-aget vhdl-ent-inst-alist cache-key t) (current-buffer))
+       (print (vhdl-aget vhdl-ent-inst-alist cache-key) (current-buffer))
        (insert ")\n\n;; design units per file cache\n"
                "(vhdl-aput 'vhdl-file-alist " key " '")
-       (print (vhdl-aget vhdl-file-alist cache-key t) (current-buffer))
+       (print (vhdl-aget vhdl-file-alist cache-key) (current-buffer))
        (when project
          (insert ")\n\n;; source directories in project cache\n"
                  "(vhdl-aput 'vhdl-directory-alist " key " '")
-         (print (vhdl-aget vhdl-directory-alist cache-key t) (current-buffer)))
+         (print (vhdl-aget vhdl-directory-alist cache-key) (current-buffer)))
        (insert ")\n"))
       (when (member 'display vhdl-speedbar-save-cache)
        (insert "\n;; shown design units cache\n"
                "(vhdl-aput 'vhdl-speedbar-shown-unit-alist " key " '")
-       (print (vhdl-aget vhdl-speedbar-shown-unit-alist cache-key t)
+       (print (vhdl-aget vhdl-speedbar-shown-unit-alist cache-key)
               (current-buffer))
        (insert ")\n"))
       (setq vhdl-updated-project-list
@@ -14784,10 +14752,10 @@ otherwise use cached data."
     (vhdl-scan-project-contents project))
   ;; insert design hierarchy
   (vhdl-speedbar-insert-hierarchy
-   (vhdl-aget vhdl-entity-alist project t)
-   (vhdl-aget vhdl-config-alist project t)
-   (vhdl-aget vhdl-package-alist project t)
-   (car (vhdl-aget vhdl-ent-inst-alist project t)) indent)
+   (vhdl-aget vhdl-entity-alist project)
+   (vhdl-aget vhdl-config-alist project)
+   (vhdl-aget vhdl-package-alist project)
+   (car (vhdl-aget vhdl-ent-inst-alist project)) indent)
   (insert (int-to-string indent) ":\n")
   (put-text-property (- (point) 3) (1- (point)) 'invisible t)
   (put-text-property (1- (point)) (point) 'invisible nil)
@@ -14802,10 +14770,10 @@ otherwise use cached data."
     (vhdl-scan-directory-contents directory))
   ;; insert design hierarchy
   (vhdl-speedbar-insert-hierarchy
-   (vhdl-aget vhdl-entity-alist directory t)
-   (vhdl-aget vhdl-config-alist directory t)
-   (vhdl-aget vhdl-package-alist directory t)
-   (car (vhdl-aget vhdl-ent-inst-alist directory t)) depth)
+   (vhdl-aget vhdl-entity-alist directory)
+   (vhdl-aget vhdl-config-alist directory)
+   (vhdl-aget vhdl-package-alist directory)
+   (car (vhdl-aget vhdl-ent-inst-alist directory)) depth)
   ;; expand design units
   (vhdl-speedbar-expand-units directory)
   (vhdl-aput 'vhdl-directory-alist directory (list (list directory))))
@@ -14896,7 +14864,7 @@ otherwise use cached data."
 (defun vhdl-speedbar-expand-units (key)
   "Expand design units in directory/project KEY according to
 `vhdl-speedbar-shown-unit-alist'."
-  (let ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key t))
+  (let ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key))
        (vhdl-speedbar-update-current-unit nil)
        vhdl-updated-project-list)
     (vhdl-adelete 'vhdl-speedbar-shown-unit-alist key)
@@ -14958,9 +14926,9 @@ otherwise use cached data."
   "Expand all design units in current directory/project."
   (interactive)
   (let* ((key (vhdl-speedbar-line-key))
-        (ent-alist (vhdl-aget vhdl-entity-alist key t))
-        (conf-alist (vhdl-aget vhdl-config-alist key t))
-        (pack-alist (vhdl-aget vhdl-package-alist key t))
+        (ent-alist (vhdl-aget vhdl-entity-alist key))
+        (conf-alist (vhdl-aget vhdl-config-alist key))
+        (pack-alist (vhdl-aget vhdl-package-alist key))
         arch-alist unit-alist subunit-alist)
     (add-to-list 'vhdl-speedbar-shown-project-list key)
     (while ent-alist
@@ -15012,8 +14980,8 @@ otherwise use cached data."
   (cond
    ((string-match "+" text)            ; expand entity
     (let* ((key (vhdl-speedbar-line-key indent))
-          (ent-alist (vhdl-aget vhdl-entity-alist key t))
-          (ent-entry (vhdl-aget ent-alist token t))
+          (ent-alist (vhdl-aget vhdl-entity-alist key))
+          (ent-entry (vhdl-aget ent-alist token))
           (arch-alist (nth 3 ent-entry))
           (inst-alist (vhdl-get-instantiations token indent))
           (subpack-alist (nth 5 ent-entry))
@@ -15023,7 +14991,7 @@ otherwise use cached data."
          (speedbar-change-expand-button-char ??)
        (speedbar-change-expand-button-char ?-)
        ;; add entity to `vhdl-speedbar-shown-unit-alist'
-       (let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key t)))
+       (let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
          (vhdl-aput 'unit-alist token nil)
          (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist))
        (speedbar-with-writable
@@ -15064,7 +15032,7 @@ otherwise use cached data."
     (speedbar-change-expand-button-char ?+)
     ;; remove entity from `vhdl-speedbar-shown-unit-alist'
     (let* ((key (vhdl-speedbar-line-key indent))
-          (unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key t)))
+          (unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
       (vhdl-adelete 'unit-alist token)
       (if unit-alist
          (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist)
@@ -15081,21 +15049,21 @@ otherwise use cached data."
   (cond
    ((string-match "+" text)            ; expand architecture
     (let* ((key (vhdl-speedbar-line-key (1- indent)))
-          (ent-alist (vhdl-aget vhdl-entity-alist key t))
-          (conf-alist (vhdl-aget vhdl-config-alist key t))
+          (ent-alist (vhdl-aget vhdl-entity-alist key))
+          (conf-alist (vhdl-aget vhdl-config-alist key))
           (hier-alist (vhdl-get-hierarchy
                        ent-alist conf-alist (car token) (cdr token) nil nil
                        0 (1- indent)))
-          (ent-entry (vhdl-aget ent-alist (car token) t))
-          (arch-entry (vhdl-aget (nth 3 ent-entry) (cdr token) t))
+          (ent-entry (vhdl-aget ent-alist (car token)))
+          (arch-entry (vhdl-aget (nth 3 ent-entry) (cdr token)))
           (subpack-alist (nth 4 arch-entry))
           entry)
       (if (not (or hier-alist subpack-alist))
          (speedbar-change-expand-button-char ??)
        (speedbar-change-expand-button-char ?-)
        ;; add architecture to `vhdl-speedbar-shown-unit-alist'
-       (let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key t))
-              (arch-alist (nth 0 (vhdl-aget unit-alist (car token) t))))
+       (let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key))
+              (arch-alist (nth 0 (vhdl-aget unit-alist (car token)))))
          (vhdl-aput 'unit-alist (car token)
                     (list (cons (cdr token) arch-alist)))
          (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist))
@@ -15125,8 +15093,8 @@ otherwise use cached data."
     (speedbar-change-expand-button-char ?+)
     ;; remove architecture from `vhdl-speedbar-shown-unit-alist'
     (let* ((key (vhdl-speedbar-line-key (1- indent)))
-          (unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key t))
-          (arch-alist (nth 0 (vhdl-aget unit-alist (car token) t))))
+          (unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key))
+          (arch-alist (nth 0 (vhdl-aget unit-alist (car token)))))
       (vhdl-aput 'unit-alist (car token) (list (delete (cdr token) 
arch-alist)))
       (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist)
       (speedbar-delete-subblock indent)
@@ -15141,9 +15109,9 @@ otherwise use cached data."
   (cond
    ((string-match "+" text)            ; expand configuration
     (let* ((key (vhdl-speedbar-line-key indent))
-          (conf-alist (vhdl-aget vhdl-config-alist key t))
+          (conf-alist (vhdl-aget vhdl-config-alist key))
           (conf-entry (vhdl-aget conf-alist token))
-          (ent-alist (vhdl-aget vhdl-entity-alist key t))
+          (ent-alist (vhdl-aget vhdl-entity-alist key))
           (hier-alist (vhdl-get-hierarchy
                        ent-alist conf-alist (nth 3 conf-entry)
                        (nth 4 conf-entry) token (nth 5 conf-entry)
@@ -15154,7 +15122,7 @@ otherwise use cached data."
          (speedbar-change-expand-button-char ??)
        (speedbar-change-expand-button-char ?-)
        ;; add configuration to `vhdl-speedbar-shown-unit-alist'
-       (let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key t)))
+       (let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
          (vhdl-aput 'unit-alist token nil)
          (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist))
        (speedbar-with-writable
@@ -15182,7 +15150,7 @@ otherwise use cached data."
     (speedbar-change-expand-button-char ?+)
     ;; remove configuration from `vhdl-speedbar-shown-unit-alist'
     (let* ((key (vhdl-speedbar-line-key indent))
-          (unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key t)))
+          (unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
       (vhdl-adelete 'unit-alist token)
       (if unit-alist
          (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist)
@@ -15199,8 +15167,8 @@ otherwise use cached data."
   (cond
    ((string-match "+" text)            ; expand package
     (let* ((key (vhdl-speedbar-line-key indent))
-          (pack-alist (vhdl-aget vhdl-package-alist key t))
-          (pack-entry (vhdl-aget pack-alist token t))
+          (pack-alist (vhdl-aget vhdl-package-alist key))
+          (pack-entry (vhdl-aget pack-alist token))
           (comp-alist (nth 3 pack-entry))
           (func-alist (nth 4 pack-entry))
           (func-body-alist (nth 8 pack-entry))
@@ -15210,7 +15178,7 @@ otherwise use cached data."
          (speedbar-change-expand-button-char ??)
        (speedbar-change-expand-button-char ?-)
        ;; add package to `vhdl-speedbar-shown-unit-alist'
-       (let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key t)))
+       (let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
          (vhdl-aput 'unit-alist token nil)
          (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist))
        (speedbar-with-writable
@@ -15234,7 +15202,7 @@ otherwise use cached data."
            (while func-alist
              (setq func-entry (car func-alist)
                    func-body-entry (vhdl-aget func-body-alist
-                                              (car func-entry) t))
+                                              (car func-entry)))
              (when (nth 2 func-entry)
                (vhdl-speedbar-make-subprogram-line
                 (nth 1 func-entry)
@@ -15252,7 +15220,7 @@ otherwise use cached data."
     (speedbar-change-expand-button-char ?+)
     ;; remove package from `vhdl-speedbar-shown-unit-alist'
     (let* ((key (vhdl-speedbar-line-key indent))
-          (unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key t)))
+          (unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
       (vhdl-adelete 'unit-alist token)
       (if unit-alist
          (vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist)
@@ -15267,14 +15235,14 @@ otherwise use cached data."
 (defun vhdl-speedbar-insert-subpackages (subpack-alist indent dir-indent)
   "Insert required packages."
   (let* ((pack-alist (vhdl-aget vhdl-package-alist
-                               (vhdl-speedbar-line-key dir-indent) t))
+                               (vhdl-speedbar-line-key dir-indent)))
         pack-key lib-name pack-entry)
     (when subpack-alist
       (vhdl-speedbar-make-title-line "Packages Used:" indent))
     (while subpack-alist
       (setq pack-key (cdar subpack-alist)
            lib-name (caar subpack-alist))
-      (setq pack-entry (vhdl-aget pack-alist pack-key t))
+      (setq pack-entry (vhdl-aget pack-alist pack-key))
       (vhdl-speedbar-make-subpack-line
        (or (nth 0 pack-entry) pack-key) lib-name
        (cons (nth 1 pack-entry) (nth 2 pack-entry))
@@ -15334,11 +15302,11 @@ NO-POSITION non-nil means do not re-position cursor."
          (while project-list
            (setq file-alist (append file-alist
                                     (vhdl-aget vhdl-file-alist
-                                               (car project-list) t)))
+                                               (car project-list))))
            (setq project-list (cdr project-list)))
        (setq file-alist
              (vhdl-aget vhdl-file-alist
-                        (abbreviate-file-name default-directory) t)))
+                        (abbreviate-file-name default-directory))))
       (select-frame speedbar-frame)
       (set-buffer speedbar-buffer)
       (speedbar-with-writable
@@ -15346,7 +15314,7 @@ NO-POSITION non-nil means do not re-position cursor."
        (save-excursion
          ;; unhighlight last units
          (let* ((file-entry (vhdl-aget file-alist
-                                       speedbar-last-selected-file t)))
+                                       speedbar-last-selected-file)))
            (vhdl-speedbar-update-units
             "\\[.\\] " (nth 0 file-entry)
             speedbar-last-selected-file 'vhdl-speedbar-entity-face)
@@ -15366,7 +15334,7 @@ NO-POSITION non-nil means do not re-position cursor."
             "> " (nth 6 file-entry)
             speedbar-last-selected-file 'vhdl-speedbar-instantiation-face))
          ;; highlight current units
-         (let* ((file-entry (vhdl-aget file-alist file-name t)))
+         (let* ((file-entry (vhdl-aget file-alist file-name)))
            (setq
             pos (vhdl-speedbar-update-units
                  "\\[.\\] " (nth 0 file-entry)
@@ -15862,8 +15830,8 @@ is already shown in a buffer."
           (ent-alist (vhdl-aget
                       vhdl-entity-alist
                       (or (vhdl-project-p)
-                          (abbreviate-file-name default-directory)) t))
-          (ent-entry (vhdl-aget ent-alist ent-key t)))
+                          (abbreviate-file-name default-directory))))
+          (ent-entry (vhdl-aget ent-alist ent-key)))
       (setcar (cddr (cddr ent-entry)) arch-key) ; (nth 4 ent-entry)
       (speedbar-refresh))))
 
@@ -16272,7 +16240,7 @@ component instantiation."
             (setq constant-entry
                   (cons constant-name
                         (if (match-string 1)
-                            (or (vhdl-aget generic-alist (match-string 2) t)
+                            (or (vhdl-aget generic-alist (match-string 2))
                                 (error "ERROR:  Formal generic \"%s\" mismatch 
for instance \"%s\"" (match-string 2) inst-name))
                           (cdar generic-alist))))
             (push constant-entry constant-alist)
@@ -16293,7 +16261,7 @@ component instantiation."
           (setq signal-entry
                 (cons signal-name
                       (if (match-string 1)
-                          (or (vhdl-aget port-alist (match-string 2) t)
+                          (or (vhdl-aget port-alist (match-string 2))
                               (error "ERROR:  Formal port \"%s\" mismatch for 
instance \"%s\"" (match-string 2) inst-name))
                         (cdar port-alist))))
           (push signal-entry signal-alist)
@@ -16536,7 +16504,7 @@ current project/directory."
                  "." (file-name-extension (buffer-file-name))))
         (ent-alist (vhdl-aget vhdl-entity-alist
                               (or project
-                                  (abbreviate-file-name default-directory)) t))
+                                  (abbreviate-file-name default-directory))))
         (lazy-lock-minimum-size 0)
         clause-pos component-pos)
     (message "Generating components package \"%s\"..." pack-name)
@@ -16639,7 +16607,7 @@ current project/directory."
          (when (equal (nth 5 inst-entry) (nth 4 (car tmp-alist)))
            (setq conf-key (nth 0 (car tmp-alist))))
          (setq tmp-alist (cdr tmp-alist)))
-       (setq conf-entry (vhdl-aget conf-alist conf-key t))
+       (setq conf-entry (vhdl-aget conf-alist conf-key))
        ;; insert binding indication ...
        ;; ... with subconfiguration (if exists)
        (if (and vhdl-compose-configuration-use-subconfiguration conf-entry)
@@ -16649,7 +16617,7 @@ current project/directory."
              (insert (vhdl-work-library) "." (nth 0 conf-entry))
              (insert ";\n"))
          ;; ... with entity (if exists)
-         (setq ent-entry (vhdl-aget ent-alist (nth 5 inst-entry) t))
+         (setq ent-entry (vhdl-aget ent-alist (nth 5 inst-entry)))
          (when ent-entry
            (indent-to (+ margin vhdl-basic-offset))
            (vhdl-insert-keyword "USE ENTITY ")
@@ -16661,7 +16629,7 @@ current project/directory."
                    ;; b) from mra, or c) from first architecture
                    (or (nth 0 (vhdl-aget (nth 3 ent-entry)
                                          (or (nth 6 inst-entry)
-                                             (nth 4 ent-entry)) t))
+                                             (nth 4 ent-entry))))
                        (nth 1 (car (nth 3 ent-entry)))))
              (insert "(" arch-name ")"))
            (insert ";\n")
@@ -16671,7 +16639,7 @@ current project/directory."
              (indent-to (+ margin vhdl-basic-offset))
              (vhdl-compose-configuration-architecture
               (nth 0 ent-entry) arch-name ent-alist conf-alist
-              (nth 3 (vhdl-aget (nth 3 ent-entry) (downcase arch-name) t))))))
+              (nth 3 (vhdl-aget (nth 3 ent-entry) (downcase arch-name)))))))
        ;; insert component configuration end
        (indent-to margin)
        (vhdl-insert-keyword "END FOR;\n")
@@ -16695,10 +16663,10 @@ current project/directory."
   (vhdl-require-hierarchy-info)
   (let ((ent-alist (vhdl-aget vhdl-entity-alist
                              (or (vhdl-project-p)
-                                 (abbreviate-file-name default-directory)) t))
+                                 (abbreviate-file-name default-directory))))
        (conf-alist (vhdl-aget vhdl-config-alist
                               (or (vhdl-project-p)
-                                  (abbreviate-file-name default-directory)) t))
+                                  (abbreviate-file-name default-directory))))
        (from-speedbar ent-name)
        inst-alist conf-name conf-file-name pos)
     (vhdl-prepare-search-2
@@ -16714,8 +16682,8 @@ current project/directory."
                      vhdl-compose-configuration-name
                      (concat ent-name " " arch-name)))
      (setq inst-alist
-          (nth 3 (vhdl-aget (nth 3 (vhdl-aget ent-alist (downcase ent-name) t))
-                            (downcase arch-name) t))))
+          (nth 3 (vhdl-aget (nth 3 (vhdl-aget ent-alist (downcase ent-name)))
+                            (downcase arch-name)))))
      (message "Generating configuration \"%s\"..." conf-name)
      (if vhdl-compose-configuration-create-file
         ;; open configuration file
@@ -16930,7 +16898,7 @@ do not print any file names."
   (interactive)
   (vhdl-compile-init)
   (let* ((project (vhdl-aget vhdl-project-alist vhdl-project))
-        (compiler (or (vhdl-aget vhdl-compiler-alist vhdl-compiler nil)
+        (compiler (or (vhdl-aget vhdl-compiler-alist vhdl-compiler)
                       (error "ERROR:  No such compiler: \"%s\"" 
vhdl-compiler)))
         (command (nth 0 compiler))
         (default-directory (vhdl-compile-directory))
@@ -17065,9 +17033,9 @@ specified by a target."
        (vhdl-scan-directory-contents directory))))
   (let* ((directory (abbreviate-file-name (vhdl-default-directory)))
         (project (vhdl-project-p))
-        (ent-alist (vhdl-aget vhdl-entity-alist (or project directory) t))
-        (conf-alist (vhdl-aget vhdl-config-alist (or project directory) t))
-        (pack-alist (vhdl-aget vhdl-package-alist (or project directory) t))
+        (ent-alist (vhdl-aget vhdl-entity-alist (or project directory)))
+        (conf-alist (vhdl-aget vhdl-config-alist (or project directory)))
+        (pack-alist (vhdl-aget vhdl-package-alist (or project directory)))
         (regexp-list (or (nth 12 (vhdl-aget vhdl-compiler-alist vhdl-compiler))
                          '("\\1.vhd" "\\2_\\1.vhd" "\\1.vhd"
                            "\\1.vhd" "\\1_body.vhd" identity)))
@@ -17397,9 +17365,9 @@ specified by a target."
        (setq subcomp-list
              (sort (vhdl-uniquify (nth 2 (car prim-list))) 'string<))
        (setq unit-key (caar prim-list)
-             unit-name (or (nth 0 (vhdl-aget ent-alist unit-key t))
-                           (nth 0 (vhdl-aget conf-alist unit-key t))
-                           (nth 0 (vhdl-aget pack-alist unit-key t))))
+             unit-name (or (nth 0 (vhdl-aget ent-alist unit-key))
+                           (nth 0 (vhdl-aget conf-alist unit-key))
+                           (nth 0 (vhdl-aget pack-alist unit-key))))
        (insert "\n" unit-key)
        (unless (equal unit-key unit-name)
          (insert " \\\n" unit-name))
diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el
index e62ad27..81f3b8f 100644
--- a/lisp/progmodes/which-func.el
+++ b/lisp/progmodes/which-func.el
@@ -1,6 +1,6 @@
 ;;; which-func.el --- print current function in mode line
 
-;; Copyright (C) 1994, 1997-1998, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1994, 1997-1998, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author:   Alex Rezinsky <address@hidden>
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
new file mode 100644
index 0000000..55405b6
--- /dev/null
+++ b/lisp/progmodes/xref.el
@@ -0,0 +1,633 @@
+;; xref.el --- Cross-referencing commands              -*-lexical-binding:t-*-
+
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides a somewhat generic infrastructure for cross
+;; referencing commands, in particular "find-definition".
+;;
+;; Some part of the functionality must be implemented in a language
+;; dependent way and that's done by defining `xref-find-function',
+;; `xref-identifier-at-point-function' and
+;; `xref-identifier-completion-table-function', which see.
+;;
+;; A major mode should make these variables buffer-local first.
+;;
+;; `xref-find-function' can be called in several ways, see its
+;; description.  It has to operate with "xref" and "location" values.
+;;
+;; One would usually call `make-xref' and `xref-make-file-location',
+;; `xref-make-buffer-location' or `xref-make-bogus-location' to create
+;; them.  More generally, a location must be an instance of an EIEIO
+;; class inheriting from `xref-location' and implementing
+;; `xref-location-group' and `xref-location-marker'.
+;;
+;; Each identifier must be represented as a string.  Implementers can
+;; use string properties to store additional information about the
+;; identifier, but they should keep in mind that values returned from
+;; `xref-identifier-completion-table-function' should still be
+;; distinct, because the user can't see the properties when making the
+;; choice.
+;;
+;; See the functions `etags-xref-find' and `elisp-xref-find' for full
+;; examples.
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'eieio)
+(require 'ring)
+(require 'pcase)
+
+(defgroup xref nil "Cross-referencing commands"
+  :group 'tools)
+
+
+;;; Locations
+
+(defclass xref-location () ()
+  :documentation "A location represents a position in a file or buffer.")
+
+;; If a backend decides to subclass xref-location it can provide
+;; methods for some of the following functions:
+(cl-defgeneric xref-location-marker (location)
+  "Return the marker for LOCATION.")
+
+(cl-defgeneric xref-location-group (location)
+  "Return a string used to group a set of locations.
+This is typically the filename.")
+
+;;;; Commonly needed location classes are defined here:
+
+;; FIXME: might be useful to have an optional "hint" i.e. a string to
+;; search for in case the line number is sightly out of date.
+(defclass xref-file-location (xref-location)
+  ((file :type string :initarg :file)
+   (line :type fixnum :initarg :line)
+   (column :type fixnum :initarg :column))
+  :documentation "A file location is a file/line/column triple.
+Line numbers start from 1 and columns from 0.")
+
+(defun xref-make-file-location (file line column)
+  "Create and return a new xref-file-location."
+  (make-instance 'xref-file-location :file file :line line :column column))
+
+(cl-defmethod xref-location-marker ((l xref-file-location))
+  (with-slots (file line column) l
+    (with-current-buffer
+        (or (get-file-buffer file)
+            (let ((find-file-suppress-same-file-warnings t))
+              (find-file-noselect file)))
+      (save-restriction
+        (widen)
+        (save-excursion
+          (goto-char (point-min))
+          (beginning-of-line line)
+          (move-to-column column)
+          (point-marker))))))
+
+(cl-defmethod xref-location-group ((l xref-file-location))
+  (oref l :file))
+
+(defclass xref-buffer-location (xref-location)
+  ((buffer :type buffer :initarg :buffer)
+   (position :type fixnum :initarg :position)))
+
+(defun xref-make-buffer-location (buffer position)
+  "Create and return a new xref-buffer-location."
+  (make-instance 'xref-buffer-location :buffer buffer :position position))
+
+(cl-defmethod xref-location-marker ((l xref-buffer-location))
+  (with-slots (buffer position) l
+    (let ((m (make-marker)))
+      (move-marker m position buffer))))
+
+(cl-defmethod xref-location-group ((l xref-buffer-location))
+  (with-slots (buffer) l
+    (or (buffer-file-name buffer)
+        (format "(buffer %s)" (buffer-name buffer)))))
+
+(defclass xref-bogus-location (xref-location)
+  ((message :type string :initarg :message
+            :reader xref-bogus-location-message))
+  :documentation "Bogus locations are sometimes useful to
+indicate errors, e.g. when we know that a function exists but the
+actual location is not known.")
+
+(defun xref-make-bogus-location (message)
+  "Create and return a new xref-bogus-location."
+  (make-instance 'xref-bogus-location :message message))
+
+(cl-defmethod xref-location-marker ((l xref-bogus-location))
+  (user-error "%s" (oref l :message)))
+
+(cl-defmethod xref-location-group ((_ xref-bogus-location)) "(No location)")
+
+;; This should be in elisp-mode.el, but it's preloaded, and we can't
+;; preload defclass and defmethod (at least, not yet).
+(defclass xref-elisp-location (xref-location)
+  ((symbol :type symbol :initarg :symbol)
+   (type   :type symbol :initarg :type)
+   (file   :type string :initarg :file
+           :reader xref-location-group))
+  :documentation "Location of an Emacs Lisp symbol definition.")
+
+(defun xref-make-elisp-location (symbol type file)
+  (make-instance 'xref-elisp-location :symbol symbol :type type :file file))
+
+(cl-defmethod xref-location-marker ((l xref-elisp-location))
+  (with-slots (symbol type file) l
+    (let ((buffer-point
+           (pcase type
+             (`defun (find-function-search-for-symbol symbol nil file))
+             ((or `defvar `defface)
+              (find-function-search-for-symbol symbol type file))
+             (`feature
+              (cons (find-file-noselect file) 1)))))
+      (with-current-buffer (car buffer-point)
+        (goto-char (or (cdr buffer-point) (point-min)))
+        (point-marker)))))
+
+
+;;; Cross-reference
+
+(defclass xref--xref ()
+  ((description :type string :initarg :description
+                :reader xref--xref-description)
+   (location :type xref-location :initarg :location
+             :reader xref--xref-location))
+  :comment "An xref is used to display and locate constructs like
+variables or functions.")
+
+(defun xref-make (description location)
+  "Create and return a new xref.
+DESCRIPTION is a short string to describe the xref.
+LOCATION is an `xref-location'."
+  (make-instance 'xref--xref :description description :location location))
+
+
+;;; API
+
+(declare-function etags-xref-find "etags" (action id))
+(declare-function tags-lazy-completion-table "etags" ())
+
+;; For now, make the etags backend the default.
+(defvar xref-find-function #'etags-xref-find
+  "Function to look for cross-references.
+It can be called in several ways:
+
+ (definitions IDENTIFIER): Find definitions of IDENTIFIER.  The
+result must be a list of xref objects.  If no definitions can be
+found, return nil.
+
+ (references IDENTIFIER): Find references of IDENTIFIER.  The
+result must be a list of xref objects.  If no references can be
+found, return nil.
+
+ (apropos PATTERN): Find all symbols that match PATTERN.  PATTERN
+is a regexp.
+
+IDENTIFIER can be any string returned by
+`xref-identifier-at-point-function', or from the table returned
+by `xref-identifier-completion-table-function'.
+
+To create an xref object, call `xref-make'.")
+
+(defvar xref-identifier-at-point-function #'xref-default-identifier-at-point
+  "Function to get the relevant identifier at point.
+
+The return value must be a string or nil.  nil means no
+identifier at point found.
+
+If it's hard to determine the identifier precisely (e.g., because
+it's a method call on unknown type), the implementation can
+return a simple string (such as symbol at point) marked with a
+special text property which `xref-find-function' would recognize
+and then delegate the work to an external process.")
+
+(defvar xref-identifier-completion-table-function #'tags-lazy-completion-table
+  "Function that returns the completion table for identifiers.")
+
+(defun xref-default-identifier-at-point ()
+  (let ((thing (thing-at-point 'symbol)))
+    (and thing (substring-no-properties thing))))
+
+
+;;; misc utilities
+(defun xref--alistify (list key test)
+  "Partition the elements of LIST into an alist.
+KEY extracts the key from an element and TEST is used to compare
+keys."
+  (let ((alist '()))
+    (dolist (e list)
+      (let* ((k (funcall key e))
+             (probe (cl-assoc k alist :test test)))
+        (if probe
+            (setcdr probe (cons e (cdr probe)))
+          (push (cons k (list e)) alist))))
+    ;; Put them back in order.
+    (cl-loop for (key . value) in (reverse alist)
+             collect (cons key (reverse value)))))
+
+(defun xref--insert-propertized (props &rest strings)
+  "Insert STRINGS with text properties PROPS."
+  (let ((start (point)))
+    (apply #'insert strings)
+    (add-text-properties start (point) props)))
+
+(defun xref--search-property (property &optional backward)
+    "Search the next text range where text property PROPERTY is non-nil.
+Return the value of PROPERTY.  If BACKWARD is non-nil, search
+backward."
+  (let ((next (if backward
+                  #'previous-single-char-property-change
+                #'next-single-char-property-change))
+        (start (point))
+        (value nil))
+    (while (progn
+             (goto-char (funcall next (point) property))
+             (not (or (setq value (get-text-property (point) property))
+                      (eobp)
+                      (bobp)))))
+    (cond (value)
+          (t (goto-char start) nil))))
+
+
+;;; Marker stack  (M-. pushes, M-, pops)
+
+(defcustom xref-marker-ring-length 16
+  "Length of the xref marker ring."
+  :type 'integer
+  :version "25.1")
+
+(defvar xref--marker-ring (make-ring xref-marker-ring-length)
+  "Ring of markers to implement the marker stack.")
+
+(defun xref-push-marker-stack ()
+  "Add point to the marker stack."
+  (ring-insert xref--marker-ring (point-marker)))
+
+;;;###autoload
+(defun xref-pop-marker-stack ()
+  "Pop back to where \\[xref-find-definitions] was last invoked."
+  (interactive)
+  (let ((ring xref--marker-ring))
+    (when (ring-empty-p ring)
+      (error "Marker stack is empty"))
+    (let ((marker (ring-remove ring 0)))
+      (switch-to-buffer (or (marker-buffer marker)
+                            (error "The marked buffer has been deleted")))
+      (goto-char (marker-position marker))
+      (set-marker marker nil nil))))
+
+;; etags.el needs this
+(defun xref-clear-marker-stack ()
+  "Discard all markers from the marker stack."
+  (let ((ring xref--marker-ring))
+    (while (not (ring-empty-p ring))
+      (let ((marker (ring-remove ring)))
+        (set-marker marker nil nil)))))
+
+;;;###autoload
+(defun xref-marker-stack-empty-p ()
+  "Return t if the marker stack is empty; nil otherwise."
+  (ring-empty-p xref--marker-ring))
+
+
+(defun xref--goto-location (location)
+  "Set buffer and point according to xref-location LOCATION."
+  (let ((marker (xref-location-marker location)))
+    (set-buffer (marker-buffer marker))
+    (cond ((and (<= (point-min) marker) (<= marker (point-max))))
+          (widen-automatically (widen))
+          (t (error "Location is outside accessible part of buffer")))
+    (goto-char marker)))
+
+(defun xref--pop-to-location (location &optional window)
+  "Goto xref-location LOCATION and display the buffer.
+WINDOW controls how the buffer is displayed:
+  nil      -- switch-to-buffer
+  'window  -- pop-to-buffer (other window)
+  'frame   -- pop-to-buffer (other frame)"
+  (xref--goto-location location)
+  (cl-ecase window
+    ((nil)  (switch-to-buffer (current-buffer)))
+    (window (pop-to-buffer (current-buffer) t))
+    (frame  (let ((pop-up-frames t)) (pop-to-buffer (current-buffer) t)))))
+
+
+;;; XREF buffer (part of the UI)
+
+;; The xref buffer is used to display a set of xrefs.
+
+(defvar-local xref--display-history nil
+  "List of pairs (BUFFER . WINDOW), for temporarily displayed buffers.")
+
+(defvar-local xref--temporary-buffers nil
+  "List of buffers created by xref code.")
+
+(defvar-local xref--current nil
+  "Non-nil if this buffer was once current, except while displaying xrefs.
+Used for temporary buffers.")
+
+(defvar xref--inhibit-mark-current nil)
+
+(defun xref--mark-selected ()
+  (unless xref--inhibit-mark-current
+    (setq xref--current t))
+  (remove-hook 'buffer-list-update-hook #'xref--mark-selected t))
+
+(defun xref--save-to-history (buf win)
+  (let ((restore (window-parameter win 'quit-restore)))
+    ;; Save the new entry if the window displayed another buffer
+    ;; previously.
+    (when (and restore (not (eq (car restore) 'same)))
+      (push (cons buf win) xref--display-history))))
+
+(defun xref--display-position (pos other-window recenter-arg xref-buf)
+  ;; Show the location, but don't hijack focus.
+  (with-selected-window (display-buffer (current-buffer) other-window)
+    (goto-char pos)
+    (recenter recenter-arg)
+    (let ((buf (current-buffer))
+          (win (selected-window)))
+      (with-current-buffer xref-buf
+        (setq-local other-window-scroll-buffer buf)
+        (xref--save-to-history buf win)))))
+
+(defun xref--show-location (location)
+  (condition-case err
+      (let ((xref-buf (current-buffer))
+            (bl (buffer-list))
+            (xref--inhibit-mark-current t))
+        (xref--goto-location location)
+        (let ((buf (current-buffer)))
+          (unless (memq buf bl)
+            ;; Newly created.
+            (add-hook 'buffer-list-update-hook #'xref--mark-selected nil t)
+            (with-current-buffer xref-buf
+              (push buf xref--temporary-buffers))))
+        (xref--display-position (point) t 1 xref-buf))
+    (user-error (message (error-message-string err)))))
+
+(defun xref-show-location-at-point ()
+  "Display the source of xref at point in the other window, if any."
+  (interactive)
+  (let ((loc (xref--location-at-point)))
+    (when loc
+      (xref--show-location loc))))
+
+(defun xref-next-line ()
+  "Move to the next xref and display its source in the other window."
+  (interactive)
+  (xref--search-property 'xref-location)
+  (xref-show-location-at-point))
+
+(defun xref-prev-line ()
+  "Move to the previous xref and display its source in the other window."
+  (interactive)
+  (xref--search-property 'xref-location t)
+  (xref-show-location-at-point))
+
+(defun xref--location-at-point ()
+  (get-text-property (point) 'xref-location))
+
+(defvar-local xref--window nil
+  "ACTION argument to call `display-buffer' with.")
+
+(defun xref-goto-xref ()
+  "Jump to the xref on the current line and bury the xref buffer."
+  (interactive)
+  (back-to-indentation)
+  (let ((loc (or (xref--location-at-point)
+                 (user-error "No reference at point")))
+        (window xref--window))
+    (xref-quit)
+    (xref--pop-to-location loc window)))
+
+(defvar xref--xref-buffer-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [remap quit-window] #'xref-quit)
+    (define-key map (kbd "n") #'xref-next-line)
+    (define-key map (kbd "p") #'xref-prev-line)
+    (define-key map (kbd "RET") #'xref-goto-xref)
+    (define-key map (kbd "C-o") #'xref-show-location-at-point)
+    ;; suggested by Johan Claesson "to further reduce finger movement":
+    (define-key map (kbd ".") #'xref-next-line)
+    (define-key map (kbd ",") #'xref-prev-line)
+    map))
+
+(define-derived-mode xref--xref-buffer-mode special-mode "XREF"
+  "Mode for displaying cross-references."
+  (setq buffer-read-only t))
+
+(defun xref-quit (&optional kill)
+  "Bury temporarily displayed buffers, then quit the current window.
+
+If KILL is non-nil, kill all buffers that were created in the
+process of showing xrefs, and also kill the current buffer.
+
+The buffers that the user has otherwise interacted with in the
+meantime are preserved."
+  (interactive "P")
+  (let ((window (selected-window))
+        (history xref--display-history))
+    (setq xref--display-history nil)
+    (pcase-dolist (`(,buf . ,win) history)
+      (when (and (window-live-p win)
+                 (eq buf (window-buffer win)))
+        (quit-window nil win)))
+    (when kill
+      (let ((xref--inhibit-mark-current t)
+            kill-buffer-query-functions)
+        (dolist (buf xref--temporary-buffers)
+          (unless (buffer-local-value 'xref--current buf)
+            (kill-buffer buf)))
+        (setq xref--temporary-buffers nil)))
+    (quit-window kill window)))
+
+(defconst xref-buffer-name "*xref*"
+  "The name of the buffer to show xrefs.")
+
+(defvar xref--button-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [(control ?m)] #'xref-goto-xref)
+    (define-key map [mouse-1] #'xref-goto-xref)
+    (define-key map [mouse-2] #'xref--mouse-2)
+    map))
+
+(defun xref--mouse-2 (event)
+  "Move point to the button and show the xref definition."
+  (interactive "e")
+  (mouse-set-point event)
+  (forward-line 0)
+  (xref--search-property 'xref-location)
+  (xref-show-location-at-point))
+
+(defun xref--insert-xrefs (xref-alist)
+  "Insert XREF-ALIST in the current-buffer.
+XREF-ALIST is of the form ((GROUP . (XREF ...)) ...).  Where
+GROUP is a string for decoration purposes and XREF is an
+`xref--xref' object."
+  (cl-loop for ((group . xrefs) . more1) on xref-alist do
+           (xref--insert-propertized '(face bold) group "\n")
+           (cl-loop for (xref . more2) on xrefs do
+                    (insert "  ")
+                    (with-slots (description location) xref
+                      (xref--insert-propertized
+                       (list 'xref-location location
+                             'face 'font-lock-keyword-face
+                             'mouse-face 'highlight
+                             'keymap xref--button-map
+                             'help-echo
+                             (concat "mouse-2: display in another window, "
+                                     "RET or mouse-1: follow reference"))
+                       description))
+                    (when (or more1 more2)
+                      (insert "\n")))))
+
+(defun xref--analyze (xrefs)
+  "Find common filenames in XREFS.
+Return an alist of the form ((FILENAME . (XREF ...)) ...)."
+  (xref--alistify xrefs
+                  (lambda (x)
+                    (xref-location-group (xref--xref-location x)))
+                  #'equal))
+
+(defun xref--show-xref-buffer (xrefs alist)
+  (let ((xref-alist (xref--analyze xrefs)))
+    (with-current-buffer (get-buffer-create xref-buffer-name)
+      (let ((inhibit-read-only t))
+        (erase-buffer)
+        (xref--insert-xrefs xref-alist)
+        (xref--xref-buffer-mode)
+        (pop-to-buffer (current-buffer))
+        (goto-char (point-min))
+        (setq xref--window (assoc-default 'window alist))
+        (setq xref--temporary-buffers (assoc-default 'temporary-buffers alist))
+        (dolist (buf xref--temporary-buffers)
+          (with-current-buffer buf
+            (add-hook 'buffer-list-update-hook #'xref--mark-selected nil t)))
+        (current-buffer)))))
+
+
+;; This part of the UI seems fairly uncontroversial: it reads the
+;; identifier and deals with the single definition case.
+;;
+;; The controversial multiple definitions case is handed off to
+;; xref-show-xrefs-function.
+
+(defvar xref-show-xrefs-function 'xref--show-xref-buffer
+  "Function to display a list of xrefs.")
+
+(defvar xref--read-identifier-history nil)
+
+(defvar xref--read-pattern-history nil)
+
+(defun xref--show-xrefs (input kind arg window)
+  (let* ((bl (buffer-list))
+         (xrefs (funcall xref-find-function kind arg))
+         (tb (cl-set-difference (buffer-list) bl)))
+    (cond
+     ((null xrefs)
+      (user-error "No known %s for: %s" (symbol-name kind) input))
+     ((not (cdr xrefs))
+      (xref-push-marker-stack)
+      (xref--pop-to-location (xref--xref-location (car xrefs)) window))
+     (t
+      (xref-push-marker-stack)
+      (funcall xref-show-xrefs-function xrefs
+               `((window . ,window)
+                 (temporary-buffers . ,tb)))))))
+
+(defun xref--read-identifier (prompt)
+  "Return the identifier at point or read it from the minibuffer."
+  (let ((id (funcall xref-identifier-at-point-function)))
+    (cond ((or current-prefix-arg (not id))
+           (completing-read prompt
+                            (funcall xref-identifier-completion-table-function)
+                            nil t id
+                            'xref--read-identifier-history))
+          (t id))))
+
+
+;;; Commands
+
+(defun xref--find-definitions (id window)
+  (xref--show-xrefs id 'definitions id window))
+
+;;;###autoload
+(defun xref-find-definitions (identifier)
+  "Find the definition of the identifier at point.
+With prefix argument or when there's no identifier at point,
+prompt for it."
+  (interactive (list (xref--read-identifier "Find definitions of: ")))
+  (xref--find-definitions identifier nil))
+
+;;;###autoload
+(defun xref-find-definitions-other-window (identifier)
+  "Like `xref-find-definitions' but switch to the other window."
+  (interactive (list (xref--read-identifier "Find definitions of: ")))
+  (xref--find-definitions identifier 'window))
+
+;;;###autoload
+(defun xref-find-definitions-other-frame (identifier)
+  "Like `xref-find-definitions' but switch to the other frame."
+  (interactive (list (xref--read-identifier "Find definitions of: ")))
+  (xref--find-definitions identifier 'frame))
+
+;;;###autoload
+(defun xref-find-references (identifier)
+  "Find references to the identifier at point.
+With prefix argument, prompt for the identifier."
+  (interactive (list (xref--read-identifier "Find references of: ")))
+  (xref--show-xrefs identifier 'references identifier nil))
+
+(declare-function apropos-parse-pattern "apropos" (pattern))
+
+;;;###autoload
+(defun xref-find-apropos (pattern)
+  "Find all meaningful symbols that match PATTERN.
+The argument has the same meaning as in `apropos'."
+  (interactive (list (read-from-minibuffer
+                      "Search for pattern (word list or regexp): "
+                      nil nil nil 'xref--read-pattern-history)))
+  (require 'apropos)
+  (xref--show-xrefs pattern 'apropos
+                    (apropos-parse-pattern
+                     (if (string-equal (regexp-quote pattern) pattern)
+                         ;; Split into words
+                         (or (split-string pattern "[ \t]+" t)
+                             (user-error "No word list given"))
+                       pattern))
+                    nil))
+
+
+;;; Key bindings
+
+;;;###autoload (define-key esc-map "." #'xref-find-definitions)
+;;;###autoload (define-key esc-map "," #'xref-pop-marker-stack)
+;;;###autoload (define-key esc-map [?\C-.] #'xref-find-apropos)
+;;;###autoload (define-key ctl-x-4-map "." 
#'xref-find-definitions-other-window)
+;;;###autoload (define-key ctl-x-5-map "." #'xref-find-definitions-other-frame)
+
+
+(provide 'xref)
+
+;;; xref.el ends here
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index 4ab882b..d5243da 100644
--- a/lisp/progmodes/xscheme.el
+++ b/lisp/progmodes/xscheme.el
@@ -1,6 +1,6 @@
 ;;; xscheme.el --- run MIT Scheme under Emacs        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1986-1987, 1989-1990, 2001-2014 Free Software
+;; Copyright (C) 1986-1987, 1989-1990, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/ps-bdf.el b/lisp/ps-bdf.el
index 12e9541..8fd0dbb 100644
--- a/lisp/ps-bdf.el
+++ b/lisp/ps-bdf.el
@@ -1,6 +1,6 @@
 ;;; ps-bdf.el --- BDF font file handler for ps-print
 
-;; Copyright (C) 1998-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2001-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
 ;;   2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/ps-def.el b/lisp/ps-def.el
index db06945..5107329 100644
--- a/lisp/ps-def.el
+++ b/lisp/ps-def.el
@@ -1,6 +1,6 @@
 ;;; ps-def.el --- XEmacs and Emacs definitions for ps-print
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;;     Kenichi Handa <address@hidden> (multi-byte characters)
diff --git a/lisp/ps-mule.el b/lisp/ps-mule.el
index 21868b0..3afb72a 100644
--- a/lisp/ps-mule.el
+++ b/lisp/ps-mule.el
@@ -1,6 +1,6 @@
 ;;; ps-mule.el --- provide multi-byte character facility to ps-print
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;;     Kenichi Handa <address@hidden> (multi-byte characters)
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index 28682f5..0a2c214 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -1,6 +1,6 @@
 ;;; ps-print.el --- print text from the buffer as PostScript
 
-;; Copyright (C) 1993-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2015 Free Software Foundation, Inc.
 
 ;; Author: Jim Thompson (was <address@hidden>)
 ;;     Jacques Duthen (was <address@hidden>)
@@ -6592,7 +6592,7 @@ If FACE is not a valid face name, use default face."
 ;; To make this file smaller, some commands go in a separate file.
 ;; But autoload them here to make the separation invisible.
 
-;;;### (autoloads nil "ps-mule" "ps-mule.el" 
"173235d6520575a877c25be437fb9e5f")
+;;;### (autoloads nil "ps-mule" "ps-mule.el" 
"231b07356e5a37ebf517c613a3a12bba")
 ;;; Generated autoloads from ps-mule.el
 
 (defvar ps-multibyte-buffer nil "\
diff --git a/lisp/ps-samp.el b/lisp/ps-samp.el
index 488c9c0..581ca36 100644
--- a/lisp/ps-samp.el
+++ b/lisp/ps-samp.el
@@ -1,6 +1,6 @@
 ;;; ps-samp.el --- ps-print sample setup code
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Jim Thompson (was <address@hidden>)
 ;;     Jacques Duthen (was <address@hidden>)
diff --git a/lisp/recentf.el b/lisp/recentf.el
index dcdbd1f..37937ec 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -1,6 +1,6 @@
 ;;; recentf.el --- setup a menu of recently opened files
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 ;; Created: July 19 1999
diff --git a/lisp/rect.el b/lisp/rect.el
index 90c8f94..c5a5486 100644
--- a/lisp/rect.el
+++ b/lisp/rect.el
@@ -1,6 +1,6 @@
 ;;; rect.el --- rectangle functions for GNU Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1999-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: Didier Verna <address@hidden>
 ;; Keywords: internal
diff --git a/lisp/register.el b/lisp/register.el
index 2414606..a60181e 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -1,6 +1,6 @@
 ;;; register.el --- register commands for Emacs      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1985, 1993-1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985, 1993-1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
@@ -135,7 +135,8 @@ Format of each entry is controlled by the variable 
`register-preview-function'."
     (with-current-buffer-window
      buffer
      (cons 'display-buffer-below-selected
-          '((window-height . fit-window-to-buffer)))
+          '((window-height . fit-window-to-buffer)
+            (preserve-size . (nil . t))))
      nil
      (with-current-buffer standard-output
        (setq cursor-in-non-selected-windows nil)
diff --git a/lisp/repeat.el b/lisp/repeat.el
index 0b3eed5..80692df 100644
--- a/lisp/repeat.el
+++ b/lisp/repeat.el
@@ -1,6 +1,6 @@
 ;;; repeat.el --- convenient way to repeat the previous command  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Will Mengarini <address@hidden>
 ;; Created: Mo 02 Mar 98
diff --git a/lisp/replace.el b/lisp/replace.el
index c7fbcb5..e0636e0 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -1,6 +1,6 @@
 ;;; replace.el --- replace commands for Emacs
 
-;; Copyright (C) 1985-1987, 1992, 1994, 1996-1997, 2000-2014 Free
+;; Copyright (C) 1985-1987, 1992, 1994, 1996-1997, 2000-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -67,11 +67,18 @@ That becomes the \"string to replace\".")
 to the minibuffer that reads the string to replace, or invoke replacements
 from Isearch by using a key sequence like `C-s C-s M-%'." "24.3")
 
-(defvar query-replace-from-to-separator
-  (propertize "\0"
-             'display (propertize " \u2192 " 'face 'minibuffer-prompt)
-             'separator t)
-  "String that separates FROM and TO in the history of replacement pairs.")
+(defcustom query-replace-from-to-separator
+  (propertize
+   (or (ignore-errors
+        ;; Ignore errors when attempt to autoload char-displayable-p
+        ;; fails while preparing to dump.
+        (if (char-displayable-p ?\u2192) " \u2192 " " -> "))
+       " -> ")
+   'face 'minibuffer-prompt)
+  "String that separates FROM and TO in the history of replacement pairs."
+  :group 'matching
+  :type 'sexp
+  :version "25.1")
 
 (defcustom query-replace-from-history-variable 'query-replace-history
   "History list to use for the FROM argument of `query-replace' commands.
@@ -137,19 +144,27 @@ The return value can also be a pair (FROM . TO) 
indicating that the user
 wants to replace FROM with TO."
   (if query-replace-interactive
       (car (if regexp-flag regexp-search-ring search-ring))
+    ;; Reevaluating will check char-displayable-p that is
+    ;; unavailable while preparing to dump.
+    (custom-reevaluate-setting 'query-replace-from-to-separator)
     (let* ((history-add-new-input nil)
+          (separator
+           (when query-replace-from-to-separator
+             (propertize "\0"
+                         'display query-replace-from-to-separator
+                         'separator t)))
           (query-replace-from-to-history
            (append
-            (when query-replace-from-to-separator
+            (when separator
               (mapcar (lambda (from-to)
                         (concat (query-replace-descr (car from-to))
-                                query-replace-from-to-separator
+                                separator
                                 (query-replace-descr (cdr from-to))))
                       query-replace-defaults))
             (symbol-value query-replace-from-history-variable)))
           (minibuffer-allow-text-properties t) ; separator uses text-properties
           (prompt
-           (if (and query-replace-defaults query-replace-from-to-separator)
+           (if (and query-replace-defaults separator)
                (format "%s (default %s): " prompt (car 
query-replace-from-to-history))
              (format "%s: " prompt)))
           (from
@@ -166,10 +181,9 @@ wants to replace FROM with TO."
          (cons (caar query-replace-defaults)
                (query-replace-compile-replacement
                 (cdar query-replace-defaults) regexp-flag))
-       (let* ((to (if (and (string-match query-replace-from-to-separator from)
+       (let* ((to (if (and (string-match separator from)
                            (get-text-property (match-beginning 0) 'separator 
from))
-                      (query-replace-compile-replacement
-                       (substring-no-properties from (match-end 0)) 
regexp-flag)))
+                      (substring-no-properties from (match-end 0))))
               (from (if to (substring-no-properties from 0 (match-beginning 0))
                       (substring-no-properties from))))
          (add-to-history query-replace-from-history-variable from nil t)
@@ -187,7 +201,7 @@ wants to replace FROM with TO."
              from
            (add-to-history query-replace-to-history-variable to nil t)
            (add-to-history 'query-replace-defaults (cons from to) nil t)
-           (cons from to)))))))
+           (cons from (query-replace-compile-replacement to regexp-flag))))))))
 
 (defun query-replace-compile-replacement (to regexp-flag)
   "Maybe convert a regexp replacement TO to Lisp.
diff --git a/lisp/reposition.el b/lisp/reposition.el
index ec5f5a1..feb207b 100644
--- a/lisp/reposition.el
+++ b/lisp/reposition.el
@@ -1,6 +1,6 @@
 ;;; reposition.el --- center a Lisp function or comment on the screen
 
-;; Copyright (C) 1991, 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael D. Ernst <address@hidden>
 ;; Created: Jan 1991
diff --git a/lisp/reveal.el b/lisp/reveal.el
index 8d611ea..b71df96 100644
--- a/lisp/reveal.el
+++ b/lisp/reveal.el
@@ -1,6 +1,6 @@
 ;;; reveal.el --- Automatically reveal hidden text at point -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: outlines
diff --git a/lisp/rfn-eshadow.el b/lisp/rfn-eshadow.el
index e54d6a4..53aac55 100644
--- a/lisp/rfn-eshadow.el
+++ b/lisp/rfn-eshadow.el
@@ -1,6 +1,6 @@
 ;;; rfn-eshadow.el --- Highlight `shadowed' part of read-file-name input text
 ;;
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <address@hidden>
 ;; Keywords: convenience minibuffer
diff --git a/lisp/rot13.el b/lisp/rot13.el
index b185ba0..a53fd74 100644
--- a/lisp/rot13.el
+++ b/lisp/rot13.el
@@ -1,6 +1,6 @@
 ;;; rot13.el --- display a buffer in ROT13
 
-;; Copyright (C) 1988, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: address@hidden
diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el
index de31f2e..f0b012e 100644
--- a/lisp/ruler-mode.el
+++ b/lisp/ruler-mode.el
@@ -1,6 +1,6 @@
 ;;; ruler-mode.el --- display a ruler in the header line
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/lisp/savehist.el b/lisp/savehist.el
index 26e9d0b..692ee2e 100644
--- a/lisp/savehist.el
+++ b/lisp/savehist.el
@@ -1,6 +1,6 @@
 ;;; savehist.el --- Save minibuffer history
 
-;; Copyright (C) 1997, 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Hrvoje Niksic <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/saveplace.el b/lisp/saveplace.el
index a25dba2..4c53632 100644
--- a/lisp/saveplace.el
+++ b/lisp/saveplace.el
@@ -1,6 +1,6 @@
 ;;; saveplace.el --- automatically save place in files
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Karl Fogel <address@hidden>
 ;; Maintainer: address@hidden
@@ -138,6 +138,8 @@ disabled, i.e., the position is recorded for all files."
   :version "24.1"
   :type 'regexp :group 'save-place)
 
+(declare-function dired-current-directory "dired" (&optional localp))
+
 (defun toggle-save-place (&optional parg)
   "Toggle whether to save your place in this file between sessions.
 If this mode is enabled, point is recorded when you kill the buffer
@@ -153,7 +155,7 @@ file:
 \(setq-default save-place t)"
   (interactive "P")
   (if (not (or buffer-file-name (and (derived-mode-p 'dired-mode)
-                                    dired-directory)))
+                                    (dired-current-directory))))
       (message "Buffer `%s' not visiting a file or directory" (buffer-name))
     (setq save-place (if parg
                          (> (prefix-numeric-value parg) 0)
@@ -172,12 +174,13 @@ file:
   ;; file.  If not, do so, then feel free to modify the alist.  It
   ;; will be saved again when Emacs is killed.
   (or save-place-loaded (load-save-place-alist-from-file))
-  (let ((item (or buffer-file-name
-                  (and (derived-mode-p 'dired-mode)
-                      dired-directory
-                      (expand-file-name (if (consp dired-directory)
-                                            (car dired-directory)
-                                          dired-directory))))))
+  (let* ((directory (and (derived-mode-p 'dired-mode)
+                        (dired-current-directory)))
+        (item (or buffer-file-name
+                  (and directory
+                       (expand-file-name (if (consp directory)
+                                             (car directory)
+                                           directory))))))
     (when (and item
                (or (not save-place-ignore-files-regexp)
                    (not (string-match save-place-ignore-files-regexp
@@ -186,8 +189,7 @@ file:
             (position (cond ((eq major-mode 'hexl-mode)
                             (with-no-warnings
                               (1+ (hexl-current-address))))
-                           ((and (derived-mode-p 'dired-mode)
-                                 dired-directory)
+                           ((and (derived-mode-p 'dired-mode) directory)
                             (let ((filename (dired-get-filename nil t)))
                               (if filename
                                   `((dired-filename . ,filename))
@@ -305,7 +307,7 @@ may have changed) back to `save-place-alist'."
        ;; save-place checks buffer-file-name too, but we can avoid
        ;; overhead of function call by checking here too.
        (and (or buffer-file-name (and (derived-mode-p 'dired-mode)
-                                      dired-directory))
+                                      (dired-current-directory)))
             (save-place-to-alist))
        (setq buf-list (cdr buf-list))))))
 
@@ -325,19 +327,21 @@ may have changed) back to `save-place-alist'."
 (defun save-place-dired-hook ()
   "Position the point in a Dired buffer."
   (or save-place-loaded (load-save-place-alist-from-file))
-  (let ((cell (assoc (and (derived-mode-p 'dired-mode)
-                         dired-directory
-                         (expand-file-name (if (consp dired-directory)
-                                               (car dired-directory)
-                                             dired-directory)))
-                    save-place-alist)))
+  (let* ((directory (and (derived-mode-p 'dired-mode)
+                        (dired-current-directory)))
+        (cell (assoc (and directory
+                          (expand-file-name (if (consp directory)
+                                                (car directory)
+                                              directory)))
+                     save-place-alist)))
     (if cell
         (progn
           (or revert-buffer-in-progress-p
-              (if (integerp (cdr cell))
-                 (goto-char (cdr cell))
-               (and (assq 'dired-filename (cdr cell))
-                    (dired-goto-file (cdr (assq 'dired-filename (cdr 
cell)))))))
+              (cond
+              ((integerp (cdr cell))
+               (goto-char (cdr cell)))
+              ((and (listp (cdr cell)) (assq 'dired-filename (cdr cell)))
+               (dired-goto-file (cdr (assq 'dired-filename (cdr cell)))))))
           ;; and make sure it will be saved again for later
           (setq save-place t)))))
 
diff --git a/lisp/sb-image.el b/lisp/sb-image.el
index 1a2be9d..66f8d77 100644
--- a/lisp/sb-image.el
+++ b/lisp/sb-image.el
@@ -1,6 +1,6 @@
 ;;; sb-image --- Image management for speedbar
 
-;; Copyright (C) 1999-2003, 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2003, 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: file, tags, tools
diff --git a/lisp/scroll-all.el b/lisp/scroll-all.el
index 1aa2fc7..9c2d1fb 100644
--- a/lisp/scroll-all.el
+++ b/lisp/scroll-all.el
@@ -1,6 +1,6 @@
 ;;; scroll-all.el --- scroll all buffers together minor mode
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Gary D. Foster <address@hidden>
 ;; Keywords: convenience scroll lock
diff --git a/lisp/scroll-bar.el b/lisp/scroll-bar.el
index 6de5ee3..635990a 100644
--- a/lisp/scroll-bar.el
+++ b/lisp/scroll-bar.el
@@ -1,6 +1,6 @@
 ;;; scroll-bar.el --- window system-independent scroll bar support
 
-;; Copyright (C) 1993-1995, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1999-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: hardware
diff --git a/lisp/scroll-lock.el b/lisp/scroll-lock.el
index bdae2e5..254d4e2 100644
--- a/lisp/scroll-lock.el
+++ b/lisp/scroll-lock.el
@@ -1,6 +1,6 @@
 ;;; scroll-lock.el --- Scroll lock scrolling.
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Ralf Angeli <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/select.el b/lisp/select.el
index 5a10756..f68d3d6 100644
--- a/lisp/select.el
+++ b/lisp/select.el
@@ -1,6 +1,6 @@
 ;;; select.el --- lisp portion of standard selection support  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
diff --git a/lisp/server.el b/lisp/server.el
index 19c3c05..166cd44 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -1,6 +1,6 @@
 ;;; server.el --- Lisp code for GNU Emacs running as server process -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1986-1987, 1992, 1994-2014 Free Software Foundation,
+;; Copyright (C) 1986-1987, 1992, 1994-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: William Sommerfeld <address@hidden>
diff --git a/lisp/ses.el b/lisp/ses.el
index a653f8c..b0a09ff 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -1,6 +1,6 @@
 ;;; ses.el -- Simple Emacs Spreadsheet  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <address@hidden>
 ;; Maintainer: Vincent Belaïche  <address@hidden>
diff --git a/lisp/shadowfile.el b/lisp/shadowfile.el
index 2bf200d..4a73690 100644
--- a/lisp/shadowfile.el
+++ b/lisp/shadowfile.el
@@ -1,6 +1,6 @@
 ;;; shadowfile.el --- automatic file copying
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <address@hidden>
 ;; Keywords: comm files
diff --git a/lisp/shell.el b/lisp/shell.el
index 506f944..f71d140 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -1,6 +1,7 @@
 ;;; shell.el --- specialized comint.el for running the shell -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1988, 1993-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1993-1997, 2000-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Olin Shivers <address@hidden>
 ;;     Simon Marshall <address@hidden>
@@ -718,7 +719,7 @@ Otherwise, one argument `-i' is passed to the shell.
 
   ;; The buffer's window must be correctly set when we call comint (so
   ;; that comint sets the COLUMNS env var properly).
-  (pop-to-buffer-same-window buffer)
+  (pop-to-buffer buffer)
   (unless (comint-check-proc buffer)
     (let* ((prog (or explicit-shell-file-name
                     (getenv "ESHELL") shell-file-name))
diff --git a/lisp/simple.el b/lisp/simple.el
index 031970e..967fbc6 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -1,6 +1,6 @@
 ;;; simple.el --- basic editing commands for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1993-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1993-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
@@ -440,12 +440,12 @@ A non-nil INTERACTIVE argument means to run the 
`post-self-insert-hook'."
           (self-insert-command (prefix-numeric-value arg)))
       (unwind-protect
           (progn
-            (add-hook 'post-self-insert-hook postproc)
+            (add-hook 'post-self-insert-hook postproc nil t)
             (self-insert-command (prefix-numeric-value arg)))
         ;; We first used let-binding to protect the hook, but that was naive
         ;; since add-hook affects the symbol-default value of the variable,
         ;; whereas the let-binding might only protect the buffer-local value.
-        (remove-hook 'post-self-insert-hook postproc)))
+        (remove-hook 'post-self-insert-hook postproc t)))
       (cl-assert (not (member postproc post-self-insert-hook)))
       (cl-assert (not (member postproc (default-value 
'post-self-insert-hook))))))
   nil)
@@ -1407,8 +1407,8 @@ display the result of expression evaluation."
     (minibuffer-with-setup-hook
         (lambda ()
           ;; FIXME: call emacs-lisp-mode?
-          (setq-local eldoc-documentation-function
-                      #'elisp-eldoc-documentation-function)
+          (add-function :before-until (local 'eldoc-documentation-function)
+                        #'elisp-eldoc-documentation-function)
           (add-hook 'completion-at-point-functions
                     #'elisp-completion-at-point nil t)
           (run-hooks 'eval-expression-minibuffer-setup-hook))
@@ -1612,7 +1612,7 @@ If the value is non-nil and not a number, we wait 2 
seconds."
 
 (defun execute-extended-command--shorter (name typed)
   (let ((candidates '())
-        (max (length (or typed name)))
+        (max (length typed))
         (len 1)
         binding)
     (while (and (not binding)
@@ -1667,7 +1667,6 @@ invoking, give a prefix argument to 
`execute-extended-command'."
     (let ((prefix-arg prefixarg))
       (command-execute function 'record))
     ;; If enabled, show which key runs this command.
-    ;; (when binding
     ;; But first wait, and skip the message if there is input.
     (let* ((waited
             ;; If this command displayed something in the echo area;
@@ -1675,10 +1674,11 @@ invoking, give a prefix argument to 
`execute-extended-command'."
             ;; FIXME: Wait *after* running post-command-hook!
             ;; FIXME: Don't wait if execute-extended-command--shorter won't
             ;; find a better answer anyway!
-            (sit-for (cond
-                      ((zerop (length (current-message))) 0)
-                      ((numberp suggest-key-bindings) suggest-key-bindings)
-                      (t 2)))))
+            (when suggest-key-bindings
+              (sit-for (cond
+                        ((zerop (length (current-message))) 0)
+                        ((numberp suggest-key-bindings) suggest-key-bindings)
+                        (t 2))))))
       (when (and waited (not (consp unread-command-events)))
         (unless (or binding executing-kbd-macro (not (symbolp function))
                     (<= (length (symbol-name function)) 2))
@@ -1984,6 +1984,38 @@ With argument N, it uses the Nth previous element."
   (or (zerop n)
       (goto-history-element (+ minibuffer-history-position n))))
 
+(defun next-line-or-history-element (&optional arg)
+  "Move cursor vertically down ARG lines, or to the next history element.
+When point moves over the bottom line of multi-line minibuffer, puts ARGth
+next element of the minibuffer history in the minibuffer."
+  (interactive "^p")
+  (or arg (setq arg 1))
+  (let ((old-point (point)))
+    (condition-case nil
+       (with-no-warnings
+         (next-line arg))
+      (end-of-buffer
+       ;; Restore old position since `line-move-visual' moves point to
+       ;; the end of the line when it fails to go to the next line.
+       (goto-char old-point)
+       (next-history-element arg)))))
+
+(defun previous-line-or-history-element (&optional arg)
+  "Move cursor vertically up ARG lines, or to the previous history element.
+When point moves over the top line of multi-line minibuffer, puts ARGth
+previous element of the minibuffer history in the minibuffer."
+  (interactive "^p")
+  (or arg (setq arg 1))
+  (let ((old-point (point)))
+    (condition-case nil
+       (with-no-warnings
+         (previous-line arg))
+      (beginning-of-buffer
+       ;; Restore old position since `line-move-visual' moves point to
+       ;; the beginning of the line when it fails to go to the previous line.
+       (goto-char old-point)
+       (previous-history-element arg)))))
+
 (defun next-complete-history-element (n)
   "Get next history element which completes the minibuffer before the point.
 The contents of the minibuffer after the point are deleted, and replaced
@@ -2764,7 +2796,7 @@ which is defined in the `warnings' library.\n")
     t))
 
 (defcustom password-word-equivalents
-  '("password" "passphrase" "pass phrase"
+  '("password" "passcode" "passphrase" "pass phrase"
     ; These are sorted according to the GNU en_US locale.
     "암호"               ; ko
     "パスワード"    ; ja
@@ -4094,6 +4126,144 @@ The argument is used for internal purposes; do not 
supply one."
        (setq this-command 'kill-region)
        (message "If the next command is a kill, it will append"))
     (setq last-command 'kill-region)))
+
+(defvar bidi-directional-controls-chars "\x202a-\x202e\x2066-\x2069"
+  "Character set that matches bidirectional formatting control characters.")
+
+(defvar bidi-directional-non-controls-chars "^\x202a-\x202e\x2066-\x2069"
+  "Character set that matches any character except bidirectional controls.")
+
+(defun squeeze-bidi-context-1 (from to category replacement)
+  "A subroutine of `squeeze-bidi-context'.
+FROM and TO should be markers, CATEGORY and REPLACEMENT should be strings."
+  (let ((pt (copy-marker from))
+       (limit (copy-marker to))
+       (old-pt 0)
+       lim1)
+    (setq lim1 limit)
+    (goto-char pt)
+    (while (< pt limit)
+      (if (> pt old-pt)
+         (move-marker lim1
+                      (save-excursion
+                        ;; L and R categories include embedding and
+                        ;; override controls, but we don't want to
+                        ;; replace them, because that might change
+                        ;; the visual order.  Likewise with PDF and
+                        ;; isolate controls.
+                        (+ pt (skip-chars-forward
+                               bidi-directional-non-controls-chars
+                               limit)))))
+      ;; Replace any run of non-RTL characters by a single LRM.
+      (if (null (re-search-forward category lim1 t))
+         ;; No more characters of CATEGORY, we are done.
+         (setq pt limit)
+       (replace-match replacement nil t)
+       (move-marker pt (point)))
+      (setq old-pt pt)
+      ;; Skip directional controls, if any.
+      (move-marker
+       pt (+ pt (skip-chars-forward bidi-directional-controls-chars limit))))))
+
+(defun squeeze-bidi-context (from to)
+  "Replace characters between FROM and TO while keeping bidi context.
+
+This function replaces the region of text with as few characters
+as possible, while preserving the effect that region will have on
+bidirectional display before and after the region."
+  (let ((start (set-marker (make-marker)
+                          (if (> from 0) from (+ (point-max) from))))
+       (end (set-marker (make-marker) to))
+       ;; This is for when they copy text with read-only text
+       ;; properties.
+       (inhibit-read-only t))
+    (if (null (marker-position end))
+       (setq end (point-max-marker)))
+    ;; Replace each run of non-RTL characters with a single LRM.
+    (squeeze-bidi-context-1 start end "\\CR+" "\x200e")
+    ;; Replace each run of non-LTR characters with a single RLM.  Note
+    ;; that the \cR category includes both the Arabic Letter (AL) and
+    ;; R characters; here we ignore the distinction between them,
+    ;; because that distinction only affects Arabic Number (AN)
+    ;; characters, which are weak and don't affect the reordering.
+    (squeeze-bidi-context-1 start end "\\CL+" "\x200f")))
+
+(defun line-substring-with-bidi-context (start end &optional no-properties)
+  "Return buffer text between START and END with its bidi context.
+
+START and END are assumed to belong to the same physical line
+of buffer text.  This function prepends and appends to the text
+between START and END bidi control characters that preserve the
+visual order of that text when it is inserted at some other place."
+  (if (or (< start (point-min))
+         (> end (point-max)))
+      (signal 'args-out-of-range (list (current-buffer) start end)))
+  (let ((buf (current-buffer))
+       substr para-dir from to)
+    (save-excursion
+      (goto-char start)
+      (setq para-dir (current-bidi-paragraph-direction))
+      (setq from (line-beginning-position)
+           to (line-end-position))
+      (goto-char from)
+      ;; If we don't have any mixed directional characters in the
+      ;; entire line, we can just copy the substring without adding
+      ;; any context.
+      (if (or (looking-at-p "\\CR*$")
+             (looking-at-p "\\CL*$"))
+         (setq substr (if no-properties
+                          (buffer-substring-no-properties start end)
+                        (buffer-substring start end)))
+       (setq substr
+             (with-temp-buffer
+               (if no-properties
+                   (insert-buffer-substring-no-properties buf from to)
+                 (insert-buffer-substring buf from to))
+               (squeeze-bidi-context 1 (1+ (- start from)))
+               (squeeze-bidi-context (- end to) nil)
+               (buffer-substring 1 (point-max)))))
+
+      ;; Wrap the string in LRI/RLI..PDI pair to achieve 2 effects:
+      ;; (1) force the string to have the same base embedding
+      ;; direction as the paragraph direction at the source, no matter
+      ;; what is the paragraph direction at destination; and (2) avoid
+      ;; affecting the visual order of the surrounding text at
+      ;; destination if there are characters of different
+      ;; directionality there.
+      (concat (if (eq para-dir 'left-to-right) "\x2066" "\x2067")
+             substr "\x2069"))))
+
+(defun buffer-substring-with-bidi-context (start end &optional no-properties)
+  "Return portion of current buffer between START and END with bidi context.
+
+This function works similar to `buffer-substring', but it prepends and
+appends to the text bidi directional control characters necessary to
+preserve the visual appearance of the text if it is inserted at another
+place.  This is useful when the buffer substring includes bidirectional
+text and control characters that cause non-trivial reordering on display.
+If copied verbatim, such text can have a very different visual appearance,
+and can also change the visual appearance of the surrounding text at the
+destination of the copy.
+
+Optional argument NO-PROPERTIES, if non-nil, means copy the text without
+the text properties."
+  (let (line-end substr)
+    (if (or (< start (point-min))
+           (> end (point-max)))
+       (signal 'args-out-of-range (list (current-buffer) start end)))
+    (save-excursion
+      (goto-char start)
+      (setq line-end (min end (line-end-position)))
+      (while (< start end)
+       (setq substr
+             (concat substr
+                     (if substr "\n" "")
+                     (line-substring-with-bidi-context start line-end
+                                                       no-properties)))
+       (forward-line 1)
+       (setq start (point))
+       (setq line-end (min end (line-end-position))))
+      substr)))
 
 ;; Yanking.
 
@@ -5371,7 +5541,7 @@ TRY-VSCROLL controls whether to vscroll tall lines: if 
either
 `auto-window-vscroll' or TRY-VSCROLL is nil, this function will
 not vscroll."
   (if noninteractive
-      (forward-line arg)
+      (line-move-1 arg noerror to-end)
     (unless (and auto-window-vscroll try-vscroll
                 ;; Only vscroll for single line moves
                 (= (abs arg) 1)
@@ -5434,14 +5604,22 @@ If NOERROR, don't signal an error if we can't move that 
many lines."
                (>  (cdr temporary-goal-column) 0))
            (setq target-hscroll (cdr temporary-goal-column)))
       ;; Otherwise, we should reset `temporary-goal-column'.
-      (let ((posn (posn-at-point)))
+      (let ((posn (posn-at-point))
+           x-pos)
        (cond
         ;; Handle the `overflow-newline-into-fringe' case:
         ((eq (nth 1 posn) 'right-fringe)
          (setq temporary-goal-column (cons (- (window-width) 1) hscroll)))
         ((car (posn-x-y posn))
+         (setq x-pos (car (posn-x-y posn)))
+         ;; In R2L lines, the X pixel coordinate is measured from the
+         ;; left edge of the window, but columns are still counted
+         ;; from the logical-order beginning of the line, i.e. from
+         ;; the right edge in this case.  We need to adjust for that.
+         (if (eq (current-bidi-paragraph-direction) 'right-to-left)
+             (setq x-pos (- (window-body-width nil t) 1 x-pos)))
          (setq temporary-goal-column
-               (cons (/ (float (car (posn-x-y posn)))
+               (cons (/ (float x-pos)
                         (frame-char-width))
                       hscroll))))))
     (if target-hscroll
diff --git a/lisp/skeleton.el b/lisp/skeleton.el
index 1c6128a..84b0e0a 100644
--- a/lisp/skeleton.el
+++ b/lisp/skeleton.el
@@ -1,6 +1,6 @@
 ;;; skeleton.el --- Lisp language extension for writing statement skeletons 
-*- coding: utf-8 -*-
 
-;; Copyright (C) 1993-1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/sort.el b/lisp/sort.el
index ed345cb..9b8cec6 100644
--- a/lisp/sort.el
+++ b/lisp/sort.el
@@ -1,6 +1,6 @@
 ;;; sort.el --- commands to sort text in an Emacs buffer
 
-;; Copyright (C) 1986-1987, 1994-1995, 2001-2014 Free Software
+;; Copyright (C) 1986-1987, 1994-1995, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Howie Kaye
diff --git a/lisp/soundex.el b/lisp/soundex.el
index 1404afe..f2d08e1 100644
--- a/lisp/soundex.el
+++ b/lisp/soundex.el
@@ -1,6 +1,6 @@
 ;;; soundex.el --- implement Soundex algorithm
 
-;; Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Christian Plaunt <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/speedbar.el b/lisp/speedbar.el
index 11d2d43..2989274 100644
--- a/lisp/speedbar.el
+++ b/lisp/speedbar.el
@@ -1,6 +1,6 @@
 ;;; speedbar --- quick access to files and tags in a frame
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 ;; Keywords: file, tags, tools
diff --git a/lisp/startup.el b/lisp/startup.el
index c04b16c..999e53e 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1,6 +1,7 @@
 ;;; startup.el --- process Emacs shell arguments  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1992, 1994-2015 Free Software Foundation,
+;; Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: internal
@@ -358,6 +359,8 @@ this variable usefully is to set it while building and 
dumping Emacs."
   :set (lambda (_variable _value)
          (error "Customizing `site-run-file' does not work")))
 
+(make-obsolete-variable 'system-name "use (system-name) instead" "25.1")
+
 (defcustom mail-host-address nil
   "Name of this machine, for purposes of naming users.
 If non-nil, Emacs uses this instead of `system-name' when constructing
@@ -1463,9 +1466,7 @@ Each element in the list should be a list of strings or 
pairs
              (goto-char (point-min))))
      "\tMany people have contributed code included in GNU Emacs\n"
      :link ("Contributing"
-           ,(lambda (_button)
-             (view-file (expand-file-name "CONTRIBUTE" data-directory))
-             (goto-char (point-min))))
+           ,(lambda (_button) (info "(emacs)Contributing")))
      "\tHow to contribute improvements to Emacs\n"
      "\n"
      :link ("GNU and Freedom" ,(lambda (_button) (describe-gnu-project)))
@@ -2039,9 +2040,7 @@ Type \\[describe-distribution] for information on "))
 
   (insert-button "Contributing"
                 'action
-                (lambda (_button)
-                  (view-file (expand-file-name "CONTRIBUTE" data-directory))
-                  (goto-char (point-min)))
+                (lambda (_button) (info "(emacs)Contributing"))
                 'follow-link t)
   (insert "\tHow to contribute improvements to Emacs\n\n")
 
diff --git a/lisp/strokes.el b/lisp/strokes.el
index 040b4e7..2363d33 100644
--- a/lisp/strokes.el
+++ b/lisp/strokes.el
@@ -1,6 +1,6 @@
 ;;; strokes.el --- control Emacs through mouse strokes
 
-;; Copyright (C) 1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: David Bakhash <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/subr.el b/lisp/subr.el
index 6ce02b7..68cd230 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -1,6 +1,6 @@
 ;;; subr.el --- basic lisp subroutines for Emacs  -*- coding: utf-8; 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2014 Free Software
+;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -1082,7 +1082,12 @@ The return value is a positive integer."
 ;;;; Extracting fields of the positions in an event.
 
 (defun posnp (obj)
-  "Return non-nil if OBJ appears to be a valid `posn' object."
+  "Return non-nil if OBJ appears to be a valid `posn' object specifying a 
window.
+If OBJ is a valid `posn' object, but specifies a frame rather
+than a window, return nil."
+  ;; FIXME: Correct the behavior of this function so that all valid
+  ;; `posn' objects are recognized, after updating other code that
+  ;; depends on its present behavior.
   (and (windowp (car-safe obj))
        (atom (car-safe (setq obj (cdr obj))))                ;AREA-OR-POS.
        (integerp (car-safe (car-safe (setq obj (cdr obj))))) ;XOFFSET.
@@ -1142,24 +1147,28 @@ For a scroll-bar event, the result column is 0, and the 
row
 corresponds to the vertical position of the click in the scroll bar.
 POSITION should be a list of the form returned by the `event-start'
 and `event-end' functions."
-  (let* ((pair   (posn-x-y position))
-        (window (posn-window position))
-        (area   (posn-area position)))
+  (let* ((pair            (posn-x-y position))
+         (frame-or-window (posn-window position))
+         (frame           (if (framep frame-or-window)
+                              frame-or-window
+                            (window-frame frame-or-window)))
+         (window          (when (windowp frame-or-window) frame-or-window))
+         (area            (posn-area position)))
     (cond
-     ((null window)
+     ((null frame-or-window)
       '(0 . 0))
      ((eq area 'vertical-scroll-bar)
       (cons 0 (scroll-bar-scale pair (1- (window-height window)))))
      ((eq area 'horizontal-scroll-bar)
       (cons (scroll-bar-scale pair (window-width window)) 0))
      (t
-      (let* ((frame (if (framep window) window (window-frame window)))
-            ;; FIXME: This should take line-spacing properties on
-            ;; newlines into account.
-            (spacing (when (display-graphic-p frame)
-                       (or (with-current-buffer (window-buffer window)
-                             line-spacing)
-                           (frame-parameter frame 'line-spacing)))))
+      ;; FIXME: This should take line-spacing properties on
+      ;; newlines into account.
+      (let* ((spacing (when (display-graphic-p frame)
+                        (or (with-current-buffer
+                                (window-buffer (frame-selected-window frame))
+                              line-spacing)
+                            (frame-parameter frame 'line-spacing)))))
        (cond ((floatp spacing)
               (setq spacing (truncate (* spacing
                                          (frame-char-height frame)))))
@@ -1312,6 +1321,7 @@ is converted into a string by expressing it in decimal."
 (make-obsolete-variable 'redisplay-end-trigger-functions 'jit-lock-register 
"23.1")
 (make-obsolete-variable 'deferred-action-list 'post-command-hook "24.1")
 (make-obsolete-variable 'deferred-action-function 'post-command-hook "24.1")
+(make-obsolete-variable 'redisplay-dont-pause nil "24.5")
 (make-obsolete 'window-redisplay-end-trigger nil "23.1")
 (make-obsolete 'set-window-redisplay-end-trigger nil "23.1")
 
@@ -2166,7 +2176,7 @@ keyboard-quit events while waiting for a valid input."
     char))
 
 (defun sit-for (seconds &optional nodisp obsolete)
-  "Perform redisplay, then wait for SECONDS seconds or until input is 
available.
+  "Redisplay, then wait for SECONDS seconds.  Stop when input is available.
 SECONDS may be a floating-point value.
 \(On operating systems that do not support waiting for fractions of a
 second, floating-point values are rounded down to the nearest integer.)
@@ -2184,7 +2194,7 @@ floating point support."
   (declare (advertised-calling-convention (seconds &optional nodisp) "22.1"))
   ;; This used to be implemented in C until the following discussion:
   ;; http://lists.gnu.org/archive/html/emacs-devel/2006-07/msg00401.html
-  ;; Then it was moved to C using an implementation based on an idle timer,
+  ;; Then it was moved here using an implementation based on an idle timer,
   ;; which was then replaced by the use of read-event.
   (if (numberp nodisp)
       (setq seconds (+ seconds (* 1e-3 nodisp))
diff --git a/lisp/t-mouse.el b/lisp/t-mouse.el
index fd4b313..4ca9440 100644
--- a/lisp/t-mouse.el
+++ b/lisp/t-mouse.el
@@ -4,7 +4,7 @@
 ;; Maintainer: address@hidden
 ;; Keywords: mouse gpm linux
 
-;; Copyright (C) 1994-1995, 1998, 2006-2014 Free Software Foundation,
+;; Copyright (C) 1994-1995, 1998, 2006-2015 Free Software Foundation,
 ;; Inc.
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/tabify.el b/lisp/tabify.el
index 7b973f1..c2f4e0c 100644
--- a/lisp/tabify.el
+++ b/lisp/tabify.el
@@ -1,6 +1,6 @@
 ;;; tabify.el --- tab conversion commands for Emacs
 
-;; Copyright (C) 1985, 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Package: emacs
diff --git a/lisp/talk.el b/lisp/talk.el
index 1678036..0586131 100644
--- a/lisp/talk.el
+++ b/lisp/talk.el
@@ -1,6 +1,6 @@
 ;;; talk.el --- allow several users to talk to each other through Emacs
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: comm, frames
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el
index 129314c..6c7f755 100644
--- a/lisp/tar-mode.el
+++ b/lisp/tar-mode.el
@@ -1,6 +1,6 @@
 ;;; tar-mode.el --- simple editing of tar files from GNU Emacs
 
-;; Copyright (C) 1990-1991, 1993-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1991, 1993-2015 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <address@hidden>
 ;; Maintainer: address@hidden
@@ -50,9 +50,6 @@
 ;;
 ;; o  chmod should understand "a+x,og-w".
 ;;
-;; o  It's not possible to add a NEW file to a tar archive; not that
-;;    important, but still...
-;;
 ;; o  The code is less efficient that it could be - in a lot of places, I
 ;;    pull a 512-character string out of the buffer and parse it, when I could
 ;;    be parsing it in place, not garbaging a string.  Should redo that.
@@ -369,6 +366,80 @@ write-date, checksum, link-type, and link-name."
        string)
   (tar-parse-octal-integer string))
 
+(defun tar-new-regular-file-header (filename &optional size time)
+  "Return a Tar header for a regular file.
+The header will lack a proper checksum; use `tar-header-block-checksum'
+to compute one, or request `tar-header-serialize' to do that.
+
+Other tar-mode facilities may also require the data-start header
+field to be set to a valid value.
+
+If SIZE is not given or nil, it defaults to 0.
+If TIME is not given or nil, assume now."
+  (make-tar-header
+   nil
+   filename
+   #o644 0 0 (or size 0)
+   (or time (current-time))
+   nil                         ; checksum
+   nil nil
+   nil nil nil nil nil))
+
+(defun tar--pad-to (pos)
+  (make-string (+ pos (- (point)) (point-min)) 0))
+
+(defun tar--put-at (pos val &optional fmt mask)
+  (when val
+    (insert (tar--pad-to pos)
+           (if fmt
+               (format fmt (if mask (logand mask val) val))
+             val))))
+
+(defun tar-header-serialize (header &optional update-checksum)
+  "Return the serialization of a Tar HEADER as a string.
+This function calls `tar-header-block-check-checksum' to ensure the
+checksum is correct.
+
+If UPDATE-CHECKSUM is non-nil, update HEADER with the newly-computed
+checksum before doing the check."
+  (with-temp-buffer
+    (set-buffer-multibyte nil)
+    (let ((encoded-name
+          (encode-coding-string (tar-header-name header)
+                                tar-file-name-coding-system)))
+      (unless (< (length encoded-name) 99)
+       ;; FIXME: Implement it.
+       (error "Long file name support is not implemented"))
+      (insert encoded-name))
+    (tar--put-at tar-mode-offset (tar-header-mode header) "%6o\0 " #o777777)
+    (tar--put-at tar-uid-offset  (tar-header-uid  header) "%6o\0 " #o777777)
+    (tar--put-at tar-gid-offset  (tar-header-gid  header) "%6o\0 " #o777777)
+    (tar--put-at tar-size-offset (tar-header-size header) "%11o ")
+    (insert (tar--pad-to tar-time-offset)
+           (tar-octal-time (tar-header-date header))
+           " ")
+    ;; Omit tar-header-checksum (tar-chk-offset) for now.
+    (tar--put-at   tar-linkp-offset (tar-header-link-type header))
+    (tar--put-at   tar-link-offset  (tar-header-link-name header))
+    (when (tar-header-magic header)
+      (tar--put-at tar-magic-offset (tar-header-magic header))
+      (tar--put-at tar-uname-offset (tar-header-uname header))
+      (tar--put-at tar-gname-offset (tar-header-gname header))
+      (tar--put-at tar-dmaj-offset (tar-header-dmaj header) "%7o\0" #o7777777)
+      (tar--put-at tar-dmin-offset (tar-header-dmin header) "%7o\0" #o7777777))
+    (tar--put-at 512 "")
+    (let ((ck (tar-header-block-checksum (buffer-string))))
+      (goto-char (+ (point-min) tar-chk-offset))
+      (delete-char 8)
+      (insert (format "%6o\0 " ck))
+      (when update-checksum
+       (setf (tar-header-checksum header) ck))
+      (tar-header-block-check-checksum (buffer-string)
+                                      (tar-header-checksum header)
+                                      (tar-header-name header)))
+    ;; .
+    (buffer-string)))
+
 
 (defun tar-header-block-checksum (string)
   "Compute and return a tar-acceptable checksum for this block."
@@ -547,6 +618,7 @@ MODE should be an integer which is a file mode value."
     (define-key map "p" 'tar-previous-line)
     (define-key map "\^P" 'tar-previous-line)
     (define-key map [up] 'tar-previous-line)
+    (define-key map "I" 'tar-new-entry)
     (define-key map "R" 'tar-rename-entry)
     (define-key map "u" 'tar-unflag)
     (define-key map "v" 'tar-view)
@@ -731,10 +803,14 @@ tar-file's buffer."
   (interactive "p")
   (tar-next-line (- arg)))
 
+(defun tar-current-position ()
+  "Return the `tar-parse-info' index for the current line."
+  (count-lines (point-min) (line-beginning-position)))
+
 (defun tar-current-descriptor (&optional noerror)
   "Return the tar-descriptor of the current line, or signals an error."
   ;; I wish lines had plists, like in ZMACS...
-  (or (nth (count-lines (point-min) (line-beginning-position))
+  (or (nth (tar-current-position)
           tar-parse-info)
       (if noerror
          nil
@@ -948,6 +1024,37 @@ the current tar-entry."
        (write-region start end to-file nil nil nil t)))
     (message "Copied tar entry %s to %s" name to-file)))
 
+(defun tar-new-entry (filename &optional index)
+  "Insert a new empty regular file before point."
+  (interactive "*sFile name: ")
+  (let* ((buffer  (current-buffer))
+        (index   (or index (tar-current-position)))
+        (d-list  (and (not (zerop index))
+                      (nthcdr (+ -1 index) tar-parse-info)))
+        (pos     (if d-list
+                     (tar-header-data-end (car d-list))
+                   (point-min)))
+        (new-descriptor
+         (tar-new-regular-file-header filename)))
+    ;; Update the data buffer; fill the missing descriptor fields.
+    (with-current-buffer tar-data-buffer
+      (goto-char pos)
+      (insert (tar-header-serialize new-descriptor t))
+      (setf  (tar-header-data-start new-descriptor)
+            (copy-marker (point) nil)))
+    ;; Update tar-parse-info.
+    (if d-list
+       (setcdr d-list     (cons new-descriptor (cdr d-list)))
+      (setq tar-parse-info (cons new-descriptor tar-parse-info)))
+    ;; Update the listing buffer.
+    (save-excursion
+      (goto-char (point-min))
+      (forward-line index)
+      (let ((inhibit-read-only t))
+       (insert (tar-header-block-summarize new-descriptor) ?\n)))
+    ;; .
+    index))
+
 (defun tar-flag-deleted (p &optional unflag)
   "In Tar mode, mark this sub-file to be deleted from the tar file.
 With a prefix argument, mark that many files."
diff --git a/lisp/tempo.el b/lisp/tempo.el
index 15be01d..92e1ea7 100644
--- a/lisp/tempo.el
+++ b/lisp/tempo.el
@@ -1,6 +1,6 @@
 ;;; tempo.el --- Flexible template insertion
 
-;; Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: David Kågedal <address@hidden>
 ;; Created: 16 Feb 1994
diff --git a/lisp/term.el b/lisp/term.el
index 282dfe2..a629af9 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -1,6 +1,6 @@
 ;;; term.el --- general command interpreter in a window stuff
 
-;; Copyright (C) 1988, 1990, 1992, 1994-1995, 2001-2014 Free Software
+;; Copyright (C) 1988, 1990, 1992, 1994-1995, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Per Bothner <address@hidden>
diff --git a/lisp/term/.gitignore b/lisp/term/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/lisp/term/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/lisp/term/AT386.el b/lisp/term/AT386.el
index dc6899e..84420a5 100644
--- a/lisp/term/AT386.el
+++ b/lisp/term/AT386.el
@@ -1,6 +1,6 @@
 ;;; AT386.el --- terminal support package for IBM AT keyboards
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <address@hidden>
 ;; Keywords: terminals
diff --git a/lisp/term/README b/lisp/term/README
index b523063..35715d9 100644
--- a/lisp/term/README
+++ b/lisp/term/README
@@ -1,4 +1,4 @@
-Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/lisp/term/common-win.el b/lisp/term/common-win.el
index d026ee8..6445935 100644
--- a/lisp/term/common-win.el
+++ b/lisp/term/common-win.el
@@ -1,6 +1,6 @@
 ;;; common-win.el --- common part of handling window systems
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: terminals
diff --git a/lisp/term/internal.el b/lisp/term/internal.el
index 33dc32f..71ce8d6 100644
--- a/lisp/term/internal.el
+++ b/lisp/term/internal.el
@@ -1,6 +1,6 @@
 ;;; internal.el --- support for PC internal terminal
 
-;; Copyright (C) 1993-1994, 1998-1999, 2001-2014 Free Software
+;; Copyright (C) 1993-1994, 1998-1999, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Morten Welinder <address@hidden>
diff --git a/lisp/term/iris-ansi.el b/lisp/term/iris-ansi.el
index fa0e621..986959c 100644
--- a/lisp/term/iris-ansi.el
+++ b/lisp/term/iris-ansi.el
@@ -1,6 +1,6 @@
 ;;; iris-ansi.el --- configure Emacs for SGI xwsh and winterm apps
 
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Dan Nicolaescu <address@hidden>
 
diff --git a/lisp/term/news.el b/lisp/term/news.el
index a1e459a..4caac2a 100644
--- a/lisp/term/news.el
+++ b/lisp/term/news.el
@@ -1,6 +1,6 @@
 ;;; news.el --- keypad and function key bindings for the Sony NEWS keyboard
 
-;; Copyright (C) 1989, 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el
index 2c8dc85..9264a1c 100644
--- a/lisp/term/ns-win.el
+++ b/lisp/term/ns-win.el
@@ -1,6 +1,6 @@
 ;;; ns-win.el --- lisp side of interface with NeXT/Open/GNUstep/MacOS X window 
system  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993-1994, 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2005-2015 Free Software Foundation, Inc.
 
 ;; Authors: Carl Edman
 ;;     Christian Limpach
diff --git a/lisp/term/pc-win.el b/lisp/term/pc-win.el
index 90eb14a..dd4a8ae 100644
--- a/lisp/term/pc-win.el
+++ b/lisp/term/pc-win.el
@@ -1,6 +1,6 @@
 ;;; pc-win.el --- setup support for `PC windows' (whatever that is)  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1994, 1996-1997, 1999, 2001-2014 Free Software
+;; Copyright (C) 1994, 1996-1997, 1999, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Morten Welinder <address@hidden>
diff --git a/lisp/term/rxvt.el b/lisp/term/rxvt.el
index bdc378f..fa981c6 100644
--- a/lisp/term/rxvt.el
+++ b/lisp/term/rxvt.el
@@ -1,6 +1,6 @@
 ;;; rxvt.el --- define function key sequences and standard colors for rxvt
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii
 ;; Keywords: terminals
diff --git a/lisp/term/screen.el b/lisp/term/screen.el
index 69ddda8..3587c4f 100644
--- a/lisp/term/screen.el
+++ b/lisp/term/screen.el
@@ -1,5 +1,5 @@
 ;;; screen.el --- terminal initialization for screen and tmux  -*- 
lexical-binding: t -*-
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 (defun terminal-init-screen ()
   "Terminal initialization function for screen."
diff --git a/lisp/term/sun.el b/lisp/term/sun.el
index b3af959..2475837 100644
--- a/lisp/term/sun.el
+++ b/lisp/term/sun.el
@@ -1,6 +1,6 @@
 ;;; sun.el --- keybinding for standard default sunterm keys
 
-;; Copyright (C) 1987, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Jeff Peck <address@hidden>
 ;; Keywords: terminals
diff --git a/lisp/term/tty-colors.el b/lisp/term/tty-colors.el
index 7e53a98..98108ce 100644
--- a/lisp/term/tty-colors.el
+++ b/lisp/term/tty-colors.el
@@ -1,6 +1,6 @@
 ;;; tty-colors.el --- color support for character terminals
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii
 ;; Maintainer: address@hidden
diff --git a/lisp/term/tvi970.el b/lisp/term/tvi970.el
index 3b77ab4..3571b48 100644
--- a/lisp/term/tvi970.el
+++ b/lisp/term/tvi970.el
@@ -1,6 +1,6 @@
 ;;; tvi970.el --- terminal support for the Televideo 970
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Jim Blandy <address@hidden>
 ;; Keywords: terminals
diff --git a/lisp/term/vt100.el b/lisp/term/vt100.el
index 6761e83..8136f2e 100644
--- a/lisp/term/vt100.el
+++ b/lisp/term/vt100.el
@@ -1,6 +1,6 @@
 ;;; vt100.el --- define VT100 function key sequences in function-key-map
 
-;; Copyright (C) 1989, 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el
index bb9a7e4..b5e6ff3 100644
--- a/lisp/term/w32-win.el
+++ b/lisp/term/w32-win.el
@@ -1,6 +1,6 @@
 ;;; w32-win.el --- parse switches controlling interface with W32 window system 
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Kevin Gallo
 ;; Keywords: terminals
diff --git a/lisp/term/w32console.el b/lisp/term/w32console.el
index 96e234b..a7056cd 100644
--- a/lisp/term/w32console.el
+++ b/lisp/term/w32console.el
@@ -1,6 +1,6 @@
 ;;; w32console.el -- Setup w32 console keys and colors.
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/wyse50.el b/lisp/term/wyse50.el
index 77c1655..47c0ba3 100644
--- a/lisp/term/wyse50.el
+++ b/lisp/term/wyse50.el
@@ -1,6 +1,7 @@
 ;;; wyse50.el --- terminal support code for Wyse 50
 
-;; Copyright (C) 1989, 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993-1994, 2001-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Daniel Pfeiffer <address@hidden>,
 ;;     Jim Blandy <address@hidden>
diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el
index a54846c..b090294 100644
--- a/lisp/term/x-win.el
+++ b/lisp/term/x-win.el
@@ -1,6 +1,6 @@
 ;;; x-win.el --- parse relevant switches and set up for X  -*-coding: 
iso-2022-7bit; lexical-binding:t -*-
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals, i18n
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 1d08501..519f691 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -1,6 +1,6 @@
 ;;; xterm.el --- define function key sequences and standard colors for xterm  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/textmodes/.gitignore b/lisp/textmodes/.gitignore
deleted file mode 100644
index c531d98..0000000
--- a/lisp/textmodes/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.elc
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index 36d056a..85d9410 100644
--- a/lisp/textmodes/artist.el
+++ b/lisp/textmodes/artist.el
@@ -1,6 +1,6 @@
 ;;; artist.el --- draw ascii graphics with your mouse
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author:       Tomas Abrahamsson <address@hidden>
 ;; Maintainer:   Tomas Abrahamsson <address@hidden>
@@ -4963,52 +4963,55 @@ The event, EV, is the mouse event."
     (artist-funcall init-fn x1 y1)
     (if (not artist-rubber-banding)
        (artist-no-rb-set-point1 x1 y1))
-    (track-mouse
-      (while (or (mouse-movement-p ev)
-                (member 'down (event-modifiers ev)))
-       (setq ev-start-pos (artist-coord-win-to-buf
-                           (posn-col-row (event-start ev))))
-       (setq x1 (car ev-start-pos))
-       (setq y1 (cdr ev-start-pos))
-
-       ;; Cancel previous timer
-       (if timer
-           (cancel-timer timer))
-
-       (if (not (eq initial-win (posn-window (event-start ev))))
-           ;; If we moved outside the window, do nothing
-           nil
-
-         ;; Still in same window:
-         ;;
-         ;; Check if user presses or releases shift key
-         (if (artist-shift-has-changed shift-state ev)
-
-             ;; First check that the draw-how is the same as we
-             ;; already have. Otherwise, ignore the changed shift-state.
-             (if (not (eq draw-how
-                          (artist-go-get-draw-how-from-symbol
-                           (if (not shift-state) shifted unshifted))))
-                 (message "Cannot switch to shifted operation")
-
-               ;; progn is "implicit" since this is the else-part
-               (setq shift-state (not shift-state))
-               (setq op          (if shift-state shifted unshifted))
-               (setq draw-how    (artist-go-get-draw-how-from-symbol op))
-               (setq draw-fn     (artist-go-get-draw-fn-from-symbol op))))
-
-         ;; Draw the new shape
-         (setq shape (artist-funcall draw-fn x1 y1))
-         (artist-move-to-xy x1 y1)
-
-         ;; Start the timer to call `draw-fn' repeatedly every
-         ;; `interval' second
-         (if (and interval draw-fn)
-             (setq timer (run-at-time interval interval draw-fn x1 y1))))
-
-       ;; Read next event
-       (setq ev (read-event))))
-
+    (unwind-protect
+        (track-mouse
+          (while (or (mouse-movement-p ev)
+                     (member 'down (event-modifiers ev)))
+            (setq ev-start-pos (artist-coord-win-to-buf
+                                (posn-col-row (event-start ev))))
+            (setq x1 (car ev-start-pos))
+            (setq y1 (cdr ev-start-pos))
+
+            ;; Cancel previous timer
+            (if timer
+                (cancel-timer timer))
+
+            (if (not (eq initial-win (posn-window (event-start ev))))
+                ;; If we moved outside the window, do nothing
+                nil
+
+              ;; Still in same window:
+              ;;
+              ;; Check if user presses or releases shift key
+              (if (artist-shift-has-changed shift-state ev)
+
+                  ;; First check that the draw-how is the same as we
+                  ;; already have. Otherwise, ignore the changed shift-state.
+                  (if (not (eq draw-how
+                               (artist-go-get-draw-how-from-symbol
+                                (if (not shift-state) shifted unshifted))))
+                      (message "Cannot switch to shifted operation")
+
+                    ;; progn is "implicit" since this is the else-part
+                    (setq shift-state (not shift-state))
+                    (setq op          (if shift-state shifted unshifted))
+                    (setq draw-how    (artist-go-get-draw-how-from-symbol op))
+                    (setq draw-fn     (artist-go-get-draw-fn-from-symbol op))))
+
+              ;; Draw the new shape
+              (setq shape (artist-funcall draw-fn x1 y1))
+              (artist-move-to-xy x1 y1)
+
+              ;; Start the timer to call `draw-fn' repeatedly every
+              ;; `interval' second
+              (if (and interval draw-fn)
+                  (setq timer (run-at-time interval interval draw-fn x1 y1))))
+
+            ;; Read next event
+            (setq ev (read-event))))
+      ;; Cleanup: get rid of any active timer.
+      (if timer
+          (cancel-timer timer)))
     ;; Cancel any timers
     (if timer
        (cancel-timer timer))
diff --git a/lisp/textmodes/bib-mode.el b/lisp/textmodes/bib-mode.el
index 84fa231..12b7fc4 100644
--- a/lisp/textmodes/bib-mode.el
+++ b/lisp/textmodes/bib-mode.el
@@ -1,6 +1,6 @@
 ;;; bib-mode.el --- major mode for editing bib files
 
-;; Copyright (C) 1989, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Henry Kautz
 ;; (according to authors.el)
diff --git a/lisp/textmodes/bibtex-style.el b/lisp/textmodes/bibtex-style.el
index ab108a2..8ee0117 100644
--- a/lisp/textmodes/bibtex-style.el
+++ b/lisp/textmodes/bibtex-style.el
@@ -1,6 +1,6 @@
 ;;; bibtex-style.el --- Major mode for BibTeX Style files -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2005, 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: tex
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index 3209980..5933559 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -1,6 +1,6 @@
 ;;; bibtex.el --- BibTeX mode for GNU Emacs -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992, 1994-1999, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1992, 1994-1999, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Stefan Schoef <address@hidden>
diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el
index 05e593e..b6bea21 100644
--- a/lisp/textmodes/conf-mode.el
+++ b/lisp/textmodes/conf-mode.el
@@ -1,6 +1,6 @@
 ;;; conf-mode.el --- Simple major mode for editing conf/ini/properties files 
-*- coding: utf-8 -*-
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <address@hidden>
 ;; Keywords: conf ini windows java
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index 1759643..c171bd5 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -1,6 +1,6 @@
 ;;; css-mode.el --- Major mode to edit CSS files -*- lexical-binding: t -*-
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: hypermedia
@@ -459,7 +459,7 @@
   "Major mode to edit \"Sassy CSS\" files."
   (setq-local comment-start "// ")
   (setq-local comment-end "")
-  (setq-local comment-start-skip "/[*/]+[ t]*")
+  (setq-local comment-start-skip "/[*/]+[ \t]*")
   (setq-local comment-end-skip "[ \t]*\\(?:\n\\|\\*+/\\)")
   (setq-local font-lock-defaults '(scss-font-lock-keywords nil t)))
 
diff --git a/lisp/textmodes/dns-mode.el b/lisp/textmodes/dns-mode.el
index 1fe1ac6..4862d45 100644
--- a/lisp/textmodes/dns-mode.el
+++ b/lisp/textmodes/dns-mode.el
@@ -1,6 +1,6 @@
 ;;; dns-mode.el --- a mode for viewing/editing Domain Name System master files
 
-;; Copyright (C) 2000-2001, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2001, 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Keywords: DNS master zone file SOA comm
diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el
index e9bf6a1..040a50e 100644
--- a/lisp/textmodes/enriched.el
+++ b/lisp/textmodes/enriched.el
@@ -1,6 +1,6 @@
 ;;; enriched.el --- read and save files in text/enriched format
 
-;; Copyright (C) 1994-1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <address@hidden>
 ;; Keywords: wp, faces
@@ -314,7 +314,8 @@ the region, and the START and END of each region."
 ;;;###autoload
 (defun enriched-encode (from to orig-buf)
   (if enriched-verbose (message "Enriched: encoding document..."))
-  (let ((inhibit-read-only t))
+  (let ((inhibit-read-only t)
+       (inhibit-point-motion-hooks t))
     (save-restriction
       (narrow-to-region from to)
       (delete-to-left-margin)
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index 7a5b181..5f2fbcd 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -1,6 +1,6 @@
 ;;; fill.el --- fill commands for Emacs                -*- coding: utf-8 -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994-1997, 1999, 2001-2014 Free
+;; Copyright (C) 1985-1986, 1992, 1994-1997, 1999, 2001-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 4ea2f54..66243b4 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -1,6 +1,6 @@
 ;;; flyspell.el --- on-the-fly spell checker
 
-;; Copyright (C) 1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Manuel Serrano <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index 0fc6b4a..82a09a0 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -1,6 +1,6 @@
 ;;; ispell.el --- interface to International Ispell Versions 3.1 and 3.2
 
-;; Copyright (C) 1994-1995, 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 1997-2015 Free Software Foundation, Inc.
 
 ;; Author:           Ken Stevens <address@hidden>
 ;; Maintainer:       Ken Stevens <address@hidden>
@@ -2209,16 +2209,12 @@ indicates whether the dictionary has been modified when 
option `a'
 or `i' is used.
 Global `ispell-quit' set to start location to continue spell session."
   (let ((count ?0)
-       (line ispell-choices-win-default-height)
-       ;; ensure 4 context lines.
-       (max-lines (- (ispell-adjusted-window-height) 4))
        (choices miss)
        (window-min-height (min window-min-height
                                ispell-choices-win-default-height))
        (command-characters '( ?  ?i ?a ?A ?r ?R ?? ?x ?X ?q ?l ?u ?m ))
-       (dedicated (window-dedicated-p))
        (skipped 0)
-       char num result textwin dedicated-win)
+       char num result textwin)
 
     ;; setup the *Choices* buffer with valid data.
     (with-current-buffer (get-buffer-create ispell-choices-buffer)
@@ -2233,30 +2229,27 @@ Global `ispell-quit' set to start location to continue 
spell session."
            (boundp 'horizontal-scrollbar-visible-p)
            (set-specifier horizontal-scrollbar-visible-p nil
                           (cons (current-buffer) nil))))
+      (ispell-with-no-warnings
+       (and (boundp 'horizontal-scroll-bar)
+           (setq horizontal-scroll-bar nil)))
       (erase-buffer)
       (if guess
          (progn
            (insert "Affix rules generate and capitalize "
                    "this word as shown below:\n\t")
            (while guess
-             (if (> (+ 4 (current-column) (length (car guess)))
-                    (window-width))
-                 (progn
-                   (insert "\n\t")
-                   (setq line (1+ line))))
+             (when (> (+ 4 (current-column) (length (car guess)))
+                      (window-width))
+               (insert "\n\t"))
              (insert (car guess) "    ")
              (setq guess (cdr guess)))
-           (insert "\nUse option `i' to accept this spelling and put it in 
your private dictionary.\n")
-           (setq line (+ line (if choices 3 2)))))
-      (while (and choices
-                 (< (if (> (+ 7 (current-column) (length (car choices))
-                              (if (> count ?~) 3 0))
-                           (window-width))
-                        (progn
-                          (insert "\n")
-                          (setq line (1+ line)))
-                      line)
-                    max-lines))
+           (insert "\nUse option `i' to accept this spelling and put it in 
your private dictionary.\n")))
+      (while choices
+       (when (> (+ 7 (current-column)
+                   (length (car choices))
+                   (if (> count ?~) 3 0))
+                (window-width))
+         (insert "\n"))
        ;; not so good if there are over 20 or 30 options, but then, if
        ;; there are that many you don't want to scan them all anyway...
        (while (memq count command-characters) ; skip command characters.
@@ -2271,15 +2264,10 @@ Global `ispell-quit' set to start location to continue 
spell session."
     (if (not (pos-visible-in-window-p end))
        (sit-for 0))
 
-    ;; allow temporary split of dedicated windows...
-    (if dedicated
-       (progn
-         (setq dedicated-win (selected-window))
-         (set-window-dedicated-p dedicated-win nil)))
-
     ;; Display choices for misspelled word.
-    (ispell-show-choices line end)
-    (select-window (setq textwin (next-window)))
+    (setq textwin (selected-window))
+    (ispell-show-choices)
+    (select-window textwin)
 
     ;; highlight word, protecting current buffer status
     (unwind-protect
@@ -2406,18 +2394,13 @@ Global `ispell-quit' set to start location to continue 
spell session."
                                            (or ispell-complete-word-dict
                                                ispell-alternate-dictionary))
                                    miss (ispell-lookup-words new-word)
-                                   choices miss
-                                   line ispell-choices-win-default-height)
-                             (while (and choices ; adjust choices window.
-                                         (< (if (> (+ 7 (current-column)
-                                                      (length (car choices))
-                                                      (if (> count ?~) 3 0))
-                                                   (window-width))
-                                                (progn
-                                                  (insert "\n")
-                                                  (setq line (1+ line)))
-                                              line)
-                                            max-lines))
+                                   choices miss)
+                             (while choices
+                               (when (> (+ 7 (current-column)
+                                           (length (car choices))
+                                           (if (> count ?~) 3 0))
+                                        (window-width))
+                                 (insert "\n"))
                                (while (memq count command-characters)
                                  (setq count (ispell-int-char (1+ count))
                                        skipped (1+ skipped)))
@@ -2426,8 +2409,9 @@ Global `ispell-quit' set to start location to continue 
spell session."
                                      count (ispell-int-char (1+ count))))
                              (setq count (ispell-int-char
                                           (- count ?0 skipped))))
-                           (ispell-show-choices line end)
-                           (select-window (next-window)))))
+                           (setq textwin (selected-window))
+                           (ispell-show-choices)
+                           (select-window textwin))))
                    (and (eq 'block ispell-highlight-p)
                         (ispell-highlight-spelling-error start end nil
                                                          'block))
@@ -2487,44 +2471,19 @@ Global `ispell-quit' set to start location to continue 
spell session."
       (and ispell-highlight-p          ; unhighlight
           (save-window-excursion
             (select-window textwin)
-            (ispell-highlight-spelling-error start end)))
-      (if dedicated
-         (set-window-dedicated-p dedicated-win t)))))
+            (ispell-highlight-spelling-error start end))))))
 
 
 
-(defun ispell-show-choices (line end)
+(defun ispell-show-choices ()
   "Show the choices in another buffer or frame."
   (if (and ispell-use-framepop-p (fboundp 'framepop-display-buffer))
       (progn
        (framepop-display-buffer (get-buffer ispell-choices-buffer))
         ;; (get-buffer-window ispell-choices-buffer t)
        (select-window (previous-window))) ; *Choices* window
-    ;; standard selection by splitting a small buffer out of this window.
-    (let ((choices-window (get-buffer-window ispell-choices-buffer)))
-      (if choices-window
-         (if (= line (ispell-adjusted-window-height choices-window))
-             (select-window choices-window)
-           ;; *Choices* window changed size.  Adjust the choices window
-           ;; without scrolling the spelled window when possible
-           (let ((window-line
-                  (- line (ispell-adjusted-window-height choices-window)))
-                 (visible (progn (vertical-motion -1) (point))))
-             (if (< line ispell-choices-win-default-height)
-                 (setq window-line (+ window-line
-                                      (- ispell-choices-win-default-height
-                                         line))))
-             (move-to-window-line 0)
-             (vertical-motion window-line)
-             (set-window-start (selected-window)
-                               (if (> (point) visible) visible (point)))
-             (goto-char end)
-             (select-window choices-window)
-             (enlarge-window window-line)))
-       ;; Overlay *Choices* window when it isn't showing
-       (ispell-overlay-window (max line ispell-choices-win-default-height)))
-      (switch-to-buffer ispell-choices-buffer)
-      (goto-char (point-min)))))
+    ;; Display choices above selected window.
+    (ispell-display-buffer (get-buffer-create ispell-choices-buffer))))
 
 
 ;;;###autoload
@@ -2594,10 +2553,10 @@ SPC:   Accept word this time.
                          "Type 'x C-h f ispell-help' for more help")))
       (save-window-excursion
        (if ispell-help-in-bufferp
-           (progn
-             (ispell-overlay-window 4)
-             (switch-to-buffer (get-buffer-create "*Ispell Help*"))
-             (insert (concat help-1 "\n" help-2 "\n" help-3))
+           (let ((buffer (get-buffer-create "*Ispell Help*")))
+             (with-current-buffer buffer
+               (insert (concat help-1 "\n" help-2 "\n" help-3)))
+             (ispell-display-buffer buffer)
              (sit-for 5)
              (kill-buffer "*Ispell Help*"))
          (unwind-protect
@@ -2816,49 +2775,35 @@ The variable `ispell-highlight-face' selects the face 
to use for highlighting."
     (ispell-highlight-spelling-error-overlay start end highlight))
    (t (ispell-highlight-spelling-error-generic start end highlight refresh))))
 
-(defun ispell-adjusted-window-height (&optional window)
-  "Like `window-height', adjusted to correct for the effect of tall mode-lines.
-The value returned is actually the nominal number of text-lines in the
-window plus 1.  On a terminal, this is the same value returned by
-`window-height', but if the window has a mode-line is taller than a normal
-text line, the returned value may be smaller than that from
-`window-height'."
-  (cond ((fboundp 'window-text-height)
-        (1+ (window-text-height window)))
-       ((or (and (fboundp 'display-graphic-p) (display-graphic-p))
-            (and (featurep 'xemacs) window-system))
-        (1- (window-height window)))
-       (t
-        (window-height window))))
-
-(defun ispell-overlay-window (height)
-  "Create a window covering the top HEIGHT lines of the current window.
-Ensure that the line above point is still visible but otherwise avoid
-scrolling the current window.  Leave the new window selected."
-  (save-excursion
-    (let ((oldot (save-excursion (vertical-motion -1) (point)))
-         (top (save-excursion (move-to-window-line height) (point))))
-      ;; If line above old point (line starting at oldot) would be
-      ;; hidden by new window, scroll it to just below new win
-      ;; otherwise set top line of other win so it doesn't scroll.
-      (if (< oldot top) (setq top oldot))
-      ;; if frame is unsplittable, temporarily disable that...
-      (if (cdr (assq 'unsplittable (frame-parameters (selected-frame))))
-         (let ((frame (selected-frame)))
-           (modify-frame-parameters frame '((unsplittable . nil)))
-           (split-window nil height)
-           (modify-frame-parameters frame '((unsplittable . t))))
-       (split-window nil height))
-      (let ((deficit (- height (ispell-adjusted-window-height))))
-       (when (> deficit 0)
-         ;; Number of lines the window is still too short.  We ensure that
-         ;; there are at least (1- HEIGHT) lines visible in the window.
-         (enlarge-window deficit)
-         (goto-char top)
-         (vertical-motion deficit)
-         (setq top (min (point) oldot))))
-      (set-window-start (next-window) top))))
-
+(defun ispell-display-buffer (buffer)
+  "Show BUFFER in new window above selected one.
+Also position fit window to BUFFER and select it."
+  (let* ((unsplittable
+         (cdr (assq 'unsplittable (frame-parameters (selected-frame)))))
+        (window
+         (or (get-buffer-window buffer)
+             (and unsplittable
+                  ;; If frame is unsplittable, temporarily disable that...
+                  (let ((frame (selected-frame)))
+                    (modify-frame-parameters frame '((unsplittable . nil)))
+                    (prog1
+                        (condition-case nil
+                            (split-window
+                             nil (- ispell-choices-win-default-height) 'above)
+                          (error nil))
+                      (modify-frame-parameters frame '((unsplittable . t))))))
+             (and (not unsplittable)
+                  (condition-case nil
+                      (split-window
+                       nil (- ispell-choices-win-default-height) 'above)
+                    (error nil)))
+             (display-buffer buffer))))
+    (if (not window)
+       (error "Couldn't make window for *Choices*")
+      (select-window window)
+      (set-window-buffer window buffer)
+      (set-window-point window (point-min))
+      (fit-window-to-buffer window nil nil nil nil t))))
 
 ;; Should we add a compound word match return value?
 (defun ispell-parse-output (output &optional accept-list shift)
diff --git a/lisp/textmodes/makeinfo.el b/lisp/textmodes/makeinfo.el
index b97c632..d62929b 100644
--- a/lisp/textmodes/makeinfo.el
+++ b/lisp/textmodes/makeinfo.el
@@ -1,6 +1,6 @@
 ;;; makeinfo.el --- run makeinfo conveniently
 
-;; Copyright (C) 1991, 1993, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1993, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Robert J. Chassell
 ;; Maintainer: address@hidden
@@ -253,11 +253,12 @@ Use the \\[next-error] command to move to the next error
   (setq makeinfo-output-node-name (makeinfo-current-node))
 
   (save-excursion
-    (makeinfo-compile
-     (concat makeinfo-run-command " " makeinfo-options
-            " " buffer-file-name)
-     nil
-     'makeinfo-compilation-sentinel-buffer)))
+    (let ((default-directory (file-name-directory buffer-file-name)))
+      (makeinfo-compile
+       (concat makeinfo-run-command " " makeinfo-options
+              " " (file-name-nondirectory buffer-file-name))
+       nil
+       'makeinfo-compilation-sentinel-buffer))))
 
 (defun makeinfo-compilation-sentinel-buffer (proc msg)
   "Sentinel for `makeinfo-compile' run from `makeinfo-buffer'."
diff --git a/lisp/textmodes/nroff-mode.el b/lisp/textmodes/nroff-mode.el
index cc1d6f5..bf88551 100644
--- a/lisp/textmodes/nroff-mode.el
+++ b/lisp/textmodes/nroff-mode.el
@@ -1,6 +1,6 @@
 ;;; nroff-mode.el --- GNU Emacs major mode for editing nroff source
 
-;; Copyright (C) 1985-1986, 1994-1995, 1997, 2001-2014 Free Software
+;; Copyright (C) 1985-1986, 1994-1995, 1997, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/page-ext.el b/lisp/textmodes/page-ext.el
index 7fd8fa7..3781c98 100644
--- a/lisp/textmodes/page-ext.el
+++ b/lisp/textmodes/page-ext.el
@@ -1,6 +1,6 @@
 ;;; page-ext.el --- extended page handling commands
 
-;; Copyright (C) 1990-1991, 1993-1994, 2001-2014 Free Software
+;; Copyright (C) 1990-1991, 1993-1994, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Robert J. Chassell <address@hidden>
diff --git a/lisp/textmodes/page.el b/lisp/textmodes/page.el
index d535108..39db5bb 100644
--- a/lisp/textmodes/page.el
+++ b/lisp/textmodes/page.el
@@ -1,6 +1,6 @@
 ;;; page.el --- page motion commands for Emacs
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: wp convenience
diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el
index 3e77d37..8bcc71e 100644
--- a/lisp/textmodes/paragraphs.el
+++ b/lisp/textmodes/paragraphs.el
@@ -1,6 +1,6 @@
 ;;; paragraphs.el --- paragraph and sentence parsing
 
-;; Copyright (C) 1985-1987, 1991, 1994-1997, 1999-2014 Free Software
+;; Copyright (C) 1985-1987, 1991, 1994-1997, 1999-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -168,11 +168,11 @@ to obtain the value of this variable."
   :type '(choice regexp (const :tag "Use default value" nil)))
 (put 'sentence-end 'safe-local-variable 'string-or-null-p)
 
-(defcustom sentence-end-base "[.?!][]\"'”)}]*"
+(defcustom sentence-end-base "[.?!…‽][]\"'”’)}]*"
   "Regexp matching the basic end of a sentence, not including following space."
   :group 'paragraphs
   :type 'string
-  :version "22.1")
+  :version "25.1")
 (put 'sentence-end-base 'safe-local-variable 'stringp)
 
 (defun sentence-end ()
diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el
index 94d02be..201b85b 100644
--- a/lisp/textmodes/picture.el
+++ b/lisp/textmodes/picture.el
@@ -1,6 +1,6 @@
 ;;; picture.el --- "Picture mode" -- editing using quarter-plane screen model
 
-;; Copyright (C) 1985, 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/po.el b/lisp/textmodes/po.el
index 88ef4da..99ec291 100644
--- a/lisp/textmodes/po.el
+++ b/lisp/textmodes/po.el
@@ -1,6 +1,6 @@
 ;;; po.el --- basic support of PO translation files -*- coding: utf-8; -*-
 
-;; Copyright (C) 1995-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Authors: François Pinard <address@hidden>,
 ;;          Greg McGary <address@hidden>,
diff --git a/lisp/textmodes/refbib.el b/lisp/textmodes/refbib.el
index 12b8086..424b6d0 100644
--- a/lisp/textmodes/refbib.el
+++ b/lisp/textmodes/refbib.el
@@ -1,6 +1,6 @@
 ;;; refbib.el --- convert refer-style references to ones usable by Latex bib
 
-;; Copyright (C) 1989, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Henry Kautz <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/refer.el b/lisp/textmodes/refer.el
index b70b19b..8d824eb 100644
--- a/lisp/textmodes/refer.el
+++ b/lisp/textmodes/refer.el
@@ -1,6 +1,6 @@
 ;;; refer.el --- look up references in bibliography files
 
-;; Copyright (C) 1992, 1996, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1996, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Ashwin Ram <address@hidden>
 ;; Maintainer: Gernot Heiser <address@hidden>
diff --git a/lisp/textmodes/refill.el b/lisp/textmodes/refill.el
index 4b78197..97db70d 100644
--- a/lisp/textmodes/refill.el
+++ b/lisp/textmodes/refill.el
@@ -1,6 +1,6 @@
 ;;; refill.el --- `auto-fill' by refilling paragraphs on changes
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Maintainer: Miles Bader <address@hidden>
diff --git a/lisp/textmodes/reftex-auc.el b/lisp/textmodes/reftex-auc.el
index 2d7093c..bbad065 100644
--- a/lisp/textmodes/reftex-auc.el
+++ b/lisp/textmodes/reftex-auc.el
@@ -1,6 +1,6 @@
 ;;; reftex-auc.el --- RefTeX's interface to AUCTeX
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex-cite.el b/lisp/textmodes/reftex-cite.el
index 8ac0b0b..fa09efb 100644
--- a/lisp/textmodes/reftex-cite.el
+++ b/lisp/textmodes/reftex-cite.el
@@ -1,6 +1,6 @@
 ;;; reftex-cite.el --- creating citations with RefTeX
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex-dcr.el b/lisp/textmodes/reftex-dcr.el
index a06492e..60cb1f6 100644
--- a/lisp/textmodes/reftex-dcr.el
+++ b/lisp/textmodes/reftex-dcr.el
@@ -1,6 +1,6 @@
 ;;; reftex-dcr.el --- viewing cross references and citations with RefTeX
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex-global.el b/lisp/textmodes/reftex-global.el
index e16792e..15d42fe 100644
--- a/lisp/textmodes/reftex-global.el
+++ b/lisp/textmodes/reftex-global.el
@@ -1,6 +1,6 @@
 ;;; reftex-global.el --- operations on entire documents with RefTeX
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex-index.el b/lisp/textmodes/reftex-index.el
index f6aa523..b1aff42 100644
--- a/lisp/textmodes/reftex-index.el
+++ b/lisp/textmodes/reftex-index.el
@@ -1,6 +1,6 @@
 ;;; reftex-index.el --- index support with RefTeX
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex-parse.el b/lisp/textmodes/reftex-parse.el
index ce73939..7f186af 100644
--- a/lisp/textmodes/reftex-parse.el
+++ b/lisp/textmodes/reftex-parse.el
@@ -1,6 +1,6 @@
 ;;; reftex-parse.el --- parser functions for RefTeX
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex-ref.el b/lisp/textmodes/reftex-ref.el
index ac01b68..be119d9 100644
--- a/lisp/textmodes/reftex-ref.el
+++ b/lisp/textmodes/reftex-ref.el
@@ -1,6 +1,6 @@
 ;;; reftex-ref.el --- code to create labels and references with RefTeX
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex-sel.el b/lisp/textmodes/reftex-sel.el
index e1fc8bf..643dbfb 100644
--- a/lisp/textmodes/reftex-sel.el
+++ b/lisp/textmodes/reftex-sel.el
@@ -1,6 +1,6 @@
 ;;; reftex-sel.el --- the selection modes for RefTeX
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex-toc.el b/lisp/textmodes/reftex-toc.el
index fab558f..69cab78 100644
--- a/lisp/textmodes/reftex-toc.el
+++ b/lisp/textmodes/reftex-toc.el
@@ -1,6 +1,6 @@
 ;;; reftex-toc.el --- RefTeX's table of contents mode
 
-;; Copyright (C) 1997-2000, 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2000, 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el
index 3b497f2..115c1e0 100644
--- a/lisp/textmodes/reftex-vars.el
+++ b/lisp/textmodes/reftex-vars.el
@@ -1,6 +1,6 @@
 ;;; reftex-vars.el --- configuration variables for RefTeX
 
-;; Copyright (C) 1997-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el
index 31670a9..7cf54c6 100644
--- a/lisp/textmodes/reftex.el
+++ b/lisp/textmodes/reftex.el
@@ -1,5 +1,5 @@
 ;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX
-;; Copyright (C) 1997-2000, 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2000, 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <address@hidden>
 ;; Maintainer: address@hidden
@@ -106,17 +106,21 @@
 (defvar reftex-syntax-table nil)
 (defvar reftex-syntax-table-for-bib nil)
 
-(unless reftex-syntax-table
+(defun reftex--prepare-syntax-tables ()
   (setq reftex-syntax-table (copy-syntax-table))
   (modify-syntax-entry ?\( "." reftex-syntax-table)
-  (modify-syntax-entry ?\) "." reftex-syntax-table))
+  (modify-syntax-entry ?\) "." reftex-syntax-table)
 
-(unless reftex-syntax-table-for-bib
   (setq reftex-syntax-table-for-bib (copy-syntax-table))
   (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
   (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
   (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
-  (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib))
+  (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)
+  (modify-syntax-entry ?\( "." reftex-syntax-table-for-bib)
+  (modify-syntax-entry ?\) "." reftex-syntax-table-for-bib))
+
+(unless (and reftex-syntax-table reftex-syntax-table-for-bib)
+  (reftex--prepare-syntax-tables))
 
 ;; The following definitions are out of place, but I need them here
 ;; to make the compilation of reftex-mode not complain.
@@ -180,15 +184,7 @@ on the menu bar.
           (put 'reftex-auto-recenter-toc 'initialized t))
 
         ;; Prepare the special syntax tables.
-        (setq reftex-syntax-table (copy-syntax-table (syntax-table)))
-        (modify-syntax-entry ?\( "." reftex-syntax-table)
-        (modify-syntax-entry ?\) "." reftex-syntax-table)
-
-        (setq reftex-syntax-table-for-bib (copy-syntax-table))
-        (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
-        (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
-        (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
-        (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)
+       (reftex--prepare-syntax-tables)
 
         (run-hooks 'reftex-mode-hook))
     ;; Mode was turned off
@@ -2382,7 +2378,7 @@ Your bug report will be posted to the AUCTeX bug 
reporting list.
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "reftex-auc" "reftex-auc.el" 
"16f7e4bde671b5faee975a9ff10838e7")
+;;;### (autoloads nil "reftex-auc" "reftex-auc.el" 
"cf606f7918831321cb46f254436dc66e")
 ;;; Generated autoloads from reftex-auc.el
 
 (autoload 'reftex-arg-label "reftex-auc" "\
@@ -2450,7 +2446,7 @@ of ENTRY-LIST is a list of cons cells (\"MACRONAME\" . 
LEVEL).  See
 
 ;;;***
 
-;;;### (autoloads nil "reftex-cite" "reftex-cite.el" 
"43a70b713b3cd8a225f03431400e54e6")
+;;;### (autoloads nil "reftex-cite" "reftex-cite.el" 
"5a53c260fa01268c04ea2f558add9d7d")
 ;;; Generated autoloads from reftex-cite.el
 
 (autoload 'reftex-default-bibliography "reftex-cite" "\
@@ -2552,7 +2548,7 @@ created files in the variables 
`reftex-create-bibtex-header' or
 
 ;;;***
 
-;;;### (autoloads nil "reftex-dcr" "reftex-dcr.el" 
"e90640fdd78f4404b29729bf7a5fce30")
+;;;### (autoloads nil "reftex-dcr" "reftex-dcr.el" 
"08fc5bd6c35f9d6ab4a6ad336d3769c0")
 ;;; Generated autoloads from reftex-dcr.el
 
 (autoload 'reftex-view-crossref "reftex-dcr" "\
@@ -2600,7 +2596,7 @@ Calling this function several times find successive 
citation locations.
 
 ;;;***
 
-;;;### (autoloads nil "reftex-global" "reftex-global.el" 
"a773b46e8b751bca3a82c991f81b5fdd")
+;;;### (autoloads nil "reftex-global" "reftex-global.el" 
"5fdd9c2edced0882471f86baf4b4b234")
 ;;; Generated autoloads from reftex-global.el
 
 (autoload 'reftex-create-tags-file "reftex-global" "\
@@ -2680,7 +2676,7 @@ With no argument, this command toggles
 
 ;;;***
 
-;;;### (autoloads nil "reftex-index" "reftex-index.el" 
"ccf53e4cdf1d7280e4cdb54d23e81854")
+;;;### (autoloads nil "reftex-index" "reftex-index.el" 
"d80e84d499050e32569a454d8db16861")
 ;;; Generated autoloads from reftex-index.el
 
 (autoload 'reftex-index-selection-or-word "reftex-index" "\
@@ -2778,7 +2774,7 @@ Here are all local bindings.
 
 ;;;***
 
-;;;### (autoloads nil "reftex-parse" "reftex-parse.el" 
"69a531bd0ac3f97f076b7dda4ec2304d")
+;;;### (autoloads nil "reftex-parse" "reftex-parse.el" 
"c327a848a6d168412b1a9be9f2e3dce8")
 ;;; Generated autoloads from reftex-parse.el
 
 (autoload 'reftex-parse-one "reftex-parse" "\
@@ -2936,7 +2932,7 @@ When LEVEL is non-nil, increase section numbers on that 
level.
 
 ;;;***
 
-;;;### (autoloads nil "reftex-ref" "reftex-ref.el" 
"3ad5bfbb747c7f8c5cd5b30e3b6fc342")
+;;;### (autoloads nil "reftex-ref" "reftex-ref.el" 
"64cd7a4eaec426177a8fb3689139d935")
 ;;; Generated autoloads from reftex-ref.el
 
 (autoload 'reftex-label-location "reftex-ref" "\
@@ -2997,7 +2993,7 @@ Optional prefix argument OTHER-WINDOW goes to the label 
in another window.
 
 ;;;***
 
-;;;### (autoloads nil "reftex-sel" "reftex-sel.el" 
"4ffdcf92acf13e0e93cfac51b6e0607c")
+;;;### (autoloads nil "reftex-sel" "reftex-sel.el" 
"faea36cbe37033efd3f9063187eef7ee")
 ;;; Generated autoloads from reftex-sel.el
 
 (autoload 'reftex-select-label-mode "reftex-sel" "\
@@ -3050,7 +3046,7 @@ During a selection process, these are the local bindings.
 
 ;;;***
 
-;;;### (autoloads nil "reftex-toc" "reftex-toc.el" 
"30e611bd9b33af3e6a5a22cf7497de78")
+;;;### (autoloads nil "reftex-toc" "reftex-toc.el" 
"e04344fac7ba4c2043439e130bdd283f")
 ;;; Generated autoloads from reftex-toc.el
 
 (autoload 'reftex-toc "reftex-toc" "\
diff --git a/lisp/textmodes/remember.el b/lisp/textmodes/remember.el
index 260e7ab..35eaffa 100644
--- a/lisp/textmodes/remember.el
+++ b/lisp/textmodes/remember.el
@@ -1,6 +1,6 @@
 ;;; remember --- a mode for quickly jotting down things to remember
 
-;; Copyright (C) 1999-2001, 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2001, 2003-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el
index 5ea0b41..cda9703 100644
--- a/lisp/textmodes/rst.el
+++ b/lisp/textmodes/rst.el
@@ -1,6 +1,6 @@
 ;;; rst.el --- Mode for viewing and editing reStructuredText-documents.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: Stefan Merten <address@hidden>
 ;; Author: Stefan Merten <address@hidden>,
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 73b5292..12d98c8 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -1,6 +1,6 @@
 ;;; sgml-mode.el --- SGML- and HTML-editing modes -*- coding: utf-8 -*-
 
-;; Copyright (C) 1992, 1995-1996, 1998, 2001-2014 Free Software
+;; Copyright (C) 1992, 1995-1996, 1998, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: James Clark <address@hidden>
@@ -245,7 +245,7 @@ Currently, only Latin-1 characters are supported.")
   ;; which makes it next to useless
   (cond ((executable-find "tidy")
          ;; tidy is available from http://tidy.sourceforge.net/
-         "tidy --gnu-emacs yes -e -q")
+         "tidy --gnu-emacs yes -utf8 -e -q")
         ((executable-find "nsgmls")
          ;; nsgmls is a free SGML parser in the SP suite available from
          ;; ftp.jclark.com, replaced old `sgmls'.
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index 60aabc3..5059300 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -1,6 +1,6 @@
 ;;; table.el --- create and edit WYSIWYG text based embedded tables  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Keywords: wp, convenience
 ;; Author: Takaaki Ota <address@hidden>
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 1993ff1..e9c7e2f 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -1,6 +1,6 @@
 ;;; tex-mode.el --- TeX, LaTeX, and SliTeX mode commands -*- coding: utf-8 -*-
 
-;; Copyright (C) 1985-1986, 1989, 1992, 1994-1999, 2001-2014 Free
+;; Copyright (C) 1985-1986, 1989, 1992, 1994-1999, 2001-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -1300,18 +1300,48 @@ Inserts the value of `tex-open-quote' (normally ``) or 
`tex-close-quote'
 \(normally '') depending on the context.  With prefix argument, always
 inserts \" characters."
   (interactive "*P")
+  ;; Discover if we'll be inserting normal double quotes.
+  ;;
   (if (or arg (memq (char-syntax (preceding-char)) '(?/ ?\\))
-         (eq (get-text-property (point) 'face) 'tex-verbatim)
-         (save-excursion
-           (backward-char (length tex-open-quote))
-           (when (or (looking-at (regexp-quote tex-open-quote))
-                     (looking-at (regexp-quote tex-close-quote)))
-             (delete-char (length tex-open-quote))
-             t)))
+          (eq (get-text-property (point) 'face) 'tex-verbatim)
+          ;; Discover if a preceding occurrence of `tex-open-quote'
+          ;; should be morphed to a normal double quote.
+          ;;
+          (and (>= (point) (+ (point-min) (length tex-open-quote)))
+               (save-excursion
+                 (backward-char (length tex-open-quote))
+                 (when (or (looking-at (regexp-quote tex-open-quote))
+                           (looking-at (regexp-quote tex-close-quote)))
+                   (delete-char (length tex-open-quote))
+                   (when (looking-at (regexp-quote tex-close-quote))
+                     (delete-char (length tex-close-quote)))
+                   t))))
+      ;; Insert the normal quote (eventually letting
+      ;; `electric-pair-mode' do its thing).
+      ;;
       (self-insert-command (prefix-numeric-value arg))
-    (insert (if (or (memq (char-syntax (preceding-char)) '(?\( ?> ?\s))
-                    (memq (preceding-char) '(?~)))
-               tex-open-quote tex-close-quote))))
+    ;; We'll be inserting fancy TeX quotes, but consider and imitate
+    ;; `electric-pair-mode''s two behaviors: pair-insertion and
+    ;; region wrapping.
+    ;;
+    (if (and electric-pair-mode (use-region-p))
+        (let* ((saved (point-marker)))
+          (goto-char (mark))
+          (insert (if (> saved (mark)) tex-open-quote tex-close-quote))
+          (goto-char saved)
+          (insert (if (> saved (mark)) tex-close-quote tex-open-quote)))
+      (if (or (memq (char-syntax (preceding-char)) '(?\( ?> ?\s))
+              (memq (preceding-char) '(?~)))
+          (if electric-pair-mode
+              (if (looking-at (regexp-quote tex-close-quote))
+                  (forward-char (length tex-close-quote))
+                (insert tex-open-quote)
+                (insert tex-close-quote)
+                (backward-char (length tex-close-quote)))
+            (insert tex-open-quote))
+        (if (looking-at (regexp-quote tex-close-quote))
+            (forward-char (length tex-close-quote))
+          (insert tex-close-quote))))))
 
 (defun tex-validate-buffer ()
   "Check current buffer for paragraphs containing mismatched braces or $s.
diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el
index 218b6db..e7b6835 100644
--- a/lisp/textmodes/texinfmt.el
+++ b/lisp/textmodes/texinfmt.el
@@ -1,6 +1,6 @@
 ;;; texinfmt.el --- format Texinfo files into Info files
 
-;; Copyright (C) 1985-1986, 1988, 1990-1998, 2000-2014 Free Software
+;; Copyright (C) 1985-1986, 1988, 1990-1998, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: Robert J. Chassell <address@hidden>
diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el
index 6f441d6..895adbf 100644
--- a/lisp/textmodes/texinfo.el
+++ b/lisp/textmodes/texinfo.el
@@ -1,6 +1,6 @@
 ;;; texinfo.el --- major mode for editing Texinfo files -*- coding: utf-8 -*-
 
-;; Copyright (C) 1985, 1988-1993, 1996-1997, 2000-2014 Free Software
+;; Copyright (C) 1985, 1988-1993, 1996-1997, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Robert J. Chassell
diff --git a/lisp/textmodes/texnfo-upd.el b/lisp/textmodes/texnfo-upd.el
index 839d7a9..df05b67 100644
--- a/lisp/textmodes/texnfo-upd.el
+++ b/lisp/textmodes/texnfo-upd.el
@@ -1,6 +1,6 @@
 ;;; texnfo-upd.el --- utilities for updating nodes and menus in Texinfo files
 
-;; Copyright (C) 1989-1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1989-1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Robert J. Chassell
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/text-mode.el b/lisp/textmodes/text-mode.el
index 727697b..5f2f671 100644
--- a/lisp/textmodes/text-mode.el
+++ b/lisp/textmodes/text-mode.el
@@ -1,6 +1,6 @@
 ;;; text-mode.el --- text mode, and its idiosyncratic commands
 
-;; Copyright (C) 1985, 1992, 1994, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1985, 1992, 1994, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
index d935ff7..0eae67a 100644
--- a/lisp/textmodes/tildify.el
+++ b/lisp/textmodes/tildify.el
@@ -1,10 +1,10 @@
 ;;; tildify.el --- adding hard spaces into texts -*- lexical-binding: t -*-
 
-;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
 
 ;; Author:     Milan Zamazal <address@hidden>
 ;;             Michal Nazarewicz <address@hidden>
-;; Version:    4.5.7
+;; Version:    4.6.1
 ;; Keywords:   text, TeX, SGML, wp
 
 ;; This file is part of GNU Emacs.
@@ -401,6 +401,109 @@ replacements done and response is one of symbols: t (all 
right), nil
                         (t t))))))
 
 
+;;; *** Tildify Mode ***
+
+(defcustom tildify-space-pattern "[,:;(][ \t]*[a]\\|\\<[AIKOSUVWZikosuvwz]"
+  "Pattern specifying whether to insert a hard space at point.
+
+If the pattern matches `looking-back', a hard space needs to be inserted 
instead
+of a space at point.  The regexp is always case sensitive, regardless of the
+current `case-fold-search' setting."
+  :version "25.1"
+  :group 'tildify
+  :type 'string)
+
+(defcustom tildify-space-predicates '(tildify-space-region-predicate)
+  "A list of predicate functions for `tildify-space' function."
+  :version "25.1"
+  :group 'tildify
+  :type '(repeat 'function))
+
+(defcustom tildify-double-space-undos t
+  "Weather `tildify-space' should undo hard space when space is typed again."
+  :version "25.1"
+  :group 'tildify
+  :type 'boolean)
+
+;;;###autoload
+(defun tildify-space ()
+  "Convert space before point into a hard space if the context is right.
+
+If
+ * character before point is a space character,
+ * character before that has “w” character syntax (i.e. it's a word
+   constituent),
+ * `tildify-space-pattern' matches when `looking-back' (no more than 10
+   characters) from before the space character, and
+ * all predicates in `tildify-space-predicates' return non-nil,
+replace the space character with value of `tildify-space-string' and
+return t.
+
+Otherwise, if
+ * `tildify-double-space-undos' variable is non-nil,
+ * character before point is a space character, and
+ * text before that is a hard space as defined by
+   `tildify-space-string' variable,
+remove the hard space and leave only the space character.
+
+This function is meant to be used as a `post-self-insert-hook'."
+  (interactive)
+  (let* ((p (point)) (p-1 (1- p)) (n (- p (point-min)))
+         (l (length tildify-space-string)) (l+1 (1+ l))
+         case-fold-search)
+    (when (and (> n 2) (eq (preceding-char) ?\s))
+      (cond
+       ((and (eq (char-syntax (char-before p-1)) ?w)
+             (save-excursion
+               (goto-char p-1)
+               (looking-back tildify-space-pattern (max (point-min) (- p 10))))
+             (run-hook-with-args-until-failure 'tildify-space-predicates))
+        (delete-char -1)
+        (insert tildify-space-string)
+        t)
+       ((and tildify-double-space-undos
+             (> n l+1)
+             (string-equal tildify-space-string
+                           (buffer-substring (- p l+1) p-1)))
+        (goto-char p-1)
+        (delete-char (- l))
+        (goto-char (1+ (point)))
+        nil)))))
+
+(defun tildify-space-region-predicate ()
+  "Check whether character before point should be tildified.
+Based on `tildify-foreach-region-function', check whether character before,
+which is assumed to be a space character, should be replaced with a hard 
space."
+  (catch 'found
+    (tildify--foreach-region (lambda (_b _e) (throw 'found t)) (1- (point)) 
(point))))
+
+;;;###autoload
+(define-minor-mode tildify-mode
+  "Adds electric behaviour to space character.
+
+When space is inserted into a buffer in a position where hard space is required
+instead (determined by `tildify-space-pattern' and `tildify-space-predicates'),
+that space character is replaced by a hard space specified by
+`tildify-space-string'.  Converting of the space is done by `tildify-space'.
+
+When `tildify-mode' is enabled, if `tildify-string-alist' specifies a hard 
space
+representation for current major mode, the `tildify-space-string' buffer-local
+variable will be set to the representation."
+  nil " ~" nil
+  (when tildify-mode
+    (let ((space (tildify--pick-alist-entry tildify-string-alist)))
+      (if (not (string-equal " " (or space tildify-space-string)))
+          (when space
+            (setq tildify-space-string space))
+        (message (eval-when-compile
+                   (concat "Hard space is a single space character, tildify-"
+                           "mode won't have any effect, disabling.")))
+        (setq tildify-mode nil))))
+  (if tildify-mode
+      (add-hook 'post-self-insert-hook 'tildify-space nil t)
+    (remove-hook 'post-self-insert-hook 'tildify-space t)))
+
+
 ;;; *** Announce ***
 
 (provide 'tildify)
diff --git a/lisp/textmodes/two-column.el b/lisp/textmodes/two-column.el
index a2d605e..ea6b525 100644
--- a/lisp/textmodes/two-column.el
+++ b/lisp/textmodes/two-column.el
@@ -1,6 +1,6 @@
 ;;; two-column.el --- minor mode for editing of two-column text
 
-;; Copyright (C) 1992-1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <address@hidden>
 ;; Adapted-By: ESR, Daniel Pfeiffer
diff --git a/lisp/textmodes/underline.el b/lisp/textmodes/underline.el
index deda372..b97fdfd 100644
--- a/lisp/textmodes/underline.el
+++ b/lisp/textmodes/underline.el
@@ -1,6 +1,6 @@
 ;;; underline.el --- insert/remove underlining (done by overstriking) in Emacs
 
-;; Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: wp
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index ea5819e..b3fe1bc 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -1,6 +1,6 @@
 ;;; thingatpt.el --- get the `thing' at point
 
-;; Copyright (C) 1991-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Mike Williams <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/thumbs.el b/lisp/thumbs.el
index de2fd21..d8bb8cb 100644
--- a/lisp/thumbs.el
+++ b/lisp/thumbs.el
@@ -1,6 +1,6 @@
 ;;; thumbs.el --- Thumbnails previewer for images files
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Jean-Philippe Theberge <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/time-stamp.el b/lisp/time-stamp.el
index 99d1856..24e5ef4 100644
--- a/lisp/time-stamp.el
+++ b/lisp/time-stamp.el
@@ -1,6 +1,6 @@
 ;;; time-stamp.el --- Maintain last change time stamps in files edited by Emacs
 
-;; Copyright (C) 1989, 1993-1995, 1997, 2000-2014 Free Software
+;; Copyright (C) 1989, 1993-1995, 1997, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/time.el b/lisp/time.el
index ae04077..7c1e95e 100644
--- a/lisp/time.el
+++ b/lisp/time.el
@@ -1,6 +1,6 @@
 ;;; time.el --- display time, load and mail indicator in mode line of Emacs 
-*-coding: utf-8 -*-
 
-;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2014 Free Software
+;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/timezone.el b/lisp/timezone.el
index 8ff4396..284da21 100644
--- a/lisp/timezone.el
+++ b/lisp/timezone.el
@@ -1,6 +1,6 @@
 ;;; timezone.el --- time zone package for GNU Emacs
 
-;; Copyright (C) 1990-1993, 1996, 1999, 2001-2014 Free Software
+;; Copyright (C) 1990-1993, 1996, 1999, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu Umeda
diff --git a/lisp/tmm.el b/lisp/tmm.el
index 0972975..2ddeeee 100644
--- a/lisp/tmm.el
+++ b/lisp/tmm.el
@@ -1,6 +1,6 @@
 ;;; tmm.el --- text mode access to menu-bar  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1994-1996, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Ilya Zakharevich <address@hidden>
 ;; Maintainer: address@hidden
@@ -371,7 +371,6 @@ Stores a list of all the shortcuts in the free variable 
`tmm-short-cuts'."
   (unless tmm-c-prompt
     (error "No active menu entries"))
   (setq tmm-old-mb-map (tmm-define-keys t))
-  ;; Get window and hide it for electric mode to get correct size
   (or tmm-completion-prompt
       (add-hook 'completion-setup-hook
                 'tmm-completion-delete-prompt 'append))
@@ -381,9 +380,15 @@ Stores a list of all the shortcuts in the free variable 
`tmm-short-cuts'."
   (with-current-buffer "*Completions*"
     (tmm-remove-inactive-mouse-face)
     (when tmm-completion-prompt
-      (let ((inhibit-read-only t))
+      (let ((inhibit-read-only t)
+           (window (get-buffer-window "*Completions*")))
        (goto-char (point-min))
-       (insert tmm-completion-prompt))))
+       (insert tmm-completion-prompt)
+       (when window
+         ;; Try to show everything just inserted and preserve height of
+         ;; *Completions* window.  This should fix a behavior described
+         ;; in Bug#1291.
+         (fit-window-to-buffer window nil nil nil nil t)))))
   (insert tmm-c-prompt))
 
 (defun tmm-shortcut ()
diff --git a/lisp/tool-bar.el b/lisp/tool-bar.el
index 6e5c8b7..3fbdfbe 100644
--- a/lisp/tool-bar.el
+++ b/lisp/tool-bar.el
@@ -1,6 +1,6 @@
 ;;; tool-bar.el --- setting up the tool bar
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;; Keywords: mouse frames
@@ -174,7 +174,8 @@ is less or equal to 256, then ICON.xpm, then ICON.pbm, and 
finally
 ICON.xbm, using `find-image'."
   (let* ((image-exp (tool-bar--image-expression icon)))
     (define-key-after map (vector key)
-      `(menu-item ,(symbol-name key) ,def :image ,image-exp ,@props))))
+      `(menu-item ,(symbol-name key) ,def :image ,image-exp ,@props))
+    (force-mode-line-update)))
 
 ;;;###autoload
 (defun tool-bar-add-item-from-menu (command icon &optional map &rest props)
@@ -239,7 +240,8 @@ holds a keymap."
             (if (and (consp rest) (consp (car rest)))
                 (setq rest (cdr rest)))
             (append `(menu-item ,(car defn) ,rest)
-                    (list :image image-exp) props)))))))
+                    (list :image image-exp) props))))
+      (force-mode-line-update))))
 
 ;;; Set up some global items.  Additions/deletions up for grabs.
 
diff --git a/lisp/tooltip.el b/lisp/tooltip.el
index 26cce41..e638228 100644
--- a/lisp/tooltip.el
+++ b/lisp/tooltip.el
@@ -1,6 +1,6 @@
 ;;; tooltip.el --- show tooltip windows
 
-;; Copyright (C) 1997, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <address@hidden>
 ;; Keywords: help c mouse tools
@@ -284,10 +284,6 @@ is based on the current syntax table."
        (when (> (point) start)
          (buffer-substring start (point)))))))
 
-(defmacro tooltip-region-active-p ()
-  "Value is non-nil if the region should override command actions."
-  `(use-region-p))
-
 (defun tooltip-expr-to-print (event)
   "Return an expression that should be printed for EVENT.
 If a region is active and the mouse is inside the region, print
@@ -295,7 +291,7 @@ the region.  Otherwise, figure out the identifier around 
the point
 where the mouse is."
   (with-current-buffer (tooltip-event-buffer event)
     (let ((point (posn-point (event-end event))))
-      (if (tooltip-region-active-p)
+      (if (use-region-p)
          (when (and (<= (region-beginning) point) (<= point (region-end)))
            (buffer-substring (region-beginning) (region-end)))
        (tooltip-identifier-from-point point)))))
diff --git a/lisp/tree-widget.el b/lisp/tree-widget.el
index a48c50f..a29658a 100644
--- a/lisp/tree-widget.el
+++ b/lisp/tree-widget.el
@@ -1,6 +1,6 @@
 ;;; tree-widget.el --- Tree widget
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <address@hidden>
 ;; Maintainer: David Ponce <address@hidden>
diff --git a/lisp/tutorial.el b/lisp/tutorial.el
index fcb840f..3b00761 100644
--- a/lisp/tutorial.el
+++ b/lisp/tutorial.el
@@ -1,6 +1,6 @@
 ;;; tutorial.el --- tutorial for Emacs
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: help, internal
diff --git a/lisp/type-break.el b/lisp/type-break.el
index a3af407..a5a31c9 100644
--- a/lisp/type-break.el
+++ b/lisp/type-break.el
@@ -1,6 +1,7 @@
 ;;; type-break.el --- encourage rests from typing at appropriate intervals  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1994-1995, 1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 1997, 2000-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Noah Friedman
 ;; Maintainer: Noah Friedman <address@hidden>
diff --git a/lisp/uniquify.el b/lisp/uniquify.el
index f0e86dc..ce681b4 100644
--- a/lisp/uniquify.el
+++ b/lisp/uniquify.el
@@ -1,6 +1,6 @@
 ;;; uniquify.el --- unique buffer names dependent on file name -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1989, 1995-1997, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1989, 1995-1997, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Dick King <address@hidden>
diff --git a/lisp/url/.gitignore b/lisp/url/.gitignore
deleted file mode 100644
index 362a9c8..0000000
--- a/lisp/url/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-Makefile
-auto-autoloads.el
-custom-load.el
-url-auto.el
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 1be4ca7..920d692 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -1,3 +1,45 @@
+2015-01-22  Paul Eggert  <address@hidden>
+
+       Don't downcase system diagnostics' first letters
+       * url-dav.el (url-dav-delete-directory, url-dav-delete-file)
+       (url-dav-directory-files): Keep diagnostics consistent with system's.
+
+2014-12-12  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * url-http.el (url-http-parse-headers): `gnutls-available-p' is
+       now always available.
+
+2014-12-11  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * url-http.el (url-http-parse-headers): Check that
+       `gnutls-available-p' is defined (bug#19346).
+
+2014-12-09  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * url-http.el (url-http-parse-headers): Pass the GnuTLS status of
+       the connection to the caller.
+       (url-http-parse-headers): When being redirected, make sure we
+       flush the previous certificate.
+
+2014-12-08  Stefan Monnier  <address@hidden>
+
+       * url-http.el (url-http-activate-callback): Make debug more verbose.
+
+2014-12-05  Stefan Monnier  <address@hidden>
+
+       * url-future.el (url-future-done-p, url-future-completed-p)
+       (url-future-errored-p, url-future-cancelled-p):
+       * url-dav.el (url-dav-http-success-p): Use define-inline.
+
+2014-11-23  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * url-http.el (url-http): Respect `url-request-noninteractive'.
+
+       * url-queue.el (url-queue-start-retrieve): Fetching through
+       url-queue should always be noninteractive.
+
+       * url-vars.el (url-request-noninteractive): New variable.
+
 2014-11-14  David Reitter  <address@hidden>
 
        * url-domsuf.el (url-domsuf-parse-file): Read compressed
@@ -6,8 +48,8 @@
 2014-11-05  Teodor Zlatanov  <address@hidden>
 
        * url-http.el (url-user-agent): New variable, can be function or
-       string.  Suggested by Vibhav Pant <address@hidden>.  Add
-       :version.  (Bug#16498)
+       string.  Suggested by Vibhav Pant <address@hidden>.
+       Add :version.  (Bug#16498)
 
        (url-http-user-agent-string): Use it.
 
@@ -3015,7 +3057,8 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1999, 2001-2002, 2004-2014 Free Software Foundation, Inc.
+  Copyright (C) 1999, 2001-2002, 2004-2015 Free Software Foundation,
+  Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/url/url-about.el b/lisp/url/url-about.el
index 017b5b0..c9dfe17 100644
--- a/lisp/url/url-about.el
+++ b/lisp/url/url-about.el
@@ -1,6 +1,6 @@
 ;;; url-about.el --- Show internal URLs
 
-;; Copyright (C) 2001, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-auth.el b/lisp/url/url-auth.el
index 3d17edb..58bf45b 100644
--- a/lisp/url/url-auth.el
+++ b/lisp/url/url-auth.el
@@ -1,6 +1,6 @@
 ;;; url-auth.el --- Uniform Resource Locator authorization modules
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-cache.el b/lisp/url/url-cache.el
index 9b634bd..8e9d128 100644
--- a/lisp/url/url-cache.el
+++ b/lisp/url/url-cache.el
@@ -1,6 +1,6 @@
 ;;; url-cache.el --- Uniform Resource Locator retrieval tool
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-cid.el b/lisp/url/url-cid.el
index cc9dc20..55713c7 100644
--- a/lisp/url/url-cid.el
+++ b/lisp/url/url-cid.el
@@ -1,6 +1,6 @@
 ;;; url-cid.el --- Content-ID URL loader
 
-;; Copyright (C) 1998-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el
index f89886b..a7b3d16 100644
--- a/lisp/url/url-cookie.el
+++ b/lisp/url/url-cookie.el
@@ -1,6 +1,6 @@
 ;;; url-cookie.el --- URL cookie support
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
@@ -104,9 +104,10 @@ telling Microsoft that."
       (insert ";; Emacs-W3 HTTP cookies file\n"
              ";; Automatically generated file!!! DO NOT EDIT!!!\n\n"
              "(setq url-cookie-storage\n '")
-      (pp url-cookie-storage (current-buffer))
-      (insert ")\n(setq url-cookie-secure-storage\n '")
-      (pp url-cookie-secure-storage (current-buffer))
+      (let ((print-length nil) (print-level nil))
+       (pp url-cookie-storage (current-buffer))
+       (insert ")\n(setq url-cookie-secure-storage\n '")
+       (pp url-cookie-secure-storage (current-buffer)))
       (insert ")\n")
       (insert "\n;; Local Variables:\n"
               ";; version-control: never\n"
diff --git a/lisp/url/url-dav.el b/lisp/url/url-dav.el
index 6adb2d9..61ca088 100644
--- a/lisp/url/url-dav.el
+++ b/lisp/url/url-dav.el
@@ -1,6 +1,6 @@
 ;;; url-dav.el --- WebDAV support
 
-;; Copyright (C) 2001, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <address@hidden>
 ;; Maintainer: address@hidden
@@ -479,9 +479,9 @@ names (ie: DAV:resourcetype)."
                     "  <DAV:allprop/>")
                   depth nil namespaces))
 
-(defmacro url-dav-http-success-p (status)
+(define-inline url-dav-http-success-p (status)
   "Return whether STATUS was the result of a successful DAV request."
-  `(= (/ (or ,status 500) 100) 2))
+  (inline-quote (= (/ (or ,status 500) 100) 2)))
 
 
 ;;; Locking support
@@ -741,7 +741,7 @@ files in the collection as well."
                 (if (and (not recursive)
                          (/= (length props) 1))
                     (signal 'file-error (list "Removing directory"
-                                              "directory not empty" url)))))
+                                              "Directory not empty" url)))))
 
      (mapc (lambda (result)
             (setq status (plist-get (cdr result) 'DAV:status))
@@ -760,7 +760,7 @@ files in the collection as well."
                 url lock-token
                 (setq props (url-dav-get-properties url))
                 (if (eq (plist-get (cdar props) 'DAV:resourcetype) 
'DAV:collection)
-                    (signal 'file-error (list "Removing old name" "is a 
collection" url)))))
+                    (signal 'file-error (list "Removing old name" "Is a 
collection" url)))))
 
     (mapc (lambda (result)
            (setq status (plist-get (cdr result) 'DAV:status))
@@ -787,7 +787,7 @@ If NOSORT is non-nil, the list is not sorted--its order is 
unpredictable.
 
     (when (and (= (length properties) 1)
               (not (url-dav-file-directory-p url)))
-      (signal 'file-error (list "Opening directory" "not a directory" url)))
+      (signal 'file-error (list "Opening directory" "Not a directory" url)))
 
     (while properties
       (setq child-props (pop properties)
diff --git a/lisp/url/url-dired.el b/lisp/url/url-dired.el
index 516a362..fe621ce 100644
--- a/lisp/url/url-dired.el
+++ b/lisp/url/url-dired.el
@@ -1,6 +1,6 @@
 ;;; url-dired.el --- URL Dired minor mode
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, files
 
diff --git a/lisp/url/url-domsuf.el b/lisp/url/url-domsuf.el
index b7f9259..97c0759 100644
--- a/lisp/url/url-domsuf.el
+++ b/lisp/url/url-domsuf.el
@@ -1,6 +1,6 @@
 ;;; url-domsuf.el --- Say what domain names can have cookies set.
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 
diff --git a/lisp/url/url-expand.el b/lisp/url/url-expand.el
index 1142532..c468a79 100644
--- a/lisp/url/url-expand.el
+++ b/lisp/url/url-expand.el
@@ -1,6 +1,6 @@
 ;;; url-expand.el --- expand-file-name for URLs
 
-;; Copyright (C) 1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-file.el b/lisp/url/url-file.el
index 03a2ea1..e28af95 100644
--- a/lisp/url/url-file.el
+++ b/lisp/url/url-file.el
@@ -1,6 +1,6 @@
 ;;; url-file.el --- File retrieval code
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-ftp.el b/lisp/url/url-ftp.el
index 243240c..f558c6a 100644
--- a/lisp/url/url-ftp.el
+++ b/lisp/url/url-ftp.el
@@ -1,6 +1,6 @@
 ;;; url-ftp.el --- FTP wrapper
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-future.el b/lisp/url/url-future.el
index 0505218..f611c81 100644
--- a/lisp/url/url-future.el
+++ b/lisp/url/url-future.el
@@ -1,6 +1,6 @@
 ;;; url-future.el --- general futures facility for url.el
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <address@hidden>
 ;; Keywords: data
@@ -44,17 +44,17 @@
 
 (cl-defstruct url-future callback errorback status value)
 
-(defmacro url-future-done-p (url-future)
-  `(url-future-status ,url-future))
+(define-inline url-future-done-p (url-future)
+  (inline-quote (url-future-status ,url-future)))
 
-(defmacro url-future-completed-p (url-future)
-  `(eq (url-future-status ,url-future) t))
+(define-inline url-future-completed-p (url-future)
+  (inline-quote (eq (url-future-status ,url-future) t)))
 
-(defmacro url-future-errored-p (url-future)
-  `(eq (url-future-status ,url-future) 'error))
+(define-inline url-future-errored-p (url-future)
+  (inline-quote (eq (url-future-status ,url-future) 'error)))
 
-(defmacro url-future-cancelled-p (url-future)
-  `(eq (url-future-status ,url-future) 'cancel))
+(define-inline url-future-cancelled-p (url-future)
+  (inline-quote (eq (url-future-status ,url-future) 'cancel)))
 
 (defun url-future-finish (url-future &optional status)
   (if (url-future-done-p url-future)
diff --git a/lisp/url/url-gw.el b/lisp/url/url-gw.el
index 4a6189d..cc0e4f8 100644
--- a/lisp/url/url-gw.el
+++ b/lisp/url/url-gw.el
@@ -1,6 +1,6 @@
 ;;; url-gw.el --- Gateway munging for URL loading
 
-;; Copyright (C) 1997-1998, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el
index 56a0986..23006e1 100644
--- a/lisp/url/url-handlers.el
+++ b/lisp/url/url-handlers.el
@@ -1,6 +1,6 @@
 ;;; url-handlers.el --- file-name-handler stuff for URL loading
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-history.el b/lisp/url/url-history.el
index 1fe0e9e..ee0a13b 100644
--- a/lisp/url/url-history.el
+++ b/lisp/url/url-history.el
@@ -1,6 +1,6 @@
 ;;; url-history.el --- Global history tracking for URL package
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index a51785a..d766952 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -1,6 +1,6 @@
 ;;; url-http.el --- HTTP retrieval routines
 
-;; Copyright (C) 1999, 2001, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <address@hidden>
 ;; Maintainer: address@hidden
@@ -25,7 +25,9 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl-lib))
+(eval-when-compile
+  (require 'cl-lib)
+  (require 'subr-x))
 
 (defvar url-callback-arguments)
 (defvar url-callback-function)
@@ -40,6 +42,7 @@
 (defvar url-http-data)
 (defvar url-http-end-of-headers)
 (defvar url-http-extra-headers)
+(defvar url-http-noninteractive)
 (defvar url-http-method)
 (defvar url-http-no-retry)
 (defvar url-http-process)
@@ -491,7 +494,14 @@ should be shown to the user."
   (url-http-mark-connection-as-free (url-host url-current-object)
                                    (url-port url-current-object)
                                    url-http-process)
-
+  ;; Pass the https certificate on to the caller.
+  (when (gnutls-available-p)
+    (let ((status (gnutls-peer-status url-http-process)))
+      (when (or status
+               (plist-get (car url-callback-arguments) :peer))
+       (setcar url-callback-arguments
+               (plist-put (car url-callback-arguments)
+                          :peer status)))))
   (if (or (not (boundp 'url-http-end-of-headers))
          (not url-http-end-of-headers))
       (error "Trying to parse headers in odd buffer: %s" (buffer-name)))
@@ -891,7 +901,8 @@ should be shown to the user."
   (url-http-mark-connection-as-free (url-host url-current-object)
                                    (url-port url-current-object)
                                    url-http-process)
-  (url-http-debug "Activating callback in buffer (%s)" (buffer-name))
+  (url-http-debug "Activating callback in buffer (%s): %S %S"
+                 (buffer-name) url-callback-function url-callback-arguments)
   (apply url-callback-function url-callback-arguments))
 
 ;; )
@@ -1201,6 +1212,9 @@ overriding the value of `url-gateway-method'."
   (cl-check-type url vector "Need a pre-parsed URL.")
   (let* ((host (url-host (or url-using-proxy url)))
         (port (url-port (or url-using-proxy url)))
+        (nsm-noninteractive (or url-request-noninteractive
+                                (and (boundp 'url-http-noninteractive)
+                                     url-http-noninteractive)))
         (connection (url-http-find-free-connection host port gateway-method))
         (buffer (or retry-buffer
                     (generate-new-buffer
@@ -1232,6 +1246,7 @@ overriding the value of `url-gateway-method'."
                       url-http-process
                       url-http-method
                       url-http-extra-headers
+                      url-http-noninteractive
                       url-http-data
                       url-http-target-url
                       url-http-no-retry
@@ -1241,6 +1256,7 @@ overriding the value of `url-gateway-method'."
 
        (setq url-http-method (or url-request-method "GET")
              url-http-extra-headers url-request-extra-headers
+             url-http-noninteractive url-request-noninteractive
              url-http-data url-request-data
              url-http-process connection
              url-http-chunked-length nil
diff --git a/lisp/url/url-imap.el b/lisp/url/url-imap.el
index 81d117b..4095aea 100644
--- a/lisp/url/url-imap.el
+++ b/lisp/url/url-imap.el
@@ -1,6 +1,6 @@
 ;;; url-imap.el --- IMAP retrieval routines
 
-;; Copyright (C) 1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <address@hidden>
 ;; Keywords: comm, data, processes
diff --git a/lisp/url/url-irc.el b/lisp/url/url-irc.el
index 07d1a12..bdccd8f 100644
--- a/lisp/url/url-irc.el
+++ b/lisp/url/url-irc.el
@@ -1,6 +1,6 @@
 ;;; url-irc.el --- IRC URL interface
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-ldap.el b/lisp/url/url-ldap.el
index e1c4eb0..5c5ee76 100644
--- a/lisp/url/url-ldap.el
+++ b/lisp/url/url-ldap.el
@@ -1,6 +1,6 @@
 ;;; url-ldap.el --- LDAP Uniform Resource Locator retrieval code
 
-;; Copyright (C) 1998-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-mailto.el b/lisp/url/url-mailto.el
index e3b62e4..3dd89d5 100644
--- a/lisp/url/url-mailto.el
+++ b/lisp/url/url-mailto.el
@@ -1,6 +1,6 @@
 ;;; url-mail.el --- Mail Uniform Resource Locator retrieval code
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-methods.el b/lisp/url/url-methods.el
index 84294ab..a4f711b 100644
--- a/lisp/url/url-methods.el
+++ b/lisp/url/url-methods.el
@@ -1,6 +1,6 @@
 ;;; url-methods.el --- Load URL schemes as needed
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-misc.el b/lisp/url/url-misc.el
index 31c37d0..b21b15d 100644
--- a/lisp/url/url-misc.el
+++ b/lisp/url/url-misc.el
@@ -1,6 +1,6 @@
 ;;; url-misc.el --- Misc Uniform Resource Locator retrieval code
 
-;; Copyright (C) 1996-1999, 2002, 2004-2014 Free Software Foundation,
+;; Copyright (C) 1996-1999, 2002, 2004-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Keywords: comm, data, processes
diff --git a/lisp/url/url-news.el b/lisp/url/url-news.el
index 0ce6d2e..38a7552 100644
--- a/lisp/url/url-news.el
+++ b/lisp/url/url-news.el
@@ -1,6 +1,6 @@
 ;;; url-news.el --- News Uniform Resource Locator retrieval code
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-nfs.el b/lisp/url/url-nfs.el
index 82eb1b3..1f8a409 100644
--- a/lisp/url/url-nfs.el
+++ b/lisp/url/url-nfs.el
@@ -1,6 +1,6 @@
 ;;; url-nfs.el --- NFS URL interface
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-ns.el b/lisp/url/url-ns.el
index 30506d4..88a4054 100644
--- a/lisp/url/url-ns.el
+++ b/lisp/url/url-ns.el
@@ -1,6 +1,6 @@
 ;;; url-ns.el --- Various netscape-ish functions for proxy definitions
 
-;; Copyright (C) 1997-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el
index 0a81129..dbf0c38 100644
--- a/lisp/url/url-parse.el
+++ b/lisp/url/url-parse.el
@@ -1,6 +1,6 @@
 ;;; url-parse.el --- Uniform Resource Locator parser
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-privacy.el b/lisp/url/url-privacy.el
index 5ab0147..77c3f64 100644
--- a/lisp/url/url-privacy.el
+++ b/lisp/url/url-privacy.el
@@ -1,6 +1,6 @@
 ;;; url-privacy.el --- Global history tracking for URL package
 
-;; Copyright (C) 1996-1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-proxy.el b/lisp/url/url-proxy.el
index eee2be7..b292e31 100644
--- a/lisp/url/url-proxy.el
+++ b/lisp/url/url-proxy.el
@@ -1,6 +1,6 @@
 ;;; url-proxy.el --- Proxy server support
 
-;; Copyright (C) 1999, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-queue.el b/lisp/url/url-queue.el
index 87469b9..c667cb9 100644
--- a/lisp/url/url-queue.el
+++ b/lisp/url/url-queue.el
@@ -1,6 +1,6 @@
 ;;; url-queue.el --- Fetching web pages in parallel
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;; Keywords: comm
@@ -133,10 +133,11 @@ The variable `url-queue-timeout' sets a timeout."
 (defun url-queue-start-retrieve (job)
   (setf (url-queue-buffer job)
        (ignore-errors
-         (url-retrieve (url-queue-url job)
-                       #'url-queue-callback-function (list job)
-                       (url-queue-silentp job)
-                       (url-queue-inhibit-cookiesp job)))))
+         (let ((url-request-noninteractive t))
+           (url-retrieve (url-queue-url job)
+                         #'url-queue-callback-function (list job)
+                         (url-queue-silentp job)
+                         (url-queue-inhibit-cookiesp job))))))
 
 (defun url-queue-prune-old-entries ()
   (let (dead-jobs)
diff --git a/lisp/url/url-tramp.el b/lisp/url/url-tramp.el
index 9cc17a3..d0b1a5c 100644
--- a/lisp/url/url-tramp.el
+++ b/lisp/url/url-tramp.el
@@ -1,6 +1,6 @@
 ;;; url-tramp.el --- file-name-handler magic invoking Tramp for some protocols
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, data, processes, hypermedia
diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el
index f7d2d44..13b9774 100644
--- a/lisp/url/url-util.el
+++ b/lisp/url/url-util.el
@@ -1,6 +1,7 @@
 ;;; url-util.el --- Miscellaneous helper routines for URL library
 
-;; Copyright (C) 1996-1999, 2001, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2001, 2004-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Bill Perry <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el
index 62b7b85..7e75277 100644
--- a/lisp/url/url-vars.el
+++ b/lisp/url/url-vars.el
@@ -1,6 +1,7 @@
 ;;; url-vars.el --- Variables for Uniform Resource Locator tool
 
-;; Copyright (C) 1996-1999, 2001, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2001, 2004-2015 Free Software Foundation,
+;; Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
@@ -209,6 +210,9 @@ document."
   "A list of extra headers to send with the next request.
 Should be an assoc list of headers/contents.")
 
+(defvar url-request-noninteractive nil
+  "If non-nil, the request is done in a noninteractive context.")
+
 (defvar url-request-method nil "The method to use for the next request.")
 
 (defvar url-mime-encoding-string (and (fboundp 'zlib-available-p)
diff --git a/lisp/url/url.el b/lisp/url/url.el
index 4594ab6..0956377 100644
--- a/lisp/url/url.el
+++ b/lisp/url/url.el
@@ -1,6 +1,7 @@
 ;;; url.el --- Uniform Resource Locator retrieval tool  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1996-1999, 2001, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2001, 2004-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Bill Perry <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/userlock.el b/lisp/userlock.el
index 7c7b09c..c47bc4c9 100644
--- a/lisp/userlock.el
+++ b/lisp/userlock.el
@@ -1,6 +1,6 @@
 ;;; userlock.el --- handle file access contention between multiple users
 
-;; Copyright (C) 1985-1986, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Richard King
 ;; (according to authors.el)
diff --git a/lisp/vc/add-log.el b/lisp/vc/add-log.el
index cd6fcae..eb7e5bf 100644
--- a/lisp/vc/add-log.el
+++ b/lisp/vc/add-log.el
@@ -1,6 +1,6 @@
 ;;; add-log.el --- change log maintenance commands for Emacs
 
-;; Copyright (C) 1985-1986, 1988, 1993-1994, 1997-1998, 2000-2014 Free
+;; Copyright (C) 1985-1986, 1988, 1993-1994, 1997-1998, 2000-2015 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
diff --git a/lisp/vc/compare-w.el b/lisp/vc/compare-w.el
index 25d4cf7..07c0768 100644
--- a/lisp/vc/compare-w.el
+++ b/lisp/vc/compare-w.el
@@ -1,6 +1,6 @@
 ;;; compare-w.el --- compare text between windows for Emacs
 
-;; Copyright (C) 1986, 1989, 1993, 1997, 2001-2014 Free Software
+;; Copyright (C) 1986, 1989, 1993, 1997, 2001-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -30,6 +30,8 @@
 
 ;;; Code:
 
+(require 'diff-mode)                    ; For diff faces.
+
 (defgroup compare-windows nil
   "Compare text between windows."
   :prefix "compare-"
@@ -128,11 +130,19 @@ out all highlighting later with the command 
`compare-windows-dehighlight'."
   :group 'compare-windows
   :version "22.1")
 
-(defface compare-windows
-  '((t :inherit lazy-highlight))
-  "Face for highlighting of compare-windows difference regions."
+(defface compare-windows-removed
+  '((t :inherit diff-removed))
+  "Face for highlighting of compare-windows removed regions."
   :group 'compare-windows
-  :version "22.1")
+  :version "25.1")
+
+(defface compare-windows-added
+  '((t :inherit diff-added))
+  "Face for highlighting of compare-windows added regions."
+  :group 'compare-windows
+  :version "25.1")
+
+(define-obsolete-face-alias 'compare-windows 'compare-windows-added "25.1")
 
 (defvar compare-windows-overlay1 nil)
 (defvar compare-windows-overlay2 nil)
@@ -140,9 +150,44 @@ out all highlighting later with the command 
`compare-windows-dehighlight'."
 (defvar compare-windows-overlays2 nil)
 (defvar compare-windows-sync-point nil)
 
+(defcustom compare-windows-get-window-function 
'compare-windows-get-recent-window
+  "Function that provides the window to compare with."
+  :type '(choice
+         (function-item :tag "Most recently used window"
+                        compare-windows-get-recent-window)
+         (function-item :tag "Next window"
+                        compare-windows-get-next-window)
+         (function :tag "Your function"))
+  :group 'compare-windows
+  :version "25.0")
+
+(defun compare-windows-get-recent-window ()
+  "Return the most recently used window.
+First try to get the most recently used window on a visible frame,
+then try to get a window on an iconified frame, and finally
+consider all existing frames."
+  (or (get-mru-window 'visible t t)
+      (get-mru-window 0 t t)
+      (get-mru-window t t t)
+      (error "No other window")))
+
+(defun compare-windows-get-next-window ()
+  "Return the window next in the cyclic ordering of windows.
+In the selected frame contains only one window, consider windows
+on all visible frames."
+  (let ((w2 (next-window)))
+    (if (eq w2 (selected-window))
+       (setq w2 (next-window (selected-window) nil 'visible)))
+    (if (eq w2 (selected-window))
+       (error "No other window"))
+    w2))
+
 ;;;###autoload
 (defun compare-windows (ignore-whitespace)
-  "Compare text in current window with text in next window.
+  "Compare text in current window with text in another window.
+The option `compare-windows-get-window-function' defines how
+to get another window.
+
 Compares the text starting at point in each window,
 moving over text in each one as far as they match.
 
@@ -179,11 +224,7 @@ on third call it again advances points to the next 
difference and so on."
                            'compare-windows-sync-regexp
                          compare-windows-sync)))
     (setq p1 (point) b1 (current-buffer))
-    (setq w2 (next-window))
-    (if (eq w2 (selected-window))
-       (setq w2 (next-window (selected-window) nil 'visible)))
-    (if (eq w2 (selected-window))
-       (error "No other window"))
+    (setq w2 (funcall compare-windows-get-window-function))
     (setq p2 (window-point w2)
          b2 (window-buffer w2))
     (setq opoint2 p2)
@@ -212,7 +253,7 @@ on third call it again advances points to the next 
difference and so on."
       ;; optionally skip over it.
       (and skip-func-1
           (save-excursion
-            (let (p1a p2a w1 w2 result1 result2)
+            (let (p1a p2a result1 result2)
               (setq result1 (funcall skip-func-1 opoint1))
               (setq p1a (point))
               (set-buffer b2)
@@ -255,12 +296,15 @@ on third call it again advances points to the next 
difference and so on."
             (recenter (car compare-windows-recenter))
             (with-selected-window w2 (recenter (cadr 
compare-windows-recenter))))
           ;; If points are still not synchronized, then ding
-          (when (and (= p1 opoint1) (= p2 opoint2))
-            ;; Display error message when current points in two windows
-            ;; are unmatched and next matching points can't be found.
-            (compare-windows-dehighlight)
-            (ding)
-            (message "No more matching points"))))))
+          (if (and (= p1 opoint1) (= p2 opoint2))
+             (progn
+               ;; Display error message when current points in two windows
+               ;; are unmatched and next matching points can't be found.
+               (compare-windows-dehighlight)
+               (ding)
+               (message "No more matches with %s" b2))
+           (message "Diff -%s,%s +%s,%s with %s" opoint2 p2 opoint1 p1 b2)))
+      (message "Match -%s,%s +%s,%s with %s" opoint2 p2 opoint1 p1 b2))))
 
 ;; Move forward over whatever might be called whitespace.
 ;; compare-windows-whitespace is a regexp that matches whitespace.
@@ -303,7 +347,7 @@ on third call it again advances points to the next 
difference and so on."
 (defun compare-windows-sync-default-function ()
   (if (not compare-windows-sync-point)
       (let* ((w1 (selected-window))
-             (w2 (next-window w1))
+             (w2 (funcall compare-windows-get-window-function))
              (b2 (window-buffer w2))
              (point-max2 (with-current-buffer b2 (point-max)))
              (op2 (window-point w2))
@@ -360,13 +404,13 @@ on third call it again advances points to the next 
difference and so on."
     (if compare-windows-overlay1
         (move-overlay compare-windows-overlay1 beg1 end1 b1)
       (setq compare-windows-overlay1 (make-overlay beg1 end1 b1))
-      (overlay-put compare-windows-overlay1 'face 'compare-windows)
+      (overlay-put compare-windows-overlay1 'face 'compare-windows-added)
       (overlay-put compare-windows-overlay1 'priority 1000))
     (overlay-put compare-windows-overlay1 'window w1)
     (if compare-windows-overlay2
         (move-overlay compare-windows-overlay2 beg2 end2 b2)
       (setq compare-windows-overlay2 (make-overlay beg2 end2 b2))
-      (overlay-put compare-windows-overlay2 'face 'compare-windows)
+      (overlay-put compare-windows-overlay2 'face 'compare-windows-removed)
       (overlay-put compare-windows-overlay2 'priority 1000))
     (overlay-put compare-windows-overlay2 'window w2)
     (if (not (eq compare-windows-highlight 'persistent))
diff --git a/lisp/vc/cvs-status.el b/lisp/vc/cvs-status.el
index 10cff7b..dc43094 100644
--- a/lisp/vc/cvs-status.el
+++ b/lisp/vc/cvs-status.el
@@ -1,6 +1,6 @@
 ;;; cvs-status.el --- major mode for browsing `cvs status' output -*- coding: 
utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: pcl-cvs cvs status tree vc tools
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index 9afb9f4..a9614e9 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -1,6 +1,6 @@
 ;;; diff-mode.el --- a mode for viewing/editing context diffs -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: convenience patch diff vc
@@ -1817,6 +1817,16 @@ With a prefix argument, try to REVERSE the hunk."
     (diff-hunk-status-msg line-offset (diff-xor reverse switched) t)))
 
 
+(defun diff-kill-applied-hunks ()
+  "Kill all hunks that have already been applied starting at point."
+  (interactive)
+  (while (not (eobp))
+    (pcase-let ((`(,buf ,line-offset ,pos ,src ,_dst ,switched)
+                 (diff-find-source-location nil nil)))
+      (if (and line-offset switched)
+          (diff-hunk-kill)
+        (diff-hunk-next)))))
+
 (defalias 'diff-mouse-goto-source 'diff-goto-source)
 
 (defun diff-goto-source (&optional other-file event)
diff --git a/lisp/vc/diff.el b/lisp/vc/diff.el
index b789b80..062248c 100644
--- a/lisp/vc/diff.el
+++ b/lisp/vc/diff.el
@@ -1,6 +1,6 @@
 ;;; diff.el --- run `diff'  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992, 1994, 1996, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1992, 1994, 1996, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Frank Bresz
diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el
index d21b4cc..d0c0f7b 100644
--- a/lisp/vc/ediff-diff.el
+++ b/lisp/vc/ediff-diff.el
@@ -1,6 +1,6 @@
 ;;; ediff-diff.el --- diff-related utilities
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-help.el b/lisp/vc/ediff-help.el
index 020a1c3..c981d89 100644
--- a/lisp/vc/ediff-help.el
+++ b/lisp/vc/ediff-help.el
@@ -1,6 +1,6 @@
 ;;; ediff-help.el --- Code related to the contents of Ediff help buffers
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-hook.el b/lisp/vc/ediff-hook.el
index c87d52f..8979687 100644
--- a/lisp/vc/ediff-hook.el
+++ b/lisp/vc/ediff-hook.el
@@ -1,6 +1,6 @@
 ;;; ediff-hook.el --- setup for Ediff's menus and autoloads
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-init.el b/lisp/vc/ediff-init.el
index 589ea45..d6b538c 100644
--- a/lisp/vc/ediff-init.el
+++ b/lisp/vc/ediff-init.el
@@ -1,6 +1,6 @@
 ;;; ediff-init.el --- Macros, variables, and defsubsts used by Ediff
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
@@ -24,6 +24,8 @@
 
 ;;; Code:
 
+(require 'cl-lib)
+
 ;; Start compiler pacifier
 (defvar ediff-metajob-name)
 (defvar ediff-meta-buffer)
@@ -118,11 +120,8 @@ It needs to be killed when we quit the session.")
     (?C . ediff-buffer-C)))
 
 ;;; Macros
-(defmacro ediff-odd-p (arg)
-  `(eq (logand ,arg 1) 1))
-
-(defmacro ediff-buffer-live-p (buf)
-  `(and ,buf (get-buffer ,buf) (buffer-name (get-buffer ,buf))))
+(defsubst ediff-buffer-live-p (buf)
+  (and buf (get-buffer buf) (buffer-name (get-buffer buf))))
 
 (defmacro ediff-get-buffer (arg)
   `(cond ((eq ,arg 'A) ediff-buffer-A)
@@ -1456,7 +1455,7 @@ This default should work without changes."
   ;; The value of dif-num is always 1- the one that user sees.
   ;; This is why even face is used when dif-num is odd.
   (ediff-get-symbol-from-alist
-   buf-type (if (ediff-odd-p dif-num)
+   buf-type (if (cl-oddp dif-num)
                ediff-even-diff-face-alist
              ediff-odd-diff-face-alist)
    ))
diff --git a/lisp/vc/ediff-merg.el b/lisp/vc/ediff-merg.el
index 0f7d062..72dfc08 100644
--- a/lisp/vc/ediff-merg.el
+++ b/lisp/vc/ediff-merg.el
@@ -1,6 +1,6 @@
 ;;; ediff-merg.el --- merging utilities
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-mult.el b/lisp/vc/ediff-mult.el
index 56ff13f..c81afce 100644
--- a/lisp/vc/ediff-mult.el
+++ b/lisp/vc/ediff-mult.el
@@ -1,6 +1,6 @@
 ;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff
 
-;; Copyright (C) 1995-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-ptch.el b/lisp/vc/ediff-ptch.el
index bb6ab10..80990fe 100644
--- a/lisp/vc/ediff-ptch.el
+++ b/lisp/vc/ediff-ptch.el
@@ -1,6 +1,6 @@
 ;;; ediff-ptch.el --- Ediff's  patch support
 
-;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el
index 9ca9eff..62a0d9d 100644
--- a/lisp/vc/ediff-util.el
+++ b/lisp/vc/ediff-util.el
@@ -1,6 +1,6 @@
 ;;; ediff-util.el --- the core commands and utilities of ediff
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-vers.el b/lisp/vc/ediff-vers.el
index 83dbf84..5e74587 100644
--- a/lisp/vc/ediff-vers.el
+++ b/lisp/vc/ediff-vers.el
@@ -1,6 +1,6 @@
 ;;; ediff-vers.el --- version control interface to Ediff
 
-;; Copyright (C) 1995-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-wind.el b/lisp/vc/ediff-wind.el
index 48cca4d..c31df82 100644
--- a/lisp/vc/ediff-wind.el
+++ b/lisp/vc/ediff-wind.el
@@ -1,6 +1,6 @@
 ;;; ediff-wind.el --- window manipulation utilities
 
-;; Copyright (C) 1994-1997, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Package: ediff
diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el
index 5418039..837940c 100644
--- a/lisp/vc/ediff.el
+++ b/lisp/vc/ediff.el
@@ -1,6 +1,6 @@
 ;;; ediff.el --- a comprehensive visual interface to diff & patch
 
-;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <address@hidden>
 ;; Created: February 2, 1994
diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el
index 3b03ee1..ae8d275 100644
--- a/lisp/vc/log-edit.el
+++ b/lisp/vc/log-edit.el
@@ -1,6 +1,6 @@
 ;;; log-edit.el --- Major mode for editing CVS commit messages -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: pcl-cvs cvs commit log vc
diff --git a/lisp/vc/log-view.el b/lisp/vc/log-view.el
index 484e40f..98e9357 100644
--- a/lisp/vc/log-view.el
+++ b/lisp/vc/log-view.el
@@ -1,6 +1,6 @@
 ;;; log-view.el --- Major mode for browsing revision log histories -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: tools, vc
diff --git a/lisp/vc/pcvs-defs.el b/lisp/vc/pcvs-defs.el
index b89c4df..61eac52 100644
--- a/lisp/vc/pcvs-defs.el
+++ b/lisp/vc/pcvs-defs.el
@@ -1,6 +1,6 @@
 ;;; pcvs-defs.el --- variable definitions for PCL-CVS
 
-;; Copyright (C) 1991-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: pcl-cvs
diff --git a/lisp/vc/pcvs-info.el b/lisp/vc/pcvs-info.el
index 202f7dd..4af1e73 100644
--- a/lisp/vc/pcvs-info.el
+++ b/lisp/vc/pcvs-info.el
@@ -1,6 +1,6 @@
 ;;; pcvs-info.el --- internal representation of a fileinfo entry
 
-;; Copyright (C) 1991-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: pcl-cvs
diff --git a/lisp/vc/pcvs-parse.el b/lisp/vc/pcvs-parse.el
index 366e90d..5dcb4c5 100644
--- a/lisp/vc/pcvs-parse.el
+++ b/lisp/vc/pcvs-parse.el
@@ -1,6 +1,6 @@
 ;;; pcvs-parse.el --- the CVS output parser
 
-;; Copyright (C) 1991-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: pcl-cvs
diff --git a/lisp/vc/pcvs-util.el b/lisp/vc/pcvs-util.el
index 97ab7df..d3cc3c5 100644
--- a/lisp/vc/pcvs-util.el
+++ b/lisp/vc/pcvs-util.el
@@ -1,6 +1,6 @@
 ;;; pcvs-util.el --- utility functions for PCL-CVS  -*- byte-compile-dynamic: 
t -*-
 
-;; Copyright (C) 1991-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: pcl-cvs
diff --git a/lisp/vc/pcvs.el b/lisp/vc/pcvs.el
index e0f5144..6d8e537 100644
--- a/lisp/vc/pcvs.el
+++ b/lisp/vc/pcvs.el
@@ -1,6 +1,6 @@
 ;;; pcvs.el --- a front-end to CVS  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1991-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2015 Free Software Foundation, Inc.
 
 ;; Author: (The PCL-CVS Trust) address@hidden
 ;;     (Per Cederqvist) address@hidden
diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el
index 7712815..9f9224c 100644
--- a/lisp/vc/smerge-mode.el
+++ b/lisp/vc/smerge-mode.el
@@ -1,6 +1,6 @@
 ;;; smerge-mode.el --- Minor mode to resolve diff3 conflicts -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: vc, tools, revision control, merge, diff3, cvs, conflict
@@ -1132,6 +1132,19 @@ repeating the command will highlight other two parts."
                         (unless smerge-use-changed-face
                           '((smerge . refine) (face . 
smerge-refined-added))))))
 
+(defun smerge-swap ()
+  "Swap the \"Mine\" and the \"Other\" chunks.
+Can be used before things like `smerge-keep-all' or `smerge-resolve' where the
+ordering can have some subtle influence on the result, such as preferring the
+spacing of the \"Other\" chunk."
+  (interactive)
+  (smerge-match-conflict)
+  (goto-char (match-beginning 3))
+  (let ((txt3 (delete-and-extract-region (point) (match-end 3))))
+    (insert (delete-and-extract-region (match-beginning 1) (match-end 1)))
+    (goto-char (match-beginning 1))
+    (insert txt3)))
+
 (defun smerge-diff (n1 n2)
   (smerge-match-conflict)
   (smerge-ensure-match n1)
diff --git a/lisp/vc/vc-annotate.el b/lisp/vc/vc-annotate.el
index e270ec4..8bcea5f 100644
--- a/lisp/vc/vc-annotate.el
+++ b/lisp/vc/vc-annotate.el
@@ -1,6 +1,6 @@
 ;;; vc-annotate.el --- VC Annotate Support  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1997-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author:     Martin Lorentzson  <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index a093bcb..96d6d1d 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -1,6 +1,6 @@
 ;;; vc-bzr.el --- VC backend for the bzr revision control system  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <address@hidden>
 ;;        Riccardo Murri <address@hidden>
@@ -493,12 +493,20 @@ in the branch repository (or whose status not be 
determined)."
     (add-hook 'after-save-hook 'vc-bzr-resolve-when-done nil t)
     (message "There are unresolved conflicts in this file")))
 
-(defun vc-bzr-workfile-unchanged-p (file)
-  (eq 'unchanged (car (vc-bzr-status file))))
+(defun vc-bzr-version-dirstate (dir)
+  "Try to return as a string the bzr revision ID of directory DIR.
+This uses the dirstate file's parent revision entry.
+Returns nil if unable to find this information."
+  (let ((file (expand-file-name ".bzr/checkout/dirstate" dir)))
+    (when (file-readable-p file)
+      (with-temp-buffer
+        (insert-file-contents file)
+        (and (looking-at "#bazaar dirstate flat format 3")
+             (forward-line 3)
+             (looking-at "[0-9]+\0\\([^\0\n]+\\)\0")
+             (match-string 1))))))
 
 (defun vc-bzr-working-revision (file)
-  ;; Together with the code in vc-state-heuristic, this makes it possible
-  ;; to get the initial VC state of a Bzr file even if Bzr is not installed.
   (let* ((rootdir (vc-bzr-root file))
          (branch-format-file (expand-file-name vc-bzr-admin-branch-format-file
                                                rootdir))
@@ -543,8 +551,8 @@ in the branch repository (or whose status not be 
determined)."
                         ;; files exist.
                         (and (file-exists-p branch-format-file)
                              (file-exists-p lastrev-file)
-                             (equal (emacs-bzr-version-dirstate l-c-parent-dir)
-                                    (emacs-bzr-version-dirstate rootdir))))))
+                             (equal (vc-bzr-version-dirstate l-c-parent-dir)
+                                    (vc-bzr-version-dirstate rootdir))))))
                 t)))
         (with-temp-buffer
           (insert-file-contents branch-format-file)
@@ -580,10 +588,6 @@ in the branch repository (or whose status not be 
determined)."
   "Create a new Bzr repository."
   (vc-bzr-command "init" nil 0 nil))
 
-(defun vc-bzr-init-revision (&optional _file)
-  "Always return nil, as Bzr cannot register explicit versions."
-  nil)
-
 (defun vc-bzr-previous-revision (_file rev)
   (if (string-match "\\`[0-9]+\\'" rev)
       (number-to-string (1- (string-to-number rev)))
@@ -594,11 +598,8 @@ in the branch repository (or whose status not be 
determined)."
       (number-to-string (1+ (string-to-number rev)))
     (error "Don't know how to compute the next revision of %s" rev)))
 
-(defun vc-bzr-register (files &optional rev _comment)
-  "Register FILES under bzr.
-Signal an error unless REV is nil.
-COMMENT is ignored."
-  (if rev (error "Can't register explicit revision with bzr"))
+(defun vc-bzr-register (files &optional _comment)
+  "Register FILES under bzr. COMMENT is ignored."
   (vc-bzr-command "add" nil 0 files))
 
 ;; Could run `bzr status' in the directory and see if it succeeds, but
@@ -608,18 +609,6 @@ COMMENT is ignored."
 The criterion is that there is a `.bzr' directory in the same
 or a superior directory.")
 
-(defun vc-bzr-could-register (file)
-  "Return non-nil if FILE could be registered under bzr."
-  (and (vc-bzr-responsible-p file)      ; shortcut
-       (condition-case ()
-           (with-temp-buffer
-             (vc-bzr-command "add" t 0 file "--dry-run")
-             ;; The command succeeds with no output if file is
-             ;; registered (in bzr 0.8).
-             (goto-char (point-min))
-             (looking-at "added "))
-         (error))))
-
 (defun vc-bzr-unregister (file)
   "Unregister FILE from bzr."
   (vc-bzr-command "remove" nil 0 file "--keep"))
@@ -634,10 +623,8 @@ or a superior directory.")
                                            "" (replace-regexp-in-string
                                                "\n[ \t]?" " " str)))))
 
-(defun vc-bzr-checkin (files rev comment)
-  "Check FILES in to bzr with log message COMMENT.
-REV non-nil gets an error."
-  (if rev (error "Can't check in a specific revision with bzr"))
+(defun vc-bzr-checkin (files comment)
+  "Check FILES in to bzr with log message COMMENT."
   (apply 'vc-bzr-command "commit" nil 0 files
          (cons "-m" (log-edit-extract-headers
                      `(("Author" . ,(vc-bzr--sanitize-header "--author"))
@@ -657,7 +644,7 @@ REV non-nil gets an error."
   (expand-file-name ".bzrignore"
                    (vc-bzr-root file)))
 
-(defun vc-bzr-checkout (_file &optional _editable rev)
+(defun vc-bzr-checkout (_file &optional rev)
   (if rev (error "Operation not supported")
     ;; Else, there's nothing to do.
     nil))
@@ -722,7 +709,7 @@ If LIMIT is non-nil, show no more than this many entries."
   (with-current-buffer buffer
     (apply 'vc-bzr-command "log" buffer 'async files
           (append
-           (when shortlog '("--line"))
+           (if shortlog '("--line") '("--long"))
            ;; The extra complications here when start-revision and limit
            ;; are set are due to bzr log's --forward argument, which
            ;; could be enabled via an alias in bazaar.conf.
@@ -757,7 +744,7 @@ If LIMIT is non-nil, show no more than this many entries."
 (defun vc-bzr-expanded-log-entry (revision)
   (with-temp-buffer
     (apply 'vc-bzr-command "log" t nil nil
-          (list (format "-r%s" revision)))
+          (list "--long" (format "-r%s" revision)))
     (goto-char (point-min))
     (when (looking-at "^-+\n")
       ;; Indent the expanded log entry.
@@ -793,7 +780,7 @@ If LIMIT is non-nil, show no more than this many entries."
 
 (autoload 'vc-switches "vc")
 
-(defun vc-bzr-diff (files &optional rev1 rev2 buffer)
+(defun vc-bzr-diff (files &optional rev1 rev2 buffer async)
   "VC bzr backend for diff."
   (let* ((switches (vc-switches 'bzr 'diff))
          (args
@@ -809,7 +796,7 @@ If LIMIT is non-nil, show no more than this many entries."
                                 (or rev2 "")))))))
     ;; `bzr diff' exits with code 1 if diff is non-empty.
     (apply #'vc-bzr-command "diff" (or buffer "*vc-diff*")
-           (if vc-disable-async-diff 1 'async) files
+           (if async 1 'async) files
            args)))
 
 
@@ -983,7 +970,7 @@ stream.  Standard error output is discarded."
               (push (list new-name 'edited
                           (vc-bzr-create-extra-fileinfo old-name)) result)))
            ;; do nothing for non existent files
-           ((memq translated '(not-found ignored)))
+           ((eq translated 'not-found))
            (t
             (push (list (file-relative-name
                          (buffer-substring-no-properties
@@ -993,9 +980,9 @@ stream.  Standard error output is discarded."
         (forward-line))
       (funcall update-function result)))
 
-(defun vc-bzr-dir-status (dir update-function)
+(defun vc-bzr-dir-status-files (dir files update-function)
   "Return a list of conses (file . state) for DIR."
-  (vc-bzr-command "status" (current-buffer) 'async dir "-v" "-S")
+  (apply 'vc-bzr-command "status" (current-buffer) 'async dir "-v" "-S" files)
   (vc-run-delayed
    (vc-bzr-after-dir-status update-function
                             ;; "bzr status" results are relative to
@@ -1007,13 +994,6 @@ stream.  Standard error output is discarded."
                             ;; frob the results accordingly.
                             (file-relative-name dir (vc-bzr-root dir)))))
 
-(defun vc-bzr-dir-status-files (dir files _default-state update-function)
-  "Return a list of conses (file . state) for DIR."
-  (apply 'vc-bzr-command "status" (current-buffer) 'async dir "-v" "-S" files)
-  (vc-run-delayed
-   (vc-bzr-after-dir-status update-function
-                            (file-relative-name dir (vc-bzr-root dir)))))
-
 (defvar vc-bzr-shelve-map
   (let ((map (make-sparse-keymap)))
     ;; Turn off vc-dir marking
diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el
index ad5559b..d803c16 100644
--- a/lisp/vc/vc-cvs.el
+++ b/lisp/vc/vc-cvs.el
@@ -1,6 +1,6 @@
 ;;; vc-cvs.el --- non-resident support for CVS version-control  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1995, 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998-2015 Free Software Foundation, Inc.
 
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  Andre Spiegel <address@hidden>
@@ -48,9 +48,9 @@
                     ;; If the file is not writable (despite CVSREAD being
                     ;; undefined), this is probably because the file is being
                     ;; "watched" by other developers.
-                    ;; (If vc-mistrust-permissions was t, we actually shouldn't
-                    ;; trust this, but there is no other way to learn this from
-                    ;; CVS at the moment (version 1.9).)
+                    ;; (We actually shouldn't trust this, but there is
+                    ;; no other way to learn this from CVS at the
+                    ;; moment (version 1.9).)
                     (string-match "r-..-..-." (nth 8 attrib)))
                'announce
              'implicit))))))
@@ -110,7 +110,7 @@ This is only meaningful if you don't use the implicit 
checkout model
   :version "21.1"
   :group 'vc-cvs)
 
-(defcustom vc-cvs-stay-local 'only-file
+(defcustom vc-stay-local 'only-file
   "Non-nil means use local operations when possible for remote repositories.
 This avoids slow queries over the network and instead uses heuristics
 and past information to determine the current status of a file.
@@ -222,7 +222,7 @@ See also variable `vc-cvs-sticky-date-format-string'."
 
 (defun vc-cvs-state (file)
   "CVS-specific version of `vc-state'."
-  (if (vc-stay-local-p file 'CVS)
+  (if (vc-cvs-stay-local-p file)
       (let ((state (vc-file-getprop file 'vc-state)))
         ;; If we should stay local, use the heuristic but only if
         ;; we don't have a more precise state already available.
@@ -282,7 +282,7 @@ committed and support display of sticky tags."
 
 (autoload 'vc-switches "vc")
 
-(defun vc-cvs-register (files &optional _rev comment)
+(defun vc-cvs-register (files &optional comment)
   "Register FILES into the CVS version-control system.
 COMMENT can be used to provide an initial description of FILES.
 Passes either `vc-cvs-register-switches' or `vc-register-switches'
@@ -321,20 +321,38 @@ its parents."
                   (directory-file-name dir))))
     (eq dir t)))
 
-(defun vc-cvs-checkin (files rev comment)
+;; vc-cvs-checkin used to take a 'rev' second argument that allowed
+;; checking in onto a specified branch tip rather than the current
+;; default branch, but nothing in the entire rest of VC exercised
+;; this code.  Removing it simplifies the backend interface for all
+;; modes.
+;;
+;; Here's the setup code preserved in amber, in case the logic needs
+;; to be broken out into a method someday; (if rev (concat "-r" rev))
+;; used to be part of the switches passed to vc-cvs-command.
+;;
+;;  (unless (or (not rev) (vc-cvs-valid-revision-number-p rev))
+;;    (if (not (vc-cvs-valid-symbolic-tag-name-p rev))
+;;     (error "%s is not a valid symbolic tag name" rev)
+;;      ;; If the input revision is a valid symbolic tag name, we create it
+;;      ;; as a branch, commit and switch to it.
+;;      (apply 'vc-cvs-command nil 0 files "tag" "-b" (list rev))
+;;      (apply 'vc-cvs-command nil 0 files "update" "-r" (list rev))
+;;      (mapc (lambda (file) (vc-file-setprop file 'vc-cvs-sticky-tag rev))
+;;         files)))
+;;
+;; The following postamble cleaned up after the branch change:
+;;
+;;    ;; if this was an explicit check-in (does not include creation of
+;;    ;; a branch), remove the sticky tag.
+;;    (if (and rev (not (vc-cvs-valid-symbolic-tag-name-p rev)))
+;;     (vc-cvs-command nil 0 files "update" "-A"))))
+;;       files)))
+;;
+(defun vc-cvs-checkin (files comment)
   "CVS-specific version of `vc-backend-checkin'."
-  (unless (or (not rev) (vc-cvs-valid-revision-number-p rev))
-    (if (not (vc-cvs-valid-symbolic-tag-name-p rev))
-       (error "%s is not a valid symbolic tag name" rev)
-      ;; If the input revision is a valid symbolic tag name, we create it
-      ;; as a branch, commit and switch to it.
-      (apply 'vc-cvs-command nil 0 files "tag" "-b" (list rev))
-      (apply 'vc-cvs-command nil 0 files "update" "-r" (list rev))
-      (mapc (lambda (file) (vc-file-setprop file 'vc-cvs-sticky-tag rev))
-           files)))
   (let ((status (apply 'vc-cvs-command nil 1 files
-                      "ci" (if rev (concat "-r" rev))
-                      (concat "-m" comment)
+                      "ci" (concat "-m" comment)
                       (vc-switches 'CVS 'checkin))))
     (set-buffer "*vc*")
     (goto-char (point-min))
@@ -365,12 +383,7 @@ its parents."
     ;; tell it from the permissions of the file (see
     ;; vc-cvs-checkout-model).
     (mapc (lambda (file) (vc-file-setprop file 'vc-checkout-model nil))
-         files)
-
-    ;; if this was an explicit check-in (does not include creation of
-    ;; a branch), remove the sticky tag.
-    (if (and rev (not (vc-cvs-valid-symbolic-tag-name-p rev)))
-       (vc-cvs-command nil 0 files "update" "-A"))))
+         files)))
 
 (defun vc-cvs-find-revision (file rev buffer)
   (apply 'vc-cvs-command
@@ -382,9 +395,8 @@ its parents."
         "-p"
         (vc-switches 'CVS 'checkout)))
 
-(defun vc-cvs-checkout (file &optional editable rev)
+(defun vc-cvs-checkout (file &optional rev)
   "Checkout a revision of FILE into the working area.
-EDITABLE non-nil means that the file should be writable.
 REV is the revision to check out."
   (message "Checking out %s..." file)
   ;; Change buffers to get local value of vc-checkout-switches.
@@ -392,7 +404,7 @@ REV is the revision to check out."
     (if (and (file-exists-p file) (not rev))
         ;; If no revision was specified, just make the file writable
         ;; if necessary (using `cvs-edit' if requested).
-        (and editable (not (eq (vc-cvs-checkout-model (list file)) 'implicit))
+        (and (not (eq (vc-cvs-checkout-model (list file)) 'implicit))
              (if vc-cvs-use-edit
                  (vc-cvs-command nil 0 file "edit")
                (set-file-modes file (logior (file-modes file) 128))
@@ -400,7 +412,7 @@ REV is the revision to check out."
       ;; Check out a particular revision (or recreate the file).
       (vc-file-setprop file 'vc-working-revision nil)
       (apply 'vc-cvs-command nil 0 file
-             (and editable "-w")
+             "-w"
              "update"
              (when rev
                (unless (eq rev t)
@@ -428,6 +440,35 @@ REV is the revision to check out."
       ;; Make the file read-only by switching off all w-bits
       (set-file-modes file (logand (file-modes file) 3950)))))
 
+(defun vc-cvs-merge-file (file)
+  "Accept a file merge request, prompting for revisions."
+  (let* ((first-revision
+        (vc-read-revision
+         (concat "Merge " file
+                 " from branch or revision "
+                 "(default news on current branch): ")
+         (list file)
+         'CVS))
+        second-revision
+        status)
+    (cond
+     ((string= first-revision "")
+      (setq status (vc-cvs-merge-news file)))
+     (t
+      (if (not (vc-branch-p first-revision))
+         (setq second-revision
+               (vc-read-revision
+                "Second revision: "
+                (list file) 'CVS nil
+                (concat (vc-branch-part first-revision) ".")))
+       ;; We want to merge an entire branch.  Set revisions
+       ;; accordingly, so that vc-cvs-merge understands us.
+       (setq second-revision first-revision)
+       ;; first-revision must be the starting point of the branch
+       (setq first-revision (vc-branch-part first-revision)))
+      (setq status (vc-cvs-merge file first-revision second-revision))))
+    status))
+
 (defun vc-cvs-merge (file first-revision &optional second-revision)
   "Merge changes into current working copy of FILE.
 The changes are between FIRST-REVISION and SECOND-REVISION."
@@ -515,7 +556,7 @@ Remaining arguments are ignored."
   ;; It's just the catenation of the individual logs.
   (vc-cvs-command
    buffer
-   (if (vc-stay-local-p files 'CVS) 'async 0)
+   (if (vc-cvs-stay-local-p files) 'async 0)
    files "log")
   (with-current-buffer buffer
     (vc-run-delayed (vc-rcs-print-log-cleanup)))
@@ -528,11 +569,10 @@ Remaining arguments are ignored."
 (autoload 'vc-version-backup-file "vc")
 (declare-function vc-coding-system-for-diff "vc" (file))
 
-(defun vc-cvs-diff (files &optional oldvers newvers buffer)
+(defun vc-cvs-diff (files &optional oldvers newvers buffer async)
   "Get a difference report using CVS between two revisions of FILE."
   (let* (process-file-side-effects
-        (async (and (not vc-disable-async-diff)
-                    (vc-stay-local-p files 'CVS)))
+        (async (and async (vc-cvs-stay-local-p files)))
         (invoke-cvs-diff-list nil)
         status)
     ;; Look through the file list and see if any files have backups
@@ -584,7 +624,7 @@ Remaining arguments are ignored."
   "Execute \"cvs annotate\" on FILE, inserting the contents in BUFFER.
 Optional arg REVISION is a revision to annotate from."
   (vc-cvs-command buffer
-                  (if (vc-stay-local-p file 'CVS)
+                  (if (vc-cvs-stay-local-p file)
                      'async 0)
                   file "annotate"
                   (if revision (concat "-r" revision)))
@@ -721,7 +761,7 @@ If UPDATE is non-nil, then update (resynch) any affected 
buffers."
 
 (defun vc-cvs-make-version-backups-p (file)
   "Return non-nil if version backups should be made for FILE."
-  (vc-stay-local-p file 'CVS))
+  (vc-cvs-stay-local-p file))
 
 (defun vc-cvs-check-headers ()
   "Check if the current file has any headers in it."
@@ -745,8 +785,34 @@ and that it passes `vc-cvs-global-switches' to it before 
FLAGS."
            (append vc-cvs-global-switches
                    flags))))
 
-(defun vc-cvs-stay-local-p (file)  ;Back-compatibility.
-  (vc-stay-local-p file 'CVS))
+(defun vc-cvs-stay-local-p (file)
+  "Return non-nil if VC should stay local when handling FILE.
+If FILE is a list of files, return non-nil if any of them
+individually should stay local."
+  (if (listp file)
+      (delq nil (mapcar (lambda (arg) (vc-cvs-stay-local-p arg)) file))
+    (let* ((sym (vc-make-backend-sym 'CVS 'stay-local))
+          (stay-local (if (boundp sym) (symbol-value sym) vc-stay-local)))
+      (if (symbolp stay-local) stay-local
+       (let ((dirname (if (file-directory-p file)
+                          (directory-file-name file)
+                        (file-name-directory file))))
+         (eq 'yes
+             (or (vc-file-getprop dirname 'vc-cvs-stay-local-p)
+                 (vc-file-setprop
+                  dirname 'vc-cvs-stay-local-p
+                  (let ((hostname (vc-cvs-repository-hostname dirname)))
+                    (if (not hostname)
+                        'no
+                      (let ((default t))
+                        (if (eq (car-safe stay-local) 'except)
+                            (setq default nil stay-local (cdr stay-local)))
+                        (when (consp stay-local)
+                          (setq stay-local
+                                (mapconcat 'identity stay-local "\\|")))
+                        (if (if (string-match stay-local hostname)
+                                default (not default))
+                            'yes 'no))))))))))))
 
 (defun vc-cvs-repository-hostname (dirname)
   "Hostname of the CVS server associated to workarea DIRNAME."
@@ -1003,13 +1069,14 @@ state."
     (if basedir result
       (funcall update-function result))))
 
-(defun vc-cvs-dir-status (dir update-function)
-  "Create a list of conses (file . state) for DIR."
-  ;; FIXME check all files in DIR instead?
-  (let ((local (vc-stay-local-p dir 'CVS)))
-    (if (and local (not (eq local 'only-file)))
+(defun vc-cvs-dir-status-files (dir files update-function)
+  "Create a list of conses (file . state) for FILES in DIR.
+Query all files in DIR if files is nil."
+  (let ((local (vc-cvs-stay-local-p dir)))
+    (if (and (not files) local (not (eq local 'only-file)))
        (vc-cvs-dir-status-heuristic dir update-function)
-      (vc-cvs-command (current-buffer) 'async dir "-f" "status")
+      (if (not files) (setq files (vc-expand-dirs (list dir) 'CVS)))
+      (vc-cvs-command (current-buffer) 'async dir "-f" "status" files)
       ;; Alternative implementation: use the "update" command instead of
       ;; the "status" command.
       ;; (vc-cvs-command (current-buffer) 'async
@@ -1018,12 +1085,6 @@ state."
       (vc-run-delayed
        (vc-cvs-after-dir-status update-function)))))
 
-(defun vc-cvs-dir-status-files (dir files _default-state update-function)
-  "Create a list of conses (file . state) for DIR."
-  (apply 'vc-cvs-command (current-buffer) 'async dir "-f" "status" files)
-  (vc-run-delayed
-   (vc-cvs-after-dir-status update-function)))
-
 (defun vc-cvs-file-to-string (file)
   "Read the content of FILE and return it as a string."
   (condition-case nil
diff --git a/lisp/vc/vc-dav.el b/lisp/vc/vc-dav.el
index 9b67d74c..3326f29 100644
--- a/lisp/vc/vc-dav.el
+++ b/lisp/vc/vc-dav.el
@@ -1,6 +1,6 @@
 ;;; vc-dav.el --- vc.el support for WebDAV
 
-;; Copyright (C) 2001, 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <address@hidden>
 ;; Maintainer: Bill Perry <address@hidden>
@@ -77,19 +77,17 @@ See `vc-checkout-model' for a list of possible values."
   "Return the current workfile version of URL."
   "Unknown")
 
-(defun vc-dav-register (url &optional rev comment)
+(defun vc-dav-register (url &optional _comment)
   "Register URL in the DAV backend."
   ;; Do we need to do anything here?  FIXME?
   )
 
-(defun vc-dav-checkin (url rev comment)
-  "Commit changes in URL to WebDAV.
-If REV is non-nil, that should become the new revision number.
-COMMENT is used as a check-in comment."
+(defun vc-dav-checkin (url comment)
+  "Commit changes in URL to WebDAV. COMMENT is used as a check-in comment."
   ;; This should PUT the resource and release any locks that we hold.
   )
 
-(defun vc-dav-checkout (url &optional editable rev destfile)
+(defun vc-dav-checkout (url &optional rev destfile)
   "Check out revision REV of URL into the working area.
 
 If EDITABLE is non-nil URL should be writable by the user and if
@@ -119,7 +117,7 @@ only needs to update the status of URL within the backend.
   "Insert the revision log of URL into the *vc* buffer."
   )
 
-(defun vc-dav-diff (url &optional rev1 rev2)
+(defun vc-dav-diff (url &optional rev1 rev2 buffer async)
   "Insert the diff for URL into the *vc-diff* buffer.
 If REV1 and REV2 are non-nil report differences from REV1 to REV2.
 If REV1 is nil, use the current workfile version as the older version.
@@ -135,10 +133,6 @@ It should return a status of either 0 (no differences 
found), or
 
 
 ;;; Optional functions
-;; Should be faster than vc-dav-state - but how?
-(defun vc-dav-state-heuristic (url)
-  "Estimate the version control state of URL at visiting time."
-  (vc-dav-state url))
 
 ;; This should use url-dav-get-properties with a depth of `1' to get
 ;; all the properties.
@@ -146,27 +140,13 @@ It should return a status of either 0 (no differences 
found), or
   "find the version control state of all files in DIR in a fast way."
   )
 
-(defun vc-dav-workfile-unchanged-p (url)
-  "Return non-nil if URL is unchanged from its current workfile version."
-  ;; Probably impossible with webdav
-  )
-
 (defun vc-dav-responsible-p (url)
   "Return non-nil if DAV considers itself `responsible' for URL."
   ;; Check for DAV support on the web server.
   t)
 
-(defun vc-dav-could-register (url)
-  "Return non-nil if URL could be registered under this backend."
-  ;; Check for DAV support on the web server.
-  t)
-
 ;;; Unimplemented functions
 ;;
-;; vc-dav-latest-on-branch-p(URL)
-;;    Return non-nil if the current workfile version of FILE is the
-;;    latest on its branch.  There are no branches in webdav yet.
-;;
 ;; vc-dav-mode-line-string(url)
 ;;    Return a dav-specific mode line string for URL. Are there any
 ;;    specific states that we want exposed?
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index a26287a..e050c94 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -1,6 +1,6 @@
 ;;; vc-dir.el --- Directory status display under VC  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author:   Dan Nicolaescu <address@hidden>
 ;; Keywords: vc tools
@@ -169,6 +169,9 @@ See `run-hooks'."
     (define-key map [ise]
       '(menu-item "Isearch Files..." vc-dir-isearch
                  :help "Incremental search a string in the marked files"))
+    (define-key map [display]
+      '(menu-item "Display in Other Window" vc-dir-display-file
+                 :help "Display the file on the current line, in another 
window"))
     (define-key map [open-other]
       '(menu-item "Open in Other Window" vc-dir-find-file-other-window
                  :help "Find the file on the current line, in another window"))
@@ -273,6 +276,7 @@ See `run-hooks'."
     (define-key map "e" 'vc-dir-find-file) ; dired-mode compatibility
     (define-key map "\C-m" 'vc-dir-find-file)
     (define-key map "o" 'vc-dir-find-file-other-window)
+    (define-key map "\C-o" 'vc-dir-display-file)
     (define-key map "\C-c\C-c" 'vc-dir-kill-dir-status-process)
     (define-key map [down-mouse-3] 'vc-dir-menu)
     (define-key map [mouse-2] 'vc-dir-toggle-mark)
@@ -755,6 +759,13 @@ that share the same state."
   (if event (posn-set-point (event-end event)))
   (find-file-other-window (vc-dir-current-file)))
 
+(defun vc-dir-display-file (&optional event)
+  "Display the file on the current line, in another window."
+  (interactive (list last-nonmenu-event))
+  (if event (posn-set-point (event-end event)))
+  (display-buffer (find-file-noselect (vc-dir-current-file))
+                 t))
+
 (defun vc-dir-isearch ()
   "Search for a string through all marked buffers using Isearch."
   (interactive)
@@ -1014,7 +1025,7 @@ specific headers."
    (vc-call-backend backend 'dir-extra-headers dir)
    "\n"))
 
-(defun vc-dir-refresh-files (files default-state)
+(defun vc-dir-refresh-files (files)
   "Refresh some files in the *VC-dir* buffer."
   (let ((def-dir default-directory)
        (backend vc-dir-backend))
@@ -1032,7 +1043,7 @@ specific headers."
         (setq default-directory def-dir)
         (erase-buffer)
         (vc-call-backend
-         backend 'dir-status-files def-dir files default-state
+         backend 'dir-status-files def-dir files
          (lambda (entries &optional more-to-come)
            ;; ENTRIES is a list of (FILE VC_STATE EXTRA) items.
            ;; If MORE-TO-COME is true, then more updates will come from
@@ -1097,7 +1108,7 @@ Throw an error if another update process is in progress."
           (setq default-directory def-dir)
           (erase-buffer)
           (vc-call-backend
-           backend 'dir-status def-dir
+           backend 'dir-status-files def-dir nil
            (lambda (entries &optional more-to-come)
              ;; ENTRIES is a list of (FILE VC_STATE EXTRA) items.
              ;; If MORE-TO-COME is true, then more updates will come from
@@ -1110,8 +1121,7 @@ Throw an error if another update process is in progress."
                          vc-ewoc 'vc-dir-fileinfo->needs-update)))
                    (if remaining
                        (vc-dir-refresh-files
-                        (mapcar 'vc-dir-fileinfo->name remaining)
-                        'up-to-date)
+                        (mapcar 'vc-dir-fileinfo->name remaining))
                      (setq mode-line-process nil))))))))))))
 
 (defun vc-dir-show-fileentry (file)
@@ -1231,7 +1241,7 @@ These are the commands available for use in the file 
status buffer:
     ;; Otherwise if you do C-x v d -> C-x C-f -> C-c v d
     ;; you may get a new *vc-dir* buffer, different from the original
     (file-truename (read-directory-name "VC status for directory: "
-                                       default-directory default-directory t
+                                       (vc-root-dir) nil t
                                        nil))
     (if current-prefix-arg
        (intern
diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el
index d2125d5..4f8ec27 100644
--- a/lisp/vc/vc-dispatcher.el
+++ b/lisp/vc/vc-dispatcher.el
@@ -1,6 +1,6 @@
 ;;; vc-dispatcher.el -- generic command-dispatcher facility.  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author:     FSF (see below for full credits)
 ;; Maintainer: Eric S. Raymond <address@hidden>
@@ -702,7 +702,7 @@ the buffer contents as a comment."
     ;; Now make sure we see the expanded headers
     (when log-fileset
       (mapc
-       (lambda (file) (vc-resynch-buffer file vc-keep-workfiles t))
+       (lambda (file) (vc-resynch-buffer file t t))
        log-fileset))
     (when (vc-dispatcher-browsing)
       (vc-dir-move-to-goal-column))
diff --git a/lisp/vc/vc-filewise.el b/lisp/vc/vc-filewise.el
new file mode 100644
index 0000000..254d126
--- /dev/null
+++ b/lisp/vc/vc-filewise.el
@@ -0,0 +1,84 @@
+;;; vc-filewise.el --- common functions for file-oriented back ends.
+
+;; Copyright (C) 1992-1996, 1998-2015 Free Software Foundation, Inc.
+
+;; Author:     FSF (see vc.el for full credits)
+;; Maintainer: Andre Spiegel <address@hidden>
+;; Package: vc
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Common functions for file-oriented back ends - SCCS, RCS, SRC, CVS
+;;
+;; The main purpose of this file is so none of this code has to live
+;; in the always-resident vc-hooks.  A secondary purpose is to remove
+;; code specific to this class of back ends from vc.el.
+
+;;; Code:
+
+(eval-when-compile (require 'vc))
+
+(defun vc-master-name (file)
+  "Return the master name of FILE.
+If the file is not registered, or the master name is not known, return nil."
+  (or (vc-file-getprop file 'vc-name)
+      ;; force computation of the property by calling
+      ;; vc-BACKEND-registered explicitly
+      (let ((backend (vc-backend file)))
+       (if (and backend
+                (vc-filewise-registered backend file))
+           (vc-file-getprop file 'vc-name)))))
+
+(defun vc-rename-master (oldmaster newfile templates)
+  "Rename OLDMASTER to be the master file for NEWFILE based on TEMPLATES."
+  (let* ((dir (file-name-directory (expand-file-name oldmaster)))
+        (newdir (or (file-name-directory newfile) ""))
+        (newbase (file-name-nondirectory newfile))
+        (masters
+         ;; List of potential master files for `newfile'
+         (mapcar
+          (lambda (s) (vc-possible-master s newdir newbase))
+          templates)))
+    (when (or (file-symlink-p oldmaster)
+             (file-symlink-p (file-name-directory oldmaster)))
+      (error "This is unsafe in the presence of symbolic links"))
+    (rename-file
+     oldmaster
+     (catch 'found
+       ;; If possible, keep the master file in the same directory.
+       (dolist (f masters)
+        (when (and f (string= (file-name-directory (expand-file-name f)) dir))
+          (throw 'found f)))
+       ;; If not, just use the first possible place.
+       (dolist (f masters)
+        (and f (or (not (setq dir (file-name-directory f)))
+                   (file-directory-p dir))
+             (throw 'found f)))
+       (error "New file lacks a version control directory")))))
+
+(defun vc-filewise-registered (backend file)
+  "Check if FILE is registered in BACKEND using vc-BACKEND-master-templates."
+  (let ((sym (vc-make-backend-sym backend 'master-templates)))
+    (unless (get backend 'vc-templates-grabbed)
+      (put backend 'vc-templates-grabbed t))
+    (let ((result (vc-check-master-templates file (symbol-value sym))))
+      (if (stringp result)
+         (vc-file-setprop file 'vc-name result)
+       nil))))                         ; Not registered
+
+(provide 'vc-filewise)
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index be0211c..a31c121 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -1,6 +1,6 @@
 ;;; vc-git.el --- VC backend for the git version control system -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Alexandre Julliard <address@hidden>
 ;; Keywords: vc tools
@@ -50,32 +50,27 @@
 ;; STATE-QUERYING FUNCTIONS
 ;; * registered (file)                             OK
 ;; * state (file)                                  OK
-;; - state-heuristic (file)                        NOT NEEDED
+;; - dir-status-files (dir files uf)               OK
 ;; * working-revision (file)                       OK
-;; - latest-on-branch-p (file)                     NOT NEEDED
 ;; * checkout-model (files)                        OK
-;; - workfile-unchanged-p (file)                   OK
 ;; - mode-line-string (file)                       OK
 ;; STATE-CHANGING FUNCTIONS
 ;; * create-repo ()                                OK
 ;; * register (files &optional rev comment)        OK
-;; - init-revision (file)                          NOT NEEDED
 ;; - responsible-p (file)                          OK
-;; - could-register (file)                         NOT NEEDED, DEFAULT IS GOOD
 ;; - receive-file (file rev)                       NOT NEEDED
 ;; - unregister (file)                             OK
 ;; * checkin (files rev comment)                   OK
 ;; * find-revision (file rev buffer)               OK
-;; * checkout (file &optional editable rev)        OK
+;; * checkout (file &optional rev)                 OK
 ;; * revert (file &optional contents-done)         OK
-;; - rollback (files)                              COULD BE SUPPORTED
-;; - merge (file rev1 rev2)                   It would be possible to merge
+;; - merge-file (file rev1 rev2)            It would be possible to merge
 ;;                                          changes into a single file, but
 ;;                                          when committing they wouldn't
 ;;                                          be identified as a merge
 ;;                                          by git, so it's probably
 ;;                                          not a good idea.
-;; - merge-news (file)                     see `merge'
+;; - merge-news (file)                      see `merge-file'
 ;; - steal-lock (file &optional revision)          NOT NEEDED
 ;; HISTORY FUNCTIONS
 ;; * print-log (files buffer &optional shortlog start-revision limit)   OK
@@ -83,7 +78,7 @@
 ;; - show-log-entry (revision)                     OK
 ;; - comment-history (file)                        ??
 ;; - update-changelog (files)                      COULD BE SUPPORTED
-;; * diff (file &optional rev1 rev2 buffer)        OK
+;; * diff (file &optional rev1 rev2 buffer async)  OK
 ;; - revision-completion-table (files)             OK
 ;; - annotate-command (file buf &optional rev)     OK
 ;; - annotate-time ()                              OK
@@ -94,11 +89,9 @@
 ;; - retrieve-tag (dir name update)                OK
 ;; MISCELLANEOUS
 ;; - make-version-backups-p (file)                 NOT NEEDED
-;; - repository-hostname (dirname)                 NOT NEEDED
 ;; - previous-revision (file rev)                  OK
 ;; - next-revision (file rev)                      OK
 ;; - check-headers ()                              COULD BE SUPPORTED
-;; - clear-headers ()                              NOT NEEDED
 ;; - delete-file (file)                            OK
 ;; - rename-file (old new)                         OK
 ;; - find-file-hook ()                             OK
@@ -248,9 +241,6 @@ matching the resulting Git log output, and KEYWORDS is a 
list of
           str)
       (vc-git--rev-parse "HEAD"))))
 
-(defun vc-git-workfile-unchanged-p (file)
-  (eq 'up-to-date (vc-git-state file)))
-
 (defun vc-git-mode-line-string (file)
   "Return a string for `vc-mode-line' to put in the mode line for FILE."
   (let* ((rev (vc-working-revision file))
@@ -381,8 +371,7 @@ or an empty string if none."
     (goto-char (point-min))
     (pcase stage
       (`update-index
-       (setq next-stage (if (vc-git--empty-db-p) 'ls-files-added
-                          (if files 'ls-files-up-to-date 'diff-index))))
+       (setq next-stage (if (vc-git--empty-db-p) 'ls-files-added 'diff-index)))
       (`ls-files-added
        (setq next-stage 'ls-files-unknown)
        (while (re-search-forward "\\([0-7]\\{6\\}\\) [0-9a-f]\\{40\\} 
0\t\\([^\0]+\\)\0" nil t)
@@ -391,7 +380,7 @@ or an empty string if none."
            (push (list name 'added (vc-git-create-extra-fileinfo 0 new-perm))
                  result))))
       (`ls-files-up-to-date
-       (setq next-stage 'diff-index)
+       (setq next-stage 'ls-files-unknown)
        (while (re-search-forward "\\([0-7]\\{6\\}\\) [0-9a-f]\\{40\\} 
0\t\\([^\0]+\\)\0" nil t)
          (let ((perm (string-to-number (match-string 1) 8))
                (name (match-string 2)))
@@ -410,7 +399,7 @@ or an empty string if none."
                      (vc-git-create-extra-fileinfo 0 0))
                result)))
       (`diff-index
-       (setq next-stage 'ls-files-unknown)
+       (setq next-stage (if files 'ls-files-up-to-date 'ls-files-unknown))
        (while (re-search-forward
                ":\\([0-7]\\{6\\}\\) \\([0-7]\\{6\\}\\) [0-9a-f]\\{40\\} 
[0-9a-f]\\{40\\} 
\\(\\([ADMUT]\\)\0\\([^\0]+\\)\\|\\([CR]\\)[0-9]*\0\\([^\0]+\\)\0\\([^\0]+\\)\\)\0"
                nil t 1)
@@ -481,15 +470,11 @@ or an empty string if none."
   (vc-run-delayed
    (vc-git-after-dir-status-stage stage files update-function)))
 
-(defun vc-git-dir-status (_dir update-function)
+(defun vc-git-dir-status-files (_dir files update-function)
   "Return a list of (FILE STATE EXTRA) entries for DIR."
   ;; Further things that would have to be fixed later:
   ;; - how to handle unregistered directories
   ;; - how to support vc-dir on a subdir of the project tree
-  (vc-git-dir-status-goto-stage 'update-index nil update-function))
-
-(defun vc-git-dir-status-files (_dir files _default-state update-function)
-  "Return a list of (FILE STATE EXTRA) entries for FILES in DIR."
   (vc-git-dir-status-goto-stage 'update-index files update-function))
 
 (defvar vc-git-stash-map
@@ -605,7 +590,7 @@ The car of the list is the current branch."
   "Create a new Git repository."
   (vc-git-command nil 0 nil "init"))
 
-(defun vc-git-register (files &optional _rev _comment)
+(defun vc-git-register (files &optional _comment)
   "Register FILES into the git version-control system."
   (let (flist dlist)
     (dolist (crt files)
@@ -665,7 +650,7 @@ If toggling on, also insert its message into the buffer."
   "Major mode for editing Git log messages.
 It is based on `log-edit-mode', and has Git-specific extensions.")
 
-(defun vc-git-checkin (files _rev comment)
+(defun vc-git-checkin (files comment)
   (let* ((file1 (or (car files) default-directory))
          (root (vc-git-root file1))
          (default-directory (expand-file-name root))
@@ -709,7 +694,7 @@ It is based on `log-edit-mode', and has Git-specific 
extensions.")
   (expand-file-name ".gitignore"
                    (vc-git-root file)))
 
-(defun vc-git-checkout (file &optional _editable rev)
+(defun vc-git-checkout (file &optional rev)
   (vc-git-command nil 0 file "checkout" (or rev "HEAD")))
 
 (defun vc-git-revert (file &optional contents-done)
@@ -784,7 +769,7 @@ This prompts for a branch to merge from."
           ;; See git-status(1).
           (when (member state '("AU" "UD" "UA" ;; "DD"
                                 "DU" "AA" "UU"))
-            (push file files)))))))
+            (push (expand-file-name file directory) files)))))))
 
 (defun vc-git-resolve-when-done ()
   "Call \"git add\" if the conflict markers have been removed."
@@ -991,14 +976,23 @@ or BRANCH^ (where \"^\" can be repeated)."
 
 (autoload 'vc-switches "vc")
 
-(defun vc-git-diff (files &optional rev1 rev2 buffer)
+(defun vc-git-diff (files &optional rev1 rev2 buffer async)
   "Get a difference report using Git between two revisions of FILES."
   (let (process-file-side-effects)
-    (apply #'vc-git-command (or buffer "*vc-diff*") 1 files
-          (if (and rev1 rev2) "diff-tree" "diff-index")
-          "--exit-code"
-          (append (vc-switches 'git 'diff)
-                  (list "-p" (or rev1 "HEAD") rev2 "--")))))
+    (if vc-git-diff-switches
+        (apply #'vc-git-command (or buffer "*vc-diff*")
+              (if async 'async 1)
+              files
+               (if (and rev1 rev2) "diff-tree" "diff-index")
+               "--exit-code"
+               (append (vc-switches 'git 'diff)
+                       (list "-p" (or rev1 "HEAD") rev2 "--")))
+      (vc-git-command (or buffer "*vc-diff*") 1 files
+                      "difftool" "--exit-code" "--no-prompt" "-x"
+                      (concat "diff "
+                              (mapconcat 'identity
+                                         (vc-switches nil 'diff) " "))
+                      (or rev1 "HEAD") rev2 "--"))))
 
 (defun vc-git-revision-table (_files)
   ;; What about `files'?!?  --Stef
@@ -1077,7 +1071,11 @@ or BRANCH^ (where \"^\" can be repeated)."
                            (point)
                            (1- (point-max)))))))
         (or (vc-git-symbolic-commit prev-rev) prev-rev))
-    (vc-git--rev-parse (concat rev "^"))))
+    ;; We used to use "^" here, but that fails on MS-Windows if git is
+    ;; invoked via a batch file, in which case cmd.exe strips the "^"
+    ;; because it is a special character for cmd which process-file
+    ;; does not (and cannot) quote.
+    (vc-git--rev-parse (concat rev "~1"))))
 
 (defun vc-git--rev-parse (rev)
   (with-temp-buffer
@@ -1299,16 +1297,18 @@ This command shares argument histories with \\[rgrep] 
and \\[grep]."
   "A wrapper around `vc-do-command' for use in vc-git.el.
 The difference to vc-do-command is that this function always invokes
 `vc-git-program'."
-  (apply 'vc-do-command (or buffer "*vc*") okstatus vc-git-program
-         ;; http://debbugs.gnu.org/16897
-         (unless (and (not (cdr-safe file-or-list))
-                      (let ((file (or (car-safe file-or-list)
-                                      file-or-list)))
-                        (and file
-                             (eq ?/ (aref file (1- (length file))))
-                             (equal file (vc-git-root file)))))
-           file-or-list)
-         (cons "--no-pager" flags)))
+  (let ((coding-system-for-read vc-git-commits-coding-system)
+       (coding-system-for-write vc-git-commits-coding-system))
+    (apply 'vc-do-command (or buffer "*vc*") okstatus vc-git-program
+          ;; http://debbugs.gnu.org/16897
+          (unless (and (not (cdr-safe file-or-list))
+                       (let ((file (or (car-safe file-or-list)
+                                       file-or-list)))
+                         (and file
+                              (eq ?/ (aref file (1- (length file))))
+                              (equal file (vc-git-root file)))))
+            file-or-list)
+          (cons "--no-pager" flags))))
 
 (defun vc-git--empty-db-p ()
   "Check if the git db is empty (no commit done yet)."
@@ -1321,6 +1321,8 @@ The difference to vc-do-command is that this function 
always invokes
   ;; directories.  We enable `inhibit-null-byte-detection', otherwise
   ;; Tramp's eol conversion might be confused.
   (let ((inhibit-null-byte-detection t)
+       (coding-system-for-read vc-git-commits-coding-system)
+       (coding-system-for-write vc-git-commits-coding-system)
        (process-environment (cons "PAGER=" process-environment)))
     (apply 'process-file vc-git-program nil buffer nil command args)))
 
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index 4f13914..8b4067f 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -1,6 +1,6 @@
 ;;; vc-hg.el --- VC backend for the mercurial version control system  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; Author: Ivan Kanis
 ;; Maintainer: address@hidden
@@ -43,29 +43,22 @@
 ;; STATE-QUERYING FUNCTIONS
 ;; * registered (file)                         OK
 ;; * state (file)                              OK
-;; - state-heuristic (file)                    NOT NEEDED
-;; - dir-status (dir update-function)          OK
-;; - dir-status-files (dir files ds uf)        OK
+;; - dir-status-files (dir files uf)           OK
 ;; - dir-extra-headers (dir)                   OK
 ;; - dir-printer (fileinfo)                    OK
 ;; * working-revision (file)                   OK
-;; - latest-on-branch-p (file)                 ??
 ;; * checkout-model (files)                    OK
-;; - workfile-unchanged-p (file)               OK
 ;; - mode-line-string (file)                   NOT NEEDED
 ;; STATE-CHANGING FUNCTIONS
 ;; * register (files &optional rev comment)    OK
 ;; * create-repo ()                            OK
-;; - init-revision ()                          NOT NEEDED
 ;; - responsible-p (file)                      OK
-;; - could-register (file)                     OK
 ;; - receive-file (file rev)                   ?? PROBABLY NOT NEEDED
 ;; - unregister (file)                         OK
 ;; * checkin (files rev comment)               OK
 ;; * find-revision (file rev buffer)           OK
-;; * checkout (file &optional editable rev)    OK
+;; * checkout (file &optional rev)             OK
 ;; * revert (file &optional contents-done)     OK
-;; - rollback (files)                          ?? PROBABLY NOT NEEDED
 ;; - merge (file rev1 rev2)                    NEEDED
 ;; - merge-news (file)                         NEEDED
 ;; - steal-lock (file &optional revision)      NOT NEEDED
@@ -86,11 +79,9 @@
 ;; - retrieve-tag (dir name update)            OK FIXME UPDATE BUFFERS
 ;; MISCELLANEOUS
 ;; - make-version-backups-p (file)             ??
-;; - repository-hostname (dirname)             ??
 ;; - previous-revision (file rev)              OK
 ;; - next-revision (file rev)                  OK
 ;; - check-headers ()                          ??
-;; - clear-headers ()                          ??
 ;; - delete-file (file)                        TEST IT
 ;; - rename-file (old new)                     OK
 ;; - find-file-hook ()                         added for bug#10709
@@ -195,6 +186,7 @@ highlighting the Log View buffer."
 
 (defun vc-hg-state (file)
   "Hg-specific version of `vc-state'."
+  (setq file (expand-file-name file))
   (let*
       ((status nil)
        (default-directory (file-name-directory file))
@@ -211,34 +203,28 @@ highlighting the Log View buffer."
                             (append
                              (list "TERM=dumb" "LANGUAGE=C" "HGPLAIN=1")
                              process-environment)))
-                       (if (file-remote-p file)
-                           (process-file
-                            "env" nil t nil
-                            "HGPLAIN=1" vc-hg-program
-                            "--config" "alias.status=status"
-                            "--config" "defaults.status="
-                            "status" "-A" (file-relative-name file))
-                         (process-file
-                          vc-hg-program nil t nil
-                          "--config" "alias.status=status"
-                          "--config" "defaults.status="
-                          "status" "-A" (file-relative-name file))))
+                       (process-file
+                        vc-hg-program nil t nil
+                        "--config" "alias.status=status"
+                        "--config" "defaults.status="
+                        "status" "-A" (file-relative-name file)))
                     ;; Some problem happened.  E.g. We can't find an `hg'
                     ;; executable.
                     (error nil)))))))
-    (when (eq 0 status)
-        (when (null (string-match ".*: No such file or directory$" out))
-          (let ((state (aref out 0)))
-            (cond
-             ((eq state ?=) 'up-to-date)
-             ((eq state ?A) 'added)
-             ((eq state ?M) 'edited)
-             ((eq state ?I) 'ignored)
-             ((eq state ?R) 'removed)
-             ((eq state ?!) 'missing)
-             ((eq state ??) 'unregistered)
-             ((eq state ?C) 'up-to-date) ;; Older mercurial versions use this.
-             (t 'up-to-date)))))))
+    (when (and (eq 0 status)
+              (> (length out) 0)
+              (null (string-match ".*: No such file or directory$" out)))
+      (let ((state (aref out 0)))
+       (cond
+        ((eq state ?=) 'up-to-date)
+        ((eq state ?A) 'added)
+        ((eq state ?M) 'edited)
+        ((eq state ?I) 'ignored)
+        ((eq state ?R) 'removed)
+        ((eq state ?!) 'missing)
+        ((eq state ??) 'unregistered)
+        ((eq state ?C) 'up-to-date) ;; Older mercurial versions use this.
+        (t 'up-to-date))))))
 
 (defun vc-hg-working-revision (file)
   "Hg-specific version of `vc-working-revision'."
@@ -327,7 +313,7 @@ If LIMIT is non-nil, show no more than this many entries."
 
 (autoload 'vc-switches "vc")
 
-(defun vc-hg-diff (files &optional oldvers newvers buffer)
+(defun vc-hg-diff (files &optional oldvers newvers buffer async)
   "Get a difference report using hg between two revisions of FILES."
   (let* ((firstfile (car files))
          (working (and firstfile (vc-working-revision firstfile))))
@@ -335,7 +321,10 @@ If LIMIT is non-nil, show no more than this many entries."
       (setq oldvers nil))
     (when (and (not oldvers) newvers)
       (setq oldvers working))
-    (apply #'vc-hg-command (or buffer "*vc-diff*") nil files "diff"
+    (apply #'vc-hg-command
+          (or buffer "*vc-diff*")
+          (if async 'async nil)
+          files "diff"
            (append
             (vc-switches 'hg 'diff)
             (when oldvers
@@ -407,7 +396,7 @@ Optional arg REVISION is a revision to annotate from."
     (and (vc-hg-command nil 0 nil "status")
          (vc-hg-command nil 0 nil (if branchp "bookmark" "tag") name))))
 
-(defun vc-hg-retrieve-tag (dir name update)
+(defun vc-hg-retrieve-tag (dir name _update)
   "Retrieve the version tagged by NAME of all registered files at or below 
DIR."
   (let ((default-directory dir))
     (vc-hg-command nil 0 nil "update" name)
@@ -448,10 +437,8 @@ Optional arg REVISION is a revision to annotate from."
   "Rename file from OLD to NEW using `hg mv'."
   (vc-hg-command nil 0 new "mv" old))
 
-(defun vc-hg-register (files &optional _rev _comment)
-  "Register FILES under hg.
-REV is ignored.
-COMMENT is ignored."
+(defun vc-hg-register (files &optional _comment)
+  "Register FILES under hg. COMMENT is ignored."
   (vc-hg-command nil 0 files "add"))
 
 (defun vc-hg-create-repo ()
@@ -460,24 +447,13 @@ COMMENT is ignored."
 
 (defalias 'vc-hg-responsible-p 'vc-hg-root)
 
-;; Modeled after the similar function in vc-bzr.el
-(defun vc-hg-could-register (file)
-  "Return non-nil if FILE could be registered under hg."
-  (and (vc-hg-responsible-p file)      ; shortcut
-       (condition-case ()
-           (with-temp-buffer
-             (vc-hg-command t nil file "add" "--dry-run"))
-             ;; The command succeeds with no output if file is
-             ;; registered.
-         (error))))
-
 (defun vc-hg-unregister (file)
   "Unregister FILE from hg."
   (vc-hg-command nil 0 file "forget"))
 
 (declare-function log-edit-extract-headers "log-edit" (headers string))
 
-(defun vc-hg-checkin (files _rev comment)
+(defun vc-hg-checkin (files comment)
   "Hg-specific version of `vc-backend-checkin'.
 REV is ignored."
   (apply 'vc-hg-command nil 0 files
@@ -499,7 +475,7 @@ REV is ignored."
                    (vc-hg-root file)))
 
 ;; Modeled after the similar function in vc-bzr.el
-(defun vc-hg-checkout (file &optional _editable rev)
+(defun vc-hg-checkout (file &optional rev)
   "Retrieve a revision of FILE.
 EDITABLE is ignored.
 REV is the revision to check out into WORKFILE."
@@ -540,10 +516,6 @@ REV is the revision to check out into WORKFILE."
 
 
 ;; Modeled after the similar function in vc-bzr.el
-(defun vc-hg-workfile-unchanged-p (file)
-  (eq 'up-to-date (vc-hg-state file)))
-
-;; Modeled after the similar function in vc-bzr.el
 (defun vc-hg-revert (file &optional contents-done)
   (unless contents-done
     (with-temp-buffer (vc-hg-command t 0 file "revert"))))
@@ -640,15 +612,12 @@ REV is the revision to check out into WORKFILE."
 ;; Follows vc-exec-after.
 (declare-function vc-set-async-update "vc-dispatcher" (process-buffer))
 
-(defun vc-hg-dir-status (dir update-function)
-  (vc-hg-command (current-buffer) 'async dir "status" "-C")
-  (vc-run-delayed
-   (vc-hg-after-dir-status update-function)))
-
-(defun vc-hg-dir-status-files (dir files _default-state update-function)
-  (apply 'vc-hg-command (current-buffer) 'async dir "status" "-C" files)
+(defun vc-hg-dir-status-files (dir files update-function)
+  (apply 'vc-hg-command (current-buffer) 'async dir "status"
+         (concat "-mardu" (if files "i"))
+         "-C" files)
   (vc-run-delayed
-   (vc-hg-after-dir-status update-function)))
+    (vc-hg-after-dir-status update-function)))
 
 (defun vc-hg-dir-extra-header (name &rest commands)
   (concat (propertize name 'face 'font-lock-type-face)
diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el
index 6359e19..7801f4f 100644
--- a/lisp/vc/vc-hooks.el
+++ b/lisp/vc/vc-hooks.el
@@ -1,6 +1,6 @@
 ;;; vc-hooks.el --- resident support for version-control
 
-;; Copyright (C) 1992-1996, 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1996, 1998-2015 Free Software Foundation, Inc.
 
 ;; Author:     FSF (see vc.el for full credits)
 ;; Maintainer: Andre Spiegel <address@hidden>
@@ -41,7 +41,7 @@
   :version "25.1")
 
 (defface vc-state-base-face
-  '((default :inherit mode-line))
+  '((default))
   "Base face for VC state indicator."
   :group 'vc-faces
   :group 'mode-line
@@ -107,8 +107,8 @@ interpreted as hostnames."
   :type 'regexp
   :group 'vc)
 
-(defcustom vc-handled-backends '(RCS CVS SVN SCCS Bzr Git Hg Mtn Arch)
-  ;; RCS, CVS, SVN and SCCS come first because they are per-dir
+(defcustom vc-handled-backends '(RCS CVS SVN SCCS SRC Bzr Git Hg Mtn)
+  ;; RCS, CVS, SVN, SCCS, and SRC come first because they are per-dir
   ;; rather than per-tree.  RCS comes first because of the multibackend
   ;; support intended to use RCS for local commits (with a remote CVS server).
   "List of version control backends for which VC will be used.
@@ -118,13 +118,14 @@ Removing an entry from the list prevents VC from being 
activated
 when visiting a file managed by that backend.
 An empty list disables VC altogether."
   :type '(repeat symbol)
-  :version "23.1"
+  :version "25.1"
   :group 'vc)
 
 ;; Note: we don't actually have a darcs back end yet.
-;; Also, Meta-CVS (corresponding to MCVS) is unsupported.
+;; Also, Meta-CVS (corresponding to MCVS) and Arch are unsupported.
+;; The Arch back end will be retrieved and fixed if it is ever required.
 (defcustom vc-directory-exclusion-list (purecopy '("SCCS" "RCS" "CVS" "MCVS"
-                                        ".svn" ".git" ".hg" ".bzr"
+                                        ".src" ".svn" ".git" ".hg" ".bzr"
                                         "_MTN" "_darcs" "{arch}"))
   "List of directory names to be ignored when walking directory trees."
   :type '(repeat string)
@@ -163,87 +164,6 @@ Otherwise, not displayed."
   :type 'boolean
   :group 'vc)
 
-(defcustom vc-keep-workfiles t
-  "Whether to keep work files on disk after commits, on a locking VCS.
-This variable has no effect on modern merging-based version
-control systems."
-  :type 'boolean
-  :group 'vc)
-
-;; If you fix bug#11490, probably you can set this back to nil.
-(defcustom vc-mistrust-permissions t
-  "If non-nil, don't assume permissions/ownership track version-control status.
-If nil, do rely on the permissions.
-See also variable `vc-consult-headers'."
-  :version "24.3"                       ; nil->t, bug#11490
-  :type 'boolean
-  :group 'vc)
-
-(defun vc-mistrust-permissions (file)
-  "Internal access function to variable `vc-mistrust-permissions' for FILE."
-  (or (eq vc-mistrust-permissions 't)
-      (and vc-mistrust-permissions
-          (funcall vc-mistrust-permissions
-                   (vc-backend-subdirectory-name file)))))
-
-(defcustom vc-stay-local 'only-file
-  "Non-nil means use local operations when possible for remote repositories.
-This avoids slow queries over the network and instead uses heuristics
-and past information to determine the current status of a file.
-
-If value is the symbol `only-file', `vc-dir' will connect to the
-server, but heuristics will be used to determine the status for
-all other VC operations.
-
-The value can also be a regular expression or list of regular
-expressions to match against the host name of a repository; then VC
-only stays local for hosts that match it.  Alternatively, the value
-can be a list of regular expressions where the first element is the
-symbol `except'; then VC always stays local except for hosts matched
-by these regular expressions."
-  :type '(choice
-         (const :tag "Always stay local" t)
-         (const :tag "Only for file operations" only-file)
-         (const :tag "Don't stay local" nil)
-         (list :format "\nExamine hostname and %v" :tag "Examine hostname ..."
-               (set :format "%v" :inline t (const :format "%t" :tag "don't" 
except))
-               (regexp :format " stay local,\n%t: %v" :tag "if it matches")
-               (repeat :format "%v%i\n" :inline t (regexp :tag "or"))))
-  :version "23.1"
-  :group 'vc)
-
-(defun vc-stay-local-p (file &optional backend)
-  "Return non-nil if VC should stay local when handling FILE.
-This uses the `repository-hostname' backend operation.
-If FILE is a list of files, return non-nil if any of them
-individually should stay local."
-  (if (listp file)
-      (delq nil (mapcar (lambda (arg) (vc-stay-local-p arg backend)) file))
-    (setq backend (or backend (vc-backend file)))
-    (let* ((sym (vc-make-backend-sym backend 'stay-local))
-          (stay-local (if (boundp sym) (symbol-value sym) vc-stay-local)))
-      (if (symbolp stay-local) stay-local
-       (let ((dirname (if (file-directory-p file)
-                          (directory-file-name file)
-                        (file-name-directory file))))
-         (eq 'yes
-             (or (vc-file-getprop dirname 'vc-stay-local-p)
-                 (vc-file-setprop
-                  dirname 'vc-stay-local-p
-                  (let ((hostname (vc-call-backend
-                                   backend 'repository-hostname dirname)))
-                    (if (not hostname)
-                        'no
-                      (let ((default t))
-                        (if (eq (car-safe stay-local) 'except)
-                            (setq default nil stay-local (cdr stay-local)))
-                        (when (consp stay-local)
-                          (setq stay-local
-                                (mapconcat 'identity stay-local "\\|")))
-                        (if (if (string-match stay-local hostname)
-                                default (not default))
-                            'yes 'no))))))))))))
-
 ;;; This is handled specially now.
 ;; Tell Emacs about this new kind of minor mode
 ;; (add-to-list 'minor-mode-alist '(vc-mode vc-mode))
@@ -454,19 +374,6 @@ If the argument is a list, the files must all have the 
same back end."
   "Return where the repository for the current directory is kept."
   (symbol-name (vc-backend file)))
 
-(defun vc-name (file)
-  "Return the master name of FILE.
-If the file is not registered, or the master name is not known, return nil."
-  ;; TODO: This should ultimately become obsolete, at least up here
-  ;; in vc-hooks.
-  (or (vc-file-getprop file 'vc-name)
-      ;; force computation of the property by calling
-      ;; vc-BACKEND-registered explicitly
-      (let ((backend (vc-backend file)))
-       (if (and backend
-                (vc-call-backend backend 'registered file))
-           (vc-file-getprop file 'vc-name)))))
-
 (defun vc-checkout-model (backend files)
   "Indicate how FILES are checked out.
 
@@ -577,51 +484,12 @@ status of this file.  Otherwise, the value returned is 
one of:
   "Quickly recompute the `state' of FILE."
   (vc-file-setprop
    file 'vc-state
-   (vc-call-backend backend 'state-heuristic file)))
+   (vc-call-backend backend 'state file)))
 
 (defsubst vc-up-to-date-p (file)
   "Convenience function that checks whether `vc-state' of FILE is 
`up-to-date'."
   (eq (vc-state file) 'up-to-date))
 
-(defun vc-default-state-heuristic (backend file)
-  "Default implementation of vc-BACKEND-state-heuristic.
-It simply calls the real state computation function `vc-BACKEND-state'
-and does not employ any heuristic at all."
-   (vc-call-backend backend 'state file))
-
-(defun vc-workfile-unchanged-p (file)
-  "Return non-nil if FILE has not changed since the last checkout."
-  (let ((checkout-time (vc-file-getprop file 'vc-checkout-time))
-        (lastmod (nth 5 (file-attributes file))))
-    ;; This is a shortcut for determining when the workfile is
-    ;; unchanged.  It can fail under some circumstances; see the
-    ;; discussion in bug#694.
-    (if (and checkout-time
-            ;; Tramp and Ange-FTP return this when they don't know the time.
-            (not (equal lastmod '(0 0))))
-       (equal checkout-time lastmod)
-      (let ((unchanged (vc-call workfile-unchanged-p file)))
-       (vc-file-setprop file 'vc-checkout-time (if unchanged lastmod 0))
-       unchanged))))
-
-(defun vc-default-workfile-unchanged-p (backend file)
-  "Check if FILE is unchanged by diffing against the repository version.
-Return non-nil if FILE is unchanged."
-  (zerop (condition-case err
-             ;; If the implementation supports it, let the output
-             ;; go to *vc*, not *vc-diff*, since this is an internal call.
-             (vc-call-backend backend 'diff (list file) nil nil "*vc*")
-           (wrong-number-of-arguments
-            ;; If this error came from the above call to vc-BACKEND-diff,
-            ;; try again without the optional buffer argument (for
-            ;; backward compatibility).  Otherwise, resignal.
-            (if (or (not (eq (cadr err)
-                             (indirect-function
-                              (vc-find-backend-function backend 'diff))))
-                    (not (eq (cl-caddr err) 4)))
-                (signal (car err) (cdr err))
-              (vc-call-backend backend 'diff (list file)))))))
-
 (defun vc-working-revision (file &optional backend)
   "Return the repository version from which FILE was checked out.
 If FILE is not registered, this function always returns nil."
@@ -647,9 +515,10 @@ If FILE is not registered, this function always returns 
nil."
       (put backend 'vc-templates-grabbed t))
     (let ((result (vc-check-master-templates file (symbol-value sym))))
       (if (stringp result)
-         (vc-file-setprop file 'vc-name result)
+         (vc-file-setprop file 'vc-master-name result)
        nil))))                         ; Not registered
 
+;;;###autoload
 (defun vc-possible-master (s dirname basename)
   (cond
    ((stringp s) (format s dirname basename))
@@ -999,7 +868,6 @@ current, and kill the buffer that visits the link."
   (let ((map (make-sparse-keymap)))
     (define-key map "a" 'vc-update-change-log)
     (define-key map "b" 'vc-switch-backend)
-    (define-key map "c" 'vc-rollback)
     (define-key map "d" 'vc-dir)
     (define-key map "g" 'vc-annotate)
     (define-key map "G" 'vc-ignore)
@@ -1018,6 +886,7 @@ current, and kill the buffer that visits the link."
     (define-key map "=" 'vc-diff)
     (define-key map "D" 'vc-root-diff)
     (define-key map "~" 'vc-revision-other-window)
+    (define-key map "x" 'vc-delete-file)
     map))
 (fset 'vc-prefix-map vc-prefix-map)
 (define-key ctl-x-map "v" 'vc-prefix-map)
@@ -1068,13 +937,6 @@ current, and kill the buffer that visits the link."
       '(menu-item "Insert Header" vc-insert-headers
                  :help "Insert headers into a file for use with a version 
control system.
 "))
-    (bindings--define-key map [undo]
-      '(menu-item "Undo Last Check-In" vc-rollback
-                  :enable (let ((backend (if buffer-file-name
-                                             (vc-backend buffer-file-name))))
-                            (or (not backend)
-                                (vc-find-backend-function backend 'rollback)))
-                 :help "Remove the most recent changeset committed to the 
repository"))
     (bindings--define-key map [vc-revert]
       '(menu-item "Revert to Base Version" vc-revert
                  :help "Revert working copies of the selected file set to 
their repository contents"))
diff --git a/lisp/vc/vc-mtn.el b/lisp/vc/vc-mtn.el
index ea071c8..d783572 100644
--- a/lisp/vc/vc-mtn.el
+++ b/lisp/vc/vc-mtn.el
@@ -1,6 +1,6 @@
 ;;; vc-mtn.el --- VC backend for Monotone  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: vc
@@ -79,7 +79,8 @@ If nil, use the value of `vc-diff-switches'.  If t, use no 
switches."
 (defun vc-mtn-checkout-model (_files) 'implicit)
 
 (defun vc-mtn-root (file)
-  (setq file (if (file-directory-p file)
+  (setq file (expand-file-name file)
+       file (if (file-directory-p file)
                  (file-name-as-directory file)
                (file-name-directory file)))
   (or (vc-file-getprop file 'vc-mtn-root)
@@ -126,10 +127,11 @@ If nil, use the value of `vc-diff-switches'.  If t, use 
no switches."
             ((match-end 2) (push (list (match-string 3) 'added) result))))
     (funcall update-function result)))
 
-;; -dir-status called from vc-dir, which loads vc, which loads vc-dispatcher.
+;; dir-status-files called from vc-dir, which loads vc,
+;; which loads vc-dispatcher.
 (declare-function vc-exec-after "vc-dispatcher" (code))
 
-(defun vc-mtn-dir-status (dir update-function)
+(defun vc-mtn-dir-status-files (dir _files update-function)
   (vc-mtn-command (current-buffer) 'async dir "status")
   (vc-run-delayed
    (vc-mtn-after-dir-status update-function)))
@@ -154,9 +156,6 @@ If nil, use the value of `vc-diff-switches'.  If t, use no 
switches."
       (re-search-forward "\\(?:Current b\\|B\\)ranch:  *\\(.*\\)\n?\nChanges 
against parent \\(.*\\)")
       (match-string 1))))
 
-(defun vc-mtn-workfile-unchanged-p (file)
-  (not (eq (vc-mtn-state file) 'edited)))
-
 ;; Mode-line rewrite code copied from vc-arch.el.
 
 (defcustom vc-mtn-mode-line-rewrite
@@ -179,15 +178,14 @@ If nil, use the value of `vc-diff-switches'.  If t, use 
no switches."
              (_ ?:))
            branch)))
 
-(defun vc-mtn-register (files &optional _rev _comment)
+(defun vc-mtn-register (files &optional _comment)
   (vc-mtn-command nil 0 files "add"))
 
 (defun vc-mtn-responsible-p (file) (vc-mtn-root file))
-(defun vc-mtn-could-register (file) (vc-mtn-root file))
 
 (declare-function log-edit-extract-headers "log-edit" (headers string))
 
-(defun vc-mtn-checkin (files _rev comment)
+(defun vc-mtn-checkin (files comment)
   (apply 'vc-mtn-command nil 0 files
         (nconc (list "commit" "-m")
                (log-edit-extract-headers '(("Author" . "--author")
@@ -197,16 +195,13 @@ If nil, use the value of `vc-diff-switches'.  If t, use 
no switches."
 (defun vc-mtn-find-revision (file rev buffer)
   (vc-mtn-command buffer 0 file "cat" "-r" rev))
 
-;; (defun vc-mtn-checkout (file &optional editable rev)
+;; (defun vc-mtn-checkout (file &optional rev)
 ;;   )
 
 (defun vc-mtn-revert (file &optional contents-done)
   (unless contents-done
     (vc-mtn-command nil 0 file "revert")))
 
-;; (defun vc-mtn-rollback (files)
-;;   )
-
 (defun vc-mtn-print-log (files buffer &optional _shortlog start-revision limit)
   "Print commit logs associated with FILES into specified BUFFER.
 _SHORTLOG is ignored.
@@ -241,9 +236,11 @@ If LIMIT is non-nil, show no more than this many entries."
 
 (autoload 'vc-switches "vc")
 
-(defun vc-mtn-diff (files &optional rev1 rev2 buffer)
+(defun vc-mtn-diff (files &optional rev1 rev2 buffer async)
   "Get a difference report using monotone between two revisions of FILES."
-  (apply 'vc-mtn-command (or buffer "*vc-diff*") 1 files "diff"
+  (apply 'vc-mtn-command (or buffer "*vc-diff*")
+        (if async 'async 1)
+        files "diff"
          (append
            (vc-switches 'mtn 'diff)
            (if rev1 (list "-r" rev1)) (if rev2 (list "-r" rev2)))))
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 57515d0..d575530 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -1,6 +1,6 @@
 ;;; vc-rcs.el --- support for RCS version-control  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2015 Free Software Foundation, Inc.
 
 ;; Author:     FSF (see vc.el for full credits)
 ;; Maintainer: Andre Spiegel <address@hidden>
@@ -149,70 +149,18 @@ For a description of possible values, see 
`vc-check-master-templates'."
                                                       'vc-working-revision))))
       (if (not (eq state 'up-to-date))
          state
-       (if (vc-workfile-unchanged-p file)
+       (if (vc-rcs-workfile-unchanged-p file)
            'up-to-date
          (if (eq (vc-rcs-checkout-model (list file)) 'locking)
              'unlocked-changes
            'edited))))))
 
-(defun vc-rcs-state-heuristic (file)
-  "State heuristic for RCS."
-  (let (vc-rcs-headers-result)
-    (if (and vc-consult-headers
-             (setq vc-rcs-headers-result
-                   (vc-rcs-consult-headers file))
-             (eq vc-rcs-headers-result 'rev-and-lock))
-        (let ((state (vc-file-getprop file 'vc-state)))
-          ;; If the headers say that the file is not locked, the
-          ;; permissions can tell us whether locking is used for
-          ;; the file or not.
-          (if (and (eq state 'up-to-date)
-                   (not (vc-mistrust-permissions file))
-                   (file-exists-p file))
-              (cond
-               ((string-match ".rw..-..-." (nth 8 (file-attributes file)))
-                (vc-file-setprop file 'vc-checkout-model 'implicit)
-               (setq state
-                     (if (vc-rcs-workfile-is-newer file)
-                         'edited
-                       'up-to-date)))
-               ((string-match ".r-..-..-." (nth 8 (file-attributes file)))
-                (vc-file-setprop file 'vc-checkout-model 'locking))))
-          state)
-      (if (not (vc-mistrust-permissions file))
-          (let* ((attributes  (file-attributes file 'string))
-                 (owner-name  (nth 2 attributes))
-                 (permissions (nth 8 attributes)))
-            (cond ((and permissions (string-match ".r-..-..-." permissions))
-                   (vc-file-setprop file 'vc-checkout-model 'locking)
-                   'up-to-date)
-                  ((and permissions (string-match ".rw..-..-." permissions))
-                  (if (eq (vc-rcs-checkout-model file) 'locking)
-                      (if (file-ownership-preserved-p file)
-                          'edited
-                        owner-name)
-                    (if (vc-rcs-workfile-is-newer file)
-                        'edited
-                      'up-to-date)))
-                  (t
-                   ;; Strange permissions.  Fall through to
-                   ;; expensive state computation.
-                   (vc-rcs-state file))))
-        (vc-rcs-state file)))))
-
 (autoload 'vc-expand-dirs "vc")
 
-(defun vc-rcs-dir-status (dir update-function)
-  ;; FIXME: this function should be rewritten or `vc-expand-dirs'
-  ;; should be changed to take a backend parameter.  Using
-  ;; `vc-expand-dirs' is not TRTD because it returns files from
-  ;; multiple backends.  It should also return 'unregistered files.
-
-  ;; Doing individual vc-state calls is painful but there
-  ;; is no better way in RCS-land.
-  (let ((flist (vc-expand-dirs (list dir)))
-       (result nil))
-    (dolist (file flist)
+(defun vc-rcs-dir-status-files (dir files update-function)
+  (if (not files) (setq files (vc-expand-dirs (list dir) 'RCS)))
+  (let ((result nil))
+    (dolist (file files)
       (let ((state (vc-state file))
            (frel (file-relative-name file)))
        (when (and (eq (vc-backend file) 'RCS)
@@ -229,6 +177,8 @@ For a description of possible values, see 
`vc-check-master-templates'."
         (vc-rcs-fetch-master-state file)
         (vc-file-getprop file 'vc-working-revision))))
 
+(autoload 'vc-master-name "vc-filewise")
+
 (defun vc-rcs-latest-on-branch-p (file &optional version)
   "Return non-nil if workfile version of FILE is the latest on its branch.
 When VERSION is given, perform check for that version."
@@ -238,15 +188,15 @@ When VERSION is given, perform check for that version."
             (if (vc-rcs-trunk-p version)
                 (progn
                   ;; Compare VERSION to the head version number.
-                  (vc-insert-file (vc-name file) "^[0-9]")
+                  (vc-insert-file (vc-master-name file) "^[0-9]")
                   (vc-parse-buffer "^head[ \t\n]+\\([^;]+\\);" 1))
               ;; If we are not on the trunk, we need to examine the
               ;; whole current branch.
-              (vc-insert-file (vc-name file) "^desc")
+              (vc-insert-file (vc-master-name file) "^desc")
               (vc-rcs-find-most-recent-rev (vc-branch-part version))))))
 
 (defun vc-rcs-workfile-unchanged-p (file)
-  "RCS-specific implementation of `vc-workfile-unchanged-p'."
+  "Has FILE remained unchanged since last checkout?"
   ;; Try to use rcsdiff --brief.  If rcsdiff does not understand that,
   ;; do a double take and remember the fact for the future
   (let* ((version (concat "-r" (vc-working-revision file)))
@@ -274,18 +224,13 @@ When VERSION is given, perform check for that version."
 
 (autoload 'vc-switches "vc")
 
-(defun vc-rcs-register (files &optional rev comment)
+(defun vc-rcs-register (files &optional comment)
   "Register FILES into the RCS version-control system.
-REV is the optional revision number for the files.  COMMENT can be used
-to provide an initial description for each FILES.
+Automatically retrieve a read-only version of the file with keywords expanded.
+COMMENT can be used to provide an initial description for each FILES.
 Passes either `vc-rcs-register-switches' or `vc-register-switches'
-to the RCS command.
-
-Automatically retrieve a read-only version of the file with keywords
-expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
+to the RCS command."
   (let (subdir name)
-    ;; When REV is specified, we need to force using "-t-".
-    (when rev (unless comment (setq comment "")))
     (dolist (file files)
       (and (not (file-exists-p
                 (setq subdir (expand-file-name "RCS"
@@ -297,7 +242,7 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, 
delete the workfile."
       (apply #'vc-do-command "*vc*" 0 "ci" file
             ;; if available, use the secure registering option
             (and (vc-rcs-release-p "5.6.4") "-i")
-            (concat (if vc-keep-workfiles "-u" "-r") rev)
+            "-u"
             (and comment (concat "-t-" comment))
             (vc-switches 'RCS 'register))
       ;; parse output to find master file name and workfile version
@@ -309,9 +254,9 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, 
delete the workfile."
                           (match-string 1))))
            ;; if we couldn't find the master name,
            ;; run vc-rcs-registered to get it
-           ;; (will be stored into the vc-name property)
+           ;; (will be stored into the vc-master-name property)
            (vc-rcs-registered file)
-         (vc-file-setprop file 'vc-name
+         (vc-file-setprop file 'vc-master-name
                           (if (file-name-absolute-p name)
                               name
                             (expand-file-name
@@ -334,7 +279,7 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, 
delete the workfile."
 (defun vc-rcs-receive-file (file rev)
   "Implementation of receive-file for RCS."
   (let ((checkout-model (vc-rcs-checkout-model (list file))))
-    (vc-rcs-register file rev "")
+    (vc-rcs-register file "")
     (when (eq checkout-model 'implicit)
       (vc-rcs-set-non-strict-locking file))
     (vc-rcs-set-default-branch file (concat rev ".1"))))
@@ -343,7 +288,7 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, 
delete the workfile."
   "Unregister FILE from RCS.
 If this leaves the RCS subdirectory empty, ask the user
 whether to remove it."
-  (let* ((master (vc-name file))
+  (let* ((master (vc-master-name file))
         (dir (file-name-directory master))
         (backup-info (find-backup-file-name master)))
     (if (not backup-info)
@@ -358,27 +303,31 @@ whether to remove it."
         (yes-or-no-p (format "Directory %s is empty; remove it? " dir))
         (delete-directory dir))))
 
-(defun vc-rcs-checkin (files rev comment)
+;; It used to be possible to pass in a value for the variable rev, but
+;; nothing in the rest of VC used this capability.  Removing it makes the
+;; backend interface simpler for all modes.
+;;
+(defun vc-rcs-checkin (files comment)
   "RCS-specific version of `vc-backend-checkin'."
-  (let ((switches (vc-switches 'RCS 'checkin)))
+  (let (rev (switches (vc-switches 'RCS 'checkin)))
     ;; Now operate on the files
-    (dolist (file (vc-expand-dirs files))
+    (dolist (file (vc-expand-dirs files 'RCS))
       (let ((old-version (vc-working-revision file)) new-version
            (default-branch (vc-file-getprop file 'vc-rcs-default-branch)))
        ;; Force branch creation if an appropriate
        ;; default branch has been set.
-       (and (not rev)
-            default-branch
+       (and default-branch
             (string-match (concat "^" (regexp-quote old-version) "\\.")
                           default-branch)
             (setq rev default-branch)
             (setq switches (cons "-f" switches)))
-       (if (and (not rev) old-version)
-           (setq rev (vc-branch-part old-version)))
-       (apply #'vc-do-command "*vc*" 0 "ci" (vc-name file)
+       (if old-version
+           (setq rev (vc-branch-part old-version))
+         (error "can't find current branch"))
+       (apply #'vc-do-command "*vc*" 0 "ci" (vc-master-name file)
               ;; if available, use the secure check-in option
               (and (vc-rcs-release-p "5.6.4") "-j")
-              (concat (if vc-keep-workfiles "-u" "-r") rev)
+              (concat "-u" rev)
               (concat "-m" comment)
               switches)
        (vc-file-setprop file 'vc-working-revision nil)
@@ -407,21 +356,21 @@ whether to remove it."
          (if (not (vc-rcs-release-p "5.6.2"))
              ;; exit status of 1 is also accepted.
              ;; It means that the lock was removed before.
-             (vc-do-command "*vc*" 1 "rcs" (vc-name file)
+             (vc-do-command "*vc*" 1 "rcs" (vc-master-name file)
                             (concat "-u" old-version)))))))))
 
 (defun vc-rcs-find-revision (file rev buffer)
   (apply #'vc-do-command
-        (or buffer "*vc*") 0 "co" (vc-name file)
+        (or buffer "*vc*") 0 "co" (vc-master-name file)
         "-q" ;; suppress diagnostic output
         (concat "-p" rev)
         (vc-switches 'RCS 'checkout)))
 
-(defun vc-rcs-checkout (file &optional editable rev)
+(defun vc-rcs-checkout (file &optional rev)
   "Retrieve a copy of a saved version of FILE.  If FILE is a directory,
 attempt the checkout for all registered files beneath it."
   (if (file-directory-p file)
-      (mapc 'vc-rcs-checkout (vc-expand-dirs (list file)))
+      (mapc 'vc-rcs-checkout (vc-expand-dirs (list file) 'RCS))
     (let ((file-buffer (get-file-buffer file))
          switches)
       (message "Checking out %s..." file)
@@ -444,11 +393,11 @@ attempt the checkout for all registered files beneath it."
                   (vc-rcs-set-default-branch file nil))
              ;; now do the checkout
              (apply #'vc-do-command
-                    "*vc*" 0 "co" (vc-name file)
+                    "*vc*" 0 "co" (vc-master-name file)
                     ;; If locking is not strict, force to overwrite
                     ;; the writable workfile.
                     (if (eq (vc-rcs-checkout-model (list file)) 'implicit) 
"-f")
-                    (if editable "-l")
+                    "-l"
                     (if (stringp rev)
                         ;; a literal revision was specified
                         (concat "-r" rev)
@@ -483,56 +432,44 @@ attempt the checkout for all registered files beneath it."
                    new-version)))))
        (message "Checking out %s...done" file))))))
 
-(defun vc-rcs-rollback (files)
-  "Roll back, undoing the most recent checkins of FILES.  Directories are
-expanded to all registered subfiles in them."
-  (if (not files)
-      (error "RCS backend doesn't support directory-level rollback"))
-  (dolist (file (vc-expand-dirs files))
-         (let* ((discard (vc-working-revision file))
-                (previous (if (vc-rcs-trunk-p discard) "" (vc-branch-part 
discard)))
-                (config (current-window-configuration))
-                (done nil))
-           (if (null (yes-or-no-p (format "Remove version %s from %s history? "
-                                          discard file)))
-               (error "Aborted"))
-           (message "Removing revision %s from %s." discard file)
-           (vc-do-command "*vc*" 0 "rcs" (vc-name file) (concat "-o" discard))
-           ;; Check out the most recent remaining version.  If it
-           ;; fails, because the whole branch got deleted, do a
-           ;; double-take and check out the version where the branch
-           ;; started.
-           (while (not done)
-             (condition-case err
-                 (progn
-                   (vc-do-command "*vc*" 0 "co" (vc-name file) "-f"
-                                  (concat "-u" previous))
-                   (setq done t))
-               (error (set-buffer "*vc*")
-                      (goto-char (point-min))
-                      (if (search-forward "no side branches present for" nil t)
-                          (progn (setq previous (vc-branch-part previous))
-                                 (vc-rcs-set-default-branch file previous)
-                                 ;; vc-do-command popped up a window with
-                                 ;; the error message.  Get rid of it, by
-                                 ;; restoring the old window configuration.
-                                 (set-window-configuration config))
-                        ;; No, it was some other error: re-signal it.
-                        (signal (car err) (cdr err)))))))))
-
 (defun vc-rcs-revert (file &optional _contents-done)
   "Revert FILE to the version it was based on.  If FILE is a directory,
 revert all registered files beneath it."
   (if (file-directory-p file)
-      (mapc 'vc-rcs-revert (vc-expand-dirs (list file)))
-    (vc-do-command "*vc*" 0 "co" (vc-name file) "-f"
+      (mapc 'vc-rcs-revert (vc-expand-dirs (list file) 'RCS))
+    (vc-do-command "*vc*" 0 "co" (vc-master-name file) "-f"
                   (concat (if (eq (vc-state file) 'edited) "-u" "-r")
                           (vc-working-revision file)))))
 
+(defun vc-rcs-merge-file (file)
+  "Accept a file merge request, prompting for revisions."
+  (let* ((first-revision
+        (vc-read-revision
+         (concat "Merge " file " from branch or revision: ")
+         (list file)
+         'RCS))
+        second-revision)
+    (cond
+     ((string= first-revision "")
+      (error "A starting RCS revision is required"))
+     (t
+      (if (not (vc-branch-p first-revision))
+         (setq second-revision
+               (vc-read-revision
+                "Second RCS revision: "
+                (list file) 'RCS nil
+                (concat (vc-branch-part first-revision) ".")))
+       ;; We want to merge an entire branch.  Set revisions
+       ;; accordingly, so that vc-rcs-merge understands us.
+       (setq second-revision first-revision)
+       ;; first-revision must be the starting point of the branch
+       (setq first-revision (vc-branch-part first-revision)))))
+    (vc-rcs-merge file first-revision second-revision)))
+
 (defun vc-rcs-merge (file first-version &optional second-version)
   "Merge changes into current working copy of FILE.
 The changes are between FIRST-VERSION and SECOND-VERSION."
-  (vc-do-command "*vc*" 1 "rcsmerge" (vc-name file)
+  (vc-do-command "*vc*" 1 "rcsmerge" (vc-master-name file)
                 "-kk"                  ; ignore keyword conflicts
                 (concat "-r" first-version)
                 (if second-version (concat "-r" second-version))))
@@ -542,17 +479,32 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
 If FILE is a directory, steal the lock on all registered files beneath it.
 Needs RCS 5.6.2 or later for -M."
   (if (file-directory-p file)
-      (mapc 'vc-rcs-steal-lock (vc-expand-dirs (list file)))
-    (vc-do-command "*vc*" 0 "rcs" (vc-name file) "-M" (concat "-u" rev))
+      (mapc 'vc-rcs-steal-lock (vc-expand-dirs (list file) 'RCS))
+    (vc-do-command "*vc*" 0 "rcs" (vc-master-name file) "-M" (concat "-u" rev))
     ;; Do a real checkout after stealing the lock, so that we see
     ;; expanded headers.
-    (vc-do-command "*vc*" 0 "co" (vc-name file) "-f" (concat "-l" rev))))
+    (vc-do-command "*vc*" 0 "co" (vc-master-name file) "-f" (concat "-l" rev))
+    ;; Must clear any headers here because they wouldn't
+    ;; show that the file is locked now.
+    (let* ((filename (or file buffer-file-name))
+          (visited (find-buffer-visiting filename)))
+      (if visited
+         (let ((context (vc-buffer-context)))
+           ;; save-excursion may be able to relocate point and mark
+           ;; properly.  If it fails, vc-restore-buffer-context
+           ;; will give it a second try.
+           (save-excursion
+             (vc-rcs-clear-headers))
+           (vc-restore-buffer-context context))
+       (set-buffer (find-file-noselect filename))
+       (vc-rcs-clear-headers)
+       (kill-buffer filename)))))
 
 (defun vc-rcs-modify-change-comment (files rev comment)
   "Modify the change comments change on FILES on a specified REV.  If FILE is a
 directory the operation is applied to all registered files beneath it."
-  (dolist (file (vc-expand-dirs files))
-    (vc-do-command "*vc*" 0 "rcs" (vc-name file)
+  (dolist (file (vc-expand-dirs files 'RCS))
+    (vc-do-command "*vc*" 0 "rcs" (vc-master-name file)
                   (concat "-m" rev ":" comment))))
 
 
@@ -578,16 +530,16 @@ Remaining arguments are ignored.
 If FILE is a directory the operation is applied to all registered
 files beneath it."
   (vc-do-command (or buffer "*vc*") 0 "rlog"
-                 (mapcar 'vc-name (vc-expand-dirs files)))
+                 (mapcar 'vc-master-name (vc-expand-dirs files 'RCS)))
   (with-current-buffer (or buffer "*vc*")
     (vc-rcs-print-log-cleanup))
   (when limit 'limit-unsupported))
 
-(defun vc-rcs-diff (files &optional oldvers newvers buffer)
+(defun vc-rcs-diff (files &optional oldvers newvers buffer async)
   "Get a difference report using RCS between two sets of files."
   (apply #'vc-do-command (or buffer "*vc-diff*")
-        1              ;; Always go synchronous, the repo is local
-        "rcsdiff" (vc-expand-dirs files)
+        (if async 'async 1)
+        "rcsdiff" (vc-expand-dirs files 'RCS)
          (append (list "-q"
                        (and oldvers (concat "-r" oldvers))
                        (and newvers (concat "-r" newvers)))
@@ -841,7 +793,7 @@ systime, or nil if there is none.  Also, reposition point."
       (vc-file-tree-walk
        dir
        (lambda (f)
-        (vc-do-command "*vc*" 0 "rcs" (vc-name f) (concat "-n" name ":")))))))
+        (vc-do-command "*vc*" 0 "rcs" (vc-master-name f) (concat "-n" name 
":")))))))
 
 
 ;;;
@@ -961,7 +913,7 @@ Uses `rcs2log' which only works for RCS and CVS."
 \\(: [\t -#%-\176\240-\377]*\\)?\\$" nil t)))
 
 (defun vc-rcs-clear-headers ()
-  "Implementation of vc-clear-headers for RCS."
+  "Clear RCS header value parts."
   (let ((case-fold-search nil))
     (goto-char (point-min))
     (while (re-search-forward
@@ -970,11 +922,11 @@ Uses `rcs2log' which only works for RCS and CVS."
             nil t)
       (replace-match "$\\1$"))))
 
-(autoload 'vc-rename-master "vc")
+(autoload 'vc-rename-master "vc-filewise")
 
 (defun vc-rcs-rename-file (old new)
   ;; Just move the master file (using vc-rcs-master-templates).
-  (vc-rename-master (vc-name old) new vc-rcs-master-templates))
+  (vc-rename-master (vc-master-name old) new vc-rcs-master-templates))
 
 (defun vc-rcs-find-file-hook ()
   ;; If the file is locked by some other user, make
@@ -993,7 +945,7 @@ Uses `rcs2log' which only works for RCS and CVS."
 This likely means that FILE has been changed with respect
 to its master version."
   (let ((file-time (nth 5 (file-attributes file)))
-       (master-time (nth 5 (file-attributes (vc-name file)))))
+       (master-time (nth 5 (file-attributes (vc-master-name file)))))
     (or (> (nth 0 file-time) (nth 0 master-time))
        (and (= (nth 0 file-time) (nth 0 master-time))
             (> (nth 1 file-time) (nth 1 master-time))))))
@@ -1020,10 +972,10 @@ This function sets the properties `vc-working-revision' 
and
 `vc-checkout-model' to their correct values, based on the master
 file."
   (with-temp-buffer
-    (if (or (not (vc-insert-file (vc-name file) "^[0-9]"))
+    (if (or (not (vc-insert-file (vc-master-name file) "^[0-9]"))
             (progn (goto-char (point-min))
                    (not (looking-at "^head[ \t\n]+[^;]+;$"))))
-        (error "File %s is not an RCS master file" (vc-name file)))
+        (error "File %s is not an RCS master file" (vc-master-name file)))
     (let ((workfile-is-latest nil)
          (default-branch (vc-parse-buffer "^branch[ \t\n]+\\([^;]*\\);" 1)))
       (vc-file-setprop file 'vc-rcs-default-branch default-branch)
@@ -1043,7 +995,7 @@ file."
                        default-branch)
          (setq working-revision default-branch))
         ;; else, search for the head of the default branch
-        (t (vc-insert-file (vc-name file) "^desc")
+        (t (vc-insert-file (vc-master-name file) "^desc")
            (setq working-revision
                  (vc-rcs-find-most-recent-rev default-branch))
            (setq workfile-is-latest t)))
@@ -1096,7 +1048,7 @@ Returns: nil            if no headers were found
          'rev-and-lock  if revision and lock info was found"
   (cond
    ((not (get-file-buffer file)) nil)
-   ((let (status version locking-user)
+   ((let (status version)
       (with-current-buffer (get-file-buffer file)
         (save-excursion
           (goto-char (point-min))
@@ -1122,11 +1074,11 @@ Returns: nil            if no headers were found
               (cond
                ;; unlocked revision
                ((looking-at "\\$")
-                (setq locking-user 'none)
+                ;;(setq locking-user 'none)
                 (setq status 'rev-and-lock))
                ;; revision is locked by some user
                ((looking-at "\\([^ ]+\\) \\$")
-                (setq locking-user (match-string-no-properties 1))
+                ;;(setq locking-user (match-string-no-properties 1))
                 (setq status 'rev-and-lock))
                ;; everything else: false
                (nil)))
@@ -1144,39 +1096,19 @@ Returns: nil            if no headers were found
             (goto-char (point-min))
             (if (re-search-forward (concat "\\$" "Locker:") nil t)
                 (cond ((looking-at " \\([^ ]+\\) \\$")
-                       (setq locking-user (match-string-no-properties 1))
+                       ;;(setq locking-user (match-string-no-properties 1))
                        (setq status 'rev-and-lock))
                       ((looking-at " *\\$")
-                       (setq locking-user 'none)
+                       ;;(setq locking-user 'none)
                        (setq status 'rev-and-lock))
                       (t
-                       (setq locking-user 'none)
+                       ;;(setq locking-user 'none)
                        (setq status 'rev-and-lock)))
               (setq status 'rev)))
            ;; else: nothing found
            ;; -------------------
            (t nil))))
      (if status (vc-file-setprop file 'vc-working-revision version))
-     (and (eq status 'rev-and-lock)
-         (vc-file-setprop file 'vc-state
-                          (cond
-                           ((eq locking-user 'none) 'up-to-date)
-                           ((string= locking-user (vc-user-login-name file))
-                             'edited)
-                           (t locking-user)))
-         ;; If the file has headers, we don't want to query the
-         ;; master file, because that would eliminate all the
-         ;; performance gain the headers brought us.  We therefore
-         ;; use a heuristic now to find out whether locking is used
-         ;; for this file.  If we trust the file permissions, and the
-         ;; file is not locked, then if the file is read-only we
-          ;; assume that locking is used for the file, otherwise
-          ;; locking is not used.
-         (not (vc-mistrust-permissions file))
-         (vc-up-to-date-p file)
-         (if (string-match ".r-..-..-." (nth 8 (file-attributes file)))
-             (vc-file-setprop file 'vc-checkout-model 'locking)
-           (vc-file-setprop file 'vc-checkout-model 'implicit)))
      status))))
 
 (defun vc-release-greater-or-equal (r1 r2)
@@ -1234,7 +1166,7 @@ variable `vc-rcs-release' is set to the returned value."
   (set-file-modes file (logior (file-modes file) 128)))
 
 (defun vc-rcs-set-default-branch (file branch)
-  (vc-do-command "*vc*" 0 "rcs" (vc-name file) (concat "-b" branch))
+  (vc-do-command "*vc*" 0 "rcs" (vc-master-name file) (concat "-b" branch))
   (vc-file-setprop file 'vc-rcs-default-branch branch))
 
 (defun vc-rcs-parse (&optional buffer)
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index fb7d959..1b959e2 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -1,6 +1,6 @@
 ;;; vc-sccs.el --- support for SCCS version-control  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2015 Free Software Foundation, Inc.
 
 ;; Author:     FSF (see vc.el for full credits)
 ;; Maintainer: Andre Spiegel <address@hidden>
@@ -124,7 +124,7 @@ For a description of possible values, see 
`vc-check-master-templates'."
                 (working-revision (vc-working-revision file))
                 (locking-user (cdr (assoc working-revision locks))))
            (if (not locking-user)
-               (if (vc-workfile-unchanged-p file)
+               (if (vc-sccs-workfile-unchanged-p file)
                    'up-to-date
                  'unlocked-changes)
              (if (string= locking-user (vc-user-login-name file))
@@ -132,41 +132,12 @@ For a description of possible values, see 
`vc-check-master-templates'."
                locking-user)))
        'up-to-date))))
 
-(defun vc-sccs-state-heuristic (file)
-  "SCCS-specific state heuristic."
-  (if (not (vc-mistrust-permissions file))
-      ;;   This implementation assumes that any file which is under version
-      ;; control and has -rw-r--r-- is locked by its owner.  This is true
-      ;; for both RCS and SCCS, which keep unlocked files at -r--r--r--.
-      ;; We have to be careful not to exclude files with execute bits on;
-      ;; scripts can be under version control too.  Also, we must ignore the
-      ;; group-read and other-read bits, since paranoid users turn them off.
-      (let* ((attributes  (file-attributes file 'string))
-             (owner-name  (nth 2 attributes))
-             (permissions (nth 8 attributes)))
-       (if (string-match ".r-..-..-." permissions)
-            'up-to-date
-          (if (string-match ".rw..-..-." permissions)
-              (if (file-ownership-preserved-p file)
-                  'edited
-                owner-name)
-            ;; Strange permissions.
-            ;; Fall through to real state computation.
-            (vc-sccs-state file))))
-    (vc-sccs-state file)))
-
 (autoload 'vc-expand-dirs "vc")
 
-(defun vc-sccs-dir-status (dir update-function)
-  ;; FIXME: this function should be rewritten, using `vc-expand-dirs'
-  ;; is not TRTD because it returns files from multiple backends.
-  ;; It should also return 'unregistered files.
-
-  ;; Doing lots of individual VC-state calls is painful, but
-  ;; there is no better option in SCCS-land.
-  (let ((flist (vc-expand-dirs (list dir)))
-       (result nil))
-    (dolist (file flist)
+(defun vc-sccs-dir-status-files (dir files update-function)
+  (if (not files) (setq files (vc-expand-dirs (list dir) 'RCS)))
+  (let ((result nil))
+    (dolist (file files)
       (let ((state (vc-state file))
            (frel (file-relative-name file)))
        (when (and (eq (vc-backend file) 'SCCS)
@@ -174,6 +145,8 @@ For a description of possible values, see 
`vc-check-master-templates'."
          (push (list frel state) result))))
     (funcall update-function result)))
 
+(autoload 'vc-master-name "vc-filewise")
+
 (defun vc-sccs-working-revision (file)
   "SCCS-specific version of `vc-working-revision'."
   (with-temp-buffer
@@ -181,7 +154,7 @@ For a description of possible values, see 
`vc-check-master-templates'."
     ;; To find this number, search the entire delta table,
     ;; rather than just the first entry, because the
     ;; first entry might be a deleted ("R") revision.
-    (vc-insert-file (vc-name file) "^\001e\n\001[^s]")
+    (vc-insert-file (vc-master-name file) "^\001e\n\001[^s]")
     (vc-parse-buffer "^\001d D \\([^ ]+\\)" 1)))
 
 ;; Cf vc-sccs-find-revision.
@@ -189,13 +162,13 @@ For a description of possible values, see 
`vc-check-master-templates'."
   "Write the SCCS version of input file FILE to output file OUTFILE.
 Optional string REV is a revision."
   (with-temp-buffer
-    (apply 'vc-sccs-do-command t 0 "get" (vc-name file)
+    (apply 'vc-sccs-do-command t 0 "get" (vc-master-name file)
           (append '("-s" "-p" "-k") ; -k: no keyword expansion
                   (if rev (list (concat "-r" rev)))))
     (write-region nil nil outfile nil 'silent)))
 
 (defun vc-sccs-workfile-unchanged-p (file)
-  "SCCS-specific implementation of `vc-workfile-unchanged-p'."
+  "Has FILE remained unchanged since last checkout?"
   (let ((tempfile (make-temp-file "vc-sccs")))
     (unwind-protect
        (progn
@@ -220,31 +193,26 @@ Optional string REV is a revision."
 
 (autoload 'vc-switches "vc")
 
-(defun vc-sccs-register (files &optional rev comment)
+(defun vc-sccs-register (files &optional comment)
   "Register FILES into the SCCS version-control system.
-REV is the optional revision number for the file.  COMMENT can be used
-to provide an initial description of FILES.
+Automatically retrieve a read-only version of the files with keywords expanded.
+COMMENT can be used to provide an initial description of FILES.
 Passes either `vc-sccs-register-switches' or `vc-register-switches'
-to the SCCS command.
-
-Automatically retrieve a read-only version of the files with keywords
-expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
+to the SCCS command."
   (dolist (file files)
     (let* ((dirname (or (file-name-directory file) ""))
           (basename (file-name-nondirectory file))
           (project-file (vc-sccs-search-project-dir dirname basename)))
-      (let ((vc-name
+      (let ((vc-master-name
             (or project-file
                 (format (car vc-sccs-master-templates) dirname basename))))
-       (apply 'vc-sccs-do-command nil 0 "admin" vc-name
-              (and rev (not (string= rev "")) (concat "-r" rev))
+       (apply 'vc-sccs-do-command nil 0 "admin" vc-master-name
               "-fb"
               (concat "-i" (file-relative-name file))
               (and comment (concat "-y" comment))
               (vc-switches 'SCCS 'register)))
       (delete-file file)
-      (if vc-keep-workfiles
-         (vc-sccs-do-command nil 0 "get" (vc-name file))))))
+      (vc-sccs-do-command nil 0 "get" (vc-master-name file)))))
 
 (defun vc-sccs-responsible-p (file)
   "Return non-nil if SCCS thinks it would be responsible for registering FILE."
@@ -253,19 +221,17 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, 
delete the workfile."
       (stringp (vc-sccs-search-project-dir (or (file-name-directory file) "")
                                           (file-name-nondirectory file)))))
 
-(defun vc-sccs-checkin (files rev comment)
+(defun vc-sccs-checkin (files comment)
   "SCCS-specific version of `vc-backend-checkin'."
-  (dolist (file (vc-expand-dirs files))
-    (apply 'vc-sccs-do-command nil 0 "delta" (vc-name file)
-          (if rev (concat "-r" rev))
+  (dolist (file (vc-expand-dirs files 'SCCS))
+    (apply 'vc-sccs-do-command nil 0 "delta" (vc-master-name file)
           (concat "-y" comment)
           (vc-switches 'SCCS 'checkin))
-    (if vc-keep-workfiles
-       (vc-sccs-do-command nil 0 "get" (vc-name file)))))
+       (vc-sccs-do-command nil 0 "get" (vc-master-name file))))
 
 (defun vc-sccs-find-revision (file rev buffer)
   (apply 'vc-sccs-do-command
-        buffer 0 "get" (vc-name file)
+        buffer 0 "get" (vc-master-name file)
         "-s" ;; suppress diagnostic output
         "-p"
         (and rev
@@ -273,13 +239,13 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, 
delete the workfile."
                      (vc-sccs-lookup-triple file rev)))
         (vc-switches 'SCCS 'checkout)))
 
-(defun vc-sccs-checkout (file &optional editable rev)
+(defun vc-sccs-checkout (file &optional rev)
   "Retrieve a copy of a saved revision of SCCS controlled FILE.
 If FILE is a directory, all version-controlled files beneath are checked out.
 EDITABLE non-nil means that the file should be writable and
 locked.  REV is the revision to check out."
   (if (file-directory-p file)
-      (mapc 'vc-sccs-checkout (vc-expand-dirs (list file)))
+      (mapc 'vc-sccs-checkout (vc-expand-dirs (list file) 'SCCS))
     (let ((file-buffer (get-file-buffer file))
          switches)
       (message "Checking out %s..." file)
@@ -299,35 +265,19 @@ locked.  REV is the revision to check out."
            (and rev (or (string= rev "")
                         (not (stringp rev)))
                 (setq rev nil))
-           (apply 'vc-sccs-do-command nil 0 "get" (vc-name file)
-                  (if editable "-e")
+           (apply 'vc-sccs-do-command nil 0 "get" (vc-master-name file)
+                  "-e"
                   (and rev (concat "-r" (vc-sccs-lookup-triple file rev)))
                   switches))))
       (message "Checking out %s...done" file))))
 
-(defun vc-sccs-rollback (files)
-  "Roll back, undoing the most recent checkins of FILES.  Directories
-are expanded to all version-controlled subfiles."
-  (setq files (vc-expand-dirs files))
-  (if (not files)
-      (error "SCCS backend doesn't support directory-level rollback"))
-  (dolist (file files)
-         (let ((discard (vc-working-revision file)))
-           (if (null (yes-or-no-p (format "Remove version %s from %s history? "
-                                          discard file)))
-               (error "Aborted"))
-           (message "Removing revision %s from %s..." discard file)
-           (vc-sccs-do-command nil 0 "rmdel"
-                                (vc-name file) (concat "-r" discard))
-           (vc-sccs-do-command nil 0 "get" (vc-name file) nil))))
-
 (defun vc-sccs-revert (file &optional _contents-done)
   "Revert FILE to the version it was based on. If FILE is a directory,
 revert all subfiles."
   (if (file-directory-p file)
-      (mapc 'vc-sccs-revert (vc-expand-dirs (list file)))
-    (vc-sccs-do-command nil 0 "unget" (vc-name file))
-    (vc-sccs-do-command nil 0 "get" (vc-name file))
+      (mapc 'vc-sccs-revert (vc-expand-dirs (list file) 'SCCS))
+    (vc-sccs-do-command nil 0 "unget" (vc-master-name file))
+    (vc-sccs-do-command nil 0 "get" (vc-master-name file))
     ;; Checking out explicit revisions is not supported under SCCS, yet.
     ;; We always "revert" to the latest revision; therefore
     ;; vc-working-revision is cleared here so that it gets recomputed.
@@ -336,16 +286,16 @@ revert all subfiles."
 (defun vc-sccs-steal-lock (file &optional rev)
   "Steal the lock on the current workfile for FILE and revision REV."
   (if (file-directory-p file)
-      (mapc 'vc-sccs-steal-lock (vc-expand-dirs (list file)))
+      (mapc 'vc-sccs-steal-lock (vc-expand-dirs (list file) 'SCCS))
     (vc-sccs-do-command nil 0 "unget"
-                       (vc-name file) "-n" (if rev (concat "-r" rev)))
+                       (vc-master-name file) "-n" (if rev (concat "-r" rev)))
     (vc-sccs-do-command nil 0 "get"
-                       (vc-name file) "-g" (if rev (concat "-r" rev)))))
+                       (vc-master-name file) "-g" (if rev (concat "-r" rev)))))
 
 (defun vc-sccs-modify-change-comment (files rev comment)
   "Modify (actually, append to) the change comments for FILES on a specified 
REV."
-  (dolist (file (vc-expand-dirs files))
-    (vc-sccs-do-command nil 0 "cdc" (vc-name file)
+  (dolist (file (vc-expand-dirs files 'SCCS))
+    (vc-sccs-do-command nil 0 "cdc" (vc-master-name file)
                         (concat "-y" comment) (concat "-r" rev))))
 
 
@@ -356,8 +306,8 @@ revert all subfiles."
 (defun vc-sccs-print-log (files buffer &optional _shortlog 
_start-revision-ignored limit)
   "Print commit log associated with FILES into specified BUFFER.
 Remaining arguments are ignored."
-  (setq files (vc-expand-dirs files))
-  (vc-sccs-do-command buffer 0 "prs" (mapcar 'vc-name files))
+  (setq files (vc-expand-dirs files 'SCCS))
+  (vc-sccs-do-command buffer 0 "prs" (mapcar 'vc-master-name files))
   (when limit 'limit-unsupported))
 
 (autoload 'vc-setup-buffer "vc-dispatcher")
@@ -366,9 +316,9 @@ Remaining arguments are ignored."
 (defvar w32-quote-process-args)
 
 ;; FIXME use sccsdiff if present?
-(defun vc-sccs-diff (files &optional oldvers newvers buffer)
+(defun vc-sccs-diff (files &optional oldvers newvers buffer _async)
   "Get a difference report using SCCS between two filesets."
-  (setq files (vc-expand-dirs files))
+  (setq files (vc-expand-dirs files 'SCCS))
   (setq oldvers (vc-sccs-lookup-triple (car files) oldvers))
   (setq newvers (vc-sccs-lookup-triple (car files) newvers))
   (or buffer (setq buffer "*vc-diff*"))
@@ -472,16 +422,16 @@ Remaining arguments are ignored."
     (goto-char (point-min))
     (re-search-forward  "%[A-Z]%" nil t)))
 
-(autoload 'vc-rename-master "vc")
+(autoload 'vc-rename-master "vc-filewise")
 
 (defun vc-sccs-rename-file (old new)
   ;; Move the master file (using vc-rcs-master-templates).
-  (vc-rename-master (vc-name old) new vc-sccs-master-templates)
+  (vc-rename-master (vc-master-name old) new vc-sccs-master-templates)
   ;; Update the tag file.
   (with-current-buffer
       (find-file-noselect
        (expand-file-name vc-sccs-name-assoc-file
-                        (file-name-directory (vc-name old))))
+                        (file-name-directory (vc-master-name old))))
     (goto-char (point-min))
     ;; (replace-regexp (concat ":" (regexp-quote old) "$") (concat ":" new))
     (while (re-search-forward (concat ":" (regexp-quote old) "$") nil t)
@@ -525,7 +475,7 @@ find any project directory."
 
 (defun vc-sccs-lock-file (file)
   "Generate lock file name corresponding to FILE."
-  (let ((master (vc-name file)))
+  (let ((master (vc-master-name file)))
     (and
      master
      (string-match "\\(.*/\\)\\(s\\.\\)\\(.*\\)" master)
@@ -547,7 +497,7 @@ The result is a list of the form ((REVISION . USER) 
(REVISION . USER) ...)."
   (with-current-buffer
       (find-file-noselect
        (expand-file-name vc-sccs-name-assoc-file
-                        (file-name-directory (vc-name file))))
+                        (file-name-directory (vc-master-name file))))
     (goto-char (point-max))
     (insert name "\t:\t" file "\t" rev "\n")
     (basic-save-buffer)
@@ -563,7 +513,7 @@ If NAME is nil or a revision number string it's just passed 
through."
     (with-temp-buffer
       (vc-insert-file
        (expand-file-name vc-sccs-name-assoc-file
-                        (file-name-directory (vc-name file))))
+                        (file-name-directory (vc-master-name file))))
       (vc-parse-buffer (concat name "\t:\t" file "\t\\(.+\\)") 1))))
 
 (provide 'vc-sccs)
diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el
new file mode 100644
index 0000000..f497f95
--- /dev/null
+++ b/lisp/vc/vc-src.el
@@ -0,0 +1,313 @@
+;;; vc-src.el --- support for SRC version-control  -*- lexical-binding:t -*-
+
+;; Copyright (C) 1992-2015 Free Software Foundation, Inc.
+
+;; Author:     FSF (see vc.el for full credits)
+;; Maintainer: Eric S. Raymond <address@hidden>
+;; Package: vc
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; See vc.el.  SRC requires an underlying RCS version of 4.0 or greater.
+
+;; FUNCTION NAME                               STATUS
+;; BACKEND PROPERTIES
+;; * revision-granularity                      OK
+;; STATE-QUERYING FUNCTIONS
+;; * registered (file)                         OK
+;; * state (file)                              OK
+;; - dir-status-files (dir files uf)           OK
+;; - dir-extra-headers (dir)                   NOT NEEDED
+;; - dir-printer (fileinfo)                    ??
+;; * working-revision (file)                   OK
+;; * checkout-model (files)                    OK
+;; - mode-line-string (file)                   NOT NEEDED
+;; STATE-CHANGING FUNCTIONS
+;; * register (files &optional rev comment)    OK
+;; * create-repo ()                            OK
+;; * responsible-p (file)                      OK
+;; - receive-file (file rev)                   NOT NEEDED
+;; - unregister (file)                         NOT NEEDED
+;; * checkin (files comment)                   OK
+;; * find-revision (file rev buffer)           OK
+;; * checkout (file &optional rev)             OK
+;; * revert (file &optional contents-done)     OK
+;; - merge (file rev1 rev2)                    NOT NEEDED
+;; - merge-news (file)                         NOT NEEDED
+;; - steal-lock (file &optional revision)      NOT NEEDED
+;; HISTORY FUNCTIONS
+;; * print-log (files buffer &optional shortlog start-revision limit) OK
+;; - log-view-mode ()                          ??
+;; - show-log-entry (revision)                 NOT NEEDED
+;; - comment-history (file)                    NOT NEEDED
+;; - update-changelog (files)                  NOT NEEDED
+;; * diff (files &optional rev1 rev2 buffer)   OK
+;; - revision-completion-table (files)         ??
+;; - annotate-command (file buf &optional rev) ??
+;; - annotate-time ()                          ??
+;; - annotate-current-time ()                  NOT NEEDED
+;; - annotate-extract-revision-at-line ()      ??
+;; TAG SYSTEM
+;; - create-tag (dir name branchp)             ??
+;; - retrieve-tag (dir name update)            ??
+;; MISCELLANEOUS
+;; - make-version-backups-p (file)             ??
+;; - previous-revision (file rev)              ??
+;; - next-revision (file rev)                  ??
+;; - check-headers ()                          ??
+;; - delete-file (file)                        ??
+;; * rename-file (old new)                     OK
+;; - find-file-hook ()                         NOT NEEDED
+
+
+;;; Code:
+
+;;;
+;;; Customization options
+;;;
+
+(eval-when-compile
+  (require 'cl-lib)
+  (require 'vc))
+
+(defgroup vc-src nil
+  "VC SRC backend."
+  :version "25.1"
+  :group 'vc)
+
+(defcustom vc-src-release nil
+  "The release number of your SRC installation, as a string.
+If nil, VC itself computes this value when it is first needed."
+  :type '(choice (const :tag "Auto" nil)
+                (string :tag "Specified")
+                (const :tag "Unknown" unknown))
+  :group 'vc-src)
+
+(defcustom vc-src-program "src"
+  "Name of the SRC executable (excluding any arguments)."
+  :type 'string
+  :group 'vc-src)
+
+(defcustom vc-src-diff-switches nil
+  "String or list of strings specifying switches for SRC diff under VC.
+If nil, use the value of `vc-diff-switches'.  If t, use no switches."
+  :type '(choice (const :tag "Unspecified" nil)
+                 (const :tag "None" t)
+                (string :tag "Argument String")
+                (repeat :tag "Argument List" :value ("") string))
+  :group 'vc-src)
+
+;; This needs to be autoloaded because vc-src-registered uses it (via
+;; vc-default-registered), and vc-hooks needs to be able to check
+;; for a registered backend without loading every backend.
+;;;###autoload
+(defcustom vc-src-master-templates
+  (purecopy '("%s.src/%s,v"))
+  "Where to look for SRC master files.
+For a description of possible values, see `vc-check-master-templates'."
+  :type '(choice (const :tag "Use standard SRC file names"
+                       '("%s.src/%s,v"))
+                (repeat :tag "User-specified"
+                        (choice string
+                                function)))
+  :group 'vc-src)
+
+
+;;; Properties of the backend
+
+(defun vc-src-revision-granularity () 'file)
+(defun vc-src-checkout-model (_files) 'implicit)
+
+;;;
+;;; State-querying functions
+;;;
+
+;; The autoload cookie below places vc-src-registered directly into
+;; loaddefs.el, so that vc-src.el does not need to be loaded for
+;; every file that is visited.
+;;;###autoload
+(progn
+(defun vc-src-registered (f) (vc-default-registered 'src f)))
+
+(defun vc-src-state (file)
+  "SRC-specific version of `vc-state'."
+  (let*
+      ((status nil)
+       (default-directory (file-name-directory file))
+       (out
+       (with-output-to-string
+         (with-current-buffer
+             standard-output
+           (setq status
+                 ;; Ignore all errors.
+                 (condition-case nil
+                     (process-file
+                      vc-src-program nil t nil
+                      "status" "-a" (file-relative-name file))
+                   (error nil)))))))
+    (when (eq 0 status)
+      (when (null (string-match "does not exist or is unreadable" out))
+       (let ((state (aref out 0)))
+         (cond
+          ;; FIXME: What to do about A and L codes?
+          ((eq state ?.) 'up-to-date)
+          ((eq state ?A) 'added)
+          ((eq state ?M) 'edited)
+          ((eq state ?I) 'ignored)
+          ((eq state ?R) 'removed)
+          ((eq state ?!) 'missing)
+          ((eq state ??) 'unregistered)
+          (t 'up-to-date)))))))
+
+(autoload 'vc-expand-dirs "vc")
+
+(defun vc-src-dir-status-files (dir files update-function)
+  ;; FIXME: Use one src status -a call for this
+  (if (not files) (setq files (vc-expand-dirs (list dir) 'RCS)))
+  (let ((result nil))
+    (dolist (file files)
+      (let ((state (vc-state file))
+           (frel (file-relative-name file)))
+       (when (and (eq (vc-backend file) 'SRC)
+                  (not (eq state 'up-to-date)))
+         (push (list frel state) result))))
+    (funcall update-function result)))
+
+(defun vc-src-command (buffer file-or-list &rest flags)
+  "A wrapper around `vc-do-command' for use in vc-src.el.
+This function differs from vc-do-command in that it invokes `vc-src-program'."
+  (let (file-list)
+    (cond ((stringp file-or-list)
+          (setq file-list (list "--" file-or-list)))
+         (file-or-list
+          (setq file-list (cons "--" file-or-list))))
+    (apply 'vc-do-command (or buffer "*vc*") 0 vc-src-program file-list 
flags)))
+
+(defun vc-src-working-revision (file)
+  "SRC-specific version of `vc-working-revision'."
+  (or (ignore-errors
+        (with-output-to-string
+          (vc-src-command standard-output file "list" "-f{1}" "@")))
+      "0"))
+
+;;;
+;;; State-changing functions
+;;;
+
+(defun vc-src-create-repo ()
+  "Create a new SRC repository."
+  ;; SRC is totally file-oriented, so all we have to do is make the directory.
+  (make-directory ".src"))
+
+(autoload 'vc-switches "vc")
+
+(defun vc-src-register (files &optional _comment)
+  "Register FILES under src. COMMENT is ignored."
+  (vc-src-command nil files "add"))
+
+(defun vc-src-responsible-p (file)
+  "Return non-nil if SRC thinks it would be responsible for registering FILE."
+  (file-directory-p (expand-file-name ".src"
+                                      (if (file-directory-p file)
+                                          file
+                                        (file-name-directory file)))))
+
+(defun vc-src-checkin (files comment)
+  "SRC-specific version of `vc-backend-checkin'.
+REV is ignored."
+  (vc-src-command nil files "commit" "-m" comment))
+
+(defun vc-src-find-revision (file rev buffer)
+  (let ((coding-system-for-read 'binary)
+        (coding-system-for-write 'binary))
+    (if rev
+        (vc-src-command buffer file "cat" rev)
+      (vc-src-command buffer file "cat"))))
+
+(defun vc-src-checkout (file &optional rev)
+  "Retrieve a revision of FILE.
+REV is the revision to check out into WORKFILE."
+  (if rev
+      (vc-src-command nil file "co" rev)
+    (vc-src-command nil file "co")))
+
+(defun vc-src-revert (file &optional _contents-done)
+  "Revert FILE to the version it was based on.  If FILE is a directory,
+revert all registered files beneath it."
+  (if (file-directory-p file)
+      (mapc 'vc-src-revert (vc-expand-dirs (list file) 'SRC))
+    (vc-src-command nil file "co")))
+
+(defun vc-src-modify-change-comment (files rev comment)
+  "Modify the change comments change on FILES on a specified REV.  If FILE is a
+directory the operation is applied to all registered files beneath it."
+  (dolist (file (vc-expand-dirs files 'SRC))
+    (vc-src-command nil file "amend" "-m" comment rev)))
+
+;; History functions
+
+(defcustom vc-src-log-switches nil
+  "String or list of strings specifying switches for src log under VC."
+  :type '(choice (const :tag "None" nil)
+                 (string :tag "Argument String")
+                 (repeat :tag "Argument List" :value ("") string))
+  :group 'vc-src)
+
+(defun vc-src-print-log (files buffer &optional shortlog _start-revision limit)
+  "Print commit log associated with FILES into specified BUFFER.
+If SHORTLOG is non-nil, use the list method.
+If START-REVISION is non-nil, it is the newest revision to show.
+If LIMIT is non-nil, show no more than this many entries."
+  ;; FIXME: Implement the range restrictions.
+  ;; `vc-do-command' creates the buffer, but we need it before running
+  ;; the command.
+  (vc-setup-buffer buffer)
+  ;; If the buffer exists from a previous invocation it might be
+  ;; read-only.
+  (let ((inhibit-read-only t))
+    (with-current-buffer
+       buffer
+      (apply 'vc-src-command buffer files (if shortlog "list" "log")
+            (nconc
+             ;;(when start-revision (list (format "%s-1" start-revision)))
+             (when limit (list "-l" (format "%s" limit)))
+             vc-src-log-switches)))))
+
+(defun vc-src-diff (files &optional oldvers newvers buffer _async)
+  "Get a difference report using src between two revisions of FILES."
+  (let* ((firstfile (car files))
+         (working (and firstfile (vc-working-revision firstfile))))
+    (when (and (equal oldvers working) (not newvers))
+      (setq oldvers nil))
+    (when (and (not oldvers) newvers)
+      (setq oldvers working))
+    (apply #'vc-src-command (or buffer "*vc-diff*") files "diff"
+          (when oldvers
+            (if newvers
+                (list (concat oldvers "-" newvers))
+              (list oldvers))))))
+
+;; Miscellaneous
+
+(defun vc-src-rename-file (old new)
+  "Rename file from OLD to NEW using `src mv'."
+  (vc-src-command nil 0 new "mv" old))
+
+(provide 'vc-src)
+
+;;; vc-src.el ends here
diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el
index c7568e4..d74daf9 100644
--- a/lisp/vc/vc-svn.el
+++ b/lisp/vc/vc-svn.el
@@ -1,6 +1,6 @@
 ;;; vc-svn.el --- non-resident support for Subversion version-control  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  Stefan Monnier <address@hidden>
@@ -135,6 +135,7 @@ If you want to force an empty list of arguments, use t."
 
 (defun vc-svn-registered (file)
   "Check if FILE is SVN registered."
+  (setq file (expand-file-name file))
   (when (vc-svn-root file)
     (with-temp-buffer
       (cd (file-name-directory file))
@@ -153,36 +154,17 @@ If you want to force an empty list of arguments, use t."
          (let ((parsed (vc-svn-parse-status file)))
            (and parsed (not (memq parsed '(ignored unregistered))))))))))
 
-(defun vc-svn-state (file &optional localp)
+(defun vc-svn-state (file)
   "SVN-specific version of `vc-state'."
   (let (process-file-side-effects)
-    (setq localp (or localp (vc-stay-local-p file 'SVN)))
     (with-temp-buffer
       (cd (file-name-directory file))
-      (vc-svn-command t 0 file "status" (if localp "-v" "-u"))
+      (vc-svn-command t 0 file "status" "-v")
       (vc-svn-parse-status file))))
 
-;; NB this does not handle svn properties, which can be changed
-;; without changing the file timestamp.
-;; Note that unlike vc-cvs-state-heuristic, this is not called from
-;; vc-svn-state.  AFAICS, it is only called from vc-state-refresh via
-;; vc-after-save (bug#7850).  Therefore the fact that it ignores
-;; properties is irrelevant.  If you want to make vc-svn-state call
-;; this, it should be extended to handle svn properties.
-(defun vc-svn-state-heuristic (file)
-  "SVN-specific state heuristic."
-  ;; If the file has not changed since checkout, consider it `up-to-date'.
-  ;; Otherwise consider it `edited'.  Copied from vc-cvs-state-heuristic.
-  (let ((checkout-time (vc-file-getprop file 'vc-checkout-time))
-        (lastmod (nth 5 (file-attributes file))))
-    (cond
-     ((equal checkout-time lastmod) 'up-to-date)
-     ((string= (vc-working-revision file) "0") 'added)
-     ((null checkout-time) 'unregistered)
-     (t 'edited))))
-
 ;; FIXME it would be better not to have the "remote" argument,
 ;; but to distinguish the two output formats based on content.
+;; FIXME: the local format isn't used by the (sole) caller anymore.
 (defun vc-svn-after-dir-status (callback &optional remote)
   (let ((state-map '((?A . added)
                      (?C . conflict)
@@ -215,29 +197,19 @@ If you want to force an empty list of arguments, use t."
          (setq result (cons (list filename state) result)))))
     (funcall callback result)))
 
-;; -dir-status called from vc-dir, which loads vc, which loads vc-dispatcher.
+;; dir-status-files called from vc-dir, which loads vc,
+;; which loads vc-dispatcher.
 (declare-function vc-exec-after "vc-dispatcher" (code))
 
-(defun vc-svn-dir-status (dir callback)
+(autoload 'vc-expand-dirs "vc")
+
+(defun vc-svn-dir-status-files (_dir files callback)
   "Run 'svn status' for DIR and update BUFFER via CALLBACK.
 CALLBACK is called as (CALLBACK RESULT BUFFER), where
 RESULT is a list of conses (FILE . STATE) for directory DIR."
-  ;; FIXME should this rather be all the files in dir?
-  ;; FIXME: the vc-stay-local-p logic below is disabled, it ends up
-  ;; calling synchronously (vc-svn-registered DIR) => calling svn status -v DIR
-  ;; which is VERY SLOW for big trees and it makes emacs
-  ;; completely unresponsive during that time.
-  (let* ((local (and nil (vc-stay-local-p dir 'SVN)))
-        (remote (or t (not local) (eq local 'only-file))))
-    (vc-svn-command (current-buffer) 'async nil "status"
-                   (if remote "-u"))
-  (vc-run-delayed
-   (vc-svn-after-dir-status callback remote))))
-
-(defun vc-svn-dir-status-files (_dir files _default-state callback)
-  (apply 'vc-svn-command (current-buffer) 'async nil "status" files)
-  (vc-run-delayed
-   (vc-svn-after-dir-status callback)))
+  ;; FIXME shouldn't this rather default to all the files in dir?
+  (apply #'vc-svn-command (current-buffer) 'async nil "status" "-u" files)
+  (vc-run-delayed (vc-svn-after-dir-status callback t)))
 
 (defun vc-svn-dir-extra-headers (_dir)
   "Generate extra status headers for a Subversion working copy."
@@ -300,7 +272,7 @@ RESULT is a list of conses (FILE . STATE) for directory 
DIR."
 
 (autoload 'vc-switches "vc")
 
-(defun vc-svn-register (files &optional _rev _comment)
+(defun vc-svn-register (files &optional _comment)
   "Register FILES into the SVN version-control system.
 The COMMENT argument is ignored  This does an add but not a commit.
 Passes either `vc-svn-register-switches' or `vc-register-switches'
@@ -312,13 +284,8 @@ to the SVN command."
 
 (defalias 'vc-svn-responsible-p 'vc-svn-root)
 
-(defalias 'vc-svn-could-register 'vc-svn-root
-  "Return non-nil if FILE could be registered in SVN.
-This is only possible if SVN is responsible for FILE's directory.")
-
-(defun vc-svn-checkin (files rev comment &optional _extra-args-ignored)
+(defun vc-svn-checkin (files comment &optional _extra-args-ignored)
   "SVN-specific version of `vc-backend-checkin'."
-  (if rev (error "Committing to a specific revision is unsupported in SVN"))
   (let ((status (apply
                  'vc-svn-command nil 1 files "ci"
                  (nconc (list "-m" comment) (vc-switches 'SVN 'checkin)))))
@@ -376,14 +343,14 @@ FILE is a file wildcard, relative to the root directory 
of DIRECTORY."
   "Return the administrative directory of FILE."
   (expand-file-name vc-svn-admin-directory (vc-svn-root file)))
 
-(defun vc-svn-checkout (file &optional editable rev)
+(defun vc-svn-checkout (file &optional rev)
   (message "Checking out %s..." file)
   (with-current-buffer (or (get-file-buffer file) (current-buffer))
-    (vc-svn-update file editable rev (vc-switches 'SVN 'checkout)))
+    (vc-svn-update file rev (vc-switches 'SVN 'checkout)))
   (vc-mode-line file 'SVN)
   (message "Checking out %s...done" file))
 
-(defun vc-svn-update (file _editable rev switches)
+(defun vc-svn-update (file rev switches)
   (if (and (file-exists-p file) (not rev))
       ;; If no revision was specified, there's nothing to do.
       nil
@@ -408,6 +375,29 @@ FILE is a file wildcard, relative to the root directory of 
DIRECTORY."
   (unless contents-done
     (vc-svn-command nil 0 file "revert")))
 
+(defun vc-svn-merge-file (file)
+  "Accept a file merge request, prompting for revisions."
+  (let* ((first-revision
+        (vc-read-revision
+         (concat "Merge " file
+                 " from SVN revision "
+                 "(default news on current branch): ")
+         (list file)
+         'SVN))
+        second-revision
+        status)
+    (cond
+     ((string= first-revision "")
+      (setq status (vc-svn-merge-news file)))
+     (t
+      (setq second-revision
+           (vc-read-revision
+            "Second SVN revision: "
+            (list file) 'SVN nil
+            first-revision))
+      (setq status (vc-svn-merge file first-revision second-revision))))
+    status))
+
 (defun vc-svn-merge (file first-version &optional second-version)
   "Merge changes into current working copy of FILE.
 The changes are between FIRST-VERSION and SECOND-VERSION."
@@ -540,7 +530,6 @@ If LIMIT is non-nil, show no more than this many entries."
                   'vc-svn-command
                   buffer
                   'async
-                  ;; (if (and (= (length files) 1) (vc-stay-local-p file 
'SVN)) 'async 0)
                   (list file)
                   "log"
                   (append
@@ -560,7 +549,7 @@ If LIMIT is non-nil, show no more than this many entries."
                 (if start-revision (format "-r%s" start-revision) "-rHEAD:0"))
                (when limit (list "--limit" (format "%s" limit)))))))))
 
-(defun vc-svn-diff (files &optional oldvers newvers buffer)
+(defun vc-svn-diff (files &optional oldvers newvers buffer async)
   "Get a difference report using SVN between two revisions of fileset FILES."
   (and oldvers
        (not newvers)
@@ -575,14 +564,12 @@ If LIMIT is non-nil, show no more than this many entries."
        ;; has a different revision, we fetch the lot, which is
        ;; obviously sub-optimal.
        (setq oldvers nil))
+  (setq async (and async (or oldvers newvers)))        ; Svn diffs those 
locally.
   (let* ((switches
            (if vc-svn-diff-switches
                (vc-switches 'SVN 'diff)
              (list (concat "--diff-cmd=" diff-command) "-x"
-                   (mapconcat 'identity (vc-switches nil 'diff) " "))))
-          (async (and (not vc-disable-async-diff)
-                       (vc-stay-local-p files 'SVN)
-                      (or oldvers newvers)))) ; Svn diffs those locally.
+                   (mapconcat 'identity (vc-switches nil 'diff) " ")))))
       (apply 'vc-svn-command buffer
             (if async 'async 0)
             files "diff"
@@ -624,7 +611,7 @@ NAME is assumed to be a URL."
 ;; Subversion makes backups for us, so don't bother.
 ;; (defun vc-svn-make-version-backups-p (file)
 ;;   "Return non-nil if version backups should be made for FILE."
-;;  (vc-stay-local-p file 'SVN))
+;;  nil)
 
 (defun vc-svn-check-headers ()
   "Check if the current file has any headers in it."
@@ -647,17 +634,6 @@ and that it passes `vc-svn-global-switches' to it before 
FLAGS."
              (cons vc-svn-global-switches flags)
            (append vc-svn-global-switches flags))))
 
-(defun vc-svn-repository-hostname (dirname)
-  (with-temp-buffer
-    (let (process-file-side-effects)
-      (vc-svn-command t t dirname "info" "--xml"))
-    (goto-char (point-min))
-    (when (re-search-forward "<url>\\(.*\\)</url>" nil t)
-      ;; This is not a hostname but a URL.  This may actually be considered
-      ;; as a feature since it allows vc-svn-stay-local to specify different
-      ;; behavior for different modules on the same server.
-      (match-string 1))))
-
 (defun vc-svn-resolve-when-done ()
   "Call \"svn resolved\" if the conflict markers have been removed."
   (save-excursion
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index b2cb447..54b2214 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1,6 +1,6 @@
 ;;; vc.el --- drive a version-control system from within Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1992-1998, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1998, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author:     FSF (see below for full credits)
 ;; Maintainer: Andre Spiegel <address@hidden>
@@ -46,15 +46,15 @@
 ;; If you maintain a client of the mode or customize it in your .emacs,
 ;; note that some backend functions which formerly took single file arguments
 ;; now take a list of files.  These include: register, checkin, print-log,
-;; rollback, and diff.
+;; and diff.
 
 ;;; Commentary:
 
 ;; This mode is fully documented in the Emacs user's manual.
 ;;
-;; Supported version-control systems presently include CVS, RCS, GNU
-;; Arch, Subversion, Bzr, Git, Mercurial, Monotone and SCCS
-;; (or its free replacement, CSSC).
+;; Supported version-control systems presently include CVS, RCS, SRC,
+;; GNU Subversion, Bzr, Git, Mercurial, Monotone and SCCS (or its free
+;; replacement, CSSC).
 ;;
 ;; If your site uses the ChangeLog convention supported by Emacs, the
 ;; function `log-edit-comment-to-change-log' could prove a useful checkin hook,
@@ -72,7 +72,10 @@
 ;; When using Subversion or a later system, anything you do outside VC
 ;; *through the VCS tools* should safely interlock with VC
 ;; operations. Under these VC does little state caching, because local
-;; operations are assumed to be fast.  The dividing line is
+;; operations are assumed to be fast.
+;;
+;; The 'assumed to be fast' category includes SRC, even though it's
+;; a wrapper around RCS.
 ;;
 ;; ADDING SUPPORT FOR OTHER BACKENDS
 ;;
@@ -125,42 +128,33 @@
 ;;   Return the current version control state of FILE.  For a list of
 ;;   possible values, see `vc-state'.  This function should do a full and
 ;;   reliable state computation; it is usually called immediately after
-;;   C-x v v.  If you want to use a faster heuristic when visiting a
-;;   file, put that into `state-heuristic' below.  Note that under most
-;;   VCSes this won't be called at all, dir-status is used instead.
+;;   C-x v v.
 ;;
-;; - state-heuristic (file)
+;; - dir-status-files (dir files update-function)
 ;;
-;;   If provided, this function is used to estimate the version control
-;;   state of FILE at visiting time.  It should be considerably faster
-;;   than the implementation of `state'.  For a list of possible values,
-;;   see the doc string of `vc-state'.
+;;   Produce RESULT: a list of lists of the form (FILE VC-STATE EXTRA)
+;;   for FILES in DIR.  If FILES is nil, report on all files in DIR.
+;;   (It is OK, though possibly inefficient, to ignore the FILES argument
+;;   and always report on all files in DIR.)
 ;;
-;; - dir-status (dir update-function)
+;;   If FILES is non-nil, this function should report on all requested
+;;   files, including up-to-date or ignored files.
 ;;
-;;   Produce RESULT: a list of lists of the form (FILE VC-STATE EXTRA)
-;;   for the files in DIR.
 ;;   EXTRA can be used for backend specific information about FILE.
 ;;   If a command needs to be run to compute this list, it should be
 ;;   run asynchronously using (current-buffer) as the buffer for the
-;;   command.  When RESULT is computed, it should be passed back by
-;;   doing: (funcall UPDATE-FUNCTION RESULT nil).
-;;   If the backend uses a process filter, hence it produces partial results,
-;;   they can be passed back by doing:
-;;      (funcall UPDATE-FUNCTION RESULT t)
-;;   and then do a (funcall UPDATE-FUNCTION RESULT nil)
-;;   when all the results have been computed.
-;;   To provide more backend specific functionality for `vc-dir'
-;;   the following functions might be needed: `dir-extra-headers',
-;;   `dir-printer', `extra-dir-menu' and `dir-status-files'.
+;;   command.
 ;;
-;; - dir-status-files (dir files default-state update-function)
+;;   When RESULT is computed, it should be passed back by doing:
+;;   (funcall UPDATE-FUNCTION RESULT nil).  If the backend uses a
+;;   process filter, hence it produces partial results, they can be
+;;   passed back by doing: (funcall UPDATE-FUNCTION RESULT t) and then
+;;   do a (funcall UPDATE-FUNCTION RESULT nil) when all the results
+;;   have been computed.
 ;;
-;;   This function is identical to dir-status except that it should
-;;   only report status for the specified FILES. Also it needs to
-;;   report on all requested files, including up-to-date or ignored
-;;   files. If not provided, the default is to consider that the files
-;;   are in DEFAULT-STATE.
+;;   To provide more backend specific functionality for `vc-dir'
+;;   the following functions might be needed: `dir-extra-headers',
+;;   `dir-printer', and `extra-dir-menu'.
 ;;
 ;; - dir-extra-headers (dir)
 ;;
@@ -185,29 +179,11 @@
 ;;   head or tip revision.  Should return "0" for a file added but not yet
 ;;   committed.
 ;;
-;; - latest-on-branch-p (file)
-;;
-;;   Return non-nil if the working revision of FILE is the latest revision
-;;   on its branch (many VCSes call this the 'tip' or 'head' revision).
-;;   The default implementation always returns t, which means that
-;;   working with non-current revisions is not supported by default.
-;;
 ;; * checkout-model (files)
 ;;
 ;;   Indicate whether FILES need to be "checked out" before they can be
 ;;   edited.  See `vc-checkout-model' for a list of possible values.
 ;;
-;; - workfile-unchanged-p (file)
-;;
-;;   Return non-nil if FILE is unchanged from the working revision.
-;;   This function should do a brief comparison of FILE's contents
-;;   with those of the repository copy of the working revision.  If
-;;   the backend does not have such a brief-comparison feature, the
-;;   default implementation of this function can be used, which
-;;   delegates to a full vc-BACKEND-diff.  (Note that vc-BACKEND-diff
-;;   must not run asynchronously in this case, see variable
-;;   `vc-disable-async-diff'.)
-;;
 ;; - mode-line-string (file)
 ;;
 ;;   If provided, this function should return the VC-specific mode
@@ -225,21 +201,16 @@
 ;;   it so VC mode can add files to it.  For file-oriented systems, this
 ;;   need do no more than create a subdirectory with the right name.
 ;;
-;; * register (files &optional rev comment)
-;;
-;;   Register FILES in this backend.  Optionally, an initial revision REV
-;;   and an initial description of the file, COMMENT, may be specified,
-;;   but it is not guaranteed that the backend will do anything with this.
-;;   The implementation should pass the value of vc-register-switches
-;;   to the backend command.  (Note: in older versions of VC, this
-;;   command took a single file argument and not a list.)
-;;   The REV argument is a historical leftover and is never used.
-;;
-;; - init-revision (file)
+;; * register (files &optional comment)
 ;;
-;;   The initial revision to use when registering FILE if one is not
-;;   specified by the user.  If not provided, the variable
-;;   vc-default-init-revision is used instead.
+;;   Register FILES in this backend.  Optionally, an initial
+;;   description of the file, COMMENT, may be specified, but it is not
+;;   guaranteed that the backend will do anything with this.  The
+;;   implementation should pass the value of vc-register-switches to
+;;   the backend command.  (Note: in older versions of VC, this
+;;   command had an optional revision first argument that was
+;;   not used; in still older ones it took a single file argument and
+;;   not a list.)
 ;;
 ;; - responsible-p (file)
 ;;
@@ -249,11 +220,6 @@
 ;;   like change log generation.  The default implementation always
 ;;   returns nil.
 ;;
-;; - could-register (file)
-;;
-;;   Return non-nil if FILE could be registered under this backend.  The
-;;   default implementation always returns t.
-;;
 ;; - receive-file (file rev)
 ;;
 ;;   Let this backend "receive" a file that is already registered under
@@ -267,12 +233,12 @@
 ;;   Unregister FILE from this backend.  This is only needed if this
 ;;   backend may be used as a "more local" backend for temporary editing.
 ;;
-;; * checkin (files rev comment)
+;; * checkin (files comment)
 ;;
-;;   Commit changes in FILES to this backend.  REV is a historical artifact
-;;   and should be ignored.  COMMENT is used as a check-in comment.
-;;   The implementation should pass the value of vc-checkin-switches to
-;;   the backend command.
+;;   Commit changes in FILES to this backend. COMMENT is used as a
+;;   check-in comment.  The implementation should pass the value of
+;;   vc-checkin-switches to the backend command.  The revision argument
+;;   of some older VC versions is no longer supported.
 ;;
 ;; * find-revision (file rev buffer)
 ;;
@@ -281,16 +247,17 @@
 ;;   The implementation should pass the value of vc-checkout-switches
 ;;   to the backend command.
 ;;
-;; * checkout (file &optional editable rev)
+;; * checkout (file &optional rev)
 ;;
-;;   Check out revision REV of FILE into the working area.  If EDITABLE
-;;   is non-nil, FILE should be writable by the user and if locking is
-;;   used for FILE, a lock should also be set.  If REV is non-nil, that
-;;   is the revision to check out (default is the working revision).
-;;   If REV is t, that means to check out the head of the current branch;
-;;   if it is the empty string, check out the head of the trunk.
-;;   The implementation should pass the value of vc-checkout-switches
-;;   to the backend command.
+;;   Check out revision REV of FILE into the working area.  FILE
+;;   should be writable by the user and if locking is used for FILE, a
+;;   lock should also be set.  If REV is non-nil, that is the revision
+;;   to check out (default is the working revision).  If REV is t,
+;;   that means to check out the head of the current branch; if it is
+;;   the empty string, check out the head of the trunk.  The
+;;   implementation should pass the value of vc-checkout-switches to
+;;   the backend command. The 'editable' argument of older VC versions
+;;   is gone; all files are checked out editable.
 ;;
 ;; * revert (file &optional contents-done)
 ;;
@@ -301,19 +268,11 @@
 ;;   If FILE is in the `added' state it should be returned to the
 ;;   `unregistered' state.
 ;;
-;; - rollback (files)
+;; - merge-file (file rev1 rev2)
 ;;
-;;   Remove the tip revision of each of FILES from the repository.  If
-;;   this function is not provided, trying to cancel a revision is
-;;   caught as an error.  (Most backends don't provide it.)  (Also
-;;   note that older versions of this backend command were called
-;;   'cancel-version' and took a single file arg, not a list of
-;;   files.)
-;;
-;; - merge (file rev1 rev2)
-;;
-;;   Merge the changes between REV1 and REV2 into the current working file
-;;   (for non-distributed VCS).
+;;   Merge the changes between REV1 and REV2 into the current working
+;;   file (for non-distributed VCS).  It is expected that with an
+;;   empty first revision this will behave like the merge-news method.
 ;;
 ;; - merge-branch ()
 ;;
@@ -402,13 +361,14 @@
 ;;   default implementation runs rcs2log, which handles RCS- and
 ;;   CVS-style logs.
 ;;
-;; * diff (files &optional rev1 rev2 buffer)
+;; * diff (files &optional rev1 rev2 buffer async)
 ;;
 ;;   Insert the diff for FILE into BUFFER, or the *vc-diff* buffer if
-;;   BUFFER is nil.  If REV1 and REV2 are non-nil, report differences
-;;   from REV1 to REV2.  If REV1 is nil, use the working revision (as
-;;   found in the repository) as the older revision; if REV2 is nil,
-;;   use the current working-copy contents as the newer revision.  This
+;;   BUFFER is nil.  If ASYNC is non-nil, run asynchronously.  If REV1
+;;   and REV2 are non-nil, report differences from REV1 to REV2.  If
+;;   REV1 is nil, use the working revision (as found in the
+;;   repository) as the older revision; if REV2 is nil, use the
+;;   current working-copy contents as the newer revision.  This
 ;;   function should pass the value of (vc-switches BACKEND 'diff) to
 ;;   the backend command.  It should return a status of either 0 (no
 ;;   differences found), or 1 (either non-empty diff or the diff is
@@ -502,14 +462,6 @@
 ;;
 ;;   Return the root of the VC controlled hierarchy for file.
 ;;
-;; - repository-hostname (dirname)
-;;
-;;   Return the hostname that the backend will have to contact
-;;   in order to operate on a file in DIRNAME.  If the return value
-;;   is nil, it means that the repository is local.
-;;   This function is used in `vc-stay-local-p' which backends can use
-;;   for their convenience.
-;;
 ;; - ignore (file &optional directory)
 ;;
 ;;   Ignore FILE under the VCS of DIRECTORY (default is `default-directory').
@@ -545,15 +497,6 @@
 ;;
 ;;   Return non-nil if the current buffer contains any version headers.
 ;;
-;; - clear-headers ()
-;;
-;;   In the current buffer, reset all version headers to their unexpanded
-;;   form.  This function should be provided if the state-querying code
-;;   for this backend uses the version headers to determine the state of
-;;   a file.  This function will then be called whenever VC changes the
-;;   version control state in such a way that the headers would give
-;;   wrong information.
-;;
 ;; - delete-file (file)
 ;;
 ;;   Delete FILE and mark it as deleted in the repository.  If this
@@ -595,19 +538,82 @@
 ;;   the project that contains DIR.
 ;;   FIXME: what should it do with non-text conflicts?
 
-;;; Todo:
+;;; Changes from the pre-25.1 API:
+;;
+;; - INCOMPATIBLE CHANGE: The 'editable' optional argument of
+;;   vc-checkout is gone. The upper level assumes that all files are
+;;   checked out editable. This moves closer to emulating modern
+;;   non-locking behavior even on very old VCSes.
+;;
+;; - INCOMPATIBLE CHANGE: The vc-register function and its backend
+;;   implementations no longer take a first optional revision
+;;   argument, since on no system since RCS has setting the initial
+;;   revision been even possible, let alone sane.
+;;
+;;   INCOMPATIBLE CHANGE: In older versions of the API, vc-diff did
+;;   not take an async-mode flag as a fourth optional argument.  (This
+;;   change eliminated a particularly ugly global.)
+;;
+;; - INCOMPATIBLE CHANGE: The backend operation for non-distributed
+;;   VCSes formerly called "merge" is now "merge-file" (to contrast
+;;   with merge-branch), and does its own prompting for revisions.
+;;   (This fixes a layer violation that produced bad behavior under
+;;   SVN.)
+;;
+;; - INCOMPATIBLE CHANGE: The old fourth 'default-state' argument of
+;;   vc-dir-status-files is gone; none of the back ends actually used it.
+;;
+;; - vc-dir-status is no longer a public method; it has been replaced
+;;   by vc-dir-status-files.
+;;
+;; - vc-state-heuristic is no longer a public method (the CVS backend
+;;   retains it as a private one).
+;;
+;; - the vc-mistrust-permissions configuration variable is gone; the
+;;   code no longer relies on permissions except in one corner case where
+;;   CVS leaves no alternative (which was not gated by this variable).  The
+;;   only affected back ends were SCCS and RCS.
+;;
+;; - vc-stay-local-p and repository-hostname are no longer part
+;;   of the public API. The vc-stay-local configuration variable
+;;   remains but only affects the CVS back end.
+;;
+;; - The init-revision function and the default-initial-revision
+;;   variable are gone.  These have't made sense on anything shipped
+;;   since RCS, and using them was a dumb stunt even on RCS.
+;;
+;; - workfile-unchanged-p is no longer a public back-end method.  It
+;;   was redundant with vc-state and usually implemented with a trivial
+;;   call to it.  A few older back ends retain versions for internal use in
+;;   their vc-state functions.
+;;
+;; - could-register is no longer a public method.  Only vc-cvs ever used it
+;;
+;;   The vc-keep-workfiles configuration variable is gone.  Used only by
+;;   the RCS and SCCS backends, it was an invitation to shoot self in foot
+;;   when set to the (non-default) value nil.  The original justification
+;;   for it (saving disk space) is long obsolete.
+;;
+;; - The rollback method (implemented by RCS and SCCS only) is gone. See
+;;   the to-do note on uncommit.
+;;
+;; - latest-on-branch-p is no longer a public method. It was to be used
+;;   for implementing rollback. RCS keeps its implementation (the only one)
+;;   for internal use.
 
-;; - Get rid of the "master file" terminology.
 
-;; - Add key-binding for vc-delete-file.
+;;; Todo:
 
 ;;;; New Primitives:
 ;;
-;; - deal with push/pull operations.
+;; - uncommit: undo last checkin, leave changes in place in the workfile,
+;;   stash the commit comment for re-use.
+;;
+;; - deal with push operations.
 ;;
 ;;;; Primitives that need changing:
 ;;
-;; - vc-update/vc-merge should deal with VC systems that don't
+;; - vc-update/vc-merge should deal with VC systems that don't do
 ;;   update/merge on a file basis, but on a whole repository basis.
 ;;   vc-update and vc-merge assume the arguments are always files,
 ;;   they don't deal with directories.  Make sure the *vc-dir* buffer
@@ -616,27 +622,44 @@
 ;;
 ;;;; Improved branch and tag handling:
 ;;
+;; - Make sure the *vc-dir* buffer is updated after merge-branch operations.
+;;
 ;; - add a generic mechanism for remembering the current branch names,
 ;;   display the branch name in the mode-line. Replace
 ;;   vc-cvs-sticky-tag with that.
 ;;
-;;;; Internal cleanups:
+;; - Add a primitives for switching to a branch (creating it if required.
+;;
+;; - Add the ability to list tags and branches.
+;;
+;;;; Unify two different versions of the amend capability
+;;
+;; - Some back ends (SCCS/RCS/SVN/SRC), have an amend capability that can
+;;   be invoked from log-view.
 ;;
-;; - backends that care about vc-stay-local should try to take it into
-;;   account for vc-dir.  Is this likely to be useful???  YES!
+;; - The git backend supports amending, but in a different
+;;   way (press `C-c C-e' in log-edit buffer, when making a new commit).
 ;;
-;; - vc-expand-dirs should take a backend parameter and only look for
-;;   files managed by that backend.
+;; - Second, `log-view-modify-change-comment' doesn't seem to support
+;;   modern backends at all because `log-view-extract-comment'
+;;   unconditionally calls `log-view-current-file'. This should be easy to
+;;   fix.
 ;;
-;; - Another important thing: merge all the status-like backend operations.
-;;   We should remove dir-status, state, and dir-status-files, and
-;;   replace them with just `status' which takes a fileset and a continuation
-;;   (like dir-status) and returns a buffer in which the process(es) are run
-;;   (or nil if it worked synchronously).  Hopefully we can define the old
-;;   4 operations in term of this one.
+;; - Third, doing message editing in log-view might be a natural way to go
+;;   about it, but editing any but the last commit (and even it, if it's
+;;   been pushed) is a dangerous operation in Git, which we shouldn't make
+;;   too easy for users to perform.
+;;
+;;   There should be a check that the given comment is not reachable
+;;   from any of the "remote" refs?
 ;;
 ;;;; Other
 ;;
+;; - asynchronous checkin and commit, so you can keep working in other
+;;   buffers while the repo operation happens.
+;;
+;; - Direct support for stash/shelve.
+;;
 ;; - when a file is in `conflict' state, turn on smerge-mode.
 ;;
 ;; - figure out what to do with conflicts that are not caused by the
@@ -711,14 +734,6 @@
 
 (make-obsolete-variable 'vc-initial-comment "it has no effect." "23.2")
 
-(defcustom vc-default-init-revision "1.1"
-  "A string used as the default revision number when a new file is registered.
-This can be overridden by giving a prefix argument to \\[vc-register].  This
-can also be overridden by a particular VC backend."
-  :type 'string
-  :group 'vc
-  :version "20.3")
-
 (defcustom vc-checkin-switches nil
   "A string or list of strings specifying extra switches for checkin.
 These are passed to the checkin program by \\[vc-checkin]."
@@ -836,13 +851,6 @@ is sensitive to blank lines."
   :group 'vc)
 
 
-;; Variables users don't need to see
-
-(defvar vc-disable-async-diff nil
-  "VC sets this to t locally to disable some async diff operations.
-Backends that offer asynchronous diffs should respect this variable
-in their implementation of vc-BACKEND-diff.")
-
 ;; File property caching
 
 (defun vc-clear-context ()
@@ -938,14 +946,14 @@ responsible for FILE is returned."
               (throw 'found backend))))
       (error "No VC backend is responsible for %s" file)))
 
-(defun vc-expand-dirs (file-or-dir-list)
+(defun vc-expand-dirs (file-or-dir-list backend)
   "Expands directories in a file list specification.
 Within directories, only files already under version control are noticed."
   (let ((flattened '()))
     (dolist (node file-or-dir-list)
       (when (file-directory-p node)
        (vc-file-tree-walk
-        node (lambda (f) (when (vc-backend f) (push f flattened)))))
+        node (lambda (f) (when (eq (vc-backend f) backend) (push f 
flattened)))))
       (unless (file-directory-p node) (push node flattened)))
     (nreverse flattened)))
 
@@ -983,8 +991,8 @@ Otherwise, throw an error.
 STATE-MODEL-ONLY-FILES if non-nil, means that the caller needs
 the FILESET-ONLY-FILES STATE and MODEL info.  Otherwise, that
 part may be skipped.
-BEWARE: this function may change the
-current buffer."
+
+BEWARE: this function may change the current buffer."
   ;; FIXME: OBSERVER is unused.  The name is not intuitive and is not
   ;; documented.  It's set to t when called from diff and print-log.
   (let (backend)
@@ -995,6 +1003,9 @@ current buffer."
       (if observer
          (vc-dired-deduce-fileset)
        (error "State changing VC operations not supported in `dired-mode'")))
+     ((and (derived-mode-p 'log-view-mode)
+          (setq backend (vc-responsible-backend default-directory)))
+      (list backend default-directory))
      ((setq backend (vc-backend buffer-file-name))
       (if state-model-only-files
        (list backend (list buffer-file-name)
@@ -1089,8 +1100,7 @@ For old-style locking-based version control systems, like 
RCS:
   If every file is registered and unlocked, check out (lock)
    the file(s) for editing.
   If every file is locked by you and has changes, pop up a
-   *vc-log* buffer to check in the changes.  If the variable
-   `vc-keep-workfiles' is non-nil (the default), leave a
+   *vc-log* buffer to check in the changes.  Leave a
    read-only copy of each changed file after checking in.
   If every file is locked by you and unchanged, unlock them.
   If every file is locked by someone else, offer to steal the lock."
@@ -1121,7 +1131,7 @@ For old-style locking-based version control systems, like 
RCS:
      ((eq state 'ignored)
       (error "Fileset files are ignored by the version-control system"))
      ((or (null state) (eq state 'unregistered))
-      (vc-register nil vc-fileset))
+      (vc-register vc-fileset))
      ;; Files are up-to-date, or need a merge and user specified a revision
      ((or (eq state 'up-to-date) (and verbose (eq state 'needs-update)))
       (cond
@@ -1138,10 +1148,10 @@ For old-style locking-based version control systems, 
like RCS:
              (let ((vsym (intern-soft revision-downcase)))
                (dolist (file files) (vc-transfer-file file vsym)))
            (dolist (file files)
-              (vc-checkout file (eq model 'implicit) revision)))))
+              (vc-checkout file revision)))))
        ((not (eq model 'implicit))
        ;; check the files out
-       (dolist (file files) (vc-checkout file t)))
+       (dolist (file files) (vc-checkout file)))
        (t
         ;; do nothing
         (message "Fileset is up-to-date"))))
@@ -1158,7 +1168,7 @@ For old-style locking-based version control systems, like 
RCS:
            ;; state of each individual file in the fileset, it seems
            ;; simplest to just check if the file exists.        Bug#9781.
            (when (and (file-exists-p file) (not (file-writable-p file)))
-             ;; Make the file+buffer read-write.
+             ;; Make the file-buffer read-write.
              (unless (y-or-n-p (format "%s is edited but read-only; make it 
writable and continue? " file))
                (error "Aborted"))
              ;; Maybe we somehow lost permissions on the directory.
@@ -1176,7 +1186,7 @@ For old-style locking-based version control systems, like 
RCS:
               ;; For files with locking, if the file does not contain
               ;; any changes, just let go of the lock, i.e. revert.
               (when (and (not (eq model 'implicit))
-                        (vc-workfile-unchanged-p file)
+                        (eq state 'up-to-date)
                         ;; If buffer is modified, that means the user just
                         ;; said no to saving it; in that case, don't revert,
                         ;; because the user might intend to save after
@@ -1227,10 +1237,10 @@ For old-style locking-based version control systems, 
like RCS:
        (if (yes-or-no-p (format
                          "%s is not up-to-date.  Get latest revision? "
                          (file-name-nondirectory file)))
-           (vc-checkout file (eq model 'implicit) t)
+           (vc-checkout file t)
          (when (and (not (eq model 'implicit))
                     (yes-or-no-p "Lock this revision? "))
-           (vc-checkout file t)))))
+           (vc-checkout file)))))
      ;; needs-merge
      ((eq state 'needs-merge)
       (dolist (file files)
@@ -1258,16 +1268,13 @@ For old-style locking-based version control systems, 
like RCS:
                                   "Claim lock retaining changes? ")))
            (progn (vc-call-backend backend 'steal-lock file)
                   (clear-visited-file-modtime)
-                  ;; Must clear any headers here because they wouldn't
-                  ;; show that the file is locked now.
-                  (vc-clear-headers file)
                   (write-file buffer-file-name)
                   (vc-mode-line file backend))
          (if (not (yes-or-no-p
                    "Revert to checked-in revision, instead? "))
              (error "Checkout aborted")
            (vc-revert-buffer-internal t t)
-           (vc-checkout file t)))))
+           (vc-checkout file)))))
      ;; Unknown fileset state
      (t
       (error "Fileset is in an unknown state %s" state)))))
@@ -1287,12 +1294,11 @@ For old-style locking-based version control systems, 
like RCS:
 (declare-function vc-dir-move-to-goal-column "vc-dir" ())
 
 ;;;###autoload
-(defun vc-register (&optional set-revision vc-fileset comment)
+(defun vc-register (&optional vc-fileset comment)
   "Register into a version control system.
 If VC-FILESET is given, register the files in that fileset.
 Otherwise register the current file.
-With prefix argument SET-REVISION, allow user to specify initial revision
-level.  If COMMENT is present, use that as an initial comment.
+If COMMENT is present, use that as an initial comment.
 
 The version control system to use is found by cycling through the list
 `vc-handled-backends'.  The first backend in that list which declares
@@ -1324,11 +1330,7 @@ first backend that could register the file is used."
            (vc-buffer-sync)))))
     (message "Registering %s... " files)
     (mapc 'vc-file-clearprops files)
-    (vc-call-backend backend 'register files
-                    (if set-revision
-                        (read-string (format "Initial revision level for %s: " 
files))
-                      (vc-call-backend backend 'init-revision))
-                    comment)
+    (vc-call-backend backend 'register files comment)
     (mapc
      (lambda (file)
        (vc-file-setprop file 'vc-backend backend)
@@ -1339,7 +1341,7 @@ first backend that could register the file is used."
        ;;   (make-local-variable 'backup-inhibited)
        ;;   (setq backup-inhibited t))
 
-       (vc-resynch-buffer file vc-keep-workfiles t))
+       (vc-resynch-buffer file t t))
      files)
     (when (derived-mode-p 'vc-dir-mode)
       (vc-dir-move-to-goal-column))
@@ -1426,32 +1428,28 @@ Argument BACKEND is the backend you are using."
       (replace-match ""))
     (write-region (point-min) (point-max) file)))
 
-(defun vc-checkout (file &optional writable rev)
+(defun vc-checkout (file &optional rev)
   "Retrieve a copy of the revision REV of FILE.
-If WRITABLE is non-nil, make sure the retrieved file is writable.
 REV defaults to the latest revision.
 
 After check-out, runs the normal hook `vc-checkout-hook'."
-  (and writable
-       (not rev)
+  (and (not rev)
        (vc-call make-version-backups-p file)
        (vc-up-to-date-p file)
        (vc-make-version-backup file))
   (let ((backend (vc-backend file)))
     (with-vc-properties (list file)
       (condition-case err
-          (vc-call-backend backend 'checkout file writable rev)
+          (vc-call-backend backend 'checkout file rev)
         (file-error
          ;; Maybe the backend is not installed ;-(
-         (when writable
+         (when t
            (let ((buf (get-file-buffer file)))
              (when buf (with-current-buffer buf (read-only-mode -1)))))
          (signal (car err) (cdr err))))
       `((vc-state . ,(if (or (eq (vc-checkout-model backend (list file)) 
'implicit)
-                             (not writable))
-                         (if (vc-call-backend backend 'latest-on-branch-p file)
-                             'up-to-date
-                           'needs-update)
+                             nil)
+                        'up-to-date
                        'edited))
         (vc-checkout-time . ,(nth 5 (file-attributes file))))))
   (vc-resynch-buffer file t t)
@@ -1498,16 +1496,11 @@ Type \\[vc-next-action] to check in changes.")
      ".\n")
     (message "Please explain why you stole the lock.  Type C-c C-c when 
done.")))
 
-(defun vc-checkin (files backend &optional rev comment initial-contents)
-  "Check in FILES.
-The optional argument REV may be a string specifying the new revision
-level (strongly deprecated).  COMMENT is a comment
-string; if omitted, a buffer is popped up to accept a comment.  If
-INITIAL-CONTENTS is non-nil, then COMMENT is used as the initial contents
-of the log entry buffer.
-
-If `vc-keep-workfiles' is nil, FILE is deleted afterwards, provided
-that the version control system supports this mode of operation.
+(defun vc-checkin (files backend &optional comment initial-contents)
+  "Check in FILES. COMMENT is a comment string; if omitted, a
+buffer is popped up to accept a comment.  If INITIAL-CONTENTS is
+non-nil, then COMMENT is used as the initial contents of the log
+entry buffer.
 
 Runs the normal hooks `vc-before-checkin-hook' and `vc-checkin-hook'."
   (when vc-before-checkin-hook
@@ -1530,7 +1523,7 @@ Runs the normal hooks `vc-before-checkin-hook' and 
`vc-checkin-hook'."
        ;; vc-checkin-switches, but 'the' local buffer is
        ;; not a well-defined concept for filesets.
        (progn
-         (vc-call-backend backend 'checkin files rev comment)
+         (vc-call-backend backend 'checkin files comment)
          (mapc 'vc-delete-automatic-version-backups files))
        `((vc-state . up-to-date)
          (vc-checkout-time . ,(nth 5 (file-attributes file)))
@@ -1694,11 +1687,10 @@ Return t if the buffer had changes, nil otherwise."
               ;; We regard this as "changed".
               ;; Diff it against /dev/null.
               (apply 'vc-do-command buffer
-                     1 "diff" file
+                     (if async 'async 1) "diff" file
                      (append (vc-switches nil 'diff) '("/dev/null"))))))
         (setq files (nreverse filtered))))
-    (let ((vc-disable-async-diff (not async)))
-      (vc-call-backend (car vc-fileset) 'diff files rev1 rev2 buffer))
+    (vc-call-backend (car vc-fileset) 'diff files rev1 rev2 buffer async)
     (set-buffer buffer)
     (diff-mode)
     (set (make-local-variable 'diff-vc-backend) (car vc-fileset))
@@ -1982,25 +1974,6 @@ the variable `vc-BACKEND-header'."
              (when (string-match (car f) buffer-file-name)
                (insert (format (cdr f) (car hdstrings)))))))))))
 
-(defun vc-clear-headers (&optional file)
-  "Clear all version headers in the current buffer (or FILE).
-The headers are reset to their non-expanded form."
-  (let* ((filename (or file buffer-file-name))
-        (visited (find-buffer-visiting filename))
-        (backend (vc-backend filename)))
-    (when (vc-find-backend-function backend 'clear-headers)
-       (if visited
-           (let ((context (vc-buffer-context)))
-             ;; save-excursion may be able to relocate point and mark
-             ;; properly.  If it fails, vc-restore-buffer-context
-             ;; will give it a second try.
-             (save-excursion
-               (vc-call-backend backend 'clear-headers))
-             (vc-restore-buffer-context context))
-         (set-buffer (find-file-noselect filename))
-         (vc-call-backend backend 'clear-headers)
-         (kill-buffer filename)))))
-
 (defun vc-modify-change-comment (files rev oldcomment)
   "Edit the comment associated with the given files and revision."
   ;; Less of a kluge than it looks like; log-view mode only passes
@@ -2043,42 +2016,17 @@ changes from the current branch."
       (vc-buffer-sync)
       (dolist (file files)
        (let* ((state (vc-state file))
-              first-revision second-revision status)
+              status)
          (cond
           ((stringp state)     ;; Locking VCses only
            (error "File %s is locked by %s" file state))
           ((not (vc-editable-p file))
            (vc-checkout file t)))
-         (setq first-revision
-               (vc-read-revision
-                (concat "Merge " file
-                        " from branch or revision "
-                        "(default news on current branch): ")
-                (list file)
-                backend))
-         (cond
-          ((string= first-revision "")
-           (setq status (vc-call-backend backend 'merge-news file)))
-          (t
-           (if (not (vc-branch-p first-revision))
-               (setq second-revision
-                     (vc-read-revision
-                      "Second revision: "
-                      (list file) backend nil
-                      ;; FIXME: This is CVS/RCS/SCCS specific.
-                      (concat (vc-branch-part first-revision) ".")))
-             ;; We want to merge an entire branch.  Set revisions
-             ;; accordingly, so that vc-BACKEND-merge understands us.
-             (setq second-revision first-revision)
-             ;; first-revision must be the starting point of the branch
-             (setq first-revision (vc-branch-part first-revision)))
-           (setq status (vc-call-backend backend 'merge file
-                                         first-revision second-revision))))
+         (setq status (vc-call-backend backend 'merge-file file))
          (vc-maybe-resolve-conflicts file status "WORKFILE" "MERGE SOURCE"))))
      (t
       (error "Sorry, merging is not implemented for %s" backend)))))
 
-
 (defun vc-maybe-resolve-conflicts (file status &optional _name-A _name-B)
   (vc-resynch-buffer file t (not (buffer-modified-p)))
   (if (zerop status) (message "Merge successful")
@@ -2103,8 +2051,9 @@ changes from the current branch."
   (let* ((backend (or (if buffer-file-name (vc-backend buffer-file-name))
                       (vc-responsible-backend default-directory)
                       (error "No VC backend")))
+         (root (vc-root-dir))
          (files (vc-call-backend backend
-                                 'conflicted-files default-directory)))
+                                 'conflicted-files (or root 
default-directory))))
     ;; Don't try and visit the current file.
     (if (equal (car files) buffer-file-name) (pop files))
     (if (null files)
@@ -2158,8 +2107,12 @@ checked out in that new branch."
 
 ;;;###autoload
 (defun vc-retrieve-tag (dir name)
-  "Descending recursively from DIR, retrieve the tag called NAME.
-If NAME is empty, it refers to the latest revisions.
+  "For each file in or below DIR, retrieve their tagged version NAME.
+NAME can name a branch, in which case this command will switch to the
+named branch in the directory DIR.
+Interactively, prompt for DIR only for VCS that works at file level;
+otherwise use the default directory of the current buffer.
+If NAME is empty, it refers to the latest revisions of the current branch.
 If locking is used for the files in DIR, then there must not be any
 locked files at or below DIR (but if NAME is empty, locked files are
 allowed and simply skipped)."
@@ -2273,17 +2226,18 @@ earlier revisions.  Show up to LIMIT entries (non-nil 
means unlimited)."
     (with-current-buffer (get-buffer-create buffer-name)
       (set (make-local-variable 'vc-log-view-type) type))
     (setq retval (funcall backend-func backend buffer-name type files))
-    (let ((inhibit-read-only t))
-      ;; log-view-mode used to be called with inhibit-read-only bound
-      ;; to t, so let's keep doing it, just in case.
-      (vc-call-backend backend 'log-view-mode)
-      (set (make-local-variable 'log-view-vc-backend) backend)
-      (set (make-local-variable 'log-view-vc-fileset) files)
-      (set (make-local-variable 'revert-buffer-function)
-          rev-buff-func))
+    (with-current-buffer (get-buffer buffer-name)
+      (let ((inhibit-read-only t))
+       ;; log-view-mode used to be called with inhibit-read-only bound
+       ;; to t, so let's keep doing it, just in case.
+       (vc-call-backend backend 'log-view-mode)
+       (set (make-local-variable 'log-view-vc-backend) backend)
+       (set (make-local-variable 'log-view-vc-fileset) files)
+       (set (make-local-variable 'revert-buffer-function)
+            rev-buff-func)))
     ;; Display after setting up major-mode, so display-buffer-alist can know
     ;; the major-mode.
-    (pop-to-buffer buffer-name)         
+    (pop-to-buffer buffer-name)
     (vc-run-delayed
      (let ((inhibit-read-only t))
        (funcall setup-buttons-func backend files retval)
@@ -2461,58 +2415,6 @@ to the working revision (except for keyword expansion)."
       (message "Reverting %s...done" (vc-delistify files)))))
 
 ;;;###autoload
-(defun vc-rollback ()
-  "Roll back (remove) the most recent changeset committed to the repository.
-This may be either a file-level or a repository-level operation,
-depending on the underlying version-control system."
-  (interactive)
-  (let* ((vc-fileset (vc-deduce-fileset))
-        (backend (car vc-fileset))
-        (files (cadr vc-fileset))
-        (granularity (vc-call-backend backend 'revision-granularity)))
-    (unless (vc-find-backend-function backend 'rollback)
-      (error "Rollback is not supported in %s" backend))
-    (when (and (not (eq granularity 'repository)) (/= (length files) 1))
-      (error "Rollback requires a singleton fileset or repository versioning"))
-    ;; FIXME: latest-on-branch-p should take the fileset.
-    (when (not (vc-call-backend backend 'latest-on-branch-p (car files)))
-      (error "Rollback is only possible at the tip revision"))
-    ;; If any of the files is visited by the current buffer, make
-    ;; sure buffer is saved.  If the user says `no', abort since
-    ;; we cannot show the changes and ask for confirmation to
-    ;; discard them.
-    (when (or (not files) (memq (buffer-file-name) files))
-      (vc-buffer-sync nil))
-    (dolist (file files)
-      (when (buffer-modified-p (get-file-buffer file))
-       (error "Please kill or save all modified buffers before rollback"))
-      (when (not (vc-up-to-date-p file))
-       (error "Please revert all modified workfiles before rollback")))
-    ;; Accumulate changes associated with the fileset
-    (vc-setup-buffer "*vc-diff*")
-    (set-buffer-modified-p nil)
-    (message "Finding changes...")
-    (let* ((tip (vc-working-revision (car files)))
-           ;; FIXME: `previous-revision' should take the fileset.
-          (previous (vc-call-backend backend 'previous-revision
-                                      (car files) tip)))
-      (vc-diff-internal nil vc-fileset previous tip))
-    ;; Display changes
-    (unless (yes-or-no-p "Discard these revisions? ")
-      (error "Rollback canceled"))
-    (quit-windows-on "*vc-diff*")
-    ;; Do the actual reversions
-    (message "Rolling back %s..." (vc-delistify files))
-    (with-vc-properties
-     files
-     (vc-call-backend backend 'rollback files)
-     `((vc-state . ,'up-to-date)
-       (vc-checkout-time . , (nth 5 (file-attributes file)))
-       (vc-working-revision . nil)))
-    (dolist (f files) (vc-resynch-buffer f t t))
-    (message "Rolling back %s...done" (vc-delistify files))))
-
-;;;###autoload
 (define-obsolete-function-alias 'vc-revert-buffer 'vc-revert "23.1")
 
 ;;;###autoload
@@ -2545,14 +2447,14 @@ tip revision are merged into the working file."
                    (and file (member file files))))))
       (dolist (file files)
        (if (vc-up-to-date-p file)
-           (vc-checkout file nil t)
+           (vc-checkout file t)
          (vc-maybe-resolve-conflicts
           file (vc-call-backend backend 'merge-news file)))))
      ;; For a locking VCS, check out each file.
      ((eq (vc-checkout-model backend files) 'locking)
       (dolist (file files)
        (if (vc-up-to-date-p file)
-           (vc-checkout file nil t))))
+           (vc-checkout file t))))
      (t
       (error "VC update is unsupported for `%s'" backend)))))
 
@@ -2674,7 +2576,7 @@ backend to NEW-BACKEND, and unregister FILE from the 
current backend.
          (when modified-file
            (vc-switch-backend file new-backend)
            (unless (eq (vc-checkout-model new-backend (list file)) 'implicit)
-             (vc-checkout file t nil))
+             (vc-checkout file))
            (rename-file modified-file file 'ok-if-already-exists)
            (vc-file-setprop file 'vc-checkout-time nil)))))
     (when move
@@ -2685,34 +2587,7 @@ backend to NEW-BACKEND, and unregister FILE from the 
current backend.
     (when (or move edited)
       (vc-file-setprop file 'vc-state 'edited)
       (vc-mode-line file new-backend)
-      (vc-checkin file new-backend nil comment (stringp comment)))))
-
-(defun vc-rename-master (oldmaster newfile templates)
-  "Rename OLDMASTER to be the master file for NEWFILE based on TEMPLATES."
-  (let* ((dir (file-name-directory (expand-file-name oldmaster)))
-        (newdir (or (file-name-directory newfile) ""))
-        (newbase (file-name-nondirectory newfile))
-        (masters
-         ;; List of potential master files for `newfile'
-         (mapcar
-          (lambda (s) (vc-possible-master s newdir newbase))
-          templates)))
-    (when (or (file-symlink-p oldmaster)
-             (file-symlink-p (file-name-directory oldmaster)))
-      (error "This is unsafe in the presence of symbolic links"))
-    (rename-file
-     oldmaster
-     (catch 'found
-       ;; If possible, keep the master file in the same directory.
-       (dolist (f masters)
-        (when (and f (string= (file-name-directory (expand-file-name f)) dir))
-          (throw 'found f)))
-       ;; If not, just use the first possible place.
-       (dolist (f masters)
-        (and f (or (not (setq dir (file-name-directory f)))
-                   (file-directory-p dir))
-             (throw 'found f)))
-       (error "New file lacks a version control directory")))))
+      (vc-checkin file new-backend comment (stringp comment)))))
 
 ;;;###autoload
 (defun vc-delete-file (file)
@@ -2847,19 +2722,6 @@ log entries should be gathered."
 The default is to return nil always."
   nil)
 
-(defun vc-default-could-register (_backend _file)
-  "Return non-nil if BACKEND could be used to register FILE.
-The default implementation returns t for all files."
-  t)
-
-(defun vc-default-latest-on-branch-p (_backend _file)
-  "Return non-nil if FILE is the latest on its branch.
-This default implementation always returns non-nil, which means that
-editing non-current revisions is not supported by default."
-  t)
-
-(defun vc-default-init-revision (_backend) vc-default-init-revision)
-
 (defun vc-default-find-revision (backend file rev buffer)
   "Provide the new `find-revision' op based on the old `checkout' op.
 This is only for compatibility with old backends.  They should be updated
@@ -2954,9 +2816,9 @@ to provide the `find-revision' operation instead."
 (defalias 'vc-default-revision-completion-table 'ignore)
 (defalias 'vc-default-mark-resolved 'ignore)
 
-(defun vc-default-dir-status-files (_backend _dir files default-state 
update-function)
+(defun vc-default-dir-status-files (_backend _dir files update-function)
   (funcall update-function
-           (mapcar (lambda (file) (list file default-state)) files)))
+           (mapcar (lambda (file) (list file 'up-to-date)) files)))
 
 (defun vc-check-headers ()
   "Check if the current file has any headers in it."
diff --git a/lisp/vcursor.el b/lisp/vcursor.el
index 05ce937..440a278 100644
--- a/lisp/vcursor.el
+++ b/lisp/vcursor.el
@@ -1,6 +1,6 @@
 ;;; vcursor.el --- manipulate an alternative ("virtual") cursor
 
-;; Copyright (C) 1994, 1996, 1998, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1994, 1996, 1998, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author:   Peter Stephenson <address@hidden>
diff --git a/lisp/version.el b/lisp/version.el
index cab2d28..1837cbf 100644
--- a/lisp/version.el
+++ b/lisp/version.el
@@ -1,6 +1,6 @@
 ;;; version.el --- record version number of Emacs
 
-;; Copyright (C) 1985, 1992, 1994-1995, 1999-2014 Free Software
+;; Copyright (C) 1985, 1992, 1994-1995, 1999-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -93,41 +93,6 @@ or if we could not determine the revision.")
 (define-obsolete-variable-alias 'emacs-bzr-version
                                 'emacs-repository-version "24.4")
 
-(defun emacs-bzr-version-dirstate (dir)
-  "Try to return as a string the bzr revision ID of directory DIR.
-This uses the dirstate file's parent revision entry.
-Returns nil if unable to find this information."
-  (let ((file (expand-file-name ".bzr/checkout/dirstate" dir)))
-    (when (file-readable-p file)
-      (with-temp-buffer
-        (insert-file-contents file)
-        (and (looking-at "#bazaar dirstate flat format 3")
-             (forward-line 3)
-             (looking-at "[0-9]+\0\\([^\0\n]+\\)\0")
-             (match-string 1))))))
-
-(defun emacs-bzr-version-bzr (dir)
-  "Ask bzr itself for the version information for directory DIR."
-  ;; Comments on `bzr version-info':
-  ;; i) Unknown files also cause clean != 1.
-  ;; ii) It can be slow, contacting the upstream repo to get the
-  ;; branch nick if one is not set locally, even with a custom
-  ;; template that is not asking for the nick (as used here).  You'd
-  ;; think the latter part would be trivial to fix:
-  ;; https://bugs.launchpad.net/bzr/+bug/882541/comments/3
-  ;; https://bugs.launchpad.net/bzr/+bug/629150
-  ;; You can set the nick locally with `bzr nick ...', which speeds
-  ;; things up enormously.  `bzr revno' does not have this issue, but
-  ;; has no way to print the revision_id AFAICS.
-  (message "Waiting for bzr...")
-  (with-temp-buffer
-    (if (zerop
-         (call-process "bzr" nil '(t nil) nil "version-info"
-                       "--custom"
-                       "--template={revno} {revision_id} (clean = {clean})"
-                       dir))
-        (buffer-string))))
-
 (define-obsolete-function-alias 'emacs-bzr-get-version
                                 'emacs-repository-get-version "24.4")
 
@@ -140,48 +105,10 @@ this reports on the current state of the sources, which 
may not
 correspond to the running Emacs.
 
 Optional argument DIR is a directory to use instead of
-`source-directory'.  Optional argument EXTERNAL non-nil means to
-maybe ask the VCS itself, if the sources appear to be under
-version control.  If `force', always ask.  the VCS. Otherwise
-only ask the VCS if we cannot find any information ourselves."
+`source-directory'.  Optional argument EXTERNAL is ignored and is
+retained for compatibility."
   (or dir (setq dir source-directory))
-  (cond ((file-directory-p (expand-file-name ".bzr/branch" dir))
-        (if (eq external 'force)
-            (emacs-bzr-version-bzr dir)
-          (let (file loc rev)
-            (cond ((file-readable-p
-                    (setq file (expand-file-name
-                                ".bzr/branch/last-revision" dir)))
-                   (with-temp-buffer
-                     (insert-file-contents file)
-                     (goto-char (point-max))
-                     (if (looking-back "\n")
-                         (delete-char -1))
-                     (buffer-string)))
-                  ;; OK, no last-revision.  Is it a lightweight checkout?
-                  ((file-readable-p
-                    (setq file (expand-file-name ".bzr/branch/location" dir)))
-                   (setq rev (emacs-bzr-version-dirstate dir))
-                   ;; If parent branch is local, try looking there for the rev.
-                   ;; Note: there is no guarantee that the parent branch's rev
-                   ;; corresponds to this branch.  This branch could have
-                   ;; been made with a specific -r revno argument, or the
-                   ;; parent could have been updated since this branch was
-                   ;; created.
-                   ;; To try and detect this, we check the dirstate revids
-                   ;; to see if they match.
-                   (if (and (setq loc (with-temp-buffer
-                                        (insert-file-contents file)
-                                        (if (looking-at "file://\\(.*\\)")
-                                            (match-string 1))))
-                            (equal rev (emacs-bzr-version-dirstate loc)))
-                       (emacs-repository-get-version loc)
-                     ;; If parent does not match, the best we can do without
-                     ;; calling external commands is to use the dirstate rev.
-                     rev))
-                  (external
-                   (emacs-bzr-version-bzr dir))))))
-       ((file-directory-p (expand-file-name ".git" dir))
+  (cond ((file-directory-p (expand-file-name ".git" dir))
         (message "Waiting for git...")
         (with-temp-buffer
           (let ((default-directory (file-name-as-directory dir)))
diff --git a/lisp/view.el b/lisp/view.el
index 9f914b0..3f0a6dc 100644
--- a/lisp/view.el
+++ b/lisp/view.el
@@ -1,6 +1,6 @@
 ;;; view.el --- peruse file or buffer without editing
 
-;; Copyright (C) 1985, 1989, 1994-1995, 1997, 2000-2014 Free Software
+;; Copyright (C) 1985, 1989, 1994-1995, 1997, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Author: K. Shane Hartman
diff --git a/lisp/vt-control.el b/lisp/vt-control.el
index 8d96d72..1238503 100644
--- a/lisp/vt-control.el
+++ b/lisp/vt-control.el
@@ -1,6 +1,6 @@
 ;;; vt-control.el --- Common VTxxx control functions
 
-;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <address@hidden>
 ;; Maintainer: Rob Riepel <address@hidden>
diff --git a/lisp/vt100-led.el b/lisp/vt100-led.el
index aca4520..b7c377a 100644
--- a/lisp/vt100-led.el
+++ b/lisp/vt100-led.el
@@ -1,6 +1,6 @@
 ;;; vt100-led.el --- functions for LED control on VT-100 terminals & clones
 
-;; Copyright (C) 1988, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: address@hidden
diff --git a/lisp/w32-fns.el b/lisp/w32-fns.el
index 2cbeb49..876df87 100644
--- a/lisp/w32-fns.el
+++ b/lisp/w32-fns.el
@@ -1,6 +1,6 @@
 ;;; w32-fns.el --- Lisp routines for 32-bit Windows
 
-;; Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Geoff Voelker <address@hidden>
 ;; Keywords: internal
diff --git a/lisp/w32-vars.el b/lisp/w32-vars.el
index 30087d5..ae42ee7 100644
--- a/lisp/w32-vars.el
+++ b/lisp/w32-vars.el
@@ -1,6 +1,6 @@
 ;;; w32-vars.el --- MS-Windows specific user options
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Jason Rumney <address@hidden>
 ;; Keywords: internal
diff --git a/lisp/wdired.el b/lisp/wdired.el
index 2e53944..c72e134 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -1,6 +1,6 @@
 ;;; wdired.el --- Rename files editing their names in dired buffers
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Filename: wdired.el
 ;; Author: Juan León Lahoz García <address@hidden>
diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 4edeff9..b4cd67f 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -1,6 +1,6 @@
 ;;; whitespace.el --- minor mode to visualize TAB, (HARD) SPACE, NEWLINE
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <address@hidden>
 ;; Maintainer: Vinicius Jose Latorre <address@hidden>
@@ -866,6 +866,7 @@ NOTE: Enclose always by \\\\( and \\\\) the elements to 
highlight.
       Use exactly one pair of enclosing \\\\( and \\\\).
 
 Used when `whitespace-style' includes `big-indent'."
+  :version "25.1"
   :type '(regexp :tag "Detect too much indentation at the beginning of a line")
   :group 'whitespace)
 
diff --git a/lisp/wid-browse.el b/lisp/wid-browse.el
index 4394c29..7e2bcb4 100644
--- a/lisp/wid-browse.el
+++ b/lisp/wid-browse.el
@@ -1,6 +1,6 @@
 ;;; wid-browse.el --- functions for browsing widgets
 ;;
-;; Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Keywords: extensions
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index 92e52bf..04a900f 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -1,6 +1,6 @@
 ;;; wid-edit.el --- Functions for creating and using widgets 
-*-byte-compile-dynamic: t; lexical-binding:t -*-
 ;;
-;; Copyright (C) 1996-1997, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 1999-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Maintainer: address@hidden
@@ -232,23 +232,20 @@ minibuffer."
        (t
         ;; Construct a menu of the choices
         ;; and then use it for prompting for a single character.
-        (let* ((overriding-terminal-local-map (make-sparse-keymap))
-               (next-digit ?0)
-               map choice some-choice-enabled value)
-          ;; Define SPC as a prefix char to get to this menu.
-          (define-key overriding-terminal-local-map " "
-            (setq map (make-sparse-keymap title)))
+        (let* ((next-digit ?0)
+               (map (make-sparse-keymap))
+                choice some-choice-enabled value)
           (with-current-buffer (get-buffer-create " widget-choose")
             (erase-buffer)
             (insert "Available choices:\n\n")
             (while items
-              (setq choice (car items) items (cdr items))
-              (if (consp choice)
-                  (let* ((name (car choice))
-                        (function (cdr choice)))
-                    (insert (format "%c = %s\n" next-digit name))
-                    (define-key map (vector next-digit) function)
-                    (setq some-choice-enabled t)))
+              (setq choice (pop items))
+              (when (consp choice)
+                 (let* ((name (car choice))
+                        (function (cdr choice)))
+                   (insert (format "%c = %s\n" next-digit name))
+                   (define-key map (vector next-digit) function)
+                   (setq some-choice-enabled t)))
               ;; Allocate digits to disabled alternatives
               ;; so that the digit of a given alternative never varies.
               (setq next-digit (1+ next-digit)))
@@ -257,43 +254,29 @@ minibuffer."
             (forward-line))
           (or some-choice-enabled
               (error "None of the choices is currently meaningful"))
-          (define-key map [?\C-g] 'keyboard-quit)
-          (define-key map [t] 'keyboard-quit)
           (define-key map [?\M-\C-v] 'scroll-other-window)
           (define-key map [?\M--] 'negative-argument)
-          (setcdr map (nreverse (cdr map)))
-          ;; Read a char with the menu, and return the result
-          ;; that corresponds to it.
           (save-window-excursion
             (let ((buf (get-buffer " widget-choose")))
               (fit-window-to-buffer (display-buffer buf))
               (let ((cursor-in-echo-area t)
-                    keys
-                    (char 0)
                     (arg 1))
-                (while (not (or (and (integerp char)
-                                     (>= char ?0) (< char next-digit))
-                                (eq value 'keyboard-quit)))
-                  ;; Unread a SPC to lead to our new menu.
-                  (setq unread-command-events (cons ?\s unread-command-events))
-                  (setq keys (read-key-sequence title))
-                  (setq value
-                        (lookup-key overriding-terminal-local-map keys t)
-                        char (aref keys 1))
-                  (cond ((eq value 'scroll-other-window)
-                         (let ((minibuffer-scroll-window
-                                (get-buffer-window buf)))
-                           (if (> 0 arg)
-                               (scroll-other-window-down
-                                (window-height minibuffer-scroll-window))
-                             (scroll-other-window))
-                           (setq arg 1)))
-                        ((eq value 'negative-argument)
-                         (setq arg -1))
-                        (t
-                         (setq arg 1)))))))
-          (when (eq value 'keyboard-quit)
-            (error "Canceled"))
+                 (while (not value)
+                   (setq value (lookup-key map (read-key-sequence (format "%s: 
" title))))
+                   (unless value
+                     (user-error "Canceled"))
+                   (when
+                       (cond ((eq value 'scroll-other-window)
+                               (let ((minibuffer-scroll-window
+                                      (get-buffer-window buf)))
+                                 (if (> 0 arg)
+                                     (scroll-other-window-down
+                                      (window-height minibuffer-scroll-window))
+                                   (scroll-other-window))
+                                 (setq arg 1)))
+                              ((eq value 'negative-argument)
+                               (setq arg -1)))
+                     (setq value nil))))))
           value))))
 
 ;;; Widget text specifications.
diff --git a/lisp/widget.el b/lisp/widget.el
index f82b275..f8faa0f 100644
--- a/lisp/widget.el
+++ b/lisp/widget.el
@@ -1,6 +1,6 @@
 ;;; widget.el --- a library of user interface components
 ;;
-;; Copyright (C) 1996-1997, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Keywords: help, extensions, faces, hypermedia
diff --git a/lisp/windmove.el b/lisp/windmove.el
index ff41ebb..d857dfc 100644
--- a/lisp/windmove.el
+++ b/lisp/windmove.el
@@ -1,6 +1,6 @@
 ;;; windmove.el --- directional window-selection routines
 ;;
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Hovav Shacham (address@hidden)
 ;; Created: 17 October 1998
diff --git a/lisp/window.el b/lisp/window.el
index 91a0e15..abc6006 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -1,6 +1,6 @@
 ;;; window.el --- GNU Emacs window commands aside from those written in C
 
-;; Copyright (C) 1985, 1989, 1992-1994, 2000-2014 Free Software
+;; Copyright (C) 1985, 1989, 1992-1994, 2000-2015 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: address@hidden
@@ -185,19 +185,19 @@ argument replaces this)."
   (let ((buffer (make-symbol "buffer"))
        (window (make-symbol "window"))
        (value (make-symbol "value")))
-    (macroexp-let2 nil vbuffer-or-name buffer-or-name
-      (macroexp-let2 nil vaction action
-       (macroexp-let2 nil vquit-function quit-function
-         `(let* ((,buffer (temp-buffer-window-setup ,vbuffer-or-name))
-                 (standard-output ,buffer)
-                 ,window ,value)
-            (setq ,value (progn ,@body))
-            (with-current-buffer ,buffer
-              (setq ,window (temp-buffer-window-show ,buffer ,vaction)))
-
-            (if (functionp ,vquit-function)
-                (funcall ,vquit-function ,window ,value)
-              ,value)))))))
+    (macroexp-let2* nil ((vbuffer-or-name buffer-or-name)
+                        (vaction action)
+                        (vquit-function quit-function))
+      `(let* ((,buffer (temp-buffer-window-setup ,vbuffer-or-name))
+             (standard-output ,buffer)
+             ,window ,value)
+        (setq ,value (progn ,@body))
+        (with-current-buffer ,buffer
+          (setq ,window (temp-buffer-window-show ,buffer ,vaction)))
+
+        (if (functionp ,vquit-function)
+            (funcall ,vquit-function ,window ,value)
+          ,value)))))
 
 (defmacro with-current-buffer-window (buffer-or-name action quit-function 
&rest body)
   "Evaluate BODY with a buffer BUFFER-OR-NAME current and show that buffer.
@@ -208,19 +208,19 @@ BODY."
   (let ((buffer (make-symbol "buffer"))
        (window (make-symbol "window"))
        (value (make-symbol "value")))
-    (macroexp-let2 nil vbuffer-or-name buffer-or-name
-      (macroexp-let2 nil vaction action
-       (macroexp-let2 nil vquit-function quit-function
-         `(let* ((,buffer (temp-buffer-window-setup ,vbuffer-or-name))
-                 (standard-output ,buffer)
-                 ,window ,value)
-            (with-current-buffer ,buffer
-              (setq ,value (progn ,@body))
-              (setq ,window (temp-buffer-window-show ,buffer ,vaction)))
-
-            (if (functionp ,vquit-function)
-                (funcall ,vquit-function ,window ,value)
-              ,value)))))))
+    (macroexp-let2* nil ((vbuffer-or-name buffer-or-name)
+                        (vaction action)
+                        (vquit-function quit-function))
+      `(let* ((,buffer (temp-buffer-window-setup ,vbuffer-or-name))
+             (standard-output ,buffer)
+             ,window ,value)
+        (with-current-buffer ,buffer
+          (setq ,value (progn ,@body))
+          (setq ,window (temp-buffer-window-show ,buffer ,vaction)))
+
+        (if (functionp ,vquit-function)
+            (funcall ,vquit-function ,window ,value)
+          ,value)))))
 
 (defmacro with-displayed-buffer-window (buffer-or-name action quit-function 
&rest body)
   "Show a buffer BUFFER-OR-NAME and evaluate BODY in that buffer.
@@ -230,28 +230,39 @@ displays the buffer specified by BUFFER-OR-NAME before 
running BODY."
   (let ((buffer (make-symbol "buffer"))
        (window (make-symbol "window"))
        (value (make-symbol "value")))
-    (macroexp-let2 nil vbuffer-or-name buffer-or-name
-      (macroexp-let2 nil vaction action
-       (macroexp-let2 nil vquit-function quit-function
-         `(let* ((,buffer (temp-buffer-window-setup ,vbuffer-or-name))
-                 (standard-output ,buffer)
-                 ,window ,value)
-            (with-current-buffer ,buffer
-              (setq ,window (temp-buffer-window-show ,buffer ,vaction)))
-
-            (let ((inhibit-read-only t)
-                  (inhibit-modification-hooks t))
-              (setq ,value (progn ,@body)))
-
-            (set-window-point ,window (point-min))
+    (macroexp-let2* nil ((vbuffer-or-name buffer-or-name)
+                        (vaction action)
+                        (vquit-function quit-function))
+      `(let* ((,buffer (temp-buffer-window-setup ,vbuffer-or-name))
+             (standard-output ,buffer)
+             ,window ,value)
+        (with-current-buffer ,buffer
+          (setq ,window (temp-buffer-window-show
+                         ,buffer
+                         ;; Remove window-height when it's handled below.
+                         (if (functionp (cdr (assq 'window-height (cdr 
,vaction))))
+                             (assq-delete-all 'window-height (copy-sequence 
,vaction))
+                           ,vaction))))
+
+        (let ((inhibit-read-only t)
+              (inhibit-modification-hooks t))
+          (setq ,value (progn ,@body)))
+
+        (set-window-point ,window (point-min))
+
+        (when (functionp (cdr (assq 'window-height (cdr ,vaction))))
+          (ignore-errors
+            (funcall (cdr (assq 'window-height (cdr ,vaction))) ,window)))
 
-            (when (functionp (cdr (assq 'window-height (cdr ,vaction))))
-              (ignore-errors
-                (funcall (cdr (assq 'window-height (cdr ,vaction))) ,window)))
+        (when (consp (cdr (assq 'preserve-size (cdr ,vaction))))
+          (window-preserve-size
+           ,window t (cadr (assq 'preserve-size (cdr ,vaction))))
+         (window-preserve-size
+           ,window nil (cddr (assq 'preserve-size (cdr ,vaction)))))
 
-            (if (functionp ,vquit-function)
-                (funcall ,vquit-function ,window ,value)
-              ,value)))))))
+        (if (functionp ,vquit-function)
+            (funcall ,vquit-function ,window ,value)
+          ,value)))))
 
 ;; The following two functions are like `window-next-sibling' and
 ;; `window-prev-sibling' but the WINDOW argument is _not_ optional (so
@@ -435,6 +446,14 @@ minimum pixel width of WINDOW."
       (window-safe-min-pixel-width window)
     (window-safe-min-pixel-height window)))
 
+(defun window-min-pixel-size (&optional window horizontal)
+  "Return the minimum pixel height of WINDOW.
+Optional argument HORIZONTAL non-nil means return the minimum
+pixel width of WINDOW."
+  (if horizontal
+      (window-min-pixel-width window)
+    (window-min-pixel-height window)))
+
 (defun window-combined-p (&optional window horizontal)
   "Return non-nil if WINDOW has siblings in a given direction.
 WINDOW must be a valid window and defaults to the selected one.
@@ -1215,9 +1234,73 @@ unless it has no other choice (like when deleting a 
neighboring
 window).")
 (make-variable-buffer-local 'window-size-fixed)
 
-(defun window--size-ignore-p (window ignore)
-  "Return non-nil if IGNORE says to ignore size restrictions for WINDOW."
-  (if (window-valid-p ignore) (eq window ignore) ignore))
+(defun window--preservable-size (window &optional horizontal)
+  "Return height of WINDOW as `window-preserve-size' would preserve it.
+Optional argument HORIZONTAL non-nil means to return the width of
+WINDOW as `window-preserve-size' would preserve it."
+  (if horizontal
+      (window-body-width window t)
+    (+ (window-body-height window t)
+       (window-header-line-height window)
+       (window-mode-line-height window))))
+
+(defun window-preserve-size (&optional window horizontal preserve)
+  "Preserve height of window WINDOW.
+WINDOW must be a live window and defaults to the selected one.
+Optional argument HORIZONTAL non-nil means preserve the width of
+WINDOW.
+
+PRESERVE t means to preserve the current height/width of WINDOW's
+body in frame and window resizing operations whenever possible.
+The height/width of WINDOW will change only if Emacs has no other
+choice.  Resizing a window whose height/width is preserved never
+throws an error.
+
+PRESERVE nil means to stop preserving the height/width of WINDOW,
+lifting the respective restraint induced by a previous call of
+`window-preserve-size' for WINDOW.  Calling `enlarge-window',
+`shrink-window', `split-window' or `fit-window-to-buffer' with
+WINDOW as argument also removes the respective restraint.
+
+Other values of PRESERVE are reserved for future use."
+  (setq window (window-normalize-window window t))
+  (let* ((parameter (window-parameter window 'window-preserved-size))
+        (width (nth 1 parameter))
+        (height (nth 2 parameter)))
+    (if horizontal
+       (set-window-parameter
+        window 'window-preserved-size
+        (list
+         (window-buffer window)
+         (and preserve (window--preservable-size window t))
+         height))
+      (set-window-parameter
+       window 'window-preserved-size
+       (list
+       (window-buffer window)
+       width
+       (and preserve (window--preservable-size window)))))))
+
+(defun window-preserved-size (&optional window horizontal)
+  "Return preserved height of window WINDOW.
+WINDOW must be a live window and defaults to the selected one.
+Optional argument HORIZONTAL non-nil means to return preserved
+width of WINDOW."
+  (setq window (window-normalize-window window t))
+  (let* ((parameter (window-parameter window 'window-preserved-size))
+        (buffer (nth 0 parameter))
+        (width (nth 1 parameter))
+        (height (nth 2 parameter)))
+    (when (eq buffer (window-buffer window))
+      (if horizontal width height))))
+
+(defun window--preserve-size (window horizontal)
+  "Return non-nil when the height of WINDOW shall be preserved.
+Optional argument HORIZONTAL non-nil means to return non-nil when
+the width of WINDOW shall be preserved."
+  (let ((size (window-preserved-size window horizontal)))
+    (and (numberp size)
+        (= size (window--preservable-size window horizontal)))))
 
 (defun window-safe-min-size (&optional window horizontal pixelwise)
   "Return safe minimum size of WINDOW.
@@ -1244,19 +1327,20 @@ Optional argument HORIZONTAL non-nil means return the 
minimum
 number of columns of WINDOW; otherwise return the minimum number
 of WINDOW's lines.
 
-Optional argument IGNORE, if non-nil, means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE equals `safe', live
-windows may get as small as `window-safe-min-height' lines and
-`window-safe-min-width' columns.  If IGNORE is a window, ignore
-restrictions for that window only.  Any other non-nil value
-means ignore all of the above restrictions for all windows.
-
-Optional argument PIXELWISE non-nil means return the minimum pixel-size
-of WINDOW."
+The optional argument IGNORE has the same meaning as for
+`window-resizable'.  Optional argument PIXELWISE non-nil means
+return the minimum pixel-size of WINDOW."
   (window--min-size-1
    (window-normalize-window window) horizontal ignore pixelwise))
 
+(defun window--min-size-ignore-p (window horizontal ignore)
+  "Return non-nil if IGNORE says to ignore height restrictions for WINDOW.
+HORIZONTAL non-nil means to return non-nil if IGNORE says to
+ignore width restrictions for WINDOW."
+  (if (window-valid-p ignore)
+      (eq window ignore)
+    (not (memq ignore '(nil preserved)))))
+
 (defun window--min-size-1 (window horizontal ignore pixelwise)
   "Internal function of `window-min-size'."
   (let ((sub (window-child window)))
@@ -1283,8 +1367,7 @@ of WINDOW."
        (cond
         ((window-minibuffer-p window)
          (if pixelwise (frame-char-height (window-frame window)) 1))
-        ((and (not (window--size-ignore-p window ignore))
-              (window-size-fixed-p window horizontal))
+        ((window-size-fixed-p window horizontal ignore)
          ;; The minimum size of a fixed size window is its size.
          (window-size window horizontal pixelwise))
         ((eq ignore 'safe)
@@ -1313,12 +1396,12 @@ of WINDOW."
                     pixel-width
                   ;; Round up to next integral of columns.
                   (* (ceiling pixel-width char-size) char-size))
-                (if (window--size-ignore-p window ignore)
+                (if (window--min-size-ignore-p window horizontal ignore)
                     0
                   (window-min-pixel-width window)))
              (max
               (ceiling pixel-width char-size)
-              (if (window--size-ignore-p window ignore)
+              (if (window--min-size-ignore-p window horizontal ignore)
                   0
                 window-min-width)))))
         ((let ((char-size (frame-char-size window))
@@ -1334,11 +1417,11 @@ of WINDOW."
                     pixel-height
                   ;; Round up to next integral of lines.
                   (* (ceiling pixel-height char-size) char-size))
-                (if (window--size-ignore-p window ignore)
+                (if (window--min-size-ignore-p window horizontal ignore)
                     0
                   (window-min-pixel-height window)))
              (max (ceiling pixel-height char-size)
-                  (if (window--size-ignore-p window ignore)
+                  (if (window--min-size-ignore-p window horizontal ignore)
                       0
                     window-min-height))))))))))
 
@@ -1363,26 +1446,17 @@ columns.  If WINDOW cannot be shrunk by -DELTA lines or 
columns,
 return the minimum value in the range DELTA..0 by which WINDOW
 can be shrunk.
 
-Optional argument IGNORE non-nil means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE equals `safe', live
-windows may get as small as `window-safe-min-height' lines and
-`window-safe-min-width' columns.  If IGNORE is a window, ignore
-restrictions for that window only.  Any other non-nil value means
-ignore all of the above restrictions for all windows.
-
-Optional argument PIXELWISE non-nil means interpret DELTA as
-pixels."
+The optional argument IGNORE has the same meaning as for
+`window-resizable'.  Optional argument PIXELWISE non-nil means
+interpret DELTA as pixels."
   (setq window (window-normalize-window window))
   (cond
    ((< delta 0)
     (max (- (window-min-size window horizontal ignore pixelwise)
            (window-size window horizontal pixelwise))
         delta))
-   ((window--size-ignore-p window ignore)
-    delta)
    ((> delta 0)
-    (if (window-size-fixed-p window horizontal)
+    (if (window-size-fixed-p window horizontal ignore)
        0
       delta))
    (t 0)))
@@ -1399,7 +1473,7 @@ doc-string of `window-sizable'."
     (<= (window-sizable window delta horizontal ignore pixelwise)
        delta)))
 
-(defun window--size-fixed-1 (window horizontal)
+(defun window--size-fixed-1 (window horizontal ignore)
   "Internal function for `window-size-fixed-p'."
   (let ((sub (window-child window)))
     (catch 'fixed
@@ -1410,7 +1484,7 @@ doc-string of `window-sizable'."
              ;; windows are fixed-size.
              (progn
                (while sub
-                 (unless (window--size-fixed-1 sub horizontal)
+                 (unless (window--size-fixed-1 sub horizontal ignore)
                    ;; We found a non-fixed-size child window, so
                    ;; WINDOW's size is not fixed.
                    (throw 'fixed nil))
@@ -1421,28 +1495,33 @@ doc-string of `window-sizable'."
            ;; An ortho-combination is fixed-size if at least one of its
            ;; child windows is fixed-size.
            (while sub
-             (when (window--size-fixed-1 sub horizontal)
+             (when (window--size-fixed-1 sub horizontal ignore)
                ;; We found a fixed-size child window, so WINDOW's size
                ;; is fixed.
                (throw 'fixed t))
              (setq sub (window-right sub))))
        ;; WINDOW is a live window.
-       (with-current-buffer (window-buffer window)
-         (if horizontal
-             (memq window-size-fixed '(width t))
-           (memq window-size-fixed '(height t))))))))
-
-(defun window-size-fixed-p (&optional window horizontal)
+       (and (or (not (windowp ignore)) (not (eq window ignore)))
+            (or (and (not (eq ignore 'preserved))
+                     (window--preserve-size window horizontal))
+                (with-current-buffer (window-buffer window)
+                  (if horizontal
+                      (memq window-size-fixed '(width t))
+                    (memq window-size-fixed '(height t))))))))))
+
+(defun window-size-fixed-p (&optional window horizontal ignore)
   "Return non-nil if WINDOW's height is fixed.
 WINDOW must be a valid window and defaults to the selected one.
 Optional argument HORIZONTAL non-nil means return non-nil if
-WINDOW's width is fixed.
+WINDOW's width is fixed.  The optional argument IGNORE has the
+same meaning as for `window-resizable'.
 
 If this function returns nil, this does not necessarily mean that
 WINDOW can be resized in the desired direction.  The function
 `window-resizable' can tell that."
-  (window--size-fixed-1
-   (window-normalize-window window) horizontal))
+  (when (or (windowp ignore) (memq ignore '(nil preserved)))
+    (window--size-fixed-1
+     (window-normalize-window window) horizontal ignore)))
 
 (defun window--min-delta-1 (window delta &optional horizontal ignore trail 
noup pixelwise)
   "Internal function for `window-min-delta'."
@@ -1463,8 +1542,7 @@ WINDOW can be resized in the desired direction.  The 
function
                 ((eq sub window)
                  (setq skip (eq trail 'before)))
                 (skip)
-                ((and (not (window--size-ignore-p window ignore))
-                      (window-size-fixed-p sub horizontal)))
+                ((window-size-fixed-p sub horizontal ignore))
                 (t
                  ;; We found a non-fixed-size child window.
                  (throw 'done delta)))
@@ -1493,25 +1571,18 @@ Return zero if WINDOW cannot be shrunk.
 Optional argument HORIZONTAL non-nil means return number of
 columns by which WINDOW can be shrunk.
 
-Optional argument IGNORE non-nil means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE is a window, ignore
-restrictions for that window only.  If IGNORE equals `safe',
-live windows may get as small as `window-safe-min-height' lines
-and `window-safe-min-width' columns.  Any other non-nil value
-means ignore all of the above restrictions for all windows.
-
-Optional argument TRAIL restricts the windows that can be enlarged.
-If its value is `before', only windows to the left of or above WINDOW
-can be enlarged.  If it is `after', only windows to the right of or
-below WINDOW can be enlarged.
+The optional argument IGNORE has the same meaning as for
+`window-resizable'.  Optional argument TRAIL restricts the
+windows that can be enlarged.  If its value is `before', only
+windows to the left of or above WINDOW can be enlarged.  If it is
+`after', only windows to the right of or below WINDOW can be
+enlarged.
 
 Optional argument NOUP non-nil means don't go up in the window
-tree, but try to enlarge windows within WINDOW's combination only.
-
-Optional argument NODOWN non-nil means don't check whether WINDOW
-itself (and its child windows) can be shrunk; check only whether
-at least one other window can be enlarged appropriately.
+tree, but try to enlarge windows within WINDOW's combination
+only.  Optional argument NODOWN non-nil means don't check whether
+WINDOW itself (and its child windows) can be shrunk; check only
+whether at least one other window can be enlarged appropriately.
 
 Optional argument PIXELWISE non-nil means return number of pixels
 by which WINDOW can be shrunk."
@@ -1533,14 +1604,16 @@ by which WINDOW can be shrunk."
       (window--min-delta-1
        window (- size minimum) horizontal ignore trail noup pixelwise)))))
 
-(defun frame-windows-min-size (&optional frame horizontal pixelwise)
+(defun frame-windows-min-size (&optional frame horizontal ignore pixelwise)
   "Return minimum number of lines of FRAME's windows.
 HORIZONTAL non-nil means return number of columns of FRAME's
-windows.  PIXELWISE non-nil means return sizes in pixels."
+windows.  The optional argument IGNORE has the same meaning as
+for `window-resizable'.  PIXELWISE non-nil means return sizes in
+pixels."
   (setq frame (window-normalize-frame frame))
   (let* ((root (frame-root-window frame))
         (mini (window-next-sibling root)))
-    (+ (window-min-size root horizontal nil pixelwise)
+    (+ (window-min-size root horizontal ignore pixelwise)
        (if (and mini (not horizontal))
           (window-min-size mini horizontal nil pixelwise)
         0))))
@@ -1575,8 +1648,7 @@ windows.  PIXELWISE non-nil means return sizes in pixels."
          ;; child window is fixed-size.
          (while sub
            (when (and (not (eq sub window))
-                      (not (window--size-ignore-p sub ignore))
-                      (window-size-fixed-p sub horizontal))
+                      (window-size-fixed-p sub horizontal ignore))
              (throw 'fixed delta))
            (setq sub (window-right sub))))
        (if noup
@@ -1595,32 +1667,24 @@ The return value is zero if WINDOW cannot be enlarged.
 Optional argument HORIZONTAL non-nil means return maximum number
 of columns by which WINDOW can be enlarged.
 
-Optional argument IGNORE non-nil means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE is a window, ignore
-restrictions for that window only.  If IGNORE equals `safe',
-live windows may get as small as `window-safe-min-height' lines
-and `window-safe-min-width' columns.  Any other non-nil value means
-ignore all of the above restrictions for all windows.
-
-Optional argument TRAIL restricts the windows that can be enlarged.
-If its value is `before', only windows to the left of or above WINDOW
-can be enlarged.  If it is `after', only windows to the right of or
-below WINDOW can be enlarged.
+The optional argument IGNORE has the same meaning as for
+`window-resizable'.  Optional argument TRAIL restricts the
+windows that can be enlarged.  If its value is `before', only
+windows to the left of or above WINDOW can be enlarged.  If it is
+`after', only windows to the right of or below WINDOW can be
+enlarged.
 
 Optional argument NOUP non-nil means don't go up in the window
 tree but try to obtain the entire space from windows within
-WINDOW's combination.
-
-Optional argument NODOWN non-nil means do not check whether
-WINDOW itself (and its child windows) can be enlarged; check
-only whether other windows can be shrunk appropriately.
+WINDOW's combination.  Optional argument NODOWN non-nil means do
+not check whether WINDOW itself (and its child windows) can be
+enlarged; check only whether other windows can be shrunk
+appropriately.
 
 Optional argument PIXELWISE non-nil means return number of
 pixels by which WINDOW can be enlarged."
   (setq window (window-normalize-window window))
-  (if (and (not (window--size-ignore-p window ignore))
-          (not nodown) (window-size-fixed-p window horizontal))
+  (if (and (not nodown) (window-size-fixed-p window horizontal ignore))
       ;; With IGNORE and NOWDON nil return zero if WINDOW has fixed
       ;; size.
       0
@@ -1645,26 +1709,18 @@ columns.  If WINDOW cannot be shrunk by -DELTA lines or 
columns,
 return the minimum value in the range DELTA..0 that can be used
 for shrinking WINDOW.
 
-Optional argument IGNORE non-nil means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE is a window, ignore
-restrictions for that window only.  If IGNORE equals `safe',
-live windows may get as small as `window-safe-min-height' lines
-and `window-safe-min-width' columns.  Any other non-nil value
-means ignore all of the above restrictions for all windows.
-
-Optional argument TRAIL `before' means only windows to the left
-of or below WINDOW can be shrunk.  Optional argument TRAIL
-`after' means only windows to the right of or above WINDOW can be
-shrunk.
+The optional argument IGNORE has the same meaning as for
+`window-resizable'.  Optional argument TRAIL `before' means only
+windows to the left of or below WINDOW can be shrunk.  Optional
+argument TRAIL `after' means only windows to the right of or
+above WINDOW can be shrunk.
 
 Optional argument NOUP non-nil means don't go up in the window
 tree but check only whether space can be obtained from (or given
-to) WINDOW's siblings.
-
-Optional argument NODOWN non-nil means don't go down in the
-window tree.  This means do not check whether resizing would
-violate size restrictions of WINDOW or its child windows.
+to) WINDOW's siblings.  Optional argument NODOWN non-nil means
+don't go down in the window tree.  This means do not check
+whether resizing would violate size restrictions of WINDOW or its
+child windows.
 
 Optional argument PIXELWISE non-nil means interpret DELTA as
 number of pixels."
@@ -1714,13 +1770,14 @@ columns.  If WINDOW cannot be shrunk by -DELTA lines or 
columns,
 return the minimum value in the range DELTA..0 that can be used
 for shrinking WINDOW.
 
-Optional argument IGNORE non-nil means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE is a window, ignore
-restrictions for that window only.  If IGNORE equals `safe',
-live windows may get as small as `window-safe-min-height' lines
-and `window-safe-min-width' columns.  Any other non-nil value
-means ignore all of the above restrictions for all windows.
+Optional argument IGNORE, if non-nil, means to ignore restraints
+induced by fixed size windows or the values of the variables
+`window-min-height' and `window-min-width'.  The following values
+have special meanings: `safe' means that in addition live windows
+are allowed to get as small as `window-safe-min-height' lines and
+`window-safe-min-width' columns.  `preserved' means to ignore
+only restrictions induced by `window-preserve-size'.  If IGNORE
+is a window, then ignore restrictions for that window only.
 
 Optional argument PIXELWISE non-nil means interpret DELTA as
 pixels."
@@ -2419,13 +2476,14 @@ horizontally by DELTA columns.  In this case a positive 
DELTA
 means enlarge WINDOW by DELTA columns.  DELTA negative means
 WINDOW shall be shrunk by -DELTA columns.
 
-Optional argument IGNORE non-nil means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE is a window, ignore
-restrictions for that window only.  If IGNORE equals `safe',
-live windows may get as small as `window-safe-min-height' lines
-and `window-safe-min-width' columns.  Any other non-nil value
-means ignore all of the above restrictions for all windows.
+Optional argument IGNORE, if non-nil, means to ignore restraints
+induced by fixed size windows or the values of the variables
+`window-min-height' and `window-min-width'.  The following values
+have special meanings: `safe' means that in addition live windows
+are allowed to get as small as `window-safe-min-height' lines and
+`window-safe-min-width' columns.  `preserved' means to ignore
+only restrictions induced by `window-preserve-size'.  If IGNORE
+is a window, then ignore restrictions for that window only.
 
 Optional argument PIXELWISE non-nil means resize WINDOW by DELTA
 pixels.
@@ -2456,8 +2514,12 @@ instead."
       ;; nil or the minibuffer window is active, resize the minibuffer
       ;; window.
       (window--resize-mini-window minibuffer-window (- delta)))
-     ((window--resizable-p
-       window delta horizontal ignore nil nil nil t)
+     ((or (window--resizable-p
+          window delta horizontal ignore nil nil nil t)
+         (and (not ignore)
+              (setq ignore 'preserved)
+              (window--resizable-p
+               window delta horizontal ignore nil nil nil t)))
       (window--resize-reset frame horizontal)
       (window--resize-this-window window delta horizontal ignore t)
       (if (and (not window-combination-resize)
@@ -2615,13 +2677,8 @@ be a horizontally combined internal window.
 WINDOW, if specified, must denote a child window of PARENT that
 is resized by DELTA pixels.
 
-Optional argument IGNORE non-nil means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE equals `safe', live
-windows may get as small as `window-safe-min-height' lines and
-`window-safe-min-width' columns.  If IGNORE is a window, ignore
-restrictions for that window only.  Any other non-nil value means
-ignore all of the above restrictions for all windows.
+The optional argument IGNORE has the same meaning as for
+`window-resizable'.
 
 Optional arguments TRAIL and EDGE, when non-nil, restrict the set
 of windows that shall be resized.  If TRAIL equals `before',
@@ -2692,7 +2749,7 @@ already set by this routine."
              ;; Ignore windows to skip and fixed-size child windows -
              ;; in the latter case make it a window to skip.
              (and (not ignore)
-                  (window-size-fixed-p sub horizontal)
+                  (window-size-fixed-p sub horizontal ignore)
                   (set-window-new-normal sub 'ignore))))
         ((< delta 0)
          ;; When shrinking store the number of lines/cols we can get
@@ -2798,13 +2855,8 @@ Optional argument HORIZONTAL non-nil means resize other 
windows
 when WINDOW is resized horizontally by DELTA pixels.  WINDOW
 itself is not resized by this function.
 
-Optional argument IGNORE non-nil means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE equals `safe', live
-windows may get as small as `window-safe-min-height' lines and
-`window-safe-min-width' columns.  If IGNORE is a window, ignore
-restrictions for that window only.  Any other non-nil value means
-ignore all of the above restrictions for all windows.
+The optional argument IGNORE has the same meaning as for
+`window-resizable'.
 
 Optional arguments TRAIL and EDGE, when non-nil, refine the set
 of windows that shall be resized.  If TRAIL equals `before',
@@ -2831,8 +2883,7 @@ preferably only resize windows adjacent to EDGE."
                ;; Make sure this sibling is left alone when
                ;; resizing its siblings.
                (set-window-new-normal sub 'ignore))
-              ((or (window--size-ignore-p sub ignore)
-                   (not (window-size-fixed-p sub horizontal)))
+              ((not (window-size-fixed-p sub horizontal ignore))
                ;; Set this-delta to t to signal that we found a sibling
                ;; of WINDOW whose size is not fixed.
                (setq this-delta t)))
@@ -2902,16 +2953,9 @@ preferably only resize windows adjacent to EDGE."
 Optional argument HORIZONTAL non-nil means resize WINDOW
 horizontally by DELTA pixels.
 
-Optional argument IGNORE non-nil means ignore restrictions
-imposed by fixed size windows, `window-min-height' or
-`window-min-width' settings.  If IGNORE equals `safe', live
-windows may get as small as `window-safe-min-height' lines and
-`window-safe-min-width' columns.  If IGNORE is a window, ignore
-restrictions for that window only.  Any other non-nil value
-means ignore all of the above restrictions for all windows.
-
-Optional argument ADD non-nil means add DELTA to the new total
-size of WINDOW.
+The optional argument IGNORE has the same meaning as for
+`window-resizable'.  Optional argument ADD non-nil means add
+DELTA to the new total size of WINDOW.
 
 Optional arguments TRAIL and EDGE, when non-nil, refine the set
 of windows that shall be resized.  If TRAIL equals `before',
@@ -3057,7 +3101,7 @@ move it as far as possible in the desired direction."
   (let* ((frame (window-frame window))
         (minibuffer-window (minibuffer-window frame))
         (right window)
-        left this-delta min-delta max-delta)
+        left this-delta min-delta max-delta ignore)
 
     (unless pixelwise
       (setq pixelwise t)
@@ -3080,12 +3124,16 @@ move it as far as possible in the desired direction."
       (window--resize-mini-window minibuffer-window (- delta)))
      ((or (not (setq left right)) (not (setq right (window-right right))))
       (if horizontal
-         (error "No window on the right of this one")
-       (error "No window below this one")))
+         (user-error "No window on the right of this one")
+       (user-error "No window below this one")))
      (t
       ;; Set LEFT to the first resizable window on the left.  This step is
       ;; needed to handle fixed-size windows.
-      (while (and left (window-size-fixed-p left horizontal))
+      (while (and left
+                 (or (window-size-fixed-p left horizontal)
+                     (and (< delta 0)
+                          (<= (window-size left horizontal t)
+                              (window-min-size left horizontal nil t)))))
        (setq left
              (or (window-left left)
                  (progn
@@ -3093,13 +3141,31 @@ move it as far as possible in the desired direction."
                                (not (window-combined-p left horizontal))))
                    (window-left left)))))
       (unless left
-       (if horizontal
-           (error "No resizable window on the left of this one")
-         (error "No resizable window above this one")))
+       (setq ignore 'preserved)
+       (setq left window)
+       (while (and left
+                   (or (window-size-fixed-p left horizontal 'preserved)
+                       (<= (window-size left horizontal t)
+                           (window-min-size left horizontal 'preserved t))))
+         (setq left
+               (or (window-left left)
+                   (progn
+                     (while (and (setq left (window-parent left))
+                                 (not (window-combined-p left horizontal))))
+                     (window-left left)))))
+
+       (unless left
+         (if horizontal
+             (user-error "No resizable window on the left of this one")
+           (user-error "No resizable window above this one"))))
 
       ;; Set RIGHT to the first resizable window on the right.  This step
       ;; is needed to handle fixed-size windows.
-      (while (and right (window-size-fixed-p right horizontal))
+      (while (and right
+                 (or (window-size-fixed-p right horizontal)
+                     (and (> delta 0)
+                          (<= (window-size right horizontal t)
+                              (window-min-size right horizontal 'preserved 
t)))))
        (setq right
              (or (window-right right)
                  (progn
@@ -3107,9 +3173,22 @@ move it as far as possible in the desired direction."
                                (not (window-combined-p right horizontal))))
                    (window-right right)))))
       (unless right
-       (if horizontal
-           (error "No resizable window on the right of this one")
-         (error "No resizable window below this one")))
+       (setq ignore 'preserved)
+       (setq right (window-right window))
+       (while (and right
+                   (or (window-size-fixed-p right horizontal 'preserved))
+                   (<= (window-size right horizontal t)
+                       (window-min-size right horizontal nil t)))
+         (setq right
+               (or (window-right right)
+                   (progn
+                     (while (and (setq right (window-parent right))
+                                 (not (window-combined-p right horizontal))))
+                     (window-right right)))))
+       (unless right
+         (if horizontal
+             (user-error "No resizable window on the right of this one")
+           (user-error "No resizable window below this one"))))
 
       ;; LEFT and RIGHT (which might be both internal windows) are now the
       ;; two windows we want to resize.
@@ -3117,10 +3196,10 @@ move it as far as possible in the desired direction."
        ((> delta 0)
        (setq max-delta
              (window--max-delta-1
-              left 0 horizontal nil 'after nil pixelwise))
+              left 0 horizontal ignore 'after nil pixelwise))
        (setq min-delta
              (window--min-delta-1
-              right (- delta) horizontal nil 'before nil pixelwise))
+              right (- delta) horizontal ignore 'before nil pixelwise))
        (when (or (< max-delta delta) (> min-delta (- delta)))
          ;; We can't get the whole DELTA - move as far as possible.
          (setq delta (min max-delta (- min-delta))))
@@ -3129,26 +3208,26 @@ move it as far as possible in the desired direction."
          (window--resize-reset frame horizontal)
          ;; Try to enlarge LEFT first.
          (setq this-delta (window--resizable
-                           left delta horizontal nil 'after nil nil pixelwise))
+                           left delta horizontal ignore 'after nil nil 
pixelwise))
          (unless (zerop this-delta)
            (window--resize-this-window
-            left this-delta horizontal nil t 'before
+            left this-delta horizontal ignore t 'before
             (if horizontal
                 (+ (window-pixel-left left) (window-pixel-width left))
               (+ (window-pixel-top left) (window-pixel-height left)))))
          ;; Shrink windows on right of LEFT.
          (window--resize-siblings
-          left delta horizontal nil 'after
+          left delta horizontal ignore 'after
           (if horizontal
               (window-pixel-left right)
             (window-pixel-top right)))))
        ((< delta 0)
        (setq max-delta
              (window--max-delta-1
-              right 0 horizontal nil 'before nil pixelwise))
+              right 0 horizontal ignore 'before nil pixelwise))
        (setq min-delta
              (window--min-delta-1
-              left delta horizontal nil 'after nil pixelwise))
+              left delta horizontal ignore 'after nil pixelwise))
        (when (or (< max-delta (- delta)) (> min-delta delta))
          ;; We can't get the whole DELTA - move as far as possible.
          (setq delta (max (- max-delta) min-delta)))
@@ -3158,16 +3237,16 @@ move it as far as possible in the desired direction."
          ;; Try to enlarge RIGHT.
          (setq this-delta
                (window--resizable
-                right (- delta) horizontal nil 'before nil nil pixelwise))
+                right (- delta) horizontal ignore 'before nil nil pixelwise))
          (unless (zerop this-delta)
            (window--resize-this-window
-            right this-delta horizontal nil t 'after
+            right this-delta horizontal ignore t 'after
             (if horizontal
                 (window-pixel-left right)
               (window-pixel-top right))))
          ;; Shrink windows on left of RIGHT.
          (window--resize-siblings
-          right (- delta) horizontal nil 'before
+          right (- delta) horizontal ignore 'before
           (if horizontal
               (+ (window-pixel-left left) (window-pixel-width left))
             (+ (window-pixel-top left) (window-pixel-height left)))))))
@@ -3189,6 +3268,8 @@ make selected window wider by DELTA columns.  If DELTA is
 negative, shrink selected window by -DELTA lines or columns."
   (interactive "p")
   (let ((minibuffer-window (minibuffer-window)))
+    (when (window-preserved-size nil horizontal)
+      (window-preserve-size nil horizontal))
     (cond
      ((zerop delta))
      ((window-size-fixed-p nil horizontal)
@@ -3222,6 +3303,8 @@ negative, enlarge selected window by -DELTA lines or 
columns.
 Also see the `window-min-height' variable."
   (interactive "p")
   (let ((minibuffer-window (minibuffer-window)))
+    (when (window-preserved-size nil horizontal)
+      (window-preserve-size nil horizontal))
     (cond
      ((zerop delta))
      ((window-size-fixed-p nil horizontal)
@@ -4363,7 +4446,7 @@ frame.  The selected window is not changed by this 
function."
         (divider-width (if horizontal
                            (frame-right-divider-width frame)
                          (frame-bottom-divider-width frame)))
-        atom-root)
+        atom-root ignore)
     (window--check frame)
     (catch 'done
       (cond
@@ -4427,10 +4510,11 @@ frame.  The selected window is not changed by this 
function."
                (if resize
                    ;; When resizing try to give the new window the
                    ;; average size of a window in its combination.
-                   (min (- parent-pixel-size
-                           (window-min-size parent horizontal nil t))
-                        (/ parent-pixel-size
-                           (1+ (window-combinations parent horizontal))))
+                   (max (min (- parent-pixel-size
+                                (window-min-size parent horizontal nil t))
+                             (/ parent-pixel-size
+                                (1+ (window-combinations parent horizontal))))
+                        (window-min-pixel-size))
                  ;; Else try to give the new window half the size
                  ;; of WINDOW (plus an eventual odd pixel).
                  (/ old-pixel-size 2)))
@@ -4459,12 +4543,20 @@ frame.  The selected window is not changed by this 
function."
          (cond
           (resize
            ;; SIZE unspecified, resizing.
-           (unless (window-sizable-p
-                    parent (- new-pixel-size divider-width) horizontal nil t)
+           (unless (or (window-sizable-p
+                        parent (- (+ new-pixel-size divider-width)) horizontal
+                        nil t)
+                       (window-sizable-p
+                        parent (- (+ new-pixel-size divider-width)) horizontal
+                        (setq ignore 'preserved) t))
              (error "Window %s too small for splitting (1)" parent)))
-          ((> (+ new-pixel-size divider-width
-                 (window-min-size window horizontal nil t))
-              old-pixel-size)
+          ((and (> (+ new-pixel-size divider-width
+                      (window-min-size window horizontal nil t))
+                   old-pixel-size)
+                (> (+ new-pixel-size divider-width
+                      (window-min-size
+                       window horizontal (setq ignore 'preserved) t))
+                   old-pixel-size))
            ;; SIZE unspecified, no resizing.
            (error "Window %s too small for splitting (2)" window))))
         ((and (>= pixel-size 0)
@@ -4477,8 +4569,12 @@ frame.  The selected window is not changed by this 
function."
          (error "Window %s too small for splitting (3)" window))
         (resize
          ;; SIZE specified, resizing.
-         (unless (window-sizable-p
-                  parent (- new-pixel-size divider-width) horizontal nil t)
+         (unless (or (window-sizable-p
+                      parent (- (+ new-pixel-size divider-width)) horizontal
+                      nil t)
+                     (window-sizable-p
+                      parent (- (+ new-pixel-size divider-width)) horizontal
+                      (setq ignore 'preserved) t))
            ;; If we cannot resize the parent give up.
            (error "Window %s too small for splitting (4)" parent)))
         ((or (< new-pixel-size
@@ -4512,7 +4608,7 @@ frame.  The selected window is not changed by this 
function."
            ;; delete the one we create here.  Hence we do not go up.
            (progn
              (window--resize-child-windows
-              parent (- new-pixel-size) horizontal)
+              parent (- new-pixel-size) horizontal nil ignore)
              (let* ((normal (- 1.0 new-normal))
                     (sub (window-child parent)))
                (while sub
@@ -4522,10 +4618,8 @@ frame.  The selected window is not changed by this 
function."
          ;; Get entire space from WINDOW.
          (set-window-new-pixel
           window (- old-pixel-size new-pixel-size))
-;;       (set-window-new-pixel window (- old-pixel-size new-pixel-size))
-;;       (set-window-new-total
-;;        window (- old-size new-size))
-         (window--resize-this-window window (- new-pixel-size) horizontal)
+         (window--resize-this-window
+          window (- new-pixel-size) horizontal ignore)
          (set-window-new-normal
           window (- (if new-parent 1.0 (window-normal-size window horizontal))
                     new-normal)))
@@ -4579,7 +4673,7 @@ the original point in both windows."
 (defun split-window-below (&optional size)
   "Split the selected window into two windows, one above the other.
 The selected window is above.  The newly split-off window is
-below, and displays the same buffer.  Return the new window.
+below and displays the same buffer.  Return the new window.
 
 If optional argument SIZE is omitted or nil, both windows get the
 same height, or close to it.  If SIZE is positive, the upper
@@ -4633,7 +4727,7 @@ amount of redisplay; this is convenient on slow 
terminals."
 (defun split-window-right (&optional size)
   "Split the selected window into two side-by-side windows.
 The selected window is on the left.  The newly split-off window
-is on the right, and displays the same buffer.  Return the new
+is on the right and displays the same buffer.  Return the new
 window.
 
 If optional argument SIZE is omitted or nil, both windows get the
@@ -5131,7 +5225,7 @@ value can be also stored on disk and read back in a new 
session."
                (let ((scroll-bars (cdr (assq 'scroll-bars state))))
                  (set-window-scroll-bars
                   window (car scroll-bars) (nth 2 scroll-bars)
-                  (or (nth 3 scroll-bars) 0) (nth 5 scroll-bars)))
+                  (nth 3 scroll-bars) (nth 5 scroll-bars)))
                (set-window-vscroll window (cdr (assq 'vscroll state)))
                ;; Adjust vertically.
                (if (memq window-size-fixed '(t height))
@@ -5967,7 +6061,8 @@ live."
     (let ((parameter (window-parameter window 'quit-restore))
          (height (cdr (assq 'window-height alist)))
          (width (cdr (assq 'window-width alist)))
-         (size (cdr (assq 'window-size alist))))
+         (size (cdr (assq 'window-size alist)))
+         (preserve-size (cdr (assq 'preserve-size alist))))
       (cond
        ((or (eq type 'frame)
            (and (eq (car parameter) 'same)
@@ -6022,7 +6117,11 @@ live."
                       (window-combined-p window t))
              (window-resize window delta t 'safe))))
         ((functionp width)
-         (ignore-errors (funcall width window)))))))
+         (ignore-errors (funcall width window))))
+       ;; Preserve window size if asked for.
+       (when (consp preserve-size)
+         (window-preserve-size window t (car preserve-size))
+         (window-preserve-size window nil (cdr preserve-size))))))
 
     window))
 
@@ -6241,6 +6340,10 @@ Recognized alist entries include:
     of not displaying the buffer and FUNCTION can safely return
     a non-window value to suppress displaying.
 
+ `preserve-size' -- Value should be either '(t . nil)' to
+    preserve the width of the window, '(nil . t)' to preserve its
+    height or '(t . t)' to preserve both.
+
 The ACTION argument to `display-buffer' can also have a non-nil
 and non-list value.  This means to display the buffer in a window
 other than the selected one, even if it is already displayed in
@@ -7242,7 +7345,7 @@ FRAME."
           (frame-text-height))
         frame-resize-pixelwise)))))
 
-(defun fit-window-to-buffer (&optional window max-height min-height max-width 
min-width)
+(defun fit-window-to-buffer (&optional window max-height min-height max-width 
min-width preserve-size)
   "Adjust size of WINDOW to display its buffer's contents exactly.
 WINDOW must be a live window and defaults to the selected one.
 
@@ -7266,6 +7369,9 @@ and defaults to `window-min-width'.  Both MAX-WIDTH and 
MIN-WIDTH
 are specified in columns and include fringes, margins, a
 scrollbar and a vertical divider, if any.
 
+If the optional argument `preserve-size' is non-nil, preserve the
+size of WINDOW (see `window-preserve-size').
+
 Fit pixelwise if the option `window-resize-pixelwise' is non-nil.
 If WINDOW is its frame's root window and the option
 `fit-frame-to-buffer' is non-nil, call `fit-frame-to-buffer' to
@@ -7307,25 +7413,25 @@ accessible position."
                (max (if pixelwise
                         (* char-height window-min-height)
                       window-min-height)
-                    (window-min-size nil nil t pixelwise))))
+                    (window-min-size window nil window pixelwise))))
             (max-height
              ;; Sanitize MAX-HEIGHT.
              (if (numberp max-height)
                  (min
                   (+ total-height
                      (window-max-delta
-                      window nil nil nil nil nil pixelwise))
+                      window nil window nil nil nil pixelwise))
                   (if pixelwise
                       (* char-height max-height)
                     max-height))
                (+ total-height (window-max-delta
-                                window nil nil nil nil nil pixelwise))))
+                                window nil window nil nil nil pixelwise))))
             height)
        (cond
         ;; If WINDOW is vertically combined, try to resize it
         ;; vertically.
         ((and (not (eq fit-window-to-buffer-horizontally 'only))
-              (not (window-size-fixed-p window))
+              (not (window-size-fixed-p window 'preserved))
               (window-combined-p))
          ;; Vertically we always want to fit the entire buffer.
          ;; WINDOW'S height can't get larger than its frame's pixel
@@ -7338,14 +7444,17 @@ accessible position."
          (unless pixelwise
            (setq height (/ (+ height char-height -1) char-height)))
          (unless (= height total-height)
+           (window-preserve-size window)
            (window-resize-no-error
             window
             (- (max min-height (min max-height height)) total-height)
-            nil window pixelwise)))
+            nil window pixelwise)
+           (when preserve-size
+             (window-preserve-size window nil t))))
         ;; If WINDOW is horizontally combined, try to resize it
         ;; horizontally.
         ((and fit-window-to-buffer-horizontally
-              (not (window-size-fixed-p window t))
+              (not (window-size-fixed-p window t 'preserved))
               (window-combined-p nil t))
          (let* ((total-width (window-size window t pixelwise))
                 (min-width
@@ -7362,18 +7471,18 @@ accessible position."
                    (max (if pixelwise
                             (* char-width window-min-width)
                           window-min-width)
-                        (window-min-size nil nil t pixelwise))))
+                        (window-min-size nil nil window pixelwise))))
                 (max-width
                  ;; Sanitize MAX-WIDTH.
                  (if (numberp max-width)
                      (min (+ total-width
                              (window-max-delta
-                              nil t nil nil nil nil pixelwise))
+                              window t window nil nil nil pixelwise))
                           (if pixelwise
                               (* char-width max-width)
                             max-width))
                    (+ total-width (window-max-delta
-                                   nil t nil nil nil nil pixelwise))))
+                                   window t window nil nil nil pixelwise))))
                 ;; When fitting horizontally, assume that WINDOW's
                 ;; start position remains unaltered.  WINDOW can't get
                 ;; wider than its frame's pixel width, its height
@@ -7391,13 +7500,16 @@ accessible position."
            (unless pixelwise
              (setq width (/ (+ width char-width -1) char-width)))
            (unless (= width body-width)
+             (window-preserve-size window t)
              (window-resize-no-error
               window
               (- (max min-width
                       (min max-width
                            (+ total-width (- width body-width))))
                  total-width)
-              t window pixelwise)))))))))
+              t window pixelwise)
+             (when preserve-size
+               (window-preserve-size window t t))))))))))
 
 (defun window-safely-shrinkable-p (&optional window)
   "Return t if WINDOW can be shrunk without shrinking other windows.
@@ -7691,6 +7803,9 @@ With arg N, put point N/10 of the way from the true end."
 (defvar mouse-autoselect-window-timer nil
   "Timer used by delayed window autoselection.")
 
+(defvar mouse-autoselect-window-position-1 nil
+  "First mouse position recorded by delayed window autoselection.")
+
 (defvar mouse-autoselect-window-position nil
   "Last mouse position recorded by delayed window autoselection.")
 
@@ -7715,6 +7830,7 @@ Optional argument FORCE means cancel unconditionally."
                        (memq (nth 4 (event-end last-input-event))
                              '(handle end-scroll)))))
     (setq mouse-autoselect-window-state nil)
+    (setq mouse-autoselect-window-position-1 nil)
     (when (timerp mouse-autoselect-window-timer)
       (cancel-timer mouse-autoselect-window-timer))
     (remove-hook 'pre-command-hook 'mouse-autoselect-window-cancel)))
@@ -7756,21 +7872,32 @@ is active.  This function is run by 
`mouse-autoselect-window-timer'."
        ;; A menu / popup dialog is active or the mouse is not on the
        ;; text region of WINDOW: Suspend autoselection temporarily.
        (mouse-autoselect-window-start mouse-position nil t))
-      ((eq mouse-autoselect-window-state 'suspend)
+      ((or (eq mouse-autoselect-window-state 'suspend)
+          ;; When the mouse is at its first recorded position, restart
+          ;; delayed autoselection.  This works around a scenario with
+          ;; two two-window frames with identical dimensions: select the
+          ;; first window of the first frame, switch to the second
+          ;; frame, move the mouse to its second window, minimize the
+          ;; second frame.  Now the second window of the first frame
+          ;; gets selected although the mouse never really "moved" into
+          ;; that window.
+          (and (numberp mouse-autoselect-window)
+               (equal (mouse-position) mouse-autoselect-window-position-1)))
        ;; Delayed autoselection was temporarily suspended, reenable it.
        (mouse-autoselect-window-start mouse-position))
       ((and window (not (eq window (selected-window)))
            (or (not (numberp mouse-autoselect-window))
-               (and (> mouse-autoselect-window 0)
-                    ;; If `mouse-autoselect-window' is positive, select
-                    ;; window if the window is the same as before.
+               (and (>= mouse-autoselect-window 0)
+                    ;; If `mouse-autoselect-window' is non-negative,
+                    ;; select window if it's the same as before.
                     (eq window mouse-autoselect-window-window))
-               ;; Otherwise select window if the mouse is at the same
-               ;; position as before.  Observe that the first test after
-               ;; starting autoselection usually fails since the value of
-               ;; `mouse-autoselect-window-position' recorded there is the
-               ;; position where the mouse has entered the new window and
-               ;; not necessarily where the mouse has stopped moving.
+               ;; Otherwise select window iff the mouse is at the same
+               ;; position as before.  Observe that the first test
+               ;; after starting autoselection usually fails since the
+               ;; value of `mouse-autoselect-window-position' recorded
+               ;; there is the position where the mouse has entered the
+               ;; new window and not necessarily where the mouse has
+               ;; stopped moving.
                (equal mouse-position mouse-autoselect-window-position))
            ;; The minibuffer is a candidate window if it's active.
            (or (not (window-minibuffer-p window))
@@ -7800,7 +7927,7 @@ is active.  This function is run by 
`mouse-autoselect-window-timer'."
 
 (defun handle-select-window (event)
   "Handle select-window events."
-  (interactive "e")
+  (interactive "^e")
   (let ((window (posn-window (event-start event))))
     (unless (or (not (window-live-p window))
                ;; Don't switch if we're currently in the minibuffer.
@@ -7814,14 +7941,14 @@ is active.  This function is run by 
`mouse-autoselect-window-timer'."
                     (not (minibuffer-window-active-p window)))
                ;; Don't switch when autoselection shall be delayed.
                (and (numberp mouse-autoselect-window)
-                    (not (zerop mouse-autoselect-window))
                     (not (eq mouse-autoselect-window-state 'select))
-                    (progn
+                    (let ((position (mouse-position)))
                       ;; Cancel any delayed autoselection.
                       (mouse-autoselect-window-cancel t)
                       ;; Start delayed autoselection from current mouse
                       ;; position and window.
-                      (mouse-autoselect-window-start (mouse-position) window)
+                      (setq mouse-autoselect-window-position-1 position)
+                      (mouse-autoselect-window-start position window)
                       ;; Executing a command cancels delayed autoselection.
                       (add-hook
                        'pre-command-hook 'mouse-autoselect-window-cancel))))
diff --git a/lisp/winner.el b/lisp/winner.el
index c202402..f244003 100644
--- a/lisp/winner.el
+++ b/lisp/winner.el
@@ -1,6 +1,6 @@
 ;;; winner.el --- Restore old window configurations
 
-;; Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Ivar Rummelhoff <address@hidden>
 ;; Created: 27 Feb 1997
diff --git a/lisp/woman.el b/lisp/woman.el
index 2dda211..611ba74 100644
--- a/lisp/woman.el
+++ b/lisp/woman.el
@@ -1,6 +1,6 @@
 ;;; woman.el --- browse UN*X manual pages `wo (without) man'
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Francis J. Wright <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el
index a5e3a16..52630132 100644
--- a/lisp/x-dnd.el
+++ b/lisp/x-dnd.el
@@ -1,6 +1,6 @@
 ;;; x-dnd.el --- drag and drop support for X  -*- coding: utf-8 -*-
 
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Jan Djärv <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/lisp/xml.el b/lisp/xml.el
index ca8ddce..b3dce41 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -1,6 +1,6 @@
 ;;; xml.el --- XML parser
 
-;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Emmanuel Briot  <address@hidden>
 ;; Maintainer: Mark A. Hershberger <address@hidden>
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index b933936..b87c1a2 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -1,6 +1,6 @@
 ;;; xt-mouse.el --- support the mouse when emacs run in an xterm
 
-;; Copyright (C) 1994, 2000-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2000-2015 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <address@hidden>
 ;; Keywords: mouse, terminals
diff --git a/lwlib/.gitignore b/lwlib/.gitignore
deleted file mode 100644
index f3c7a7c..0000000
--- a/lwlib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-Makefile
diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog
index 6687735..8d536f0 100644
--- a/lwlib/ChangeLog
+++ b/lwlib/ChangeLog
@@ -1,3 +1,16 @@
+2015-01-04  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for lwlib
+       * Makefile.in (AM_V_GEN, am__v_GEN_, am__v_GEN_0, am__v_GEN_1)
+       (AM_V_at, am__v_at_, am__v_at_0, am__v_at_1): New macros.
+       (liblw.a): Use them.
+
+2014-12-25  Paul Eggert  <address@hidden>
+
+       * xlwmenu.c (resource_widget_value):
+       Rewrite to avoid the need for strcat, typically by using stpcpy
+       and/or lispstpcpy.  strcat tends to be part of O(N**2) algorithms.
+
 2014-10-20  Glenn Morris  <address@hidden>
 
        * Merge in all changes up to 24.4 release.
@@ -1942,7 +1955,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1995-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1995-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lwlib/Makefile.in b/lwlib/Makefile.in
index b01e69c..1f332e9 100644
--- a/lwlib/Makefile.in
+++ b/lwlib/Makefile.in
@@ -1,7 +1,7 @@
 ### @configure_input@
 
 # Copyright (C) 1992, 1993 Lucid, Inc.
-# Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 #
 # This file is part of the Lucid Widget Library.
 #
@@ -59,6 +59,16 @@ am__v_CC_ = $(address@hidden@)
 am__v_CC_0 = @echo "  CC      " $@;
 am__v_CC_1 =
 
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 =
+
 DEPDIR = deps
 ## -MMD -MF $(DEPDIR)/$*.d if AUTO_DEPEND; else empty.
 DEPFLAGS = @DEPFLAGS@
@@ -84,9 +94,9 @@ all: liblw.a
        $(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
 
 liblw.a: $(OBJS)
-       rm -f $@
-       $(AR) $(ARFLAGS) $@ $(OBJS)
-       $(RANLIB) $@
+       $(AM_V_GEN)rm -f $@
+       $(AM_V_at)$(AR) $(ARFLAGS) $@ $(OBJS)
+       $(AM_V_at)$(RANLIB) $@
 
 globals_h = ../src/globals.h
 $(globals_h):
diff --git a/lwlib/deps.mk b/lwlib/deps.mk
index 6355ec6..11cc056 100644
--- a/lwlib/deps.mk
+++ b/lwlib/deps.mk
@@ -1,7 +1,7 @@
 ### deps.mk --- lwlib/Makefile fragment for GNU Emacs
 
 # Copyright (C) 1992, 1993 Lucid, Inc.
-# Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 #
 # This file is part of the Lucid Widget Library.
 #
diff --git a/lwlib/lwlib-Xaw.c b/lwlib/lwlib-Xaw.c
index 11eefd9..5a1485b 100644
--- a/lwlib/lwlib-Xaw.c
+++ b/lwlib/lwlib-Xaw.c
@@ -1,7 +1,7 @@
 /* The lwlib interface to Athena widgets.
 
 Copyright (C) 1993 Chuck Thompson <address@hidden>
-Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib-Xlw.c b/lwlib/lwlib-Xlw.c
index 4bc500c..e793dbc 100644
--- a/lwlib/lwlib-Xlw.c
+++ b/lwlib/lwlib-Xlw.c
@@ -1,7 +1,7 @@
 /* The lwlib interface to "xlwmenu" menus.
 
 Copyright (C) 1992 Lucid, Inc.
-Copyright (C) 1994, 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 1994, 2000-2015 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib-Xm.c b/lwlib/lwlib-Xm.c
index 4d48e64..37db615 100644
--- a/lwlib/lwlib-Xm.c
+++ b/lwlib/lwlib-Xm.c
@@ -1,6 +1,6 @@
 /* The lwlib interface to Motif widgets.
 
-Copyright (C) 1994-1997, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1994-1997, 1999-2015 Free Software Foundation, Inc.
 Copyright (C) 1992 Lucid, Inc.
 
 This file is part of the Lucid Widget Library.
diff --git a/lwlib/lwlib-int.h b/lwlib/lwlib-int.h
index f2def4c..c32aa36 100644
--- a/lwlib/lwlib-int.h
+++ b/lwlib/lwlib-int.h
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 1992 Lucid, Inc.
-Copyright (C) 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib-utils.c b/lwlib/lwlib-utils.c
index f16d487..dc34ce8 100644
--- a/lwlib/lwlib-utils.c
+++ b/lwlib/lwlib-utils.c
@@ -1,7 +1,7 @@
 /* Defines some widget utility functions.
 
 Copyright (C) 1992 Lucid, Inc.
-Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib-widget.h b/lwlib/lwlib-widget.h
index 8901964..92ae7e6 100644
--- a/lwlib/lwlib-widget.h
+++ b/lwlib/lwlib-widget.h
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 1992, 1993 Lucid, Inc.
-Copyright (C) 1994, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1994, 1999-2015 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib.c b/lwlib/lwlib.c
index 7f2f753..2ffd477 100644
--- a/lwlib/lwlib.c
+++ b/lwlib/lwlib.c
@@ -1,7 +1,7 @@
 /* A general interface to the widgets of different toolkits.
 
 Copyright (C) 1992, 1993 Lucid, Inc.
-Copyright (C) 1994-1996, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2015 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib.h b/lwlib/lwlib.h
index 7d87fac..a51a626 100644
--- a/lwlib/lwlib.h
+++ b/lwlib/lwlib.h
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 1992, 1993 Lucid, Inc.
-Copyright (C) 1994, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1994, 1999-2015 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c
index 6f4db56..4cd0e42 100644
--- a/lwlib/xlwmenu.c
+++ b/lwlib/xlwmenu.c
@@ -1,7 +1,7 @@
 /* Implements a lightweight menubar widget.
 
 Copyright (C) 1992 Lucid, Inc.
-Copyright (C) 1994-1995, 1997, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1994-1995, 1997, 1999-2015 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
@@ -439,10 +439,9 @@ resource_widget_value (XlwMenuWidget mw, widget_value *val)
          int complete_length =
            strlen (resourced_name) + strlen (val->value) + 2;
          complete_name = XtMalloc (complete_length);
-         *complete_name = 0;
-         strcat (complete_name, resourced_name);
-         strcat (complete_name, " ");
-         strcat (complete_name, val->value);
+         char *z = stpcpy (complete_name, resourced_name);
+         *z++ = ' ';
+         strcpy (z, val->value);
        }
 
       val->toolkit_data = complete_name;
diff --git a/lwlib/xlwmenu.h b/lwlib/xlwmenu.h
index 2d6223b..8b356da 100644
--- a/lwlib/xlwmenu.h
+++ b/lwlib/xlwmenu.h
@@ -1,6 +1,6 @@
 /* Interface of a lightweight menubar widget.
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 Copyright (C) 1992 Lucid, Inc.
 
 This file is part of the Lucid Widget Library.
diff --git a/lwlib/xlwmenuP.h b/lwlib/xlwmenuP.h
index 63789e8..f21392b 100644
--- a/lwlib/xlwmenuP.h
+++ b/lwlib/xlwmenuP.h
@@ -1,6 +1,6 @@
 /* Internals of a lightweight menubar widget.
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 Copyright (C) 1992 Lucid, Inc.
 
 This file is part of the Lucid Widget Library.
diff --git a/m4/00gnulib.m4 b/m4/00gnulib.m4
index 8eca551..c7103ed 100644
--- a/m4/00gnulib.m4
+++ b/m4/00gnulib.m4
@@ -1,5 +1,5 @@
 # 00gnulib.m4 serial 3
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/absolute-header.m4 b/m4/absolute-header.m4
index ce3e39e..bc19dfc 100644
--- a/m4/absolute-header.m4
+++ b/m4/absolute-header.m4
@@ -1,5 +1,5 @@
 # absolute-header.m4 serial 16
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/acl.m4 b/m4/acl.m4
index f02f69d..c77f0ed 100644
--- a/m4/acl.m4
+++ b/m4/acl.m4
@@ -1,7 +1,7 @@
 # acl.m4 - check for access control list (ACL) primitives
 # serial 17
 
-# Copyright (C) 2002, 2004-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2004-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/alloca.m4 b/m4/alloca.m4
index d7bdea6..8408bed 100644
--- a/m4/alloca.m4
+++ b/m4/alloca.m4
@@ -1,5 +1,5 @@
 # alloca.m4 serial 14
-dnl Copyright (C) 2002-2004, 2006-2007, 2009-2014 Free Software Foundation,
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2015 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
diff --git a/m4/byteswap.m4 b/m4/byteswap.m4
index 6d6357c..ec5d46c 100644
--- a/m4/byteswap.m4
+++ b/m4/byteswap.m4
@@ -1,5 +1,5 @@
 # byteswap.m4 serial 4
-dnl Copyright (C) 2005, 2007, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/c-strtod.m4 b/m4/c-strtod.m4
index 69e964e..b5d8ca0 100644
--- a/m4/c-strtod.m4
+++ b/m4/c-strtod.m4
@@ -1,6 +1,6 @@
 # c-strtod.m4 serial 15
 
-# Copyright (C) 2004-2006, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2004-2006, 2009-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/clock_time.m4 b/m4/clock_time.m4
index 6c4a637..a903e58 100644
--- a/m4/clock_time.m4
+++ b/m4/clock_time.m4
@@ -1,5 +1,5 @@
 # clock_time.m4 serial 10
-dnl Copyright (C) 2002-2006, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/close-stream.m4 b/m4/close-stream.m4
index 80cde85..a7a2efe 100644
--- a/m4/close-stream.m4
+++ b/m4/close-stream.m4
@@ -1,5 +1,5 @@
 #serial 4
-dnl Copyright (C) 2006-2007, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/count-one-bits.m4 b/m4/count-one-bits.m4
index 0d7cac0..e450e13 100644
--- a/m4/count-one-bits.m4
+++ b/m4/count-one-bits.m4
@@ -1,5 +1,5 @@
 # count-one-bits.m4 serial 3
-dnl Copyright (C) 2007, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/count-trailing-zeros.m4 b/m4/count-trailing-zeros.m4
index 617159e..abd1e50 100644
--- a/m4/count-trailing-zeros.m4
+++ b/m4/count-trailing-zeros.m4
@@ -1,5 +1,5 @@
 # count-trailing-zeros.m4
-dnl Copyright (C) 2013-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2013-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/dirent_h.m4 b/m4/dirent_h.m4
index 3f2b16b..7abd1d0 100644
--- a/m4/dirent_h.m4
+++ b/m4/dirent_h.m4
@@ -1,5 +1,5 @@
 # dirent_h.m4 serial 16
-dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/dup2.m4 b/m4/dup2.m4
index 6498fc2..0354c6a 100644
--- a/m4/dup2.m4
+++ b/m4/dup2.m4
@@ -1,5 +1,5 @@
 #serial 20
-dnl Copyright (C) 2002, 2005, 2007, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005, 2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/environ.m4 b/m4/environ.m4
index cfabe46..4dbf947 100644
--- a/m4/environ.m4
+++ b/m4/environ.m4
@@ -1,5 +1,5 @@
 # environ.m4 serial 6
-dnl Copyright (C) 2001-2004, 2006-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2004, 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/errno_h.m4 b/m4/errno_h.m4
index 4ee9e6a..cfaa687 100644
--- a/m4/errno_h.m4
+++ b/m4/errno_h.m4
@@ -1,5 +1,5 @@
 # errno_h.m4 serial 12
-dnl Copyright (C) 2004, 2006, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2004, 2006, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/euidaccess.m4 b/m4/euidaccess.m4
index 55393a4..e23e9c3 100644
--- a/m4/euidaccess.m4
+++ b/m4/euidaccess.m4
@@ -1,5 +1,5 @@
 # euidaccess.m4 serial 15
-dnl Copyright (C) 2002-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/execinfo.m4 b/m4/execinfo.m4
index 3f71b16..2db4922 100644
--- a/m4/execinfo.m4
+++ b/m4/execinfo.m4
@@ -1,6 +1,6 @@
 # Check for GNU-style execinfo.h.
 
-dnl Copyright 2012-2014 Free Software Foundation, Inc.
+dnl Copyright 2012-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/extensions.m4 b/m4/extensions.m4
index 37f55ca..35bc49c 100644
--- a/m4/extensions.m4
+++ b/m4/extensions.m4
@@ -1,7 +1,7 @@
 # serial 13  -*- Autoconf -*-
 # Enable extensions on systems that normally disable them.
 
-# Copyright (C) 2003, 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2006-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,6 +68,10 @@ dnl configure.ac when using autoheader 2.62.
 #ifndef _GNU_SOURCE
 # undef _GNU_SOURCE
 #endif
+/* Use GNU style printf and scanf.  */
+#ifndef __USE_MINGW_ANSI_STDIO
+# undef __USE_MINGW_ANSI_STDIO
+#endif
 /* Enable threading extensions on Solaris.  */
 #ifndef _POSIX_PTHREAD_SEMANTICS
 # undef _POSIX_PTHREAD_SEMANTICS
@@ -100,6 +104,7 @@ dnl configure.ac when using autoheader 2.62.
   AC_DEFINE([_ALL_SOURCE])
   AC_DEFINE([_DARWIN_C_SOURCE])
   AC_DEFINE([_GNU_SOURCE])
+  AC_DEFINE([__USE_MINGW_ANSI_STDIO])
   AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
   AC_DEFINE([_TANDEM_SOURCE])
   AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined],
diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4
index 0edbe3c..e74339a 100644
--- a/m4/extern-inline.m4
+++ b/m4/extern-inline.m4
@@ -1,6 +1,6 @@
 dnl 'extern inline' a la ISO C99.
 
-dnl Copyright 2012-2014 Free Software Foundation, Inc.
+dnl Copyright 2012-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/faccessat.m4 b/m4/faccessat.m4
index d9016bd..941cb02 100644
--- a/m4/faccessat.m4
+++ b/m4/faccessat.m4
@@ -1,7 +1,7 @@
 # serial 6
 # See if we need to provide faccessat replacement.
 
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fcntl.m4 b/m4/fcntl.m4
index f824beb..733cd2d 100644
--- a/m4/fcntl.m4
+++ b/m4/fcntl.m4
@@ -1,5 +1,5 @@
 # fcntl.m4 serial 5
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fcntl_h.m4 b/m4/fcntl_h.m4
index fb2556d..b279162 100644
--- a/m4/fcntl_h.m4
+++ b/m4/fcntl_h.m4
@@ -1,6 +1,6 @@
 # serial 15
 # Configure fcntl.h.
-dnl Copyright (C) 2006-2007, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fdatasync.m4 b/m4/fdatasync.m4
index 4fea09f..35b09a8 100644
--- a/m4/fdatasync.m4
+++ b/m4/fdatasync.m4
@@ -1,5 +1,5 @@
 # fdatasync.m4 serial 4
-dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fdopendir.m4 b/m4/fdopendir.m4
index a3e7849..317eac9 100644
--- a/m4/fdopendir.m4
+++ b/m4/fdopendir.m4
@@ -1,7 +1,7 @@
 # serial 10
 # See if we need to provide fdopendir.
 
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/filemode.m4 b/m4/filemode.m4
index 0b9e356..e2a195c 100644
--- a/m4/filemode.m4
+++ b/m4/filemode.m4
@@ -1,5 +1,5 @@
 # filemode.m4 serial 8
-dnl Copyright (C) 2002, 2005-2006, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fpending.m4 b/m4/fpending.m4
index c2d01ef..4781db1 100644
--- a/m4/fpending.m4
+++ b/m4/fpending.m4
@@ -1,6 +1,6 @@
 # serial 21
 
-# Copyright (C) 2000-2001, 2004-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2004-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/fstatat.m4 b/m4/fstatat.m4
index 548eb7b..e5f9f90 100644
--- a/m4/fstatat.m4
+++ b/m4/fstatat.m4
@@ -1,5 +1,5 @@
 # fstatat.m4 serial 3
-dnl Copyright (C) 2004-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fsync.m4 b/m4/fsync.m4
index 888a65d..bc2b093 100644
--- a/m4/fsync.m4
+++ b/m4/fsync.m4
@@ -1,5 +1,5 @@
 # fsync.m4 serial 2
-dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/getdtablesize.m4 b/m4/getdtablesize.m4
index aa523b6..a6b6c1b 100644
--- a/m4/getdtablesize.m4
+++ b/m4/getdtablesize.m4
@@ -1,5 +1,5 @@
 # getdtablesize.m4 serial 5
-dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/getgroups.m4 b/m4/getgroups.m4
index f05357d..16e72c7 100644
--- a/m4/getgroups.m4
+++ b/m4/getgroups.m4
@@ -3,7 +3,7 @@
 dnl From Jim Meyering.
 dnl A wrapper around AC_FUNC_GETGROUPS.
 
-# Copyright (C) 1996-1997, 1999-2004, 2008-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2004, 2008-2015 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/getloadavg.m4 b/m4/getloadavg.m4
index d744804..1234ba9 100644
--- a/m4/getloadavg.m4
+++ b/m4/getloadavg.m4
@@ -1,6 +1,6 @@
 # Check for getloadavg.
 
-# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2014 Free Software
+# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2015 Free Software
 # Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
diff --git a/m4/getopt.m4 b/m4/getopt.m4
index f127028..e76e501 100644
--- a/m4/getopt.m4
+++ b/m4/getopt.m4
@@ -1,5 +1,5 @@
 # getopt.m4 serial 44
-dnl Copyright (C) 2002-2006, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/gettime.m4 b/m4/gettime.m4
index c5ec264..cd499ff 100644
--- a/m4/gettime.m4
+++ b/m4/gettime.m4
@@ -1,5 +1,5 @@
 # gettime.m4 serial 8
-dnl Copyright (C) 2002, 2004-2006, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004-2006, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4
index 1c2d66e..ce246e1 100644
--- a/m4/gettimeofday.m4
+++ b/m4/gettimeofday.m4
@@ -1,6 +1,6 @@
 # serial 21
 
-# Copyright (C) 2001-2003, 2005, 2007, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003, 2005, 2007, 2009-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4
index 31e5f94..b301abe 100644
--- a/m4/gnulib-common.m4
+++ b/m4/gnulib-common.m4
@@ -1,5 +1,5 @@
 # gnulib-common.m4 serial 36
-dnl Copyright (C) 2007-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
index 39ec8ae..5763fae 100644
--- a/m4/gnulib-comp.m4
+++ b/m4/gnulib-comp.m4
@@ -1,5 +1,5 @@
 # DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # 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
@@ -123,6 +123,7 @@ AC_DEFUN([gl_EARLY],
   # Code from module stdint:
   # Code from module stdio:
   # Code from module stdlib:
+  # Code from module stpcpy:
   # Code from module strftime:
   # Code from module string:
   # Code from module strtoimax:
@@ -341,6 +342,12 @@ AC_DEFUN([gl_INIT],
   gl_STDINT_H
   gl_STDIO_H
   gl_STDLIB_H
+  gl_FUNC_STPCPY
+  if test $HAVE_STPCPY = 0; then
+    AC_LIBOBJ([stpcpy])
+    gl_PREREQ_STPCPY
+  fi
+  gl_STRING_MODULE_INDICATOR([stpcpy])
   gl_FUNC_GNU_STRFTIME
   gl_HEADER_STRING_H
   gl_FUNC_STRTOIMAX
@@ -889,6 +896,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/stdint.in.h
   lib/stdio.in.h
   lib/stdlib.in.h
+  lib/stpcpy.c
   lib/strftime.c
   lib/strftime.h
   lib/string.in.h
@@ -995,6 +1003,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/stdint.m4
   m4/stdio_h.m4
   m4/stdlib_h.m4
+  m4/stpcpy.m4
   m4/strftime.m4
   m4/string_h.m4
   m4/strtoimax.m4
diff --git a/m4/gnulib-tool.m4 b/m4/gnulib-tool.m4
index a588e15..fede1fc 100644
--- a/m4/gnulib-tool.m4
+++ b/m4/gnulib-tool.m4
@@ -1,5 +1,5 @@
 # gnulib-tool.m4 serial 2
-dnl Copyright (C) 2004-2005, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2005, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/group-member.m4 b/m4/group-member.m4
index 11d55d6..526a67a 100644
--- a/m4/group-member.m4
+++ b/m4/group-member.m4
@@ -1,6 +1,6 @@
 # serial 14
 
-# Copyright (C) 1999-2001, 2003-2007, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/include_next.m4 b/m4/include_next.m4
index 69ad3db..233d254 100644
--- a/m4/include_next.m4
+++ b/m4/include_next.m4
@@ -1,5 +1,5 @@
 # include_next.m4 serial 23
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
index 2f9317d..4209ffd 100644
--- a/m4/inttypes.m4
+++ b/m4/inttypes.m4
@@ -1,5 +1,5 @@
 # inttypes.m4 serial 26
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/largefile.m4 b/m4/largefile.m4
index a1b564a..b7a6c48 100644
--- a/m4/largefile.m4
+++ b/m4/largefile.m4
@@ -1,6 +1,6 @@
 # Enable large files on systems where this is not the default.
 
-# Copyright 1992-1996, 1998-2014 Free Software Foundation, Inc.
+# Copyright 1992-1996, 1998-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/longlong.m4 b/m4/longlong.m4
index eefb37c..d57bc70 100644
--- a/m4/longlong.m4
+++ b/m4/longlong.m4
@@ -1,5 +1,5 @@
 # longlong.m4 serial 17
-dnl Copyright (C) 1999-2007, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 1999-2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/lstat.m4 b/m4/lstat.m4
index c5e72b8..f6c7dd1 100644
--- a/m4/lstat.m4
+++ b/m4/lstat.m4
@@ -1,6 +1,6 @@
 # serial 26
 
-# Copyright (C) 1997-2001, 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2001, 2003-2015 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4
index 3e6dd21..44da98e 100644
--- a/m4/manywarnings.m4
+++ b/m4/manywarnings.m4
@@ -1,5 +1,5 @@
 # manywarnings.m4 serial 7
-dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/md5.m4 b/m4/md5.m4
index f0249d9..0bb9036 100644
--- a/m4/md5.m4
+++ b/m4/md5.m4
@@ -1,5 +1,5 @@
 # md5.m4 serial 14
-dnl Copyright (C) 2002-2006, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/memrchr.m4 b/m4/memrchr.m4
index 5dbe4d1..f3f74b8 100644
--- a/m4/memrchr.m4
+++ b/m4/memrchr.m4
@@ -1,5 +1,5 @@
 # memrchr.m4 serial 10
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2014 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
diff --git a/m4/mkostemp.m4 b/m4/mkostemp.m4
index 63de006..cc1b65c 100644
--- a/m4/mkostemp.m4
+++ b/m4/mkostemp.m4
@@ -1,5 +1,5 @@
 # mkostemp.m4 serial 2
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/mktime.m4 b/m4/mktime.m4
index e8d340a..3f0e1ee 100644
--- a/m4/mktime.m4
+++ b/m4/mktime.m4
@@ -1,5 +1,5 @@
 # serial 25
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2014 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
diff --git a/m4/multiarch.m4 b/m4/multiarch.m4
index 2cb956d..fc575c1 100644
--- a/m4/multiarch.m4
+++ b/m4/multiarch.m4
@@ -1,5 +1,5 @@
 # multiarch.m4 serial 7
-dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/nocrash.m4 b/m4/nocrash.m4
index 5a5d77d..5628318 100644
--- a/m4/nocrash.m4
+++ b/m4/nocrash.m4
@@ -1,5 +1,5 @@
 # nocrash.m4 serial 4
-dnl Copyright (C) 2005, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/off_t.m4 b/m4/off_t.m4
index f5885b3..0eb1467 100644
--- a/m4/off_t.m4
+++ b/m4/off_t.m4
@@ -1,5 +1,5 @@
 # off_t.m4 serial 1
-dnl Copyright (C) 2012-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2012-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/pathmax.m4 b/m4/pathmax.m4
index 114f91f..0e3db7a 100644
--- a/m4/pathmax.m4
+++ b/m4/pathmax.m4
@@ -1,5 +1,5 @@
 # pathmax.m4 serial 10
-dnl Copyright (C) 2002-2003, 2005-2006, 2009-2014 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2015 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
diff --git a/m4/pipe2.m4 b/m4/pipe2.m4
index 1cff1fe..0b64651 100644
--- a/m4/pipe2.m4
+++ b/m4/pipe2.m4
@@ -1,5 +1,5 @@
 # pipe2.m4 serial 2
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/pselect.m4 b/m4/pselect.m4
index bf7c6b8..df00705 100644
--- a/m4/pselect.m4
+++ b/m4/pselect.m4
@@ -1,5 +1,5 @@
 # pselect.m4 serial 2
-dnl Copyright (C) 2011-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/pthread_sigmask.m4 b/m4/pthread_sigmask.m4
index 5153828..5c17dfc 100644
--- a/m4/pthread_sigmask.m4
+++ b/m4/pthread_sigmask.m4
@@ -1,5 +1,5 @@
 # pthread_sigmask.m4 serial 15
-dnl Copyright (C) 2011-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/putenv.m4 b/m4/putenv.m4
index d79321b..73a5f46 100644
--- a/m4/putenv.m4
+++ b/m4/putenv.m4
@@ -1,5 +1,5 @@
 # putenv.m4 serial 20
-dnl Copyright (C) 2002-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/readlink.m4 b/m4/readlink.m4
index f9ce868..88c9bfe 100644
--- a/m4/readlink.m4
+++ b/m4/readlink.m4
@@ -1,5 +1,5 @@
 # readlink.m4 serial 12
-dnl Copyright (C) 2003, 2007, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/readlinkat.m4 b/m4/readlinkat.m4
index f9ed943..d0f5e69 100644
--- a/m4/readlinkat.m4
+++ b/m4/readlinkat.m4
@@ -1,7 +1,7 @@
 # serial 4
 # See if we need to provide readlinkat replacement.
 
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/secure_getenv.m4 b/m4/secure_getenv.m4
index 149888d..6afe89f 100644
--- a/m4/secure_getenv.m4
+++ b/m4/secure_getenv.m4
@@ -1,5 +1,5 @@
 # Look up an environment variable more securely.
-dnl Copyright 2013-2014 Free Software Foundation, Inc.
+dnl Copyright 2013-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/setenv.m4 b/m4/setenv.m4
index 0f46a7b..3aa38d8 100644
--- a/m4/setenv.m4
+++ b/m4/setenv.m4
@@ -1,5 +1,5 @@
 # setenv.m4 serial 26
-dnl Copyright (C) 2001-2004, 2006-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2004, 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sha1.m4 b/m4/sha1.m4
index bf51b1b..9d6aa0c 100644
--- a/m4/sha1.m4
+++ b/m4/sha1.m4
@@ -1,5 +1,5 @@
 # sha1.m4 serial 12
-dnl Copyright (C) 2002-2006, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sha256.m4 b/m4/sha256.m4
index 6dc6303..a12cd7e 100644
--- a/m4/sha256.m4
+++ b/m4/sha256.m4
@@ -1,5 +1,5 @@
 # sha256.m4 serial 8
-dnl Copyright (C) 2005, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sha512.m4 b/m4/sha512.m4
index 5ef5d40..77c76a8 100644
--- a/m4/sha512.m4
+++ b/m4/sha512.m4
@@ -1,5 +1,5 @@
 # sha512.m4 serial 9
-dnl Copyright (C) 2005-2006, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2006, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sig2str.m4 b/m4/sig2str.m4
index 69ec37f..71cfa4b 100644
--- a/m4/sig2str.m4
+++ b/m4/sig2str.m4
@@ -1,5 +1,5 @@
 # serial 7
-dnl Copyright (C) 2002, 2005-2006, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/signal_h.m4 b/m4/signal_h.m4
index c8f664f..f737c36 100644
--- a/m4/signal_h.m4
+++ b/m4/signal_h.m4
@@ -1,5 +1,5 @@
 # signal_h.m4 serial 18
-dnl Copyright (C) 2007-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/socklen.m4 b/m4/socklen.m4
index 4c07f86..bcabed3 100644
--- a/m4/socklen.m4
+++ b/m4/socklen.m4
@@ -1,5 +1,5 @@
 # socklen.m4 serial 10
-dnl Copyright (C) 2005-2007, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/ssize_t.m4 b/m4/ssize_t.m4
index fbe1d06..25bd451 100644
--- a/m4/ssize_t.m4
+++ b/m4/ssize_t.m4
@@ -1,5 +1,5 @@
 # ssize_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2001-2003, 2006, 2010-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2003, 2006, 2010-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/st_dm_mode.m4 b/m4/st_dm_mode.m4
index 3c9b52e..6543bf6 100644
--- a/m4/st_dm_mode.m4
+++ b/m4/st_dm_mode.m4
@@ -1,6 +1,6 @@
 # serial 6
 
-# Copyright (C) 1998-1999, 2001, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 1998-1999, 2001, 2009-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/stat-time.m4 b/m4/stat-time.m4
index ea5c4fc..9c8ceec 100644
--- a/m4/stat-time.m4
+++ b/m4/stat-time.m4
@@ -1,6 +1,6 @@
 # Checks for stat-related time functions.
 
-# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2014 Free Software
+# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2015 Free Software
 # Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
diff --git a/m4/stat.m4 b/m4/stat.m4
index 1ae327b..d1b3768 100644
--- a/m4/stat.m4
+++ b/m4/stat.m4
@@ -1,6 +1,6 @@
 # serial 11
 
-# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2009-2015 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/stdalign.m4 b/m4/stdalign.m4
index 9efafe5..033b0d3 100644
--- a/m4/stdalign.m4
+++ b/m4/stdalign.m4
@@ -1,6 +1,6 @@
 # Check for stdalign.h that conforms to C11.
 
-dnl Copyright 2011-2014 Free Software Foundation, Inc.
+dnl Copyright 2011-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -32,8 +32,12 @@ AC_DEFUN([gl_STDALIGN_H],
             /* Test _Alignas only on platforms where gnulib can help.  */
             #if \
                 ((defined __cplusplus && 201103 <= __cplusplus) \
-                 || __GNUC__ || __IBMC__ || __IBMCPP__ || __ICC \
-                 || 0x5110 <= __SUNPRO_C || 1300 <= _MSC_VER)
+                 || (defined __APPLE__ && defined __MACH__ \
+                     ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+                     : __GNUC__) \
+                 || __HP_cc || __HP_aCC || __IBMC__ || __IBMCPP__ \
+                 || __ICC || 0x5110 <= __SUNPRO_C \
+                 || 1300 <= _MSC_VER)
               struct alignas_test { char c; char alignas (8) alignas_8; };
               char test_alignas[offsetof (struct alignas_test, alignas_8) == 8
                                 ? 1 : -1];
diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
index c555e29..2310502 100644
--- a/m4/stddef_h.m4
+++ b/m4/stddef_h.m4
@@ -1,6 +1,6 @@
-dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues.
-# stddef_h.m4 serial 4
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
+dnl A placeholder for <stddef.h>, for platforms that have issues.
+# stddef_h.m4 serial 5
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -10,6 +10,9 @@ AC_DEFUN([gl_STDDEF_H],
   AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
   AC_REQUIRE([gt_TYPE_WCHAR_T])
   STDDEF_H=
+  AC_CHECK_TYPE([max_align_t], [], [HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h],
+    [[#include <stddef.h>
+    ]])
   if test $gt_cv_c_wchar_t = no; then
     HAVE_WCHAR_T=0
     STDDEF_H=stddef.h
@@ -43,5 +46,6 @@ AC_DEFUN([gl_STDDEF_H_DEFAULTS],
 [
   dnl Assume proper GNU behavior unless another module says otherwise.
   REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
+  HAVE_MAX_ALIGN_T=1;            AC_SUBST([HAVE_MAX_ALIGN_T])
   HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
 ])
diff --git a/m4/stdint.m4 b/m4/stdint.m4
index 1981d9d..4011a49 100644
--- a/m4/stdint.m4
+++ b/m4/stdint.m4
@@ -1,5 +1,5 @@
 # stdint.m4 serial 43
-dnl Copyright (C) 2001-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/stdio_h.m4 b/m4/stdio_h.m4
index d15913a..e0c4bde 100644
--- a/m4/stdio_h.m4
+++ b/m4/stdio_h.m4
@@ -1,14 +1,35 @@
-# stdio_h.m4 serial 43
-dnl Copyright (C) 2007-2014 Free Software Foundation, Inc.
+# stdio_h.m4 serial 44
+dnl Copyright (C) 2007-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_STDIO_H],
 [
+  dnl For __USE_MINGW_ANSI_STDIO
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
   gl_NEXT_HEADERS([stdio.h])
 
+  dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and
+  dnl inttypes.h behave like gnu instead of system; we must give our
+  dnl printf wrapper the right attribute to match.
+  AC_CACHE_CHECK([whether inttypes macros match system or gnu printf],
+    [gl_cv_func_printf_attribute_flavor],
+    [AC_EGREP_CPP([findme .(ll|j)d. findme],
+      [#define __STDC_FORMAT_MACROS 1
+       #include <stdio.h>
+       #include <inttypes.h>
+       findme PRIdMAX findme
+      ], [gl_cv_func_printf_attribute_flavor=gnu],
+      [gl_cv_func_printf_attribute_flavor=system])])
+  if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
+    AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1],
+      [Define to 1 if printf and friends should be labeled with
+       attribute "__gnu_printf__" instead of "__printf__"])
+  fi
+
   dnl No need to create extra modules for these functions. Everyone who uses
   dnl <stdio.h> likely needs them.
   GNULIB_FSCANF=1
diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4
index 86aff16..0b4c623e 100644
--- a/m4/stdlib_h.m4
+++ b/m4/stdlib_h.m4
@@ -1,5 +1,5 @@
 # stdlib_h.m4 serial 42
-dnl Copyright (C) 2007-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/stpcpy.m4 b/m4/stpcpy.m4
new file mode 100644
index 0000000..7e28bee
--- /dev/null
+++ b/m4/stpcpy.m4
@@ -0,0 +1,25 @@
+# stpcpy.m4 serial 8
+dnl Copyright (C) 2002, 2007, 2009-2015 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STPCPY],
+[
+  dnl Persuade glibc <string.h> to declare stpcpy().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  dnl The stpcpy() declaration in lib/string.in.h uses 'restrict'.
+  AC_REQUIRE([AC_C_RESTRICT])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_FUNCS([stpcpy])
+  if test $ac_cv_func_stpcpy = no; then
+    HAVE_STPCPY=0
+  fi
+])
+
+# Prerequisites of lib/stpcpy.c.
+AC_DEFUN([gl_PREREQ_STPCPY], [
+  :
+])
diff --git a/m4/strftime.m4 b/m4/strftime.m4
index 0ba3dd0..4557626 100644
--- a/m4/strftime.m4
+++ b/m4/strftime.m4
@@ -1,6 +1,6 @@
 # serial 33
 
-# Copyright (C) 1996-1997, 1999-2007, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2007, 2009-2015 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/string_h.m4 b/m4/string_h.m4
index 64e683f..55d09ef 100644
--- a/m4/string_h.m4
+++ b/m4/string_h.m4
@@ -1,6 +1,6 @@
 # Configure a GNU-like replacement for <string.h>.
 
-# Copyright (C) 2007-2014 Free Software Foundation, Inc.
+# Copyright (C) 2007-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/strtoimax.m4 b/m4/strtoimax.m4
index 7113781..fde732a 100644
--- a/m4/strtoimax.m4
+++ b/m4/strtoimax.m4
@@ -1,5 +1,5 @@
 # strtoimax.m4 serial 14
-dnl Copyright (C) 2002-2004, 2006, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/strtoll.m4 b/m4/strtoll.m4
index 9f2a177..666f44a 100644
--- a/m4/strtoll.m4
+++ b/m4/strtoll.m4
@@ -1,5 +1,5 @@
 # strtoll.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2006, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/strtoull.m4 b/m4/strtoull.m4
index f4d5f61..4267bd7 100644
--- a/m4/strtoull.m4
+++ b/m4/strtoull.m4
@@ -1,5 +1,5 @@
 # strtoull.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2006, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/strtoumax.m4 b/m4/strtoumax.m4
index fc582fc..5312ef4 100644
--- a/m4/strtoumax.m4
+++ b/m4/strtoumax.m4
@@ -1,5 +1,5 @@
 # strtoumax.m4 serial 12
-dnl Copyright (C) 2002-2004, 2006, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/symlink.m4 b/m4/symlink.m4
index de4924b..a59e2f0 100644
--- a/m4/symlink.m4
+++ b/m4/symlink.m4
@@ -1,7 +1,7 @@
 # serial 6
 # See if we need to provide symlink replacement.
 
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_select_h.m4 b/m4/sys_select_h.m4
index 1a502b4..5ec5919 100644
--- a/m4/sys_select_h.m4
+++ b/m4/sys_select_h.m4
@@ -1,5 +1,5 @@
 # sys_select_h.m4 serial 20
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_socket_h.m4 b/m4/sys_socket_h.m4
index 114d828..eaeabe7 100644
--- a/m4/sys_socket_h.m4
+++ b/m4/sys_socket_h.m4
@@ -1,5 +1,5 @@
 # sys_socket_h.m4 serial 23
-dnl Copyright (C) 2005-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4
index eaa7642..6c909e8 100644
--- a/m4/sys_stat_h.m4
+++ b/m4/sys_stat_h.m4
@@ -1,5 +1,5 @@
 # sys_stat_h.m4 serial 28   -*- Autoconf -*-
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_time_h.m4 b/m4/sys_time_h.m4
index 5c79300..50133b9 100644
--- a/m4/sys_time_h.m4
+++ b/m4/sys_time_h.m4
@@ -1,7 +1,7 @@
 # Configure a replacement for <sys/time.h>.
 # serial 8
 
-# Copyright (C) 2007, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_types_h.m4 b/m4/sys_types_h.m4
index 9748905..2232aec 100644
--- a/m4/sys_types_h.m4
+++ b/m4/sys_types_h.m4
@@ -1,5 +1,5 @@
 # sys_types_h.m4 serial 5
-dnl Copyright (C) 2011-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/tempname.m4 b/m4/tempname.m4
index 1594e1f..b1694d6 100644
--- a/m4/tempname.m4
+++ b/m4/tempname.m4
@@ -1,6 +1,6 @@
 #serial 5
 
-# Copyright (C) 2006-2007, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2007, 2009-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/time_h.m4 b/m4/time_h.m4
index 9852778..d9c41a4 100644
--- a/m4/time_h.m4
+++ b/m4/time_h.m4
@@ -1,8 +1,8 @@
 # Configure a more-standard replacement for <time.h>.
 
-# Copyright (C) 2000-2001, 2003-2007, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
 
-# serial 8
+# serial 9
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -26,7 +26,7 @@ AC_DEFUN([gl_HEADER_TIME_H_BODY],
 ])
 
 dnl Check whether 'struct timespec' is declared
-dnl in time.h, sys/time.h, or pthread.h.
+dnl in time.h, sys/time.h, pthread.h, or unistd.h.
 
 AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
 [
@@ -44,6 +44,7 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
   TIME_H_DEFINES_STRUCT_TIMESPEC=0
   SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
   PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
+  UNISTD_H_DEFINES_STRUCT_TIMESPEC=0
   if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
     TIME_H_DEFINES_STRUCT_TIMESPEC=1
   else
@@ -70,12 +71,26 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
            [gl_cv_sys_struct_timespec_in_pthread_h=no])])
       if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then
         PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1
+      else
+        AC_CACHE_CHECK([for struct timespec in <unistd.h>],
+          [gl_cv_sys_struct_timespec_in_unistd_h],
+          [AC_COMPILE_IFELSE(
+             [AC_LANG_PROGRAM(
+                [[#include <unistd.h>
+                ]],
+                [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+             [gl_cv_sys_struct_timespec_in_unistd_h=yes],
+             [gl_cv_sys_struct_timespec_in_unistd_h=no])])
+        if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then
+          UNISTD_H_DEFINES_STRUCT_TIMESPEC=1
+        fi
       fi
     fi
   fi
   AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC])
   AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
   AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
+  AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC])
 ])
 
 AC_DEFUN([gl_TIME_MODULE_INDICATOR],
diff --git a/m4/time_r.m4 b/m4/time_r.m4
index 7e15600..8df7e13 100644
--- a/m4/time_r.m4
+++ b/m4/time_r.m4
@@ -1,6 +1,6 @@
 dnl Reentrant time functions: localtime_r, gmtime_r.
 
-dnl Copyright (C) 2003, 2006-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/timer_time.m4 b/m4/timer_time.m4
index 578ebe0..962bbd2 100644
--- a/m4/timer_time.m4
+++ b/m4/timer_time.m4
@@ -1,5 +1,5 @@
 # timer_time.m4 serial 3
-dnl Copyright (C) 2011-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/timespec.m4 b/m4/timespec.m4
index 2ce654f..06b3533 100644
--- a/m4/timespec.m4
+++ b/m4/timespec.m4
@@ -1,6 +1,6 @@
 #serial 15
 
-# Copyright (C) 2000-2001, 2003-2007, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/tm_gmtoff.m4 b/m4/tm_gmtoff.m4
index 486351b..71a88f9 100644
--- a/m4/tm_gmtoff.m4
+++ b/m4/tm_gmtoff.m4
@@ -1,5 +1,5 @@
 # tm_gmtoff.m4 serial 3
-dnl Copyright (C) 2002, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/unistd_h.m4 b/m4/unistd_h.m4
index d7346a0..b3c581f 100644
--- a/m4/unistd_h.m4
+++ b/m4/unistd_h.m4
@@ -1,5 +1,5 @@
 # unistd_h.m4 serial 68
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/utimbuf.m4 b/m4/utimbuf.m4
index 822a063..7c33ae9 100644
--- a/m4/utimbuf.m4
+++ b/m4/utimbuf.m4
@@ -1,6 +1,6 @@
 # serial 9
 
-# Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2014 Free Software Foundation,
+# Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2015 Free Software Foundation,
 # Inc.
 #
 # This file is free software; the Free Software Foundation
diff --git a/m4/utimens.m4 b/m4/utimens.m4
index c9c44cf..b022cfd 100644
--- a/m4/utimens.m4
+++ b/m4/utimens.m4
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2003-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/utimes.m4 b/m4/utimes.m4
index c361357..e26a576 100644
--- a/m4/utimes.m4
+++ b/m4/utimes.m4
@@ -1,7 +1,7 @@
 # Detect some bugs in glibc's implementation of utimes.
 # serial 3
 
-dnl Copyright (C) 2003-2005, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2005, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/vararrays.m4 b/m4/vararrays.m4
index cbda525..6e09c7b 100644
--- a/m4/vararrays.m4
+++ b/m4/vararrays.m4
@@ -4,7 +4,7 @@
 
 # From Paul Eggert
 
-# Copyright (C) 2001, 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2009-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/warnings.m4 b/m4/warnings.m4
index 43156f4..5ae01de 100644
--- a/m4/warnings.m4
+++ b/m4/warnings.m4
@@ -1,5 +1,5 @@
 # warnings.m4 serial 11
-dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
index 839a04c..dc964e6 100644
--- a/m4/wchar_t.m4
+++ b/m4/wchar_t.m4
@@ -1,5 +1,5 @@
 # wchar_t.m4 serial 4 (gettext-0.18.2)
-dnl Copyright (C) 2002-2003, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/make-dist b/make-dist
index 45df561..4e05594 100755
--- a/make-dist
+++ b/make-dist
@@ -1,7 +1,8 @@
 #!/bin/sh
 ### make-dist: create an Emacs distribution tar file from current srcdir
 
-## Copyright (C) 1995, 1997-1998, 2000-2014 Free Software Foundation, Inc.
+## Copyright (C) 1995, 1997-1998, 2000-2015 Free Software Foundation,
+## Inc.
 
 ## This file is part of GNU Emacs.
 
@@ -382,7 +383,7 @@ echo "Making links to \`lib-src'"
 (cd lib-src
  ln [a-zA-Z]*.[ch] ../${tempdir}/lib-src
  ln ChangeLog Makefile.in README ../${tempdir}/lib-src
- ln grep-changelog rcs2log ../${tempdir}/lib-src
+ ln rcs2log ../${tempdir}/lib-src
  ln makefile.w32-in ../${tempdir}/lib-src
  ln update-game-score.exe.manifest ../${tempdir}/lib-src)
 
@@ -392,10 +393,10 @@ echo "Making links to \`m4'"
 
 echo "Making links to \`nt'"
 (cd nt
- ln emacs-x86.manifest emacs-x64.manifest emacs.rc ../${tempdir}/nt
- ln config.nt emacsclient.rc emacs-src.tags ../${tempdir}/nt
+ ln emacs-x86.manifest emacs-x64.manifest ../${tempdir}/nt
+ ln config.nt emacs-src.tags ../${tempdir}/nt
  ln nmake.defs gmake.defs subdirs.el [a-z]*.bat [a-z]*.[ch] ../${tempdir}/nt
- ln Makefile.in gnulib.mk ../${tempdir}/nt
+ ln *.in gnulib.mk ../${tempdir}/nt
  ln mingw-cfg.site epaths.nt INSTALL.OLD ../${tempdir}/nt
  ln ChangeLog INSTALL README README.W32 makefile.w32-in ../${tempdir}/nt)
 
diff --git a/msdos/ChangeLog b/msdos/ChangeLog
index efebfc3..4b489cd 100644
--- a/msdos/ChangeLog
+++ b/msdos/ChangeLog
@@ -1550,7 +1550,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1994-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1994-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/msdos/INSTALL b/msdos/INSTALL
index cba9f65..ea698af 100644
--- a/msdos/INSTALL
+++ b/msdos/INSTALL
@@ -1,6 +1,6 @@
 GNU Emacs Installation Guide for the DJGPP (a.k.a. MS-DOS) port
 
-Copyright (C) 1992, 1994, 1996-1997, 2000-2014 Free Software Foundation,
+Copyright (C) 1992, 1994, 1996-1997, 2000-2015 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
diff --git a/msdos/README b/msdos/README
index 07be34a..8409333 100644
--- a/msdos/README
+++ b/msdos/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
@@ -10,7 +10,7 @@ The files emacs.ico and emacs.pif are for using the DJGPP 
version on
 Windows 3.X.  Since these are binary files, their copyright notice is
 reproduced here:
 
-# Copyright (C) 1993, 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 1993, 2002-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/autogen/Makefile.in b/msdos/autogen/Makefile.in
index f70dc81..d545d41 100644
--- a/msdos/autogen/Makefile.in
+++ b/msdos/autogen/Makefile.in
@@ -1,7 +1,7 @@
 # Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2009, 2013-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2009, 2013-2015 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,7 +13,7 @@
 
 @SET_MAKE@
 
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # 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
@@ -36,7 +36,7 @@
 # Generated by gnulib-tool.
 # Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux 
--avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix 
--avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die 
--avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select 
--avoid=sigprocmask --avoid=sys_types --avoid=threadlib 
--makefile-name=gnulib.mk --conditional-dependencies --no-libtool 
--macro-prefix=gl [...]
 
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # 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
diff --git a/msdos/autogen/config.in b/msdos/autogen/config.in
index d2874e1..7696c0c 100644
--- a/msdos/autogen/config.in
+++ b/msdos/autogen/config.in
@@ -2,7 +2,7 @@
 
 /* GNU Emacs site configuration template file.
 
-Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2014 Free Software
+Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/msdos/depfiles.bat b/msdos/depfiles.bat
index ef995cb..5b46429 100644
--- a/msdos/depfiles.bat
+++ b/msdos/depfiles.bat
@@ -1,7 +1,7 @@
 @echo off
 rem   ----------------------------------------------------------------------
 rem   Auxiliary script for MSDOS, run by ../config.bat
-rem   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+rem   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/msdos/inttypes.h b/msdos/inttypes.h
index 7469ea0..aaadba3 100644
--- a/msdos/inttypes.h
+++ b/msdos/inttypes.h
@@ -1,6 +1,6 @@
 /* Replacement inttypes.h file for building GNU Emacs on MS-DOS with DJGPP.
 
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/msdos/mainmake.v2 b/msdos/mainmake.v2
index 2cc71bb..e52273b 100644
--- a/msdos/mainmake.v2
+++ b/msdos/mainmake.v2
@@ -1,6 +1,6 @@
 # Top-level Makefile for Emacs under MS-DOS/DJGPP v2.0 or higher. 
-*-makefile-*-
 
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp
index 77c74fe..af03a9c 100644
--- a/msdos/sed1v2.inp
+++ b/msdos/sed1v2.inp
@@ -2,7 +2,7 @@
 # Configuration script for src/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1996-1997, 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed1x.inp b/msdos/sed1x.inp
index 60b450a..3fa9a08 100644
--- a/msdos/sed1x.inp
+++ b/msdos/sed1x.inp
@@ -2,7 +2,7 @@
 # Extra configuration script for src/makefile for DesqView/X
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1994-1997, 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-1997, 1999-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp
index 658a384..e1609f2 100644
--- a/msdos/sed2v2.inp
+++ b/msdos/sed2v2.inp
@@ -2,7 +2,7 @@
 # Configuration script for src/config.h under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1993-1997, 1999-2000, 2002-2014 Free Software
+# Copyright (C) 1993-1997, 1999-2000, 2002-2015 Free Software
 # Foundation, Inc.
 #
 # This file is part of GNU Emacs.
@@ -27,7 +27,7 @@
 #ifndef MSDOS\
 #define MSDOS\
 #endif
-/^#undef COPYRIGHT *$/s/^.*$/#define COPYRIGHT "Copyright (C) 2014 Free 
Software Foundation, Inc."/
+/^#undef COPYRIGHT *$/s/^.*$/#define COPYRIGHT "Copyright (C) 2015 Free 
Software Foundation, Inc."/
 /^#undef DIRECTORY_SEP *$/s!^.*$!#define DIRECTORY_SEP '/'!
 /^#undef DOS_NT *$/s/^.*$/#define DOS_NT/
 /^#undef FLOAT_CHECK_DOMAIN *$/s/^.*$/#define FLOAT_CHECK_DOMAIN/
diff --git a/msdos/sed2x.inp b/msdos/sed2x.inp
index 0c8f16b..90ab9dd 100644
--- a/msdos/sed2x.inp
+++ b/msdos/sed2x.inp
@@ -2,7 +2,7 @@
 # Extra configuration script for src/config.h for DesqView/X
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed3v2.inp b/msdos/sed3v2.inp
index 09f2f08..7a8303f 100644
--- a/msdos/sed3v2.inp
+++ b/msdos/sed3v2.inp
@@ -2,7 +2,7 @@
 # Configuration script for lib-src/makefile under DJGPP v2
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1996, 1998, 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1998, 2000-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed4.inp b/msdos/sed4.inp
index a7354fe..7f792d3 100644
--- a/msdos/sed4.inp
+++ b/msdos/sed4.inp
@@ -2,7 +2,7 @@
 # Configuration script for src/paths.h
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed5x.inp b/msdos/sed5x.inp
index ebd4486..96b69d9 100644
--- a/msdos/sed5x.inp
+++ b/msdos/sed5x.inp
@@ -2,7 +2,7 @@
 # Configuration script for oldxmenu/makefile for DesqView/X
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed6.inp b/msdos/sed6.inp
index a15f423..1a9ebd1 100644
--- a/msdos/sed6.inp
+++ b/msdos/sed6.inp
@@ -3,7 +3,7 @@
 # doc/lispintro/Makefile, and doc/misc/Makefile under DJGPP v2.x
 # ---------------------------------------------------------------------------
 #
-# Copyright (C) 1997, 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997, 2000-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedadmin.inp b/msdos/sedadmin.inp
index 6b34260..650305a 100644
--- a/msdos/sedadmin.inp
+++ b/msdos/sedadmin.inp
@@ -2,7 +2,7 @@
 # Configuration script for admin/unidata/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2014 Free Software Foundation, Inc.
+# Copyright (C) 2014-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedalloc.inp b/msdos/sedalloc.inp
index b5707ef..e95c767 100644
--- a/msdos/sedalloc.inp
+++ b/msdos/sedalloc.inp
@@ -2,7 +2,7 @@
 # Configuration script for SYSTEM_MALLOC/REL_ALLOC in src/config.h
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2008-2014 Free Software Foundation, Inc.
+# Copyright (C) 2008-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedleim.inp b/msdos/sedleim.inp
index fab8094..0a1a413 100644
--- a/msdos/sedleim.inp
+++ b/msdos/sedleim.inp
@@ -2,7 +2,7 @@
 # Configuration script for leim/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedlibcf.inp b/msdos/sedlibcf.inp
index ffcbe75..731c143 100644
--- a/msdos/sedlibcf.inp
+++ b/msdos/sedlibcf.inp
@@ -5,7 +5,7 @@
 # files whose names are invalid on DOS 8+3 filesystems.
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Copyright (C) 2011-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedlibmk.inp b/msdos/sedlibmk.inp
index b896ead..966ac8e 100644
--- a/msdos/sedlibmk.inp
+++ b/msdos/sedlibmk.inp
@@ -2,7 +2,7 @@
 # Configuration script for lib/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Copyright (C) 2011-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedlisp.inp b/msdos/sedlisp.inp
index 332630c..8462ac2 100644
--- a/msdos/sedlisp.inp
+++ b/msdos/sedlisp.inp
@@ -2,7 +2,7 @@
 # Configuration script for lisp/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/nextstep/ChangeLog b/nextstep/ChangeLog
index 4ff3d65..f7cd2b0 100644
--- a/nextstep/ChangeLog
+++ b/nextstep/ChangeLog
@@ -1,3 +1,17 @@
+2014-12-05  Sam Steingold  <address@hidden>
+
+       * Makefile.in (links): Use abs_top_builddir et al; link over DOC.
+
+2014-12-03  Sam Steingold  <address@hidden>
+
+       * Makefile.in (links): New phony target to create a fake
+       installation pointing back to the source tree to run GUI Emacs
+       in-place (http://article.gmane.org/gmane.emacs.devel:178330).
+
+2014-11-22  Glenn Morris  <address@hidden>
+
+       * templates/Info-gnustep.plist.in: Let configure set URL.
+
 2014-11-03  Jan Djärv  <address@hidden>
 
        * INSTALL: Remove univeral binary section.
@@ -298,7 +312,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2008-2014 Free Software Foundation, Inc.
+  Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/nextstep/INSTALL b/nextstep/INSTALL
index 6cb0ac9..96aaac7 100644
--- a/nextstep/INSTALL
+++ b/nextstep/INSTALL
@@ -1,4 +1,4 @@
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/nextstep/Makefile.in b/nextstep/Makefile.in
index 52f3211..07e7285 100644
--- a/nextstep/Makefile.in
+++ b/nextstep/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-## Copyright (C) 2012-2014 Free Software Foundation, Inc.
+## Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
@@ -8,12 +8,12 @@
 ## it under the terms of the GNU General Public License as published by
 ## the Free Software Foundation, either version 3 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.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -23,8 +23,13 @@
 SHELL = @SHELL@
 
 srcdir = @srcdir@
+abs_builddir = @abs_builddir@
+abs_top_builddir = @abs_top_builddir@
 EXEEXT = @EXEEXT@
 
+# abs_top_srcdir may contain ".."
+top_srcdir_abs = $(shell cd @top_srcdir@; pwd -P)
+
 @SET_MAKE@
 MKDIR_P = @MKDIR_P@
 
@@ -50,10 +55,27 @@ ${ns_appbindir}/Emacs: ${ns_appdir} ${ns_check_file} 
../src/emacs${EXEEXT} | \
   ${ns_appbindir}
        cp -f ../src/emacs${EXEEXT} $@
 
-.PHONY: all
+.PHONY: all links
 
 all: ${ns_appdir} ${ns_appbindir}/Emacs
 
+# create a fake installation pointing back to the source tree
+# to run GUI Emacs in-place
+links : ../src/emacs${EXEEXT} | ${ns_appbindir}
+       for d in $(shell cd ${srcdir}/${ns_appsrc}; find . -type d); do 
${MKDIR_P} ${ns_appdir}/$$d; done
+       for f in $(shell cd ${srcdir}/${ns_appsrc}; find . -type f); do ln -s 
$(shell cd ${srcdir}; pwd -P)/${ns_appsrc}/$$f ${ns_appdir}/$$f; done
+       for d in $(shell cd ${ns_appsrc}; find . -type d); do ${MKDIR_P} 
${ns_appdir}/$$d; done
+       for f in $(shell cd ${ns_appsrc}; find . -type f); do ln -s $(shell cd 
${ns_appsrc}; pwd -P)/$$f ${ns_appdir}/$$f; done
+       ln -s $(top_srcdir_abs)/lisp ${ns_appdir}/Contents/Resources
+       ln -s $(top_srcdir_abs)/info ${ns_appdir}/Contents/Resources
+       ln -s $(abs_top_builddir)/src/emacs${EXEEXT} ${ns_appbindir}/Emacs
+       ln -s $(abs_top_builddir)/lib-src ${ns_appbindir}/bin
+       ln -s $(abs_top_builddir)/lib-src ${ns_appbindir}/libexec
+       ${MKDIR_P} ${ns_appdir}/Contents/Resources/etc
+       for f in $(shell cd $(top_srcdir_abs)/etc; ls); do ln -s 
$(top_srcdir_abs)/etc/$$f ${ns_appdir}/Contents/Resources/etc; done
+       ln -s $(abs_top_builddir)/etc/DOC ${ns_appdir}/Contents/Resources/etc
+       @echo if the next find prints something, the installation failed
+       find ${ns_appdir} -exec test \! -e {} \; -ls
 
 .PHONY: clean distclean bootstrap-clean maintainer-clean
 
diff --git a/nextstep/templates/Info-gnustep.plist.in 
b/nextstep/templates/Info-gnustep.plist.in
index 42abc23..679eb4f 100644
--- a/nextstep/templates/Info-gnustep.plist.in
+++ b/nextstep/templates/Info-gnustep.plist.in
@@ -132,5 +132,5 @@
            };
        },
     );
-    URL = "http://www.gnu.org/software/emacs";;
+    URL = "@PACKAGE_URL@";
 }
diff --git a/nextstep/templates/Info.plist.in b/nextstep/templates/Info.plist.in
index ce8f9b1..8c9dc21 100644
--- a/nextstep/templates/Info.plist.in
+++ b/nextstep/templates/Info.plist.in
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/.gitignore b/nt/.gitignore
deleted file mode 100644
index 4e2fa24..0000000
--- a/nt/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-config.log
-stamp_BLD
-
-oo/
-oo-spd/
diff --git a/nt/ChangeLog b/nt/ChangeLog
index 457d97c..b9966fb 100644
--- a/nt/ChangeLog
+++ b/nt/ChangeLog
@@ -1,3 +1,40 @@
+2015-01-16  Eli Zaretskii  <address@hidden>
+
+       * Makefile.in (AM_V_CC, am__v_CC_, am__v_CC_0, am__v_CC_1)
+       (AM_V_CCLD, am__v_CCLD_, am__v_CCLD_0, am__v_CCLD_1, AM_V_RC)
+       (am__v_RC_, am__v_RC_0, am__v_RC_1): New macros.
+       (addpm${EXEEXT}, ddeclient${EXEEXT}, cmdproxy${EXEEXT})
+       (runemacs${EXEEXT}): Use $(AM_V_CCLD).
+       (emacs.res, ../src/emacs.res): Use $(AM_V_RC).
+
+2014-12-26  Eli Zaretskii  <address@hidden>
+
+       * gnulib.mk (stpcpy, string): Sync with the latest change in
+       lib/gnulib.mk.
+
+2014-12-13  Eli Zaretskii  <address@hidden>
+
+       * gnulib.mk (stddef.h): Sync with the latest change in lib/gnulib.mk.
+
+2014-11-27  Oscar Fuentes  <address@hidden>
+
+       * inc/ms-w32.h: Define MINGW_W64.
+       * nt/addpm.c, nt/addsection.c, nt/preprep.c: Use it.
+
+2014-11-24  Glenn Morris  <address@hidden>
+
+       * Makefile.in (../src/emacs.res): New target.
+
+2014-11-22  Glenn Morris  <address@hidden>
+
+       * emacs.rc.in, emacsclient.rc.in: Rename from emacs.rc, emacsclient.rc.
+       Let configure generate the real files, and set the version numbers.
+       * Makefile.in (distclean): Delete *.rc.
+       (emacs.res): Update deps for nt/emacsclient.rc now being in the
+       build directory, not the source directory.
+
+       * Makefile.in (emacs.res): Add dependency on icons/hand.cur.
+
 2014-11-18  Glenn Morris  <address@hidden>
 
        * Makefile.in (addpm${EXEEXT}, ddeclient${EXEEXT})
@@ -787,7 +824,7 @@
 2012-10-01  Eli Zaretskii  <address@hidden>
 
        * preprep.c (RVA_TO_PTR): Use 'unsigned char *' instead of
-       'void *', for pointer arithmetics.
+       'void *', for pointer arithmetic.
        (OFFSET_TO_RVA, RVA_TO_OFFSET, RVA_TO_SECTION_OFFSET): Enclose all
        macro arguments in parentheses.
 
@@ -1838,7 +1875,7 @@
        * config.nt (HAVE_FACES): Remove, unused.
 
 2008-06-26  Juanma Barranquero  <address@hidden>
-            Eli Zaretskii  <address@hidden>
+           Eli Zaretskii  <address@hidden>
 
        * nmake.defs (FONT_CFLAGS):
        * gmake.defs (FONT_CFLAGS): Remove.
@@ -1854,7 +1891,7 @@
        * config.nt: Remove reference to UNEXEC_SRC.
 
 2008-06-23  Juanma Barranquero  <address@hidden>
-            Eli Zaretskii  <address@hidden>
+           Eli Zaretskii  <address@hidden>
 
        * gmake.defs (DEBUG_FLAG, DEBUG_LINK) [!NODEBUG]:
        Don't hardcode -gstabs+, use DEBUG_INFO.
@@ -3487,7 +3524,7 @@
 ;; add-log-time-zone-rule: t
 ;; End:
 
-  Copyright (C) 1995-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1995-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/nt/INSTALL b/nt/INSTALL
index 1366d59..58fe947 100644
--- a/nt/INSTALL
+++ b/nt/INSTALL
@@ -1,7 +1,7 @@
                    Building and Installing Emacs on MS-Windows
                           using the MSYS and MinGW tools
 
-  Copyright (C) 2013-2014 Free Software Foundation, Inc.
+  Copyright (C) 2013-2015 Free Software Foundation, Inc.
   See the end of the file for license conditions.
 
 The MSYS/MinGW build described here is supported on versions of
diff --git a/nt/INSTALL.OLD b/nt/INSTALL.OLD
index a7ce57c..89e87b2 100644
--- a/nt/INSTALL.OLD
+++ b/nt/INSTALL.OLD
@@ -1,7 +1,7 @@
                    Building and Installing Emacs on Windows
                           (from 95 to 7 and beyond)
 
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
   See the end of the file for license conditions.
 
 *** This method of building Emacs is no longer supported. ***
diff --git a/nt/Makefile.in b/nt/Makefile.in
index 63bef28..fc6887f 100644
--- a/nt/Makefile.in
+++ b/nt/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2013-2014 Free Software Foundation, Inc.
+# Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -41,6 +41,24 @@ WERROR_CFLAGS = @WERROR_CFLAGS@
 # Program name transformation.
 TRANSFORM = @program_transform_name@
 
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_CC = $(address@hidden@)
+am__v_CC_ = $(address@hidden@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 =
+
+AM_V_CCLD = $(address@hidden@)
+am__v_CCLD_ = $(address@hidden@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 =
+
+AM_V_RC = $(address@hidden@)
+am__v_RC_ = $(address@hidden@)
+am__v_RC_0 = @echo "  RC      " $@;
+am__v_RC_1 =
+
 # ==================== Where To Install Things ====================
 
 # The default location for installation.  Everything is placed in
@@ -195,8 +213,7 @@ clean: mostlyclean
        -rm -f ${EXE_FILES}
 
 distclean: clean
-       -rm -f TAGS
-       -rm -f Makefile
+       -rm -f TAGS Makefile *.rc
 
 bootstrap-clean maintainer-clean: distclean
        true
@@ -214,16 +231,18 @@ TAGS: ${EXE_FILES:${EXEEXT}=.c}
 
 ## Build the programs
 addpm${EXEEXT}: ${srcdir}/addpm.c ../src/epaths.h
-       $(CC) ${ALL_CFLAGS} $< $(LIBS_ADDPM) -o $@
+       $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(LIBS_ADDPM) -o $@
 
 ddeclient${EXEEXT}: ${srcdir}/ddeclient.c
-       $(CC) ${ALL_CFLAGS} $< -o $@
+       $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< -o $@
 
 cmdproxy${EXEEXT}: ${srcdir}/cmdproxy.c
-       $(CC) ${ALL_CFLAGS} $< -o $@
+       $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< -o $@
 
 runemacs${EXEEXT}: ${srcdir}/runemacs.c $(EMACSRES)
-       $(CC) ${ALL_CFLAGS} $^ -mwindows -o $@
+       $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $^ -mwindows -o $@
 
-emacs.res: ${srcdir}/emacs.rc ${srcdir}/icons/emacs.ico 
${srcdir}/$(EMACS_MANIFEST)
-       ${WINDRES} -I ${srcdir} -O coff -o $@ $<
+## Also used in ../src/Makefile.
+emacs.res ../src/emacs.res: emacs.rc ${srcdir}/icons/emacs.ico \
+  ${srcdir}/icons/hand.cur ${srcdir}/$(EMACS_MANIFEST)
+       $(AM_V_RC)${WINDRES} -I ${srcdir} -O coff -o $@ $<
diff --git a/nt/README b/nt/README
index 14c89a0..a5226f6 100644
--- a/nt/README
+++ b/nt/README
@@ -1,6 +1,6 @@
             Emacs for Windows NT/2000 and Windows 95/98/ME
 
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
   See the end of the file for license conditions.
 
   This directory contains support for compiling and running GNU Emacs on
diff --git a/nt/README.W32 b/nt/README.W32
index 4d59c6f..5024bdc 100644
--- a/nt/README.W32
+++ b/nt/README.W32
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
                           Emacs for Windows
diff --git a/nt/addpm.c b/nt/addpm.c
index 18057b5..cd91a3e 100644
--- a/nt/addpm.c
+++ b/nt/addpm.c
@@ -1,5 +1,5 @@
 /* Add entries to the GNU Emacs Program Manager folder.
-   Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -38,9 +38,8 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include <stdio.h>
 #include <malloc.h>
 
-/* MinGW64 defines _W64 and barfs if _WIN32_IE is defined to anything
-   below 0x500.  */
-#ifndef _W64
+/* MinGW64 barfs if _WIN32_IE is defined to anything below 0x500.  */
+#ifndef MINGW_W64
 #define _WIN32_IE 0x400
 #endif
 /* Request C Object macros for COM interfaces.  */
diff --git a/nt/cmdproxy.c b/nt/cmdproxy.c
index d8f7ae3..faef2f8 100644
--- a/nt/cmdproxy.c
+++ b/nt/cmdproxy.c
@@ -1,5 +1,5 @@
 /* Proxy shell designed for use with Emacs on Windows 95 and NT.
-   Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
    Accepts subset of Unix sh(1) command-line options, for compatibility
    with elisp code written for Unix.  When possible, executes external
diff --git a/nt/config.nt b/nt/config.nt
index 8040ecc..aa4a8bc 100644
--- a/nt/config.nt
+++ b/nt/config.nt
@@ -1,6 +1,6 @@
 /* GNU Emacs site configuration template file.
 
-Copyright (C) 1988, 1993-1994, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1988, 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -72,7 +72,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #define CLASH_DETECTION 1
 
 /* Short copyright string for this version of Emacs. */
-#define COPYRIGHT "Copyright (C) 2014 Free Software Foundation, Inc."
+#define COPYRIGHT "Copyright (C) 2015 Free Software Foundation, Inc."
 
 /* Define to one of '_getb67', 'GETB67', 'getb67' for Cray-2 and Cray-YMP
    systems. This function is required for 'alloca.c' support on those systems.
diff --git a/nt/configure.bat b/nt/configure.bat
index 5460f4c..f6ac8fc 100755
--- a/nt/configure.bat
+++ b/nt/configure.bat
@@ -1,7 +1,7 @@
 @echo off
 rem   ----------------------------------------------------------------------
 rem   Configuration script for MS Windows operating systems
-rem   Copyright (C) 1999-2014 Free Software Foundation, Inc.
+rem   Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/nt/ddeclient.c b/nt/ddeclient.c
index 6786870..3568980 100644
--- a/nt/ddeclient.c
+++ b/nt/ddeclient.c
@@ -1,5 +1,5 @@
 /* Simple client interface to DDE servers.
-   Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/emacs.rc b/nt/emacs.rc.in
similarity index 79%
rename from nt/emacs.rc
rename to nt/emacs.rc.in
index 15455d9..da85885 100644
--- a/nt/emacs.rc
+++ b/nt/emacs.rc.in
@@ -11,8 +11,8 @@ Emacs ICON   icons/emacs.ico
 #endif
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 25,0,50,0
- PRODUCTVERSION 25,0,50,0
+ FILEVERSION @comma_version@
+ PRODUCTVERSION @comma_version@
  FILEFLAGSMASK 0x3FL
 #ifdef EMACSDEBUG
  FILEFLAGS 0x1L
@@ -29,12 +29,12 @@ BEGIN
        BEGIN
            VALUE "CompanyName", "Free Software Foundation\0"
            VALUE "FileDescription", "GNU Emacs: The extensible 
self-documenting text editor\0"
-           VALUE "FileVersion", "25, 0, 50, 0\0"
+           VALUE "FileVersion", "@address@hidden"
            VALUE "InternalName", "Emacs\0"
-           VALUE "LegalCopyright", "Copyright (C) 2001-2014\0"
+           VALUE "LegalCopyright", "Copyright (C) 2001-2015\0"
            VALUE "OriginalFilename", "emacs.exe"
            VALUE "ProductName", "Emacs\0"
-           VALUE "ProductVersion", "25, 0, 50, 0\0"
+           VALUE "ProductVersion", "@address@hidden"
            VALUE "OLESelfRegister", "\0"
         END
      END
diff --git a/nt/emacsclient.rc b/nt/emacsclient.rc.in
similarity index 77%
rename from nt/emacsclient.rc
rename to nt/emacsclient.rc.in
index 9318492..c78aa0a 100644
--- a/nt/emacsclient.rc
+++ b/nt/emacsclient.rc.in
@@ -5,8 +5,8 @@ Emacs ICON   icons\emacs.ico
 #endif
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 25,0,50,0
- PRODUCTVERSION 25,0,50,0
+ FILEVERSION @comma_version@
+ PRODUCTVERSION @comma_version@
  FILEFLAGSMASK 0x3FL
 #ifdef EMACSDEBUG
  FILEFLAGS 0x1L
@@ -23,12 +23,12 @@ BEGIN
        BEGIN
            VALUE "CompanyName", "Free Software Foundation\0"
            VALUE "FileDescription", "GNU EmacsClient: Client for the 
extensible self-documenting text editor\0"
-           VALUE "FileVersion", "25, 0, 50, 0\0"
+           VALUE "FileVersion", "@address@hidden"
            VALUE "InternalName", "EmacsClient\0"
-           VALUE "LegalCopyright", "Copyright (C) 2001-2014\0"
+           VALUE "LegalCopyright", "Copyright (C) 2001-2015\0"
            VALUE "OriginalFilename", "emacsclientw.exe"
            VALUE "ProductName", "EmacsClient\0"
-           VALUE "ProductVersion", "25, 0, 50, 0\0"
+           VALUE "ProductVersion", "@address@hidden"
            VALUE "OLESelfRegister", "\0"
         END
      END
diff --git a/nt/envadd.bat b/nt/envadd.bat
index 04d2782..21f0f4b 100644
--- a/nt/envadd.bat
+++ b/nt/envadd.bat
@@ -1,7 +1,7 @@
 rem  Hack to change/add environment variables in the makefiles for the
 rem  Windows platform.
 
-rem Copyright (C) 2003-2014 Free Software Foundation, Inc.
+rem Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 rem  This file is part of GNU Emacs.
 
diff --git a/nt/epaths.nt b/nt/epaths.nt
index 41baeab..f5eba94 100644
--- a/nt/epaths.nt
+++ b/nt/epaths.nt
@@ -12,7 +12,7 @@
    the host system (e.g., i686-pc-mingw32), and @SRC@ by the root of
    the Emacs source tree used to build Emacs.  */
 /*
-Copyright (C) 1993, 1995, 1997, 1999, 2001-2014 Free Software
+Copyright (C) 1993, 1995, 1997, 1999, 2001-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/nt/gmake.defs b/nt/gmake.defs
index b4c76cf..90a3709 100644
--- a/nt/gmake.defs
+++ b/nt/gmake.defs
@@ -1,5 +1,5 @@
 #  -*- Makefile -*- definition file for building GNU Emacs on Windows NT.
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/nt/gnulib.mk b/nt/gnulib.mk
index 4a06da5..4be3c2c 100644
--- a/nt/gnulib.mk
+++ b/nt/gnulib.mk
@@ -22,7 +22,7 @@
 ## suitable variables in nt/mingw-cfg.site.
 ##
 ## Process this file with automake to produce Makefile.in.
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # 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
@@ -43,7 +43,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux 
--avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix 
--avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die 
--avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select 
--avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib 
--makefile-name=gnulib.mk --conditional-dependencies --no-libtool --ma [...]
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux 
--avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix 
--avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die 
--avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select 
--avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib 
--makefile-name=gnulib.mk --conditional-dependencies --no-libtool --ma [...]
 
 
 MOSTLYCLEANFILES += core *.stackdump
@@ -705,6 +705,7 @@ stddef.h: stddef.in.h $(top_builddir)/config.status
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
              -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+             -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
              -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
              -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
              < $(srcdir)/stddef.in.h; \
@@ -770,6 +771,15 @@ EXTRA_DIST += stdint.in.h
 
 ## end   gnulib module stdint
 
+## begin gnulib module stpcpy
+
+
+EXTRA_DIST += stpcpy.c
+
+EXTRA_libgnu_a_SOURCES += stpcpy.c
+
+## end   gnulib module stpcpy
+
 ## begin gnulib module strftime
 
 libgnu_a_SOURCES += strftime.c
@@ -778,6 +788,106 @@ EXTRA_DIST += strftime.h
 
 ## end   gnulib module strftime
 
+## begin gnulib module string
+
+BUILT_SOURCES += string.h
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f address@hidden $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+             -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
+             -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
+             -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
+             -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
+             -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
+             -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
+             -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
+             -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
+             -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
+             -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
+             -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
+             -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
+             -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
+             -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
+             -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
+             -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
+             -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
+             -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
+             -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
+             -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
+             -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
+             -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
+             -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
+             -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
+             -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
+             -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
+             -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
+             -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
+             -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
+             -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
+             -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
+             -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
+             -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
+             -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
+             -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+             -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
+             -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
+             < $(srcdir)/string.in.h | \
+         sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+             -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+             -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+             -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+             -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+             -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+             -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+             -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+             -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+             -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+             -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+             -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+             -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+             -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+             -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+             -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+             -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+             -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+             -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+             -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+             -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+             -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+             -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+             -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+             -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+             -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+             -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+             -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+             -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+             -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+             -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+             -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+             -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+             -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+             < $(srcdir)/string.in.h; \
+       } > address@hidden && \
+       mv address@hidden $@
+MOSTLYCLEANFILES += string.h string.h-t
+
+EXTRA_DIST += string.in.h
+
+## end   gnulib module string
+
 ## begin gnulib module strtoimax
 
 
diff --git a/nt/icons/README b/nt/icons/README
index 9518800..82c4db2 100644
--- a/nt/icons/README
+++ b/nt/icons/README
@@ -2,13 +2,13 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 File: emacs.ico
 Author: Kentaro Ohkouchi <address@hidden>
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later
 
 
 File: emacs22.ico
 Author: Andrew Zhilin
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
 
@@ -17,7 +17,7 @@ Files: gnu2a32.ico gnu2a32t.ico gnu2b48.ico gnu2b48t.ico
        gnu5w32.ico gnu5w32t.ico gnu6w48.ico gnu6w48t.ico
        gnu7.ico    gnu8.ico     gnu9.ico
 Author: Rob Davenport <rgd at bigfoot.com>
-Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
   <http://users.adelphia.net/~rob.davenport/gnuicons.html>
diff --git a/nt/inc/grp.h b/nt/inc/grp.h
index 1116395..7d4e6fb 100644
--- a/nt/inc/grp.h
+++ b/nt/inc/grp.h
@@ -1,6 +1,6 @@
 /* Replacement grp.h file for building GNU Emacs on Windows.
 
-Copyright (C) 2003-2014 Free Software Foundation, Inc.
+Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/inttypes.h b/nt/inc/inttypes.h
index e6d18f3..a07d64e 100644
--- a/nt/inc/inttypes.h
+++ b/nt/inc/inttypes.h
@@ -1,6 +1,6 @@
 /* Replacement inttypes.h file for building GNU Emacs on Windows with MSVC.
 
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/langinfo.h b/nt/inc/langinfo.h
index c8bbe86..c9d2e6e 100644
--- a/nt/inc/langinfo.h
+++ b/nt/inc/langinfo.h
@@ -1,6 +1,6 @@
 /* Replacement langinfo.h file for building GNU Emacs on Windows.
 
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/ms-w32.h b/nt/inc/ms-w32.h
index edb143c..adac2e3 100644
--- a/nt/inc/ms-w32.h
+++ b/nt/inc/ms-w32.h
@@ -1,6 +1,6 @@
 /* System description file for Windows NT.
 
-Copyright (C) 1993-1995, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -26,6 +26,16 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 #include <mingw_time.h>
 
+/* MinGW-w64 gcc does not automotically define a macro for
+   differentiating it fom MinGW gcc. We need to test the presence of
+   __MINGW64_VERSION_MAJOR in _mingw.h: */
+#ifdef __MINGW32__
+# include <_mingw.h>
+# ifdef __MINGW64_VERSION_MAJOR
+#  define MINGW_W64
+# endif
+#endif
+
 /* #undef const */
 
 /* Number of chars of output in the buffer of a stdio stream. */
@@ -139,8 +149,7 @@ extern char *getenv ();
    versions we still support.  MinGW64 defines this to a higher value
    in its system headers, and is not really compatible with values
    lower than 0x0500, so leave it alone.  */
-#ifndef _W64
-# undef _WIN32_WINNT
+#ifndef MINGW_W64
 # define _WIN32_WINNT 0x0400
 #endif
 
@@ -167,7 +176,7 @@ extern char *getenv ();
 
 #ifdef emacs
 
-#ifdef _W64
+#ifdef MINGW_W64
 /* MinGW64 specific stuff.  */
 /* Make sure 'struct timespec' and 'struct timezone' are defined.  */
 #include <sys/types.h>
@@ -370,7 +379,7 @@ typedef int sigset_t;
 typedef int ssize_t;
 #endif
 
-#ifdef _W64    /* MinGW64 */
+#ifdef MINGW_W64
 #ifndef _POSIX
 typedef _sigset_t sigset_t;
 #endif
diff --git a/nt/inc/nl_types.h b/nt/inc/nl_types.h
index 8da8cfd..86772b6 100644
--- a/nt/inc/nl_types.h
+++ b/nt/inc/nl_types.h
@@ -1,6 +1,6 @@
 /* Replacement nl_types.h file for building GNU Emacs on Windows.
 
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/stdint.h b/nt/inc/stdint.h
index 4c1a41f..43c4be1 100644
--- a/nt/inc/stdint.h
+++ b/nt/inc/stdint.h
@@ -1,6 +1,6 @@
 /* Replacement stdint.h file for building GNU Emacs on Windows.
 
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/sys/socket.h b/nt/inc/sys/socket.h
index 4800739..205cb34 100644
--- a/nt/inc/sys/socket.h
+++ b/nt/inc/sys/socket.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/sys/stat.h b/nt/inc/sys/stat.h
index 7dfe78a..9b49353 100644
--- a/nt/inc/sys/stat.h
+++ b/nt/inc/sys/stat.h
@@ -1,7 +1,7 @@
 /* sys/stat.h supplied with MSVCRT uses too narrow data types for
    inode and user/group id, so we replace them with our own.
 
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/sys/wait.h b/nt/inc/sys/wait.h
index ada0344..8f9628f 100644
--- a/nt/inc/sys/wait.h
+++ b/nt/inc/sys/wait.h
@@ -1,6 +1,6 @@
 /* A limited emulation of sys/wait.h on Posix systems.
 
-Copyright (C) 2012-2014 Free Software Foundation, Inc.
+Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/makefile.w32-in b/nt/makefile.w32-in
index 0770ad9..ff2bf27 100644
--- a/nt/makefile.w32-in
+++ b/nt/makefile.w32-in
@@ -1,5 +1,5 @@
 # -*- Makefile -*- for GNU Emacs on the Microsoft Windows API.
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015 Free Software Foundation, Inc.
 #
 # Top level makefile for building GNU Emacs on Windows NT
 #
diff --git a/nt/multi-install-info.bat b/nt/multi-install-info.bat
index 54e4214..f69ee48 100644
--- a/nt/multi-install-info.bat
+++ b/nt/multi-install-info.bat
@@ -3,7 +3,7 @@
 rem  Hack to run install-info with multiple info files on the command
 rem  line on the Windows platform.
 
-rem Copyright (C) 2003-2014 Free Software Foundation, Inc.
+rem Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 rem  This file is part of GNU Emacs.
 
diff --git a/nt/nmake.defs b/nt/nmake.defs
index c2a0b8c..5424b9d 100644
--- a/nt/nmake.defs
+++ b/nt/nmake.defs
@@ -1,5 +1,5 @@
 #  -*- Makefile -*- definition file for building GNU Emacs on Windows NT.
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/nt/paths.h b/nt/paths.h
index 89e3580..d6dfaad 100644
--- a/nt/paths.h
+++ b/nt/paths.h
@@ -1,6 +1,6 @@
 /* paths.h file for MS Windows
 
-Copyright (C) 1993, 1995, 1997, 1999, 2001-2014 Free Software
+Copyright (C) 1993, 1995, 1997, 1999, 2001-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/nt/preprep.c b/nt/preprep.c
index fda937d..49532d0 100644
--- a/nt/preprep.c
+++ b/nt/preprep.c
@@ -1,5 +1,5 @@
 /* Pre-process emacs.exe for profiling by MSVC.
-   Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -25,7 +25,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.
 #include <stdio.h>
 #include <fcntl.h>
 #include <time.h>
-#if defined(__GNUC__) && !defined(_W64)
+#if defined(__GNUC__) && !defined(MINGW_W64)
 #define _ANONYMOUS_UNION
 #define _ANONYMOUS_STRUCT
 #endif
diff --git a/nt/runemacs.c b/nt/runemacs.c
index 5b851f4..3fcf405 100644
--- a/nt/runemacs.c
+++ b/nt/runemacs.c
@@ -1,6 +1,6 @@
 /* runemacs --- Simple program to start Emacs with its console window hidden.
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/zipdist.bat b/nt/zipdist.bat
index d5359c8..55ba9ae 100644
--- a/nt/zipdist.bat
+++ b/nt/zipdist.bat
@@ -1,5 +1,5 @@
 @echo off
-rem Copyright (C) 2001-2014 Free Software Foundation, Inc.
+rem Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 rem Author: Christoph Scholtes cschol2112 at gmail.com
 
diff --git a/oldXMenu/.gitignore b/oldXMenu/.gitignore
deleted file mode 100644
index f3c7a7c..0000000
--- a/oldXMenu/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-Makefile
diff --git a/oldXMenu/Activate.c b/oldXMenu/Activate.c
index 54182aa..5de157e 100644
--- a/oldXMenu/Activate.c
+++ b/oldXMenu/Activate.c
@@ -3,7 +3,7 @@
 #include "copyright.h"
 
 /*
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 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
diff --git a/oldXMenu/ChangeLog b/oldXMenu/ChangeLog
index cb873f6..52b873a 100644
--- a/oldXMenu/ChangeLog
+++ b/oldXMenu/ChangeLog
@@ -1,3 +1,10 @@
+2015-01-04  Paul Eggert  <address@hidden>
+
+       Less 'make' chatter for oldXMenu
+       * Makefile.in (AM_V_GEN, am__v_GEN_, am__v_GEN_0, am__v_GEN_1)
+       (AM_V_at, am__v_at_, am__v_at_0, am__v_at_1): New macros.
+       (libXMenu11.a): Use them.
+
 2014-10-20  Glenn Morris  <address@hidden>
 
        * Merge in all changes up to 24.4 release.
@@ -705,7 +712,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/oldXMenu/Create.c b/oldXMenu/Create.c
index 049c2c7..32bc6a7 100644
--- a/oldXMenu/Create.c
+++ b/oldXMenu/Create.c
@@ -3,7 +3,7 @@
 #include "copyright.h"
 
 /*
-Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 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
diff --git a/oldXMenu/FindSel.c b/oldXMenu/FindSel.c
index 7dcaf25..8847a42 100644
--- a/oldXMenu/FindSel.c
+++ b/oldXMenu/FindSel.c
@@ -3,7 +3,7 @@
 #include "copyright.h"
 
 /*
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 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
diff --git a/oldXMenu/Internal.c b/oldXMenu/Internal.c
index b8e7d5b..3453c64 100644
--- a/oldXMenu/Internal.c
+++ b/oldXMenu/Internal.c
@@ -3,7 +3,7 @@
 #include "copyright.h"
 
 /*
-Copyright (C) 1993, 1996, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1993, 1996, 2001-2015 Free Software Foundation, Inc.
 
 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
diff --git a/oldXMenu/Makefile.in b/oldXMenu/Makefile.in
index 3e1d49d..ef2a360 100644
--- a/oldXMenu/Makefile.in
+++ b/oldXMenu/Makefile.in
@@ -15,7 +15,7 @@
 ## without express or implied warranty.
 
 
-## Copyright (C) 2001-2014 Free Software Foundation, Inc.
+## Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ## 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
@@ -101,6 +101,16 @@ am__v_CC_ = $(address@hidden@)
 am__v_CC_0 = @echo "  CC      " $@;
 am__v_CC_1 =
 
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 =
+
 DEPDIR = deps
 ## -MMD -MF $(DEPDIR)/$*.d if AUTO_DEPEND; else empty.
 DEPFLAGS = @DEPFLAGS@
@@ -118,9 +128,9 @@ ALL_CFLAGS=$(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \
        $(AM_V_CC)$(CC) -c ${ALL_CFLAGS} $<
 
 libXMenu11.a: $(OBJS) $(EXTRA)
-       $(RM) $@
-       $(AR) $(ARFLAGS) $@ $(OBJS) $(EXTRA)
-       $(RANLIB) $@
+       $(AM_V_GEN)$(RM) $@
+       $(AM_V_at)$(AR) $(ARFLAGS) $@ $(OBJS) $(EXTRA)
+       $(AM_V_at)$(RANLIB) $@
 
 ## Insert either autodeps.mk (if AUTO_DEPEND), else deps.mk.
 @oldxmenu_deps_frag@
diff --git a/oldXMenu/deps.mk b/oldXMenu/deps.mk
index 81088c5..cdb89f9 100644
--- a/oldXMenu/deps.mk
+++ b/oldXMenu/deps.mk
@@ -15,7 +15,7 @@
 ## without express or implied warranty.
 
 
-## Copyright (C) 2001-2014 Free Software Foundation, Inc.
+## Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ## 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
diff --git a/oldXMenu/insque.c b/oldXMenu/insque.c
index dd7226e..a20941e 100644
--- a/oldXMenu/insque.c
+++ b/oldXMenu/insque.c
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 1993-1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1998, 2001-2015 Free Software Foundation, Inc.
 
 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
diff --git a/src/.gdbinit b/src/.gdbinit
index d76c3aa..91beaef 100644
--- a/src/.gdbinit
+++ b/src/.gdbinit
@@ -1,4 +1,4 @@
-# Copyright (C) 1992-1998, 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 1992-1998, 2000-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
@@ -70,6 +70,20 @@ define xgettype
   set $type = (enum Lisp_Type) (USE_LSB_TAG ? $bugfix & (1 << GCTYPEBITS) - 1 
: (EMACS_UINT) $bugfix >> VALBITS)
 end
 
+define xgetsym
+  xgetptr $arg0
+  if (!USE_LSB_TAG)
+    set $ptr = ($ptr << GCTYPEBITS)
+  end
+  set $ptr = ((struct Lisp_Symbol *) ((char *)lispsym + $ptr))
+end
+
+# Access the name of a symbol
+define xsymname
+  xgetsym $arg0
+  set $symname = $ptr->name
+end
+
 # Set up something to print out s-expressions.
 # We save and restore print_output_debug_flag to prevent the w32 port
 # from calling OutputDebugString, which causes GDB to display each
@@ -750,7 +764,7 @@ end
 
 define xsymbol
   set $sym = $
-  xgetptr $sym
+  xgetsym $sym
   print (struct Lisp_Symbol *) $ptr
   xprintsym $sym
   echo \n
@@ -1072,9 +1086,8 @@ define xprintstr
 end
 
 define xprintsym
-  xgetptr $arg0
-  set $sym = (struct Lisp_Symbol *) $ptr
-  xgetptr $sym->name
+  xsymname $arg0
+  xgetptr $symname
   set $sym_name = (struct Lisp_String *) $ptr
   xprintstr $sym_name
 end
@@ -1258,8 +1271,8 @@ tbreak init_sys_modes
 commands
   silent
   xgetptr globals.f_Vinitial_window_system
-  set $tem = (struct Lisp_Symbol *) $ptr
-  xgetptr $tem->name
+  xsymname $ptr
+  xgetptr $symname
   set $tem = (struct Lisp_String *) $ptr
   set $tem = (char *) $tem->data
   # If we are running in synchronous mode, we want a chance to look
diff --git a/src/.gitignore b/src/.gitignore
deleted file mode 100644
index 0942abf..0000000
--- a/src/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-buildobj.h
-config.h
-emacs-[1-9]*
-epaths.h
-stamp_BLD
-stamp-h.in
-
-oo/
-oo-spd/
diff --git a/src/ChangeLog b/src/ChangeLog
index b169479..6208738 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,1692 @@
+2015-01-31  Andreas Schwab  <address@hidden>
+
+       * Makefile.in (gl-stamp): Generate globals.h through the use of
+       move-if-change.
+       (globals.h): Replace with empty command.
+
+2015-01-31  Eli Zaretskii  <address@hidden>
+
+       * keyboard.c (kbd_buffer_store_event_hold): Ignore FOCUS_OUT_EVENT
+       and ICONIFY_EVENT for the purposes of breaking while-no-input
+       loops.  (Bug#19547)
+
+       * dired.c (read_dirent): Correct the "MSDOS hacks" hack: the
+       special code for errno = ENOENT or EACCES is needed for WINDOWSNT,
+       not for MSDOS.
+
+2015-01-31  Paul Eggert  <address@hidden>
+
+       Simplify read_dirent's MSDOS hacks
+       * dired.c (read_dirent): Simplify by removing the need for the
+       DIR_ENTRY argument.  All callers changed.  This separates the
+       MS-DOS idiosyncrasies better from the rest of the code.
+
+2015-01-30  Eli Zaretskii  <address@hidden>
+
+       * dired.c (read_dirent): Accept an additional argument
+       FIRST_ENTRY.  If readdir fails with ENOENT or EACCES the first
+       time it is called, report the error as if it happened in
+       open_directory.
+       (directory_files_internal, file_name_completion): Adjust callers
+       or read_dirent.
+
+2015-01-30  Paul Eggert  <address@hidden>
+
+       Refactor calls to opendir for simplicity
+       * dired.c (open_directory): Accept Lisp_Object, not char *, for
+       dirname.  Signal an error if the open fails.  All callers changed.
+
+2015-01-29  Paul Eggert  <address@hidden>
+
+       Report readdir failures
+       Previously, on non-MS-Windows platforms the code treated most
+       readdir failures as EOF.  This was incorrect, e.g., when readdir
+       fails with errno == EOVERFLOW.  Signal an error instead.
+       * dired.c (read_dirent):
+       New function, which signals an error when readdir fails.
+       (directory_files_internal, file_name_completion): Use it.
+
+2015-01-29  Eli Zaretskii  <address@hidden>
+
+       Use bool for boolean in w32menu.c, w32font.c, w32uniscribe.c.
+       * w32uniscribe.c (uniscribe_list, uniscribe_match): Use bool where
+       appropriate.
+
+       * w32font.c (struct font_callback_data, w32font_list_internal)
+       (w32font_driver, w32font_match_internal): Use bool where appropriate.
+
+       * w32menu.c (x_activate_menubar, set_frame_menubar)
+       (w32_dialog_show, initialize_frame_menubar, w32_menu_show)
+       (is_simple_dialog): Use bool where appropriate.
+
+2015-01-28  Paul Eggert  <address@hidden>
+
+       Use bool, not int, to track face changes
+       * xfaces.c (face_change): Rename from face_change_count, and
+       change from int to bool.  The var is now true (instead of nonzero)
+       if attributes have changed; this is simpler.  All uses changed.
+       (Bug#19698)
+
+2015-01-28  Eli Zaretskii  <address@hidden>
+
+       * dired.c (directory_files_internal, file_name_completion)
+       [WINDOWSNT]: Signal an error when errno is set non-zero by
+       'readdir', regardless of its value.
+
+       * w32.c (sys_readdir): Set errno to ENOENT when the directory
+       doesn't exist and to EACCES when it's not accessible to the
+       current user.  Set errno to zero when FindNextFile exhausts the
+       directory, so that callers don't interpret that as an error and
+       don't signal a file-error.
+       (open_unc_volume): Set errno to ENOENT if WNetOpenEnum fails.
+
+       * dired.c (directory_files_internal) [WINDOWSNT]: If readdir
+       returns NULL and errno is ENOTDIR, behave as if opendir failed to
+       open the directory.  (Bug#19701)
+
+       * w32.c (sys_readdir): If FindFirstFile fails because the
+       directory doesn't exist, set errno to ENOTDIR.
+
+2015-01-28  Jan Djärv  <address@hidden>
+
+       * nsterm.m (drawRect:): Add block/unblock_input (Bug#19660).
+
+2015-01-28  Paul Eggert  <address@hidden>
+
+       Fix coding.c subscript error
+       * coding.c (CODING_ISO_INVOKED_CHARSET):
+       Avoid undefined behavior if CODING_ISO_INVOCATION returns negative.
+
+2015-01-28  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (produce_image_glyph): Fix display of images in R2L
+       screen lines: prepend the new glyph to the ones already there
+       instead of appending it.
+
+       * w32fns.c (w32_set_title_bar_text): New function, including
+       support for titles with non-ASCII characters outside of the
+       current system codepage.
+       (x_set_name, x_set_title): Use it.  (Bug#19590)
+
+       * indent.c (Fvertical_motion): Return zero if we started from ZV
+       and there's an overlay after-string there.  (Bug#19553)
+
+       * emacs.c (usage_message): Fix the description of the -nl switch.
+       (Bug#19542)
+
+       * xdisp.c (move_it_to, try_cursor_movement): Don't use the window
+       end information if the window_end_valid flag is unset.
+       (try_window_id): If the call to display_line invalidated the
+       window end information, give up the try_window_id optimization.
+       (Bug#19511)
+
+       * w32fns.c (Fx_server_version, Fx_server_vendor): Doc fix.
+       * xfns.c (Fx_server_version, Fx_server_vendor): Doc fix.
+
+       * emacs.c (syms_of_emacs) <system-configuration>: Doc fix.  (Bug#19502)
+
+2015-01-28  Stefan Monnier  <address@hidden>
+
+       * lisp.mk (lisp): Add cl-preloaded.
+
+2015-01-27  Paul Eggert  <address@hidden>
+
+       Use bool for boolean in xfaces.c
+       * dispextern.h: Adjust to signature changes.
+       * font.c (font_at, font_range):
+       * fontset.c (Finternal_char_font):
+       * fringe.c (draw_fringe_bitmap_1):
+       * xdisp.c (handle_face_prop, face_before_or_after_it_pos)
+       (get_next_display_element, highlight_trailing_whitespace)
+       (display_string, calc_line_height_property)
+       (note_mode_line_or_margin_highlight, note_mouse_highlight):
+       * xfaces.c (tty_suppress_bold_inverse_default_colors_p)
+       (menu_face_changed_default, recompute_basic_faces)
+       (Fbitmap_spec_p, parse_rgb_list, tty_lookup_color)
+       (tty_defined_color, defined_color, face_color_gray_p)
+       (face_color_supported_p, load_color2, load_face_colors)
+       (Fx_list_fonts, LFACEP, push_named_merge_point)
+       (resolve_face_name, lface_from_face_name_no_resolve)
+       (lface_from_face_name, get_lface_attributes_no_remap)
+       (get_lface_attributes, lface_fully_specified_p)
+       (set_lface_from_font, merge_face_vectors, merge_named_face)
+       (merge_face_ref, Finternal_make_lisp_face)
+       (Finternal_lisp_face_p, Finternal_copy_lisp_face)
+       (Finternal_set_lisp_face_attribute)
+       (update_face_from_frame_parameter, set_font_frame_param)
+       (face_boolean_x_resource_value)
+       (Finternal_set_lisp_face_attribute_from_resource)
+       (x_update_menu_appearance, Finternal_get_lisp_face_attribute)
+       (Finternal_merge_in_global_face, Fface_font, face_attr_equal_p)
+       (lface_equal_p, Finternal_lisp_face_equal_p)
+       (Finternal_lisp_face_empty_p, lface_same_font_attributes_p)
+       (Fcolor_distance, lookup_named_face, lookup_basic_face)
+       (lookup_derived_face, Fface_attributes_as_vector)
+       (x_supports_face_attributes_p, tty_supports_face_attributes_p)
+       (Fdisplay_supports_face_attributes_p, realize_basic_faces)
+       (realize_default_face, realize_named_face)
+       (realize_non_ascii_face, realize_x_face, map_tty_color)
+       (realize_tty_face, compute_char_face, face_at_buffer_position)
+       (face_for_overlay_string, face_at_string_position):
+       Use bool for boolean.
+       * xfaces.c (set_lface_from_font):
+       Return void, since callers never use the result.
+
+2015-01-26  Andreas Schwab  <address@hidden>
+
+       * image.c (lookup_pixel_color): Reorder conditions that are
+       written backwards.
+       (x_to_xcolors): Likewise.
+       (x_detect_edges): Likewise.
+       (png_load_body): Likewise.
+       (gif_close): Likewise.
+       (gif_load): Likewise.
+
+2015-01-25  Eli Zaretskii  <address@hidden>
+
+       Use bool for boolean in w32term.c
+       * w32term.c (x_update_window_begin, x_update_window_end)
+       (x_update_end, x_after_update_window_line)
+       (x_set_glyph_string_gc, x_draw_glyph_string_background)
+       (x_draw_glyph_string_foreground)
+       (x_draw_composite_glyph_string_foreground)
+       (x_draw_glyphless_glyph_string_foreground)
+       (x_draw_image_glyph_string, x_draw_glyph_string)
+       (x_draw_stretch_glyph_string, note_mouse_movement)
+       (w32_mouse_position, x_scroll_bar_report_motion)
+       (x_horizontal_scroll_bar_report_motion, w32_read_socket)
+       (w32_set_vertical_scroll_bar, w32_set_horizontal_scroll_bar)
+       (w32_draw_window_cursor, x_new_font, x_set_offset)
+       (x_set_window_size, x_make_frame_invisible, x_iconify_frame): Use
+       bool where appropriate.
+
+       Use bool for boolean in w32fns.c
+       * w32fns.c (w32_defined_color, x_decode_color)
+       (Fxw_color_defined_p, Fxw_color_values, x_set_icon_type)
+       (x_set_menu_bar_lines, x_change_tool_bar_height)
+       (x_set_internal_border_width, x_explicitly_set_name)
+       (x_implicitly_set_name, Fx_create_frame, w32_window)
+       (x_create_tip_frame, Fx_show_tip): Use bool where appropriate.
+
+2015-01-25  Paul Eggert  <address@hidden>
+
+       Use bool for boolean in xfns.c
+       * xfaces.c (x_update_menu_appearance):
+       * xfns.c (x_real_positions, x_defined_color, x_decode_color)
+       (xg_set_icon, xg_set_icon_from_xpm_data, x_set_cursor_color)
+       (x_set_icon_type, x_set_icon_name, x_set_menu_bar_lines)
+       (x_change_tool_bar_height, x_set_internal_border_width)
+       (x_encode_text, x_set_name_internal, x_explicitly_set_name)
+       (x_implicitly_set_name, x_default_scroll_bar_color_parameter)
+       (hack_wm_protocols, xic_create_fontsetname, xic_free_xfontset)
+       (x_window, x_icon, Fx_wm_set_size_hint, Fx_create_frame)
+       (Fxw_color_defined_p, Fxw_color_values, x_create_tip_frame)
+       (Fx_show_tip, clean_up_file_dialog, Fx_file_dialog)
+       (clean_up_dialog, syms_of_xfns):
+       * xterm.h (xg_set_icon, xg_set_icon_from_xpm_data)
+       (xic_create_fontsetname):
+       Use bool for boolean.
+       * xfns.c: Include bitmaps/gray.xbm unconditionally.
+
+       Count MANY function args more reliably
+       * alloc.c (Fgc_status, purecopy, unbind_to, garbage_collect_1):
+       * buffer.c (Fbuffer_list, Fkill_buffer):
+       * callint.c (read_file_name, Fcall_interactively):
+       * charset.c (Fset_charset_priority, syms_of_charset):
+       * chartab.c (uniprop_encode_value_numeric):
+       * coding.c (syms_of_coding):
+       * composite.c (syms_of_composite):
+       * data.c (wrong_range):
+       * dbusbind.c (syms_of_dbusbind):
+       * dired.c (file_attributes):
+       * editfns.c (Fdecode_time, update_buffer_properties, format2):
+       * eval.c (run_hook_with_args_2, apply1, call1, call2, call3)
+       (call4, call5, call6, call7):
+       * fileio.c (Finsert_file_contents, choose_write_coding_system)
+       (Fcar_less_than_car, build_annotations, auto_save_error):
+       * filelock.c (get_boot_time):
+       * fns.c (internal_equal, nconc2, Fyes_or_no_p, Fwidget_apply):
+       (maybe_resize_hash_table, secure_hash):
+       * font.c (font_style_to_value, font_open_by_name, Flist_fonts):
+       * fontset.c (fontset_add, Fset_fontset_font):
+       * ftfont.c (ftfont_lookup_cache):
+       * gtkutil.c (xg_get_font):
+       * insdel.c (signal_before_change, signal_after_change):
+       * keymap.c (append_key):
+       * lread.c (load_warn_old_style_backquotes, Fload, init_lread):
+       * minibuf.c (Fread_buffer):
+       * print.c (print_preprocess):
+       * process.c (Fformat_network_address, Fmake_network_process)
+       (server_accept_connection):
+       * sound.c (Fplay_sound_internal):
+       * term.c (Fsuspend_tty, Fresume_tty):
+       * window.c (window_list):
+       * xdisp.c (run_redisplay_end_trigger_hook, add_to_log)
+       (message_with_string):
+       * xfaces.c (Fx_list_fonts):
+       * xfont.c (syms_of_xfont):
+       * xselect.c (x_handle_selection_request)
+       (x_handle_selection_clear, x_clear_frame_selections)
+       (x_clipboard_manager_error_1):
+       Prefer CALLMANY and CALLN to counting args by hand.
+       * doc.c (reread_doc_file): Remove unused code.
+       * fns.c (concat2, concat3): Redo to avoid need for local-var vector.
+       (cmpfn_user_defined, hashfn_user_defined, Fmaphash):
+       Prefer call1 and call2 to Ffuncall.
+       * keyboard.c (safe_run_hook_funcall, safe_run_hooks):
+       Use struct literal rather than a local var, for simplicity.
+       * keymap.c (where_is_internal): Use NULL rather than a pointer
+       to unused args.
+       * lisp.h (CALLMANY, CALLN): New macros.
+       * sound.c (Fplay_sound_internal): Coalesce duplicate code.
+       Fixes: bug#19634
+
+       Use gnustep-config if available
+       * emacs.c [NS_IMPL_GNUSTEP]: Don't include <GNUstepBase/GSConfig.h>.
+       It doesn't appear to be needed, and the inclusion breaks on
+       Ubuntu 14.10 when 'configure' uses 'gnustep-config'.
+
+2015-01-22  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (init_iterator): Restore a comment lost in transition.
+
+2015-01-22  Paul Eggert  <address@hidden>
+
+       Use bool for boolean in xfont.c, xftfont.c, xgselect.c
+       * xfont.c (xfont_driver, xfont_chars_supported)
+       (xfont_text_extents):
+       * xftfont.c (xftfont_get_colors, xftfont_open)
+       (xftfont_prepare_face, xftfont_done_face)
+       (xftfont_cached_font_ok):
+       * xgselect.c (xg_select):
+       Use bool for boolean.
+
+       Don't downcase system diagnostics' first letters
+       * fileio.c (report_file_errno): Don't downcase, and simplify.
+       Fixes: bug#19642
+
+       Isolate NIL_IS_ZERO-assuming code better
+       Suggested by Stefan Monnier in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00588.html
+       * alloc.c (allocate_pseudovector):
+       Use memclear, not memsetnil, to remove a 'verify'.
+       * callint.c (Fcall_interactively):
+       * dispnew.c (realloc_glyph_pool):
+       * xdisp.c (init_iterator):
+       Use memclear, not memset, to remove a 'verify'.
+       * lisp.h (memclear): Rename from memsetnil, and take a byte
+       count rather than a word count.  All callers changed.
+
+2015-01-20  Paul Eggert  <address@hidden>
+
+       Undo port to hypothetical nonzero Qnil case
+       This mostly undoes the previous change in this area.  See:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00570.html
+       * alloc.c (allocate_pseudovector):
+       * callint.c (Fcall_interactively):
+       * dispnew.c (realloc_glyph_pool):
+       * fringe.c (init_fringe):
+       * lisp.h (memsetnil):
+       * xdisp.c (init_iterator):
+       Simplify by assuming that Qnil is zero, but verify the assumption.
+       * lisp.h (NIL_IS_ZERO): Revert back to this symbol, removing
+       NIL_IS_NONZERO.  All uses changed.
+
+2015-01-20  Jan Djärv  <address@hidden>
+
+       * nsterm.m (EV_TRAILER2): Set Vinhibit_quit to Qt (Bug#19531).
+
+2015-01-20  Dmitry Antipov  <address@hidden>
+
+       Prefer xlispstrdup to avoid dumb calls to strlen.
+       * nsfont.m (ns_get_family):
+       * nsterm.m (ns_term_init):
+       * w32fns.c (w32_window):
+       * xfns.c (x_window, Fx_select_font): Use xlispstrdup.
+
+2015-01-20  Paul Eggert  <address@hidden>
+
+       Correct an old fix for GTK font selection
+       * gtkutil.c (xg_get_font): Fix off-by-2 typo.
+       Fixes: bug#3228
+
+       Fix minor bugs with printing null bytes
+       * minibuf.c (read_minibuf_noninteractive):
+       * xdisp.c (Ftrace_to_stderr) [GLYPH_DEBUG]:
+       Work even if the Lisp string contains a null byte.
+
+       Port to hypothetical case where Qnil is nonzero
+       * alloc.c (allocate_pseudovector):
+       * callint.c (Fcall_interactively):
+       * coding.c (syms_of_coding):
+       * dispnew.c (realloc_glyph_pool):
+       * fringe.c (init_fringe):
+       * lisp.h (memsetnil):
+       * xdisp.c (init_iterator):
+       Port to the currently-hypothetical case where Qnil is nonzero.
+       * dispnew.c (adjust_glyph_matrix): Remove unnecessary verification,
+       as there are no Lisp_Object values in the data here.
+       * lisp.h (NIL_IS_NONZERO): New symbol, replacing NIL_IS_ZERO.
+       All uses changed.  Define only if not already defined, so that one
+       can debug with -DNIL_IS_NONZERO.
+       * xdisp.c (init_iterator): Remove unnecessary initializations to 0.
+
+2015-01-19  Eli Zaretskii  <address@hidden>
+
+       * dispnew.c (adjust_glyph_matrix, realloc_glyph_pool): Verify that
+       Qnil is represented as zero, before using that to initialize parts
+       of the glyph structure.
+
+       * xdisp.c (init_iterator): Verify that Qnil is represented as
+       zero, before using that to initialize parts of the iterator
+       structure.
+
+2015-01-19  Paul Eggert  <address@hidden>
+
+       Prefer memset to repeatedly assigning Qnil
+       * alloc.c (allocate_pseudovector): Catch more bogus values.
+       * alloc.c (allocate_pseudovector):
+       * callint.c (Fcall_interactively):
+       * coding.c (syms_of_coding):
+       * fringe.c (init_fringe):
+       Verify that Qnil == 0.
+       * callint.c (Fcall_interactively):
+       * eval.c (Fapply, Ffuncall):
+       * fns.c (mapcar1, larger_vector):
+       * font.c (font_expand_wildcards):
+       * fringe.c (init_fringe):
+       Prefer memset to assigning zeros by hand.
+       * callint.c (Fcall_interactively):
+       Remove duplicate assignment of Qnil to args[i].
+       * coding.c (syms_of_coding):
+       Prefer LISP_INITIALLY_ZERO to assigning zeros by hand.
+       * fileio.c (Ffile_selinux_context):
+       Rewrite to avoid need for Lisp_Object array.
+       * lisp.h (XLI_BUILTIN_LISPSYM): New macro.
+       (DEFINE_LISP_SYMBOL_END): Use it.
+       (NIL_IS_ZERO): New constant.
+       (memsetnil): New function.
+
+2015-01-16  Dmitry Antipov  <address@hidden>
+
+       Tune pseudovector allocation assuming Qnil == 0.
+       * alloc.c (allocate_pseudovector): Use memset for both
+       Lisp_Objects and regular slots.  Add zerolen arg.
+       * lisp.h (allocate_pseudovector): Adjust prototype.
+       (ALLOCATE_PSEUDOVECTOR): Adjust user.
+       (ALLOCATE_ZEROED_PSEUDOVECTOR): New macro.
+       (allocate_hash_table, allocate_window, allocate_frame)
+       (allocate_process, allocate_terminal): Remove prototypes.
+       * fns.c (allocate_hash_table): Now static here.
+       * frame.c (allocate_frame):
+       * process.c (allocate_process):
+       * terminal.c (allocate_terminal):
+       * window.c (allocate_window): Now static here.
+       Use ALLOCATE_ZEROED_PSEUDOVECTOR.  Add comment.
+
+       * lisp.h (XTERMINAL): Add eassert.
+       * process.c (make_lisp_proc): Now static here.
+
+       Prefer INLINE functions in font.h to match style used in lisp.h.
+       * font.h (FONTP, FONT_SPEC_P, FONT_ENTITY_P, FONT_OBJECT_P)
+       (CHECK_FONT, CHECK_FONT_SPEC, CHECK_FONT_ENTITY, CHECK_FONT_OBJECT)
+       (XFONT_SPEC, XFONT_ENTITY, XFONT_OBJECT, CHECK_FONT_GET_OBJECT):
+       Now functions.
+       * font.c (Ffont_otf_alternates, Fquery_font, Ffont_get_glyphs):
+       * ftfont.c (ftfont_shape):
+       * macfont.m (macfont_shape):
+       * w32uniscribe.c (uniscribe_shape):
+       * xftfont.c (xftfont_shape): Adjust CHECK_FONT_GET_OBJECT users.
+
+2015-01-16  Paul Eggert  <address@hidden>
+
+       Give up on -Wsuggest-attribute=const
+       * decompress.c (Fzlib_available_p):
+       * gnutls.c (Fgnutls_available_p):
+       * gtkutil.h (xg_uses_old_file_dialog):
+       * xdisp.c (Ftool_bar_height):
+       * xmenu.c (popup_activated):
+       No longer const, since it's not const on at lest some
+       configurations, and we shouldn't lie to the compiler.
+
+2015-01-15  Eli Zaretskii  <address@hidden>
+
+       * fileio.c: Include binary-io.h.
+       (Fset_binary_mode): New function.
+       (syms_of_fileio): Defsubr it.
+       (syms_of_fileio) <Qstdin, Qstdout, Qstderr>: DEFSYM them.
+
+2015-01-15  Teodor Zlatanov  <address@hidden>
+
+       * gnutls.c (init_gnutls_functions): Import gnutls_x509_crt_check_issuer.
+       (Fgnutls_peer_status): Use it to set the :self-signed flag.
+       Rename the previous :self-signed to :unknown-ca. (Bug#19404)
+       (Fgnutls_peer_status_warning_describe): Explain :unknown-ca flag.
+
+2015-01-14  Eli Zaretskii  <address@hidden>
+
+       * w32fns.c (w32_wnd_proc): Ignore MENUITEMINFO's dwItemData data
+       when FLAGS indicate the item is not highlighted.  (Bug#19596)
+
+2015-01-14  Martin Rudalics  <address@hidden>
+
+       * xmenu.c (update_frame_menubar): Remove garbaged code.
+
+2015-01-14  Paul Eggert  <address@hidden>
+
+       remove_slash_colon need not be inline
+       * process.c, process.h (remove_slash_colon): No longer inline.
+       This saves text bytes without hurting runtime performance.
+
+2015-01-14  Dmitry Antipov  <address@hidden>
+
+       Avoid extra multibyteness check in ENCODE_FILE users.
+       * callproc.c (encode_current_directory, Fcall_process, call_process):
+       * dired.c (directory_files_internal, file_name_completion):
+       Do not check for STRING_MULTIBYTE because encode_file_name
+       is a no-op for unibyte strings.
+
+       * process.h (remove_slash_colon): New function.
+       * callproc.c (encode_current_directory, call_process):
+       * process.c (Fstart_process): Use it.
+
+       Consistently handle time zone specification.
+       * editfns.c (decode_time_zone): New function, refactored out from ...
+       (Fencode_time): ... adjusted user.
+       (Fset_time_zone_rule): Use decode_time_zone.
+
+       * editfns.c (make_buffer_string_both): If requested range intersects
+       the gap, don't move the latter but copy in two regions, thus avoiding
+       unnecessary relocation of buffer data.
+
+2015-01-14  Paul Eggert  <address@hidden>
+
+       Use bool for boolean in xmenu.c, xml.c
+       * xmenu.c (x_menu_set_in_use, popup_get_selection)
+       (Fx_menu_bar_open_internal, popup_widget_loop)
+       (x_activate_menubar, xg_crazy_callback_abort)
+       (update_frame_menubar, set_frame_menubar)
+       (initialize_frame_menubar, free_frame_menubar)
+       (create_and_show_popup_menu, x_menu_show)
+       (create_and_show_dialog, x_dialog_show):
+       * xml.c (libxml2_loaded_p, init_libxml2_functions, parse_region)
+       (Flibxml_parse_html_region, Flibxml_parse_xml_region):
+       * xrdb.c (main) [TESTRM]:
+       * xsettings.c (init_gsettings):
+       * xterm.c (XFillRectangle, xg_scroll_callback)
+       (xg_end_scroll_callback):
+       * xterm.h (x_menu_set_in_use) [USE_GTK || USE_MOTIF]:
+       Use bool for boolean.
+       * xmenu.c (TRUE): Remove; no longer used.
+       (show_help_event): Remove long-unused code.
+       (set_frame_menubar): Remove "#if 1" and corresponding "#endif" lines.
+
+2015-01-13  Paul Eggert  <address@hidden>
+
+       Don't say Fnext_read_file_uses_dialog_p is const
+       It's const only if a windowing system is not used; don't say it's
+       const otherwise.  See:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00310.html
+       * fileio.c (next_read_file_uses_dialog_p): Remove.
+       Move guts back to ...
+       (Fnext_read_file_uses_dialog_p): ... here.
+       Don't declare as const, as make-docfile.c now has a special case
+       for this function.  This is an ugly hack, but it's better than
+       lying to the compiler.
+
+       Remove now-unnecessary forward XTYPE decl
+       * lisp.h (XTYPE): Remove forward declaration.  The recent merge
+       from emacs-24 fixed the problem in a better way, by moving XPNTR's
+       definition to after XTYPE's.
+
+2015-01-13  Eli Zaretskii  <address@hidden>
+
+       Fix problems with 32-bit wide-int build exposed by MinGW.
+       * lisp.h (XPNTR): Move definition to after XTYPE, to avoid
+       compilation error in an unoptimized build when !USE_LSB_TAG.
+
+       * w32heap.c (DUMPED_HEAP_SIZE): For 32-bit wide-int build, use the
+       same larger value as for the 64-bit build.
+
+       * w32term.h (SCROLL_BAR_PACK): Cast the result to UINT_PTR to
+       avoid compiler warnings.
+
+       * w32proc.c (Fw32_get_codepage_charset, Fw32_set_keyboard_layout):
+       Avoid compiler warnings about cast from integer to pointer of
+       different size.
+
+       * w32menu.c (menubar_selection_callback, w32_menu_show): Cast to
+       UINT_PTR instead of EMACS_INT, to avoid compiler warnings about
+       casting from integer to pointer of different size.
+       (add_menu_item): Pass the help-echo string as a pointer to
+       Lisp_String, not as a Lisp_Object.
+       (w32_menu_display_help): Use make_lisp_ptr to reconstruct a Lisp
+       string object from its C pointer.
+
+       * w32fns.c (w32_msg_pump) <WM_EMACS_UNREGISTER_HOT_KEY>: Use
+       make_lisp_ptr instead of XIL, to reconstruct a Lisp_Cons from its
+       C pointer.
+       <WM_EMACS_TOGGLE_LOCK_KEY>: msg.lparam is now a C integer.
+       (Fx_create_frame): Type-cast the result of XFASTINT to avoild
+       compiler warnings about size differences.
+       (Fw32_unregister_hot_key): Pass the tail of w32_grabbed_keys as a
+       pointer to a Lisp_Cons struct, not as a disguised EMACS_INT.
+       (Fw32_toggle_lock_key): Pass the new state of the key as a C
+       integer; use -1 for nil.  Doc fix.
+
+       * .gdbinit (xgetsym): New subroutine.
+       (xsymname, xsymbol): Use it.
+       (xprintsym): No need to call xgetptr.
+
+2015-01-13  Martin Rudalics  <address@hidden>
+
+       * frame.c (adjust_frame_size): Make sure new numbers of
+       lines/columns get installed after font size change (Bug#19575).
+
+2015-01-13  Dmitry Antipov  <address@hidden>
+
+       Add DEFUN attributes.
+       * callint.c (Finteractive):
+       * character.c (Fcharacterp, Fmax_char):
+       * data.c (Feq, Fnull, Fconsp, Fatom, Flistp, Fnlistp, Fsymbolp)
+       (Fstringp, Fchar_or_string_p, Fintegerp, Fnatnump, Fnumberp)
+       (Ffloatp, Fbyteorder):
+       * decompress.c (Fzlib_available_p):
+       * fns.c (Fidentity):
+       * frame.c (Fframe_windows_min_size):
+       * gnutls.c (Fgnutls_error_p, Fgnutls_available_p):
+       * window.c (Fwindow__sanitize_window_sizes):
+       * xdisp.c (Ftool_bar_height):
+       * xfaces.c (Fface_attribute_relative_p): Add const attribute.
+       * emacs.c (Fkill_emacs):
+       * eval.c (Fthrow):
+       * keyboard.c (Ftop_level, Fexit_recursive_edit)
+       (Fabor_recursive_edit): Add noreturn attribute.
+
+       * search.c (fast_string_match_internal): New function,
+       consolidated from...
+       (fast_string_match, fast_string_match_ignore_case): ...functions
+       which are...
+       * lisp.h (fast_string_match, fast_string_match_ignore_case):
+       inlined from here now.
+       (fast_string_match_internal): Add prototype.
+       * dired.c (file_name_completion): Use fast_string_match_internal.
+
+       * fileio.c (next_read_file_uses_dialog_p): New workaround ...
+       (Fnext_read_file_uses_dialog_p): ... called from here to avoid
+       ATTRIBUTE_CONST dependency from #ifdefs.  For details, see
+       http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00289.html.
+
+2015-01-12  Paul Eggert  <address@hidden>
+
+       Port to 32-bit MingGW --with-wide-int
+       Problem reported by Eli Zaretskii in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00265.html
+       * lisp.h (struct Lisp_Sub_Char_Table): Check that offset matches
+       what we think it is, rather than checking only its alignment (and
+       doing so incorrectly on MinGW).
+
+2015-01-12  Dmitry Antipov  <address@hidden>
+
+       * fileio.c (Ffile_name_as_directory, Fdirectory_file_name):
+       Remove dead NILP check.
+       * image.c (Flookup_image): Use regular format for docstring.
+       * keyboard.c (apply_modifiers_uncached): Use stpcpy.
+
+2015-01-12  Martin Rudalics  <address@hidden>
+
+       * dispnew.c (change_frame_size_1): Pass Qchange_frame_size to
+       adjust_frame_size.
+       * frame.c (frame_default_tool_bar_height): New variable.
+       (adjust_frame_size): Possibly add requested adjustment to
+       Vframe_adjust_size_history.
+       (make_frame): Initialize tool_bar_redisplayed_once slot.
+       (Fset_frame_height, Fset_frame_width, Fset_frame_size): Clarify
+       doc-string.  Call adjust_frame_size unconditionally (the frame's
+       text size may remain unaltered but the pixel size may change).
+       (x_figure_window_size): If frame_default_tool_bar_height was
+       set, use it instead of calculating the tool bar height from
+       DEFAULT_TOOL_BAR_IMAGE_HEIGHT.  Don't set
+       Vframe_initial_frame_tool_bar_height.
+       (Qchange_frame_size, Qxg_frame_set_char_size)
+       (Qset_window_configuration, Qx_create_frame_1)
+       (Qx_create_frame_2): New symbols.
+       (Vframe_initial_frame_tool_bar_height): Remove.
+       (Vframe_adjust_size_history): New history variable for debugging
+       frame size adjustments.
+       * frame.h (struct frame): New boolean slot
+       tool_bar_redisplayed_once.
+       (frame_default_tool_bar_height): Extern.
+       * gtkutil.c (xg_frame_set_char_size): Pass Qxg_frame_set_char_size
+       to adjust_frame_size.
+       * nsfns.m (Fx_create_frame): Pass Pass Qx_create_frame_1 and
+       Qx_create_frame_2 to adjust_frame_size.
+       * w32fns.c (x_change_tool_bar_height): Call adjust_frame_size with
+       inhibit 1 when we have not redisplayed the tool bar yet.
+       (Fx_create_frame): Pass Pass Qx_create_frame_1 and
+       Qx_create_frame_2 to adjust_frame_size.
+       * w32menu.c (set_frame_menubar): Simplify adjust_frame_size
+       call.
+       * window.c (Fset_window_configuration): Pass
+       Qset_window_configuration to adjust_frame_size.
+       * xdisp.c (redisplay_tool_bar): Assign new height to
+       frame_default_tool_bar_height.
+       (redisplay_internal): If we haven't redisplayed this frame's
+       tool bar, call redisplay_tool_bar early so we can adjust the
+       frame size accordingly.
+       * xfns.c (x_change_tool_bar_height): Call adjust_frame_size with
+       inhibit 1 when we have not redisplayed the tool bar yet.
+       (Fx_create_frame): Pass Pass Qx_create_frame_1 and
+       Qx_create_frame_2 to adjust_frame_size.
+
+2015-01-12  Paul Eggert  <address@hidden>
+
+       Have 'make' output better GEN names
+       * Makefile.in (gl-stamp, globals.h): Simplify by putting the new
+       contents of globals.h into gl-stamp.  This lets us use AM_V_GEN
+       more naturally so that 'make' can output more-accurate names.
+
+2015-01-11  Stefan Monnier  <address@hidden>
+
+       * buffer.c (init_buffer_once): Initialize buffer_local_flags before
+       calling reset_buffer_local_variables, and make sure we initialize
+       it completely.
+
+2015-01-11  Dmitry Antipov  <address@hidden>
+
+       * coding.c (Fcoding_system_plist): Use common style for docstring.
+
+2015-01-11  Paul Eggert  <address@hidden>
+
+       Port to MSB hosts without optimization
+       E.g., when configuring --with-wide-int CFLAGS='-O0' on x86,
+       the inline function XTYPE needs to be declared before being used.
+       * lisp.h (XTYPE): New forward declaration.
+
+2015-01-10  Paul Eggert  <address@hidden>
+
+       Port to 32-bit --with-wide-int
+       Prefer symbol indexes to struct Lisp_Symbol * casted and then
+       widened, as the latter had trouble with GCC on Fedora 21 when
+       configured --with-wide-int and when used in static initializers.
+       * alloc.c (garbage_collect_1, which_symbols):
+       * lread.c (init_obarray):
+       Prefer builtin_lisp_symbol when it can be used.
+       * dispextern.h (struct image_type.type):
+       * font.c (font_property_table.key):
+       * frame.c (struct frame_parm_table.sym):
+       * keyboard.c (scroll_bar_parts, struct event_head):
+       * xdisp.c (struct props.name):
+       Use the index of a builtin symbol rather than its address.
+       All uses changed.
+       * lisp.h (TAG_SYMPTR, XSYMBOL_INIT): Remove, replacing with ...
+       (TAG_SYMOFFSET, SYMBOL_INDEX): ... new macros that deal with
+       symbol indexes rather than pointers, and which work better on MSB
+       hosts because they shift right before tagging.  All uses changed.
+       (DEFINE_LISP_SYMBOL_BEGIN, DEFINE_LISP_SYMBOL_END):
+       No longer noops on wide-int hosts, since they work now.
+       (builtin_lisp_symbol): New function.
+
+       Port to HAVE_FREETYPE && !HAVE_XFT
+       * dispextern.h (struct face.extra) [HAVE_FREETYPE && !HAVE_XFT]:
+       * font.h (syms_of_xftfont) [HAVE_FREETYPE && !HAVE_XFT]:
+       Declare in this case too.
+
+2015-01-10  Eli Zaretskii  <address@hidden>
+
+       * w32fns.c (Fw32_register_hot_key): Use XINT instead of XLI.
+
+       * w32notify.c (Fw32notify_add_watch, w32_get_watch_object): Use
+       make_pointer_integer instead of XIL.
+       (Fw32notify_rm_watch): Use XINTPTR instead of XLI.
+
+       * w32inevt.c (handle_file_notifications): Use make_pointer_integer
+       instead of XIL.  Put a list of the descriptor, action, and file
+       name in event->arg, instead of spreading them between event->code
+       and event->arg.
+
+       * w32term.c (queue_notifications): Use make_pointer_integer
+       instead of XIL.  Put a list of the descriptor, action, and file
+       name in event->arg, instead of spreading them between event->code
+       and event->arg.
+
+       * keyboard.c (kbd_buffer_get_event) [HAVE_W32NOTIFY]: Adjust Lisp
+       event creation to changes in w32term.c and w32inevt.c above.
+
+2015-01-09  Paul Eggert  <address@hidden>
+
+       Port Qnil==0 changes to 32-bit --with-wide-int
+       * lisp.h (lisp_h_XSYMBOL, XSYMBOL): Assume USE_LSB_TAG in the
+       macro-implemented version.  For the non-USE_LSB_TAG case, supply
+       a new inline function that is the inverse of the new TAG_SYMPTR.
+       (lisp_h_XUNTAGBASE, XUNTAGBASE): Remove.  All uses removed.
+       (TAG_SYMPTR) [!USE_LSB_TAG]: If the pointer subtraction yields a
+       negative number, don't allow sign bits to bleed into the encoded
+       value.  Shift in zero bits instead.
+
+       Refactor pointer-to-integer conversion
+       * gfilenotify.c (monitor_to_lisp, lisp_to_monitor):
+       Rename and move to lisp.h.  All uses changed.
+       * lisp.h (XINTPTR, make_pointer_integer): New inline functions,
+       which are renamed from gfilenotify.c's lisp_to_monitor and
+       monitor_to_lisp, and with more-generic void * signatures.
+
+2015-01-08  Eli Zaretskii  <address@hidden>
+
+       * dispnew.c (buffer_posn_from_coords): Fix the value of the column
+       returned for right-to-left screen lines.  (Before the change on
+       2014-12-30, the incorrectly-computed X pixel coordinate concealed
+       this bug.)
+
+       * .gdbinit (xsymname): New subroutine.
+       (xprintsym, initial-tbreak): Use it to access the name of a symbol
+       in a way that doesn't cause GDB to barf when it tries to
+       dereference a NULL pointer.
+
+       * xdisp.c (next_element_from_c_string): Use Lisp integer zero as
+       the object.
+       (set_cursor_from_row, try_cursor_movement, dump_glyph)
+       (insert_left_trunc_glyphs, append_space_for_newline)
+       (extend_face_to_end_of_line, highlight_trailing_whitespace)
+       (find_row_edges, ROW_GLYPH_NEWLINE_P, Fmove_point_visually)
+       (Fbidi_resolved_levels, produce_special_glyphs)
+       (rows_from_pos_range, mouse_face_from_buffer_pos)
+       (note_mouse_highlight): Use nil as the object for glyphs inserted
+       by the display engine, and test with NILP instead of INTEGERP.
+       (Bug#19535)
+
+       * w32fns.c (Fx_show_tip): Use NILP to test for glyphs inserted by
+       the display engine.
+
+       * xfns.c (Fx_show_tip): Use NILP to test for glyphs inserted by
+       the display engine.
+
+       * dispextern.h (struct glyph, struct it): Update comments for the
+       OBJECT members.
+
+2015-01-08  Paul Eggert  <address@hidden>
+
+       Port new Lisp symbol init to x86 --with-wide-int
+       * lisp.h (DEFINE_LISP_SYMBOL_BEGIN, DEFINE_LISP_SYMBOL_END):
+       Define to empty on platforms where EMACS_INT_MAX != INTPTR_MAX, as
+       GCC (at least) does not allow a constant initializer to widen an
+       address constant.
+
+       * lisp.h (TAG_SYMPTR): Don't do arithmetic on NULL.
+       This is a followup to the "Port Qnil==0 XUNTAG to clang" patch.
+       Although clang doesn't need it, some other compiler might, and
+       it's easy enough to be safe.
+
+       * conf_post.h (ATTRIBUTE_ALLOC_SIZE): Port to clang 3.5.0.
+       Apparently clang removed support for the alloc_size attribute.
+
+       Port Qnil==0 XUNTAG to clang
+       clang has undefined behavior if the program subtracts an integer
+       from (char *) 0.  Problem reported by YAMAMOTO Mitsuharu in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00132.html
+       * lisp.h (lisp_h_XUNTAG) [USE_LSB_TAG]:
+       (XUNTAG) [!USE_LSB_TAG]: Port to clang 3.5.0.
+
+       Port GFileMonitor * hack to Qnil==0 platforms
+       Reported by Glenn Morris in: http://bugs.gnu.org/15880#112
+       * gfilenotify.c (monitor_to_lisp, lisp_to_monitor): New functions.
+       (dir_monitor_callback, Fgfile_add_watch, Fgfile_rm_watch): Use them.
+
+2015-01-06  Jan Djärv  <address@hidden>
+
+       * nsterm.m (x_set_window_size): Call updateFrameSize to get real
+       size instead of using widht/height.  The frame may be constrained.
+
+2015-01-05  Paul Eggert  <address@hidden>
+
+       * lisp.h (XSYMBOL): Parenthesize id in forward decl.
+       Needed when neither optimizing nor inlining.
+       Also, sort decls alphabetically.
+
+2015-01-05  Eli Zaretskii  <address@hidden>
+
+       * w32proc.c, w32.h, w32fns.c, w32font.c, w32menu.c, w32notify.c:
+       * w32proc.c, w32select.c, w32term.c, w32uniscribe.c: Remove
+       declarations of Q* variables that represent symbols.
+
+2015-01-05  Paul Eggert  <address@hidden>
+
+       Use 0 for Qnil
+       Fixes Bug#15880.
+       If USE_LSB_TAG, arrange for the representation of Qnil to be zero so
+       that NILP (x) is equivalent to testing whether x is 0 at the
+       machine level.  The overall effects of this and the previous patch
+       shrink the size of the text segment by 2.3% and speeds up
+       compilation of all the .elc files by about 0.5% on my platform,
+       which is Fedora 20 x86-64.
+       * lisp.h (lisp_h_XPNTR, lisp_h_XSYMBOL, lisp_h_XUNTAG)
+       (make_lisp_symbol) [USE_LSB_TAG]:
+       Symbols now tag the difference from lispsym, not the pointer.
+       (lisp_h_XUNTAGBASE, TAG_SYMPTR): New macros.
+       (Lisp_Int0, Lisp_Int1, Lisp_Symbol, Lisp_Misc, Lisp_String, Lisp_Cons):
+       Renumber so that Lisp_Symbol is 0, so that Qnil is zero.
+       (XSYMBOL): New forward decl.
+       (XUNTAGBASE): New function.
+       (XUNTAG): Use it.
+
+       Compute C decls for DEFSYMs automatically
+       Fixes Bug#15880.
+       This patch also makes Q constants (e.g., Qnil) constant addresses
+       from the C point of view.
+       * alloc.c, bidi.c, buffer.c, bytecode.c, callint.c, casefiddle.c:
+       * casetab.c, category.c, ccl.c, charset.c, chartab.c, cmds.c, coding.c:
+       * composite.c, data.c, dbusbind.c, decompress.c, dired.c, dispnew.c:
+       * doc.c, editfns.c, emacs.c, eval.c, fileio.c, fns.c, font.c, fontset.c:
+       * frame.c, fringe.c, ftfont.c, ftxfont.c, gfilenotify.c, gnutls.c:
+       * image.c, inotify.c, insdel.c, keyboard.c, keymap.c, lread.c:
+       * macfont.m, macros.c, minibuf.c, nsfns.m, nsfont.m, nsimage.m:
+       * nsmenu.m, nsselect.m, nsterm.m, print.c, process.c, profiler.c:
+       * search.c, sound.c, syntax.c, term.c, terminal.c, textprop.c, undo.c:
+       * window.c, xdisp.c, xfaces.c, xfns.c, xftfont.c, xmenu.c, xml.c:
+       * xselect.c, xsettings.c, xterm.c:
+       Remove Q vars that represent symbols (e.g., Qnil, Qt, Qemacs).
+       These names are now defined automatically by make-docfile.
+       * alloc.c (init_symbol): New function.
+       (Fmake_symbol): Use it.
+       (c_symbol_p): New function.
+       (valid_lisp_object_p, purecopy): Use it.
+       * alloc.c (marked_pinned_symbols):
+       Use make_lisp_symbol instead of make_lisp_ptr.
+       (garbage_collect_1): Mark lispsym symbols.
+       (CHECK_ALLOCATED_AND_LIVE_SYMBOL): New macro.
+       (mark_object): Use it.
+       (sweep_symbols): Sweep lispsym symbols.
+       (symbol_uses_obj): New function.
+       (which_symbols): Use it.  Work for lispsym symbols, too.
+       (init_alloc_once): Initialize Vpurify_flag here; no need to wait,
+       since Qt's address is already known now.
+       (syms_of_alloc): Add lispsym count to symbols_consed.
+       * buffer.c (init_buffer_once): Compare to Qnil, not to make_number (0),
+       when testing whether storage is all bits zero.
+       * dispextern.h (struct image_type):
+       * font.c (font_property_table):
+       * frame.c (struct frame_parm_table, frame_parms):
+       * keyboard.c (scroll_bar_parts, struct event_head):
+       * xdisp.c (struct props):
+       Use XSYMBOL_INIT (Qfoo) and struct Lisp_Symbol * rather than &Qfoo and
+       Lisp_Object *, since Qfoo is no longer an object whose address can be
+       taken.  All uses changed.
+       * eval.c (run_hook): New function.  Most uses of Frun_hooks changed to
+       use it, so that they no longer need to take the address of a Lisp sym.
+       (syms_of_eval): Don't use DEFSYM on Vrun_hooks, as it's a variable.
+       * frame.c (syms_of_frame): Add defsyms for the frame_parms table.
+       * keyboard.c (syms_of_keyboard): Don't DEFSYM Qmenu_bar here.
+       DEFSYM Qdeactivate_mark before the corresponding var.
+       * keymap.c (syms_of_keymap): Use DEFSYM for Qmenu_bar and Qmode_line
+       instead of interning their symbols; this avoids duplicates.
+       (LISP_INITIALLY, TAG_PTR)
+       (DEFINE_LISP_SYMBOL_BEGIN, DEFINE_LISP_SYMBOL_END, XSYMBOL_INIT):
+       New macros.
+       (LISP_INITIALLY_ZERO): Use it.
+       (enum symbol_interned, enum symbol_redirect, struct Lisp_Symbol)
+       (EXFUN, DEFUN_ARGS_MANY, DEFUN_ARGS_UNEVALLED, DEFUN_ARGS_*):
+       Move decls up, to avoid forward uses.  Include globals.h earlier, too.
+       (make_lisp_symbol): New function.
+       (XSETSYMBOL): Use it.
+       (DEFSYM): Now just a placeholder for make-docfile.
+       * lread.c (DEFINE_SYMBOLS): Define, for globals.h.
+       (intern_sym): New function, with body taken from old intern_driver.
+       (intern_driver): Use it.  Last arg is now Lisp integer, not ptrdiff_t.
+       All uses changed.
+       (define_symbol): New function.
+       (init_obarray): Define the C symbols taken from lispsym.
+       Use plain DEFSYM for Qt and Qnil.
+       * syntax.c (init_syntax_once): No need to worry about
+       Qchar_table_extra_slots.
+
+2015-01-04  Paul Eggert  <address@hidden>
+
+       'temacs -nw' should not call missing functions
+       Without this patch, "temacs -nw" fails with the diagnostic
+       "emacs: Symbol's function definition is void: frame-windows-min-size"
+       and messes up the tty's state.
+       * frame.c (Fframe_windows_min_size): New placeholder function.
+       (syms_of_frame): Define it.
+       * window.c (Fwindow__sanitize_window_sizes): New placeholder.
+       (syms_of_window): Define it.
+
+       Less 'make' chatter for lisp dir
+       * Makefile.in (%.elc): Adjust to compile-onefile change in
+       ../lisp/Makefile.in.
+
+       batch write-region no longer says "Wrote FOO"
+       This cuts down on 'make' chatter a bit.
+       * fileio.c (Fwrite_region):
+       Don't output "Wrote /whatever/foo.elc" if noninteractive.
+
+2015-01-03  Paul Eggert  <address@hidden>
+
+       Revert previous change to produce_composite_glyph
+       * term.c (produce_composite_glyph): Revert previous change (Bug#19496).
+
+       Pacify gcc -Wparentheses
+       * frame.c (x_set_frame_parameters): Add parens (Bug#19428).
+
+2015-01-03  Martin Rudalics  <address@hidden>
+
+       * frame.c (x_set_frame_parameters): Call Fset_frame_size only if
+       f->can_x_set_window_size is true.
+       * xterm.c (x_set_window_size_1): Call change_frame_size with
+       text sizes instead of pixel sizes (Bug#19428).
+
+2015-01-01  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (pos_visible_p): Fix up the X coordinate for
+       right-to-left screen lines.  (Bug#19473)
+
+2015-01-01  Eli Zaretskii  <address@hidden>
+
+       * w32proc.c (Fw32_get_codepage_charset): Doc fix.  (Bug#19458)
+
+2014-12-31  Paul Eggert  <address@hidden>
+
+       Simplify setfattr use by assuming GNU make
+       * Makefile.in (PAXCTL_if_present, SETFATTR_if_present): New macros.
+       (emacs$(EXEEXT), temacs$(EXEEXT), bootstrap-emacs$(EXEEXT)): Use them.
+       Simplify by using GNU make rather than shell conditionals,
+       by using ln -f rather than rm -f followed by ln,
+       and by preferring $@ to spelling out the destination.
+
+2014-12-29  Eli Zaretskii  <address@hidden>
+
+       * sysdep.c [WINDOWSNT]: Include sys/socket.h, without which this
+       file doesn't compile on MS-Windows.
+
+2014-12-29  Paul Eggert  <address@hidden>
+
+       Allow return value of system-name to vary.  (Bug#19438)
+       * filelock.c (current_lock_owner):
+       * xrdb.c (get_environ_db):
+       * xterm.c (same_x_server):
+       * xterm.c (x_term_init):
+       Prefer (system-name) to system-name, and avoid naming
+       locals 'system-name'.
+       * editfns.c (cached_system_name): New static var.
+       (init_and_cache_system_name): New function.
+       (init_editfns, Fsystem_name): Use it.
+       (syms_of_editfns): Initialize it and Vsystem_name to the same value.
+       * sysdep.c [HAVE_SOCKETS]: Don't include <sys/socket.h>, <netdb.h>.
+       (h_errno) [TRY_AGAIN && !HAVE_H_ERRNO]: Remove decl.
+       (init_system_name) [HAVE_SOCKETS]: Don't canonicalize the name.
+       Don't create a new string if the current value is already correct.
+
+2014-12-28  Paul Eggert  <address@hidden>
+
+       Fix produce_composite_width typo
+       * term.c (produce_composite_glyph):
+       Fix typo that confused number of columns for pixel width.
+
+2014-12-28  Paul Eggert  <address@hidden>
+
+       Wrap dll functions more simply
+       * decompress.c, gnutls.c, image.c, xml.c:
+       If WINDOWSNT, use '#define FOO fn_FOO' to wrap dll functions,
+       rather than the inverse when not WINDOWSNT.  This isolates the
+       fn_* business into the WINDOWSNT-specific section of the code,
+       which makes it easier to maintain the generic code.
+       * decompress.c (DEF_ZLIB_FN, LOAD_ZLIB_FN):
+       * gnutls.c (DEF_GNUTLS_FN, LOAD_GNUTLS_FN):
+       * image.c (DEF_IMGLIB_FN, LOAD_IMGLIB_FN):
+       * xml.c (DEF_XML2_FN, LOAD_XML2_FN):
+       Remove.  All uses replaced by DEF_DLL_FN.
+       * decompress.c (inflateInit2): Remove; no longer needed.
+       * w32.h (DEF_DLL_FN, LOAD_DLL_FN): New macros.
+
+       Port memory-full checking to GnuTLS 3.3
+       Instead of using gnutls_global_set_mem_functions, check every call
+       to a GnuTLS function that might return an indication of memory
+       exhaustion.  Suggested by Dmitry Antipov in:
+       http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg02056.html
+       * gnutls.c (gnutls_global_set_mem_functions) [WINDOWSNT]: Remove.
+       (init_gnutls_functions): Do not load gnutls_global_set_mem_functions.
+       (fn_gnutls_global_set_mem_functions) [!WINDOWSNT]: Remove.
+       All uses removed.
+       (check_memory_full): New function.
+       (emacs_gnutls_handshake, emacs_gnutls_handle_error)
+       (gnutls_make_error, gnutls_certificate_details, Fgnutls_peer_status)
+       (Fgnutls_boot): Use it.
+       (emacs_gnutls_global_init): Avoid gnutls_global_set_mem_functions.
+
+2014-12-27  Paul Eggert  <address@hidden>
+
+       Fix parse_settings to match internal documentation
+       * xsettings.c (parse_settings): Return the number of settings seen.
+       Count the settings changes accurately.
+       (read_settings): Don't confuse number of settings changes with
+       the return code from XGetWindowProperty.
+
+2014-12-27  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (set_iterator_to_next) <GET_FROM_STRING>: Limit search in
+       composition_compute_stop_pos to the number of characters in the
+       string.  (Bug#19435)
+       <GET_FROM_BUFFER, GET_FROM_STRING>: Simplify code.
+
+       * composite.c (composition_compute_stop_pos): If no composition
+       was found in a string before ENDPOS, and ENDPOS is the string end,
+       no need to back up to a safe point.
+
+       * dispextern.h (struct it) <end_charpos>: Improve commentary.
+
+2014-12-27  Jan Djärv  <address@hidden>
+
+       * nsimage.m (allocInitFromFile:): Initialize bmRep.
+       (dealloc): Release bmRep.
+        (setPixmapData): Make bmRep local so class member is not
+        set (Bug#19133).
+       (setPixmapData): Rename local variable bmRep to avoid compiler
+       warning.
+
+2014-12-27  Jan Djärv  <address@hidden>
+
+       * xterm.c (do_ewmh_fullscreen): Don't remove maximized_horz/vert
+       when going to fullscreen (Bug#0x180004f).
+
+2014-12-27  Eli Zaretskii  <address@hidden>
+
+       * window.c (Fwindow_body_width): Doc fix.  (Bug#19395)
+
+2014-12-27  Stefan Monnier  <address@hidden>
+
+       * buffer.c (syms_of_buffer) <Vafter_change_functions>: fix docstring.
+
+2014-12-27  Eli Zaretskii  <address@hidden>
+
+       * gnutls.c (gnutls_init): Fix deprecation warning from GCC.
+
+2014-12-26  Paul Eggert  <address@hidden>
+
+       Use bool for boolean in xselect.c, xsettings.c
+       * xselect.c (x_get_local_selection, struct selection_data)
+       (x_selection_request_lisp_error, struct prop_location)
+       (x_handle_selection_request, x_convert_selection)
+       (waiting_for_other_props_on_window, expect_property_change)
+       (wait_for_property_change, x_handle_property_notify)
+       (x_get_foreign_selection, x_get_window_property)
+       (receive_incremental_selection)
+       (x_get_window_property_as_lisp_data)
+       (lisp_data_to_selection_data, Fx_get_selection_internal)
+       (x_send_client_event):
+       * xselect.c, xterm.h (x_handle_dnd_message):
+       * xsettings.c (dpyinfo_valid, parse_settings, read_settings)
+       (apply_xft_settings, read_and_apply_settings)
+       (xft_settings_event, init_gsettings, init_xsettings)
+       (syms_of_xsettings):
+       Use bool for boolean.
+       * xselect.c (x_get_window_property): Omit last arg, which was an
+       unused boolean.
+       * xsettings.c (apply_xft_settings): Remove 2nd arg, which was
+       always true.  All callers changed.
+
+2014-12-26  Eli Zaretskii  <address@hidden>
+
+       * w32proc.c (sys_spawnve, get_lcid_callback): Use strcpy instead
+       of strcat.
+
+       * w32menu.c (add_menu_item): Use stpcpy instead of strcat.
+
+       * w32.c (sys_readdir, stat_worker, symlink): Use strcpy instead of
+       strcat.
+
+2014-12-26  Paul Eggert  <address@hidden>
+
+       Use bool for boolean in xsmfns.c
+       * xsmfns.c, xterm.h (x_session_have_connection):
+       * xsmfns.c (doing_interact, smc_interact_CB, Fhandle_save_session):
+       Use bool for boolean.
+       (x_session_initialize, Fhandle_save_session):
+       Prefer NILP (x) to EQ (x, Qnil).
+
+2014-12-25  Paul Eggert  <address@hidden>
+
+       * callproc.c (child_setup):
+       * dbusbind.c (xd_signature_cat):
+       * doc.c (get_doc_string, Fsnarf_documentation):
+       * editfns.c (Fuser_full_name):
+       * frame.c (xrdb_get_resource):
+       * gtkutil.c (xg_get_file_with_chooser):
+       * tparam.c (tparam1):
+       * xfns.c (xic_create_fontsetname):
+       * xrdb.c (gethomedir, get_user_db, get_environ_db):
+       * xsmfns.c (smc_save_yourself_CB):
+       Rewrite to avoid the need for strcat, typically by using stpcpy
+       and/or lispstpcpy.  strcat tends to be part of O(N**2) algorithms.
+       * doc.c (sibling_etc):
+       * xrdb.c (xdefaults):
+       Now a top-level static constant.
+
+2014-12-23  Didier Verna  <address@hidden> (tiny change).
+
+       * nsselect.m (Fns_selection_owner_p): Return a Lisp boolean, not a
+       C one (Bug#19396).
+
+2014-12-22  Jan Djärv  <address@hidden>
+
+       * xterm.c (x_bitmap_icon): Partly revert change from 2014-03-21 which
+       breaks icon setting for Gtk+ except for initial frame (Bug#19403).
+
+2014-12-22  Paul Eggert  <address@hidden>
+
+       Use bool for boolean in xterm.c
+       * frame.h, nsterm.m, w32term.c, w32term.h, xterm.c:
+       (x_set_window_size, x_bitmap_icon):
+       * nsterm.m (ns_frame_raise_lower, x_new_font):
+       * termhooks.h (struct terminal.toggle_invisible_pointer_hook)
+       (struct terminal.frame_raise_lower_hook):
+       * w32term.c (w32_frame_raise_lower):
+       * xterm.c, xterm.h (x_text_icon):
+       * xterm.c (x_update_window_begin, x_update_window_end)
+       (x_update_end, x_after_update_window_line)
+       (x_set_glyph_string_gc, x_draw_glyph_string_background)
+       (x_draw_glyph_string_foreground)
+       (x_draw_composite_glyph_string_foreground)
+       (x_alloc_lighter_color, x_draw_relief_rect)
+       (x_draw_glyph_string_box, x_draw_image_relief)
+       (x_draw_image_glyph_string, x_draw_stretch_glyph_string)
+       (x_draw_underwave, x_draw_glyph_string, x_show_hourglass)
+       (x_hide_hourglass):
+       (XFillRectangle) [HAVE_GTK3]:
+       (XTtoggle_invisible_pointer, frame_highlight, frame_unhighlight)
+       (x_focus_changed, x_find_modifier_meanings, note_mouse_movement)
+       (XTmouse_position, xt_action_hook, xt_horizontal_action_hook)
+       (x_send_scroll_bar_event, xm_scroll_callback)
+       (xg_scroll_callback, xaw_jump_callback, xaw_scroll_callback)
+       (x_create_toolkit_scroll_bar)
+       (x_create_horizontal_toolkit_scroll_bar)
+       (x_set_toolkit_horizontal_scroll_bar_thumb, x_scroll_bar_create)
+       (x_scroll_bar_set_handle, XTset_vertical_scroll_bar)
+       (XTset_horizontal_scroll_bar, x_scroll_bar_expose)
+       (x_scroll_bar_handle_click, x_scroll_bar_note_movement)
+       (x_scroll_bar_report_motion)
+       (x_horizontal_scroll_bar_report_motion, x_net_wm_state)
+       (handle_one_xevent, XTread_socket, x_draw_bar_cursor)
+       (x_draw_window_cursor, x_clear_errors)
+       (x_trace_wire, x_new_font, x_set_offset, wm_supports)
+       (set_wm_state, x_set_sticky, get_current_wm_state)
+       (do_ewmh_fullscreen, x_handle_net_wm_state)
+       (x_check_expected_move, x_sync_with_move, x_wait_for_event)
+       (x_set_window_size_1, XTframe_raise_lower)
+       (x_make_frame_visible, x_iconify_frame)
+       (x_timeout_atimer_activated_flag, same_x_server, x_display_ok)
+       (x_term_init, x_process_timeouts, x_activate_timeout_atimer)
+       (x_delete_terminal, x_initialize, syms_of_xterm):
+       Use bool for boolean.
+
+2014-12-20  Paul Eggert  <address@hidden>
+
+       * composite.h (struct composition.width): Now int
+       instead of unsigned short, as we prefer signed integers.
+
+       Let charset tick grow past USHRT_MAX
+       * charset.c, charset.h (charset_ordered_list_tick):
+       Now EMACS_UINT, not unsigned short.
+       * fontset.c (reorder_font_vector): Allow the tick to grow to the
+       maximum representable Emacs integer value before wrapping it around.
+
+       Simplify unexec file mode setting
+       * unexaix.c, unexcoff.c, unexelf.c, unexmacosx.c:
+       Don't include <sys/stat.h> when no longer needed.
+       (unexec): Create file with correct mode in the first place,
+       rather than overwriting the mode later and fiddling with the
+       global umask in the mean time.  Avoid bogus usage like
+       'umask (777)', which should have been 'umask (0777)'.
+       (mark_x): Remove. All callers removed.
+
+2014-12-19  Paul Eggert  <address@hidden>
+
+       Minor cleanups for Lisp objects and symbols
+       * alloc.c (next_vector, set_next_vector):
+       * lisp.h (lisp_h_INTEGERP, make_number, XFASTINT, make_natnum):
+       (lisp_h_make_number) [USE_LSB_TAG]:
+       Use Lisp_Int0 instead of the mystery constant 0.
+       * alloc.c (mark_object): Always set and use po; that's simpler.
+       (CHECK_LIVE, CHECK_ALLOCATED_AND_LIVE):
+       Properly parenthesize definientia.
+       * bidi.c (bidi_initialize):
+       * buffer.c (init_buffer_once):
+       * nsfns.m (syms_of_nsfns):
+       * nsmenu.m (syms_of_nsmenu):
+       * nsselect.m (syms_of_nsselect):
+       Prefer DEFSYM to defining by hand.
+       * buffer.c (syms_of_buffer): Omit unneeded staticpros.
+       * data.c: Fix too-long line.
+       * lisp.h (DECLARE_GDB_SYM): New macro.
+       (DEFINE_GDB_SYMBOL_BEGIN): Use it.
+       (DEFINE_GDB_SYMBOL_BEGIN, DEFINE_GDB_SYMBOL_END) [!MAIN_PROGRAM]:
+       Declare the symbol, so it's visible to everywhere lisp.h is included.
+       Move forward decls as far forward as they can go,
+       to allow future changes to use them.
+
+2014-12-18  Paul Eggert  <address@hidden>
+
+       * gnutls.c: Include gnutls.h.
+       This to check syms_of_gnutls's API even when !HAVE_GNUTLS.
+       * image.c (svg_load): Fix pointer signedness.
+
+2014-12-18  Martin Rudalics  <address@hidden>
+
+       * frame.c (frame_windows_min_size): New argument IGNORE.
+       (adjust_frame_size): When called from change_frame_size call
+       frame_windows_min_size with IGNORE Qt so we can ignore size
+       restrictions.
+
+2014-12-18  Eli Zaretskii  <address@hidden>
+
+       * font.c (Ffont_info): Add more font information to the vector
+       returned by the function, inspired by query-font.  Doc fix.
+       (Bug#19395)
+
+2014-12-18  Stefan Monnier  <address@hidden>
+
+       * keyboard.c (input_was_pending): New var.
+       (read_char): Use it to make sure we only skip redisplay when we can't
+       keep up with the repeat rate.
+
+2014-12-17  Stefan Monnier  <address@hidden>
+
+       * keyboard.c (swallow_events): Don't redisplay if there's input pending.
+
+2014-12-17  Ulf Jasper  <address@hidden>
+
+       * image.c (svg_load): Watch out for nil value of current buffer's
+       filename.  Re-enable filename thing for not-a-file case.
+
+2014-12-17  Ulf Jasper  <address@hidden>
+
+       Partially disabled previous change.
+
+       * image.c (svg_load): Temporarily disabled filename thing for
+       not-a-file case as it can cause crashs.
+
+2014-12-17  Ulf Jasper  <address@hidden>
+
+       Fix problem with images referenced within svg files. (bug#19373)
+
+       * image.c: Additional parameter 'filename' for
+       svg_load_image. Include "buffer.h".  Define library function
+       rsvg_handle_set_base_uri for WINDOWSNT.
+       (init_svg_functions): Initialize rsvg_handle_set_base_uri.
+       (fn_rsvg_handle_set_base_uri): Define fn_rsvg_handle_set_base_uri.
+       (svg_load): Pass a filename to svg_load_image: either name of
+       actual file or of current buffer's file.
+       (svg_load_image): New parameter 'filename', used for setting
+       base_uri, necessary for loading referenced images. (bug#19373)
+
+2014-12-16  Paul Eggert  <address@hidden>
+
+       * lread.c (init_obarray): Declare Qt as special.
+       This fixes a typo in the 2012-05-15 patch that
+       tried to declare Qt as special.
+
+2014-12-15  Stefan Monnier  <address@hidden>
+
+       Various fixes to use bool type and constants.
+       * dispnew.c (update_single_window): Remove arg `force_p' since it's
+       always true.
+       * xfaces.c (clear_face_cache): Use bool for the argument type.
+
+2014-12-15  Paul Eggert  <address@hidden>
+
+       Correct same_at_end when restoring window points
+       * fileio.c (Finsert_file_contents): Compute same_at_end character
+       position using the old buffer size, not the new one, since
+       restore_window_points wants the old size.
+       Fixes: debbugs:19161
+
+2014-12-14  Alan Mackenzie  <address@hidden>
+
+       New feature optionally to accelerate auto-repeated scrolling.
+
+       * xdisp.c: Remove "static" from declaration of Qfontification_functions.
+
+       * window.c (window_scroll): Bind fontification-functions to nil
+       when scrolling by whole screens and
+       fast-but-imprecise-scrolling is non-nil.
+       (syms_of_window): New DEFVAR_BOOL fast-but-imprecise-scrolling.
+
+       * lisp.h (bool): Declare Qfontification_functions extern.
+
+2014-12-14  Eli Zaretskii  <address@hidden>
+
+       Load system's default trusted Certificate Authorities if available.
+       * gnutls.c (gnutls_certificate_set_x509_system_trust)
+       [GNUTLS >= 3.0.20]: Declare for WINDOWSNT.
+       (init_gnutls_functions)(gnutls_certificate_set_x509_system_trust)
+       [GNUTLS >= 3.0.20]: Load from shared library for WINDOWSNT.
+       (fn_gnutls_certificate_set_x509_system_trust) [!WINDOWSNT]:
+       Define new macro.
+       (Fgnutls_boot) [GNUTLS >= 3.0.20]:
+       Call gnutls_certificate_set_x509_system_trust.  Log an error message if
+       it fails.
+
+2014-12-14  Paul Eggert  <address@hidden>
+
+       * regex.c (analyze_first): Rename from analyze_first.
+
+2014-12-13  Paul Eggert  <address@hidden>
+
+       * alloc.c (XMALLOC_BASE_ALIGNMENT): Use max_align_t instead of
+       a hack involving a union.
+
+2014-12-13  Eli Zaretskii  <address@hidden>
+
+       * gnutls.c (Fgnutls_available_p, syms_of_gnutls):
+       Move gnutls-available-p out of the HAVE_GNUTLS conditional, and define
+       them only once.
+
+2014-12-13  Teodor Zlatanov  <address@hidden>
+
+       * emacs.c (main): Always include gnutls.h and run syms_of_gnutls.
+
+       * gnutls.h: Always declare syms_of_gnutls.
+
+       * gnutls.c (Fgnutls_available_p syms_of_gnutls): Move later for
+       clarity.  Let the availability check return Qnil when the GnuTLS
+       integration is not available, instead of erroring out.
+       (Bug#19346)
+
+2014-12-13  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (move_it_in_display_line_to, display_line):
+       Don't disallow overflow-newline-into-fringe when word-wrap is in
+       effect.  (Bug#19300)
+
+2014-12-11  Stefan Monnier  <address@hidden>
+
+       * fileio.c: Better preserve window-points during revert (bug#19161).
+       (Qget_buffer_window_list): New var.
+       (get_window_points_and_markers, restore_window_points): New functions.
+       (Finsert_file_contents): Use them to save and restore window-points.
+
+2014-12-11  Dmitry Antipov  <address@hidden>
+
+       * xterm.c (x_delete_terminal): Call emacs_close for X connection
+       descriptor if called from x_connection_closed and always delete
+       this descriptor from keyboard waiting set (Bug#19147).
+
+2014-12-10  Eli Zaretskii  <address@hidden>
+
+       * bidi.c (BIDI_CACHE_MAX_ELTS_PER_SLOT): New macro.
+       (bidi_cache_max_elts): New global variable.
+       (bidi_shelve_header_size): Add the sizeof bidi_cache_max_elts.
+       (bidi_cache_shrink, bidi_initialize): Reset bidi_cache_max_elts to
+       its initial value.
+       (bidi_cache_search): Handle overflown cache.  Improve commentary.
+       (bidi_cache_ensure_space): Limit allocations to the current value
+       of bidi_cache_max_elts.  Force xpalloc not to over-allocate.
+       If less than a full BIDI_CACHE_CHUNK is left to the limit, decrease
+       the increment to not exceed the limit.
+       (bidi_cache_iterator_state): Now returns non-zero if succeeded to
+       cache, zero otherwise (meaning the cache overflowed).  In the
+       latter case, set bidi_cache_last_idx to -1.
+       (bidi_peek_at_next_level): Handle overflown cache.
+       (bidi_push_it): Increase the cache limit for iterating the new object.
+       (bidi_pop_it): Decrease the cache limit back to previous value.
+       (bidi_shelve_cache): Shelve the current value of the cache limit.
+       (bidi_unshelve_cache): Restore the value of cache limit.
+       (bidi_find_bracket_pairs): If the cache overflows while looking
+       for the paired bracket, give up and let bidi_resolve_neutrals
+       process the bracket as a simple neutral.  (Bug#19322)
+       (bidi_find_other_level_edge): If the cache overflows, fall back on
+       Plan B, which effectively stops the reordering and restarts it on
+       the next character (after resetting the cache).
+       (bidi_move_to_visually_next): When the cache overflows, reset it
+       after processing the last cached character.
+
+2014-12-10  Paul Eggert  <address@hidden>
+
+       Fix glitches in gnutls.c, mostly memory-related
+       * gnutls.c: Sort macro definitions by name.
+       (fn_gnutls_transport_set_errno): Omit unreachable definition.
+       (fn_gnutls_x509_crt_get_signature): Omit unused symbol.
+       (gnutls_hex_string): Arg is now unsigned char *, to avoid a cast.
+       Prefer ptrdiff_t for sizes.  Check for arithmetic overflow when
+       calculating string length.  Use make_uninit_string, to avoid
+       copying the string.  Cast the char, not the pointer.
+       (gnutls_certificate_details): Use xmalloc and xfree, not malloc
+       and free.  Work even for dates past the year 9999.  Use void *
+       for buffers, to avoid casts.
+
+2014-12-09  Andy Moreton  <address@hidden>  (tiny change)
+
+       * gnutls.c (gnutls_protocol_get_name): Fix a copy/paste typo.
+
+2014-12-08  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnutls.c (Fgnutls_peer_status): Return the key exchange, cipher
+       and MAC algorithms.
+
+2014-12-08  Stefan Monnier  <address@hidden>
+
+       * process.c: Whitespace and line-break nitpicks.
+
+2014-12-08  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnutls.c (gnutls_certificate_details): The :signature isn't
+       that useful, so remove it.
+       (gnutls_certificate_details): Clean up whitespace slightly.
+       (Fgnutls_peer_status): Return the Diffie-Hellman prime bits for
+       the connection.
+       (gnutls_certificate_details): Put :signature-algorithm back again,
+       which was removed by mistake.
+       (emacs_gnutls_handle_error): Fatal errors should be on level 1, so
+       that they are not messaged by default (bug#16253).
+       (Fgnutls_error_fatalp): Doc fix (bug#18210).
+
+       * gnutls.c: Add Windows specs for gnutls_dh_get_prime_bits.
+
+2014-12-07  Jan Djärv  <address@hidden>
+
+       * nsimage.m (setPixmapData): Make bmRep local so class member is not
+       set (Bug#19133).
+
+2014-12-05  Lee Duhem  <address@hidden>  (tiny change)
+
+       * eval.c (Fsignal): Remove duplicate test.
+       (Fautoload_do_load): Fix up docstring.
+
+2014-12-05  Jan Djärv  <address@hidden>
+
+       * nsterm.m (represented_filename, represented_frame): New variables.
+       (ns_set_represented_filename): New function.
+       (sendEvent:): Set represented filename here to avoid flicker,
+       related to Bug#18757.
+
+       * nsterm.h: Declare ns_set_represented_filename.
+
+       * nsfns.m (ns_set_name_as_filename): Don't set represented filename
+       at once, call ns_set_represented_filename instead.
+
+2014-12-05  Eli Zaretskii  <address@hidden>
+
+       * dispextern.h (enum bidi_dir_t): Force NEUTRAL_DIR to be zero.
+       (struct bidi_stack): Reduce size by using bit fields and by
+       packing sos, override, and isolate_status into a single 8-bit
+       byte called 'flags'.
+
+       * bidi.c (ISOLATE_STATUS, OVERRIDE): New macros.
+       (bidi_push_embedding_level): Construct flags from individual
+       bits.  Adapt to changes in prev_for_neutral and next_for_neutral
+       members.
+       (bidi_pop_embedding_level): Use ISOLATE_STATUS.  Extract 'sos'
+       from flags.  Adapt to changes in prev_for_neutral,
+       next_for_neutral, and last_strong members.
+       (bidi_line_init): Initialize flags to zero.
+       (bidi_resolve_explicit, bidi_resolve_weak, bidi_resolve_brackets)
+       (bidi_resolve_neutral): Use ISOLATE_STATUS and OVERRIDE.
+
+2014-12-04  Stefan Monnier  <address@hidden>
+
+       * eval.c (backtrace_eval_unrewind): Rewind also the excursions.
+       (Fapply): Try and simplify the control flow.
+
+2014-12-03  Chris Zheng  <address@hidden>  (tiny change)
+
+       * gnutls.c (init_gnutls_functions, gnutls_certificate_details):
+       Use gnutls_sign_get_name directly because
+       gnutls_sign_algorithm_get_name is a macro on MinGW (bug#19231).
+       (init_gnutls_functions): Load missing gnutls_server_name_set.
+
+2014-12-02  Eli Zaretskii  <address@hidden>
+
+       * bidi.c (bidi_find_first_overridden): New function.
+
+       * xdisp.c (Fbidi_find_overridden_directionality): New function.
+       (syms_of_xdisp): Defsubr it.
+
+       * dispextern.h (bidi_find_first_overridden): Add prototype.
+
+2014-12-02  Jan Djärv  <address@hidden>
+
+       * nsimage.m (initFromSkipXBM:width:height:flip:length:): Set bmRep
+       to nil after release (Bug#9133).
+
+2014-11-30  Paul Eggert  <address@hidden>
+
+       Port better to AddressSanitizer.
+       These changes suffice for temacs on x86-64 with GCC 4.9.2 and
+       -fsanitize=address.
+       * alloc.c (valid_pointer_p) [ADDRESS_SANITIZER]:
+       Return -1 or 0, as the pipe trick doesn't work.
+       * alloc.c (relocatable_string_data_p, mark_object, sweep_symbols):
+       * data.c (Ffset):
+       * print.c (print_object):
+       When a pointer-check primitive returns -1, do not assume this
+       means the pointer is valid or that the underlying system has failed.
+       It could just be that addresses are being sanitized so Emacs can't
+       test for pointer validity.
+       * lisp.h (defined_GC_CHECK_STRING_BYTES): New constant.
+       (USE_STACK_STRING) [GC_CHECK_STRING_BYTES]: Now false, since the
+       string validity checker doesn't work on stack-based strings.
+
+2014-11-29  Paul Eggert  <address@hidden>
+
+       Improve clarity of USE_LSB_TAG definition.
+       Reported by Lee Duhem.  Suggested by Andreas Schwab in:
+       http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg02222.html
+       * lisp.h (USE_LSB_TAG): Define in terms of the (simpler)
+       VAL_MAX / 2 rather than in terms of the (more complicated)
+       EMACS_INT_MAX >> GCTYPEBITS, and adjust commentary to match.
+
+2014-11-29  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (handle_single_display_spec): When ignoring a fringe
+       bitmap display, reset the ignore_overlay_strings_at_pos_p flag.
+       (next_element_from_buffer): When done with overlays, reset the
+       ignore_overlay_strings_at_pos_p flag.  (Bug#19201)
+
+2014-11-29  Eli Zaretskii  <address@hidden>
+
+       * w32fns.c (Fw32_shell_execute): Convert forward slashes in
+       DOCUMENT to backslashes, if DOCUMENT is a file.  (Bug#19141)
+
+2014-11-29  Ulrich Müller  <address@hidden>
+
+       * Makefile.in (temacs$(EXEEXT)): Use consistent flag settings
+       for paxctl and setfattr. Fixes temacs startup failure with
+       grsecurity/PaX enabled Linux kernel (bug#19067).
+
+2014-11-27  Oscar Fuentes  <address@hidden>
+
+       * w32.c, w32heap.c, w32term.c:
+       Use MINGW_W64 instead of _W64.
+
+2014-11-27  Stefan Monnier  <address@hidden>
+
+       * frame.c (Fhandle_switch_frame): Deactivate shift-region (bug#19003).
+
+2014-11-26  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnutls.c (gnutls_ip_address_p): New function.
+       (Fgnutls_boot): Only send SNI if the host name is not an IP address.
+
+2014-11-26  Toke Høiland-Jørgensen  <address@hidden>  (tiny change)
+
+       * gnutls.c (Fgnutls_boot): Send the server name over (bug#18208).
+
+2014-11-25  Paul Eggert  <address@hidden>
+
+       Fix gnutls problems caught by static checking.
+       * gnutls.c (Fgnutls_boot): Remove unused local.
+       (Fgnutls_boot): Fix pointer signedness.
+
+2014-11-25  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnutls.c (gnutls_certificate_details): Don't include certain
+       certificate details on older gnutls versions (bug#19168).
+       (syms_of_gnutls): Export gnutls_peer_status_warning_describe.
+       (gnutls_certificate_details): Reversed check in last checkin.
+
+2014-11-25  Teodor Zlatanov  <address@hidden>
+
+       * gnutls.c (Fgnutls_peer_status): Check GNUTLS_INITSTAGE, not gnutls_p.
+       (Fgnutls_peer_status_warning_describe): Add function to describe a
+       peer verification warning symbol.
+       (Fgnutls_peer_status): Use it.
+       (Fgnutls_boot): Use it.  Minor logging fixes.
+
+2014-11-24  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnutls.c: Fix compilation warnings given fix --enable-gcc-warnings.
+
+2014-11-24  Glenn Morris  <address@hidden>
+
+       * emacs.c (main) <--version>: Make use of PACKAGE_NAME.
+
+       * Makefile.in (emacs.res): Use ../nt rule, rather than duplicating it.
+       (ntsource, WINDRES, EMACS_MANIFEST): Remove, now unused.
+
+2014-11-23  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnutls.c: Fix Windows function definition of
+       gnutls_x509_crt_get_fingerprint.
+
+       * gnutls.c: Fix Windows return value for gnutls_pk_algorithm_get_name.
+
+       * gnutls.c (Fgnutls_boot): Save certificate for later inspection.
+
+       * process.h: Added more fields to Lisp_Process to track
+       certificate details.
+
+       * gnutls.c (gnutls_hex_string, gnutls_certificate_details)
+       (Fgnutls_peer_status): New functions to export TLS certificate
+       details to Emacs Lisp.
+
+2014-11-23  Jan Djärv  <address@hidden>
+
+       * gtkutil.c (gtk_adjustment_configure): Define for Gtk+ < 2.14.
+       (xg_set_toolkit_horizontal_scroll_bar_thumb): Remove wrong version
+       check for gtk_adjustment_configure (Bug#19149).
+       (gtk_adjustment_configure): Don't use 2.14 functions (Bug#19149).
+
+2014-11-22  Glenn Morris  <address@hidden>
+
+       * Makefile.in (emacs.res): Add dependency on icons/hand.cur.  Use $<.
+
+2014-11-22  Martin Rudalics  <address@hidden>
+
+       Don't shrink frame when using desktop-save-mode (Bug#19048).
+       * w32fns.c (x_set_tool_bar_lines): Always call
+       x_change_tool_bar_height (Bug#19048).
+       (x_change_tool_bar_height): Mark frame as garbaged since
+       adjust_frame_size might not have done that.
+       * xfns.c (x_set_tool_bar_lines): Always call
+       x_change_tool_bar_height (Bug#19048).
+       (x_change_tool_bar_height): Mark frame as garbaged since
+       adjust_frame_size might not have done that.
+
+2014-11-21  Ulf Jasper  <address@hidden>
+
+       * xml.c (parse_region): Take care of new optional parameter
+       'discard-comments' of 'libxml-parse(html|xml)-region'.
+       (Flibxml_parse_html_region, Flibxml_parse_xml_region):
+       New optional parameter 'discard-comments'.
+
 2014-11-17  Paul Eggert  <address@hidden>
 
        Improve time stamp handling, and be more consistent about it.
@@ -48,8 +1737,8 @@
 2014-11-16  Eli Zaretskii  <address@hidden>
 
        * window.c (window_scroll_pixel_based): Avoid truncation/rounding
-       errors in computing the number of pixels to scroll.  Suggested by
-       Kelly Dean <address@hidden>.  (Bug#19060)
+       errors in computing the number of pixels to scroll.
+       Suggested by Kelly Dean <address@hidden>.  (Bug#19060)
 
 2014-11-16  Jan Djärv  <address@hidden>
 
@@ -159,15 +1848,15 @@
        * frame.h (frame): Split `official' into `can_x_set_window_size'
        and `can_run_window_configuration_change_hook'.
        * nsfns.m (Fx_create_frame): Set f->can_x_set_window_size.
-       * w32fns.c (Fx_create_frame, x_create_tip_frame): Set
-       f->can_x_set_window_size.
-       * window.c (run_window_configuration_change_hook): Return
-       immediately if either f->can_x_set_window_size or
+       * w32fns.c (Fx_create_frame, x_create_tip_frame):
+       Set f->can_x_set_window_size.
+       * window.c (run_window_configuration_change_hook):
+       Return immediately if either f->can_x_set_window_size or
        f->can_run_window_configuration_change_hook are false.
        (Fset_window_configuration): Instead of f->official set
        f->can_x_set_window_size.
-       * xfns.c (Fx_create_frame, x_create_tip_frame): Set
-       f->can_x_set_window_size.
+       * xfns.c (Fx_create_frame, x_create_tip_frame):
+       Set f->can_x_set_window_size.
 
 2014-11-08  Jan Djärv  <address@hidden>
 
@@ -348,6 +2037,8 @@
        * fileio.c (Fexpand_file_name): Use make_unibyte_string, not
        build_string, when importing a home directory.  (Bug#18873)
 
+2014-12-27  Eli Zaretskii  <address@hidden>
+
        * dispnew.c (buffer_posn_from_coords):
        Use WINDOW_WANTS_HEADER_LINE_P, not WINDOW_WANTS_MODELINE_P, to
        account for the header-line height.  (Bug#18839)
@@ -372,7 +2063,7 @@
 
 2014-10-25  Noam Postavsky  <address@hidden>
 
-       * src/w32proc.c (create_child): If calling a quoted batch file,
+       * w32proc.c (create_child): If calling a quoted batch file,
        pass NULL for exe.  (Bug#18745)
 
 2014-10-24  Eli Zaretskii  <address@hidden>
@@ -791,7 +2482,7 @@
        On x86 platforms this works around GCC bug 63495
        <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63495>,
        and more generally should fix a portability problem in Emacs.
-       Problem reported by Stefan Monnier in:
+       Reported by Stefan Monnier in:
        http://lists.gnu.org/archive/html/emacs-devel/2014-10/msg00261.html
 
 2014-10-08  Leo Liu  <address@hidden>
@@ -1307,7 +2998,7 @@
 2014-09-23  Paul Eggert  <address@hidden>
 
        Fix SAFE_ALLOCA to not exhaust the stack when in a loop.
-       Problem reported by Dmitry Antipov in thread leading to:
+       Reported by Dmitry Antipov in thread leading to:
        http://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00713.html
        This patch fixes only SAFE_ALLOCA, SAFE_NALLOCA, and SAFE_ALLOCA_LISP;
        the experimental local_* macros enabled by USE_LOCAL_ALLOCATORS
@@ -1640,7 +3331,7 @@
 2014-09-10  Paul Eggert  <address@hidden>
 
        Simplify lisp.h by removing the __COUNTER__ business.
-       Problem reported by Dmitry Antipov in:
+       Reported by Dmitry Antipov in:
        http://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00220.html
        * lisp.h (make_local_vector, make_local_string)
        (build_local_string): Simplify by not bothering with __COUNTER__.
@@ -1671,7 +3362,7 @@
        * lisp.h (DEFINE_GDB_SYMBOL_ENUM): Remove.
        These can generate a constant with the correct value but the wrong
        width, which doesn't work as a printf argument.  All uses removed.
-       Problem reported by Dmitry Antipov in:
+       Reported by Dmitry Antipov in:
        http://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00213.html
        (ENUMABLE): Remove; no longer needed.
        (ARRAY_MARK_FLAG_val, PSEUDOVECTOR_FLAG_val, VALMASK_val):
@@ -4162,7 +5853,7 @@
 2014-06-03  Paul Eggert  <address@hidden>
 
        * emacs.c: Include "sysselect.h", to define its inline functions.
-       Problem reported by Glenn Morris in:
+       Reported by Glenn Morris in:
        http://lists.gnu.org/archive/html/emacs-devel/2014-06/msg00077.html
 
        Do not require libXt-devel when building with gtk.
@@ -5262,7 +6953,7 @@
 2014-03-27  Paul Eggert  <address@hidden>
 
        Port recent signal-related changes to FreeBSD.
-       Problem reported by Herbert J. Skuhra.
+       Reported by Herbert J. Skuhra.
        * lisp.h (block_tty_out_signal, unblock_tty_out_signal):
        Move decls from here ...
        * syssignal.h: ... to here, so that lisp.h doesn't depend on signal.h.
@@ -6240,7 +7931,7 @@
 2014-01-20  Paul Eggert  <address@hidden>
 
        Avoid undefined behavior by initializing buffer redisplay bit.
-       Problem reported by Dmitry Antipov in
+       Reported by Dmitry Antipov in
        <http://lists.gnu.org/archive/html/emacs-devel/2014-01/msg01756.html>.
        * buffer.c (Fget_buffer_create): Initialize redisplay bit.
 
@@ -8081,7 +9772,7 @@
 2013-11-21  Paul Eggert  <address@hidden>
 
        Fix some dependency problems that cause unnecessary recompiles.
-       Problem reported by RMS in
+       Reported by RMS in
        <http://lists.gnu.org/archive/html/emacs-devel/2013-11/msg00421.html>.
        * Makefile.in (OLDXMENU_TARGET, OLDXMENU, OLDXMENU_DEPS)
        (really-lwlib, really-oldXMenu, stamp-oldxmenu)
@@ -8826,8 +10517,7 @@
 
 2013-10-23  Paul Eggert  <address@hidden>
 
-       Port to Solaris 10 and its bundled GCC.
-       Problem reported by Timothy C. Burt.
+       Port to Solaris 10 and its bundled GCC.  Reported by Timothy C. Burt.
        * floatfns.c (isfinite, isnan): Redefine unconditionally.
 
 2013-10-21  Dmitry Antipov  <address@hidden>
@@ -9231,7 +10921,7 @@
        so it shouldn't be used all the time.  Perhaps we need two
        flavors of 'eassert', one for where 'assume' is far more likely
        to help or to hurt; but that can be done later.
-       Problem reported by Dmitry Antipov in
+       Reported by Dmitry Antipov in
        <http://lists.gnu.org/archive/html/emacs-devel/2013-10/msg00276.html>.
        Also, don't include <verify.h>; no longer needed.
 
@@ -12959,8 +14649,7 @@
 
 2013-07-07  Paul Eggert  <address@hidden>
 
-       Port to Ubuntu 10 (Bug#14803).
-       Problem reported by T.V. Raman.
+       Port to Ubuntu 10 (Bug#14803).  Reported by T.V. Raman.
        * process.c (close_on_exec, accept4, process_socket):
        Define these if !HAVE_ACCEPT4, not if !SOCK_CLOEXEC.
 
@@ -13225,7 +14914,7 @@
        * emacs.c (malloc_enable_thread): Hoist extern decl to top level.
        (main) [HAVE_PTHREAD && !SYSTEM_MALLOC && !DOUG_LEA_MALLOC]:
        Invoke malloc_enable_thread even when not interactive.
-       Problem reported by Ken Brown in <http://bugs.gnu.org/14569#275>.
+       Reported by Ken Brown in <http://bugs.gnu.org/14569#275>.
        * process.c (init_process_emacs) [CYGWIN]: Tickle glib even
        in this case, since the underlying bug has now been fixed.
 
@@ -14450,7 +16139,7 @@
        * unexelf.c: Don't assume ElfW (Half) fits in int.
        (entry_address, find_section, unexec): Use ptrdiff_t, not int,
        when dealing with ElfW (Half) values, since they can exceed 2**31
-       on 64-bit OpenBSD hosts.  Problem reported privately by Han Boetes.
+       on 64-bit OpenBSD hosts.  Reported by Han Boetes (privately).
        (entry_address): Omit unused NUM arg.  All uses changed.
 
 2013-05-07  Juri Linkov  <address@hidden>
@@ -15416,7 +17105,7 @@ See ChangeLog.12 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2014 Free Software Foundation, Inc.
+  Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.1 b/src/ChangeLog.1
index 657bedc..4b6ed3a 100644
--- a/src/ChangeLog.1
+++ b/src/ChangeLog.1
@@ -3521,7 +3521,7 @@
        * minibuf.c: Don't allow entry to minibuffer
        while minibuffer is selected.
 
-    Copyright (C) 1985-1986, 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 1985-1986, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.10 b/src/ChangeLog.10
index 1b77eaf..6eba7f0 100644
--- a/src/ChangeLog.10
+++ b/src/ChangeLog.10
@@ -2826,7 +2826,7 @@
 2006-07-21  Eli Zaretskii  <address@hidden>
 
        * w32.c (convert_time): Use explicit long double constants to
-       ensure long double arithmetics is used throughout.
+       ensure long double arithmetic is used throughout.
 
 2006-07-20  YAMAMOTO Mitsuharu  <address@hidden>
 
@@ -20769,7 +20769,7 @@
 
        * fontset.c (syms_of_fontset): Setup Vfont_encoding_alist here.
 
-       * editfns.c (Fformat): Convert an unibyte char argument that is
+       * editfns.c (Fformat): Convert a unibyte char argument that is
        formatted by "%c" to multibyte if the total result must be a
        multibyte string.
 
@@ -27912,7 +27912,7 @@ See ChangeLog.9 for earlier changes.
 ;; add-log-time-zone-rule: t
 ;; End:
 
-    Copyright (C) 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.11 b/src/ChangeLog.11
index fc6ff1f..351f978 100644
--- a/src/ChangeLog.11
+++ b/src/ChangeLog.11
@@ -4200,7 +4200,7 @@
        (record_property_change, Fprimitive_undo): Adjust prototypes.
 
 2010-09-22  Juanma Barranquero  <address@hidden>
-            Eli Zaretskii  <address@hidden>
+           Eli Zaretskii  <address@hidden>
 
        * w32.c (get_emacs_configuration_options): Fix buffer overrun.
 
@@ -6753,7 +6753,7 @@
        to standard C.
 
 2010-07-04  Tetsurou Okazaki  <address@hidden>  (tiny change)
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * lread.c (read1): Fix up last change to not mess up `c'.
 
@@ -8069,7 +8069,7 @@
        can specify the frame to use, when applicable.  Adjust callers.
 
 2010-05-07  Vincent Belaïche  <address@hidden>
-            Stefan Monnier  <address@hidden>
+           Stefan Monnier  <address@hidden>
 
        * floatfns.c (Fisnan, Fcopysign, Ffrexp, Fldexp): New functions.
 
@@ -8697,7 +8697,7 @@
        (Frename_file): Preserve selinux context when renaming by copy-file.
 
 2010-04-21  Juanma Barranquero  <address@hidden>
-            Eli Zaretskii  <address@hidden>
+           Eli Zaretskii  <address@hidden>
 
        Don't depend on cm.c or termcap.c on Windows, use stubs.
        * makefile.w32-in (OBJ1): Remove cm.$(O) and termcap.$(O).
@@ -16878,7 +16878,7 @@
        <after-change-functions>: Reflow docstrings.
 
 2008-08-04  Adrian Robert  <address@hidden>
-            Ken Raeburn  <address@hidden>
+           Ken Raeburn  <address@hidden>
 
        Dock menu customization, based on a patch by Ken Raeburn, plus some
        other fixes.
@@ -17943,7 +17943,7 @@
        batch-compiling for bootstrap).
 
 2008-07-15  Chris Hall  <address@hidden>  (tiny change)
-            YAMAMOTO Mitsuharu  <address@hidden>
+           YAMAMOTO Mitsuharu  <address@hidden>
 
        * frame.c (make_initial_frame): Call init_frame_faces(f) in
        CANNOT_DUMP case -- fix crash due to different init order.
@@ -18561,7 +18561,7 @@
        (USG_SHARED_LIBRARIES): Remove duplicate definition.
 
 2008-06-26  Juanma Barranquero  <address@hidden>
-            Eli Zaretskii  <address@hidden>
+           Eli Zaretskii  <address@hidden>
 
        * makefile.w32-in (LOCAL_FLAGS):
        Don't include WINDOWSNT, DOS_NT and _UCHAR_T.
@@ -18809,7 +18809,7 @@
        the property of LFACE_FONT of LFACE (if any).
 
 2008-06-21  Seiji Zenitani  <address@hidden>
-            Ryo Yoshitake  <address@hidden>
+           Ryo Yoshitake  <address@hidden>
 
        * xterm.c (x_set_frame_alpha): Add x_catch_errors for bug#437.
 
@@ -19905,7 +19905,7 @@
        * xterm.c (x_set_frame_alpha): Move declarations before statements.
 
 2008-05-21  Seiji Zenitani  <address@hidden>
-            Ryo Yoshitake  <address@hidden>
+           Ryo Yoshitake  <address@hidden>
 
        * frame.c (Qalpha): Add a new frame parameter `alpha'.
        (Vframe_alpha_lower_limit): New variable.
@@ -31385,7 +31385,7 @@ See ChangeLog.10 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2007-2014 Free Software Foundation, Inc.
+  Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.12 b/src/ChangeLog.12
index 80d7460..78b903e 100644
--- a/src/ChangeLog.12
+++ b/src/ChangeLog.12
@@ -2327,7 +2327,7 @@
 
 2012-12-08  Fabrice Popineau  <address@hidden>
 
-       * w32fns.c (emacs_abort): Don't do arithmetics on void pointers.
+       * w32fns.c (emacs_abort): Don't do arithmetic on void pointers.
 
 2012-12-08  Eli Zaretskii  <address@hidden>
 
@@ -4716,7 +4716,7 @@
        defining an XRectangle structure.
 
        * w32proc.c (RVA_TO_PTR, w32_executable_type): Fix pointer
-       arithmetics for compatibility with x64.
+       arithmetic for compatibility with x64.
 
        * w32menu.c (add_menu_item): Use UINT_PTR instead of UINT, for
        compatibility with x64.
@@ -22936,7 +22936,7 @@ See ChangeLog.11 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2014 Free Software Foundation, Inc.
+  Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.2 b/src/ChangeLog.2
index c852328..f62f3bb 100644
--- a/src/ChangeLog.2
+++ b/src/ChangeLog.2
@@ -2508,7 +2508,7 @@
        If `suspend-emacs-hook' returns t don't suspend
        -- assume the hook did the equivalent of `suspending' for us
        (including calling suspend-resume-hook if necessary.)
-        Otherwise, call sys_suspend and so forth normally.
+       Otherwise, call sys_suspend and so forth normally.
 
 1986-12-20  Richard M. Stallman  (address@hidden)
 
@@ -4050,7 +4050,7 @@
 
 1986-08-21  Richard Mlynarik  (address@hidden)
 
-        * process.c (handle_process_output):
+       * process.c (handle_process_output):
        do a set-buffer back to original buffer
        after calling a process' filter function so that
        all filter functions needn't save-excursion.
@@ -4221,7 +4221,7 @@
 
        * unexec.c (write_segment):
        Kludgy coercions ("(int)") to get this line to compile:
-         nwrite = (((int) ptr + 128) & ~127) - (int) ptr;
+        nwrite = (((int) ptr + 128) & ~127) - (int) ptr;
        Also changed incorrect ~128 to ~127.
 
        * process.c:
@@ -4771,7 +4771,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-    Copyright (C) 1986-1988, 2001-2014 Free Software Foundation, Inc.
+    Copyright (C) 1986-1988, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.3 b/src/ChangeLog.3
index 0a04a13..d7c0a2f 100644
--- a/src/ChangeLog.3
+++ b/src/ChangeLog.3
@@ -16503,7 +16503,7 @@ See ChangeLog.2 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.4 b/src/ChangeLog.4
index 54b3725..b621d75 100644
--- a/src/ChangeLog.4
+++ b/src/ChangeLog.4
@@ -6906,7 +6906,7 @@ See ChangeLog.3 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.5 b/src/ChangeLog.5
index dcb7f66..0d1797c 100644
--- a/src/ChangeLog.5
+++ b/src/ChangeLog.5
@@ -473,10 +473,10 @@
 
 1995-05-28  Morten Welinder  <address@hidden>
 
-        * s/osf1.h (COFF): Define.
-        * m/alpha.h (LD_SWITCH_MACHINE) [!__GNUC__]: Don't define.
-        (r_alloc, r_re_alloc, r_alloc_free) [REL_ALLOC,
-        !_MALLOC_INTERNAL, !NOT_C_CODE]: Prototype.
+       * s/osf1.h (COFF): Define.
+       * m/alpha.h (LD_SWITCH_MACHINE) [!__GNUC__]: Don't define.
+       (r_alloc, r_re_alloc, r_alloc_free) [REL_ALLOC,
+       !_MALLOC_INTERNAL, !NOT_C_CODE]: Prototype.
 
 1995-05-28  Richard Stallman  <address@hidden>
 
@@ -1281,18 +1281,18 @@
 
        * ntinevt.c (nt_kdb_patch_event): Created.
 
-        * callproc.c (child_setup) [WINDOWSNT]: Removed syntax errors.
+       * callproc.c (child_setup) [WINDOWSNT]: Removed syntax errors.
 
        * dired.c (Ffile_attributes) [WINDOWSNT]: Removed syntax errors.
 
        * fileio.c (Fexpand_file_name) [DOS_NT]: Preserve drive letter case.
        Fix syntax errors.
-        Check drive letter when expanding ~\.
+       Check drive letter when expanding ~\.
 
        * sysdep.c (sys_subshell) [WINDOWSNT]: Don't invoke restore_console.
 
        * ntproc.c (win32_wait): Reap synchronous subprocesses, and place
-        return code in synch_process_retcode.
+       return code in synch_process_retcode.
 
        * s/windowsnt.h (ctime): Defined to be nt_ctime.
        (NULL): Defined when missing from included system files.
@@ -1351,7 +1351,7 @@
        (get_inode_and_device_vals): Handle directories.
 
        * fileio.c (Fexpand_file_name) [DOS_NT]: Don't strip slash from
-        default dirs like "C:\\"
+       default dirs like "C:\\"
 
        * makefile.nt (all): Use COMPAT_LIB in library list.
        Use DEL_TREE instead of delnode.
@@ -1503,9 +1503,9 @@
 
 1995-04-08  Noah Friedman  <address@hidden>
 
-        * window.c (Fnext_window, Fprevious_window): If all_frames is a
-        frame and window is not on that frame, return the first window on
-        that frame.
+       * window.c (Fnext_window, Fprevious_window): If all_frames is a
+       frame and window is not on that frame, return the first window on
+       that frame.
 
 1995-04-07  Richard Stallman  <address@hidden>
 
@@ -2899,7 +2899,7 @@
 1995-01-10  Richard Stallman  <address@hidden>
 
        * emacs.c (main): Handle SIGABRT, SIGHWE, SIGPRE, SIGORE, SIGDLK,
-        SIGCPULIM, if they are defined.
+       SIGCPULIM, if they are defined.
 
        * alloc.c (DONT_COPY_FLAG): New bit flag.
        (mark_object, gc_sweep, compact_strings): Use it.
@@ -3547,7 +3547,7 @@
 1994-11-16  Roland McGrath  <address@hidden>
 
        * xdisp.c (try_window): Don't pass window to Fget_char_property;
-        pass its buffer.
+       pass its buffer.
        (display_text_line): Likewise.
 
 1994-11-16  Francesco Potortì  (address@hidden)
@@ -3770,7 +3770,7 @@
 1994-11-07  Roland McGrath  <address@hidden>
 
        * keyboard.c: Move decl of input_fd outside of #ifdef
-        HAVE_X_WINDOWS.
+       HAVE_X_WINDOWS.
 
 1994-11-03  Karl Heuer  <address@hidden>
 
@@ -3788,7 +3788,7 @@
        (HAVE_MOUSE): Defined.
 
        * ntheap.c (sbrk): Allow request sizes to be different than the
-        page size.
+       page size.
 
        * makefile.nt: Changed references of m\m-windowsnt.h to
        m\intel386.h and of s\s-windowsnt.h to s\windowsnt.h.
@@ -4087,7 +4087,7 @@
 
 1994-10-25  Karl Fogel  (address@hidden)
 
-        * window.c (Vtemp_buffer_show_function): Doc fix.
+       * window.c (Vtemp_buffer_show_function): Doc fix.
 
 1994-10-25  Richard Stallman  <address@hidden>
 
@@ -4780,7 +4780,7 @@
        * xmenu.c: Delete HAVE_X11 conditionals.
 
        * xfaces.c (compute_base_face): Use FRAME_FOREGROUND_PIXEL,
-        FRAME_BACKGROUND_PIXEL, FRAME_FONT.
+       FRAME_BACKGROUND_PIXEL, FRAME_FONT.
 
        * xterm.h (FRAME_FOREGROUND_PIXEL, FRAME_BACKGROUND_PIXEL)
        (FRAME_FONT): New macros.
@@ -4973,59 +4973,59 @@
 
 1994-10-09  Jim Blandy  <address@hidden>
 
-        Cache the results of some scans, to improve performance in buffers
-        containing very long lines.
-        * region-cache.c, region-cache.h: New files.
-        * Makefile.in.in (obj) Add region-cache.o to the list of files.
-        (region-cache.o): New target.
-        (buffer.o, indent.o, search.o): Depend on region-cache.h.
-        * buffer.h (struct buffer): New members: newline_cache,
-        width_run_cache, width_table, and cache_long_line_scans.
-        * buffer.c: #include region-cache.h.
-        (Fget_buffer_create): Initialize new members of struct buffer.
-        (Fkill_buffer): Free memory occupied by caches.
-        (init_buffer_once): Set default value for cache_long_line_scans in
-        buffer_defaults, and give it a bit in buffer_local_flags.
-        (syms_of_buffer): Add DEFVAR_PER_BUFFER for cache_long_line_scans.
-        * insdel.c (prepare_to_modify_buffer): Invalidate width run and
-        newline caches, if they exist.
-        * search.c: #include "region-cache.h".
-        (max, min): Make these functions, not macros; we'd like to pass
-        them arguments that would be bad to evaluate more than once.
-        (newline_cache_on_off): New function.
-        (scan_buffer): New argument END.  Call newline_cache_on_off.  If
-        this buffer's newline cache is enabled, consult it to see if we
-        need to scan a region for newlines, and store information in the
-        cache after doing so.
-        (find_next_newline): Pass new arg to scan_buffer.
-        (find_before_next_newline): New function.
-        * cmds.c (Fforward_line): Call scan_buffer with new args.
-        (Fend_of_line): Replace call to Fforward_line and search loop with
-        call to find_before_next_newline.
-        * syntax.c (find_defun_start): Call scan_buffer with new args.
-        * indent.c: #include "region-cache.h".
-        (character_width, disptab_matches_widthtab, recompute_width_table,
-        width_run_cache_on_off): New functions.
-        (compute_motion): Call width_run_cache_on_off.  If this buffer's
-        width run cache is enabled, consult it to see if we need to
-        traverse a region character-by-character; store information in the
-        cache after doing so.  Call find_before_next_newline instead of
-        writing out an equivalent loop explicitly, to take advantage of
-        the newline cache.
-        Doc fixes.
-        * xdisp.c (redisplay_window): Invalidate width_run_cache, if the
-        buffer's display table doesn't match the width table the cache was
-        built for.
-        (display_text_line): Use compute_motion to skip forward to the
-        left edge of the window when the window is hscrolled; this is
-        faster than rendering all the characters into the bit bucket when
-        the hscroll is large.
-        Doc fixes.
-        (display_count_lines): Call scan_buffer with new args.
-        * disptab.h (window_display_table): Doc fix.
-        (buffer_display_table): New declaration.
-        * indent.h (disptab_matches_widthtab, recompute_width_table): New
-        declarations.
+       Cache the results of some scans, to improve performance in buffers
+       containing very long lines.
+       * region-cache.c, region-cache.h: New files.
+       * Makefile.in.in (obj) Add region-cache.o to the list of files.
+       (region-cache.o): New target.
+       (buffer.o, indent.o, search.o): Depend on region-cache.h.
+       * buffer.h (struct buffer): New members: newline_cache,
+       width_run_cache, width_table, and cache_long_line_scans.
+       * buffer.c: #include region-cache.h.
+       (Fget_buffer_create): Initialize new members of struct buffer.
+       (Fkill_buffer): Free memory occupied by caches.
+       (init_buffer_once): Set default value for cache_long_line_scans in
+       buffer_defaults, and give it a bit in buffer_local_flags.
+       (syms_of_buffer): Add DEFVAR_PER_BUFFER for cache_long_line_scans.
+       * insdel.c (prepare_to_modify_buffer): Invalidate width run and
+       newline caches, if they exist.
+       * search.c: #include "region-cache.h".
+       (max, min): Make these functions, not macros; we'd like to pass
+       them arguments that would be bad to evaluate more than once.
+       (newline_cache_on_off): New function.
+       (scan_buffer): New argument END.  Call newline_cache_on_off.  If
+       this buffer's newline cache is enabled, consult it to see if we
+       need to scan a region for newlines, and store information in the
+       cache after doing so.
+       (find_next_newline): Pass new arg to scan_buffer.
+       (find_before_next_newline): New function.
+       * cmds.c (Fforward_line): Call scan_buffer with new args.
+       (Fend_of_line): Replace call to Fforward_line and search loop with
+       call to find_before_next_newline.
+       * syntax.c (find_defun_start): Call scan_buffer with new args.
+       * indent.c: #include "region-cache.h".
+       (character_width, disptab_matches_widthtab, recompute_width_table,
+       width_run_cache_on_off): New functions.
+       (compute_motion): Call width_run_cache_on_off.  If this buffer's
+       width run cache is enabled, consult it to see if we need to
+       traverse a region character-by-character; store information in the
+       cache after doing so.  Call find_before_next_newline instead of
+       writing out an equivalent loop explicitly, to take advantage of
+       the newline cache.
+       Doc fixes.
+       * xdisp.c (redisplay_window): Invalidate width_run_cache, if the
+       buffer's display table doesn't match the width table the cache was
+       built for.
+       (display_text_line): Use compute_motion to skip forward to the
+       left edge of the window when the window is hscrolled; this is
+       faster than rendering all the characters into the bit bucket when
+       the hscroll is large.
+       Doc fixes.
+       (display_count_lines): Call scan_buffer with new args.
+       * disptab.h (window_display_table): Doc fix.
+       (buffer_display_table): New declaration.
+       * indent.h (disptab_matches_widthtab, recompute_width_table): New
+       declarations.
 
 1994-10-08  Richard Stallman  <address@hidden>
 
@@ -5194,13 +5194,13 @@
        independence.  Enable using editres for X11R5.
 
        * widget.c (EmacsFrameSetCharSize): Use lw_refigure_widget for
-        widget set independence.
+       widget set independence.
 
        * widget.h: Declare resources showGrip, allowResize, and
-        resizeToPreferred.
+       resizeToPreferred.
 
        * keyboard.c (make_lispy_event): Do not set item.  Now handled in
-        xmenu.c by popup_get_selection.
+       xmenu.c by popup_get_selection.
 
 1994-10-01  Richard Stallman  <address@hidden>
 
@@ -5375,7 +5375,7 @@
 
        * process.c (Fprocess_send_eof): Delete DID_REMOTE conditional.
 
-        * buffer.c (get-file-buffer): Doc fix.
+       * buffer.c (get-file-buffer): Doc fix.
 
 1994-09-23  Richard Stallman  <address@hidden>
 
@@ -5580,7 +5580,7 @@
 
 1994-09-19  Jim Blandy  <address@hidden>
 
-        Add a new element to display tables controlling side-by-side
+       Add a new element to display tables controlling side-by-side
        window borders.
        * buffer.c (syms_of_buffer): Update doc string for
        `buffer-display-table'.
@@ -6207,7 +6207,7 @@
        * Makefile.in.in (FRAME_SUPPORT): Add faces.elc.
 
        * search.c (Freplace_match): Treat caseless initial like a
-        lowercase initial.
+       lowercase initial.
 
        * keymap.c (Fdefine_key): Fix error message.
        (Fsingle_key_description): Likewise.
@@ -6418,8 +6418,8 @@
 
 1994-07-23  Jim Blandy  (address@hidden)
 
-        * .gdbinit: Set the breakpoint in x_error_quitter instead of
-        _XPrintDefaultError.
+       * .gdbinit: Set the breakpoint in x_error_quitter instead of
+       _XPrintDefaultError.
 
 1994-07-20  Richard Stallman  (address@hidden)
 
@@ -6910,7 +6910,7 @@
 1994-06-16  Roland McGrath  (address@hidden)
 
        * unexec.c: Include <sys/file.h> and [USG5] <fcntl.h> to define
-        O_* macros.
+       O_* macros.
        (O_RDONLY, O_RDWR): Define if undefined.
        [emacs] (report_error): Use report_file_error so the user can tell
        what the errno code was.
@@ -7148,7 +7148,7 @@ See ChangeLog.4 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1994-1995, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.6 b/src/ChangeLog.6
index 19752ba..5f73781 100644
--- a/src/ChangeLog.6
+++ b/src/ChangeLog.6
@@ -5358,7 +5358,7 @@ See ChangeLog.5 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1995-1996, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1995-1996, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.7 b/src/ChangeLog.7
index c43ab88..f603d53 100644
--- a/src/ChangeLog.7
+++ b/src/ChangeLog.7
@@ -11091,7 +11091,7 @@ See ChangeLog.6 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1997-1998, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.8 b/src/ChangeLog.8
index fd8ae6c..aa331ea 100644
--- a/src/ChangeLog.8
+++ b/src/ChangeLog.8
@@ -13979,7 +13979,7 @@
 
 See ChangeLog.7 for earlier changes.
 
-  Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.9 b/src/ChangeLog.9
index 4b5afae..06ce3c1 100644
--- a/src/ChangeLog.9
+++ b/src/ChangeLog.9
@@ -13294,7 +13294,7 @@ See ChangeLog.8 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/Makefile.in b/src/Makefile.in
index fcda4b6..b2bfbfc 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,7 +1,7 @@
 ### @configure_input@
 
-# Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2014
-#   Free Software Foundation, Inc.
+# Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2015 Free Software
+# Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -31,10 +31,8 @@ srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 # MinGW CPPFLAGS may use this.
 address@hidden@
-ntsource = $(top_srcdir)/nt
 VPATH = $(srcdir)
 CC = @CC@
-WINDRES = @WINDRES@
 CFLAGS = @CFLAGS@
 CPPFLAGS = @CPPFLAGS@
 LDFLAGS = @LDFLAGS@
@@ -116,6 +114,8 @@ TEMACS_LDFLAGS = $(LD_SWITCH_SYSTEM) 
$(LD_SWITCH_SYSTEM_TEMACS)
 ## around this, newer ones setfattr.  See Bug#11398 and Bug#16343.
 PAXCTL = @PAXCTL@
 SETFATTR = @SETFATTR@
+PAXCTL_if_present = $(or $(PAXCTL),: paxctl)
+SETFATTR_if_present = $(or $(SETFATTR),: setfattr)
 
 ## Some systems define this to request special libraries.
 address@hidden@
@@ -266,8 +266,6 @@ address@hidden@
 
 ## emacs.res if HAVE_W32
 EMACSRES = @EMACSRES@
-## emacs-*.manifest if HAVE_W32
-EMACS_MANIFEST = @EMACS_MANIFEST@
 ## If HAVE_W32, compiler arguments for including
 ## the resource file in the binary.
 ## Cygwin: -Wl,emacs.res
@@ -455,17 +453,13 @@ $(srcdir)/macuvs.h 
$(lispsource)/international/charprop.el: \
 emacs$(EXEEXT): temacs$(EXEEXT) \
                 $(etc)/DOC $(lisp) $(leimdir)/leim-list.el \
                 $(lispsource)/international/charprop.el
-       if test "$(CANNOT_DUMP)" = "yes"; then \
-         rm -f emacs$(EXEEXT); \
-         ln temacs$(EXEEXT) emacs$(EXEEXT); \
-       else \
-         LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump || exit 1; \
-         test "X$(PAXCTL)" = X || $(PAXCTL) -zex emacs$(EXEEXT); \
-         while test -f bootstrap-emacs$(EXEEXT); do \
-           rm -f bootstrap-emacs$(EXEEXT); \
-         done; \
-         ln emacs$(EXEEXT) bootstrap-emacs$(EXEEXT); \
-       fi
+ifeq ($(CANNOT_DUMP),yes)
+       ln -f temacs$(EXEEXT) $@
+else
+       LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump
+       $(PAXCTL_if_present) -zex $@
+       ln -f $@ bootstrap-emacs$(EXEEXT)
+endif
 
 ## We run make-docfile twice because the command line may get too long
 ## on some systems.  The sed command operating on lisp.mk also reduces
@@ -500,15 +494,20 @@ buildobj.h: Makefile
        done >address@hidden
        $(AM_V_at)mv address@hidden $@
 
-globals.h: gl-stamp; @true
-
 GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m)
 
+AM_V_GLOBALS = $(address@hidden@)
+am__v_GLOBALS_ = $(address@hidden@)
+am__v_GLOBALS_0 = @echo "  GEN     " globals.h;
+am__v_GLOBALS_1 =
+
 gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES)
-       $(AM_V_GEN)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) > gl.tmp
-       $(AM_V_at)$(top_srcdir)/build-aux/move-if-change gl.tmp globals.h
+       $(AM_V_GLOBALS)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) > 
globals.tmp
+       $(AM_V_at)$(top_srcdir)/build-aux/move-if-change globals.tmp globals.h
        $(AM_V_at)echo timestamp > $@
 
+globals.h: gl-stamp; @true
+
 $(ALLOBJS): globals.h
 
 $(lib)/libgnu.a: $(config_h)
@@ -523,10 +522,10 @@ temacs$(EXEEXT): $(LIBXMENU) $(ALLOBJS) \
        $(AM_V_CCLD)$(CC) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \
          -o temacs $(ALLOBJS) $(lib)/libgnu.a $(W32_RES_LINK) $(LIBES)
        $(MKDIR_P) $(etc)
-       test "$(CANNOT_DUMP)" = "yes" || \
-         test "X$(PAXCTL)" = X || $(PAXCTL) -r temacs$(EXEEXT)
-       test "$(CANNOT_DUMP)" = "yes" || test -z "$(SETFATTR)" || \
-         $(SETFATTR) -n user.pax.flags -v r $@
+ifneq ($(CANNOT_DUMP),yes)
+       $(PAXCTL_if_present) -r $@
+       $(SETFATTR_if_present) -n user.pax.flags -v er $@
+endif
 
 ## The following oldxmenu-related rules are only (possibly) used if
 ## HAVE_X11 && !USE_GTK, but there is no harm in always defining them.
@@ -550,11 +549,8 @@ $(top_srcdir)/aclocal.m4 $(top_srcdir)/configure config.in 
../config.status \
 
 doc.o: buildobj.h
 
-emacs.res: $(ntsource)/emacs.rc \
-          $(ntsource)/icons/emacs.ico \
-          $(ntsource)/$(EMACS_MANIFEST)
-       $(WINDRES) -O COFF --include-dir=$(top_srcdir)/nt \
-         -o $@ $(ntsource)/emacs.rc
+emacs.res: FORCE
+       $(MAKE) -C ../nt ../src/emacs.res
 
 .PHONY: ns-app
 ns-app: emacs$(EXEEXT)
@@ -647,7 +643,7 @@ tags: TAGS ../lisp/TAGS $(lwlibdir)/TAGS
 ## bootstrap-emacs$(EXEEXT) as an order-only prerequisite.
 
 %.elc: %.el | bootstrap-emacs$(EXEEXT)
-       @$(MAKE) -C ../lisp compile-onefile THEFILE=$< EMACS="$(bootstrap_exe)"
+       @$(MAKE) -C ../lisp EMACS="$(bootstrap_exe)" THEFILE=$< $<c
 
 ## VCSWITNESS points to the file that holds info about the current checkout.
 ## We use it as a heuristic to decide when to rebuild loaddefs.el.
@@ -661,14 +657,13 @@ $(lispsource)/loaddefs.el: $(VCSWITNESS) | 
bootstrap-emacs$(EXEEXT)
 ## files from loadup.el in source form.
 bootstrap-emacs$(EXEEXT): temacs$(EXEEXT)
        $(MAKE) -C ../lisp update-subdirs
-       if test "$(CANNOT_DUMP)" = "yes"; then \
-         rm -f bootstrap-emacs$(EXEEXT); \
-         ln temacs$(EXEEXT) bootstrap-emacs$(EXEEXT); \
-       else \
-         $(RUN_TEMACS) --batch --load loadup bootstrap || exit 1; \
-         test "X$(PAXCTL)" = X || $(PAXCTL) -zex emacs$(EXEEXT); \
-         mv -f emacs$(EXEEXT) bootstrap-emacs$(EXEEXT); \
-       fi
+ifeq ($(CANNOT_DUMP),yes)
+       ln -f temacs$(EXEEXT) $@
+else
+       $(RUN_TEMACS) --batch --load loadup bootstrap
+       $(PAXCTL_if_present) -zex emacs$(EXEEXT)
+       mv -f emacs$(EXEEXT) $@
+endif
        @: Compile some files earlier to speed up further compilation.
        $(MAKE) -C ../lisp compile-first EMACS="$(bootstrap_exe)"
 
diff --git a/src/README b/src/README
index 66de620..ef08d14 100644
--- a/src/README
+++ b/src/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/src/alloc.c b/src/alloc.c
index a0b1110..4daa60c 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -1,6 +1,6 @@
 /* Storage allocation and gc for GNU Emacs Lisp interpreter.
 
-Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2014 Free Software
+Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -263,23 +263,6 @@ no_sanitize_memcpy (void *dest, void const *src, size_t 
size)
 
 #endif /* MAX_SAVE_STACK > 0 */
 
-static Lisp_Object Qconses;
-static Lisp_Object Qsymbols;
-static Lisp_Object Qmiscs;
-static Lisp_Object Qstrings;
-static Lisp_Object Qvectors;
-static Lisp_Object Qfloats;
-static Lisp_Object Qintervals;
-static Lisp_Object Qbuffers;
-static Lisp_Object Qstring_bytes, Qvector_slots, Qheap;
-static Lisp_Object Qgc_cons_threshold;
-Lisp_Object Qautomatic_gc;
-Lisp_Object Qchar_table_extra_slots;
-
-/* Hook run after GC has finished.  */
-
-static Lisp_Object Qpost_gc_hook;
-
 static void mark_terminals (void);
 static void gc_sweep (void);
 static Lisp_Object make_pure_vector (ptrdiff_t);
@@ -534,8 +517,7 @@ buffer_memory_full (ptrdiff_t nbytes)
 /* Define XMALLOC_OVERRUN_SIZE_SIZE so that (1) it's large enough to
    hold a size_t value and (2) the header size is a multiple of the
    alignment that Emacs needs for C types and for USE_LSB_TAG.  */
-#define XMALLOC_BASE_ALIGNMENT                         \
-  alignof (union { long double d; intmax_t i; void *p; })
+#define XMALLOC_BASE_ALIGNMENT alignof (max_align_t)
 
 #if USE_LSB_TAG
 # define XMALLOC_HEADER_ALIGNMENT \
@@ -2226,7 +2208,7 @@ make_string (const char *contents, ptrdiff_t nbytes)
   return val;
 }
 
-/* Make an unibyte string from LENGTH bytes at CONTENTS.  */
+/* Make a unibyte string from LENGTH bytes at CONTENTS.  */
 
 Lisp_Object
 make_unibyte_string (const char *contents, ptrdiff_t length)
@@ -2295,7 +2277,7 @@ make_specified_string (const char *contents,
 }
 
 
-/* Return an unibyte Lisp_String set up to hold LENGTH characters
+/* Return a unibyte Lisp_String set up to hold LENGTH characters
    occupying LENGTH bytes.  */
 
 Lisp_Object
@@ -2720,13 +2702,13 @@ DEFUN ("make-list", Fmake_list, Smake_list, 2, 2, 0,
 static struct Lisp_Vector *
 next_vector (struct Lisp_Vector *v)
 {
-  return XUNTAG (v->contents[0], 0);
+  return XUNTAG (v->contents[0], Lisp_Int0);
 }
 
 static void
 set_next_vector (struct Lisp_Vector *v, struct Lisp_Vector *p)
 {
-  v->contents[0] = make_lisp_ptr (p, 0);
+  v->contents[0] = make_lisp_ptr (p, Lisp_Int0);
 }
 
 /* This value is balanced well enough to avoid too much internal overhead
@@ -3181,20 +3163,19 @@ allocate_vector (EMACS_INT len)
 /* Allocate other vector-like structures.  */
 
 struct Lisp_Vector *
-allocate_pseudovector (int memlen, int lisplen, enum pvec_type tag)
+allocate_pseudovector (int memlen, int lisplen,
+                      int zerolen, enum pvec_type tag)
 {
   struct Lisp_Vector *v = allocate_vectorlike (memlen);
-  int i;
 
   /* Catch bogus values.  */
-  eassert (tag <= PVEC_FONT);
+  eassert (0 <= tag && tag <= PVEC_FONT);
+  eassert (0 <= lisplen && lisplen <= zerolen && zerolen <= memlen);
   eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1);
   eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1);
 
-  /* Only the first lisplen slots will be traced normally by the GC.  */
-  for (i = 0; i < lisplen; ++i)
-    v->contents[i] = Qnil;
-
+  /* Only the first LISPLEN slots will be traced normally by the GC.  */
+  memclear (v->contents, zerolen * word_size);
   XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
   return v;
 }
@@ -3212,60 +3193,6 @@ allocate_buffer (void)
   return b;
 }
 
-struct Lisp_Hash_Table *
-allocate_hash_table (void)
-{
-  return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table, count, 
PVEC_HASH_TABLE);
-}
-
-struct window *
-allocate_window (void)
-{
-  struct window *w;
-
-  w = ALLOCATE_PSEUDOVECTOR (struct window, current_matrix, PVEC_WINDOW);
-  /* Users assumes that non-Lisp data is zeroed.  */
-  memset (&w->current_matrix, 0,
-         sizeof (*w) - offsetof (struct window, current_matrix));
-  return w;
-}
-
-struct terminal *
-allocate_terminal (void)
-{
-  struct terminal *t;
-
-  t = ALLOCATE_PSEUDOVECTOR (struct terminal, next_terminal, PVEC_TERMINAL);
-  /* Users assumes that non-Lisp data is zeroed.  */
-  memset (&t->next_terminal, 0,
-         sizeof (*t) - offsetof (struct terminal, next_terminal));
-  return t;
-}
-
-struct frame *
-allocate_frame (void)
-{
-  struct frame *f;
-
-  f = ALLOCATE_PSEUDOVECTOR (struct frame, face_cache, PVEC_FRAME);
-  /* Users assumes that non-Lisp data is zeroed.  */
-  memset (&f->face_cache, 0,
-         sizeof (*f) - offsetof (struct frame, face_cache));
-  return f;
-}
-
-struct Lisp_Process *
-allocate_process (void)
-{
-  struct Lisp_Process *p;
-
-  p = ALLOCATE_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
-  /* Users assumes that non-Lisp data is zeroed.  */
-  memset (&p->pid, 0,
-         sizeof (*p) - offsetof (struct Lisp_Process, pid));
-  return p;
-}
-
 DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
        doc: /* Return a newly created vector of length LENGTH, with each 
element being INIT.
 See also the function `vector'.  */)
@@ -3411,13 +3338,29 @@ set_symbol_name (Lisp_Object sym, Lisp_Object name)
   XSYMBOL (sym)->name = name;
 }
 
+void
+init_symbol (Lisp_Object val, Lisp_Object name)
+{
+  struct Lisp_Symbol *p = XSYMBOL (val);
+  set_symbol_name (val, name);
+  set_symbol_plist (val, Qnil);
+  p->redirect = SYMBOL_PLAINVAL;
+  SET_SYMBOL_VAL (p, Qunbound);
+  set_symbol_function (val, Qnil);
+  set_symbol_next (val, NULL);
+  p->gcmarkbit = false;
+  p->interned = SYMBOL_UNINTERNED;
+  p->constant = 0;
+  p->declared_special = false;
+  p->pinned = false;
+}
+
 DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0,
        doc: /* Return a newly allocated uninterned symbol whose name is NAME.
 Its value is void, and its function definition and property list are nil.  */)
   (Lisp_Object name)
 {
-  register Lisp_Object val;
-  register struct Lisp_Symbol *p;
+  Lisp_Object val;
 
   CHECK_STRING (name);
 
@@ -3445,18 +3388,7 @@ Its value is void, and its function definition and 
property list are nil.  */)
 
   MALLOC_UNBLOCK_INPUT;
 
-  p = XSYMBOL (val);
-  set_symbol_name (val, name);
-  set_symbol_plist (val, Qnil);
-  p->redirect = SYMBOL_PLAINVAL;
-  SET_SYMBOL_VAL (p, Qunbound);
-  set_symbol_function (val, Qnil);
-  set_symbol_next (val, NULL);
-  p->gcmarkbit = false;
-  p->interned = SYMBOL_UNINTERNED;
-  p->constant = 0;
-  p->declared_special = false;
-  p->pinned = false;
+  init_symbol (val, name);
   consing_since_gc += sizeof (struct Lisp_Symbol);
   symbols_consed++;
   total_free_symbols--;
@@ -4476,19 +4408,17 @@ DEFUN ("gc-status", Fgc_status, Sgc_status, 0, 0, "",
        doc: /* Show information about live and zombie objects.  */)
   (void)
 {
-  Lisp_Object args[8], zombie_list = Qnil;
-  EMACS_INT i;
-  for (i = 0; i < min (MAX_ZOMBIES, nzombies); i++)
+  Lisp_Object zombie_list = Qnil;
+  for (int i = 0; i < min (MAX_ZOMBIES, nzombies); i++)
     zombie_list = Fcons (zombies[i], zombie_list);
-  args[0] = build_string ("%d GCs, avg live/zombies = %.2f/%.2f (%f%%), max 
%d/%d\nzombies: %S");
-  args[1] = make_number (ngcs);
-  args[2] = make_float (avg_live);
-  args[3] = make_float (avg_zombies);
-  args[4] = make_float (avg_zombies / avg_live / 100);
-  args[5] = make_number (max_live);
-  args[6] = make_number (max_zombies);
-  args[7] = zombie_list;
-  return Fmessage (8, args);
+  return CALLN (Fmessage,
+               build_string ("%d GCs, avg live/zombies = %.2f/%.2f"
+                             " (%f%%), max %d/%d\nzombies: %S"),
+               make_number (ngcs), make_float (avg_live),
+               make_float (avg_zombies),
+               make_float (avg_zombies / avg_live / 100),
+               make_number (max_live), make_number (max_zombies),
+               zombie_list);
 }
 
 #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */
@@ -4926,6 +4856,14 @@ mark_stack (void *end)
 
 #endif /* GC_MARK_STACK != 0 */
 
+static bool
+c_symbol_p (struct Lisp_Symbol *sym)
+{
+  char *lispsym_ptr = (char *) lispsym;
+  char *sym_ptr = (char *) sym;
+  ptrdiff_t lispsym_offset = sym_ptr - lispsym_ptr;
+  return 0 <= lispsym_offset && lispsym_offset < sizeof lispsym;
+}
 
 /* Determine whether it is safe to access memory at address P.  */
 static int
@@ -4934,6 +4872,10 @@ valid_pointer_p (void *p)
 #ifdef WINDOWSNT
   return w32_valid_pointer_p (p, 16);
 #else
+
+  if (ADDRESS_SANITIZER)
+    return p ? -1 : 0;
+
   int fd[2];
 
   /* Obviously, we cannot just access it (we would SEGV trying), so we
@@ -4949,7 +4891,7 @@ valid_pointer_p (void *p)
       return valid;
     }
 
-    return -1;
+  return -1;
 #endif
 }
 
@@ -4975,6 +4917,9 @@ valid_lisp_object_p (Lisp_Object obj)
   if (PURE_POINTER_P (p))
     return 1;
 
+  if (SYMBOLP (obj) && c_symbol_p (p))
+    return ((char *) p - (char *) lispsym) % sizeof lispsym[0] == 0;
+
   if (p == &buffer_defaults || p == &buffer_local_symbols)
     return 2;
 
@@ -5048,8 +4993,8 @@ relocatable_string_data_p (const char *str)
       struct sdata *sdata
        = (struct sdata *) (str - offsetof (struct sdata, data));
 
-      if (valid_pointer_p (sdata)
-         && valid_pointer_p (sdata->string)
+      if (0 < valid_pointer_p (sdata)
+         && 0 < valid_pointer_p (sdata->string)
          && maybe_lisp_pointer (sdata->string))
        return (valid_lisp_object_p
                (make_lisp_ptr (sdata->string, Lisp_String))
@@ -5340,7 +5285,7 @@ purecopy (Lisp_Object obj)
     }
   else if (SYMBOLP (obj))
     {
-      if (!XSYMBOL (obj)->pinned)
+      if (!XSYMBOL (obj)->pinned && !c_symbol_p (XSYMBOL (obj)))
        { /* We can't purify them, but they appear in many pure objects.
             Mark them as `pinned' so we know to mark them at every GC cycle.  
*/
          XSYMBOL (obj)->pinned = true;
@@ -5350,10 +5295,8 @@ purecopy (Lisp_Object obj)
     }
   else
     {
-      Lisp_Object args[2];
-      args[0] = build_pure_c_string ("Don't know how to purify: %S");
-      args[1] = obj;
-      Fsignal (Qerror, (Fcons (Fformat (2, args), Qnil)));
+      Lisp_Object fmt = build_pure_c_string ("Don't know how to purify: %S");
+      Fsignal (Qerror, list1 (CALLN (Fformat, fmt, obj)));
     }
 
   if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing.  */
@@ -5529,7 +5472,7 @@ mark_pinned_symbols (void)
       union aligned_Lisp_Symbol *sym = sblk->symbols, *end = sym + lim;
       for (; sym < end; ++sym)
        if (sym->s.pinned)
-         mark_object (make_lisp_ptr (&sym->s, Lisp_Symbol));
+         mark_object (make_lisp_symbol (&sym->s));
 
       lim = SYMBOL_BLOCK_SIZE;
     }
@@ -5563,7 +5506,7 @@ garbage_collect_1 (void *end)
     return Qnil;
 
   /* Record this function, so it appears on the profiler's backtraces.  */
-  record_in_backtrace (Qautomatic_gc, &Qnil, 0);
+  record_in_backtrace (Qautomatic_gc, 0, 0);
 
   check_cons_list ();
 
@@ -5627,6 +5570,9 @@ garbage_collect_1 (void *end)
   mark_buffer (&buffer_defaults);
   mark_buffer (&buffer_local_symbols);
 
+  for (i = 0; i < ARRAYELTS (lispsym); i++)
+    mark_object (builtin_lisp_symbol (i));
+
   for (i = 0; i < staticidx; i++)
     mark_object (*staticvec[i]);
 
@@ -5728,56 +5674,44 @@ garbage_collect_1 (void *end)
     }
 
   unbind_to (count, Qnil);
-  {
-    Lisp_Object total[11];
-    int total_size = 10;
-
-    total[0] = list4 (Qconses, make_number (sizeof (struct Lisp_Cons)),
-                     bounded_number (total_conses),
-                     bounded_number (total_free_conses));
-
-    total[1] = list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)),
-                     bounded_number (total_symbols),
-                     bounded_number (total_free_symbols));
-
-    total[2] = list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)),
-                     bounded_number (total_markers),
-                     bounded_number (total_free_markers));
-
-    total[3] = list4 (Qstrings, make_number (sizeof (struct Lisp_String)),
-                     bounded_number (total_strings),
-                     bounded_number (total_free_strings));
-
-    total[4] = list3 (Qstring_bytes, make_number (1),
-                     bounded_number (total_string_bytes));
-
-    total[5] = list3 (Qvectors,
-                     make_number (header_size + sizeof (Lisp_Object)),
-                     bounded_number (total_vectors));
-
-    total[6] = list4 (Qvector_slots, make_number (word_size),
-                     bounded_number (total_vector_slots),
-                     bounded_number (total_free_vector_slots));
-
-    total[7] = list4 (Qfloats, make_number (sizeof (struct Lisp_Float)),
-                     bounded_number (total_floats),
-                     bounded_number (total_free_floats));
-
-    total[8] = list4 (Qintervals, make_number (sizeof (struct interval)),
-                     bounded_number (total_intervals),
-                     bounded_number (total_free_intervals));
 
-    total[9] = list3 (Qbuffers, make_number (sizeof (struct buffer)),
-                     bounded_number (total_buffers));
+  Lisp_Object total[] = {
+    list4 (Qconses, make_number (sizeof (struct Lisp_Cons)),
+          bounded_number (total_conses),
+          bounded_number (total_free_conses)),
+    list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)),
+          bounded_number (total_symbols),
+          bounded_number (total_free_symbols)),
+    list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)),
+          bounded_number (total_markers),
+          bounded_number (total_free_markers)),
+    list4 (Qstrings, make_number (sizeof (struct Lisp_String)),
+          bounded_number (total_strings),
+          bounded_number (total_free_strings)),
+    list3 (Qstring_bytes, make_number (1),
+          bounded_number (total_string_bytes)),
+    list3 (Qvectors,
+          make_number (header_size + sizeof (Lisp_Object)),
+          bounded_number (total_vectors)),
+    list4 (Qvector_slots, make_number (word_size),
+          bounded_number (total_vector_slots),
+          bounded_number (total_free_vector_slots)),
+    list4 (Qfloats, make_number (sizeof (struct Lisp_Float)),
+          bounded_number (total_floats),
+          bounded_number (total_free_floats)),
+    list4 (Qintervals, make_number (sizeof (struct interval)),
+          bounded_number (total_intervals),
+          bounded_number (total_free_intervals)),
+    list3 (Qbuffers, make_number (sizeof (struct buffer)),
+          bounded_number (total_buffers)),
 
 #ifdef DOUG_LEA_MALLOC
-    total_size++;
-    total[10] = list4 (Qheap, make_number (1024),
-                       bounded_number ((mallinfo ().uordblks + 1023) >> 10),
-                       bounded_number ((mallinfo ().fordblks + 1023) >> 10));
+    list4 (Qheap, make_number (1024),
+          bounded_number ((mallinfo ().uordblks + 1023) >> 10),
+          bounded_number ((mallinfo ().fordblks + 1023) >> 10)),
 #endif
-    retval = Flist (total_size, total);
-  }
+  };
+  retval = CALLMANY (Flist, total);
 
 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
   {
@@ -6152,15 +6086,16 @@ void
 mark_object (Lisp_Object arg)
 {
   register Lisp_Object obj = arg;
-#ifdef GC_CHECK_MARKED_OBJECTS
   void *po;
+#ifdef GC_CHECK_MARKED_OBJECTS
   struct mem_node *m;
 #endif
   ptrdiff_t cdr_count = 0;
 
  loop:
 
-  if (PURE_POINTER_P (XPNTR (obj)))
+  po = XPNTR (obj);
+  if (PURE_POINTER_P (po))
     return;
 
   last_marked[last_marked_index++] = obj;
@@ -6172,8 +6107,6 @@ mark_object (Lisp_Object arg)
      by ~80%, and requires compilation with GC_MARK_STACK != 0.  */
 #ifdef GC_CHECK_MARKED_OBJECTS
 
-  po = (void *) XPNTR (obj);
-
   /* Check that the object pointed to by PO is known to be a Lisp
      structure allocated from the heap.  */
 #define CHECK_ALLOCATED()                      \
@@ -6191,17 +6124,28 @@ mark_object (Lisp_Object arg)
       emacs_abort ();                          \
   } while (0)
 
-  /* Check both of the above conditions.  */
+  /* Check both of the above conditions, for non-symbols.  */
 #define CHECK_ALLOCATED_AND_LIVE(LIVEP)                \
   do {                                         \
     CHECK_ALLOCATED ();                                \
     CHECK_LIVE (LIVEP);                                \
   } while (0)                                  \
 
+  /* Check both of the above conditions, for symbols.  */
+#define CHECK_ALLOCATED_AND_LIVE_SYMBOL()      \
+  do {                                         \
+    if (!c_symbol_p (ptr))                     \
+      {                                                \
+       CHECK_ALLOCATED ();                     \
+       CHECK_LIVE (live_symbol_p);             \
+      }                                                \
+  } while (0)                                  \
+
 #else /* not GC_CHECK_MARKED_OBJECTS */
 
-#define CHECK_LIVE(LIVEP)              (void) 0
-#define CHECK_ALLOCATED_AND_LIVE(LIVEP)        (void) 0
+#define CHECK_LIVE(LIVEP)                      ((void) 0)
+#define CHECK_ALLOCATED_AND_LIVE(LIVEP)                ((void) 0)
+#define CHECK_ALLOCATED_AND_LIVE_SYMBOL()      ((void) 0)
 
 #endif /* not GC_CHECK_MARKED_OBJECTS */
 
@@ -6362,10 +6306,10 @@ mark_object (Lisp_Object arg)
       nextsym:
        if (ptr->gcmarkbit)
          break;
-       CHECK_ALLOCATED_AND_LIVE (live_symbol_p);
+       CHECK_ALLOCATED_AND_LIVE_SYMBOL ();
        ptr->gcmarkbit = 1;
        /* Attempt to catch bogus objects.  */
-        eassert (valid_lisp_object_p (ptr->function) >= 1);
+        eassert (valid_lisp_object_p (ptr->function));
        mark_object (ptr->function);
        mark_object (ptr->plist);
        switch (ptr->redirect)
@@ -6719,13 +6663,16 @@ NO_INLINE /* For better stack traces */
 static void
 sweep_symbols (void)
 {
-  register struct symbol_block *sblk;
+  struct symbol_block *sblk;
   struct symbol_block **sprev = &symbol_block;
-  register int lim = symbol_block_index;
-  EMACS_INT num_free = 0, num_used = 0;
+  int lim = symbol_block_index;
+  EMACS_INT num_free = 0, num_used = ARRAYELTS (lispsym);
 
   symbol_free_list = NULL;
 
+  for (int i = 0; i < ARRAYELTS (lispsym); i++)
+    lispsym[i].gcmarkbit = 0;
+
   for (sblk = symbol_block; sblk; sblk = *sprev)
     {
       int this_free = 0;
@@ -6750,7 +6697,7 @@ sweep_symbols (void)
               ++num_used;
               sym->s.gcmarkbit = 0;
               /* Attempt to catch bogus objects.  */
-              eassert (valid_lisp_object_p (sym->s.function) >= 1);
+              eassert (valid_lisp_object_p (sym->s.function));
             }
         }
 
@@ -6973,6 +6920,21 @@ Frames, windows, buffers, and subprocesses count as 
vectors
                bounded_number (strings_consed));
 }
 
+static bool
+symbol_uses_obj (Lisp_Object symbol, Lisp_Object obj)
+{
+  struct Lisp_Symbol *sym = XSYMBOL (symbol);
+  Lisp_Object val = find_symbol_value (symbol);
+  return (EQ (val, obj)
+         || EQ (sym->function, obj)
+         || (!NILP (sym->function)
+             && COMPILEDP (sym->function)
+             && EQ (AREF (sym->function, COMPILED_BYTECODE), obj))
+         || (!NILP (val)
+             && COMPILEDP (val)
+             && EQ (AREF (val, COMPILED_BYTECODE), obj)));
+}
+
 /* Find at most FIND_MAX symbols which have OBJ as their value or
    function.  This is used in gdbinit's `xwhichsymbols' command.  */
 
@@ -6985,6 +6947,17 @@ which_symbols (Lisp_Object obj, EMACS_INT find_max)
 
    if (! DEADP (obj))
      {
+       for (int i = 0; i < ARRAYELTS (lispsym); i++)
+        {
+          Lisp_Object sym = builtin_lisp_symbol (i);
+          if (symbol_uses_obj (sym, obj))
+            {
+              found = Fcons (sym, found);
+              if (--find_max == 0)
+                goto out;
+            }
+        }
+
        for (sblk = symbol_block; sblk; sblk = sblk->next)
         {
           union aligned_Lisp_Symbol *aligned_sym = sblk->symbols;
@@ -6992,25 +6965,13 @@ which_symbols (Lisp_Object obj, EMACS_INT find_max)
 
           for (bn = 0; bn < SYMBOL_BLOCK_SIZE; bn++, aligned_sym++)
             {
-              struct Lisp_Symbol *sym = &aligned_sym->s;
-              Lisp_Object val;
-              Lisp_Object tem;
-
               if (sblk == symbol_block && bn >= symbol_block_index)
                 break;
 
-              XSETSYMBOL (tem, sym);
-              val = find_symbol_value (tem);
-              if (EQ (val, obj)
-                  || EQ (sym->function, obj)
-                  || (!NILP (sym->function)
-                      && COMPILEDP (sym->function)
-                      && EQ (AREF (sym->function, COMPILED_BYTECODE), obj))
-                  || (!NILP (val)
-                      && COMPILEDP (val)
-                      && EQ (AREF (val, COMPILED_BYTECODE), obj)))
+              Lisp_Object sym = make_lisp_symbol (&aligned_sym->s);
+              if (symbol_uses_obj (sym, obj))
                 {
-                  found = Fcons (tem, found);
+                  found = Fcons (sym, found);
                   if (--find_max == 0)
                     goto out;
                 }
@@ -7153,7 +7114,9 @@ verify_alloca (void)
 void
 init_alloc_once (void)
 {
-  /* Used to do Vpurify_flag = Qt here, but Qt isn't set up yet!  */
+  /* Even though Qt's contents are not set up, its address is known.  */
+  Vpurify_flag = Qt;
+
   purebeg = PUREBEG;
   pure_size = PURESIZE;
 
@@ -7229,6 +7192,7 @@ If this portion is smaller than `gc-cons-threshold', this 
is ignored.  */);
 
   DEFVAR_INT ("symbols-consed", symbols_consed,
              doc: /* Number of symbols that have been consed so far.  */);
+  symbols_consed += ARRAYELTS (lispsym);
 
   DEFVAR_INT ("string-chars-consed", string_chars_consed,
              doc: /* Number of string characters that have been consed so far. 
 */);
diff --git a/src/atimer.c b/src/atimer.c
index ce782f6..8ff9bb8 100644
--- a/src/atimer.c
+++ b/src/atimer.c
@@ -1,5 +1,5 @@
 /* Asynchronous timers.
-   Copyright (C) 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/atimer.h b/src/atimer.h
index 2386977..d08cd7f 100644
--- a/src/atimer.h
+++ b/src/atimer.h
@@ -1,5 +1,5 @@
 /* Asynchronous timers.
-   Copyright (C) 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/bidi.c b/src/bidi.c
index 225acd9..cbc1820 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -1,5 +1,5 @@
 /* Low-level bidirectional buffer/string-scanning functions for GNU Emacs.
-   Copyright (C) 2000-2001, 2004-2005, 2009-2014 Free Software
+   Copyright (C) 2000-2001, 2004-2005, 2009-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -262,7 +262,6 @@ typedef enum {
 } bidi_category_t;
 
 static Lisp_Object paragraph_start_re, paragraph_separate_re;
-static Lisp_Object Qparagraph_start, Qparagraph_separate;
 
 
 /***********************************************************************
@@ -433,6 +432,9 @@ bidi_set_sos_type (struct bidi_it *bidi_it, int 
level_before, int level_after)
     = bidi_it->next_for_neutral.orig_type = UNKNOWN_BT;
 }
 
+#define ISOLATE_STATUS(BIDI_IT, IDX)  ((BIDI_IT)->level_stack[IDX].flags & 1)
+#define OVERRIDE(BIDI_IT, IDX)  (((BIDI_IT)->level_stack[IDX].flags >> 1) & 3)
+
 /* Push the current embedding level and override status; reset the
    current level to LEVEL and the current override status to OVERRIDE.  */
 static void
@@ -447,14 +449,14 @@ bidi_push_embedding_level (struct bidi_it *bidi_it,
   st = &bidi_it->level_stack[bidi_it->stack_idx];
   eassert (level <= (1 << 7));
   st->level = level;
-  st->override = override;
-  st->isolate_status = isolate_status;
+  st->flags = (((override & 3) << 1) | (isolate_status != 0));
   if (isolate_status)
     {
-      st->last_strong = bidi_it->last_strong;
-      st->prev_for_neutral = bidi_it->prev_for_neutral;
-      st->next_for_neutral = bidi_it->next_for_neutral;
-      st->sos = bidi_it->sos;
+      st->last_strong_type = bidi_it->last_strong.type;
+      st->prev_for_neutral_type = bidi_it->prev_for_neutral.type;
+      st->next_for_neutral_type = bidi_it->next_for_neutral.type;
+      st->next_for_neutral_pos = bidi_it->next_for_neutral.charpos;
+      st->flags |= ((bidi_it->sos == L2R ? 0 : 1) << 3);
     }
   /* We've got a new isolating sequence, compute the directional type
      of sos and initialize per-sequence variables (UAX#9, clause X10).  */
@@ -473,8 +475,7 @@ bidi_pop_embedding_level (struct bidi_it *bidi_it)
      and PDIs (X6a, 2nd bullet).  */
   if (bidi_it->stack_idx > 0)
     {
-      bool isolate_status
-       = bidi_it->level_stack[bidi_it->stack_idx].isolate_status;
+      bool isolate_status = ISOLATE_STATUS (bidi_it, bidi_it->stack_idx);
       int old_level = bidi_it->level_stack[bidi_it->stack_idx].level;
 
       struct bidi_stack st;
@@ -482,6 +483,7 @@ bidi_pop_embedding_level (struct bidi_it *bidi_it)
       st = bidi_it->level_stack[bidi_it->stack_idx];
       if (isolate_status)
        {
+         bidi_dir_t sos = ((st.flags >> 3) & 1);
          /* PREV is used in W1 for resolving WEAK_NSM.  By the time
             we get to an NSM, we must have gotten past at least one
             character: the PDI that ends the isolate from which we
@@ -490,10 +492,11 @@ bidi_pop_embedding_level (struct bidi_it *bidi_it)
             UNKNOWN_BT to be able to catch any blunders in this
             logic.  */
          bidi_it->prev.orig_type = bidi_it->prev.type = UNKNOWN_BT;
-         bidi_it->last_strong = st.last_strong;
-         bidi_it->prev_for_neutral = st.prev_for_neutral;
-         bidi_it->next_for_neutral = st.next_for_neutral;
-         bidi_it->sos = st.sos;
+         bidi_it->last_strong.type = st.last_strong_type;
+         bidi_it->prev_for_neutral.type = st.prev_for_neutral_type;
+         bidi_it->next_for_neutral.type = st.next_for_neutral_type;
+         bidi_it->next_for_neutral.charpos = st.next_for_neutral_pos;
+         bidi_it->sos = (sos == 0 ? L2R : R2L);
        }
       else
        bidi_set_sos_type (bidi_it, old_level,
@@ -542,6 +545,30 @@ bidi_copy_it (struct bidi_it *to, struct bidi_it *from)
    characters).  200 was chosen as an upper limit for reasonably-long
    lines in a text file/buffer.  */
 #define BIDI_CACHE_CHUNK 200
+/* Maximum size we allow the cache to become, per iterator stack slot,
+   in units of struct bidi_it size.  If we allow unlimited growth, we
+   could run out of memory for pathologically long bracketed text or
+   very long text lines that need to be reordered.  This is aggravated
+   when word-wrap is in effect, since then functions display_line and
+   move_it_in_display_line_to need to keep up to 4 copies of the
+   cache.
+
+   This limitation means there can be no more than that amount of
+   contiguous RTL text on any single physical line in a LTR paragraph,
+   and similarly with contiguous LTR + numeric text in a RTL
+   paragraph.  (LTR text in a LTR paragraph and RTL text in a RTL
+   paragraph are not reordered, and so don't need the cache, and
+   cannot hit this limit.)  More importantly, no single line can have
+   text longer than this inside paired brackets (because bracket pairs
+   resolution uses the cache).  If the limit is exceeded, the fallback
+   code will produce visual order that will be incorrect if there are
+   RTL characters in the offending line of text.  */
+/* Do we need to allow customization of this limit?  */
+#define BIDI_CACHE_MAX_ELTS_PER_SLOT 50000
+#if BIDI_CACHE_CHUNK >= BIDI_CACHE_MAX_ELTS_PER_SLOT
+# error BIDI_CACHE_CHUNK must be less than BIDI_CACHE_MAX_ELTS_PER_SLOT
+#endif
+static ptrdiff_t bidi_cache_max_elts = BIDI_CACHE_MAX_ELTS_PER_SLOT;
 static struct bidi_it *bidi_cache;
 static ptrdiff_t bidi_cache_size = 0;
 enum { elsz = sizeof (struct bidi_it) };
@@ -562,7 +589,7 @@ enum
     bidi_shelve_header_size
       = (sizeof (bidi_cache_idx) + sizeof (bidi_cache_start_stack)
         + sizeof (bidi_cache_sp) + sizeof (bidi_cache_start)
-        + sizeof (bidi_cache_last_idx))
+        + sizeof (bidi_cache_last_idx) + sizeof (bidi_cache_max_elts))
   };
 
 /* Effectively remove the cached states beyond the Nth state from the
@@ -600,6 +627,7 @@ bidi_cache_shrink (void)
       bidi_cache_size = BIDI_CACHE_CHUNK;
     }
   bidi_cache_reset ();
+  bidi_cache_max_elts = BIDI_CACHE_MAX_ELTS_PER_SLOT;
 }
 
 static void
@@ -618,7 +646,9 @@ bidi_cache_fetch_state (ptrdiff_t idx, struct bidi_it 
*bidi_it)
 /* Find a cached state with a given CHARPOS and resolved embedding
    level less or equal to LEVEL.  If LEVEL is -1, disregard the
    resolved levels in cached states.  DIR, if non-zero, means search
-   in that direction from the last cache hit.  */
+   in that direction from the last cache hit.
+
+   Value is the index of the cached state, or -1 if not found.  */
 static ptrdiff_t
 bidi_cache_search (ptrdiff_t charpos, int level, int dir)
 {
@@ -692,7 +722,8 @@ bidi_cache_find_level_change (int level, int dir, bool 
before)
       ptrdiff_t i = dir ? bidi_cache_last_idx : bidi_cache_idx - 1;
       int incr = before ? 1 : 0;
 
-      eassert (!dir || bidi_cache_last_idx >= 0);
+      if (i < 0)  /* cache overflowed? */
+       i = 0;
 
       if (!dir)
        dir = -1;
@@ -730,23 +761,37 @@ bidi_cache_ensure_space (ptrdiff_t idx)
   /* Enlarge the cache as needed.  */
   if (idx >= bidi_cache_size)
     {
-      /* The bidi cache cannot be larger than the largest Lisp string
-        or buffer.  */
-      ptrdiff_t string_or_buffer_bound
-       = max (BUF_BYTES_MAX, STRING_BYTES_BOUND);
+      ptrdiff_t chunk_size = BIDI_CACHE_CHUNK;
 
-      /* Also, it cannot be larger than what C can represent.  */
-      ptrdiff_t c_bound
-       = (min (PTRDIFF_MAX, SIZE_MAX) - bidi_shelve_header_size) / elsz;
+      if (bidi_cache_size > bidi_cache_max_elts - chunk_size)
+       chunk_size = bidi_cache_max_elts - bidi_cache_size;
 
-      bidi_cache
-       = xpalloc (bidi_cache, &bidi_cache_size,
-                  max (BIDI_CACHE_CHUNK, idx - bidi_cache_size + 1),
-                  min (string_or_buffer_bound, c_bound), elsz);
+      if (max (idx + 1,
+              bidi_cache_size + chunk_size) <= bidi_cache_max_elts)
+       {
+         /* The bidi cache cannot be larger than the largest Lisp
+            string or buffer.  */
+         ptrdiff_t string_or_buffer_bound
+           = max (BUF_BYTES_MAX, STRING_BYTES_BOUND);
+
+         /* Also, it cannot be larger than what C can represent.  */
+         ptrdiff_t c_bound
+           = (min (PTRDIFF_MAX, SIZE_MAX) - bidi_shelve_header_size) / elsz;
+         ptrdiff_t max_elts = bidi_cache_max_elts;
+
+         max_elts = min (max_elts, min (string_or_buffer_bound, c_bound));
+
+         /* Force xpalloc not to over-allocate by passing it MAX_ELTS
+            as its 4th argument.  */
+         bidi_cache = xpalloc (bidi_cache, &bidi_cache_size,
+                               max (chunk_size, idx - bidi_cache_size + 1),
+                               max_elts, elsz);
+         eassert (bidi_cache_size > idx);
+       }
     }
 }
 
-static void
+static int
 bidi_cache_iterator_state (struct bidi_it *bidi_it, bool resolved,
                           bool update_only)
 {
@@ -758,7 +803,7 @@ bidi_cache_iterator_state (struct bidi_it *bidi_it, bool 
resolved,
   idx = bidi_cache_search (bidi_it->charpos, -1, 1);
 
   if (idx < 0 && update_only)
-    return;
+    return 0;
 
   if (idx < 0)
     {
@@ -767,19 +812,23 @@ bidi_cache_iterator_state (struct bidi_it *bidi_it, bool 
resolved,
       /* Character positions should correspond to cache positions 1:1.
         If we are outside the range of cached positions, the cache is
         useless and must be reset.  */
-      if (idx > bidi_cache_start &&
-         (bidi_it->charpos > (bidi_cache[idx - 1].charpos
-                              + bidi_cache[idx - 1].nchars)
-          || bidi_it->charpos < bidi_cache[bidi_cache_start].charpos))
+      if (bidi_cache_start < idx && idx < bidi_cache_size
+         && (bidi_it->charpos > (bidi_cache[idx - 1].charpos
+                                 + bidi_cache[idx - 1].nchars)
+             || bidi_it->charpos < bidi_cache[bidi_cache_start].charpos))
        {
          bidi_cache_reset ();
          idx = bidi_cache_start;
        }
       if (bidi_it->nchars <= 0)
        emacs_abort ();
-      bidi_copy_it (&bidi_cache[idx], bidi_it);
-      if (!resolved)
-       bidi_cache[idx].resolved_level = -1;
+      /* Don't cache if no available space in the cache.  */
+      if (bidi_cache_size > idx)
+       {
+         bidi_copy_it (&bidi_cache[idx], bidi_it);
+         if (!resolved)
+           bidi_cache[idx].resolved_level = -1;
+       }
     }
   else
     {
@@ -802,9 +851,19 @@ bidi_cache_iterator_state (struct bidi_it *bidi_it, bool 
resolved,
       bidi_cache[idx].bracket_enclosed_type = bidi_it->bracket_enclosed_type;
     }
 
-  bidi_cache_last_idx = idx;
-  if (idx >= bidi_cache_idx)
-    bidi_cache_idx = idx + 1;
+  if (bidi_cache_size > idx)
+    {
+      bidi_cache_last_idx = idx;
+      if (idx >= bidi_cache_idx)
+       bidi_cache_idx = idx + 1;
+      return 1;
+    }
+  else
+    {
+      /* The cache overflowed.  */
+      bidi_cache_last_idx = -1;
+      return 0;
+    }
 }
 
 /* Look for a cached iterator state that corresponds to CHARPOS.  If
@@ -842,8 +901,13 @@ bidi_cache_find (ptrdiff_t charpos, bool resolved_only, 
struct bidi_it *bidi_it)
 static int
 bidi_peek_at_next_level (struct bidi_it *bidi_it)
 {
-  if (bidi_cache_idx == bidi_cache_start || bidi_cache_last_idx == -1)
+  if (bidi_cache_idx == bidi_cache_start)
     emacs_abort ();
+  /* If the cache overflowed, return the level of the last cached
+     character.  */
+  if (bidi_cache_last_idx == -1
+      || (bidi_cache_last_idx >= bidi_cache_idx - 1 && bidi_it->scan_dir > 0))
+    return bidi_cache[bidi_cache_idx - 1].resolved_level;
   return bidi_cache[bidi_cache_last_idx + bidi_it->scan_dir].resolved_level;
 }
 
@@ -860,6 +924,8 @@ bidi_peek_at_next_level (struct bidi_it *bidi_it)
 void
 bidi_push_it (struct bidi_it *bidi_it)
 {
+  /* Give this stack slot its cache room.  */
+  bidi_cache_max_elts += BIDI_CACHE_MAX_ELTS_PER_SLOT;
   /* Save the current iterator state in its entirety after the last
      used cache slot.  */
   bidi_cache_ensure_space (bidi_cache_idx);
@@ -896,6 +962,9 @@ bidi_pop_it (struct bidi_it *bidi_it)
 
   /* Invalidate the last-used cache slot data.  */
   bidi_cache_last_idx = -1;
+
+  bidi_cache_max_elts -= BIDI_CACHE_MAX_ELTS_PER_SLOT;
+  eassert (bidi_cache_max_elts > 0);
 }
 
 static ptrdiff_t bidi_cache_total_alloc;
@@ -935,6 +1004,11 @@ bidi_shelve_cache (void)
          + sizeof (bidi_cache_start_stack) + sizeof (bidi_cache_sp)
          + sizeof (bidi_cache_start),
          &bidi_cache_last_idx, sizeof (bidi_cache_last_idx));
+  memcpy (databuf + sizeof (bidi_cache_idx)
+         + bidi_cache_idx * sizeof (struct bidi_it)
+         + sizeof (bidi_cache_start_stack) + sizeof (bidi_cache_sp)
+         + sizeof (bidi_cache_start) + sizeof (bidi_cache_last_idx),
+         &bidi_cache_max_elts, sizeof (bidi_cache_max_elts));
 
   return databuf;
 }
@@ -956,6 +1030,7 @@ bidi_unshelve_cache (void *databuf, bool just_free)
          /* A NULL pointer means an empty cache.  */
          bidi_cache_start = 0;
          bidi_cache_sp = 0;
+         bidi_cache_max_elts = BIDI_CACHE_MAX_ELTS_PER_SLOT;
          bidi_cache_reset ();
        }
     }
@@ -995,6 +1070,12 @@ bidi_unshelve_cache (void *databuf, bool just_free)
                  + sizeof (bidi_cache_start_stack) + sizeof (bidi_cache_sp)
                  + sizeof (bidi_cache_start),
                  sizeof (bidi_cache_last_idx));
+         memcpy (&bidi_cache_max_elts,
+                 p + sizeof (bidi_cache_idx)
+                 + bidi_cache_idx * sizeof (struct bidi_it)
+                 + sizeof (bidi_cache_start_stack) + sizeof (bidi_cache_sp)
+                 + sizeof (bidi_cache_start) + sizeof (bidi_cache_last_idx),
+                 sizeof (bidi_cache_max_elts));
          bidi_cache_total_alloc
            -= (bidi_shelve_header_size
                + bidi_cache_idx * sizeof (struct bidi_it));
@@ -1026,14 +1107,12 @@ bidi_initialize (void)
     emacs_abort ();
   staticpro (&bidi_brackets_table);
 
-  Qparagraph_start = intern ("paragraph-start");
-  staticpro (&Qparagraph_start);
+  DEFSYM (Qparagraph_start, "paragraph-start");
   paragraph_start_re = Fsymbol_value (Qparagraph_start);
   if (!STRINGP (paragraph_start_re))
     paragraph_start_re = build_string ("\f\\|[ \t]*$");
   staticpro (&paragraph_start_re);
-  Qparagraph_separate = intern ("paragraph-separate");
-  staticpro (&Qparagraph_separate);
+  DEFSYM (Qparagraph_separate, "paragraph-separate");
   paragraph_separate_re = Fsymbol_value (Qparagraph_separate);
   if (!STRINGP (paragraph_separate_re))
     paragraph_separate_re = build_string ("[ \t\f]*$");
@@ -1041,6 +1120,7 @@ bidi_initialize (void)
 
   bidi_cache_sp = 0;
   bidi_cache_total_alloc = 0;
+  bidi_cache_max_elts = BIDI_CACHE_MAX_ELTS_PER_SLOT;
 
   bidi_initialized = 1;
 }
@@ -1104,8 +1184,7 @@ bidi_line_init (struct bidi_it *bidi_it)
   bidi_it->scan_dir = 1; /* FIXME: do we need to have control on this? */
   bidi_it->stack_idx = 0;
   bidi_it->resolved_level = bidi_it->level_stack[0].level;
-  bidi_it->level_stack[0].override = NEUTRAL_DIR; /* X1 */
-  bidi_it->level_stack[0].isolate_status = false; /* X1 */
+  bidi_it->level_stack[0].flags = 0; /* NEUTRAL_DIR, false per X1 */
   bidi_it->invalid_levels = 0;
   bidi_it->isolate_level = 0;   /* X1 */
   bidi_it->invalid_isolates = 0; /* X1 */
@@ -1858,8 +1937,8 @@ bidi_resolve_explicit (struct bidi_it *bidi_it)
     prev_type = NEUTRAL_B;
 
   current_level = bidi_it->level_stack[bidi_it->stack_idx].level; /* X1 */
-  override = bidi_it->level_stack[bidi_it->stack_idx].override;
-  isolate_status = bidi_it->level_stack[bidi_it->stack_idx].isolate_status;
+  isolate_status = ISOLATE_STATUS (bidi_it, bidi_it->stack_idx);
+  override = OVERRIDE (bidi_it, bidi_it->stack_idx);
   new_level = current_level;
 
   if (bidi_it->charpos >= (string_p ? bidi_it->string.schars : ZV))
@@ -2033,7 +2112,7 @@ bidi_resolve_explicit (struct bidi_it *bidi_it)
       else if (bidi_it->isolate_level > 0)
        {
          bidi_it->invalid_levels = 0;
-         while (!bidi_it->level_stack[bidi_it->stack_idx].isolate_status)
+         while (!ISOLATE_STATUS (bidi_it, bidi_it->stack_idx))
            bidi_pop_embedding_level (bidi_it);
          eassert (bidi_it->stack_idx > 0);
          new_level = bidi_pop_embedding_level (bidi_it);
@@ -2041,12 +2120,15 @@ bidi_resolve_explicit (struct bidi_it *bidi_it)
        }
       bidi_it->resolved_level = new_level;
       /* Unicode 8.0 correction.  */
-      if (bidi_it->level_stack[bidi_it->stack_idx].override == L2R)
-       bidi_it->type_after_wn = STRONG_L;
-      else if (bidi_it->level_stack[bidi_it->stack_idx].override == R2L)
-       bidi_it->type_after_wn = STRONG_R;
-      else
-       bidi_it->type_after_wn = type;
+      {
+       bidi_dir_t stack_override = OVERRIDE (bidi_it, bidi_it->stack_idx);
+       if (stack_override == L2R)
+         bidi_it->type_after_wn = STRONG_L;
+       else if (stack_override == R2L)
+         bidi_it->type_after_wn = STRONG_R;
+       else
+         bidi_it->type_after_wn = type;
+      }
       break;
     case PDF:  /* X7 */
       bidi_it->type_after_wn = type;
@@ -2089,7 +2171,7 @@ bidi_resolve_weak (struct bidi_it *bidi_it)
        ? bidi_it->string.schars : ZV);
 
   type = bidi_it->type;
-  override = bidi_it->level_stack[bidi_it->stack_idx].override;
+  override = OVERRIDE (bidi_it, bidi_it->stack_idx);
 
   eassert (!(type == UNKNOWN_BT
             || type == LRE
@@ -2453,6 +2535,7 @@ bidi_find_bracket_pairs (struct bidi_it *bidi_it)
       struct bidi_it tem_it;
       bool l2r_seen = false, r2l_seen = false;
       ptrdiff_t pairing_pos;
+      int idx_at_entry = bidi_cache_idx;
 
       eassert (MAX_BPA_STACK >= 100);
       bidi_copy_it (&saved_it, bidi_it);
@@ -2477,7 +2560,15 @@ bidi_find_bracket_pairs (struct bidi_it *bidi_it)
             levels below).  */
          if (btype == BIDI_BRACKET_OPEN && bidi_it->bracket_pairing_pos == -1)
            bidi_it->bracket_pairing_pos = bidi_it->charpos;
-         bidi_cache_iterator_state (bidi_it, type == NEUTRAL_B, 0);
+         if (!bidi_cache_iterator_state (bidi_it, type == NEUTRAL_B, 0))
+           {
+             /* No more space in cache -- give up and let the opening
+                bracket that started this be processed as a
+                NEUTRAL_ON.  */
+             bidi_cache_reset_to (idx_at_entry - bidi_cache_start);
+             bidi_copy_it (bidi_it, &saved_it);
+             goto give_up;
+           }
          if (btype == BIDI_BRACKET_OPEN)
            PUSH_BPA_STACK;
          else if (btype == BIDI_BRACKET_CLOSE)
@@ -2557,16 +2648,25 @@ bidi_find_bracket_pairs (struct bidi_it *bidi_it)
          /* Skip level runs excluded from this isolating run sequence.  */
          new_sidx = bidi_it->stack_idx;
          if (bidi_it->level_stack[new_sidx].level > current_level
-             && (bidi_it->level_stack[new_sidx].isolate_status
+             && (ISOLATE_STATUS (bidi_it, new_sidx)
                  || (new_sidx > old_sidx + 1
-                     && bidi_it->level_stack[new_sidx - 1].isolate_status)))
+                     && ISOLATE_STATUS (bidi_it, new_sidx - 1))))
            {
              while (bidi_it->level_stack[bidi_it->stack_idx].level
                     > current_level)
                {
                  if (maxlevel < bidi_it->level_stack[bidi_it->stack_idx].level)
                    maxlevel = bidi_it->level_stack[bidi_it->stack_idx].level;
-                 bidi_cache_iterator_state (bidi_it, type == NEUTRAL_B, 0);
+                 if (!bidi_cache_iterator_state (bidi_it,
+                                                 type == NEUTRAL_B, 0))
+                   {
+                     /* No more space in cache -- give up and let the
+                        opening bracket that started this be
+                        processed as any other NEUTRAL_ON.  */
+                     bidi_cache_reset_to (idx_at_entry - bidi_cache_start);
+                     bidi_copy_it (bidi_it, &saved_it);
+                     goto give_up;
+                   }
                  type = bidi_resolve_weak (bidi_it);
                }
            }
@@ -2642,6 +2742,7 @@ bidi_find_bracket_pairs (struct bidi_it *bidi_it)
        }
     }
 
+ give_up:
   return retval;
 }
 
@@ -2729,7 +2830,7 @@ bidi_resolve_brackets (struct bidi_it *bidi_it)
         the prev_for_neutral and next_for_neutral information, so
         that it will be picked up when we advance to that next run.  */
       if (bidi_it->level_stack[bidi_it->stack_idx].level > prev_level
-         && bidi_it->level_stack[bidi_it->stack_idx].isolate_status)
+         && ISOLATE_STATUS (bidi_it, bidi_it->stack_idx))
        {
          bidi_record_type_for_neutral (&prev_for_neutral, prev_level, 0);
          bidi_record_type_for_neutral (&next_for_neutral, prev_level, 1);
@@ -2919,14 +3020,14 @@ bidi_resolve_neutral (struct bidi_it *bidi_it)
            /* Skip level runs excluded from this isolating run sequence.  */
            new_sidx = bidi_it->stack_idx;
            if (bidi_it->level_stack[new_sidx].level > current_level
-               && (bidi_it->level_stack[new_sidx].isolate_status
+               && (ISOLATE_STATUS (bidi_it, new_sidx)
                    /* This is for when we have an isolate initiator
                       immediately followed by an embedding or
                       override initiator, in which case we get the
                       level stack pushed twice by the single call to
                       bidi_resolve_weak above.  */
                    || (new_sidx > old_sidx + 1
-                       && bidi_it->level_stack[new_sidx - 1].isolate_status)))
+                       && ISOLATE_STATUS (bidi_it, new_sidx - 1))))
              {
                while (bidi_it->level_stack[bidi_it->stack_idx].level
                       > current_level)
@@ -3204,10 +3305,35 @@ bidi_find_other_level_edge (struct bidi_it *bidi_it, 
int level, bool end_flag)
       if (end_flag)
        emacs_abort ();
 
-      bidi_cache_iterator_state (bidi_it, 1, 0);
+      if (!bidi_cache_iterator_state (bidi_it, 1, 0))
+       {
+         /* Can't happen: if the cache needs to grow, it means we
+            were at base embedding level, so the cache should have
+            been either empty or already large enough to cover this
+            character position.  */
+         emacs_abort ();
+       }
       do {
        new_level = bidi_level_of_next_char (bidi_it);
-       bidi_cache_iterator_state (bidi_it, 1, 0);
+       /* If the cache is full, perform an emergency return by
+          pretending that the level ended.  */
+       if (!bidi_cache_iterator_state (bidi_it, 1, 0))
+         {
+           new_level = level - 1;
+           /* Since the cache should only grow when we are scanning
+              forward looking for the edge of the level that is one
+              above the base embedding level, we can only have this
+              contingency when LEVEL - 1 is the base embedding
+              level.  */
+           eassert (new_level == bidi_it->level_stack[0].level);
+           /* Plan B, for when the cache overflows: Back up to the
+              previous character by fetching the last cached state,
+              and force the resolved level of that character be the
+              base embedding level.  */
+           bidi_cache_fetch_state (bidi_cache_idx - 1, bidi_it);
+           bidi_it->resolved_level = new_level;
+           bidi_cache_iterator_state (bidi_it, 1, 1);
+         }
       } while (new_level >= level);
     }
 }
@@ -3361,6 +3487,12 @@ bidi_move_to_visually_next (struct bidi_it *bidi_it)
          && bidi_it->charpos > (bidi_cache[bidi_cache_idx - 1].charpos
                                 + bidi_cache[bidi_cache_idx - 1].nchars - 1))
        bidi_cache_reset ();
+      /* Also reset the cache if it overflowed and we have just
+        emergency-exited using Plan B.  */
+      else if (bidi_it->resolved_level == bidi_it->level_stack[0].level
+              && bidi_cache_idx >= bidi_cache_size
+              && bidi_it->charpos == bidi_cache[bidi_cache_idx - 1].charpos)
+       bidi_cache_reset ();
        /* But as long as we are caching during forward scan, we must
           cache each state, or else the cache integrity will be
           compromised: it assumes cached states correspond to buffer
@@ -3376,6 +3508,33 @@ bidi_move_to_visually_next (struct bidi_it *bidi_it)
     UNGCPRO;
 }
 
+/* Utility function for looking for strong directional characters
+   whose bidi type was overridden by a directional override.  */
+ptrdiff_t
+bidi_find_first_overridden (struct bidi_it *bidi_it)
+{
+  ptrdiff_t found_pos = ZV;
+
+  do
+    {
+      /* Need to call bidi_resolve_weak, not bidi_resolve_explicit,
+        because the directional overrides are applied by the
+        former.  */
+      bidi_type_t type = bidi_resolve_weak (bidi_it);
+
+      if ((type == STRONG_R && bidi_it->orig_type == STRONG_L)
+         || (type == STRONG_L
+             && (bidi_it->orig_type == STRONG_R
+                 || bidi_it->orig_type == STRONG_AL)))
+       found_pos = bidi_it->charpos;
+    } while (found_pos == ZV
+            && bidi_it->charpos < ZV
+            && bidi_it->ch != BIDI_EOB
+            && bidi_it->ch != '\n');
+
+  return found_pos;
+}
+
 /* This is meant to be called from within the debugger, whenever you
    wish to examine the cache contents.  */
 void bidi_dump_cached_states (void) EXTERNALLY_VISIBLE;
diff --git a/src/blockinput.h b/src/blockinput.h
index 8303c8c..b0dbdf2 100644
--- a/src/blockinput.h
+++ b/src/blockinput.h
@@ -1,5 +1,5 @@
 /* blockinput.h - interface to blocking complicated interrupt-driven input.
-   Copyright (C) 1989, 1993, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1989, 1993, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/buffer.c b/src/buffer.c
index 9bdbfb8..67eda3e 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1,6 +1,7 @@
 /* Buffer manipulation primitives for GNU Emacs.
 
-Copyright (C) 1985-1989, 1993-1995, 1997-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1989, 1993-1995, 1997-2015 Free Software Foundation,
+Inc.
 
 This file is part of GNU Emacs.
 
@@ -114,41 +115,8 @@ static void reset_buffer_local_variables (struct buffer *, 
bool);
    due to user rplac'ing this alist or its elements.  */
 Lisp_Object Vbuffer_alist;
 
-static Lisp_Object Qkill_buffer_query_functions;
-
-/* Hook run before changing a major mode.  */
-static Lisp_Object Qchange_major_mode_hook;
-
-Lisp_Object Qfirst_change_hook;
-Lisp_Object Qbefore_change_functions;
-Lisp_Object Qafter_change_functions;
-
-static Lisp_Object Qfundamental_mode, Qmode_class, Qpermanent_local;
-static Lisp_Object Qpermanent_local_hook;
-
-static Lisp_Object Qprotected_field;
-
 static Lisp_Object QSFundamental;      /* A string "Fundamental".  */
 
-static Lisp_Object Qkill_buffer_hook;
-static Lisp_Object Qbuffer_list_update_hook;
-
-static Lisp_Object Qget_file_buffer;
-
-static Lisp_Object Qoverlayp;
-
-Lisp_Object Qpriority, Qbefore_string, Qafter_string;
-
-static Lisp_Object Qevaporate;
-
-Lisp_Object Qmodification_hooks;
-Lisp_Object Qinsert_in_front_hooks;
-Lisp_Object Qinsert_behind_hooks;
-
-Lisp_Object Qchoice, Qrange, Qleft, Qright;
-Lisp_Object Qvertical_scroll_bar, Qhorizontal_scroll_bar;
-static Lisp_Object Qoverwrite_mode, Qfraction;
-
 static void alloc_buffer_text (struct buffer *, ptrdiff_t);
 static void free_buffer_text (struct buffer *b);
 static struct Lisp_Overlay * copy_overlays (struct buffer *, struct 
Lisp_Overlay *);
@@ -419,7 +387,6 @@ followed by the rest of the buffers.  */)
   if (FRAMEP (frame))
     {
       Lisp_Object framelist, prevlist, tail;
-      Lisp_Object args[3];
 
       framelist = Fcopy_sequence (XFRAME (frame)->buffer_list);
       prevlist = Fnreverse (Fcopy_sequence
@@ -440,10 +407,7 @@ followed by the rest of the buffers.  */)
          tail = XCDR (tail);
        }
 
-      args[0] = framelist;
-      args[1] = general;
-      args[2] = prevlist;
-      return Fnconc (3, args);
+      return CALLN (Fnconc, framelist, general, prevlist);
     }
   else
     return general;
@@ -1686,15 +1650,14 @@ cleaning up all windows currently displaying the buffer 
to be killed. */)
   /* Run hooks with the buffer to be killed the current buffer.  */
   {
     ptrdiff_t count = SPECPDL_INDEX ();
-    Lisp_Object arglist[1];
 
     record_unwind_protect (save_excursion_restore, save_excursion_save ());
     set_buffer_internal (b);
 
     /* First run the query functions; if any query is answered no,
        don't kill the buffer.  */
-    arglist[0] = Qkill_buffer_query_functions;
-    tem = Frun_hook_with_args_until_failure (1, arglist);
+    tem = CALLN (Frun_hook_with_args_until_failure,
+                Qkill_buffer_query_functions);
     if (NILP (tem))
       return unbind_to (count, Qnil);
 
@@ -1715,7 +1678,7 @@ cleaning up all windows currently displaying the buffer 
to be killed. */)
       return unbind_to (count, Qt);
 
     /* Then run the hooks.  */
-    Frun_hooks (1, &Qkill_buffer_hook);
+    run_hook (Qkill_buffer_hook);
     unbind_to (count, Qnil);
   }
 
@@ -2739,7 +2702,7 @@ The first thing this function does is run
 the normal hook `change-major-mode-hook'.  */)
   (void)
 {
-  Frun_hooks (1, &Qchange_major_mode_hook);
+  run_hook (Qchange_major_mode_hook);
 
   /* Make sure none of the bindings in local_var_alist
      remain swapped in, in their symbols.  */
@@ -5059,12 +5022,99 @@ init_buffer_once (void)
 
   memset (buffer_permanent_local_flags, 0, sizeof 
buffer_permanent_local_flags);
 
+  /* 0 means not a lisp var, -1 means always local, else mask.  */
+  memset (&buffer_local_flags, 0, sizeof buffer_local_flags);
+  bset_filename (&buffer_local_flags, make_number (-1));
+  bset_directory (&buffer_local_flags, make_number (-1));
+  bset_backed_up (&buffer_local_flags, make_number (-1));
+  bset_save_length (&buffer_local_flags, make_number (-1));
+  bset_auto_save_file_name (&buffer_local_flags, make_number (-1));
+  bset_read_only (&buffer_local_flags, make_number (-1));
+  bset_major_mode (&buffer_local_flags, make_number (-1));
+  bset_mode_name (&buffer_local_flags, make_number (-1));
+  bset_undo_list (&buffer_local_flags, make_number (-1));
+  bset_mark_active (&buffer_local_flags, make_number (-1));
+  bset_point_before_scroll (&buffer_local_flags, make_number (-1));
+  bset_file_truename (&buffer_local_flags, make_number (-1));
+  bset_invisibility_spec (&buffer_local_flags, make_number (-1));
+  bset_file_format (&buffer_local_flags, make_number (-1));
+  bset_auto_save_file_format (&buffer_local_flags, make_number (-1));
+  bset_display_count (&buffer_local_flags, make_number (-1));
+  bset_display_time (&buffer_local_flags, make_number (-1));
+  bset_enable_multibyte_characters (&buffer_local_flags, make_number (-1));
+
+  /* These used to be stuck at 0 by default, but now that the all-zero value
+     means Qnil, we have to initialize them explicitly.  */
+  bset_name (&buffer_local_flags, make_number (0));
+  bset_mark (&buffer_local_flags, make_number (0));
+  bset_local_var_alist (&buffer_local_flags, make_number (0));
+  bset_keymap (&buffer_local_flags, make_number (0));
+  bset_downcase_table (&buffer_local_flags, make_number (0));
+  bset_upcase_table (&buffer_local_flags, make_number (0));
+  bset_case_canon_table (&buffer_local_flags, make_number (0));
+  bset_case_eqv_table (&buffer_local_flags, make_number (0));
+  bset_minor_modes (&buffer_local_flags, make_number (0));
+  bset_width_table (&buffer_local_flags, make_number (0));
+  bset_pt_marker (&buffer_local_flags, make_number (0));
+  bset_begv_marker (&buffer_local_flags, make_number (0));
+  bset_zv_marker (&buffer_local_flags, make_number (0));
+  bset_last_selected_window (&buffer_local_flags, make_number (0));
+
+  idx = 1;
+  XSETFASTINT (BVAR (&buffer_local_flags, mode_line_format), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, abbrev_mode), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, overwrite_mode), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, case_fold_search), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, auto_fill_function), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, selective_display), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, selective_display_ellipses), idx); 
++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, tab_width), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, truncate_lines), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, word_wrap), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, ctl_arrow), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, fill_column), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, left_margin), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, abbrev_table), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, display_table), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, syntax_table), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, cache_long_scans), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, category_table), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, bidi_display_reordering), idx); 
++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, bidi_paragraph_direction), idx); 
++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, buffer_file_coding_system), idx);
+  /* Make this one a permanent local.  */
+  buffer_permanent_local_flags[idx++] = 1;
+  XSETFASTINT (BVAR (&buffer_local_flags, left_margin_cols), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, right_margin_cols), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, left_fringe_width), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, right_fringe_width), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, fringes_outside_margins), idx); 
++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, scroll_bar_width), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, scroll_bar_height), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, vertical_scroll_bar_type), idx); 
++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, horizontal_scroll_bar_type), idx); 
++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, indicate_empty_lines), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, indicate_buffer_boundaries), idx); 
++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, fringe_indicator_alist), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, fringe_cursor_alist), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, scroll_up_aggressively), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, scroll_down_aggressively), idx); 
++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, header_line_format), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, cursor_type), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, extra_line_spacing), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, cursor_in_non_selected_windows), 
idx); ++idx;
+
+  /* Need more room? */
+  if (idx >= MAX_PER_BUFFER_VARS)
+    emacs_abort ();
+  last_per_buffer_idx = idx;
+
   /* Make sure all markable slots in buffer_defaults
      are initialized reasonably, so mark_buffer won't choke.  */
   reset_buffer (&buffer_defaults);
-  eassert (EQ (BVAR (&buffer_defaults, name), make_number (0)));
+  eassert (NILP (BVAR (&buffer_defaults, name)));
   reset_buffer_local_variables (&buffer_defaults, 1);
-  eassert (EQ (BVAR (&buffer_local_symbols, name), make_number (0)));
+  eassert (NILP (BVAR (&buffer_local_symbols, name)));
   reset_buffer (&buffer_local_symbols);
   reset_buffer_local_variables (&buffer_local_symbols, 1);
   /* Prevent GC from getting confused.  */
@@ -5145,98 +5195,26 @@ init_buffer_once (void)
      to say that it has its own local value for the slot.
      The local flag bits are in the local_var_flags slot of the buffer.  */
 
-  /* Nothing can work if this isn't true */
+  /* Nothing can work if this isn't true.  */
   { verify (sizeof (EMACS_INT) == word_size); }
 
-  /* 0 means not a lisp var, -1 means always local, else mask */
-  memset (&buffer_local_flags, 0, sizeof buffer_local_flags);
-  bset_filename (&buffer_local_flags, make_number (-1));
-  bset_directory (&buffer_local_flags, make_number (-1));
-  bset_backed_up (&buffer_local_flags, make_number (-1));
-  bset_save_length (&buffer_local_flags, make_number (-1));
-  bset_auto_save_file_name (&buffer_local_flags, make_number (-1));
-  bset_read_only (&buffer_local_flags, make_number (-1));
-  bset_major_mode (&buffer_local_flags, make_number (-1));
-  bset_mode_name (&buffer_local_flags, make_number (-1));
-  bset_undo_list (&buffer_local_flags, make_number (-1));
-  bset_mark_active (&buffer_local_flags, make_number (-1));
-  bset_point_before_scroll (&buffer_local_flags, make_number (-1));
-  bset_file_truename (&buffer_local_flags, make_number (-1));
-  bset_invisibility_spec (&buffer_local_flags, make_number (-1));
-  bset_file_format (&buffer_local_flags, make_number (-1));
-  bset_auto_save_file_format (&buffer_local_flags, make_number (-1));
-  bset_display_count (&buffer_local_flags, make_number (-1));
-  bset_display_time (&buffer_local_flags, make_number (-1));
-  bset_enable_multibyte_characters (&buffer_local_flags, make_number (-1));
-
-  idx = 1;
-  XSETFASTINT (BVAR (&buffer_local_flags, mode_line_format), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, abbrev_mode), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, overwrite_mode), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, case_fold_search), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, auto_fill_function), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, selective_display), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, selective_display_ellipses), idx); 
++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, tab_width), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, truncate_lines), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, word_wrap), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, ctl_arrow), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, fill_column), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, left_margin), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, abbrev_table), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, display_table), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, syntax_table), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, cache_long_scans), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, category_table), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, bidi_display_reordering), idx); 
++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, bidi_paragraph_direction), idx); 
++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, buffer_file_coding_system), idx);
-  /* Make this one a permanent local.  */
-  buffer_permanent_local_flags[idx++] = 1;
-  XSETFASTINT (BVAR (&buffer_local_flags, left_margin_cols), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, right_margin_cols), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, left_fringe_width), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, right_fringe_width), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, fringes_outside_margins), idx); 
++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, scroll_bar_width), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, scroll_bar_height), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, vertical_scroll_bar_type), idx); 
++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, horizontal_scroll_bar_type), idx); 
++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, indicate_empty_lines), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, indicate_buffer_boundaries), idx); 
++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, fringe_indicator_alist), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, fringe_cursor_alist), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, scroll_up_aggressively), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, scroll_down_aggressively), idx); 
++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, header_line_format), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, cursor_type), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, extra_line_spacing), idx); ++idx;
-  XSETFASTINT (BVAR (&buffer_local_flags, cursor_in_non_selected_windows), 
idx); ++idx;
-
-  /* Need more room? */
-  if (idx >= MAX_PER_BUFFER_VARS)
-    emacs_abort ();
-  last_per_buffer_idx = idx;
-
   Vbuffer_alist = Qnil;
   current_buffer = 0;
   all_buffers = 0;
 
   QSFundamental = build_pure_c_string ("Fundamental");
 
-  Qfundamental_mode = intern_c_string ("fundamental-mode");
+  DEFSYM (Qfundamental_mode, "fundamental-mode");
   bset_major_mode (&buffer_defaults, Qfundamental_mode);
 
-  Qmode_class = intern_c_string ("mode-class");
-
-  Qprotected_field = intern_c_string ("protected-field");
-
-  Qpermanent_local = intern_c_string ("permanent-local");
+  DEFSYM (Qmode_class, "mode-class");
+  DEFSYM (Qprotected_field, "protected-field");
 
-  Qkill_buffer_hook = intern_c_string ("kill-buffer-hook");
+  DEFSYM (Qpermanent_local, "permanent-local");
+  DEFSYM (Qkill_buffer_hook, "kill-buffer-hook");
   Fput (Qkill_buffer_hook, Qpermanent_local, Qt);
 
-  /* super-magic invisible buffer */
+  /* Super-magic invisible buffer.  */
   Vprin1_to_string_buffer = Fget_buffer_create (build_pure_c_string (" 
prin1"));
   Vbuffer_alist = Qnil;
 
@@ -5397,13 +5375,8 @@ syms_of_buffer (void)
   last_overlay_modification_hooks
     = Fmake_vector (make_number (10), Qnil);
 
-  staticpro (&Qfundamental_mode);
-  staticpro (&Qmode_class);
   staticpro (&QSFundamental);
   staticpro (&Vbuffer_alist);
-  staticpro (&Qprotected_field);
-  staticpro (&Qpermanent_local);
-  staticpro (&Qkill_buffer_hook);
 
   DEFSYM (Qchoice, "choice");
   DEFSYM (Qleft, "left");
@@ -6073,9 +6046,9 @@ from happening repeatedly and making Emacs nonfunctional. 
 */);
               doc: /* List of functions to call after each text change.
 Three arguments are passed to each function: the positions of
 the beginning and end of the range of changed text,
-and the length in bytes of the pre-change text replaced by that range.
+and the length in chars of the pre-change text replaced by that range.
 \(For an insertion, the pre-change length is zero;
-for a deletion, that length is the number of bytes deleted,
+for a deletion, that length is the number of chars deleted,
 and the post-change beginning and end are at the same place.)
 
 Buffer changes made while executing the `after-change-functions'
diff --git a/src/buffer.h b/src/buffer.h
index 284cfa7..81852ca 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -1,6 +1,6 @@
 /* Header file for the buffer manipulation primitives.
 
-Copyright (C) 1985-1986, 1993-1995, 1997-2014 Free Software Foundation,
+Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -1141,12 +1141,6 @@ record_unwind_current_buffer (void)
   } while (false)
 
 extern Lisp_Object Vbuffer_alist;
-extern Lisp_Object Qbefore_change_functions;
-extern Lisp_Object Qafter_change_functions;
-extern Lisp_Object Qfirst_change_hook;
-extern Lisp_Object Qpriority, Qbefore_string, Qafter_string;
-extern Lisp_Object Qchoice, Qrange, Qleft, Qright;
-extern Lisp_Object Qvertical_scroll_bar, Qhorizontal_scroll_bar;
 
 /* FOR_EACH_LIVE_BUFFER (LIST_VAR, BUF_VAR) followed by a statement is
    a `for' loop which iterates over the buffers from Vbuffer_alist.  */
diff --git a/src/bytecode.c b/src/bytecode.c
index d3c8b47..b458367 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -1,5 +1,5 @@
 /* Execution of byte code produced by bytecomp.el.
-   Copyright (C) 1985-1988, 1993, 2000-2014 Free Software Foundation,
+   Copyright (C) 1985-1988, 1993, 2000-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -69,7 +69,6 @@ by Hallvard:
 
 #ifdef BYTE_CODE_METER
 
-Lisp_Object Qbyte_code_meter;
 #define METER_2(code1, code2) AREF (AREF (Vbyte_code_meter, code1), code2)
 #define METER_1(code) METER_2 (0, code)
 
diff --git a/src/callint.c b/src/callint.c
index 9467695..60021fd 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -1,5 +1,5 @@
 /* Call a Lisp function interactively.
-   Copyright (C) 1985-1986, 1993-1995, 1997, 2000-2014 Free Software
+   Copyright (C) 1985-1986, 1993-1995, 1997, 2000-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -28,18 +28,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "window.h"
 #include "keymap.h"
 
-Lisp_Object Qminus, Qplus;
-static Lisp_Object Qfuncall_interactively;
-static Lisp_Object Qcommand_debug_status;
-static Lisp_Object Qenable_recursive_minibuffers;
-
-static Lisp_Object Qhandle_shift_selection;
-static Lisp_Object Qread_number;
-
-Lisp_Object Qmouse_leave_buffer_hook;
-
-static Lisp_Object Qlist, Qlet, Qletx, Qsave_excursion, Qif;
-Lisp_Object Qwhen, Qprogn;
 static Lisp_Object preserved_fns;
 
 /* Marker used within call-interactively to refer to point.  */
@@ -113,7 +101,8 @@ If the string begins with `^' and `shift-select-mode' is 
non-nil,
  Emacs first calls the function `handle-shift-selection'.
 You may use `@', `*', and `^' together.  They are processed in the
  order that they appear, before reading any arguments.
-usage: (interactive &optional ARGS)  */)
+usage: (interactive &optional ARGS)  */
+       attributes: const)
   (Lisp_Object args)
 {
   return Qnil;
@@ -240,17 +229,10 @@ read_file_name (Lisp_Object default_filename, Lisp_Object 
mustmatch,
                Lisp_Object initial, Lisp_Object predicate)
 {
   struct gcpro gcpro1;
-  Lisp_Object args[7];
-
   GCPRO1 (default_filename);
-  args[0] = intern ("read-file-name");
-  args[1] = callint_message;
-  args[2] = Qnil;
-  args[3] = default_filename;
-  args[4] = mustmatch;
-  args[5] = initial;
-  args[6] = predicate;
-  RETURN_UNGCPRO (Ffuncall (7, args));
+  RETURN_UNGCPRO (CALLN (Ffuncall, intern ("read-file-name"),
+                        callint_message, Qnil, default_filename,
+                        mustmatch, initial, predicate));
 }
 
 /* BEWARE: Calling this directly from C would defeat the purpose!  */
@@ -408,15 +390,11 @@ invoke it.  If KEYS is omitted or nil, the return value of
       Vreal_this_command = save_real_this_command;
       kset_last_command (current_kboard, save_last_command);
 
-      {
-       Lisp_Object args[3];
-       args[0] = Qfuncall_interactively;
-       args[1] = function;
-       args[2] = specs;
-       Lisp_Object result = unbind_to (speccount, Fapply (3, args));
-       SAFE_FREE ();
-       return result;
-      }
+      Lisp_Object result
+       = unbind_to (speccount, CALLN (Fapply, Qfuncall_interactively,
+                                      function, specs));
+      SAFE_FREE ();
+      return result;
     }
 
   /* SPECS is set to a string; use it as an interactive prompt.
@@ -477,7 +455,7 @@ invoke it.  If KEYS is omitted or nil, the return value of
                error ("Attempt to select inactive minibuffer window");
 
              /* If the current buffer wants to clean up, let it.  */
-              Frun_hooks (1, &Qmouse_leave_buffer_hook);
+              run_hook (Qmouse_leave_buffer_hook);
 
              Fselect_window (w, Qnil);
            }
@@ -520,12 +498,7 @@ invoke it.  If KEYS is omitted or nil, the return value of
   visargs = args + nargs;
   varies = (signed char *) (visargs + nargs);
 
-  for (i = 0; i < nargs; i++)
-    {
-      args[i] = Qnil;
-      visargs[i] = Qnil;
-      varies[i] = 0;
-    }
+  memclear (args, nargs * (2 * word_size + 1));
 
   GCPRO5 (prefix_arg, function, *args, *visargs, up_event);
   gcpro3.nvars = nargs;
@@ -792,7 +765,7 @@ invoke it.  If KEYS is omitted or nil, the return value of
                                   argument if no prefix.  */
          if (NILP (prefix_arg))
            {
-             args[i] = Qnil;
+             /* args[i] = Qnil; */
              varies[i] = -1;
            }
          else
diff --git a/src/callproc.c b/src/callproc.c
index 24b8855..63ab9bf 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1,6 +1,6 @@
 /* Synchronous subprocess invocation for GNU Emacs.
 
-Copyright (C) 1985-1988, 1993-1995, 1999-2014 Free Software Foundation,
+Copyright (C) 1985-1988, 1993-1995, 1999-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -131,12 +131,9 @@ encode_current_directory (void)
     report_file_error ("Setting current directory",
                       BVAR (current_buffer, directory));
 
-  /* Remove "/:" from dir.  */
-  if (! NILP (Fstring_match (build_string ("^/:"), dir, Qnil)))
-    dir = Fsubstring (dir, make_number (2), Qnil);
+  /* Remove "/:" from DIR and encode it.  */
+  dir = ENCODE_FILE (remove_slash_colon (dir));
 
-  if (STRING_MULTIBYTE (dir))
-    dir = ENCODE_FILE (dir);
   if (! file_accessible_directory_p (dir))
     report_file_error ("Setting current directory",
                       BVAR (current_buffer, directory));
@@ -267,7 +264,7 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION 
DISPLAY &rest ARGS)  *
     infile = build_string (NULL_DEVICE);
 
   GCPRO1 (infile);
-  encoded_infile = STRING_MULTIBYTE (infile) ? ENCODE_FILE (infile) : infile;
+  encoded_infile = ENCODE_FILE (infile);
 
   filefd = emacs_open (SSDATA (encoded_infile), O_RDONLY, 0);
   if (filefd < 0)
@@ -439,9 +436,9 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int 
filefd,
 
     GCPRO4 (buffer, current_dir, error_file, output_file);
 
-    if (STRINGP (error_file) && STRING_MULTIBYTE (error_file))
+    if (STRINGP (error_file))
       error_file = ENCODE_FILE (error_file);
-    if (STRINGP (output_file) && STRING_MULTIBYTE (output_file))
+    if (STRINGP (output_file))
       output_file = ENCODE_FILE (output_file);
     UNGCPRO;
   }
@@ -468,11 +465,8 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int 
filefd,
       report_file_error ("Searching for program", args[0]);
   }
 
-  /* If program file name starts with /: for quoting a magic name,
-     discard that.  */
-  if (SBYTES (path) > 2 && SREF (path, 0) == '/'
-      && SREF (path, 1) == ':')
-    path = Fsubstring (path, make_number (2), Qnil);
+  /* Remove "/:" from PATH.  */
+  path = remove_slash_colon (path);
 
   SAFE_NALLOCA (new_argv, 1, nargs < 4 ? 2 : nargs - 2);
 
@@ -498,8 +492,7 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int 
filefd,
       }
     else
       new_argv[1] = 0;
-    if (STRING_MULTIBYTE (path))
-      path = ENCODE_FILE (path);
+    path = ENCODE_FILE (path);
     new_argv[0] = SSDATA (path);
     UNGCPRO;
   }
@@ -852,7 +845,7 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int 
filefd,
                                 (process_coding.dst_pos_byte
                                  + process_coding.produced),
                                 0);
-                 display_on_the_fly = 0;
+                 display_on_the_fly = false;
                  process_coding = saved_coding;
                  carryover = nread;
                  /* Make the above condition always fail in the future.  */
@@ -884,9 +877,9 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int 
filefd,
              /* This variable might have been set to 0 for code
                 detection.  In that case, set it back to 1 because
                 we should have already detected a coding system.  */
-             display_on_the_fly = 1;
+             display_on_the_fly = true;
            }
-         immediate_quit = 1;
+         immediate_quit = true;
          QUIT;
        }
     give_up: ;
@@ -1315,13 +1308,10 @@ child_setup (int in, int out, int err, char **new_argv, 
bool set_pgrp,
 
     if (STRINGP (display))
       {
-       char *vdata;
-
        if (MAX_ALLOCA - sizeof "DISPLAY=" < SBYTES (display))
          exec_failed (new_argv[0], ENOMEM);
-       vdata = alloca (sizeof "DISPLAY=" + SBYTES (display));
-       strcpy (vdata, "DISPLAY=");
-       strcat (vdata, SSDATA (display));
+       char *vdata = alloca (sizeof "DISPLAY=" + SBYTES (display));
+       lispstpcpy (stpcpy (vdata, "DISPLAY="), display);
        new_env = add_env (env, new_env, vdata);
       }
 
diff --git a/src/casefiddle.c b/src/casefiddle.c
index a7477bb..8755353 100644
--- a/src/casefiddle.c
+++ b/src/casefiddle.c
@@ -1,6 +1,6 @@
 /* GNU Emacs case conversion functions.
 
-Copyright (C) 1985, 1994, 1997-1999, 2001-2014 Free Software Foundation,
+Copyright (C) 1985, 1994, 1997-1999, 2001-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -30,8 +30,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "keymap.h"
 
 enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP};
-
-Lisp_Object Qidentity;
 
 static Lisp_Object
 casify_object (enum case_action flag, Lisp_Object obj)
diff --git a/src/casetab.c b/src/casetab.c
index aea1f2f..b086abc 100644
--- a/src/casetab.c
+++ b/src/casetab.c
@@ -1,5 +1,5 @@
 /* GNU Emacs routines to deal with case tables.
-   Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 Author: Howard Gayle
 
@@ -24,7 +24,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "character.h"
 #include "buffer.h"
 
-static Lisp_Object Qcase_table_p, Qcase_table;
 Lisp_Object Vascii_downcase_table;
 static Lisp_Object Vascii_upcase_table;
 Lisp_Object Vascii_canon_table;
diff --git a/src/category.c b/src/category.c
index a4610e4..b20493e 100644
--- a/src/category.c
+++ b/src/category.c
@@ -1,6 +1,6 @@
 /* GNU Emacs routines to deal with category tables.
 
-Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
   2005, 2006, 2007, 2008, 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -53,8 +53,6 @@ bset_category_table (struct buffer *b, Lisp_Object val)
 
    For the moment, we are not using this feature.  */
 static int category_table_version;
-
-static Lisp_Object Qcategory_table, Qcategoryp, Qcategorysetp, 
Qcategory_table_p;
 
 /* Category set staff.  */
 
diff --git a/src/ccl.c b/src/ccl.c
index 54093bf..053544c 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -1,5 +1,5 @@
 /* CCL (Code Conversion Language) interpreter.
-   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
@@ -34,21 +34,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "ccl.h"
 #include "coding.h"
 
-Lisp_Object Qccl, Qcclp;
-
-/* This symbol is a property which associates with ccl program vector.
-   Ex: (get 'ccl-big5-encoder 'ccl-program) returns ccl program vector.  */
-static Lisp_Object Qccl_program;
-
-/* These symbols are properties which associate with code conversion
-   map and their ID respectively.  */
-static Lisp_Object Qcode_conversion_map;
-static Lisp_Object Qcode_conversion_map_id;
-
-/* Symbols of ccl program have this property, a value of the property
-   is an index for Vccl_program_table. */
-static Lisp_Object Qccl_program_idx;
-
 /* Table of registered CCL programs.  Each element is a vector of
    NAME, CCL_PROG, RESOLVEDP, and UPDATEDP, where NAME (symbol) is the
    name of the program, CCL_PROG (vector) is the compiled code of the
@@ -2297,8 +2282,17 @@ syms_of_ccl (void)
 
   DEFSYM (Qccl, "ccl");
   DEFSYM (Qcclp, "cclp");
+
+  /* This symbol is a property which associates with ccl program vector.
+     Ex: (get 'ccl-big5-encoder 'ccl-program) returns ccl program vector.  */
   DEFSYM (Qccl_program, "ccl-program");
+
+  /* Symbols of ccl program have this property, a value of the property
+     is an index for Vccl_program_table. */
   DEFSYM (Qccl_program_idx, "ccl-program-idx");
+
+  /* These symbols are properties which associate with code conversion
+     map and their ID respectively.  */
   DEFSYM (Qcode_conversion_map, "code-conversion-map");
   DEFSYM (Qcode_conversion_map_id, "code-conversion-map-id");
 
diff --git a/src/ccl.h b/src/ccl.h
index b01a73f..7b72dc7 100644
--- a/src/ccl.h
+++ b/src/ccl.h
@@ -81,8 +81,6 @@ extern bool setup_ccl_program (struct ccl_program *, 
Lisp_Object);
 extern void ccl_driver (struct ccl_program *, int *, int *, int, int,
                         Lisp_Object);
 
-extern Lisp_Object Qccl, Qcclp;
-
 #define CHECK_CCL_PROGRAM(x)                   \
   do {                                         \
     if (NILP (Fccl_program_p (x)))             \
diff --git a/src/character.c b/src/character.c
index a8e48df..39d32c9 100644
--- a/src/character.c
+++ b/src/character.c
@@ -1,6 +1,6 @@
 /* Basic character support.
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 Copyright (C) 1995, 1997, 1998, 2001 Electrotechnical Laboratory, JAPAN.
   Licensed to the Free Software Foundation.
 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
@@ -48,16 +48,10 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 #endif /* emacs */
 
-Lisp_Object Qcharacterp;
-
-static Lisp_Object Qauto_fill_chars;
-
 /* Char-table of information about which character to unify to which
    Unicode character.  Mainly used by the macro MAYBE_UNIFY_CHAR.  */
 Lisp_Object Vchar_unify_table;
 
-static Lisp_Object Qchar_script_table;
-
 
 
 /* If character code C has modifier masks, reflect them to the
@@ -238,14 +232,16 @@ DEFUN ("characterp", Fcharacterp, Scharacterp, 1, 2, 0,
 In Emacs Lisp, characters are represented by character codes, which
 are non-negative integers.  The function `max-char' returns the
 maximum character code.
-usage: (characterp OBJECT)  */)
+usage: (characterp OBJECT)  */
+       attributes: const)
   (Lisp_Object object, Lisp_Object ignore)
 {
   return (CHARACTERP (object) ? Qt : Qnil);
 }
 
 DEFUN ("max-char", Fmax_char, Smax_char, 0, 0, 0,
-       doc: /* Return the character of the maximum code.  */)
+       doc: /* Return the character of the maximum code.  */
+       attributes: const)
   (void)
 {
   return make_number (MAX_CHAR);
diff --git a/src/character.h b/src/character.h
index 624f4ff..5043880 100644
--- a/src/character.h
+++ b/src/character.h
@@ -657,7 +657,6 @@ extern ptrdiff_t c_string_width (const unsigned char *, 
ptrdiff_t, int,
 extern ptrdiff_t lisp_string_width (Lisp_Object, ptrdiff_t,
                                    ptrdiff_t *, ptrdiff_t *);
 
-extern Lisp_Object Qcharacterp;
 extern Lisp_Object Vchar_unify_table;
 extern Lisp_Object string_escape_byte8 (Lisp_Object);
 
diff --git a/src/charset.c b/src/charset.c
index 171a00f..9080840 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1,6 +1,6 @@
 /* Basic character set support.
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
   2005, 2006, 2007, 2008, 2009, 2010, 2011
@@ -66,16 +66,7 @@ struct charset *charset_table;
 static ptrdiff_t charset_table_size;
 static int charset_table_used;
 
-Lisp_Object Qcharsetp;
-
-/* Special charset symbols.  */
-Lisp_Object Qascii;
-static Lisp_Object Qeight_bit;
-static Lisp_Object Qiso_8859_1;
-static Lisp_Object Qunicode;
-static Lisp_Object Qemacs;
-
-/* The corresponding charsets.  */
+/* Special charsets corresponding to symbols.  */
 int charset_ascii;
 int charset_eight_bit;
 static int charset_iso_8859_1;
@@ -88,9 +79,6 @@ int charset_jisx0208_1978;
 int charset_jisx0208;
 int charset_ksc5601;
 
-/* Value of charset attribute `charset-iso-plane'.  */
-static Lisp_Object Qgl, Qgr;
-
 /* Charset of unibyte characters.  */
 int charset_unibyte;
 
@@ -101,10 +89,9 @@ Lisp_Object Vcharset_ordered_list;
    charsets.  */
 Lisp_Object Vcharset_non_preferred_head;
 
-/* Incremented everytime we change Vcharset_ordered_list.  This is
-   unsigned short so that it fits in Lisp_Int and never matches
-   -1.  */
-unsigned short charset_ordered_list_tick;
+/* Incremented every time we change the priority of charsets.
+   Wraps around.  */
+EMACS_UINT charset_ordered_list_tick;
 
 /* List of iso-2022 charsets.  */
 Lisp_Object Viso_2022_charset_list;
@@ -2159,7 +2146,7 @@ DEFUN ("set-charset-priority", Fset_charset_priority, 
Sset_charset_priority,
 usage: (set-charset-priority &rest charsets)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {
-  Lisp_Object new_head, old_list, arglist[2];
+  Lisp_Object new_head, old_list;
   Lisp_Object list_2022, list_emacs_mule;
   ptrdiff_t i;
   int id;
@@ -2175,9 +2162,9 @@ usage: (set-charset-priority &rest charsets)  */)
          new_head = Fcons (make_number (id), new_head);
        }
     }
-  arglist[0] = Fnreverse (new_head);
-  arglist[1] = Vcharset_non_preferred_head = old_list;
-  Vcharset_ordered_list = Fnconc (2, arglist);
+  Vcharset_non_preferred_head = old_list;
+  Vcharset_ordered_list = CALLN (Fnconc, Fnreverse (new_head), old_list);
+
   charset_ordered_list_tick++;
 
   charset_unibyte = -1;
@@ -2345,12 +2332,14 @@ syms_of_charset (void)
 {
   DEFSYM (Qcharsetp, "charsetp");
 
+  /* Special charset symbols.  */
   DEFSYM (Qascii, "ascii");
   DEFSYM (Qunicode, "unicode");
   DEFSYM (Qemacs, "emacs");
   DEFSYM (Qeight_bit, "eight-bit");
   DEFSYM (Qiso_8859_1, "iso-8859-1");
 
+  /* Value of charset attribute `charset-iso-plane'.  */
   DEFSYM (Qgl, "gl");
   DEFSYM (Qgr, "gr");
 
@@ -2363,17 +2352,8 @@ syms_of_charset (void)
   staticpro (&Vemacs_mule_charset_list);
   Vemacs_mule_charset_list = Qnil;
 
-  /* Don't staticpro them here.  It's done in syms_of_fns.  */
-  QCtest = intern_c_string (":test");
-  Qeq = intern_c_string ("eq");
-
   staticpro (&Vcharset_hash_table);
-  {
-    Lisp_Object args[2];
-    args[0] = QCtest;
-    args[1] = Qeq;
-    Vcharset_hash_table = Fmake_hash_table (2, args);
-  }
+  Vcharset_hash_table = CALLN (Fmake_hash_table, QCtest, Qeq);
 
   charset_table = charset_table_init;
   charset_table_size = ARRAYELTS (charset_table_init);
diff --git a/src/charset.h b/src/charset.h
index 4176ce5..f657598 100644
--- a/src/charset.h
+++ b/src/charset.h
@@ -1,5 +1,5 @@
 /* Header for charset handler.
-   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
@@ -253,8 +253,7 @@ extern struct charset *charset_table;
 extern Lisp_Object Vcharset_ordered_list;
 extern Lisp_Object Vcharset_non_preferred_head;
 
-/* Incremented everytime we change the priority of charsets.  */
-extern unsigned short charset_ordered_list_tick;
+extern EMACS_UINT charset_ordered_list_tick;
 
 extern Lisp_Object Viso_2022_charset_list;
 extern Lisp_Object Vemacs_mule_charset_list;
@@ -520,9 +519,6 @@ extern int 
iso_charset_table[ISO_MAX_DIMENSION][ISO_MAX_CHARS][ISO_MAX_FINAL];
 
 
 
-extern Lisp_Object Qcharsetp;
-
-extern Lisp_Object Qascii;
 extern int charset_ascii, charset_eight_bit;
 extern int charset_unicode;
 extern int charset_jisx0201_roman;
diff --git a/src/chartab.c b/src/chartab.c
index bfbbf79..acaabce 100644
--- a/src/chartab.c
+++ b/src/chartab.c
@@ -57,9 +57,6 @@ static const int chartab_bits[4] =
 /* Preamble for uniprop (Unicode character property) tables.  See the
    comment of "Unicode character property tables".  */
 
-/* Purpose of uniprop tables. */
-static Lisp_Object Qchar_code_property_table;
-
 /* Types of decoder and encoder functions for uniprop values.  */
 typedef Lisp_Object (*uniprop_decoder_t) (Lisp_Object, Lisp_Object);
 typedef Lisp_Object (*uniprop_encoder_t) (Lisp_Object, Lisp_Object);
@@ -1258,8 +1255,10 @@ uniprop_encode_value_numeric (Lisp_Object table, 
Lisp_Object value)
       break;
   value = make_number (i);
   if (i == size)
-    set_char_table_extras (table, 4, Fvconcat (2, ((Lisp_Object []) {
-      XCHAR_TABLE (table)->extras[4], Fmake_vector (make_number (1), value) 
})));
+    set_char_table_extras (table, 4,
+                          CALLN (Fvconcat,
+                                 XCHAR_TABLE (table)->extras[4],
+                                 Fmake_vector (make_number (1), value)));
   return make_number (i);
 }
 
@@ -1378,6 +1377,7 @@ CHAR-TABLE must be what returned by 
`unicode-property-table-internal'. */)
 void
 syms_of_chartab (void)
 {
+  /* Purpose of uniprop tables. */
   DEFSYM (Qchar_code_property_table, "char-code-property-table");
 
   defsubr (&Smake_char_table);
diff --git a/src/cm.c b/src/cm.c
index ad4d963..474f280 100644
--- a/src/cm.c
+++ b/src/cm.c
@@ -1,5 +1,5 @@
 /* Cursor motion subroutines for GNU Emacs.
-   Copyright (C) 1985, 1995, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1995, 2001-2015 Free Software Foundation, Inc.
     based primarily on public domain code written by Chris Torek
 
 This file is part of GNU Emacs.
diff --git a/src/cm.h b/src/cm.h
index d7f27e1..829abc0 100644
--- a/src/cm.h
+++ b/src/cm.h
@@ -1,5 +1,5 @@
 /* Cursor motion calculation definitions for GNU Emacs
-   Copyright (C) 1985, 1989, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1989, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/cmds.c b/src/cmds.c
index 9a05218..270fc39 100644
--- a/src/cmds.c
+++ b/src/cmds.c
@@ -1,6 +1,6 @@
 /* Simple built-in editing commands.
 
-Copyright (C) 1985, 1993-1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1993-1998, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -31,11 +31,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "dispextern.h"
 #include "frame.h"
 
-static Lisp_Object Qkill_forward_chars, Qkill_backward_chars;
-
-/* A possible value for a buffer's overwrite-mode variable.  */
-static Lisp_Object Qoverwrite_mode_binary;
-
 static int internal_self_insert (int, EMACS_INT);
 
 DEFUN ("forward-point", Fforward_point, Sforward_point, 1, 1, 0,
@@ -322,9 +317,6 @@ At the end, it runs `post-self-insert-hook'.  */)
    return 0.  A value of 1 indicates this *might* not have been simple.
    A value of 2 means this did things that call for an undo boundary.  */
 
-static Lisp_Object Qexpand_abbrev;
-static Lisp_Object Qpost_self_insert_hook;
-
 static int
 internal_self_insert (int c, EMACS_INT n)
 {
@@ -507,7 +499,7 @@ internal_self_insert (int c, EMACS_INT n)
     }
 
   /* Run hooks for electric keys.  */
-  Frun_hooks (1, &Qpost_self_insert_hook);
+  run_hook (Qpost_self_insert_hook);
 
   return hairy;
 }
@@ -519,7 +511,10 @@ syms_of_cmds (void)
 {
   DEFSYM (Qkill_backward_chars, "kill-backward-chars");
   DEFSYM (Qkill_forward_chars, "kill-forward-chars");
+
+  /* A possible value for a buffer's overwrite-mode variable.  */
   DEFSYM (Qoverwrite_mode_binary, "overwrite-mode-binary");
+
   DEFSYM (Qexpand_abbrev, "expand-abbrev");
   DEFSYM (Qpost_self_insert_hook, "post-self-insert-hook");
 
diff --git a/src/coding.c b/src/coding.c
index e4b52f6..a7128ee 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -1,5 +1,5 @@
 /* Coding system handler (conversion, detection, etc).
-   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
@@ -303,35 +303,6 @@ encode_coding_XXX (struct coding_system *coding)
 
 Lisp_Object Vcoding_system_hash_table;
 
-static Lisp_Object Qcoding_system, Qeol_type;
-static Lisp_Object Qcoding_aliases;
-Lisp_Object Qunix, Qdos;
-static Lisp_Object Qmac;
-Lisp_Object Qbuffer_file_coding_system;
-static Lisp_Object Qpost_read_conversion, Qpre_write_conversion;
-static Lisp_Object Qdefault_char;
-Lisp_Object Qno_conversion, Qundecided;
-Lisp_Object Qcharset, Qutf_8;
-static Lisp_Object Qiso_2022;
-static Lisp_Object Qutf_16, Qshift_jis, Qbig5;
-static Lisp_Object Qbig, Qlittle;
-static Lisp_Object Qcoding_system_history;
-static Lisp_Object Qvalid_codes;
-static Lisp_Object QCcategory, QCmnemonic, QCdefault_char;
-static Lisp_Object QCdecode_translation_table, QCencode_translation_table;
-static Lisp_Object QCpost_read_conversion, QCpre_write_conversion;
-static Lisp_Object QCascii_compatible_p;
-
-Lisp_Object Qcall_process, Qcall_process_region;
-Lisp_Object Qstart_process, Qopen_network_stream;
-static Lisp_Object Qtarget_idx;
-
-static Lisp_Object Qinsufficient_source, Qinvalid_source, Qinterrupted;
-
-/* If a symbol has this property, evaluate the value to define the
-   symbol as a coding system.  */
-static Lisp_Object Qcoding_system_define_form;
-
 /* Format of end-of-line decided by system.  This is Qunix on
    Unix and Mac, Qdos on DOS/Windows.
    This has an effect only for external encoding (i.e. for output to
@@ -340,17 +311,6 @@ static Lisp_Object system_eol_type;
 
 #ifdef emacs
 
-Lisp_Object Qcoding_system_p, Qcoding_system_error;
-
-/* Coding system emacs-mule and raw-text are for converting only
-   end-of-line format.  */
-Lisp_Object Qemacs_mule, Qraw_text;
-Lisp_Object Qutf_8_emacs;
-
-#if defined (WINDOWSNT) || defined (CYGWIN)
-static Lisp_Object Qutf_16le;
-#endif
-
 /* Coding-systems are handed between Emacs Lisp programs and C internal
    routines by the following three variables.  */
 /* Coding system to be used to encode text for terminal display when
@@ -359,11 +319,6 @@ struct coding_system safe_terminal_coding;
 
 #endif /* emacs */
 
-Lisp_Object Qtranslation_table;
-Lisp_Object Qtranslation_table_id;
-static Lisp_Object Qtranslation_table_for_decode;
-static Lisp_Object Qtranslation_table_for_encode;
-
 /* Two special coding systems.  */
 static Lisp_Object Vsjis_coding_system;
 static Lisp_Object Vbig5_coding_system;
@@ -395,7 +350,8 @@ static Lisp_Object Vbig5_coding_system;
 #define CODING_ISO_BOL(coding) \
   ((coding)->spec.iso_2022.bol)
 #define CODING_ISO_INVOKED_CHARSET(coding, plane)      \
-  CODING_ISO_DESIGNATION ((coding), CODING_ISO_INVOCATION ((coding), (plane)))
+  (CODING_ISO_INVOCATION (coding, plane) < 0 ? -1      \
+   : CODING_ISO_DESIGNATION (coding, CODING_ISO_INVOCATION (coding, plane)))
 #define CODING_ISO_CMP_STATUS(coding)  \
   (&(coding)->spec.iso_2022.cmp_status)
 #define CODING_ISO_EXTSEGMENT_LEN(coding)      \
@@ -10716,7 +10672,7 @@ Any alias or subsidiary coding system is not a base 
coding system.  */)
 
 DEFUN ("coding-system-plist", Fcoding_system_plist, Scoding_system_plist,
        1, 1, 0,
-       doc: "Return the property list of CODING-SYSTEM.")
+       doc: /* Return the property list of CODING-SYSTEM.  */)
   (Lisp_Object coding_system)
 {
   Lisp_Object spec, attrs;
@@ -10821,12 +10777,7 @@ void
 syms_of_coding (void)
 {
   staticpro (&Vcoding_system_hash_table);
-  {
-    Lisp_Object args[2];
-    args[0] = QCtest;
-    args[1] = Qeq;
-    Vcoding_system_hash_table = Fmake_hash_table (2, args);
-  }
+  Vcoding_system_hash_table = CALLN (Fmake_hash_table, QCtest, Qeq);
 
   staticpro (&Vsjis_coding_system);
   Vsjis_coding_system = Qnil;
@@ -10903,6 +10854,7 @@ syms_of_coding (void)
 
   DEFSYM (Qcoding_system_p, "coding-system-p");
 
+  /* Error signaled when there's a problem with detecting a coding system.  */
   DEFSYM (Qcoding_system_error, "coding-system-error");
   Fput (Qcoding_system_error, Qerror_conditions,
        listn (CONSTYPE_PURE, 2, Qcoding_system_error, Qerror));
@@ -10917,6 +10869,8 @@ syms_of_coding (void)
 
   DEFSYM (Qvalid_codes, "valid-codes");
 
+  /* Coding system emacs-mule and raw-text are for converting only
+     end-of-line format.  */
   DEFSYM (Qemacs_mule, "emacs-mule");
 
   DEFSYM (QCcategory, ":category");
@@ -10979,6 +10933,9 @@ syms_of_coding (void)
   DEFSYM (Qinsufficient_source, "insufficient-source");
   DEFSYM (Qinvalid_source, "invalid-source");
   DEFSYM (Qinterrupted, "interrupted");
+
+  /* If a symbol has this property, evaluate the value to define the
+     symbol as a coding system.  */
   DEFSYM (Qcoding_system_define_form, "coding-system-define-form");
 
   defsubr (&Scoding_system_p);
@@ -11308,63 +11265,59 @@ See also `keyboard-translate-table'.
 Use of this variable for character code unification was rendered
 obsolete in Emacs 23.1 and later, since Unicode is now the basis of
 internal character representation.  */);
-    Vtranslation_table_for_input = Qnil;
-
-  {
-    Lisp_Object args[coding_arg_undecided_max];
-    Lisp_Object plist[16];
-    int i;
-
-    for (i = 0; i < coding_arg_undecided_max; i++)
-      args[i] = Qnil;
-
-    plist[0] = intern_c_string (":name");
-    plist[1] = args[coding_arg_name] = Qno_conversion;
-    plist[2] = intern_c_string (":mnemonic");
-    plist[3] = args[coding_arg_mnemonic] = make_number ('=');
-    plist[4] = intern_c_string (":coding-type");
-    plist[5] = args[coding_arg_coding_type] = Qraw_text;
-    plist[6] = intern_c_string (":ascii-compatible-p");
-    plist[7] = args[coding_arg_ascii_compatible_p] = Qt;
-    plist[8] = intern_c_string (":default-char");
-    plist[9] = args[coding_arg_default_char] = make_number (0);
-    plist[10] = intern_c_string (":for-unibyte");
-    plist[11] = args[coding_arg_for_unibyte] = Qt;
-    plist[12] = intern_c_string (":docstring");
-    plist[13] = build_pure_c_string ("Do no conversion.\n\
-\n\
-When you visit a file with this coding, the file is read into a\n\
-unibyte buffer as is, thus each byte of a file is treated as a\n\
-character.");
-    plist[14] = intern_c_string (":eol-type");
-    plist[15] = args[coding_arg_eol_type] = Qunix;
-    args[coding_arg_plist] = Flist (16, plist);
-    Fdefine_coding_system_internal (coding_arg_max, args);
-
-    plist[1] = args[coding_arg_name] = Qundecided;
-    plist[3] = args[coding_arg_mnemonic] = make_number ('-');
-    plist[5] = args[coding_arg_coding_type] = Qundecided;
-    /* This is already set.
-       plist[7] = args[coding_arg_ascii_compatible_p] = Qt; */
-    plist[8] = intern_c_string (":charset-list");
-    plist[9] = args[coding_arg_charset_list] = Fcons (Qascii, Qnil);
-    plist[11] = args[coding_arg_for_unibyte] = Qnil;
-    plist[13] = build_pure_c_string ("No conversion on encoding, automatic 
conversion on decoding.");
-    plist[15] = args[coding_arg_eol_type] = Qnil;
-    args[coding_arg_plist] = Flist (16, plist);
-    args[coding_arg_undecided_inhibit_null_byte_detection] = make_number (0);
-    args[coding_arg_undecided_inhibit_iso_escape_detection] = make_number (0);
-    Fdefine_coding_system_internal (coding_arg_undecided_max, args);
-  }
+  Vtranslation_table_for_input = Qnil;
+
+  Lisp_Object args[coding_arg_undecided_max];
+  memclear (args, sizeof args);
+
+  Lisp_Object plist[] =
+    {
+      intern_c_string (":name"),
+      args[coding_arg_name] = Qno_conversion,
+      intern_c_string (":mnemonic"),
+      args[coding_arg_mnemonic] = make_number ('='),
+      intern_c_string (":coding-type"),
+      args[coding_arg_coding_type] = Qraw_text,
+      intern_c_string (":ascii-compatible-p"),
+      args[coding_arg_ascii_compatible_p] = Qt,
+      intern_c_string (":default-char"),
+      args[coding_arg_default_char] = make_number (0),
+      intern_c_string (":for-unibyte"),
+      args[coding_arg_for_unibyte] = Qt,
+      intern_c_string (":docstring"),
+      (build_pure_c_string
+       ("Do no conversion.\n"
+       "\n"
+       "When you visit a file with this coding, the file is read into a\n"
+       "unibyte buffer as is, thus each byte of a file is treated as a\n"
+       "character.")),
+      intern_c_string (":eol-type"),
+      args[coding_arg_eol_type] = Qunix,
+    };
+  args[coding_arg_plist] = CALLMANY (Flist, plist);
+  Fdefine_coding_system_internal (coding_arg_max, args);
+
+  plist[1] = args[coding_arg_name] = Qundecided;
+  plist[3] = args[coding_arg_mnemonic] = make_number ('-');
+  plist[5] = args[coding_arg_coding_type] = Qundecided;
+  /* This is already set.
+     plist[7] = args[coding_arg_ascii_compatible_p] = Qt; */
+  plist[8] = intern_c_string (":charset-list");
+  plist[9] = args[coding_arg_charset_list] = Fcons (Qascii, Qnil);
+  plist[11] = args[coding_arg_for_unibyte] = Qnil;
+  plist[13] = build_pure_c_string ("No conversion on encoding, "
+                                  "automatic conversion on decoding.");
+  plist[15] = args[coding_arg_eol_type] = Qnil;
+  args[coding_arg_plist] = CALLMANY (Flist, plist);
+  args[coding_arg_undecided_inhibit_null_byte_detection] = make_number (0);
+  args[coding_arg_undecided_inhibit_iso_escape_detection] = make_number (0);
+  Fdefine_coding_system_internal (coding_arg_undecided_max, args);
 
   setup_coding_system (Qno_conversion, &safe_terminal_coding);
 
-  {
-    int i;
+  for (int i = 0; i < coding_category_max; i++)
+    Fset (AREF (Vcoding_category_table, i), Qno_conversion);
 
-    for (i = 0; i < coding_category_max; i++)
-      Fset (AREF (Vcoding_category_table, i), Qno_conversion);
-  }
 #if defined (DOS_NT)
   system_eol_type = Qdos;
 #else
diff --git a/src/coding.h b/src/coding.h
index ffd839f..d49d786 100644
--- a/src/coding.h
+++ b/src/coding.h
@@ -1,5 +1,5 @@
 /* Header for coding system handler.
-   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
@@ -763,23 +763,7 @@ extern Lisp_Object from_unicode_buffer (const wchar_t 
*wstr);
 extern Lisp_Object preferred_coding_system (void);
 
 
-extern Lisp_Object Qutf_8, Qutf_8_emacs;
-
-extern Lisp_Object Qcoding_category_index;
-extern Lisp_Object Qcoding_system_p;
-extern Lisp_Object Qraw_text, Qemacs_mule, Qno_conversion, Qundecided;
-extern Lisp_Object Qbuffer_file_coding_system;
-
-extern Lisp_Object Qunix, Qdos;
-
-extern Lisp_Object Qtranslation_table;
-extern Lisp_Object Qtranslation_table_id;
-
 #ifdef emacs
-extern Lisp_Object Qfile_coding_system;
-extern Lisp_Object Qcall_process, Qcall_process_region;
-extern Lisp_Object Qstart_process, Qopen_network_stream;
-extern Lisp_Object Qwrite_region;
 
 extern char *emacs_strerror (int);
 
@@ -789,9 +773,6 @@ extern struct coding_system safe_terminal_coding;
 
 #endif
 
-/* Error signaled when there's a problem with detecting coding system */
-extern Lisp_Object Qcoding_system_error;
-
 extern char emacs_mule_bytes[256];
 
 #endif /* EMACS_CODING_H */
diff --git a/src/commands.h b/src/commands.h
index 1a09f68..19cd2e4 100644
--- a/src/commands.h
+++ b/src/commands.h
@@ -1,5 +1,5 @@
 /* Definitions needed by most editing commands.
-   Copyright (C) 1985, 1994, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/composite.c b/src/composite.c
index 8982c90..577b979 100644
--- a/src/composite.c
+++ b/src/composite.c
@@ -1,5 +1,5 @@
 /* Composite sequence support.
-   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 
2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H14PRO021
@@ -134,8 +134,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 */
 
 
-Lisp_Object Qcomposition;
-
 /* Table of pointers to the structure `composition' indexed by
    COMPOSITION-ID.  This structure is for storing information about
    each composition except for COMPONENTS-VEC.  */
@@ -152,8 +150,6 @@ ptrdiff_t n_compositions;
    COMPOSITION-ID.  */
 Lisp_Object composition_hash_table;
 
-static Lisp_Object Qauto_composed;
-static Lisp_Object Qauto_composition_function;
 /* Maximum number of characters to look back for
    auto-compositions.  */
 #define MAX_AUTO_COMPOSITION_LOOKBACK 3
@@ -1032,7 +1028,8 @@ composition_compute_stop_pos (struct composition_it 
*cmp_it, ptrdiff_t charpos,
                }
            }
        }
-      if (charpos == endpos)
+      if (charpos == endpos
+         && !(STRINGP (string) && endpos == SCHARS (string)))
        {
          /* We couldn't find a composition point before ENDPOS.  But,
             some character after ENDPOS may be composed with
@@ -1894,36 +1891,18 @@ syms_of_composite (void)
   DEFSYM (Qcomposition, "composition");
 
   /* Make a hash table for static composition.  */
-  {
-    Lisp_Object args[6];
-
-    args[0] = QCtest;
-    args[1] = Qequal;
-    args[2] = QCweakness;
-    /* We used to make the hash table weak so that unreferenced
-       compositions can be garbage-collected.  But, usually once
-       created compositions are repeatedly used in an Emacs session,
-       and thus it's not worth to save memory in such a way.  So, we
-       make the table not weak.  */
-    args[3] = Qnil;
-    args[4] = QCsize;
-    args[5] = make_number (311);
-    composition_hash_table = Fmake_hash_table (6, args);
-    staticpro (&composition_hash_table);
-  }
+  /* We used to make the hash table weak so that unreferenced
+     compositions can be garbage-collected.  But, usually once
+     created compositions are repeatedly used in an Emacs session,
+     and thus it's not worth to save memory in such a way.  So, we
+     make the table not weak.  */
+  Lisp_Object args[] = {QCtest, Qequal, QCsize, make_number (311)};
+  composition_hash_table = CALLMANY (Fmake_hash_table, args);
+  staticpro (&composition_hash_table);
 
   /* Make a hash table for glyph-string.  */
-  {
-    Lisp_Object args[6];
-    args[0] = QCtest;
-    args[1] = Qequal;
-    args[2] = QCweakness;
-    args[3] = Qnil;
-    args[4] = QCsize;
-    args[5] = make_number (311);
-    gstring_hash_table = Fmake_hash_table (6, args);
-    staticpro (&gstring_hash_table);
-  }
+  gstring_hash_table = CALLMANY (Fmake_hash_table, args);
+  staticpro (&gstring_hash_table);
 
   staticpro (&gstring_work_headers);
   gstring_work_headers = make_uninit_vector (8);
diff --git a/src/composite.h b/src/composite.h
index f01ae32..fb9f9eb 100644
--- a/src/composite.h
+++ b/src/composite.h
@@ -1,5 +1,5 @@
 /* Header for composite sequence handler.
-   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 
2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H14PRO021
@@ -156,7 +156,7 @@ struct composition {
   /* How many columns the overall glyphs occupy on the screen.  This
      gives an approximate value for column calculation in
      Fcurrent_column, and etc.  */
-  unsigned short width;
+  int width;
 
   /* Method of the composition.  */
   enum composition_method method;
@@ -190,7 +190,6 @@ extern ptrdiff_t n_compositions;
 #define CHECK_BORDER   (CHECK_HEAD | CHECK_TAIL)
 #define CHECK_ALL      (CHECK_BORDER | CHECK_INSIDE)
 
-extern Lisp_Object Qcomposition;
 extern Lisp_Object composition_hash_table;
 extern ptrdiff_t get_composition_id (ptrdiff_t, ptrdiff_t, ptrdiff_t,
                                     Lisp_Object, Lisp_Object);
diff --git a/src/conf_post.h b/src/conf_post.h
index 8667e25..1a080fa 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -1,6 +1,6 @@
 /* conf_post.h --- configure.ac includes this via AH_BOTTOM
 
-Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2014 Free Software
+Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -245,7 +245,9 @@ extern void _DebPrint (const char *fmt, ...);
 # define ATTRIBUTE_MALLOC
 #endif
 
-#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__)
+#if (__clang__                                 \
+     ? __has_attribute (alloc_size)            \
+     : 4 < __GNUC__ + (3 <= __GNUC_MINOR__))
 # define ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
 #else
 # define ATTRIBUTE_ALLOC_SIZE(args)
@@ -309,8 +311,8 @@ extern void _DebPrint (const char *fmt, ...);
    Other .c files should not define INLINE.
 
    C99 compilers compile functions like 'incr' as C99-style extern
-   inline functions.  Pre-C99 GCCs do something similar with
-   GNU-specific keywords.  Pre-C99 non-GCC compilers use static
+   inline functions.  Buggy GCC implementations do something similar with
+   GNU-specific keywords.  Buggy non-GCC compilers use static
    functions, which bloats the code but is good enough.  */
 
 #ifndef INLINE
diff --git a/src/cygw32.c b/src/cygw32.c
index b7386ab..03739b1 100644
--- a/src/cygw32.c
+++ b/src/cygw32.c
@@ -1,5 +1,5 @@
 /* Cygwin support routines.
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/cygw32.h b/src/cygw32.h
index 84be609..e14e3d1 100644
--- a/src/cygw32.h
+++ b/src/cygw32.h
@@ -1,5 +1,5 @@
 /* Header for Cygwin support routines.
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/data.c b/src/data.c
index 9977a3a..d06b991 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1,5 +1,5 @@
 /* Primitive operations on Lisp data types for GNU Emacs Lisp interpreter.
-   Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2014 Free Software
+   Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -37,59 +37,8 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "font.h"
 #include "keymap.h"
 
-Lisp_Object Qnil, Qt, Qquote, Qlambda, Qunbound;
-static Lisp_Object Qsubr;
-Lisp_Object Qerror_conditions, Qerror_message, Qtop_level;
-Lisp_Object Qerror, Quser_error, Qquit, Qargs_out_of_range;
-static Lisp_Object Qwrong_length_argument;
-static Lisp_Object Qwrong_type_argument;
-Lisp_Object Qvoid_variable, Qvoid_function;
-static Lisp_Object Qcyclic_function_indirection;
-static Lisp_Object Qcyclic_variable_indirection;
-Lisp_Object Qcircular_list;
-static Lisp_Object Qsetting_constant;
-Lisp_Object Qinvalid_read_syntax;
-Lisp_Object Qinvalid_function, Qwrong_number_of_arguments, Qno_catch;
-Lisp_Object Qend_of_file, Qarith_error, Qmark_inactive;
-Lisp_Object Qbeginning_of_buffer, Qend_of_buffer, Qbuffer_read_only;
-Lisp_Object Qtext_read_only;
-
-Lisp_Object Qintegerp, Qwholenump, Qsymbolp, Qlistp, Qconsp;
-static Lisp_Object Qnatnump;
-Lisp_Object Qstringp, Qarrayp, Qsequencep, Qbufferp;
-Lisp_Object Qchar_or_string_p, Qmarkerp, Qinteger_or_marker_p, Qvectorp;
-Lisp_Object Qbool_vector_p;
-Lisp_Object Qbuffer_or_string_p;
-static Lisp_Object Qkeywordp, Qboundp;
-Lisp_Object Qfboundp;
-Lisp_Object Qchar_table_p, Qvector_or_char_table_p;
-
-Lisp_Object Qcdr;
-static Lisp_Object Qad_advice_info, Qad_activate_internal;
-
-static Lisp_Object Qdomain_error, Qsingularity_error, Qunderflow_error;
-Lisp_Object Qrange_error, Qoverflow_error;
-
-Lisp_Object Qfloatp;
-Lisp_Object Qnumberp, Qnumber_or_marker_p;
-
-Lisp_Object Qinteger, Qsymbol;
-static Lisp_Object Qcons, Qfloat, Qmisc, Qstring, Qvector;
-Lisp_Object Qwindow;
-static Lisp_Object Qoverlay, Qwindow_configuration;
-static Lisp_Object Qprocess, Qmarker;
-static Lisp_Object Qcompiled_function, Qframe;
-Lisp_Object Qbuffer;
-static Lisp_Object Qchar_table, Qbool_vector, Qhash_table;
-static Lisp_Object Qsubrp;
-static Lisp_Object Qmany, Qunevalled;
-Lisp_Object Qfont_spec, Qfont_entity, Qfont_object;
-static Lisp_Object Qdefun;
-
-Lisp_Object Qinteractive_form;
-static Lisp_Object Qdefalias_fset_function;
-
-static void swap_in_symval_forwarding (struct Lisp_Symbol *, struct 
Lisp_Buffer_Local_Value *);
+static void swap_in_symval_forwarding (struct Lisp_Symbol *,
+                                      struct Lisp_Buffer_Local_Value *);
 
 static bool
 BOOLFWDP (union Lisp_Fwd *a)
@@ -227,7 +176,8 @@ args_out_of_range_3 (Lisp_Object a1, Lisp_Object a2, 
Lisp_Object a3)
 /* Data type predicates.  */
 
 DEFUN ("eq", Feq, Seq, 2, 2, 0,
-       doc: /* Return t if the two args are the same Lisp object.  */)
+       doc: /* Return t if the two args are the same Lisp object.  */
+       attributes: const)
   (Lisp_Object obj1, Lisp_Object obj2)
 {
   if (EQ (obj1, obj2))
@@ -236,7 +186,8 @@ DEFUN ("eq", Feq, Seq, 2, 2, 0,
 }
 
 DEFUN ("null", Fnull, Snull, 1, 1, 0,
-       doc: /* Return t if OBJECT is nil.  */)
+       doc: /* Return t if OBJECT is nil.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (NILP (object))
@@ -314,7 +265,8 @@ for example, (type-of 1) returns `integer'.  */)
 }
 
 DEFUN ("consp", Fconsp, Sconsp, 1, 1, 0,
-       doc: /* Return t if OBJECT is a cons cell.  */)
+       doc: /* Return t if OBJECT is a cons cell.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (CONSP (object))
@@ -323,7 +275,8 @@ DEFUN ("consp", Fconsp, Sconsp, 1, 1, 0,
 }
 
 DEFUN ("atom", Fatom, Satom, 1, 1, 0,
-       doc: /* Return t if OBJECT is not a cons cell.  This includes nil.  */)
+       doc: /* Return t if OBJECT is not a cons cell.  This includes nil.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (CONSP (object))
@@ -333,7 +286,8 @@ DEFUN ("atom", Fatom, Satom, 1, 1, 0,
 
 DEFUN ("listp", Flistp, Slistp, 1, 1, 0,
        doc: /* Return t if OBJECT is a list, that is, a cons cell or nil.
-Otherwise, return nil.  */)
+Otherwise, return nil.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (CONSP (object) || NILP (object))
@@ -342,7 +296,8 @@ Otherwise, return nil.  */)
 }
 
 DEFUN ("nlistp", Fnlistp, Snlistp, 1, 1, 0,
-       doc: /* Return t if OBJECT is not a list.  Lists include nil.  */)
+       doc: /* Return t if OBJECT is not a list.  Lists include nil.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (CONSP (object) || NILP (object))
@@ -351,7 +306,8 @@ DEFUN ("nlistp", Fnlistp, Snlistp, 1, 1, 0,
 }
 
 DEFUN ("symbolp", Fsymbolp, Ssymbolp, 1, 1, 0,
-       doc: /* Return t if OBJECT is a symbol.  */)
+       doc: /* Return t if OBJECT is a symbol.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (SYMBOLP (object))
@@ -384,7 +340,8 @@ DEFUN ("vectorp", Fvectorp, Svectorp, 1, 1, 0,
 }
 
 DEFUN ("stringp", Fstringp, Sstringp, 1, 1, 0,
-       doc: /* Return t if OBJECT is a string.  */)
+       doc: /* Return t if OBJECT is a string.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (STRINGP (object))
@@ -487,7 +444,8 @@ DEFUN ("byte-code-function-p", Fbyte_code_function_p, 
Sbyte_code_function_p,
 }
 
 DEFUN ("char-or-string-p", Fchar_or_string_p, Schar_or_string_p, 1, 1, 0,
-       doc: /* Return t if OBJECT is a character or a string.  */)
+       doc: /* Return t if OBJECT is a character or a string.  */
+       attributes: const)
   (register Lisp_Object object)
 {
   if (CHARACTERP (object) || STRINGP (object))
@@ -496,7 +454,8 @@ DEFUN ("char-or-string-p", Fchar_or_string_p, 
Schar_or_string_p, 1, 1, 0,
 }
 
 DEFUN ("integerp", Fintegerp, Sintegerp, 1, 1, 0,
-       doc: /* Return t if OBJECT is an integer.  */)
+       doc: /* Return t if OBJECT is an integer.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (INTEGERP (object))
@@ -514,7 +473,8 @@ DEFUN ("integer-or-marker-p", Finteger_or_marker_p, 
Sinteger_or_marker_p, 1, 1,
 }
 
 DEFUN ("natnump", Fnatnump, Snatnump, 1, 1, 0,
-       doc: /* Return t if OBJECT is a nonnegative integer.  */)
+       doc: /* Return t if OBJECT is a nonnegative integer.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (NATNUMP (object))
@@ -523,7 +483,8 @@ DEFUN ("natnump", Fnatnump, Snatnump, 1, 1, 0,
 }
 
 DEFUN ("numberp", Fnumberp, Snumberp, 1, 1, 0,
-       doc: /* Return t if OBJECT is a number (floating point or integer).  */)
+       doc: /* Return t if OBJECT is a number (floating point or integer).  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (NUMBERP (object))
@@ -543,7 +504,8 @@ DEFUN ("number-or-marker-p", Fnumber_or_marker_p,
 }
 
 DEFUN ("floatp", Ffloatp, Sfloatp, 1, 1, 0,
-       doc: /* Return t if OBJECT is a floating point number.  */)
+       doc: /* Return t if OBJECT is a floating point number.  */
+       attributes: const)
   (Lisp_Object object)
 {
   if (FLOATP (object))
@@ -729,7 +691,7 @@ DEFUN ("fset", Ffset, Sfset, 2, 2, 0,
 
   /* Convert to eassert or remove after GC bug is found.  In the
      meantime, check unconditionally, at a slight perf hit.  */
-  if (valid_lisp_object_p (definition) < 1)
+  if (! valid_lisp_object_p (definition))
     emacs_abort ();
 
   set_symbol_function (symbol, definition);
@@ -1010,9 +972,8 @@ wrong_range (Lisp_Object min, Lisp_Object max, Lisp_Object 
wrong)
   AUTO_STRING (value_should_be_from, "Value should be from ");
   AUTO_STRING (to, " to ");
   xsignal2 (Qerror,
-           Fconcat (4, ((Lisp_Object [])
-                        {value_should_be_from, Fnumber_to_string (min),
-                         to, Fnumber_to_string (max)})),
+           CALLN (Fconcat, value_should_be_from, Fnumber_to_string (min),
+                  to, Fnumber_to_string (max)),
            wrong);
 }
 
@@ -3005,7 +2966,8 @@ DEFUN ("lognot", Flognot, Slognot, 1, 1, 0,
 DEFUN ("byteorder", Fbyteorder, Sbyteorder, 0, 0, 0,
        doc: /* Return the byteorder for the machine.
 Returns 66 (ASCII uppercase B) for big endian machines or 108 (ASCII
-lowercase l) for small endian machines.  */)
+lowercase l) for small endian machines.  */
+       attributes: const)
   (void)
 {
   unsigned i = 0x04030201;
@@ -3583,10 +3545,6 @@ syms_of_data (void)
   PUT_ERROR (Qunderflow_error, Fcons (Qdomain_error, arith_tail),
             "Arithmetic underflow error");
 
-  staticpro (&Qnil);
-  staticpro (&Qt);
-  staticpro (&Qunbound);
-
   /* Types that type-of returns.  */
   DEFSYM (Qinteger, "integer");
   DEFSYM (Qsymbol, "symbol");
diff --git a/src/dbusbind.c b/src/dbusbind.c
index 4852739..54e92cc 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -1,5 +1,5 @@
 /* Elisp bindings for D-Bus.
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -41,37 +41,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #endif
 
 
-/* Subroutines.  */
-static Lisp_Object Qdbus__init_bus;
-static Lisp_Object Qdbus_get_unique_name;
-static Lisp_Object Qdbus_message_internal;
-
-/* D-Bus error symbol.  */
-static Lisp_Object Qdbus_error;
-
-/* Lisp symbols of the system and session buses.  */
-static Lisp_Object QCdbus_system_bus, QCdbus_session_bus;
-
-/* Lisp symbol for method call timeout.  */
-static Lisp_Object QCdbus_timeout;
-
-/* Lisp symbols of D-Bus types.  */
-static Lisp_Object QCdbus_type_byte, QCdbus_type_boolean;
-static Lisp_Object QCdbus_type_int16, QCdbus_type_uint16;
-static Lisp_Object QCdbus_type_int32, QCdbus_type_uint32;
-static Lisp_Object QCdbus_type_int64, QCdbus_type_uint64;
-static Lisp_Object QCdbus_type_double, QCdbus_type_string;
-static Lisp_Object QCdbus_type_object_path, QCdbus_type_signature;
-#ifdef DBUS_TYPE_UNIX_FD
-static Lisp_Object QCdbus_type_unix_fd;
-#endif
-static Lisp_Object QCdbus_type_array, QCdbus_type_variant;
-static Lisp_Object QCdbus_type_struct, QCdbus_type_dict_entry;
-
-/* Lisp symbols of objects in `dbus-registered-objects-table'.  */
-static Lisp_Object QCdbus_registered_serial, QCdbus_registered_method;
-static Lisp_Object QCdbus_registered_signal;
-
 /* Alist of D-Bus buses we are polling for messages.
    The key is the symbol or string of the bus, and the value is the
    connection address.  */
@@ -357,7 +326,7 @@ xd_signature_cat (char *signature, char const *x)
   ptrdiff_t xlen = strlen (x);
   if (DBUS_MAXIMUM_SIGNATURE_LENGTH - xlen <= siglen)
     string_overflow ();
-  strcat (signature, x);
+  strcpy (signature + siglen, x);
 }
 
 /* Compute SIGNATURE of OBJECT.  It must have a form that it can be
@@ -1755,15 +1724,21 @@ syms_of_dbusbind (void)
   DEFSYM (Qdbus_message_internal, "dbus-message-internal");
   defsubr (&Sdbus_message_internal);
 
+  /* D-Bus error symbol.  */
   DEFSYM (Qdbus_error, "dbus-error");
   Fput (Qdbus_error, Qerror_conditions,
        list2 (Qdbus_error, Qerror));
   Fput (Qdbus_error, Qerror_message,
        build_pure_c_string ("D-Bus error"));
 
+  /* Lisp symbols of the system and session buses.  */
   DEFSYM (QCdbus_system_bus, ":system");
   DEFSYM (QCdbus_session_bus, ":session");
+
+  /* Lisp symbol for method call timeout.  */
   DEFSYM (QCdbus_timeout, ":timeout");
+
+  /* Lisp symbols of D-Bus types.  */
   DEFSYM (QCdbus_type_byte, ":byte");
   DEFSYM (QCdbus_type_boolean, ":boolean");
   DEFSYM (QCdbus_type_int16, ":int16");
@@ -1783,6 +1758,8 @@ syms_of_dbusbind (void)
   DEFSYM (QCdbus_type_variant, ":variant");
   DEFSYM (QCdbus_type_struct, ":struct");
   DEFSYM (QCdbus_type_dict_entry, ":dict-entry");
+
+  /* Lisp symbols of objects in `dbus-registered-objects-table'.  */
   DEFSYM (QCdbus_registered_serial, ":serial");
   DEFSYM (QCdbus_registered_method, ":method");
   DEFSYM (QCdbus_registered_signal, ":signal");
@@ -1872,12 +1849,7 @@ string denoting the bus address.  SERIAL is the serial 
number of the
 non-blocking method call, a reply is expected.  Both arguments must
 not be nil.  The value in the hash table is HANDLER, the function to
 be called when the D-Bus reply message arrives.  */);
-  {
-    Lisp_Object args[2];
-    args[0] = QCtest;
-    args[1] = Qequal;
-    Vdbus_registered_objects_table = Fmake_hash_table (2, args);
-  }
+  Vdbus_registered_objects_table = CALLN (Fmake_hash_table, QCtest, Qequal);
 
   DEFVAR_LISP ("dbus-debug", Vdbus_debug,
     doc: /* If non-nil, debug messages of D-Bus bindings are raised.  */);
diff --git a/src/decompress.c b/src/decompress.c
index 24ce852..b14f0a2 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -1,5 +1,5 @@
 /* Interface to zlib.
-   Copyright (C) 2013-2014 Free Software Foundation, Inc.
+   Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -28,29 +28,15 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 #include <verify.h>
 
-static Lisp_Object Qzlib_dll;
-
 #ifdef WINDOWSNT
-#include <windows.h>
-#include "w32.h"
-
-/* Macro for defining functions that will be loaded from the zlib DLL.  */
-#define DEF_ZLIB_FN(rettype,func,args) static rettype (FAR CDECL 
*fn_##func)args
-
-/* Macro for loading zlib functions from the library.  */
-#define LOAD_ZLIB_FN(lib,func) {                                       \
-    fn_##func = (void *) GetProcAddress (lib, #func);                  \
-    if (!fn_##func) return false;                                      \
-  }
+# include <windows.h>
+# include "w32.h"
 
-DEF_ZLIB_FN (int, inflateInit2_,
-            (z_streamp strm, int  windowBits, const char *version, int 
stream_size));
-
-DEF_ZLIB_FN (int, inflate,
-            (z_streamp strm, int flush));
-
-DEF_ZLIB_FN (int, inflateEnd,
-            (z_streamp strm));
+DEF_DLL_FN (int, inflateInit2_,
+           (z_streamp strm, int windowBits, const char *version,
+            int stream_size));
+DEF_DLL_FN (int, inflate, (z_streamp strm, int flush));
+DEF_DLL_FN (int, inflateEnd, (z_streamp strm));
 
 static bool zlib_initialized;
 
@@ -62,20 +48,19 @@ init_zlib_functions (void)
   if (!library)
     return false;
 
-  LOAD_ZLIB_FN (library, inflateInit2_);
-  LOAD_ZLIB_FN (library, inflate);
-  LOAD_ZLIB_FN (library, inflateEnd);
+  LOAD_DLL_FN (library, inflateInit2_);
+  LOAD_DLL_FN (library, inflate);
+  LOAD_DLL_FN (library, inflateEnd);
   return true;
 }
 
-#define fn_inflateInit2(strm, windowBits) \
-        fn_inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
-
-#else /* !WINDOWSNT */
+# undef inflate
+# undef inflateEnd
+# undef inflateInit2_
 
-#define fn_inflateInit2                inflateInit2
-#define fn_inflate             inflate
-#define fn_inflateEnd          inflateEnd
+# define inflate fn_inflate
+# define inflateEnd fn_inflateEnd
+# define inflateInit2_ fn_inflateInit2_
 
 #endif /* WINDOWSNT */
 
@@ -90,7 +75,7 @@ static void
 unwind_decompress (void *ddata)
 {
   struct decompress_unwind_data *data = ddata;
-  fn_inflateEnd (data->stream);
+  inflateEnd (data->stream);
 
   /* Delete any uncompressed data already inserted on error.  */
   if (data->start)
@@ -167,7 +152,7 @@ This function can be called only in unibyte buffers.  */)
 
   /* The magic number 32 apparently means "autodetect both the gzip and
      zlib formats" according to zlib.h.  */
-  if (fn_inflateInit2 (&stream, MAX_WBITS + 32) != Z_OK)
+  if (inflateInit2 (&stream, MAX_WBITS + 32) != Z_OK)
     return Qnil;
 
   unwind_data.start = iend;
@@ -197,7 +182,7 @@ This function can be called only in unibyte buffers.  */)
       stream.avail_in = avail_in;
       stream.next_out = GPT_ADDR;
       stream.avail_out = avail_out;
-      inflate_status = fn_inflate (&stream, Z_NO_FLUSH);
+      inflate_status = inflate (&stream, Z_NO_FLUSH);
       pos_byte += avail_in - stream.avail_in;
       decompressed = avail_out - stream.avail_out;
       insert_from_gap (decompressed, decompressed, 0);
diff --git a/src/deps.mk b/src/deps.mk
index 3fdbbe6..71a5f42 100644
--- a/src/deps.mk
+++ b/src/deps.mk
@@ -1,7 +1,7 @@
 ### deps.mk --- src/Makefile fragment for GNU Emacs
 
-## Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2014
-##   Free Software Foundation, Inc.
+## Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2015 Free Software
+## Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/src/dired.c b/src/dired.c
index 8afba24..5038e04 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -1,5 +1,5 @@
 /* Lisp functions for making directory listings.
-   Copyright (C) 1985-1986, 1993-1994, 1999-2014 Free Software
+   Copyright (C) 1985-1986, 1993-1994, 1999-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -51,13 +51,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "msdos.h"     /* for fstatat */
 #endif
 
-static Lisp_Object Qdirectory_files;
-static Lisp_Object Qdirectory_files_and_attributes;
-static Lisp_Object Qfile_name_completion;
-static Lisp_Object Qfile_name_all_completions;
-static Lisp_Object Qfile_attributes;
-static Lisp_Object Qfile_attributes_lessp;
-
 static ptrdiff_t scmp (const char *, const char *, ptrdiff_t);
 static Lisp_Object file_attributes (int, char const *, Lisp_Object);
 
@@ -73,8 +66,9 @@ dirent_namelen (struct dirent *dp)
 }
 
 static DIR *
-open_directory (char const *name, int *fdp)
+open_directory (Lisp_Object dirname, int *fdp)
 {
+  char *name = SSDATA (dirname);
   DIR *d;
   int fd, opendir_errno;
 
@@ -105,8 +99,9 @@ open_directory (char const *name, int *fdp)
 
   unblock_input ();
 
+  if (!d)
+    report_file_errno ("Opening directory", dirname, opendir_errno);
   *fdp = fd;
-  errno = opendir_errno;
   return d;
 }
 
@@ -127,6 +122,35 @@ directory_files_internal_unwind (void *dh)
   unblock_input ();
 }
 
+/* Return the next directory entry from DIR; DIR's name is DIRNAME.
+   If there are no more directory entries, return a null pointer.
+   Signal any unrecoverable errors.  */
+
+static struct dirent *
+read_dirent (DIR *dir, Lisp_Object dirname)
+{
+  while (true)
+    {
+      errno = 0;
+      struct dirent *dp = readdir (dir);
+      if (dp || errno == 0)
+       return dp;
+      if (! (errno == EAGAIN || errno == EINTR))
+       {
+#ifdef WINDOWSNT
+         /* The MS-Windows implementation of 'opendir' doesn't
+            actually open a directory until the first call to
+            'readdir'.  If 'readdir' fails to open the directory, it
+            sets errno to ENOENT or EACCES, see w32.c.  */
+         if (errno == ENOENT || errno == EACCES)
+           report_file_error ("Opening directory", dirname);
+#endif
+         report_file_error ("Reading directory", dirname);
+       }
+      QUIT;
+    }
+}
+
 /* Function shared by Fdirectory_files and Fdirectory_files_and_attributes.
    If not ATTRS, return a list of directory filenames;
    if ATTRS, return a list of directory filenames and their attributes.
@@ -137,15 +161,12 @@ directory_files_internal (Lisp_Object directory, 
Lisp_Object full,
                          Lisp_Object match, Lisp_Object nosort, bool attrs,
                          Lisp_Object id_format)
 {
-  DIR *d;
-  int fd;
   ptrdiff_t directory_nbytes;
   Lisp_Object list, dirfilename, encoded_directory;
   struct re_pattern_buffer *bufp = NULL;
   bool needsep = 0;
   ptrdiff_t count = SPECPDL_INDEX ();
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
-  struct dirent *dp;
 #ifdef WINDOWSNT
   Lisp_Object w32_save = Qnil;
 #endif
@@ -183,17 +204,14 @@ directory_files_internal (Lisp_Object directory, 
Lisp_Object full,
   /* Note: ENCODE_FILE and DECODE_FILE can GC because they can run
      run_pre_post_conversion_on_str which calls Lisp directly and
      indirectly.  */
-  if (STRING_MULTIBYTE (dirfilename))
-    dirfilename = ENCODE_FILE (dirfilename);
-  encoded_directory = (STRING_MULTIBYTE (directory)
-                      ? ENCODE_FILE (directory) : directory);
+  dirfilename = ENCODE_FILE (dirfilename);
+  encoded_directory = ENCODE_FILE (directory);
 
   /* Now *bufp is the compiled form of MATCH; don't call anything
      which might compile a new regexp until we're done with the loop!  */
 
-  d = open_directory (SSDATA (dirfilename), &fd);
-  if (d == NULL)
-    report_file_error ("Opening directory", directory);
+  int fd;
+  DIR *d = open_directory (dirfilename, &fd);
 
   /* Unfortunately, we can now invoke expand-file-name and
      file-attributes on filenames, both of which can throw, so we must
@@ -230,28 +248,13 @@ directory_files_internal (Lisp_Object directory, 
Lisp_Object full,
       || !IS_ANY_SEP (SREF (directory, directory_nbytes - 1)))
     needsep = 1;
 
-  /* Loop reading blocks until EOF or error.  */
-  for (;;)
+  /* Loop reading directory entries.  */
+  for (struct dirent *dp; (dp = read_dirent (d, directory)); )
     {
-      ptrdiff_t len;
-      bool wanted = 0;
-      Lisp_Object name, finalname;
+      ptrdiff_t len = dirent_namelen (dp);
+      Lisp_Object name = make_unibyte_string (dp->d_name, len);
+      Lisp_Object finalname = name;
       struct gcpro gcpro1, gcpro2;
-
-      errno = 0;
-      dp = readdir (d);
-      if (!dp)
-       {
-         if (errno == EAGAIN || errno == EINTR)
-           {
-             QUIT;
-             continue;
-           }
-         break;
-       }
-
-      len = dirent_namelen (dp);
-      name = finalname = make_unibyte_string (dp->d_name, len);
       GCPRO2 (finalname, name);
 
       /* Note: DECODE_FILE can GC; it should protect its argument,
@@ -264,9 +267,8 @@ directory_files_internal (Lisp_Object directory, 
Lisp_Object full,
       immediate_quit = 1;
       QUIT;
 
-      if (NILP (match)
-         || re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0)
-       wanted = 1;
+      bool wanted = (NILP (match)
+                    || re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0);
 
       immediate_quit = 0;
 
@@ -450,14 +452,11 @@ These are all file names in directory DIRECTORY which 
begin with FILE.  */)
 }
 
 static int file_name_completion_stat (int, struct dirent *, struct stat *);
-static Lisp_Object Qdefault_directory;
 
 static Lisp_Object
 file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag,
                      Lisp_Object predicate)
 {
-  DIR *d;
-  int fd;
   ptrdiff_t bestmatchsize = 0;
   int matchcount = 0;
   /* If ALL_FLAG is 1, BESTMATCH is the list of all matches, decoded.
@@ -490,38 +489,18 @@ file_name_completion (Lisp_Object file, Lisp_Object 
dirname, bool all_flag,
   /* Actually, this is not quite true any more: we do most of the completion
      work with decoded file names, but we still do some filtering based
      on the encoded file name.  */
-  encoded_file = STRING_MULTIBYTE (file) ? ENCODE_FILE (file) : file;
-
+  encoded_file = ENCODE_FILE (file);
   encoded_dir = ENCODE_FILE (Fdirectory_file_name (dirname));
-
-  d = open_directory (SSDATA (encoded_dir), &fd);
-  if (!d)
-    report_file_error ("Opening directory", dirname);
-
+  int fd;
+  DIR *d = open_directory (encoded_dir, &fd);
   record_unwind_protect_ptr (directory_files_internal_unwind, d);
 
-  /* Loop reading blocks */
-  /* (att3b compiler bug requires do a null comparison this way) */
-  while (1)
+  /* Loop reading directory entries.  */
+  for (struct dirent *dp; (dp = read_dirent (d, dirname)); )
     {
-      struct dirent *dp;
-      ptrdiff_t len;
+      ptrdiff_t len = dirent_namelen (dp);
       bool canexclude = 0;
 
-      errno = 0;
-      dp = readdir (d);
-      if (!dp)
-       {
-         if (errno == EAGAIN || errno == EINTR)
-           {
-             QUIT;
-             continue;
-           }
-         break;
-       }
-
-      len = dirent_namelen (dp);
-
       QUIT;
       if (len < SCHARS (encoded_file)
          || (scmp (dp->d_name, SSDATA (encoded_file),
@@ -642,23 +621,14 @@ file_name_completion (Lisp_Object file, Lisp_Object 
dirname, bool all_flag,
       name = DECODE_FILE (name);
 
       {
-       Lisp_Object regexps;
+       Lisp_Object regexps, table = (completion_ignore_case
+                                     ? Vascii_canon_table : Qnil);
 
        /* Ignore this element if it fails to match all the regexps.  */
-       if (completion_ignore_case)
-         {
-           for (regexps = Vcompletion_regexp_list; CONSP (regexps);
-                regexps = XCDR (regexps))
-             if (fast_string_match_ignore_case (XCAR (regexps), name) < 0)
-               break;
-         }
-       else
-         {
-           for (regexps = Vcompletion_regexp_list; CONSP (regexps);
-                regexps = XCDR (regexps))
-             if (fast_string_match (XCAR (regexps), name) < 0)
-               break;
-         }
+       for (regexps = Vcompletion_regexp_list; CONSP (regexps);
+            regexps = XCDR (regexps))
+         if (fast_string_match_internal (XCAR (regexps), name, table) < 0)
+           break;
 
        if (CONSP (regexps))
          continue;
@@ -933,7 +903,6 @@ so last access time will always be midnight of that day.  
*/)
 static Lisp_Object
 file_attributes (int fd, char const *name, Lisp_Object id_format)
 {
-  Lisp_Object values[12];
   struct stat s;
   int lstat_result;
 
@@ -960,10 +929,6 @@ file_attributes (int fd, char const *name, Lisp_Object 
id_format)
   if (lstat_result < 0)
     return Qnil;
 
-  values[0] = (S_ISLNK (s.st_mode) ? emacs_readlinkat (fd, name)
-              : S_ISDIR (s.st_mode) ? Qt : Qnil);
-  values[1] = make_number (s.st_nlink);
-
   if (!(NILP (id_format) || EQ (id_format, Qinteger)))
     {
       block_input ();
@@ -971,34 +936,35 @@ file_attributes (int fd, char const *name, Lisp_Object 
id_format)
       gname = stat_gname (&s);
       unblock_input ();
     }
-  if (uname)
-    values[2] = DECODE_SYSTEM (build_unibyte_string (uname));
-  else
-    values[2] = make_fixnum_or_float (s.st_uid);
-  if (gname)
-    values[3] = DECODE_SYSTEM (build_unibyte_string (gname));
-  else
-    values[3] = make_fixnum_or_float (s.st_gid);
-
-  values[4] = make_lisp_time (get_stat_atime (&s));
-  values[5] = make_lisp_time (get_stat_mtime (&s));
-  values[6] = make_lisp_time (get_stat_ctime (&s));
-
-  /* If the file size is a 4-byte type, assume that files of sizes in
-     the 2-4 GiB range wrap around to negative values, as this is a
-     common bug on older 32-bit platforms.  */
-  if (sizeof (s.st_size) == 4)
-    values[7] = make_fixnum_or_float (s.st_size & 0xffffffffu);
-  else
-    values[7] = make_fixnum_or_float (s.st_size);
 
   filemodestring (&s, modes);
-  values[8] = make_string (modes, 10);
-  values[9] = Qt;
-  values[10] = INTEGER_TO_CONS (s.st_ino);
-  values[11] = INTEGER_TO_CONS (s.st_dev);
 
-  return Flist (ARRAYELTS (values), values);
+  return CALLN (Flist,
+               (S_ISLNK (s.st_mode) ? emacs_readlinkat (fd, name)
+                : S_ISDIR (s.st_mode) ? Qt : Qnil),
+               make_number (s.st_nlink),
+               (uname
+                ? DECODE_SYSTEM (build_unibyte_string (uname))
+                : make_fixnum_or_float (s.st_uid)),
+               (gname
+                ? DECODE_SYSTEM (build_unibyte_string (gname))
+                : make_fixnum_or_float (s.st_gid)),
+               make_lisp_time (get_stat_atime (&s)),
+               make_lisp_time (get_stat_mtime (&s)),
+               make_lisp_time (get_stat_ctime (&s)),
+
+               /* If the file size is a 4-byte type, assume that
+                  files of sizes in the 2-4 GiB range wrap around to
+                  negative values, as this is a common bug on older
+                  32-bit platforms.  */
+               make_fixnum_or_float (sizeof (s.st_size) == 4
+                                     ? s.st_size & 0xffffffffu
+                                     : s.st_size),
+
+               make_string (modes, 10),
+               Qt,
+               INTEGER_TO_CONS (s.st_ino),
+               INTEGER_TO_CONS (s.st_dev));
 }
 
 DEFUN ("file-attributes-lessp", Ffile_attributes_lessp, 
Sfile_attributes_lessp, 2, 2, 0,
diff --git a/src/dispextern.h b/src/dispextern.h
index 0dd0887..4139479 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -1,6 +1,6 @@
 /* Interface definitions for display code.
 
-Copyright (C) 1985, 1993-1994, 1997-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1993-1994, 1997-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -389,10 +389,9 @@ struct glyph
 
   /* Lisp object source of this glyph.  Currently either a buffer or a
      string, if the glyph was produced from characters which came from
-     a buffer or a string; or Lisp integer zero (a.k.a. "null object")
-     if the glyph was inserted by redisplay for its own purposes, such
-     as padding or truncation/continuation glyphs, or the
-     overlay-arrow glyphs on TTYs.  */
+     a buffer or a string; or nil if the glyph was inserted by
+     redisplay for its own purposes, such as padding, truncation, or
+     continuation glyphs, or the overlay-arrow glyphs on TTYs.  */
   Lisp_Object object;
 
   /* Width in pixels.  */
@@ -1717,8 +1716,8 @@ struct face
      attributes except the font.  */
   struct face *ascii_face;
 
-#ifdef HAVE_XFT
-  /* Extra member that a font-driver uses privately.  */
+#if defined HAVE_XFT || defined HAVE_FREETYPE
+/* Extra member that a font-driver uses privately.  */
   void *extra;
 #endif
 };
@@ -1851,10 +1850,10 @@ GLYPH_CODE_P (Lisp_Object gc)
               : TYPE_MAXIMUM (EMACS_INT)))));
 }
 
-/* Non-zero means face attributes have been changed since the last
+/* True means face attributes have been changed since the last
    redisplay.  Used in redisplay_internal.  */
 
-extern int face_change_count;
+extern bool face_change;
 
 /* For reordering of bidirectional text.  */
 
@@ -1908,7 +1907,7 @@ typedef enum {
 } bidi_bracket_type_t;
 
 /* The basic directionality data type.  */
-typedef enum { NEUTRAL_DIR, L2R, R2L } bidi_dir_t;
+typedef enum { NEUTRAL_DIR = 0, L2R, R2L } bidi_dir_t;
 
 /* Data type for storing information about characters we need to
    remember.  */
@@ -1920,15 +1919,16 @@ struct bidi_saved_info {
 
 /* Data type for keeping track of information about saved embedding
    levels, override status, isolate status, and isolating sequence
-   runs.  */
+   runs.  This should be as tightly packed as possible, because there
+   are 127 such entries in each iterator state, and so the size of
+   cache is directly affected by the size of this struct.  */
 struct bidi_stack {
-  struct bidi_saved_info last_strong;
-  struct bidi_saved_info next_for_neutral;
-  struct bidi_saved_info prev_for_neutral;
-  unsigned level : 7;
-  bool_bf isolate_status : 1;
-  unsigned override : 2;
-  unsigned sos : 2;
+  ptrdiff_t next_for_neutral_pos;
+  unsigned next_for_neutral_type : 3;
+  unsigned last_strong_type : 3;
+  unsigned prev_for_neutral_type : 3;
+  unsigned char level;
+  unsigned char flags;         /* sos, override, isolate_status */
 };
 
 /* Data type for storing information about a string being iterated on.  */
@@ -2234,7 +2234,10 @@ struct it
   ptrdiff_t base_level_stop;
 
   /* Maximum string or buffer position + 1.  ZV when iterating over
-     current_buffer.  */
+     current_buffer.  When iterating over a string in display_string,
+     this can be smaller or greater than the number of string
+     characters, depending on the values of PRECISION and FIELD_WIDTH
+     with which display_string was called.  */
   ptrdiff_t end_charpos;
 
   /* C string to iterate over.  Non-null means get characters from
@@ -2521,11 +2524,11 @@ struct it
      Object is normally the buffer which is being rendered, but it can
      also be a Lisp string in case the current display element comes
      from an overlay string or from a display string (before- or
-     after-string).  It may also be nil when a C string is being
-     rendered, e.g., during mode-line or header-line update.  It can
-     also be a cons cell of the form `(space ...)', when we produce a
-     stretch glyph from a `display' specification.  Finally, it can be
-     a zero-valued Lisp integer, but only temporarily, when we are
+     after-string).  It may also be a zero-valued Lisp integer when a
+     C string is being rendered, e.g., during mode-line or header-line
+     update.  It can also be a cons cell of the form `(space ...)',
+     when we produce a stretch glyph from a `display' specification.
+     Finally, it can be nil, but only temporarily, when we are
      producing special glyphs for display purposes, like truncation
      and continuation glyphs, or blanks that extend each line to the
      edge of the window on a TTY.
@@ -2903,8 +2906,8 @@ struct redisplay_interface
 
 struct image_type
 {
-  /* A symbol uniquely identifying the image type, .e.g `jpeg'.  */
-  Lisp_Object *type;
+  /* Index of a symbol uniquely identifying the image type, e.g., 'jpeg'.  */
+  int type;
 
   /* Check that SPEC is a valid image specification for the given
      image type.  Value is true if SPEC is valid.  */
@@ -3173,6 +3176,7 @@ extern void bidi_push_it (struct bidi_it *);
 extern void bidi_pop_it (struct bidi_it *);
 extern void *bidi_shelve_cache (void);
 extern void bidi_unshelve_cache (void *, bool);
+extern ptrdiff_t bidi_find_first_overridden (struct bidi_it *);
 
 /* Defined in xdisp.c */
 
@@ -3217,7 +3221,6 @@ void move_it_in_display_line (struct it *it,
                              enum move_operation_enum op);
 bool in_display_vector_p (struct it *);
 int frame_mode_line_height (struct frame *);
-extern Lisp_Object Qtool_bar;
 extern bool redisplaying_p;
 extern bool help_echo_showing_p;
 extern Lisp_Object help_echo_string, help_echo_window;
@@ -3369,7 +3372,7 @@ void x_free_colors (struct frame *, unsigned long *, int);
 void update_face_from_frame_parameter (struct frame *, Lisp_Object,
                                        Lisp_Object);
 Lisp_Object tty_color_name (struct frame *, int);
-void clear_face_cache (int);
+void clear_face_cache (bool);
 unsigned long load_color (struct frame *, struct face *, Lisp_Object,
                           enum lface_attribute_index);
 char *choose_face_font (struct frame *, Lisp_Object *, Lisp_Object,
@@ -3377,27 +3380,23 @@ char *choose_face_font (struct frame *, Lisp_Object *, 
Lisp_Object,
 #ifdef HAVE_WINDOW_SYSTEM
 void prepare_face_for_display (struct frame *, struct face *);
 #endif
-int lookup_named_face (struct frame *, Lisp_Object, int);
+int lookup_named_face (struct frame *, Lisp_Object, bool);
 int lookup_basic_face (struct frame *, int);
 int smaller_face (struct frame *, int, int);
 int face_with_height (struct frame *, int, int);
-int lookup_derived_face (struct frame *, Lisp_Object, int, int);
+int lookup_derived_face (struct frame *, Lisp_Object, int, bool);
 void init_frame_faces (struct frame *);
 void free_frame_faces (struct frame *);
 void recompute_basic_faces (struct frame *);
-int face_at_buffer_position (struct window *w, ptrdiff_t pos,
-                             ptrdiff_t *endptr, ptrdiff_t limit,
-                             int mouse, int base_face_id);
-int face_for_overlay_string (struct window *w, ptrdiff_t pos,
-                             ptrdiff_t *endptr, ptrdiff_t limit,
-                             int mouse, Lisp_Object overlay);
-int face_at_string_position (struct window *w, Lisp_Object string,
-                             ptrdiff_t pos, ptrdiff_t bufpos,
-                             ptrdiff_t *endptr, enum face_id, int mouse);
+int face_at_buffer_position (struct window *, ptrdiff_t, ptrdiff_t *, 
ptrdiff_t,
+                             bool, int);
+int face_for_overlay_string (struct window *, ptrdiff_t, ptrdiff_t *, 
ptrdiff_t,
+                             bool, Lisp_Object);
+int face_at_string_position (struct window *, Lisp_Object, ptrdiff_t, 
ptrdiff_t,
+                             ptrdiff_t *, enum face_id, bool);
 int merge_faces (struct frame *, Lisp_Object, int, int);
 int compute_char_face (struct frame *, int, Lisp_Object);
 void free_all_realized_faces (Lisp_Object);
-extern Lisp_Object Qforeground_color, Qbackground_color;
 extern char unspecified_fg[], unspecified_bg[];
 
 /* Defined in xfns.c.  */
@@ -3442,11 +3441,11 @@ extern void cancel_hourglass (void);
 #endif /* HAVE_WINDOW_SYSTEM */
 
 
-/* Defined in xmenu.c  */
+/* Defined in xmenu.c.  */
 
 int popup_activated (void);
 
-/* Defined in dispnew.c */
+/* Defined in dispnew.c.  */
 
 extern Lisp_Object buffer_posn_from_coords (struct window *,
                                             int *, int *,
@@ -3482,16 +3481,15 @@ void blank_row (struct window *, struct glyph_row *, 
int);
 void clear_glyph_matrix_rows (struct glyph_matrix *, int, int);
 void clear_glyph_row (struct glyph_row *);
 void prepare_desired_row (struct window *, struct glyph_row *, bool);
-void update_single_window (struct window *, bool);
+void update_single_window (struct window *);
 void do_pending_window_change (bool);
 void change_frame_size (struct frame *, int, int, bool, bool, bool, bool);
 void init_display (void);
 void syms_of_display (void);
-extern Lisp_Object Qredisplay_dont_pause;
 extern void spec_glyph_lookup_face (struct window *, GLYPH *);
 extern void fill_up_frame_row_with_spaces (struct glyph_row *, int);
 
-/* Defined in terminal.c */
+/* Defined in terminal.c.  */
 
 extern void ring_bell (struct frame *);
 extern void update_begin (struct frame *);
diff --git a/src/dispnew.c b/src/dispnew.c
index d50d06f..3c8117e 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -1,6 +1,6 @@
 /* Updating of data structures for redisplay.
 
-Copyright (C) 1985-1988, 1993-1995, 1997-2014 Free Software Foundation,
+Copyright (C) 1985-1988, 1993-1995, 1997-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -102,8 +102,6 @@ static void set_window_update_flags (struct window *w, bool 
on_p);
 
 bool display_completed;
 
-Lisp_Object Qdisplay_table, Qredisplay_dont_pause;
-
 /* True means SIGWINCH happened when not safe.  */
 
 static bool delayed_size_change;
@@ -1341,8 +1339,8 @@ realloc_glyph_pool (struct glyph_pool *pool, struct dim 
matrix_dim)
       ptrdiff_t old_nglyphs = pool->nglyphs;
       pool->glyphs = xpalloc (pool->glyphs, &pool->nglyphs,
                              needed - old_nglyphs, -1, sizeof *pool->glyphs);
-      memset (pool->glyphs + old_nglyphs, 0,
-             (pool->nglyphs - old_nglyphs) * sizeof *pool->glyphs);
+      memclear (pool->glyphs + old_nglyphs,
+               (pool->nglyphs - old_nglyphs) * sizeof *pool->glyphs);
     }
 
   /* Remember the number of rows and columns because (a) we use them
@@ -3051,10 +3049,10 @@ update_frame (struct frame *f, bool force_p, bool 
inhibit_hairy_id_p)
   struct window *root_window = XWINDOW (f->root_window);
 
   if (redisplay_dont_pause)
-    force_p = 1;
+    force_p = true;
   else if (!force_p && detect_input_pending_ignore_squeezables ())
     {
-      paused_p = 1;
+      paused_p = true;
       goto do_pause;
     }
 
@@ -3074,7 +3072,7 @@ update_frame (struct frame *f, bool force_p, bool 
inhibit_hairy_id_p)
       /* Update the menu bar on X frames that don't have toolkit
         support.  */
       if (WINDOWP (f->menu_bar_window))
-       update_window (XWINDOW (f->menu_bar_window), 1);
+       update_window (XWINDOW (f->menu_bar_window), true);
 #endif
 
 #if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
@@ -3088,7 +3086,7 @@ update_frame (struct frame *f, bool force_p, bool 
inhibit_hairy_id_p)
            {
              Lisp_Object tem;
 
-             update_window (w, 1);
+             update_window (w, true);
              w->must_be_updated_p = false;
 
              /* Swap tool-bar strings.  We swap because we want to
@@ -3113,7 +3111,7 @@ update_frame (struct frame *f, bool force_p, bool 
inhibit_hairy_id_p)
       /* Build F's desired matrix from window matrices.  */
       build_frame_matrix (f);
 
-      /* Update the display  */
+      /* Update the display.  */
       update_begin (f);
       paused_p = update_frame_1 (f, force_p, inhibit_hairy_id_p, 1);
       update_end (f);
@@ -3225,7 +3223,7 @@ update_window_tree (struct window *w, bool force_p)
    If FORCE_P, don't stop updating if input is pending.  */
 
 void
-update_single_window (struct window *w, bool force_p)
+update_single_window (struct window *w)
 {
   if (w->must_be_updated_p)
     {
@@ -3234,12 +3232,9 @@ update_single_window (struct window *w, bool force_p)
       /* Record that this is not a frame-based redisplay.  */
       set_frame_matrix_frame (NULL);
 
-      if (redisplay_dont_pause)
-       force_p = 1;
-
       /* Update W.  */
       update_begin (f);
-      update_window (w, force_p);
+      update_window (w, true);
       update_end (f);
 
       /* Reset flag in W.  */
@@ -5167,7 +5162,7 @@ buffer_posn_from_coords (struct window *w, int *x, int 
*y, struct display_pos *p
 
   Fset_buffer (old_current_buffer);
 
-  *dx = x0 + it.first_visible_x - it.current_x;
+  *dx = to_x - it.current_x;
   *dy = *y - it.current_y;
 
   string = w->contents;
@@ -5242,9 +5237,9 @@ buffer_posn_from_coords (struct window *w, int *x, int 
*y, struct display_pos *p
     }
 
   /* Add extra (default width) columns if clicked after EOL. */
-  x1 = max (0, it.current_x + it.pixel_width - it.first_visible_x);
-  if (x0 > x1)
-    it.hpos += (x0 - x1) / WINDOW_FRAME_COLUMN_WIDTH (w);
+  x1 = max (0, it.current_x + it.pixel_width);
+  if (to_x > x1)
+    it.hpos += (to_x - x1) / WINDOW_FRAME_COLUMN_WIDTH (w);
 
   *x = it.hpos;
   *y = it.vpos;
@@ -5528,7 +5523,8 @@ change_frame_size_1 (struct frame *f, int new_width, int 
new_height,
 
       /* Adjust frame size but make sure x_set_window_size does not
         get called.  */
-      adjust_frame_size (f, new_width, new_height, 5, pretend, Qnil);
+      adjust_frame_size (f, new_width, new_height, 5, pretend,
+                        Qchange_frame_size);
     }
 }
 
@@ -5788,7 +5784,7 @@ immediately by pending input.  */)
 {
   ptrdiff_t count;
 
-  swallow_events (1);
+  swallow_events (true);
   if ((detect_input_pending_run_timers (1)
        && NILP (force) && !redisplay_dont_pause)
       || !NILP (Vexecuting_kbd_macro))
@@ -6194,7 +6190,9 @@ syms_of_display (void)
   frame_and_buffer_state = Fmake_vector (make_number (20), Qlambda);
   staticpro (&frame_and_buffer_state);
 
+  /* This is the "purpose" slot of a display table.  */
   DEFSYM (Qdisplay_table, "display-table");
+
   DEFSYM (Qredisplay_dont_pause, "redisplay-dont-pause");
 
   DEFVAR_INT ("baud-rate", baud_rate,
@@ -6267,8 +6265,15 @@ See `buffer-display-table' for more information.  */);
   Vstandard_display_table = Qnil;
 
   DEFVAR_BOOL ("redisplay-dont-pause", redisplay_dont_pause,
-              doc: /* Non-nil means display update isn't paused when input is 
detected.  */);
-  redisplay_dont_pause = 1;
+              doc: /* Nil means display update is paused when input is 
detected.  */);
+  /* Contrary to expectations, a value of "false" can be detrimental to
+     responsiveness since aborting a redisplay throws away some of the
+     work already performed.  It's usually more efficient (and gives
+     more prompt feedback to the user) to let the redisplay terminate,
+     and just completely skip the next command's redisplay (which is
+     done regardless of this setting if there's pending input at the
+     beginning of the next redisplay).  */
+  redisplay_dont_pause = true;
 
 #ifdef CANNOT_DUMP
   if (noninteractive)
diff --git a/src/disptab.h b/src/disptab.h
index 81c22b8..7afc862 100644
--- a/src/disptab.h
+++ b/src/disptab.h
@@ -1,5 +1,5 @@
 /* Things for GLYPHS and glyph tables.
-   Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -48,9 +48,6 @@ extern struct Lisp_Char_Table *window_display_table (struct 
window *);
 /* Defined in indent.c.  */
 extern struct Lisp_Char_Table *buffer_display_table (void);
 
-/* This is the `purpose' slot of a display table.  */
-extern Lisp_Object Qdisplay_table;
-
 /* Return the current length of the GLYPH table,
    or 0 if the table isn't currently valid.  */
 #define GLYPH_TABLE_LENGTH  \
diff --git a/src/doc.c b/src/doc.c
index 5290b5d..b5611c5 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -1,6 +1,7 @@
 /* Record indices of function doc strings stored in a file.
 
-Copyright (C) 1985-1986, 1993-1995, 1997-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software Foundation,
+Inc.
 
 This file is part of GNU Emacs.
 
@@ -34,14 +35,14 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "keyboard.h"
 #include "keymap.h"
 
-Lisp_Object Qfunction_documentation;
-
 /* Buffer used for reading from documentation file.  */
 static char *get_doc_string_buffer;
 static ptrdiff_t get_doc_string_buffer_size;
 
 static unsigned char *read_bytecode_pointer;
 
+static char const sibling_etc[] = "../etc/";
+
 /* `readchar' in lread.c calls back here to fetch the next byte.
    If UNREADFLAG is 1, we unread a byte.  */
 
@@ -89,7 +90,6 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool 
definition)
 {
   char *from, *to, *name, *p, *p1;
   int fd;
-  ptrdiff_t minsize;
   int offset;
   EMACS_INT position;
   Lisp_Object file, tem, pos;
@@ -122,21 +122,14 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool 
definition)
 
   tem = Ffile_name_absolute_p (file);
   file = ENCODE_FILE (file);
-  if (NILP (tem) && !doc_is_from_module_p (SSDATA (file)))
-    {
-      Lisp_Object docdir = ENCODE_FILE (Vdoc_directory);
-      minsize = SCHARS (docdir);
-      /* sizeof ("../etc/") == 8 */
-      if (minsize < 8)
-       minsize = 8;
-      name = SAFE_ALLOCA (minsize + SCHARS (file) + 8);
-      char *z = lispstpcpy (name, docdir);
-      strcpy (z, SSDATA (file));
-    }
-  else
-    {
-      name = SSDATA (file);
-    }
+  Lisp_Object docdir
+      = (NILP (tem) && !doc_is_from_module_p (SSDATA (file))) ? ENCODE_FILE 
(Vdoc_directory) : empty_unibyte_string;
+  ptrdiff_t docdir_sizemax = SBYTES (docdir) + 1;
+#ifndef CANNOT_DUMP
+  docdir_sizemax = max (docdir_sizemax, sizeof sibling_etc);
+#endif
+  name = SAFE_ALLOCA (docdir_sizemax + SBYTES (file));
+  lispstpcpy (lispstpcpy (name, docdir), file);
 
   fd = emacs_open (name, O_RDONLY, 0);
   if (fd < 0)
@@ -146,8 +139,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool 
definition)
        {
          /* Preparing to dump; DOC file is probably not installed.
             So check in ../etc.  */
-         strcpy (name, "../etc/");
-         strcat (name, SSDATA (file));
+         lispstpcpy (stpcpy (name, sibling_etc), file);
 
          fd = emacs_open (name, O_RDONLY, 0);
        }
@@ -316,19 +308,6 @@ read_doc_string (Lisp_Object filepos)
 static bool
 reread_doc_file (Lisp_Object file)
 {
-#if 0
-  Lisp_Object reply, prompt[3];
-  struct gcpro gcpro1;
-  GCPRO1 (file);
-  prompt[0] = build_string ("File ");
-  prompt[1] = NILP (file) ? Vdoc_file_name : file;
-  prompt[2] = build_string (" is out of sync.  Reload? ");
-  reply = Fy_or_n_p (Fconcat (3, prompt));
-  UNGCPRO;
-  if (NILP (reply))
-    return 0;
-#endif
-
   if (NILP (file))
     Fsnarf_documentation (Vdoc_file_name, Qnil);
   else
@@ -624,11 +603,10 @@ the same file name is found in the `doc-directory'.  */)
 #else /* CANNOT_DUMP */
         (0)
 #endif /* CANNOT_DUMP */
-          {
-            static char const sibling_etc[] = "../etc/";
-            dirname = sibling_etc;
-            dirlen = sizeof sibling_etc - 1;
-          }
+        {
+          dirname = sibling_etc;
+          dirlen = sizeof sibling_etc - 1;
+        }
       else
         {
           CHECK_STRING (Vdoc_directory);
@@ -638,16 +616,15 @@ the same file name is found in the `doc-directory'.  */)
     }
   else
     {
-      static char const empty_prefix_dir[] = "";
-      dirname = empty_prefix_dir;
-      dirlen = 0;
+      CHECK_STRING (Vdoc_directory);
+      dirname = SSDATA (Vdoc_directory);
+      dirlen = SBYTES (Vdoc_directory);
     }
 
   count = SPECPDL_INDEX ();
   USE_SAFE_ALLOCA;
   name = SAFE_ALLOCA (dirlen + SBYTES (filename) + 1);
-  strcpy (name, dirname);
-  strcat (name, SSDATA (filename));    /*** Add this line ***/
+  lispstpcpy (stpcpy (name, dirname), filename);       /*** Add this line ***/
 
 
   fd = emacs_open (name, O_RDONLY, 0);
diff --git a/src/doprnt.c b/src/doprnt.c
index cc4d0e4..68750f5 100644
--- a/src/doprnt.c
+++ b/src/doprnt.c
@@ -1,7 +1,7 @@
 /* Output like sprintf to a buffer of specified size.
    Also takes args differently: pass one pointer to the end
    of the format string in addition to the format string itself.
-   Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/dosfns.c b/src/dosfns.c
index bdd296b..e506e9f 100644
--- a/src/dosfns.c
+++ b/src/dosfns.c
@@ -1,6 +1,6 @@
 /* MS-DOS specific Lisp utilities.  Coded by Manabu Higashida, 1991.
    Major changes May-July 1993 Morten Welinder (only 10% original code left)
-   Copyright (C) 1991, 1993, 1996-1998, 2001-2014 Free Software
+   Copyright (C) 1991, 1993, 1996-1998, 2001-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -409,8 +409,6 @@ msdos_stdcolor_idx (const char *name)
 Lisp_Object
 msdos_stdcolor_name (int idx)
 {
-  extern Lisp_Object Qunspecified;
-
   if (idx == FACE_TTY_DEFAULT_FG_COLOR)
     return build_string (unspecified_fg);
   else if (idx == FACE_TTY_DEFAULT_BG_COLOR)
diff --git a/src/dosfns.h b/src/dosfns.h
index f32e634..1c0d2f7 100644
--- a/src/dosfns.h
+++ b/src/dosfns.h
@@ -2,7 +2,7 @@
    Coded by Manabu Higashida, 1991.
    Modified by Morten Welinder, 1993-1994.
 
-Copyright (C) 1991, 1994-1995, 1997, 1999, 2001-2014 Free Software
+Copyright (C) 1991, 1994-1995, 1997, 1999, 2001-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/editfns.c b/src/editfns.c
index 0a07886..7026ccc 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1,6 +1,6 @@
 /* Lisp functions pertaining to editing.
 
-Copyright (C) 1985-1987, 1989, 1993-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1987, 1989, 1993-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -76,16 +76,6 @@ static void update_buffer_properties (ptrdiff_t, ptrdiff_t);
 # define HAVE_TM_GMTOFF false
 #endif
 
-static Lisp_Object Qbuffer_access_fontify_functions;
-
-/* Symbol for the text property used to mark fields.  */
-
-Lisp_Object Qfield;
-
-/* A special value for Qfield properties.  */
-
-static Lisp_Object Qboundary;
-
 /* The startup value of the TZ environment variable; null if unset.  */
 static char const *initial_tz;
 
@@ -93,6 +83,17 @@ static char const *initial_tz;
    It is OK (though a bit slower) if the user chooses this value.  */
 static char dump_tz_string[] = "TZ=UtC0";
 
+/* The cached value of Vsystem_name.  This is used only to compare it
+   to Vsystem_name, so it need not be visible to the GC.  */
+static Lisp_Object cached_system_name;
+
+static void
+init_and_cache_system_name (void)
+{
+  init_system_name ();
+  cached_system_name = Vsystem_name;
+}
+
 void
 init_editfns (void)
 {
@@ -102,7 +103,7 @@ init_editfns (void)
   Lisp_Object tem;
 
   /* Set up system_name even when dumping.  */
-  init_system_name ();
+  init_and_cache_system_name ();
 
 #ifndef CANNOT_DUMP
   /* When just dumping out, set the time zone to a known unlikely value
@@ -904,17 +905,11 @@ save_excursion_restore (Lisp_Object info)
   if (! NILP (tem))
     {
       if (! EQ (omark, nmark))
-        {
-          tem = intern ("activate-mark-hook");
-          Frun_hooks (1, &tem);
-        }
+       run_hook (intern ("activate-mark-hook"));
     }
   /* If mark has ceased to be active, run deactivate hook.  */
   else if (! NILP (tem1))
-    {
-      tem = intern ("deactivate-mark-hook");
-      Frun_hooks (1, &tem);
-    }
+    run_hook (intern ("deactivate-mark-hook"));
 
   /* If buffer was visible in a window, and a different window was
      selected, and the old selected window is still showing this
@@ -1350,10 +1345,9 @@ name, or nil if there is no such user.  */)
       USE_SAFE_ALLOCA;
       char *r = SAFE_ALLOCA (strlen (p) + SBYTES (login) + 1);
       memcpy (r, p, q - p);
-      r[q - p] = 0;
-      strcat (r, SSDATA (login));
+      char *s = lispstpcpy (&r[q - p], login);
       r[q - p] = upcase ((unsigned char) r[q - p]);
-      strcat (r, q + 1);
+      strcpy (s, q + 1);
       full = build_string (r);
       SAFE_FREE ();
     }
@@ -1366,6 +1360,8 @@ DEFUN ("system-name", Fsystem_name, Ssystem_name, 0, 0, 0,
        doc: /* Return the host name of the machine you are running on, as a 
string.  */)
   (void)
 {
+  if (EQ (Vsystem_name, cached_system_name))
+    init_and_cache_system_name ();
   return Vsystem_name;
 }
 
@@ -2037,20 +2033,20 @@ DOW and ZONE.)  */)
   /* Avoid overflow when INT_MAX < EMACS_INT_MAX.  */
   EMACS_INT tm_year_base = TM_YEAR_BASE;
 
-  return Flist (9, ((Lisp_Object [])
-                   {make_number (local_tm.tm_sec),
-                    make_number (local_tm.tm_min),
-                    make_number (local_tm.tm_hour),
-                    make_number (local_tm.tm_mday),
-                    make_number (local_tm.tm_mon + 1),
-                    make_number (local_tm.tm_year + tm_year_base),
-                    make_number (local_tm.tm_wday),
-                    local_tm.tm_isdst ? Qt : Qnil,
-                    (HAVE_TM_GMTOFF
-                     ? make_number (tm_gmtoff (&local_tm))
-                     : gmtime_r (&time_spec, &gmt_tm)
-                     ? make_number (tm_diff (&local_tm, &gmt_tm))
-                     : Qnil)}));
+  return CALLN (Flist,
+               make_number (local_tm.tm_sec),
+               make_number (local_tm.tm_min),
+               make_number (local_tm.tm_hour),
+               make_number (local_tm.tm_mday),
+               make_number (local_tm.tm_mon + 1),
+               make_number (local_tm.tm_year + tm_year_base),
+               make_number (local_tm.tm_wday),
+               local_tm.tm_isdst ? Qt : Qnil,
+               (HAVE_TM_GMTOFF
+                ? make_number (tm_gmtoff (&local_tm))
+                : gmtime_r (&time_spec, &gmt_tm)
+                ? make_number (tm_diff (&local_tm, &gmt_tm))
+                : Qnil));
 }
 
 /* Return OBJ - OFFSET, checking that OBJ is a valid fixnum and that
@@ -2067,6 +2063,29 @@ check_tm_member (Lisp_Object obj, int offset)
   return n - offset;
 }
 
+/* Decode ZONE as a time zone specification.  */
+
+static Lisp_Object
+decode_time_zone (Lisp_Object zone)
+{
+  if (EQ (zone, Qt))
+    return build_string ("UTC0");
+  else if (STRINGP (zone))
+    return zone;
+  else if (INTEGERP (zone))
+    {
+      static char const tzbuf_format[] = "XXX%s%"pI"d:%02d:%02d";
+      char tzbuf[sizeof tzbuf_format + INT_STRLEN_BOUND (EMACS_INT)];
+      EMACS_INT abszone = eabs (XINT (zone)), zone_hr = abszone / (60 * 60);
+      int zone_min = (abszone / 60) % 60, zone_sec = abszone % 60;
+
+      return make_formatted_string (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0],
+                                   zone_hr, zone_min, zone_sec);
+    }
+  else
+    xsignal2 (Qerror, build_string ("Invalid time zone specification"), zone);
+}
+
 DEFUN ("encode-time", Fencode_time, Sencode_time, 6, MANY, 0,
        doc: /* Convert SECOND, MINUTE, HOUR, DAY, MONTH, YEAR and ZONE to 
internal time.
 This is the reverse operation of `decode-time', which see.
@@ -2109,30 +2128,7 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH YEAR 
&optional ZONE)  */)
     value = mktime (&tm);
   else
     {
-      static char const tzbuf_format[] = "XXX%s%"pI"d:%02d:%02d";
-      char tzbuf[sizeof tzbuf_format + INT_STRLEN_BOUND (EMACS_INT)];
-      const char *tzstring;
-
-      if (EQ (zone, Qt))
-       tzstring = "UTC0";
-      else if (STRINGP (zone))
-       tzstring = SSDATA (zone);
-      else if (INTEGERP (zone))
-       {
-         EMACS_INT abszone = eabs (XINT (zone));
-         EMACS_INT zone_hr = abszone / (60*60);
-         int zone_min = (abszone/60) % 60;
-         int zone_sec = abszone % 60;
-         sprintf (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0],
-                  zone_hr, zone_min, zone_sec);
-         tzstring = tzbuf;
-       }
-      else
-       tzstring = 0;
-
-      timezone_t tz = tzstring ? tzalloc (tzstring) : 0;
-      if (! tz)
-       error ("Invalid time zone specification");
+      timezone_t tz = tzalloc (SSDATA (decode_time_zone (zone)));
       value = mktime_z (tz, &tm);
       tzfree (tz);
     }
@@ -2269,7 +2265,8 @@ the data it can't find.  */)
 DEFUN ("set-time-zone-rule", Fset_time_zone_rule, Sset_time_zone_rule, 1, 1, 0,
        doc: /* Set the local time zone using TZ, a string specifying a time 
zone rule.
 If TZ is nil, use implementation-defined default time zone information.
-If TZ is t, use Universal Time.
+If TZ is t, use Universal Time.  If TZ is an integer, it is treated as in
+`encode-time'.
 
 Instead of calling this function, you typically want (setenv "TZ" TZ).
 That changes both the environment of the Emacs process and the
@@ -2277,17 +2274,7 @@ variable `process-environment', whereas 
`set-time-zone-rule' affects
 only the former.  */)
   (Lisp_Object tz)
 {
-  const char *tzstring;
-
-  if (! (NILP (tz) || EQ (tz, Qt)))
-    CHECK_STRING (tz);
-
-  if (NILP (tz))
-    tzstring = initial_tz;
-  else if (EQ (tz, Qt))
-    tzstring = "UTC0";
-  else
-    tzstring = SSDATA (tz);
+  const char *tzstring = NILP (tz) ? initial_tz : SSDATA (decode_time_zone 
(tz));
 
   block_input ();
   set_time_zone_rule (tzstring);
@@ -2637,15 +2624,34 @@ make_buffer_string_both (ptrdiff_t start, ptrdiff_t 
start_byte,
                         ptrdiff_t end, ptrdiff_t end_byte, bool props)
 {
   Lisp_Object result, tem, tem1;
+  ptrdiff_t beg0, end0, beg1, end1, size;
 
-  if (start < GPT && GPT < end)
-    move_gap_both (start, start_byte);
+  if (start_byte < GPT_BYTE && GPT_BYTE < end_byte)
+    {
+      /* Two regions, before and after the gap.  */
+      beg0 = start_byte;
+      end0 = GPT_BYTE;
+      beg1 = GPT_BYTE + GAP_SIZE - BEG_BYTE;
+      end1 = end_byte + GAP_SIZE - BEG_BYTE;
+    }
+  else
+    {
+      /* The only region.  */
+      beg0 = start_byte;
+      end0 = end_byte;
+      beg1 = -1;
+      end1 = -1;
+    }
 
   if (! NILP (BVAR (current_buffer, enable_multibyte_characters)))
     result = make_uninit_multibyte_string (end - start, end_byte - start_byte);
   else
     result = make_uninit_string (end - start);
-  memcpy (SDATA (result), BYTE_POS_ADDR (start_byte), end_byte - start_byte);
+
+  size = end0 - beg0;
+  memcpy (SDATA (result), BYTE_POS_ADDR (beg0), size);
+  if (beg1 != -1)
+    memcpy (SDATA (result) + size, BEG_ADDR + beg1, end1 - beg1);
 
   /* If desired, update and copy the text properties.  */
   if (props)
@@ -2673,25 +2679,20 @@ update_buffer_properties (ptrdiff_t start, ptrdiff_t 
end)
      call them, specifying the range of the buffer being accessed.  */
   if (!NILP (Vbuffer_access_fontify_functions))
     {
-      Lisp_Object args[3];
-      Lisp_Object tem;
-
-      args[0] = Qbuffer_access_fontify_functions;
-      XSETINT (args[1], start);
-      XSETINT (args[2], end);
-
       /* But don't call them if we can tell that the work
         has already been done.  */
       if (!NILP (Vbuffer_access_fontified_property))
        {
-         tem = Ftext_property_any (args[1], args[2],
-                                   Vbuffer_access_fontified_property,
-                                   Qnil, Qnil);
-         if (! NILP (tem))
-           Frun_hook_with_args (3, args);
+         Lisp_Object tem
+           = Ftext_property_any (make_number (start), make_number (end),
+                                 Vbuffer_access_fontified_property,
+                                 Qnil, Qnil);
+         if (NILP (tem))
+           return;
        }
-      else
-       Frun_hook_with_args (3, args);
+
+      CALLN (Frun_hook_with_args, Qbuffer_access_fontify_functions,
+            make_number (start), make_number (end));
     }
 }
 
@@ -4510,7 +4511,7 @@ Lisp_Object
 format2 (const char *string1, Lisp_Object arg0, Lisp_Object arg1)
 {
   AUTO_STRING (format, string1);
-  return Fformat (3, (Lisp_Object []) {format, arg0, arg1});
+  return CALLN (Fformat, format, arg0, arg1);
 }
 
 DEFUN ("char-equal", Fchar_equal, Schar_equal, 2, 2, 0,
@@ -4966,6 +4967,7 @@ functions if all the text being accessed has this 
property.  */);
 
   DEFVAR_LISP ("system-name", Vsystem_name,
               doc: /* The host name of the machine Emacs is running on.  */);
+  Vsystem_name = cached_system_name = Qnil;
 
   DEFVAR_LISP ("user-full-name", Vuser_full_name,
               doc: /* The full name of the user logged in.  */);
@@ -4996,8 +4998,12 @@ functions if all the text being accessed has this 
property.  */);
   defsubr (&Sregion_beginning);
   defsubr (&Sregion_end);
 
+  /* Symbol for the text property used to mark fields.  */
   DEFSYM (Qfield, "field");
+
+  /* A special value for Qfield properties.  */
   DEFSYM (Qboundary, "boundary");
+
   defsubr (&Sfield_beginning);
   defsubr (&Sfield_end);
   defsubr (&Sfield_string);
diff --git a/src/emacs-icon.h b/src/emacs-icon.h
index 60d1487..ed4e870 100644
--- a/src/emacs-icon.h
+++ b/src/emacs-icon.h
@@ -1,7 +1,7 @@
 /* XPM */
 /* Emacs icon
 
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 Author:  Kentaro Ohkouchi <address@hidden>
 
diff --git a/src/emacs.c b/src/emacs.c
index 62f03c6..fdd17d1 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -1,7 +1,7 @@
 /* Fully extensible Emacs, running on Unix, intended for GNU.
 
-Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2014
-  Free Software Foundation, Inc.
+Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2015 Free Software
+Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -59,11 +59,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include TERM_HEADER
 #endif /* HAVE_WINDOW_SYSTEM */
 
-#ifdef NS_IMPL_GNUSTEP
-/* At least under Debian, GSConfig is in a subdirectory.  --Stef  */
-#include <GNUstepBase/GSConfig.h>
-#endif
-
 #include "commands.h"
 #include "intervals.h"
 #include "character.h"
@@ -88,9 +83,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "sysselect.h"
 #include "systime.h"
 
-#ifdef HAVE_GNUTLS
 #include "gnutls.h"
-#endif
 
 #if (defined PROFILING \
      && (defined __FreeBSD__ || defined GNU_LINUX || defined __MINGW32__))
@@ -150,13 +143,6 @@ static bool malloc_using_checking;
 extern void malloc_enable_thread (void);
 #endif
 
-Lisp_Object Qfile_name_handler_alist;
-
-Lisp_Object Qrisky_local_variable;
-
-Lisp_Object Qkill_emacs;
-static Lisp_Object Qkill_emacs_hook;
-
 /* If true, Emacs should not attempt to use a window-specific code,
    but instead should use the virtual terminal under which it was started.  */
 bool inhibit_window_system;
@@ -245,7 +231,7 @@ Initialization options:\n\
     "\
 --no-desktop                do not load a saved desktop\n\
 --no-init-file, -q          load neither ~/.emacs nor default.el\n\
---no-shared-memory, -nl     do not use shared memory\n\
+--no-loadup, -nl            do not load loadup.el into bare Emacs\n\
 --no-site-file              do not load site-start.el\n\
 --no-site-lisp, -nsl        do not add site-lisp directories to load-path\n\
 --no-splash                 do not display a splash screen on startup\n\
@@ -803,10 +789,10 @@ main (int argc, char **argv)
          version = emacs_version;
          copyright = emacs_copyright;
        }
-      printf ("GNU Emacs %s\n", version);
+      printf ("%s %s\n", PACKAGE_NAME, version);
       printf ("%s\n", copyright);
-      printf ("GNU Emacs comes with ABSOLUTELY NO WARRANTY.\n");
-      printf ("You may redistribute copies of Emacs\n");
+      printf ("%s comes with ABSOLUTELY NO WARRANTY.\n", PACKAGE_NAME);
+      printf ("You may redistribute copies of %s\n", PACKAGE_NAME);
       printf ("under the terms of the GNU General Public License.\n");
       printf ("For more information about these matters, ");
       printf ("see the file named COPYING.\n");
@@ -1493,9 +1479,7 @@ Using an Emacs configured with --with-x-toolkit=lucid 
does not have this problem
       syms_of_fontset ();
 #endif /* HAVE_NS */
 
-#ifdef HAVE_GNUTLS
       syms_of_gnutls ();
-#endif
 
 #ifdef HAVE_GFILENOTIFY
       syms_of_gfilenotify ();
@@ -1903,7 +1887,8 @@ or SIGHUP, and upon SIGINT in batch mode.
 
 The value of `kill-emacs-hook', if not void,
 is a list of functions (of no args),
-all of which are called before Emacs is actually killed.  */)
+all of which are called before Emacs is actually killed.  */
+       attributes: noreturn)
   (Lisp_Object arg)
 {
   struct gcpro gcpro1;
@@ -1917,7 +1902,7 @@ all of which are called before Emacs is actually killed.  
*/)
   /* Fsignal calls emacs_abort () if it sees that waiting_for_input is
      set.  */
   waiting_for_input = 0;
-  Frun_hooks (1, &Qkill_emacs_hook);
+  run_hook (Qkill_emacs_hook);
   UNGCPRO;
 
 #ifdef HAVE_X_WINDOWS
@@ -2407,9 +2392,7 @@ hpux, irix, usg-unix-v) indicates some sort of Unix 
system.  */);
   /* See configure.ac (and config.nt) for the possible SYSTEM_TYPEs.  */
 
   DEFVAR_LISP ("system-configuration", Vsystem_configuration,
-              doc: /* Value is string indicating configuration Emacs was built 
for.
-On MS-Windows, the value reflects the OS flavor and version on which
-Emacs is running.  */);
+              doc: /* Value is string indicating configuration Emacs was built 
for.  */);
   Vsystem_configuration = build_string (EMACS_CONFIGURATION);
 
   DEFVAR_LISP ("system-configuration-options", Vsystem_configuration_options,
diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c
index c584dd8..abec78f 100644
--- a/src/emacsgtkfixed.c
+++ b/src/emacsgtkfixed.c
@@ -1,7 +1,7 @@
 /* A Gtk Widget that inherits GtkFixed, but can be shrunk.
 This file is only use when compiling with Gtk+ 3.
 
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/emacsgtkfixed.h b/src/emacsgtkfixed.h
index 04cdf25..bcf1cd9 100644
--- a/src/emacsgtkfixed.h
+++ b/src/emacsgtkfixed.h
@@ -1,7 +1,7 @@
 /* A Gtk Widget that inherits GtkFixed, but can be shrunk.
 This file is only use when compiling with Gtk+ 3.
 
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/epaths.in b/src/epaths.in
index 881ea77..66718fd 100644
--- a/src/epaths.in
+++ b/src/epaths.in
@@ -1,6 +1,6 @@
 /* Hey Emacs, this is -*- C -*- code!  */
 /*
-Copyright (C) 1993, 1995, 1997, 1999, 2001-2014 Free Software
+Copyright (C) 1993, 1995, 1997, 1999, 2001-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/eval.c b/src/eval.c
index 77b1db9..b98b224 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1,6 +1,6 @@
 /* Evaluator for GNU Emacs Lisp interpreter.
 
-Copyright (C) 1985-1987, 1993-1995, 1999-2014 Free Software Foundation,
+Copyright (C) 1985-1987, 1993-1995, 1999-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -27,6 +27,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "commands.h"
 #include "keyboard.h"
 #include "dispextern.h"
+#include "buffer.h"
 
 /* Chain of condition and catch handlers currently in effect.  */
 
@@ -37,22 +38,6 @@ struct handler *handlerlist;
 int gcpro_level;
 #endif
 
-Lisp_Object Qautoload, Qmacro, Qexit, Qinteractive, Qcommandp;
-Lisp_Object Qinhibit_quit;
-Lisp_Object Qand_rest;
-static Lisp_Object Qand_optional;
-static Lisp_Object Qinhibit_debugger;
-static Lisp_Object Qdeclare;
-Lisp_Object Qinternal_interpreter_environment, Qclosure;
-
-static Lisp_Object Qdebug;
-
-/* This holds either the symbol `run-hooks' or nil.
-   It is nil at an early stage of startup, and when Emacs
-   is shutting down.  */
-
-Lisp_Object Vrun_hooks;
-
 /* Non-nil means record all fset's and provide's, to be undone
    if the file being autoloaded is not fully loaded.
    They are recorded by being consed onto the front of Vautoload_queue:
@@ -60,6 +45,11 @@ Lisp_Object Vrun_hooks;
 
 Lisp_Object Vautoload_queue;
 
+/* This holds either the symbol `run-hooks' or nil.
+   It is nil at an early stage of startup, and when Emacs
+   is shutting down.  */
+Lisp_Object Vrun_hooks;
+
 /* Current number of specbindings allocated in specpdl, not counting
    the dummy entry specpdl[-1].  */
 
@@ -1172,7 +1162,8 @@ unwind_to_catch (struct handler *catch, Lisp_Object value)
 
 DEFUN ("throw", Fthrow, Sthrow, 2, 2, 0,
        doc: /* Throw to the catch for TAG and return VALUE from it.
-Both TAG and VALUE are evalled.  */)
+Both TAG and VALUE are evalled.  */
+       attributes: noreturn)
   (register Lisp_Object tag, Lisp_Object value)
 {
   struct handler *c;
@@ -1532,8 +1523,7 @@ See also the function `condition-case'.  */)
          || NILP (clause)
          /* A `debug' symbol in the handler list disables the normal
             suppression of the debugger.  */
-         || (CONSP (clause) && CONSP (clause)
-             && !NILP (Fmemq (Qdebug, clause)))
+         || (CONSP (clause) && !NILP (Fmemq (Qdebug, clause)))
          /* Special handler that means "print a message and run debugger
             if requested".  */
          || EQ (h->tag_or_ch, Qerror)))
@@ -1917,7 +1907,7 @@ DEFUN ("autoload-do-load", Fautoload_do_load, 
Sautoload_do_load, 1, 3, 0,
 If non-nil, FUNNAME should be the symbol whose function value is FUNDEF,
 in which case the function returns the new autoloaded function value.
 If equal to `macro', MACRO-ONLY specifies that FUNDEF should only be loaded if
-it is defines a macro.  */)
+it defines a macro.  */)
   (Lisp_Object fundef, Lisp_Object funname, Lisp_Object macro_only)
 {
   ptrdiff_t count = SPECPDL_INDEX ();
@@ -2272,14 +2262,12 @@ usage: (apply FUNCTION &rest ARGUMENTS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {
   ptrdiff_t i, numargs, funcall_nargs;
-  register Lisp_Object spread_arg;
-  register Lisp_Object *funcall_args;
-  Lisp_Object fun, retval;
+  register Lisp_Object *funcall_args = NULL;
+  register Lisp_Object spread_arg = args[nargs - 1];
+  Lisp_Object fun = args[0];
+  Lisp_Object retval;
   USE_SAFE_ALLOCA;
 
-  fun = args [0];
-  funcall_args = 0;
-  spread_arg = args [nargs - 1];
   CHECK_LIST (spread_arg);
 
   numargs = XINT (Flength (spread_arg));
@@ -2297,34 +2285,27 @@ usage: (apply FUNCTION &rest ARGUMENTS)  */)
   /* Optimize for no indirection.  */
   if (SYMBOLP (fun) && !NILP (fun)
       && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
-    fun = indirect_function (fun);
-  if (NILP (fun))
     {
-      /* Let funcall get the error.  */
-      fun = args[0];
-      goto funcall;
+      fun = indirect_function (fun);
+      if (NILP (fun))
+       /* Let funcall get the error.  */
+       fun = args[0];
     }
 
-  if (SUBRP (fun))
+  if (SUBRP (fun) && XSUBR (fun)->max_args > numargs
+      /* Don't hide an error by adding missing arguments.  */
+      && numargs >= XSUBR (fun)->min_args)
     {
-      if (numargs < XSUBR (fun)->min_args
-         || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
-       goto funcall;           /* Let funcall get the error.  */
-      else if (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args > numargs)
-       {
-         /* Avoid making funcall cons up a yet another new vector of arguments
-            by explicitly supplying nil's for optional values.  */
-         SAFE_ALLOCA_LISP (funcall_args, 1 + XSUBR (fun)->max_args);
-         for (i = numargs; i < XSUBR (fun)->max_args; /* nothing */)
-           funcall_args[++i] = Qnil;
-         funcall_nargs = 1 + XSUBR (fun)->max_args;
-       }
+      /* Avoid making funcall cons up a yet another new vector of arguments
+        by explicitly supplying nil's for optional values.  */
+      SAFE_ALLOCA_LISP (funcall_args, 1 + XSUBR (fun)->max_args);
+      memclear (funcall_args + numargs + 1,
+               (XSUBR (fun)->max_args - numargs) * word_size);
+      funcall_nargs = 1 + XSUBR (fun)->max_args;
     }
- funcall:
-  /* We add 1 to numargs because funcall_args includes the
-     function itself as well as its arguments.  */
-  if (!funcall_args)
-    {
+  else
+    { /* We add 1 to numargs because funcall_args includes the
+        function itself as well as its arguments.  */
       SAFE_ALLOCA_LISP (funcall_args, 1 + numargs);
       funcall_nargs = 1 + numargs;
     }
@@ -2372,14 +2353,10 @@ Instead, use `add-hook' and specify t for the LOCAL 
argument.
 usage: (run-hooks &rest HOOKS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {
-  Lisp_Object hook[1];
   ptrdiff_t i;
 
   for (i = 0; i < nargs; i++)
-    {
-      hook[0] = args[i];
-      run_hook_with_args (1, hook, funcall_nil);
-    }
+    run_hook (args[i]);
 
   return Qnil;
 }
@@ -2545,20 +2522,27 @@ run_hook_with_args (ptrdiff_t nargs, Lisp_Object *args,
     }
 }
 
+/* Run the hook HOOK, giving each function no args.  */
+
+void
+run_hook (Lisp_Object hook)
+{
+  Frun_hook_with_args (1, &hook);
+}
+
 /* Run the hook HOOK, giving each function the two args ARG1 and ARG2.  */
 
 void
 run_hook_with_args_2 (Lisp_Object hook, Lisp_Object arg1, Lisp_Object arg2)
 {
-  Frun_hook_with_args (3, ((Lisp_Object []) { hook, arg1, arg2 }));
+  CALLN (Frun_hook_with_args, hook, arg1, arg2);
 }
 
 /* Apply fn to arg.  */
 Lisp_Object
 apply1 (Lisp_Object fn, Lisp_Object arg)
 {
-  return (NILP (arg) ? Ffuncall (1, &fn)
-         : Fapply (2, ((Lisp_Object []) { fn, arg })));
+  return NILP (arg) ? Ffuncall (1, &fn) : CALLN (Fapply, fn, arg);
 }
 
 /* Call function fn on no arguments.  */
@@ -2573,7 +2557,7 @@ call0 (Lisp_Object fn)
 Lisp_Object
 call1 (Lisp_Object fn, Lisp_Object arg1)
 {
-  return Ffuncall (2, ((Lisp_Object []) { fn, arg1 }));
+  return CALLN (Ffuncall, fn, arg1);
 }
 
 /* Call function fn with 2 arguments arg1, arg2.  */
@@ -2581,7 +2565,7 @@ call1 (Lisp_Object fn, Lisp_Object arg1)
 Lisp_Object
 call2 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2)
 {
-  return Ffuncall (3, ((Lisp_Object []) { fn, arg1, arg2 }));
+  return CALLN (Ffuncall, fn, arg1, arg2);
 }
 
 /* Call function fn with 3 arguments arg1, arg2, arg3.  */
@@ -2589,7 +2573,7 @@ call2 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2)
 Lisp_Object
 call3 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3)
 {
-  return Ffuncall (4, ((Lisp_Object []) { fn, arg1, arg2, arg3 }));
+  return CALLN (Ffuncall, fn, arg1, arg2, arg3);
 }
 
 /* Call function fn with 4 arguments arg1, arg2, arg3, arg4.  */
@@ -2598,7 +2582,7 @@ Lisp_Object
 call4 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3,
        Lisp_Object arg4)
 {
-  return Ffuncall (5, ((Lisp_Object []) { fn, arg1, arg2, arg3, arg4 }));
+  return CALLN (Ffuncall, fn, arg1, arg2, arg3, arg4);
 }
 
 /* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5.  */
@@ -2607,7 +2591,7 @@ Lisp_Object
 call5 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3,
        Lisp_Object arg4, Lisp_Object arg5)
 {
-  return Ffuncall (6, ((Lisp_Object []) { fn, arg1, arg2, arg3, arg4, arg5 }));
+  return CALLN (Ffuncall, fn, arg1, arg2, arg3, arg4, arg5);
 }
 
 /* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6.  */
@@ -2616,8 +2600,7 @@ Lisp_Object
 call6 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3,
        Lisp_Object arg4, Lisp_Object arg5, Lisp_Object arg6)
 {
-  return Ffuncall (7, ((Lisp_Object [])
-    { fn, arg1, arg2, arg3, arg4, arg5, arg6 }));
+  return CALLN (Ffuncall, fn, arg1, arg2, arg3, arg4, arg5, arg6);
 }
 
 /* Call function fn with 7 arguments arg1, arg2, arg3, arg4, arg5, arg6, arg7. 
 */
@@ -2626,8 +2609,7 @@ Lisp_Object
 call7 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3,
        Lisp_Object arg4, Lisp_Object arg5, Lisp_Object arg6, Lisp_Object arg7)
 {
-  return Ffuncall (8, ((Lisp_Object [])
-    { fn, arg1, arg2, arg3, arg4, arg5, arg6, arg7 }));
+  return CALLN (Ffuncall, fn, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
 }
 
 /* The caller should GCPRO all the elements of ARGS.  */
@@ -2653,8 +2635,8 @@ usage: (funcall FUNCTION &rest ARGUMENTS)  */)
   ptrdiff_t numargs = nargs - 1;
   Lisp_Object lisp_numargs;
   Lisp_Object val;
-  register Lisp_Object *internal_args;
-  ptrdiff_t i, count;
+  Lisp_Object *internal_args;
+  ptrdiff_t count;
 
   QUIT;
 
@@ -2709,8 +2691,8 @@ usage: (funcall FUNCTION &rest ARGUMENTS)  */)
              eassert (XSUBR (fun)->max_args <= ARRAYELTS (internal_argbuf));
              internal_args = internal_argbuf;
              memcpy (internal_args, args + 1, numargs * word_size);
-             for (i = numargs; i < XSUBR (fun)->max_args; i++)
-               internal_args[i] = Qnil;
+             memclear (internal_args + numargs,
+                       (XSUBR (fun)->max_args - numargs) * word_size);
            }
          else
            internal_args = args + 1;
@@ -3413,13 +3395,24 @@ backtrace_eval_unrewind (int distance)
   for (; distance > 0; distance--)
     {
       tmp += step;
-      /*  */
       switch (tmp->kind)
        {
          /* FIXME: Ideally we'd like to "temporarily unwind" (some of) those
             unwind_protect, but the problem is that we don't know how to
             rewind them afterwards.  */
        case SPECPDL_UNWIND:
+         {
+           Lisp_Object oldarg = tmp->unwind.arg;
+           if (tmp->unwind.func == set_buffer_if_live)
+             tmp->unwind.arg = Fcurrent_buffer ();
+           else if (tmp->unwind.func == save_excursion_restore)
+             tmp->unwind.arg = save_excursion_save ();
+           else
+             break;
+           tmp->unwind.func (oldarg);
+           break;
+         }
+
        case SPECPDL_UNWIND_PTR:
        case SPECPDL_UNWIND_INT:
        case SPECPDL_UNWIND_VOID:
@@ -3760,7 +3753,8 @@ alist of active lexical bindings.  */);
      (Just imagine if someone makes it buffer-local).  */
   Funintern (Qinternal_interpreter_environment, Qnil);
 
-  DEFSYM (Vrun_hooks, "run-hooks");
+  Vrun_hooks = intern_c_string ("run-hooks");
+  staticpro (&Vrun_hooks);
 
   staticpro (&Vautoload_queue);
   Vautoload_queue = Qnil;
diff --git a/src/fileio.c b/src/fileio.c
index b8dec3a..43ab456 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1,6 +1,6 @@
 /* File IO for GNU Emacs.
 
-Copyright (C) 1985-1988, 1993-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1988, 1993-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -86,6 +86,8 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include <careadlinkat.h>
 #include <stat-time.h>
 
+#include <binary-io.h>
+
 #ifdef HPUX
 #include <netio.h>
 #endif
@@ -113,49 +115,10 @@ static bool auto_save_error_occurred;
 static bool valid_timestamp_file_system;
 static dev_t timestamp_file_system;
 
-/* The symbol bound to coding-system-for-read when
-   insert-file-contents is called for recovering a file.  This is not
-   an actual coding system name, but just an indicator to tell
-   insert-file-contents to use `emacs-mule' with a special flag for
-   auto saving and recovering a file.  */
-static Lisp_Object Qauto_save_coding;
-
-/* Property name of a file name handler,
-   which gives a list of operations it handles..  */
-static Lisp_Object Qoperations;
-
-/* Lisp functions for translating file formats.  */
-static Lisp_Object Qformat_decode, Qformat_annotate_function;
-
-/* Lisp function for setting buffer-file-coding-system and the
-   multibyteness of the current buffer after inserting a file.  */
-static Lisp_Object Qafter_insert_file_set_coding;
-
-static Lisp_Object Qwrite_region_annotate_functions;
 /* Each time an annotation function changes the buffer, the new buffer
    is added here.  */
 static Lisp_Object Vwrite_region_annotation_buffers;
 
-static Lisp_Object Qdelete_by_moving_to_trash;
-
-/* Lisp function for moving files to trash.  */
-static Lisp_Object Qmove_file_to_trash;
-
-/* Lisp function for recursively copying directories.  */
-static Lisp_Object Qcopy_directory;
-
-/* Lisp function for recursively deleting directories.  */
-static Lisp_Object Qdelete_directory;
-
-static Lisp_Object Qsubstitute_env_in_file_name;
-
-Lisp_Object Qfile_error, Qfile_notify_error;
-static Lisp_Object Qfile_already_exists, Qfile_date_error;
-static Lisp_Object Qexcl;
-Lisp_Object Qfile_name_history;
-
-static Lisp_Object Qcar_less_than_car;
-
 static bool a_write (int, Lisp_Object, ptrdiff_t, ptrdiff_t,
                     Lisp_Object *, struct coding_system *);
 static bool e_write (int, Lisp_Object, ptrdiff_t, ptrdiff_t,
@@ -197,7 +160,7 @@ check_writable (const char *filename, int amode)
   bool res = faccessat (AT_FDCWD, filename, amode, AT_EACCESS) == 0;
 #ifdef CYGWIN
   /* faccessat may have returned failure because Cygwin couldn't
-     determine the file's UID or GID; if so, we return success. */
+     determine the file's UID or GID; if so, we return success.  */
   if (!res)
     {
       int faccessat_errno = errno;
@@ -223,37 +186,17 @@ void
 report_file_errno (char const *string, Lisp_Object name, int errorno)
 {
   Lisp_Object data = CONSP (name) || NILP (name) ? name : list1 (name);
-  Lisp_Object errstring;
-  char *str;
-
   synchronize_system_messages_locale ();
-  str = strerror (errorno);
-  errstring = code_convert_string_norecord (build_unibyte_string (str),
-                                           Vlocale_coding_system, 0);
-
-  while (1)
-    switch (errorno)
-      {
-      case EEXIST:
-       xsignal (Qfile_already_exists, Fcons (errstring, data));
-       break;
-      default:
-       /* System error messages are capitalized.  Downcase the initial
-          unless it is followed by a slash.  (The slash case caters to
-          error messages that begin with "I/O" or, in German, "E/A".)  */
-       if (STRING_MULTIBYTE (errstring)
-           && ! EQ (Faref (errstring, make_number (1)), make_number ('/')))
-         {
-           int c;
-
-           str = SSDATA (errstring);
-           c = STRING_CHAR ((unsigned char *) str);
-           Faset (errstring, make_number (0), make_number (downcase (c)));
-         }
-
-       xsignal (Qfile_error,
-                Fcons (build_string (string), Fcons (errstring, data)));
-      }
+  char *str = strerror (errorno);
+  Lisp_Object errstring
+    = code_convert_string_norecord (build_unibyte_string (str),
+                                   Vlocale_coding_system, 0);
+  Lisp_Object errdata = Fcons (errstring, data);
+
+  if (errorno == EEXIST)
+    xsignal (Qfile_already_exists, errdata);
+  else
+    xsignal (Qfile_error, Fcons (build_string (string), errdata));
 }
 
 /* Signal a file-access failure that set errno.  STRING describes the
@@ -290,43 +233,6 @@ restore_point_unwind (Lisp_Object location)
 }
 
 
-static Lisp_Object Qexpand_file_name;
-static Lisp_Object Qsubstitute_in_file_name;
-static Lisp_Object Qdirectory_file_name;
-static Lisp_Object Qfile_name_directory;
-static Lisp_Object Qfile_name_nondirectory;
-static Lisp_Object Qunhandled_file_name_directory;
-static Lisp_Object Qfile_name_as_directory;
-static Lisp_Object Qcopy_file;
-static Lisp_Object Qmake_directory_internal;
-static Lisp_Object Qmake_directory;
-static Lisp_Object Qdelete_directory_internal;
-Lisp_Object Qdelete_file;
-static Lisp_Object Qrename_file;
-static Lisp_Object Qadd_name_to_file;
-static Lisp_Object Qmake_symbolic_link;
-Lisp_Object Qfile_exists_p;
-static Lisp_Object Qfile_executable_p;
-static Lisp_Object Qfile_readable_p;
-static Lisp_Object Qfile_writable_p;
-static Lisp_Object Qfile_symlink_p;
-static Lisp_Object Qaccess_file;
-Lisp_Object Qfile_directory_p;
-static Lisp_Object Qfile_regular_p;
-static Lisp_Object Qfile_accessible_directory_p;
-static Lisp_Object Qfile_modes;
-static Lisp_Object Qset_file_modes;
-static Lisp_Object Qset_file_times;
-static Lisp_Object Qfile_selinux_context;
-static Lisp_Object Qset_file_selinux_context;
-static Lisp_Object Qfile_acl;
-static Lisp_Object Qset_file_acl;
-static Lisp_Object Qfile_newer_than_file_p;
-Lisp_Object Qinsert_file_contents;
-Lisp_Object Qwrite_region;
-static Lisp_Object Qverify_visited_file_modtime;
-static Lisp_Object Qset_visited_file_modtime;
-
 DEFUN ("find-file-name-handler", Ffind_file_name_handler,
        Sfind_file_name_handler, 2, 2, 0,
        doc: /* Return FILENAME's handler function for OPERATION, if it has one.
@@ -598,8 +504,6 @@ For a Unix-syntax file name, just appends a slash.  */)
   USE_SAFE_ALLOCA;
 
   CHECK_STRING (file);
-  if (NILP (file))
-    return Qnil;
 
   /* If the file name has special constructs in it,
      call the corresponding file handler.  */
@@ -667,9 +571,6 @@ In Unix-syntax, this function just removes the final slash. 
 */)
 
   CHECK_STRING (directory);
 
-  if (NILP (directory))
-    return Qnil;
-
   /* If the file name has special constructs in it,
      call the corresponding file handler.  */
   handler = Ffind_file_name_handler (directory, Qdirectory_file_name);
@@ -2891,7 +2792,8 @@ or if SELinux is disabled, or if Emacs lacks SELinux 
support.  */)
   (Lisp_Object filename)
 {
   Lisp_Object absname;
-  Lisp_Object values[4];
+  Lisp_Object user = Qnil, role = Qnil, type = Qnil, range = Qnil;
+
   Lisp_Object handler;
 #if HAVE_LIBSELINUX
   security_context_t con;
@@ -2909,10 +2811,6 @@ or if SELinux is disabled, or if Emacs lacks SELinux 
support.  */)
 
   absname = ENCODE_FILE (absname);
 
-  values[0] = Qnil;
-  values[1] = Qnil;
-  values[2] = Qnil;
-  values[3] = Qnil;
 #if HAVE_LIBSELINUX
   if (is_selinux_enabled ())
     {
@@ -2921,20 +2819,20 @@ or if SELinux is disabled, or if Emacs lacks SELinux 
support.  */)
        {
          context = context_new (con);
          if (context_user_get (context))
-           values[0] = build_string (context_user_get (context));
+           user = build_string (context_user_get (context));
          if (context_role_get (context))
-           values[1] = build_string (context_role_get (context));
+           role = build_string (context_role_get (context));
          if (context_type_get (context))
-           values[2] = build_string (context_type_get (context));
+           type = build_string (context_type_get (context));
          if (context_range_get (context))
-           values[3] = build_string (context_range_get (context));
+           range = build_string (context_range_get (context));
          context_free (context);
          freecon (con);
        }
     }
 #endif
 
-  return Flist (ARRAYELTS (values), values);
+  return list4 (user, role, type, range);
 }
 
 DEFUN ("set-file-selinux-context", Fset_file_selinux_context,
@@ -3410,6 +3308,56 @@ time_error_value (int errnum)
   return make_timespec (0, ns);
 }
 
+static Lisp_Object
+get_window_points_and_markers (void)
+{
+  Lisp_Object pt_marker = Fpoint_marker ();
+  Lisp_Object windows
+    = call3 (Qget_buffer_window_list, Fcurrent_buffer (), Qnil, Qt);
+  Lisp_Object window_markers = windows;
+  /* Window markers (and point) are handled specially: rather than move to
+     just before or just after the modified text, we try to keep the
+     markers at the same distance (bug#19161).
+     In general, this is wrong, but for window-markers, this should be harmless
+     and is convenient for the end user when most of the file is unmodified,
+     except for a few minor details near the beginning and near the end.  */
+  for (; CONSP (windows); windows = XCDR (windows))
+    if (WINDOWP (XCAR (windows)))
+      {
+       Lisp_Object window_marker = XWINDOW (XCAR (windows))->pointm;
+       XSETCAR (windows,
+                Fcons (window_marker, Fmarker_position (window_marker)));
+      }
+  return Fcons (Fcons (pt_marker, Fpoint ()), window_markers);
+}
+
+static void
+restore_window_points (Lisp_Object window_markers, ptrdiff_t inserted,
+                      ptrdiff_t same_at_start, ptrdiff_t same_at_end)
+{
+  for (; CONSP (window_markers); window_markers = XCDR (window_markers))
+    if (CONSP (XCAR (window_markers)))
+      {
+       Lisp_Object car = XCAR (window_markers);
+       Lisp_Object marker = XCAR (car);
+       Lisp_Object oldpos = XCDR (car);
+       if (MARKERP (marker) && INTEGERP (oldpos)
+           && XINT (oldpos) > same_at_start
+           && XINT (oldpos) < same_at_end)
+         {
+           ptrdiff_t oldsize = same_at_end - same_at_start;
+           ptrdiff_t newsize = inserted;
+           double growth = newsize / (double)oldsize;
+           ptrdiff_t newpos
+             = same_at_start + growth * (XINT (oldpos) - same_at_start);
+           Fset_marker (marker, make_number (newpos), Qnil);
+         }
+      }
+}
+
+/* FIXME: insert-file-contents should be split with the top-level moved to
+   Elisp and only the core kept in C.  */
+
 DEFUN ("insert-file-contents", Finsert_file_contents, Sinsert_file_contents,
        1, 5, 0,
        doc: /* Insert contents of file FILENAME after point.
@@ -3454,18 +3402,26 @@ by calling `format-decode', which see.  */)
   int save_errno = 0;
   char read_buf[READ_BUF_SIZE];
   struct coding_system coding;
-  bool replace_handled = 0;
-  bool set_coding_system = 0;
+  bool replace_handled = false;
+  bool set_coding_system = false;
   Lisp_Object coding_system;
-  bool read_quit = 0;
+  bool read_quit = false;
   /* If the undo log only contains the insertion, there's no point
      keeping it.  It's typically when we first fill a file-buffer.  */
   bool empty_undo_list_p
     = (!NILP (visit) && NILP (BVAR (current_buffer, undo_list))
        && BEG == Z);
   Lisp_Object old_Vdeactivate_mark = Vdeactivate_mark;
-  bool we_locked_file = 0;
+  bool we_locked_file = false;
   ptrdiff_t fd_index;
+  Lisp_Object window_markers = Qnil;
+  /* same_at_start and same_at_end count bytes, because file access counts
+     bytes and BEG and END count bytes.  */
+  ptrdiff_t same_at_start = BEGV_BYTE;
+  ptrdiff_t same_at_end = ZV_BYTE;
+  /* SAME_AT_END_CHARPOS counts characters, because
+     restore_window_points needs the old character count.  */
+  ptrdiff_t same_at_end_charpos = ZV;
 
   if (current_buffer->base_buffer && ! NILP (visit))
     error ("Cannot do file visiting in an indirect buffer");
@@ -3521,7 +3477,11 @@ by calling `format-decode', which see.  */)
 
   /* Replacement should preserve point as it preserves markers.  */
   if (!NILP (replace))
-    record_unwind_protect (restore_point_unwind, Fpoint_marker ());
+    {
+      window_markers = get_window_points_and_markers ();
+      record_unwind_protect (restore_point_unwind,
+                            XCAR (XCAR (window_markers)));
+    }
 
   if (fstat (fd, &st) != 0)
     report_file_error ("Input file status", orig_filename);
@@ -3599,14 +3559,14 @@ by calling `format-decode', which see.  */)
     }
 
   /* Prevent redisplay optimizations.  */
-  current_buffer->clip_changed = 1;
+  current_buffer->clip_changed = true;
 
   if (EQ (Vcoding_system_for_read, Qauto_save_coding))
     {
       coding_system = coding_inherit_eol_type (Qutf_8_emacs, Qunix);
       setup_coding_system (coding_system, &coding);
       /* Ensure we set Vlast_coding_system_used.  */
-      set_coding_system = 1;
+      set_coding_system = true;
     }
   else if (BEG < Z)
     {
@@ -3690,11 +3650,9 @@ by calling `format-decode', which see.  */)
            {
              /* If we have not yet decided a coding system, check
                  file-coding-system-alist.  */
-             Lisp_Object args[6];
-
-             args[0] = Qinsert_file_contents, args[1] = orig_filename;
-             args[2] = visit, args[3] = beg, args[4] = end, args[5] = replace;
-             coding_system = Ffind_operation_coding_system (6, args);
+             coding_system = CALLN (Ffind_operation_coding_system,
+                                    Qinsert_file_contents, orig_filename,
+                                    visit, beg, end, replace);
              if (CONSP (coding_system))
                coding_system = XCAR (coding_system);
            }
@@ -3712,7 +3670,7 @@ by calling `format-decode', which see.  */)
 
       setup_coding_system (coding_system, &coding);
       /* Ensure we set Vlast_coding_system_used.  */
-      set_coding_system = 1;
+      set_coding_system = true;
     }
 
   /* If requested, replace the accessible part of the buffer
@@ -3734,16 +3692,11 @@ by calling `format-decode', which see.  */)
       && (NILP (coding_system)
          || ! CODING_REQUIRE_DECODING (&coding)))
     {
-      /* same_at_start and same_at_end count bytes,
-        because file access counts bytes
-        and BEG and END count bytes.  */
-      ptrdiff_t same_at_start = BEGV_BYTE;
-      ptrdiff_t same_at_end = ZV_BYTE;
       ptrdiff_t overlap;
       /* There is still a possibility we will find the need to do code
         conversion.  If that happens, set this variable to
         give up on handling REPLACE in the optimized way.  */
-      bool giveup_match_end = 0;
+      bool giveup_match_end = false;
 
       if (beg_offset != 0)
        {
@@ -3777,7 +3730,7 @@ by calling `format-decode', which see.  */)
            /* We found that the file should be decoded somehow.
                Let's give up here.  */
            {
-             giveup_match_end = 1;
+             giveup_match_end = true;
              break;
            }
 
@@ -3790,7 +3743,7 @@ by calling `format-decode', which see.  */)
          if (bufpos != nread)
            break;
        }
-      immediate_quit = 0;
+      immediate_quit = false;
       /* If the file matches the buffer completely,
         there's no need to replace anything.  */
       if (same_at_start - BEGV_BYTE == end_offset - beg_offset)
@@ -3802,7 +3755,7 @@ by calling `format-decode', which see.  */)
          del_range_1 (same_at_start, same_at_end, 0, 0);
          goto handled;
        }
-      immediate_quit = 1;
+      immediate_quit = true;
       QUIT;
       /* Count how many chars at the end of the file
         match the text at the end of the buffer.  But, if we have
@@ -3853,7 +3806,7 @@ by calling `format-decode', which see.  */)
                  && FETCH_BYTE (same_at_end - 1) >= 0200
                  && ! NILP (BVAR (current_buffer, enable_multibyte_characters))
                  && (CODING_MAY_REQUIRE_DECODING (&coding)))
-               giveup_match_end = 1;
+               giveup_match_end = true;
              break;
            }
 
@@ -3888,6 +3841,7 @@ by calling `format-decode', which see.  */)
                        + (! NILP (end) ? end_offset : st.st_size) - ZV_BYTE));
          if (overlap > 0)
            same_at_end += overlap;
+         same_at_end_charpos = BYTE_TO_CHAR (same_at_end);
 
          /* Arrange to read only the nonmatching middle part of the file.  */
          beg_offset += same_at_start - BEGV_BYTE;
@@ -3895,7 +3849,7 @@ by calling `format-decode', which see.  */)
 
          invalidate_buffer_caches (current_buffer,
                                    BYTE_TO_CHAR (same_at_start),
-                                   BYTE_TO_CHAR (same_at_end));
+                                   same_at_end_charpos);
          del_range_byte (same_at_start, same_at_end, 0);
          /* Insert from the file at the proper position.  */
          temp = BYTE_TO_CHAR (same_at_start);
@@ -3906,7 +3860,7 @@ by calling `format-decode', which see.  */)
          if (XBUFFER (XWINDOW (selected_window)->contents) == current_buffer)
            XWINDOW (selected_window)->start_at_line_beg = !NILP (Fbolp ());
 
-         replace_handled = 1;
+         replace_handled = true;
        }
     }
 
@@ -3921,8 +3875,6 @@ by calling `format-decode', which see.  */)
      in a more optimized way.  */
   if (!NILP (replace) && ! replace_handled && BEGV < ZV)
     {
-      ptrdiff_t same_at_start = BEGV_BYTE;
-      ptrdiff_t same_at_end = ZV_BYTE;
       ptrdiff_t same_at_start_charpos;
       ptrdiff_t inserted_chars;
       ptrdiff_t overlap;
@@ -3986,7 +3938,7 @@ by calling `format-decode', which see.  */)
        }
 
       coding_system = CODING_ID_NAME (coding.id);
-      set_coding_system = 1;
+      set_coding_system = true;
       decoded = BUF_BEG_ADDR (XBUFFER (conversion_buffer));
       inserted = (BUF_Z_BYTE (XBUFFER (conversion_buffer))
                  - BUF_BEG_BYTE (XBUFFER (conversion_buffer)));
@@ -4046,6 +3998,7 @@ by calling `format-decode', which see.  */)
       overlap = same_at_start - BEGV_BYTE - (same_at_end + inserted - ZV_BYTE);
       if (overlap > 0)
        same_at_end += overlap;
+      same_at_end_charpos = BYTE_TO_CHAR (same_at_end);
 
       /* If display currently starts at beginning of line,
         keep it that way.  */
@@ -4061,7 +4014,7 @@ by calling `format-decode', which see.  */)
        {
          invalidate_buffer_caches (current_buffer,
                                    BYTE_TO_CHAR (same_at_start),
-                                   BYTE_TO_CHAR (same_at_end));
+                                   same_at_end_charpos);
          del_range_byte (same_at_start, same_at_end, 0);
          temp = GPT;
          eassert (same_at_start == GPT_BYTE);
@@ -4069,7 +4022,7 @@ by calling `format-decode', which see.  */)
        }
       else
        {
-         temp = BYTE_TO_CHAR (same_at_start);
+         temp = same_at_end_charpos;
        }
       /* Insert from the file at the proper position.  */
       SET_PT_BOTH (temp, same_at_start);
@@ -4111,7 +4064,7 @@ by calling `format-decode', which see.  */)
          /* Make binding buffer-file-name to nil effective.  */
          && !NILP (BVAR (current_buffer, filename))
          && SAVE_MODIFF >= MODIFF)
-       we_locked_file = 1;
+       we_locked_file = true;
       prepare_to_modify_buffer (PT, PT, NULL);
     }
 
@@ -4141,7 +4094,7 @@ by calling `format-decode', which see.  */)
 
     while (how_much < total)
       {
-       /* try is reserved in some compilers (Microsoft C) */
+       /* `try' is reserved in some compilers (Microsoft C).  */
        ptrdiff_t trytry = min (total - how_much, READ_BUF_SIZE);
        ptrdiff_t this;
 
@@ -4166,7 +4119,7 @@ by calling `format-decode', which see.  */)
 
            if (NILP (nbytes))
              {
-               read_quit = 1;
+               read_quit = true;
                break;
              }
 
@@ -4276,11 +4229,9 @@ by calling `format-decode', which see.  */)
            {
              /* If the coding system is not yet decided, check
                 file-coding-system-alist.  */
-             Lisp_Object args[6];
-
-             args[0] = Qinsert_file_contents, args[1] = orig_filename;
-             args[2] = visit, args[3] = beg, args[4] = end, args[5] = Qnil;
-             coding_system = Ffind_operation_coding_system (6, args);
+             coding_system = CALLN (Ffind_operation_coding_system,
+                                    Qinsert_file_contents, orig_filename,
+                                    visit, beg, end, Qnil);
              if (CONSP (coding_system))
                coding_system = XCAR (coding_system);
            }
@@ -4299,7 +4250,7 @@ by calling `format-decode', which see.  */)
        coding_system = raw_text_coding_system (coding_system);
       setup_coding_system (coding_system, &coding);
       /* Ensure we set Vlast_coding_system_used.  */
-      set_coding_system = 1;
+      set_coding_system = true;
     }
 
   if (!NILP (visit))
@@ -4310,7 +4261,7 @@ by calling `format-decode', which see.  */)
          /* Can't do this if part of the buffer might be preserved.  */
          && NILP (replace))
        /* Visiting a file with these coding system makes the buffer
-          unibyte. */
+          unibyte.  */
        bset_enable_multibyte_characters (current_buffer, Qnil);
     }
 
@@ -4349,6 +4300,11 @@ by calling `format-decode', which see.  */)
 
  handled:
 
+  if (inserted > 0)
+    restore_window_points (window_markers, inserted,
+                          BYTE_TO_CHAR (same_at_start),
+                          same_at_end_charpos);
+
   if (!NILP (visit))
     {
       if (empty_undo_list_p)
@@ -4603,12 +4559,9 @@ choose_write_coding_system (Lisp_Object start, 
Lisp_Object end, Lisp_Object file
       if (NILP (val))
        {
          /* Check file-coding-system-alist.  */
-         Lisp_Object args[7], coding_systems;
-
-         args[0] = Qwrite_region; args[1] = start; args[2] = end;
-         args[3] = filename; args[4] = append; args[5] = visit;
-         args[6] = lockname;
-         coding_systems = Ffind_operation_coding_system (7, args);
+         Lisp_Object coding_systems
+           = CALLN (Ffind_operation_coding_system, Qwrite_region, start, end,
+                    filename, append, visit, lockname);
          if (CONSP (coding_systems) && !NILP (XCDR (coding_systems)))
            val = XCDR (coding_systems);
        }
@@ -4678,8 +4631,8 @@ Optional fifth argument VISIT, if t or a string, means
 If VISIT is a string, it is a second file name;
   the output goes to FILENAME, but the buffer is marked as visiting VISIT.
   VISIT is also the file name to lock and unlock for clash detection.
-If VISIT is neither t nor nil nor a string,
-  that means do not display the \"Wrote file\" message.
+If VISIT is neither t nor nil nor a string, or if Emacs is in batch mode,
+  do not display the \"Wrote file\" message.
 The optional sixth arg LOCKNAME, if non-nil, specifies the name to
   use for locking and unlocking, overriding FILENAME and VISIT.
 The optional seventh arg MUSTBENEW, if non-nil, insists on a check
@@ -5046,7 +4999,7 @@ write_region (Lisp_Object start, Lisp_Object end, 
Lisp_Object filename,
       return Qnil;
     }
 
-  if (!auto_saving)
+  if (!auto_saving && !noninteractive)
     message_with_string ((NUMBERP (append)
                          ? "Updated %s"
                          : ! NILP (append)
@@ -5061,10 +5014,7 @@ DEFUN ("car-less-than-car", Fcar_less_than_car, 
Scar_less_than_car, 2, 2, 0,
        doc: /* Return t if (car A) is numerically less than (car B).  */)
   (Lisp_Object a, Lisp_Object b)
 {
-  Lisp_Object args[2];
-  args[0] = Fcar (a);
-  args[1] = Fcar (b);
-  return Flss (2, args);
+  return CALLN (Flss, Fcar (a), Fcar (b));
 }
 
 /* Build the complete list of annotations appropriate for writing out
@@ -5083,7 +5033,7 @@ build_annotations (Lisp_Object start, Lisp_Object end)
   struct gcpro gcpro1, gcpro2;
   Lisp_Object original_buffer;
   int i;
-  bool used_global = 0;
+  bool used_global = false;
 
   XSETBUFFER (original_buffer, current_buffer);
 
@@ -5095,11 +5045,10 @@ build_annotations (Lisp_Object start, Lisp_Object end)
       struct buffer *given_buffer = current_buffer;
       if (EQ (Qt, XCAR (p)) && !used_global)
        { /* Use the global value of the hook.  */
-         Lisp_Object arg[2];
-         used_global = 1;
-         arg[0] = Fdefault_value (Qwrite_region_annotate_functions);
-         arg[1] = XCDR (p);
-         p = Fappend (2, arg);
+         used_global = true;
+         p = CALLN (Fappend,
+                    Fdefault_value (Qwrite_region_annotate_functions),
+                    XCDR (p));
          continue;
        }
       Vwrite_region_annotations_so_far = annotations;
@@ -5428,9 +5377,8 @@ auto_save_error (Lisp_Object error_val)
   ring_bell (XFRAME (selected_frame));
 
   AUTO_STRING (format, "Auto-saving %s: %s");
-  msg = Fformat (3, ((Lisp_Object [])
-                    {format, BVAR (current_buffer, name),
-                     Ferror_message_string (error_val)}));
+  msg = CALLN (Fformat, format, BVAR (current_buffer, name),
+              Ferror_message_string (error_val));
   GCPRO1 (msg);
 
   for (i = 0; i < 3; ++i)
@@ -5752,8 +5700,8 @@ then any auto-save counts as "recent".  */)
      they're never autosaved.  */
   return (SAVE_MODIFF < BUF_AUTOSAVE_MODIFF (current_buffer) ? Qt : Qnil);
 }
-
-/* Reading and completing file names */
+
+/* Reading and completing file names.  */
 
 DEFUN ("next-read-file-uses-dialog-p", Fnext_read_file_uses_dialog_p,
        Snext_read_file_uses_dialog_p, 0, 0, 0,
@@ -5762,8 +5710,8 @@ The return value is only relevant for a call to 
`read-file-name' that happens
 before any other event (mouse or keypress) is handled.  */)
   (void)
 {
-#if defined (USE_MOTIF) || defined (HAVE_NTGUI) || defined (USE_GTK) \
-  || defined (HAVE_NS)
+#if (defined USE_GTK || defined USE_MOTIF \
+     || defined HAVE_NS || defined HAVE_NTGUI)
   if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
       && use_dialog_box
       && use_file_dialog
@@ -5773,6 +5721,48 @@ before any other event (mouse or keypress) is handled.  
*/)
   return Qnil;
 }
 
+
+DEFUN ("set-binary-mode", Fset_binary_mode, Sset_binary_mode, 2, 2, 0,
+       doc: /* Switch STREAM to binary I/O mode or text I/O mode.
+STREAM can be one of the symbols `stdin', `stdout', or `stderr'.
+If MODE is non-nil, switch STREAM to binary mode, otherwise switch
+it to text mode.
+
+As a side effect, this function flushes any pending STREAM's data.
+
+Value is the previous value of STREAM's I/O mode, nil for text mode,
+non-nil for binary mode.
+
+On MS-Windows and MS-DOS, binary mode is needed to read or write
+arbitrary binary data, and for disabling translation between CR-LF
+pairs and a single newline character.  Examples include generation
+of text files with Unix-style end-of-line format using `princ' in
+batch mode, with standard output redirected to a file.
+
+On Posix systems, this function always returns non-nil, and has no
+effect except for flushing STREAM's data.  */)
+  (Lisp_Object stream, Lisp_Object mode)
+{
+  FILE *fp = NULL;
+  int binmode;
+
+  CHECK_SYMBOL (stream);
+  if (EQ (stream, Qstdin))
+    fp = stdin;
+  else if (EQ (stream, Qstdout))
+    fp = stdout;
+  else if (EQ (stream, Qstderr))
+    fp = stderr;
+  else
+    xsignal2 (Qerror, build_string ("unsupported stream"), stream);
+
+  binmode = NILP (mode) ? O_TEXT : O_BINARY;
+  if (fp != stdin)
+    fflush (fp);
+
+  return (set_binary_mode (fileno (fp), binmode) == O_BINARY) ? Qt : Qnil;
+}
+
 void
 init_fileio (void)
 {
@@ -5803,7 +5793,10 @@ init_fileio (void)
 void
 syms_of_fileio (void)
 {
+  /* Property name of a file name handler,
+     which gives a list of operations it handles.  */
   DEFSYM (Qoperations, "operations");
+
   DEFSYM (Qexpand_file_name, "expand-file-name");
   DEFSYM (Qsubstitute_in_file_name, "substitute-in-file-name");
   DEFSYM (Qdirectory_file_name, "directory-file-name");
@@ -5840,6 +5833,12 @@ syms_of_fileio (void)
   DEFSYM (Qwrite_region, "write-region");
   DEFSYM (Qverify_visited_file_modtime, "verify-visited-file-modtime");
   DEFSYM (Qset_visited_file_modtime, "set-visited-file-modtime");
+
+  /* The symbol bound to coding-system-for-read when
+     insert-file-contents is called for recovering a file.  This is not
+     an actual coding system name, but just an indicator to tell
+     insert-file-contents to use `emacs-mule' with a special flag for
+     auto saving and recovering a file.  */
   DEFSYM (Qauto_save_coding, "auto-save-coding");
 
   DEFSYM (Qfile_name_history, "file-name-history");
@@ -5875,9 +5874,14 @@ On MS-Windows, the value of this variable is largely 
ignored if
 behaves as if file names were encoded in `utf-8'.  */);
   Vdefault_file_name_coding_system = Qnil;
 
+  /* Lisp functions for translating file formats.  */
   DEFSYM (Qformat_decode, "format-decode");
   DEFSYM (Qformat_annotate_function, "format-annotate-function");
+
+  /* Lisp function for setting buffer-file-coding-system and the
+     multibyteness of the current buffer after inserting a file.  */
   DEFSYM (Qafter_insert_file_set_coding, "after-insert-file-set-coding");
+
   DEFSYM (Qcar_less_than_car, "car-less-than-car");
 
   Fput (Qfile_error, Qerror_conditions,
@@ -6031,12 +6035,23 @@ When non-nil, certain file deletion commands use the 
function
 This includes interactive calls to `delete-file' and
 `delete-directory' and the Dired deletion commands.  */);
   delete_by_moving_to_trash = 0;
-  Qdelete_by_moving_to_trash = intern_c_string ("delete-by-moving-to-trash");
+  DEFSYM (Qdelete_by_moving_to_trash, "delete-by-moving-to-trash");
 
+  /* Lisp function for moving files to trash.  */
   DEFSYM (Qmove_file_to_trash, "move-file-to-trash");
+
+  /* Lisp function for recursively copying directories.  */
   DEFSYM (Qcopy_directory, "copy-directory");
+
+  /* Lisp function for recursively deleting directories.  */
   DEFSYM (Qdelete_directory, "delete-directory");
+
   DEFSYM (Qsubstitute_env_in_file_name, "substitute-env-in-file-name");
+  DEFSYM (Qget_buffer_window_list, "get-buffer-window-list");
+
+  DEFSYM (Qstdin, "stdin");
+  DEFSYM (Qstdout, "stdout");
+  DEFSYM (Qstderr, "stderr");
 
   defsubr (&Sfind_file_name_handler);
   defsubr (&Sfile_name_directory);
@@ -6087,6 +6102,8 @@ This includes interactive calls to `delete-file' and
 
   defsubr (&Snext_read_file_uses_dialog_p);
 
+  defsubr (&Sset_binary_mode);
+
 #ifdef HAVE_SYNC
   defsubr (&Sunix_sync);
 #endif
diff --git a/src/filelock.c b/src/filelock.c
index f857c48..89d3e35 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -1,7 +1,7 @@
 /* Lock files for editing.
 
-Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2014
-  Free Software Foundation, Inc.
+Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2015 Free Software
+Foundation, Inc.
 
 Author: Richard King
   (according to authors.el)
@@ -209,8 +209,6 @@ get_boot_time (void)
                                            WTMP_FILE, counter);
          if (! NILP (Ffile_exists_p (tempname)))
            {
-             Lisp_Object args[6];
-
              /* The utmp functions on mescaline.gnu.org accept only
                 file names up to 8 characters long.  Choose a 2
                 character long prefix, and call make_temp_file with
@@ -219,13 +217,9 @@ get_boot_time (void)
              filename = Fexpand_file_name (build_string ("wt"),
                                            Vtemporary_file_directory);
              filename = make_temp_name (filename, 1);
-             args[0] = build_string ("gzip");
-             args[1] = Qnil;
-             args[2] = list2 (QCfile, filename);
-             args[3] = Qnil;
-             args[4] = build_string ("-cd");
-             args[5] = tempname;
-             Fcall_process (6, args);
+             CALLN (Fcall_process, build_string ("gzip"), Qnil,
+                    list2 (QCfile, filename), Qnil,
+                    build_string ("-cd"), tempname);
              delete_flag = 1;
            }
        }
@@ -592,9 +586,10 @@ current_lock_owner (lock_info_type *owner, char *lfname)
     return -1;
 
   /* On current host?  */
-  if (STRINGP (Vsystem_name)
-      && dot - (at + 1) == SBYTES (Vsystem_name)
-      && memcmp (at + 1, SSDATA (Vsystem_name), SBYTES (Vsystem_name)) == 0)
+  Lisp_Object system_name = Fsystem_name ();
+  if (STRINGP (system_name)
+      && dot - (at + 1) == SBYTES (system_name)
+      && memcmp (at + 1, SSDATA (system_name), SBYTES (system_name)) == 0)
     {
       if (pid == getpid ())
         ret = 2; /* We own it.  */
diff --git a/src/firstfile.c b/src/firstfile.c
index 0965152..aa58792 100644
--- a/src/firstfile.c
+++ b/src/firstfile.c
@@ -1,5 +1,5 @@
 /* Mark beginning of data space to dump as pure, for GNU Emacs.
-   Copyright (C) 1997, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/floatfns.c b/src/floatfns.c
index 75106a6..c68b9bd 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -1,6 +1,7 @@
 /* Primitive operations on floating point for GNU Emacs Lisp interpreter.
 
-Copyright (C) 1988, 1993-1994, 1999, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1988, 1993-1994, 1999, 2001-2015 Free Software Foundation,
+Inc.
 
 Author: Wolfgang Rupprecht
 (according to ack.texi)
diff --git a/src/fns.c b/src/fns.c
index e891fdb..4c70951 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1,6 +1,6 @@
 /* Random utility Lisp functions.
 
-Copyright (C) 1985-1987, 1993-1995, 1997-2014 Free Software Foundation,
+Copyright (C) 1985-1987, 1993-1995, 1997-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -41,22 +41,13 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "xterm.h"
 #endif
 
-Lisp_Object Qstring_lessp;
-static Lisp_Object Qstring_collate_lessp, Qstring_collate_equalp;
-static Lisp_Object Qprovide, Qrequire;
-static Lisp_Object Qyes_or_no_p_history;
-Lisp_Object Qcursor_in_echo_area;
-static Lisp_Object Qwidget_type;
-static Lisp_Object Qcodeset, Qdays, Qmonths, Qpaper;
-
-static Lisp_Object Qmd5, Qsha1, Qsha224, Qsha256, Qsha384, Qsha512;
-
 static void sort_vector_copy (Lisp_Object, ptrdiff_t,
                              Lisp_Object [restrict], Lisp_Object [restrict]);
 static bool internal_equal (Lisp_Object, Lisp_Object, int, bool, Lisp_Object);
 
 DEFUN ("identity", Fidentity, Sidentity, 1, 1, 0,
-       doc: /* Return the argument unchanged.  */)
+       doc: /* Return the argument unchanged.  */
+       attributes: const)
   (Lisp_Object arg)
 {
   return arg;
@@ -449,21 +440,14 @@ static Lisp_Object concat (ptrdiff_t nargs, Lisp_Object 
*args,
 Lisp_Object
 concat2 (Lisp_Object s1, Lisp_Object s2)
 {
-  Lisp_Object args[2];
-  args[0] = s1;
-  args[1] = s2;
-  return concat (2, args, Lisp_String, 0);
+  return concat (2, ((Lisp_Object []) {s1, s2}), Lisp_String, 0);
 }
 
 /* ARGSUSED */
 Lisp_Object
 concat3 (Lisp_Object s1, Lisp_Object s2, Lisp_Object s3)
 {
-  Lisp_Object args[3];
-  args[0] = s1;
-  args[1] = s2;
-  args[2] = s3;
-  return concat (3, args, Lisp_String, 0);
+  return concat (3, ((Lisp_Object []) {s1, s2, s3}), Lisp_String, 0);
 }
 
 DEFUN ("append", Fappend, Sappend, 0, MANY, 0,
@@ -2264,12 +2248,7 @@ internal_equal (Lisp_Object o1, Lisp_Object o2, int 
depth, bool props,
       if (depth > 200)
        error ("Stack overflow in equal");
       if (NILP (ht))
-       {
-         Lisp_Object args[2];
-         args[0] = QCtest;
-         args[1] = Qeq;
-         ht = Fmake_hash_table (2, args);
-       }
+       ht = CALLN (Fmake_hash_table, QCtest, Qeq);
       switch (XTYPE (o1))
        {
        case Lisp_Cons: case Lisp_Misc: case Lisp_Vectorlike:
@@ -2473,10 +2452,7 @@ This makes STRING unibyte and may change its length.  */)
 Lisp_Object
 nconc2 (Lisp_Object s1, Lisp_Object s2)
 {
-  Lisp_Object args[2];
-  args[0] = s1;
-  args[1] = s2;
-  return Fnconc (2, args);
+  return CALLN (Fnconc, s1, s2);
 }
 
 DEFUN ("nconc", Fnconc, Snconc, 0, MANY, 0,
@@ -2526,16 +2502,14 @@ usage: (nconc &rest LISTS)  */)
 static void
 mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
 {
-  register Lisp_Object tail;
-  Lisp_Object dummy;
-  register EMACS_INT i;
+  Lisp_Object tail, dummy;
+  EMACS_INT i;
   struct gcpro gcpro1, gcpro2, gcpro3;
 
   if (vals)
     {
       /* Don't let vals contain any garbage when GC happens.  */
-      for (i = 0; i < leni; i++)
-       vals[i] = Qnil;
+      memclear (vals, leni * word_size);
 
       GCPRO3 (dummy, fn, seq);
       gcpro1.var = vals;
@@ -2726,7 +2700,7 @@ if `last-nonmenu-event' is nil, and `use-dialog-box' is 
non-nil.  */)
     }
 
   AUTO_STRING (yes_or_no, "(yes or no) ");
-  prompt = Fconcat (2, (Lisp_Object []) {prompt, yes_or_no});
+  prompt = CALLN (Fconcat, prompt, yes_or_no);
   GCPRO1 (prompt);
 
   while (1)
@@ -2788,8 +2762,6 @@ advisable.  */)
   return ret;
 }
 
-static Lisp_Object Qsubfeatures;
-
 DEFUN ("featurep", Ffeaturep, Sfeaturep, 1, 2, 0,
        doc: /* Return t if FEATURE is present in this Emacs.
 
@@ -2808,8 +2780,6 @@ SUBFEATURE can be used to check a specific subfeature of 
FEATURE.  */)
   return (NILP (tem)) ? Qnil : Qt;
 }
 
-static Lisp_Object Qfuncall;
-
 DEFUN ("provide", Fprovide, Sprovide, 1, 2, 0,
        doc: /* Announce that FEATURE is a feature of the current Emacs.
 The optional argument SUBFEATURES should be a list of symbols listing
@@ -3010,15 +2980,13 @@ usage: (widget-apply WIDGET PROPERTY &rest ARGS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {
   /* This function can GC.  */
-  Lisp_Object newargs[3];
   struct gcpro gcpro1, gcpro2;
-  Lisp_Object result;
-
-  newargs[0] = Fwidget_get (args[0], args[1]);
-  newargs[1] = args[0];
-  newargs[2] = Flist (nargs - 2, args + 2);
-  GCPRO2 (newargs[0], newargs[2]);
-  result = Fapply (3, newargs);
+  Lisp_Object widget = args[0];
+  Lisp_Object property = args[1];
+  Lisp_Object propval = Fwidget_get (widget, property);
+  Lisp_Object trailing_args = Flist (nargs - 2, args + 2);
+  GCPRO2 (propval, trailing_args);
+  Lisp_Object result = CALLN (Fapply, propval, widget, trailing_args);
   UNGCPRO;
   return result;
 }
@@ -3596,14 +3564,6 @@ base64_decode_1 (const char *from, char *to, ptrdiff_t 
length,
 
 static struct Lisp_Hash_Table *weak_hash_tables;
 
-/* Various symbols.  */
-
-static Lisp_Object Qhash_table_p;
-static Lisp_Object Qkey, Qvalue, Qeql;
-Lisp_Object Qeq, Qequal;
-Lisp_Object QCtest, QCsize, QCrehash_size, QCrehash_threshold, QCweakness;
-static Lisp_Object Qhash_table_test, Qkey_or_value, Qkey_and_value;
-
 
 /***********************************************************************
                               Utilities
@@ -3709,7 +3669,7 @@ Lisp_Object
 larger_vector (Lisp_Object vec, ptrdiff_t incr_min, ptrdiff_t nitems_max)
 {
   struct Lisp_Vector *v;
-  ptrdiff_t i, incr, incr_max, old_size, new_size;
+  ptrdiff_t incr, incr_max, old_size, new_size;
   ptrdiff_t C_language_max = min (PTRDIFF_MAX, SIZE_MAX) / sizeof *v->contents;
   ptrdiff_t n_max = (0 <= nitems_max && nitems_max < C_language_max
                     ? nitems_max : C_language_max);
@@ -3723,8 +3683,7 @@ larger_vector (Lisp_Object vec, ptrdiff_t incr_min, 
ptrdiff_t nitems_max)
   new_size = old_size + incr;
   v = allocate_vector (new_size);
   memcpy (v->contents, XVECTOR (vec)->contents, old_size * sizeof 
*v->contents);
-  for (i = old_size; i < new_size; ++i)
-    v->contents[i] = Qnil;
+  memclear (v->contents + old_size, incr * word_size);
   XSETVECTOR (vec, v);
   return vec;
 }
@@ -3774,12 +3733,7 @@ cmpfn_user_defined (struct hash_table_test *ht,
                    Lisp_Object key1,
                    Lisp_Object key2)
 {
-  Lisp_Object args[3];
-
-  args[0] = ht->user_cmp_function;
-  args[1] = key1;
-  args[2] = key2;
-  return !NILP (Ffuncall (3, args));
+  return !NILP (call2 (ht->user_cmp_function, key1, key2));
 }
 
 
@@ -3827,14 +3781,19 @@ hashfn_equal (struct hash_table_test *ht, Lisp_Object 
key)
 static EMACS_UINT
 hashfn_user_defined (struct hash_table_test *ht, Lisp_Object key)
 {
-  Lisp_Object args[2], hash;
-
-  args[0] = ht->user_hash_function;
-  args[1] = key;
-  hash = Ffuncall (2, args);
+  Lisp_Object hash = call1 (ht->user_hash_function, key);
   return hashfn_eq (ht, hash);
 }
 
+/* Allocate basically initialized hash table.  */
+
+static struct Lisp_Hash_Table *
+allocate_hash_table (void)
+{
+  return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table,
+                               count, PVEC_HASH_TABLE);
+}
+
 /* An upper bound on the size of a hash table index.  It must fit in
    ptrdiff_t and be a valid Emacs fixnum.  */
 #define INDEX_SIZE_BOUND \
@@ -3995,9 +3954,8 @@ maybe_resize_hash_table (struct Lisp_Hash_Table *h)
 #ifdef ENABLE_CHECKING
       if (HASH_TABLE_P (Vpurify_flag)
          && XHASH_TABLE (Vpurify_flag) == h)
-       Fmessage (2, ((Lisp_Object [])
-         { build_string ("Growing hash table to: %d"),
-           make_number (new_size) }));
+       CALLN (Fmessage, build_string ("Growing hash table to: %d"),
+              make_number (new_size));
 #endif
 
       set_hash_key_and_value (h, larger_vector (h->key_and_value,
@@ -4774,17 +4732,10 @@ FUNCTION is called with two arguments, KEY and VALUE.
   (Lisp_Object function, Lisp_Object table)
 {
   struct Lisp_Hash_Table *h = check_hash_table (table);
-  Lisp_Object args[3];
-  ptrdiff_t i;
 
-  for (i = 0; i < HASH_TABLE_SIZE (h); ++i)
+  for (ptrdiff_t i = 0; i < HASH_TABLE_SIZE (h); ++i)
     if (!NILP (HASH_HASH (h, i)))
-      {
-       args[0] = function;
-       args[1] = HASH_KEY (h, i);
-       args[2] = HASH_VALUE (h, i);
-       Ffuncall (3, args);
-      }
+      call2 (function, HASH_KEY (h, i), HASH_VALUE (h, i));
 
   return Qnil;
 }
@@ -4926,11 +4877,9 @@ secure_hash (Lisp_Object algorithm, Lisp_Object object, 
Lisp_Object start,
              if (NILP (coding_system) && !NILP (Fbuffer_file_name (object)))
                {
                  /* Check file-coding-system-alist.  */
-                 Lisp_Object args[4], val;
-
-                 args[0] = Qwrite_region; args[1] = start; args[2] = end;
-                 args[3] = Fbuffer_file_name (object);
-                 val = Ffind_operation_coding_system (4, args);
+                 Lisp_Object val = CALLN (Ffind_operation_coding_system,
+                                          Qwrite_region, start, end,
+                                          Fbuffer_file_name (object));
                  if (CONSP (val) && !NILP (XCDR (val)))
                    coding_system = XCDR (val);
                }
diff --git a/src/font.c b/src/font.c
index 70e6316..9ea43cd 100644
--- a/src/font.c
+++ b/src/font.c
@@ -1,6 +1,6 @@
 /* font.c -- "Font" primitives.
 
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2015 Free Software Foundation, Inc.
 Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
   Registration Number H13PRO009
@@ -41,16 +41,8 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include TERM_HEADER
 #endif /* HAVE_WINDOW_SYSTEM */
 
-Lisp_Object Qopentype;
-
-/* Important character set strings.  */
-Lisp_Object Qascii_0, Qiso8859_1, Qiso10646_1, Qunicode_bmp, Qunicode_sip;
-
 #define DEFAULT_ENCODING Qiso8859_1
 
-/* Unicode category `Cf'.  */
-static Lisp_Object QCf;
-
 /* Vector of Vfont_weight_table, Vfont_slant_table, and Vfont_width_table. */
 static Lisp_Object font_style_table;
 
@@ -110,21 +102,6 @@ static const struct table_entry width_table[] =
   { 200, { "ultra-expanded", "ultraexpanded", "wide" }}
 };
 
-Lisp_Object QCfoundry;
-static Lisp_Object QCadstyle, QCregistry;
-/* Symbols representing keys of font extra info.  */
-Lisp_Object QCspacing, QCdpi, QCscalable, QCotf, QClang, QCscript, QCavgwidth;
-Lisp_Object QCantialias, QCfont_entity;
-static Lisp_Object QCfc_unknown_spec;
-/* Symbols representing values of font spacing property.  */
-static Lisp_Object Qc, Qm, Qd;
-Lisp_Object Qp;
-/* Special ADSTYLE properties to avoid fonts used for Latin
-   characters; used in xfont.c and ftfont.c.  */
-Lisp_Object Qja, Qko;
-
-static Lisp_Object QCuser_spec;
-
 /* Alist of font registry symbols and the corresponding charset
    information.  The information is retrieved from
    Vfont_encoding_alist on demand.
@@ -179,7 +156,7 @@ font_make_spec (void)
   struct font_spec *spec
     = ((struct font_spec *)
        allocate_pseudovector (VECSIZE (struct font_spec),
-                             FONT_SPEC_MAX, PVEC_FONT));
+                             FONT_SPEC_MAX, FONT_SPEC_MAX, PVEC_FONT));
   XSETFONT (font_spec, spec);
   return font_spec;
 }
@@ -191,7 +168,7 @@ font_make_entity (void)
   struct font_entity *entity
     = ((struct font_entity *)
        allocate_pseudovector (VECSIZE (struct font_entity),
-                             FONT_ENTITY_MAX, PVEC_FONT));
+                             FONT_ENTITY_MAX, FONT_ENTITY_MAX, PVEC_FONT));
   XSETFONT (font_entity, entity);
   return font_entity;
 }
@@ -204,7 +181,8 @@ font_make_object (int size, Lisp_Object entity, int 
pixelsize)
 {
   Lisp_Object font_object;
   struct font *font
-    = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX, PVEC_FONT);
+    = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX,
+                                            FONT_OBJECT_MAX, PVEC_FONT);
   int i;
 
   /* GC can happen before the driver is set up,
@@ -309,7 +287,7 @@ font_intern_prop (const char *str, ptrdiff_t len, bool 
force_symbol)
     return tem;
   name = make_specified_string (str, nchars, len,
                                len != nchars && len == nbytes);
-  return intern_driver (name, obarray, XINT (tem));
+  return intern_driver (name, obarray, tem);
 }
 
 /* Return a pixel size of font-spec SPEC on frame F.  */
@@ -396,8 +374,7 @@ font_style_to_value (enum font_property_index prop, 
Lisp_Object val,
       elt = Fmake_vector (make_number (2), make_number (100));
       ASET (elt, 1, val);
       ASET (font_style_table, prop - FONT_WEIGHT_INDEX,
-           Fvconcat (2, ((Lisp_Object [])
-             { table, Fmake_vector (make_number (1), elt) })));
+           CALLN (Fvconcat, table, Fmake_vector (make_number (1), elt)));
       return (100 << 8) | (i << 4);
     }
   else
@@ -662,30 +639,30 @@ font_prop_validate_otf (Lisp_Object prop, Lisp_Object val)
    values.  */
 static const struct
 {
-  /* Pointer to the key symbol.  */
-  Lisp_Object *key;
+  /* Index of the key symbol.  */
+  int key;
   /* Function to validate PROP's value VAL, or NULL if any value is
      ok.  The value is VAL or its regularized value if VAL is valid,
      and Qerror if not.  */
   Lisp_Object (*validator) (Lisp_Object prop, Lisp_Object val);
 } font_property_table[] =
-  { { &QCtype, font_prop_validate_symbol },
-    { &QCfoundry, font_prop_validate_symbol },
-    { &QCfamily, font_prop_validate_symbol },
-    { &QCadstyle, font_prop_validate_symbol },
-    { &QCregistry, font_prop_validate_symbol },
-    { &QCweight, font_prop_validate_style },
-    { &QCslant, font_prop_validate_style },
-    { &QCwidth, font_prop_validate_style },
-    { &QCsize, font_prop_validate_non_neg },
-    { &QCdpi, font_prop_validate_non_neg },
-    { &QCspacing, font_prop_validate_spacing },
-    { &QCavgwidth, font_prop_validate_non_neg },
+  { { SYMBOL_INDEX (QCtype), font_prop_validate_symbol },
+    { SYMBOL_INDEX (QCfoundry), font_prop_validate_symbol },
+    { SYMBOL_INDEX (QCfamily), font_prop_validate_symbol },
+    { SYMBOL_INDEX (QCadstyle), font_prop_validate_symbol },
+    { SYMBOL_INDEX (QCregistry), font_prop_validate_symbol },
+    { SYMBOL_INDEX (QCweight), font_prop_validate_style },
+    { SYMBOL_INDEX (QCslant), font_prop_validate_style },
+    { SYMBOL_INDEX (QCwidth), font_prop_validate_style },
+    { SYMBOL_INDEX (QCsize), font_prop_validate_non_neg },
+    { SYMBOL_INDEX (QCdpi), font_prop_validate_non_neg },
+    { SYMBOL_INDEX (QCspacing), font_prop_validate_spacing },
+    { SYMBOL_INDEX (QCavgwidth), font_prop_validate_non_neg },
     /* The order of the above entries must match with enum
        font_property_index.  */
-    { &QClang, font_prop_validate_symbol },
-    { &QCscript, font_prop_validate_symbol },
-    { &QCotf, font_prop_validate_otf }
+    { SYMBOL_INDEX (QClang), font_prop_validate_symbol },
+    { SYMBOL_INDEX (QCscript), font_prop_validate_symbol },
+    { SYMBOL_INDEX (QCotf), font_prop_validate_otf }
   };
 
 /* Return an index number of font property KEY or -1 if KEY is not an
@@ -697,7 +674,7 @@ get_font_prop_index (Lisp_Object key)
   int i;
 
   for (i = 0; i < ARRAYELTS (font_property_table); i++)
-    if (EQ (key, *font_property_table[i].key))
+    if (EQ (key, builtin_lisp_symbol (font_property_table[i].key)))
       return i;
   return -1;
 }
@@ -714,7 +691,7 @@ font_prop_validate (int idx, Lisp_Object prop, Lisp_Object 
val)
   if (NILP (val))
     return val;
   if (NILP (prop))
-    prop = *font_property_table[idx].key;
+    prop = builtin_lisp_symbol (font_property_table[idx].key);
   else
     {
       idx = get_font_prop_index (prop);
@@ -1011,15 +988,14 @@ font_expand_wildcards (Lisp_Object *field, int n)
          if (i == 0 || ! NILP (tmp[i - 1]))
            /* None of TMP[X] corresponds to Jth field.  */
            return -1;
-         for (; j < range[i].from; j++)
-           field[j] = Qnil;
+         memclear (field + j, (range[i].from - j) * word_size);
+         j = range[i].from;
        }
       field[j++] = tmp[i];
     }
   if (! NILP (tmp[n - 1]) && j < XLFD_REGISTRY_INDEX)
     return -1;
-  for (; j < XLFD_LAST_INDEX; j++)
-    field[j] = Qnil;
+  memclear (field + j, (XLFD_LAST_INDEX - j) * word_size);
   if (INTEGERP (field[XLFD_ENCODING_INDEX]))
     field[XLFD_ENCODING_INDEX]
       = Fintern (Fnumber_to_string (field[XLFD_ENCODING_INDEX]), Qnil);
@@ -3423,16 +3399,11 @@ font_open_by_spec (struct frame *f, Lisp_Object spec)
 Lisp_Object
 font_open_by_name (struct frame *f, Lisp_Object name)
 {
-  Lisp_Object args[2];
-  Lisp_Object spec, ret;
-
-  args[0] = QCname;
-  args[1] = name;
-  spec = Ffont_spec (2, args);
-  ret = font_open_by_spec (f, spec);
+  Lisp_Object spec = CALLN (Ffont_spec, QCname, name);
+  Lisp_Object ret = font_open_by_spec (f, spec);
   /* Do not lose name originally put in.  */
   if (!NILP (ret))
-    font_put_extra (ret, QCuser_spec, args[1]);
+    font_put_extra (ret, QCuser_spec, name);
 
   return ret;
 }
@@ -3736,10 +3707,10 @@ font_at (int c, ptrdiff_t pos, struct face *face, 
struct window *w,
 
       if (STRINGP (string))
        face_id = face_at_string_position (w, string, pos, 0, &endptr,
-                                          DEFAULT_FACE_ID, 0);
+                                          DEFAULT_FACE_ID, false);
       else
        face_id = face_at_buffer_position (w, pos, &endptr,
-                                          pos + 100, 0, -1);
+                                          pos + 100, false, -1);
       face = FACE_FROM_ID (f, face_id);
     }
   if (multibyte)
@@ -3783,7 +3754,7 @@ font_range (ptrdiff_t pos, ptrdiff_t pos_byte, ptrdiff_t 
*limit,
          int face_id;
 
          face_id = face_at_buffer_position (w, pos, &ignore,
-                                            *limit, 0, -1);
+                                            *limit, false, -1);
          face = FACE_FROM_ID (XFRAME (w->frame), face_id);
        }
     }
@@ -4204,13 +4175,7 @@ how close they are to PREFER.  */)
   else
     vec = font_vconcat_entity_vectors (list);
   if (n == 0 || n >= ASIZE (vec))
-    {
-      Lisp_Object args[2];
-
-      args[0] = vec;
-      args[1] = Qnil;
-      list = Fappend (2, args);
-    }
+    list = CALLN (Fappend, vec, Qnil);
   else
     {
       for (list = Qnil, n--; n >= 0; n--)
@@ -4555,12 +4520,11 @@ character code corresponding to the glyph or nil if 
there's no
 corresponding character.  */)
   (Lisp_Object font_object, Lisp_Object character, Lisp_Object otf_features)
 {
-  struct font *font;
+  struct font *font = CHECK_FONT_GET_OBJECT (font_object);
   Lisp_Object gstring_in, gstring_out, g;
   Lisp_Object alternates;
   int i, num;
 
-  CHECK_FONT_GET_OBJECT (font_object, font);
   if (! font->driver->otf_drive)
     error ("Font backend %s can't drive OpenType GSUB table",
           SDATA (SYMBOL_NAME (font->driver->type)));
@@ -4670,12 +4634,9 @@ FEATURE is a symbol representing OpenType feature tag.
 If the font is not OpenType font, CAPABILITY is nil.  */)
   (Lisp_Object font_object)
 {
-  struct font *font;
-  Lisp_Object val;
-
-  CHECK_FONT_GET_OBJECT (font_object, font);
+  struct font *font = CHECK_FONT_GET_OBJECT (font_object);
+  Lisp_Object val = make_uninit_vector (9);
 
-  val = make_uninit_vector (9);
   ASET (val, 0, AREF (font_object, FONT_NAME_INDEX));
   ASET (val, 1, AREF (font_object, FONT_FILE_INDEX));
   ASET (val, 2, make_number (font->pixel_size));
@@ -4714,12 +4675,11 @@ the corresponding element is nil.  */)
   (Lisp_Object font_object, Lisp_Object from, Lisp_Object to,
    Lisp_Object object)
 {
-  struct font *font;
+  struct font *font = CHECK_FONT_GET_OBJECT (font_object);
   ptrdiff_t i, len;
   Lisp_Object *chars, vec;
   USE_SAFE_ALLOCA;
 
-  CHECK_FONT_GET_OBJECT (font_object, font);
   if (NILP (object))
     {
       ptrdiff_t charpos, bytepos;
@@ -4921,8 +4881,11 @@ If FRAME is omitted or nil, use the selected frame.  */)
 DEFUN ("font-info", Ffont_info, Sfont_info, 1, 2, 0,
        doc: /* Return information about a font named NAME on frame FRAME.
 If FRAME is omitted or nil, use the selected frame.
-The returned value is a vector of OPENED-NAME, FULL-NAME, SIZE,
-  HEIGHT, BASELINE-OFFSET, RELATIVE-COMPOSE, and DEFAULT-ASCENT,
+
+The returned value is a vector:
+  [ OPENED-NAME FULL-NAME SIZE HEIGHT BASELINE-OFFSET RELATIVE-COMPOSE
+    DEFAULT-ASCENT MAX-WIDTH ASCENT DESCENT SPACE-WIDTH AVERAGE-WIDTH
+    CAPABILITY ]
 where
   OPENED-NAME is the name used for opening the font,
   FULL-NAME is the full name of the font,
@@ -4930,7 +4893,33 @@ where
   HEIGHT is the pixel-height of the font (i.e., ascent + descent),
   BASELINE-OFFSET is the upward offset pixels from ASCII baseline,
   RELATIVE-COMPOSE and DEFAULT-ASCENT are the numbers controlling
-    how to compose characters.
+    how to compose characters,
+  MAX-WIDTH is the maximum advance width of the font,
+  ASCENT, DESCENT, SPACE-WIDTH, AVERAGE-WIDTH are metrics of the font
+    in pixels,
+  FILENAME is the font file name, a string (or nil if the font backend
+    doesn't provide a file name).
+  CAPABILITY is a list whose first element is a symbol representing the
+    font format, one of x, opentype, truetype, type1, pcf, or bdf.
+    The remaining elements describe the details of the font capabilities,
+    as follows:
+
+      If the font is OpenType font, the form of the list is
+        \(opentype GSUB GPOS)
+      where GSUB shows which "GSUB" features the font supports, and GPOS
+      shows which "GPOS" features the font supports.  Both GSUB and GPOS are
+      lists of the form:
+       \((SCRIPT (LANGSYS FEATURE ...) ...) ...)
+
+      where
+        SCRIPT is a symbol representing OpenType script tag.
+        LANGSYS is a symbol representing OpenType langsys tag, or nil
+         representing the default langsys.
+        FEATURE is a symbol representing OpenType feature tag.
+
+      If the font is not an OpenType font, there are no elements
+      in CAPABILITY except the font format symbol.
+
 If the named font is not yet loaded, return nil.  */)
   (Lisp_Object name, Lisp_Object frame)
 {
@@ -4966,7 +4955,7 @@ If the named font is not yet loaded, return nil.  */)
     return Qnil;
   font = XFONT_OBJECT (font_object);
 
-  info = make_uninit_vector (7);
+  info = make_uninit_vector (14);
   ASET (info, 0, AREF (font_object, FONT_NAME_INDEX));
   ASET (info, 1, AREF (font_object, FONT_FULLNAME_INDEX));
   ASET (info, 2, make_number (font->pixel_size));
@@ -4974,6 +4963,16 @@ If the named font is not yet loaded, return nil.  */)
   ASET (info, 4, make_number (font->baseline_offset));
   ASET (info, 5, make_number (font->relative_compose));
   ASET (info, 6, make_number (font->default_ascent));
+  ASET (info, 7, make_number (font->max_width));
+  ASET (info, 8, make_number (font->ascent));
+  ASET (info, 9, make_number (font->descent));
+  ASET (info, 10, make_number (font->space_width));
+  ASET (info, 11, make_number (font->average_width));
+  ASET (info, 12, AREF (font_object, FONT_FILE_INDEX));
+  if (font->driver->otf_capability)
+    ASET (info, 13, Fcons (Qopentype, font->driver->otf_capability (font)));
+  else
+    ASET (info, 13, Qnil);
 
 #if 0
   /* As font_object is still in FONT_OBJLIST of the entity, we can't
@@ -5130,19 +5129,21 @@ syms_of_font (void)
 
   DEFSYM (Qopentype, "opentype");
 
+  /* Important character set symbols.  */
   DEFSYM (Qascii_0, "ascii-0");
   DEFSYM (Qiso8859_1, "iso8859-1");
   DEFSYM (Qiso10646_1, "iso10646-1");
   DEFSYM (Qunicode_bmp, "unicode-bmp");
   DEFSYM (Qunicode_sip, "unicode-sip");
 
+  /* Unicode category `Cf'.  */
   DEFSYM (QCf, "Cf");
 
+  /* Symbols representing keys of font extra info.  */
   DEFSYM (QCotf, ":otf");
   DEFSYM (QClang, ":lang");
   DEFSYM (QCscript, ":script");
   DEFSYM (QCantialias, ":antialias");
-
   DEFSYM (QCfoundry, ":foundry");
   DEFSYM (QCadstyle, ":adstyle");
   DEFSYM (QCregistry, ":registry");
@@ -5153,11 +5154,14 @@ syms_of_font (void)
   DEFSYM (QCfont_entity, ":font-entity");
   DEFSYM (QCfc_unknown_spec, ":fc-unknown-spec");
 
+  /* Symbols representing values of font spacing property.  */
   DEFSYM (Qc, "c");
   DEFSYM (Qm, "m");
   DEFSYM (Qp, "p");
   DEFSYM (Qd, "d");
 
+  /* Special ADSTYLE properties to avoid fonts used for Latin
+     characters; used in xfont.c and ftfont.c.  */
   DEFSYM (Qja, "ja");
   DEFSYM (Qko, "ko");
 
diff --git a/src/font.h b/src/font.h
index 5278341..efc184e 100644
--- a/src/font.h
+++ b/src/font.h
@@ -1,5 +1,5 @@
 /* font.h -- Interface definition for font handling.
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
@@ -56,7 +56,6 @@ INLINE_HEADER_BEGIN
        Note: Only the method `open' of a font-driver can create this
        object, and it should never be modified by Lisp.  */
 
-extern Lisp_Object Qfont_spec, Qfont_entity, Qfont_object;
 
 /* An enumerator for each font property.  This is used as an index to
    the vector of FONT-SPEC and FONT-ENTITY.
@@ -239,17 +238,6 @@ enum font_property_index
 #define FONT_BASE(f) ((f)->ascent)
 #define FONT_DESCENT(f) ((f)->descent)
 
-extern Lisp_Object QCspacing, QCdpi, QCscalable, QCotf, QClang, QCscript;
-extern Lisp_Object QCavgwidth, QCantialias, QCfont_entity;
-extern Lisp_Object Qp;
-
-
-/* Important character set symbols.  */
-extern Lisp_Object Qascii_0;
-extern Lisp_Object Qiso8859_1, Qiso10646_1, Qunicode_bmp, Qunicode_sip;
-
-/* Special ADSTYLE properties to avoid fonts used for Latin characters.  */
-extern Lisp_Object Qja, Qko;
 
 /* Structure for a font-spec.  */
 
@@ -425,46 +413,91 @@ struct font_bitmap
 /* Predicates to check various font-related objects.  */
 
 /* True iff X is one of font-spec, font-entity, and font-object.  */
-#define FONTP(x) PSEUDOVECTORP (x, PVEC_FONT)
+INLINE bool
+FONTP (Lisp_Object x)
+{
+  return PSEUDOVECTORP (x, PVEC_FONT);
+}
+
 /* True iff X is font-spec.  */
-#define FONT_SPEC_P(x) \
-  (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX)
+INLINE bool
+FONT_SPEC_P (Lisp_Object x)
+{
+  return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX;
+}
+
 /* True iff X is font-entity.  */
-#define FONT_ENTITY_P(x)       \
-  (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX)
+INLINE bool
+FONT_ENTITY_P (Lisp_Object x)
+{
+  return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX;
+}
+
 /* True iff X is font-object.  */
-#define FONT_OBJECT_P(x)       \
-  (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX)
-
-/* Check macros for various font-related objects.  */
-
-#define CHECK_FONT(x)  \
-  do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (false)
-#define CHECK_FONT_SPEC(x)     \
-  do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } \
-  while (false)
-#define CHECK_FONT_ENTITY(x)   \
-  do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } \
-  while (false)
-#define CHECK_FONT_OBJECT(x)   \
-  do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } \
-  while (false)
-
-#define CHECK_FONT_GET_OBJECT(x, font) \
-  do {                                 \
-    CHECK_FONT_OBJECT (x);             \
-    font = XFONT_OBJECT (x);           \
-  } while (false)
+INLINE bool
+FONT_OBJECT_P (Lisp_Object x)
+{
+  return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX;
+}
+
+/* Type checking functions for various font-related objects.  */
+
+INLINE void
+CHECK_FONT (Lisp_Object x)
+{
+  CHECK_TYPE (FONTP (x), Qfont, x);
+}
+
+INLINE void
+CHECK_FONT_SPEC (Lisp_Object x)
+{
+  CHECK_TYPE (FONT_SPEC_P (x), Qfont_spec, x);
+}
+
+INLINE void
+CHECK_FONT_ENTITY (Lisp_Object x)
+{
+  CHECK_TYPE (FONT_ENTITY_P (x), Qfont_entity, x);
+}
+
+INLINE void
+CHECK_FONT_OBJECT (Lisp_Object x)
+{
+  CHECK_TYPE (FONT_OBJECT_P (x), Qfont_object, x);
+}
+
+/* C pointer extraction functions for various font-related objects.  */
+
+INLINE struct font_spec *
+XFONT_SPEC (Lisp_Object p)
+{
+  eassert (FONT_SPEC_P (p));
+  return XUNTAG (p, Lisp_Vectorlike);
+}
+
+INLINE struct font_entity *
+XFONT_ENTITY (Lisp_Object p)
+{
+  eassert (FONT_ENTITY_P (p));
+  return XUNTAG (p, Lisp_Vectorlike);
+}
+
+INLINE struct font *
+XFONT_OBJECT (Lisp_Object p)
+{
+  eassert (FONT_OBJECT_P (p));
+  return XUNTAG (p, Lisp_Vectorlike);
+}
 
-#define XFONT_SPEC(p)  \
-  (eassert (FONT_SPEC_P (p)), (struct font_spec *) XUNTAG (p, Lisp_Vectorlike))
-#define XFONT_ENTITY(p)        \
-  (eassert (FONT_ENTITY_P (p)), \
-   (struct font_entity *) XUNTAG (p, Lisp_Vectorlike))
-#define XFONT_OBJECT(p)        \
-  (eassert (FONT_OBJECT_P (p)), (struct font *) XUNTAG (p, Lisp_Vectorlike))
 #define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT))
 
+INLINE struct font *
+CHECK_FONT_GET_OBJECT (Lisp_Object x)
+{
+  CHECK_FONT_OBJECT (x);
+  return XFONT_OBJECT (x);
+}
+
 /* Number of pt per inch (from the TeXbook).  */
 #define PT_PER_INCH 72.27
 
@@ -791,12 +824,11 @@ extern struct font_driver xfont_driver;
 extern void syms_of_xfont (void);
 extern void syms_of_ftxfont (void);
 #ifdef HAVE_XFT
-extern Lisp_Object Qxft;
 extern struct font_driver xftfont_driver;
-extern void syms_of_xftfont (void);
 #endif
 #if defined HAVE_FREETYPE || defined HAVE_XFT
 extern struct font_driver ftxfont_driver;
+extern void syms_of_xftfont (void);
 #endif
 #ifdef HAVE_BDFFONT
 extern void syms_of_bdffont (void);
@@ -808,7 +840,6 @@ extern struct font_driver uniscribe_font_driver;
 extern void syms_of_w32font (void);
 #endif /* HAVE_NTGUI */
 #ifdef HAVE_NS
-extern Lisp_Object Qfontsize;
 extern struct font_driver nsfont_driver;
 extern void syms_of_nsfont (void);
 extern void syms_of_macfont (void);
@@ -818,8 +849,6 @@ extern void syms_of_macfont (void);
 #define FONT_DEBUG
 #endif
 
-extern Lisp_Object QCfoundry;
-
 extern void font_add_log (const char *, Lisp_Object, Lisp_Object);
 extern void font_deferred_log (const char *, Lisp_Object, Lisp_Object);
 
diff --git a/src/fontset.c b/src/fontset.c
index d08d68f..c0303fa 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -1,6 +1,6 @@
 /* Fontset handler.
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
   2005, 2006, 2007, 2008, 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -152,11 +152,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 /********** VARIABLES and FUNCTION PROTOTYPES **********/
 
-static Lisp_Object Qfontset;
-static Lisp_Object Qfontset_info;
-static Lisp_Object Qprepend, Qappend;
-Lisp_Object Qlatin;
-
 /* Vector containing all fontsets.  */
 static Lisp_Object Vfontset_table;
 
@@ -354,16 +349,17 @@ fontset_add (Lisp_Object fontset, Lisp_Object range, 
Lisp_Object elt, Lisp_Objec
        from1 = from, to1 = to;
        args[idx] = char_table_ref_and_range (fontset, from, &from1, &to1);
        char_table_set_range (fontset, from, to1,
-                             NILP (args[idx]) ? args[1 - idx]
-                             : Fvconcat (2, args));
+                             (NILP (args[idx]) ? args[1 - idx]
+                              : CALLMANY (Fvconcat, args)));
        from = to1 + 1;
       } while (from < to);
     }
   else
     {
       args[idx] = FONTSET_FALLBACK (fontset);
-      set_fontset_fallback
-       (fontset, NILP (args[idx]) ? args[1 - idx] : Fvconcat (2, args));
+      set_fontset_fallback (fontset,
+                           (NILP (args[idx]) ? args[1 - idx]
+                            : CALLMANY (Fvconcat, args)));
     }
 }
 
@@ -389,7 +385,7 @@ reorder_font_vector (Lisp_Object font_group, struct font 
*font)
   Lisp_Object vec, font_object;
   int size;
   int i;
-  bool score_changed = 0;
+  bool score_changed = false;
 
   if (font)
     XSETFONT (font_object, font);
@@ -444,14 +440,15 @@ reorder_font_vector (Lisp_Object font_group, struct font 
*font)
       if (RFONT_DEF_SCORE (rfont_def) != score)
        {
          RFONT_DEF_SET_SCORE (rfont_def, score);
-         score_changed = 1;
+         score_changed = true;
        }
     }
 
   if (score_changed)
     qsort (XVECTOR (vec)->contents, size, word_size,
           fontset_compare_rfontdef);
-  XSETCAR (font_group, make_number (charset_ordered_list_tick));
+  EMACS_INT low_tick_bits = charset_ordered_list_tick & MOST_POSITIVE_FIXNUM;
+  XSETCAR (font_group, make_number (low_tick_bits));
 }
 
 /* Return a font-group (actually a cons (-1 . FONT-GROUP-VECTOR)) for
@@ -1436,12 +1433,8 @@ appended.  By default, FONT-SPEC overrides the previous 
settings.  */)
     }
   else if (STRINGP (font_spec))
     {
-      Lisp_Object args[2];
-
       fontname = font_spec;
-      args[0] = QCname;
-      args[1] = font_spec;
-      font_spec = Ffont_spec (2, args);
+      font_spec = CALLN (Ffont_spec, QCname, fontname);
     }
   else if (FONT_SPEC_P (font_spec))
     fontname = Ffont_xlfd_name (font_spec, Qnil);
@@ -1835,7 +1828,7 @@ DEFUN ("internal-char-font", Finternal_char_font, 
Sinternal_char_font, 1, 2, 0,
       w = XWINDOW (window);
       f = XFRAME (w->frame);
       face_id = face_at_buffer_position (w, pos, &dummy,
-                                        pos + 100, 0, -1);
+                                        pos + 100, false, -1);
     }
   if (! CHAR_VALID_P (c))
     return Qnil;
diff --git a/src/fontset.h b/src/fontset.h
index 884244e..6103944 100644
--- a/src/fontset.h
+++ b/src/fontset.h
@@ -1,5 +1,5 @@
 /* Header for fontset handler.
-   Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
@@ -36,7 +36,6 @@ extern int fontset_from_font (Lisp_Object);
 extern int fs_query_fontset (Lisp_Object, int);
 extern Lisp_Object list_fontsets (struct frame *, Lisp_Object, int);
 
-extern Lisp_Object Qlatin;
 extern Lisp_Object fontset_name (int);
 extern Lisp_Object fontset_ascii (int);
 
diff --git a/src/frame.c b/src/frame.c
index 88f3d1f..e4adfe8 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1,6 +1,6 @@
 /* Generic frame functions.
 
-Copyright (C) 1993-1995, 1997, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 1997, 1999-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -55,76 +55,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "widget.h"
 #endif
 
-#ifdef HAVE_NS
-Lisp_Object Qns_parse_geometry;
-#endif
-
-Lisp_Object Qframep, Qframe_live_p;
-Lisp_Object Qicon, Qmodeline;
-Lisp_Object Qonly, Qnone;
-Lisp_Object Qx, Qw32, Qpc, Qns;
-Lisp_Object Qvisible;
-Lisp_Object Qdisplay_type;
-static Lisp_Object Qbackground_mode;
-Lisp_Object Qnoelisp;
-
-static Lisp_Object Qx_frame_parameter;
-Lisp_Object Qx_resource_name;
-Lisp_Object Qterminal;
-
-/* Frame parameters (set or reported).  */
-
-Lisp_Object Qauto_raise, Qauto_lower;
-Lisp_Object Qborder_color, Qborder_width;
-Lisp_Object Qcursor_color, Qcursor_type;
-Lisp_Object Qheight, Qwidth;
-Lisp_Object Qicon_left, Qicon_top, Qicon_type, Qicon_name;
-Lisp_Object Qtooltip;
-Lisp_Object Qinternal_border_width;
-Lisp_Object Qright_divider_width, Qbottom_divider_width;
-Lisp_Object Qmouse_color;
-Lisp_Object Qminibuffer;
-Lisp_Object Qscroll_bar_width, Qvertical_scroll_bars;
-Lisp_Object Qscroll_bar_height, Qhorizontal_scroll_bars;
-Lisp_Object Qvisibility;
-Lisp_Object Qscroll_bar_foreground, Qscroll_bar_background;
-Lisp_Object Qscreen_gamma;
-Lisp_Object Qline_spacing;
-static Lisp_Object Quser_position, Quser_size;
-Lisp_Object Qwait_for_wm;
-static Lisp_Object Qwindow_id;
-#ifdef HAVE_X_WINDOWS
-static Lisp_Object Qouter_window_id;
-#endif
-Lisp_Object Qparent_id;
-Lisp_Object Qtitle, Qname;
-static Lisp_Object Qexplicit_name;
-Lisp_Object Qunsplittable;
-Lisp_Object Qmenu_bar_lines, Qtool_bar_lines, Qtool_bar_position;
-Lisp_Object Qleft_fringe, Qright_fringe;
-Lisp_Object Qbuffer_predicate;
-static Lisp_Object Qbuffer_list, Qburied_buffer_list;
-Lisp_Object Qtty_color_mode;
-Lisp_Object Qtty, Qtty_type;
-
-Lisp_Object Qfullscreen, Qfullwidth, Qfullheight, Qfullboth, Qmaximized;
-Lisp_Object Qsticky;
-Lisp_Object Qfont_backend;
-Lisp_Object Qalpha;
-
-Lisp_Object Qface_set_after_frame_default;
-
-static Lisp_Object Qfocus_in_hook;
-static Lisp_Object Qfocus_out_hook;
-static Lisp_Object Qdelete_frame_functions;
-static Lisp_Object Qframe_windows_min_size;
-static Lisp_Object Qgeometry, Qworkarea, Qmm_size, Qframes, Qsource;
-
-Lisp_Object Qframe_position, Qframe_outer_size, Qframe_inner_size;
-Lisp_Object Qexternal_border_size, Qtitle_height;
-Lisp_Object Qmenu_bar_external, Qmenu_bar_size;
-Lisp_Object Qtool_bar_external, Qtool_bar_size;
-
 /* The currently selected frame.  */
 
 Lisp_Object selected_frame;
@@ -137,6 +67,9 @@ static struct frame *last_nonminibuf_frame;
 /* False means there are no visible garbaged frames.  */
 bool frame_garbaged;
 
+/* The default tool bar height for future frames.  */
+int frame_default_tool_bar_height;
+
 #ifdef HAVE_WINDOW_SYSTEM
 static void x_report_frame_params (struct frame *, Lisp_Object *);
 #endif
@@ -334,10 +267,23 @@ predicates which report frame's specific UI-related 
capabilities.  */)
     return type;
 }
 
+/* Placeholder used by temacs -nw before window.el is loaded.  */
+DEFUN ("frame-windows-min-size", Fframe_windows_min_size,
+       Sframe_windows_min_size, 4, 4, 0,
+       doc: /* */
+       attributes: const)
+     (Lisp_Object frame, Lisp_Object horizontal,
+      Lisp_Object ignore, Lisp_Object pixelwise)
+{
+  return make_number (0);
+}
+
 static int
-frame_windows_min_size (Lisp_Object frame, Lisp_Object horizontal, Lisp_Object 
pixelwise)
+frame_windows_min_size (Lisp_Object frame, Lisp_Object horizontal,
+                       Lisp_Object ignore, Lisp_Object pixelwise)
 {
-  return XINT (call3 (Qframe_windows_min_size, frame, horizontal, pixelwise));
+  return XINT (call4 (Qframe_windows_min_size, frame, horizontal,
+                     ignore, pixelwise));
 }
 
 
@@ -389,6 +335,8 @@ adjust_frame_size (struct frame *f, int new_width, int 
new_height, int inhibit,
   int unit_height = FRAME_LINE_HEIGHT (f);
   int old_pixel_width = FRAME_PIXEL_WIDTH (f);
   int old_pixel_height = FRAME_PIXEL_HEIGHT (f);
+  int old_cols = FRAME_COLS (f);
+  int old_lines = FRAME_LINES (f);
   int new_pixel_width, new_pixel_height;
   /* The following two values are calculated from the old frame pixel
      sizes and any "new" settings for tool bar, menu bar and internal
@@ -416,11 +364,27 @@ adjust_frame_size (struct frame *f, int new_width, int 
new_height, int inhibit,
   Lisp_Object frame;
 
   XSETFRAME (frame, f);
+
+  /* `make-frame' initializes Vframe_adjust_size_history to (Qt) and
+     strips its car when exiting.  Just in case make sure its size never
+     exceeds 100.  */
+  if (!NILP (Fconsp (Vframe_adjust_size_history))
+      && EQ (Fcar (Vframe_adjust_size_history), Qt)
+      && XFASTINT (Fsafe_length (Vframe_adjust_size_history)) <= 100)
+    Vframe_adjust_size_history =
+      Fcons (Qt, Fcons (list5 (make_number (0),
+                              make_number (new_text_width),
+                              make_number (new_text_height),
+                              make_number (inhibit), parameter),
+                       Fcdr (Vframe_adjust_size_history)));
+
   /* The following two values are calculated from the old window body
      sizes and any "new" settings for scroll bars, dividers, fringes and
      margins (though the latter should have been processed already).  */
-  min_windows_width = frame_windows_min_size (frame, Qt, Qt);
-  min_windows_height = frame_windows_min_size (frame, Qnil, Qt);
+  min_windows_width
+    = frame_windows_min_size (frame, Qt, (inhibit == 5) ? Qt : Qnil, Qt);
+  min_windows_height
+    = frame_windows_min_size (frame, Qnil, (inhibit == 5) ? Qt : Qnil, Qt);
 
   if (inhibit >= 2 && inhibit <= 4)
     /* If INHIBIT is in [2..4] inhibit if the "old" window sizes stay
@@ -481,6 +445,17 @@ adjust_frame_size (struct frame *f, int new_width, int 
new_height, int inhibit,
       else if (inhibit_vertical)
        new_text_height = old_text_height;
 
+      if (!NILP (Fconsp (Vframe_adjust_size_history))
+         && EQ (Fcar (Vframe_adjust_size_history), Qt)
+         && XFASTINT (Fsafe_length (Vframe_adjust_size_history)) <= 100)
+       Vframe_adjust_size_history =
+         Fcons (Qt, Fcons (list5 (make_number (1),
+                                  make_number (new_text_width),
+                                  make_number (new_text_height),
+                                  make_number (new_cols),
+                                  make_number (new_lines)),
+                           Fcdr (Vframe_adjust_size_history)));
+
       x_set_window_size (f, 0, new_text_width, new_text_height, 1);
       f->resized_p = true;
 
@@ -493,7 +468,9 @@ adjust_frame_size (struct frame *f, int new_width, int 
new_height, int inhibit,
       && new_windows_width == old_windows_width
       && new_windows_height == old_windows_height
       && new_pixel_width == old_pixel_width
-      && new_pixel_height == old_pixel_height)
+      && new_pixel_height == old_pixel_height
+      && new_cols == old_cols
+      && new_lines == old_lines)
     /* No change.  Sanitize window sizes and return.  */
     {
       sanitize_window_sizes (frame, Qt);
@@ -552,6 +529,17 @@ adjust_frame_size (struct frame *f, int new_width, int 
new_height, int inhibit,
   SET_FRAME_COLS (f, new_cols);
   SET_FRAME_LINES (f, new_lines);
 
+  if (!NILP (Fconsp (Vframe_adjust_size_history))
+      && EQ (Fcar (Vframe_adjust_size_history), Qt)
+      && XFASTINT (Fsafe_length (Vframe_adjust_size_history)) <= 100)
+    Vframe_adjust_size_history =
+      Fcons (Qt, Fcons (list5 (make_number (2),
+                              make_number (new_text_width),
+                              make_number (new_text_height),
+                              make_number (new_cols),
+                              make_number (new_lines)),
+                       Fcdr (Vframe_adjust_size_history)));
+
   {
     struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
     int text_area_x, text_area_y, text_area_width, text_area_height;
@@ -582,6 +570,13 @@ adjust_frame_size (struct frame *f, int new_width, int 
new_height, int inhibit,
   run_window_configuration_change_hook (f);
 }
 
+/* Allocate basically initialized frame.  */
+
+static struct frame *
+allocate_frame (void)
+{
+  return ALLOCATE_ZEROED_PSEUDOVECTOR (struct frame, face_cache, PVEC_FRAME);
+}
 
 struct frame *
 make_frame (bool mini_p)
@@ -610,6 +605,7 @@ make_frame (bool mini_p)
   f->garbaged = true;
   f->can_x_set_window_size = false;
   f->can_run_window_configuration_change_hook = false;
+  f->tool_bar_redisplayed_once = false;
   f->column_width = 1;  /* !FRAME_WINDOW_P value.  */
   f->line_height = 1;  /* !FRAME_WINDOW_P value.  */
 #ifdef HAVE_WINDOW_SYSTEM
@@ -1194,7 +1190,7 @@ This function returns FRAME, or nil if FRAME has been 
deleted.  */)
   return do_switch_frame (frame, 1, 0, norecord);
 }
 
-DEFUN ("handle-switch-frame", Fhandle_switch_frame, Shandle_switch_frame, 1, 
1, "e",
+DEFUN ("handle-switch-frame", Fhandle_switch_frame, Shandle_switch_frame, 1, 
1, "^e",
        doc: /* Handle a switch-frame event EVENT.
 Switch-frame events are usually bound to this function.
 A switch-frame event tells Emacs that the window manager has requested
@@ -1207,7 +1203,7 @@ to that frame.  */)
 {
   /* Preserve prefix arg that the command loop just cleared.  */
   kset_prefix_arg (current_kboard, Vcurrent_prefix_arg);
-  Frun_hooks (1, &Qmouse_leave_buffer_hook);
+  run_hook (Qmouse_leave_buffer_hook);
   /* `switch-frame' implies a focus in.  */
   call1 (intern ("handle-focus-in"), event);
   return do_switch_frame (event, 0, 0, Qnil);
@@ -2864,7 +2860,7 @@ DEFUN ("frame-bottom-divider-width", 
Fbottom_divider_width, Sbottom_divider_widt
 }
 
 DEFUN ("set-frame-height", Fset_frame_height, Sset_frame_height, 2, 4, 0,
-       doc: /* Set height of frame FRAME to HEIGHT lines.
+       doc: /* Set text height of frame FRAME to HEIGHT lines.
 Optional third arg PRETEND non-nil means that redisplay should use
 HEIGHT lines but that the idea of the actual height of the frame should
 not be changed.
@@ -2883,14 +2879,13 @@ multiple of the default frame font height.  */)
   pixel_height = (!NILP (pixelwise)
                  ? XINT (height)
                  : XINT (height) * FRAME_LINE_HEIGHT (f));
-  if (pixel_height != FRAME_TEXT_HEIGHT (f))
-    adjust_frame_size (f, -1, pixel_height, 1, !NILP (pretend), Qheight);
+  adjust_frame_size (f, -1, pixel_height, 1, !NILP (pretend), Qheight);
 
   return Qnil;
 }
 
 DEFUN ("set-frame-width", Fset_frame_width, Sset_frame_width, 2, 4, 0,
-       doc: /* Set width of frame FRAME to WIDTH columns.
+       doc: /* Set text width of frame FRAME to WIDTH columns.
 Optional third arg PRETEND non-nil means that redisplay should use WIDTH
 columns but that the idea of the actual width of the frame should not
 be changed.
@@ -2909,14 +2904,13 @@ multiple of the default frame font width.  */)
   pixel_width = (!NILP (pixelwise)
                 ? XINT (width)
                 : XINT (width) * FRAME_COLUMN_WIDTH (f));
-  if (pixel_width != FRAME_TEXT_WIDTH (f))
-    adjust_frame_size (f, pixel_width, -1, 1, !NILP (pretend), Qwidth);
+  adjust_frame_size (f, pixel_width, -1, 1, !NILP (pretend), Qwidth);
 
   return Qnil;
 }
 
 DEFUN ("set-frame-size", Fset_frame_size, Sset_frame_size, 3, 4, 0,
-       doc: /* Set size of FRAME to WIDTH by HEIGHT, measured in characters.
+       doc: /* Set text size of FRAME to WIDTH by HEIGHT, measured in 
characters.
 Optional argument PIXELWISE non-nil means to measure in pixels.  Note:
 When `frame-resize-pixelwise' is nil, some window managers may refuse to
 honor a WIDTH that is not an integer multiple of the default frame font
@@ -2936,10 +2930,7 @@ font height.  */)
   pixel_height = (!NILP (pixelwise)
                  ? XINT (height)
                  : XINT (height) * FRAME_LINE_HEIGHT (f));
-
-  if (pixel_width != FRAME_TEXT_WIDTH (f)
-      || pixel_height != FRAME_TEXT_HEIGHT (f))
-    adjust_frame_size (f, pixel_width, pixel_height, 1, 0, Qsize);
+  adjust_frame_size (f, pixel_width, pixel_height, 1, 0, Qsize);
 
   return Qnil;
 }
@@ -2981,48 +2972,48 @@ or bottommost possible position (that stays within the 
screen).  */)
 
 struct frame_parm_table {
   const char *name;
-  Lisp_Object *variable;
+  int sym;
 };
 
 static const struct frame_parm_table frame_parms[] =
 {
-  {"auto-raise",               &Qauto_raise},
-  {"auto-lower",               &Qauto_lower},
-  {"background-color",         0},
-  {"border-color",             &Qborder_color},
-  {"border-width",             &Qborder_width},
-  {"cursor-color",             &Qcursor_color},
-  {"cursor-type",              &Qcursor_type},
-  {"font",                     0},
-  {"foreground-color",         0},
-  {"icon-name",                        &Qicon_name},
-  {"icon-type",                        &Qicon_type},
-  {"internal-border-width",    &Qinternal_border_width},
-  {"right-divider-width",      &Qright_divider_width},
-  {"bottom-divider-width",     &Qbottom_divider_width},
-  {"menu-bar-lines",           &Qmenu_bar_lines},
-  {"mouse-color",              &Qmouse_color},
-  {"name",                     &Qname},
-  {"scroll-bar-width",         &Qscroll_bar_width},
-  {"scroll-bar-height",                &Qscroll_bar_height},
-  {"title",                    &Qtitle},
-  {"unsplittable",             &Qunsplittable},
-  {"vertical-scroll-bars",     &Qvertical_scroll_bars},
-  {"horizontal-scroll-bars",   &Qhorizontal_scroll_bars},
-  {"visibility",               &Qvisibility},
-  {"tool-bar-lines",           &Qtool_bar_lines},
-  {"scroll-bar-foreground",    &Qscroll_bar_foreground},
-  {"scroll-bar-background",    &Qscroll_bar_background},
-  {"screen-gamma",             &Qscreen_gamma},
-  {"line-spacing",             &Qline_spacing},
-  {"left-fringe",              &Qleft_fringe},
-  {"right-fringe",             &Qright_fringe},
-  {"wait-for-wm",              &Qwait_for_wm},
-  {"fullscreen",                &Qfullscreen},
-  {"font-backend",             &Qfont_backend},
-  {"alpha",                    &Qalpha},
-  {"sticky",                   &Qsticky},
-  {"tool-bar-position",                &Qtool_bar_position},
+  {"auto-raise",               SYMBOL_INDEX (Qauto_raise)},
+  {"auto-lower",               SYMBOL_INDEX (Qauto_lower)},
+  {"background-color",         -1},
+  {"border-color",             SYMBOL_INDEX (Qborder_color)},
+  {"border-width",             SYMBOL_INDEX (Qborder_width)},
+  {"cursor-color",             SYMBOL_INDEX (Qcursor_color)},
+  {"cursor-type",              SYMBOL_INDEX (Qcursor_type)},
+  {"font",                     -1},
+  {"foreground-color",         -1},
+  {"icon-name",                        SYMBOL_INDEX (Qicon_name)},
+  {"icon-type",                        SYMBOL_INDEX (Qicon_type)},
+  {"internal-border-width",    SYMBOL_INDEX (Qinternal_border_width)},
+  {"right-divider-width",      SYMBOL_INDEX (Qright_divider_width)},
+  {"bottom-divider-width",     SYMBOL_INDEX (Qbottom_divider_width)},
+  {"menu-bar-lines",           SYMBOL_INDEX (Qmenu_bar_lines)},
+  {"mouse-color",              SYMBOL_INDEX (Qmouse_color)},
+  {"name",                     SYMBOL_INDEX (Qname)},
+  {"scroll-bar-width",         SYMBOL_INDEX (Qscroll_bar_width)},
+  {"scroll-bar-height",                SYMBOL_INDEX (Qscroll_bar_height)},
+  {"title",                    SYMBOL_INDEX (Qtitle)},
+  {"unsplittable",             SYMBOL_INDEX (Qunsplittable)},
+  {"vertical-scroll-bars",     SYMBOL_INDEX (Qvertical_scroll_bars)},
+  {"horizontal-scroll-bars",   SYMBOL_INDEX (Qhorizontal_scroll_bars)},
+  {"visibility",               SYMBOL_INDEX (Qvisibility)},
+  {"tool-bar-lines",           SYMBOL_INDEX (Qtool_bar_lines)},
+  {"scroll-bar-foreground",    SYMBOL_INDEX (Qscroll_bar_foreground)},
+  {"scroll-bar-background",    SYMBOL_INDEX (Qscroll_bar_background)},
+  {"screen-gamma",             SYMBOL_INDEX (Qscreen_gamma)},
+  {"line-spacing",             SYMBOL_INDEX (Qline_spacing)},
+  {"left-fringe",              SYMBOL_INDEX (Qleft_fringe)},
+  {"right-fringe",             SYMBOL_INDEX (Qright_fringe)},
+  {"wait-for-wm",              SYMBOL_INDEX (Qwait_for_wm)},
+  {"fullscreen",                SYMBOL_INDEX (Qfullscreen)},
+  {"font-backend",             SYMBOL_INDEX (Qfont_backend)},
+  {"alpha",                    SYMBOL_INDEX (Qalpha)},
+  {"sticky",                   SYMBOL_INDEX (Qsticky)},
+  {"tool-bar-position",                SYMBOL_INDEX (Qtool_bar_position)},
 };
 
 #ifdef HAVE_WINDOW_SYSTEM
@@ -3217,7 +3208,7 @@ x_set_frame_parameters (struct frame *f, Lisp_Object 
alist)
 
     if ((width_change && width != FRAME_TEXT_WIDTH (f))
        || (height_change && height != FRAME_TEXT_HEIGHT (f))
-       || f->new_height || f->new_width)
+       || (f->can_x_set_window_size && (f->new_height || f->new_width)))
       {
        /* If necessary provide default values for HEIGHT and WIDTH.  Do
           that here since otherwise a size change implied by an
@@ -3641,7 +3632,7 @@ x_set_font_backend (struct frame *f, Lisp_Object 
new_value, Lisp_Object old_valu
 
       XSETFRAME (frame, f);
       x_set_font (f, Fframe_parameter (frame, Qfont), Qnil);
-      ++face_change_count;
+      face_change = true;
       windows_or_buffers_changed = 18;
     }
 }
@@ -4074,23 +4065,23 @@ xrdb_get_resource (XrmDatabase rdb, Lisp_Object 
attribute, Lisp_Object class, Li
 
   /* Start with emacs.FRAMENAME for the name (the specific one)
      and with `Emacs' for the class key (the general one).  */
-  lispstpcpy (name_key, Vx_resource_name);
-  lispstpcpy (class_key, Vx_resource_class);
+  char *nz = lispstpcpy (name_key, Vx_resource_name);
+  char *cz = lispstpcpy (class_key, Vx_resource_class);
 
-  strcat (class_key, ".");
-  strcat (class_key, SSDATA (class));
+  *cz++ = '.';
+  cz = lispstpcpy (cz, class);
 
   if (!NILP (component))
     {
-      strcat (class_key, ".");
-      strcat (class_key, SSDATA (subclass));
+      *cz++ = '.';
+      lispstpcpy (cz, subclass);
 
-      strcat (name_key, ".");
-      strcat (name_key, SSDATA (component));
+      *nz++ = '.';
+      nz = lispstpcpy (nz, component);
     }
 
-  strcat (name_key, ".");
-  strcat (name_key, SSDATA (attribute));
+  *nz++ = '.';
+  lispstpcpy (nz, attribute);
 
   char *value = x_get_string_resource (rdb, name_key, class_key);
   SAFE_FREE();
@@ -4548,23 +4539,27 @@ x_figure_window_size (struct frame *f, Lisp_Object 
parms, bool toolbar_p)
      frames without having to guess how tall the tool bar will get.  */
   if (toolbar_p && FRAME_TOOL_BAR_LINES (f))
     {
-      int margin, relief;
+      if (frame_default_tool_bar_height)
+       FRAME_TOOL_BAR_HEIGHT (f) = frame_default_tool_bar_height;
+      else
+       {
+         int margin, relief;
 
-      relief = (tool_bar_button_relief >= 0
-               ? tool_bar_button_relief
-               : DEFAULT_TOOL_BAR_BUTTON_RELIEF);
+         relief = (tool_bar_button_relief >= 0
+                   ? tool_bar_button_relief
+                   : DEFAULT_TOOL_BAR_BUTTON_RELIEF);
 
-      if (RANGED_INTEGERP (1, Vtool_bar_button_margin, INT_MAX))
-       margin = XFASTINT (Vtool_bar_button_margin);
-      else if (CONSP (Vtool_bar_button_margin)
-              && RANGED_INTEGERP (1, XCDR (Vtool_bar_button_margin), INT_MAX))
-       margin = XFASTINT (XCDR (Vtool_bar_button_margin));
-      else
-       margin = 0;
+         if (RANGED_INTEGERP (1, Vtool_bar_button_margin, INT_MAX))
+           margin = XFASTINT (Vtool_bar_button_margin);
+         else if (CONSP (Vtool_bar_button_margin)
+                  && RANGED_INTEGERP (1, XCDR (Vtool_bar_button_margin), 
INT_MAX))
+           margin = XFASTINT (XCDR (Vtool_bar_button_margin));
+         else
+           margin = 0;
 
-      FRAME_TOOL_BAR_HEIGHT (f)
-       = DEFAULT_TOOL_BAR_IMAGE_HEIGHT + 2 * margin + 2 * relief;
-      Vframe_initial_frame_tool_bar_height = make_number 
(FRAME_TOOL_BAR_HEIGHT (f));
+         FRAME_TOOL_BAR_HEIGHT (f)
+           = DEFAULT_TOOL_BAR_IMAGE_HEIGHT + 2 * margin + 2 * relief;
+       }
     }
 
   top = x_get_arg (dpyinfo, parms, Qtop, 0, 0, RES_TYPE_NUMBER);
@@ -4835,22 +4830,59 @@ syms_of_frame (void)
   DEFSYM (Qtool_bar_external, "tool-bar-external");
   DEFSYM (Qtool_bar_size, "tool-bar-size");
   DEFSYM (Qframe_inner_size, "frame-inner-size");
+  DEFSYM (Qchange_frame_size, "change-frame-size");
+  DEFSYM (Qxg_frame_set_char_size, "xg-frame-set-char-size");
+  DEFSYM (Qset_window_configuration, "set-window-configuration");
+  DEFSYM (Qx_create_frame_1, "x-create-frame-1");
+  DEFSYM (Qx_create_frame_2, "x-create-frame-2");
 
 #ifdef HAVE_NS
   DEFSYM (Qns_parse_geometry, "ns-parse-geometry");
 #endif
 
+  DEFSYM (Qalpha, "alpha");
+  DEFSYM (Qauto_lower, "auto-lower");
+  DEFSYM (Qauto_raise, "auto-raise");
+  DEFSYM (Qborder_color, "border-color");
+  DEFSYM (Qborder_width, "border-width");
+  DEFSYM (Qbottom_divider_width, "bottom-divider-width");
+  DEFSYM (Qcursor_color, "cursor-color");
+  DEFSYM (Qcursor_type, "cursor-type");
+  DEFSYM (Qfont_backend, "font-backend");
+  DEFSYM (Qfullscreen, "fullscreen");
+  DEFSYM (Qhorizontal_scroll_bars, "horizontal-scroll-bars");
+  DEFSYM (Qicon_name, "icon-name");
+  DEFSYM (Qicon_type, "icon-type");
+  DEFSYM (Qinternal_border_width, "internal-border-width");
+  DEFSYM (Qleft_fringe, "left-fringe");
+  DEFSYM (Qline_spacing, "line-spacing");
+  DEFSYM (Qmenu_bar_lines, "menu-bar-lines");
+  DEFSYM (Qmouse_color, "mouse-color");
+  DEFSYM (Qname, "name");
+  DEFSYM (Qright_divider_width, "right-divider-width");
+  DEFSYM (Qright_fringe, "right-fringe");
+  DEFSYM (Qscreen_gamma, "screen-gamma");
+  DEFSYM (Qscroll_bar_background, "scroll-bar-background");
+  DEFSYM (Qscroll_bar_foreground, "scroll-bar-foreground");
+  DEFSYM (Qscroll_bar_height, "scroll-bar-height");
+  DEFSYM (Qscroll_bar_width, "scroll-bar-width");
+  DEFSYM (Qsticky, "sticky");
+  DEFSYM (Qtitle, "title");
+  DEFSYM (Qtool_bar_lines, "tool-bar-lines");
+  DEFSYM (Qtool_bar_position, "tool-bar-position");
+  DEFSYM (Qunsplittable, "unsplittable");
+  DEFSYM (Qvertical_scroll_bars, "vertical-scroll-bars");
+  DEFSYM (Qvisibility, "visibility");
+  DEFSYM (Qwait_for_wm, "wait-for-wm");
+
   {
     int i;
 
     for (i = 0; i < ARRAYELTS (frame_parms); i++)
       {
-       Lisp_Object v = intern_c_string (frame_parms[i].name);
-       if (frame_parms[i].variable)
-         {
-           *frame_parms[i].variable = v;
-           staticpro (frame_parms[i].variable);
-         }
+       Lisp_Object v = (frame_parms[i].sym < 0
+                        ? intern_c_string (frame_parms[i].name)
+                        : builtin_lisp_symbol (frame_parms[i].sym));
        Fput (v, Qx_frame_parameter, make_number (i));
       }
   }
@@ -4992,10 +5024,6 @@ or call the function `tool-bar-mode'.  */);
   Vtool_bar_mode = Qnil;
 #endif
 
-  DEFVAR_LISP ("frame-initial-frame-tool-bar-height", 
Vframe_initial_frame_tool_bar_height,
-               doc: /* Height of tool bar of initial frame.  */);
-  Vframe_initial_frame_tool_bar_height = make_number (0);
-
   DEFVAR_KBOARD ("default-minibuffer-frame", Vdefault_minibuffer_frame,
                 doc: /* Minibufferless frames use this frame's minibuffer.
 Emacs cannot create minibufferless frames unless this is set to an
@@ -5055,7 +5083,7 @@ keep it unchanged if this option is either `t' or a list 
containing
 `vertical-scroll-bars'.
 
 The default value is '(tool-bar-lines) on Lucid, Motif and Windows
-(which means that adding/removing a tool bar does not change the frame
+\(which means that adding/removing a tool bar does not change the frame
 height), nil on all other window systems including GTK+ (which means
 that changing any of the parameters listed above may change the size of
 the frame), and `t' otherwise (which means the frame size never changes
@@ -5074,11 +5102,16 @@ even if this option is non-nil.  */);
   frame_inhibit_implied_resize = Qt;
 #endif
 
+  DEFVAR_LISP ("frame-adjust-size-history", Vframe_adjust_size_history,
+               doc: /* History of frame size adjustments.  */);
+  Vframe_adjust_size_history = Qnil;
+
   staticpro (&Vframe_list);
 
   defsubr (&Sframep);
   defsubr (&Sframe_live_p);
   defsubr (&Swindow_system);
+  defsubr (&Sframe_windows_min_size);
   defsubr (&Smake_terminal_frame);
   defsubr (&Shandle_switch_frame);
   defsubr (&Sselect_frame);
diff --git a/src/frame.h b/src/frame.h
index 3fd1a6a..cb0044c 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -1,5 +1,5 @@
 /* Define frame-object for GNU Emacs.
-   Copyright (C) 1993-1994, 1999-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 1999-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -336,6 +336,10 @@ struct frame
      for this frame.  */
   bool_bf can_run_window_configuration_change_hook : 1;
 
+  /* True means tool bar has been redisplayed at least once in current
+     session.  */
+  bool_bf tool_bar_redisplayed_once : 1;
+
   /* Bitfield area ends here.  */
 
   /* Number of lines (rounded up) of tool bar.  REMOVE THIS  */
@@ -1095,11 +1099,8 @@ SET_FRAME_VISIBLE (struct frame *f, int v)
   (f)->iconified = (eassert (0 <= (i) && (i) <= 1), (i))
 
 extern Lisp_Object selected_frame;
-extern Lisp_Object Qframep, Qframe_live_p;
-extern Lisp_Object Qtty, Qtty_type;
-extern Lisp_Object Qtty_color_mode;
-extern Lisp_Object Qterminal;
-extern Lisp_Object Qnoelisp;
+
+extern int frame_default_tool_bar_height;
 
 extern struct frame *decode_window_system_frame (Lisp_Object);
 extern struct frame *decode_live_frame (Lisp_Object);
@@ -1344,51 +1345,6 @@ extern Lisp_Object Vframe_list;
                                Frame Parameters
  ***********************************************************************/
 
-extern Lisp_Object Qauto_raise, Qauto_lower;
-extern Lisp_Object Qborder_color, Qborder_width;
-extern Lisp_Object Qbuffer_predicate;
-extern Lisp_Object Qcursor_color, Qcursor_type;
-extern Lisp_Object Qfont;
-extern Lisp_Object Qicon, Qicon_name, Qicon_type, Qicon_left, Qicon_top;
-extern Lisp_Object Qinternal_border_width;
-extern Lisp_Object Qright_divider_width, Qbottom_divider_width;
-extern Lisp_Object Qtooltip;
-extern Lisp_Object Qmenu_bar_lines, Qtool_bar_lines, Qtool_bar_position;
-extern Lisp_Object Qmouse_color;
-extern Lisp_Object Qname, Qtitle;
-extern Lisp_Object Qparent_id;
-extern Lisp_Object Qunsplittable, Qvisibility;
-extern Lisp_Object Qscroll_bar_width, Qvertical_scroll_bars;
-extern Lisp_Object Qscroll_bar_height, Qhorizontal_scroll_bars;
-extern Lisp_Object Qscroll_bar_foreground, Qscroll_bar_background;
-extern Lisp_Object Qscreen_gamma;
-extern Lisp_Object Qline_spacing;
-extern Lisp_Object Qwait_for_wm;
-extern Lisp_Object Qfullscreen;
-extern Lisp_Object Qfullwidth, Qfullheight, Qfullboth, Qmaximized;
-extern Lisp_Object Qsticky;
-extern Lisp_Object Qfont_backend;
-extern Lisp_Object Qalpha;
-
-extern Lisp_Object Qleft_fringe, Qright_fringe;
-extern Lisp_Object Qheight, Qwidth;
-extern Lisp_Object Qminibuffer, Qmodeline;
-extern Lisp_Object Qx, Qw32, Qpc, Qns;
-extern Lisp_Object Qvisible;
-extern Lisp_Object Qdisplay_type;
-
-extern Lisp_Object Qx_resource_name;
-
-extern Lisp_Object Qtop, Qbox, Qbottom;
-extern Lisp_Object Qdisplay;
-
-extern Lisp_Object Qframe_position, Qframe_outer_size, Qframe_inner_size;
-extern Lisp_Object Qexternal_border_size, Qtitle_height;
-extern Lisp_Object Qmenu_bar_external, Qmenu_bar_size;
-extern Lisp_Object Qtool_bar_external, Qtool_bar_size;
-
-extern Lisp_Object Qrun_hook_with_args;
-
 #ifdef HAVE_WINDOW_SYSTEM
 
 /* The class of this X application.  */
@@ -1399,7 +1355,6 @@ extern void x_set_scroll_bar_default_height (struct frame 
*);
 extern void x_set_offset (struct frame *, int, int, int);
 extern void x_wm_set_size_hint (struct frame *f, long flags, bool 
user_position);
 extern Lisp_Object x_new_font (struct frame *, Lisp_Object, int);
-extern Lisp_Object Qface_set_after_frame_default;
 extern void x_set_frame_parameters (struct frame *, Lisp_Object);
 extern void x_set_fullscreen (struct frame *, Lisp_Object, Lisp_Object);
 extern void x_set_line_spacing (struct frame *, Lisp_Object, Lisp_Object);
@@ -1435,7 +1390,7 @@ extern Lisp_Object display_x_get_resource (Display_Info *,
                                           Lisp_Object subclass);
 
 extern void set_frame_menubar (struct frame *f, bool first_time, bool deep_p);
-extern void x_set_window_size (struct frame *f, int change_grav,
+extern void x_set_window_size (struct frame *f, bool change_gravity,
                               int width, int height, bool pixelwise);
 extern Lisp_Object x_get_focus_frame (struct frame *);
 extern void frame_set_mouse_pixel_position (struct frame *f, int pix_x, int 
pix_y);
@@ -1462,7 +1417,7 @@ extern void x_focus_frame (struct frame *);
 
 #ifndef HAVE_NS
 
-extern int x_bitmap_icon (struct frame *, Lisp_Object);
+extern bool x_bitmap_icon (struct frame *, Lisp_Object);
 
 /* Set F's bitmap icon, if specified among F's parameters.  */
 
diff --git a/src/fringe.c b/src/fringe.c
index 3c0e883..5e5ec60 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -1,5 +1,5 @@
 /* Fringe handling (split from xdisp.c).
-   Copyright (C) 1985-1988, 1993-1995, 1997-2014 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1997-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -65,10 +65,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
    must specify physical bitmap symbols.
 */
 
-static Lisp_Object Qtruncation, Qcontinuation, Qoverlay_arrow;
-static Lisp_Object Qempty_line, Qtop_bottom;
-static Lisp_Object Qhollow_small;
-
 enum fringe_bitmap_align
 {
   ALIGN_BITMAP_CENTER = 0,
@@ -591,7 +587,7 @@ draw_fringe_bitmap_1 (struct window *w, struct glyph_row 
*row, int left_p, int o
   if (face_id == DEFAULT_FACE_ID)
     {
       Lisp_Object face = fringe_faces[which];
-      face_id = NILP (face) ? lookup_named_face (f, Qfringe, 0)
+      face_id = NILP (face) ? lookup_named_face (f, Qfringe, false)
        : lookup_derived_face (f, face, FRINGE_FACE_ID, 0);
       if (face_id < 0)
        face_id = FRINGE_FACE_ID;
@@ -1727,15 +1723,12 @@ init_fringe_once (void)
 void
 init_fringe (void)
 {
-  int i;
-
   max_fringe_bitmaps = MAX_STANDARD_FRINGE_BITMAPS + 20;
 
   fringe_bitmaps = xzalloc (max_fringe_bitmaps * sizeof *fringe_bitmaps);
-  fringe_faces = xmalloc (max_fringe_bitmaps * sizeof *fringe_faces);
 
-  for (i = 0; i < max_fringe_bitmaps; i++)
-    fringe_faces[i] = Qnil;
+  verify (NIL_IS_ZERO);
+  fringe_faces = xzalloc (max_fringe_bitmaps * sizeof *fringe_faces);
 }
 
 #ifdef HAVE_NTGUI
diff --git a/src/ftfont.c b/src/ftfont.c
index 4c12ef5..adf1888 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -1,5 +1,5 @@
 /* ftfont.c -- FreeType font driver.
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
@@ -38,12 +38,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "font.h"
 #include "ftfont.h"
 
-/* Symbolic type of this font-driver.  */
-static Lisp_Object Qfreetype;
-
-/* Fontconfig's generic families and their aliases.  */
-static Lisp_Object Qmonospace, Qsans_serif, Qserif, Qmono, Qsans, Qsans__serif;
-
 /* Flag to tell if FcInit is already called or not.  */
 static bool fc_initialized;
 
@@ -381,13 +375,7 @@ ftfont_lookup_cache (Lisp_Object key, enum 
ftfont_cache_for cache_for)
   if (NILP (cache))
     {
       if (NILP (ft_face_cache))
-       {
-         Lisp_Object args[2];
-
-         args[0] = QCtest;
-         args[1] = Qequal;
-         ft_face_cache = Fmake_hash_table (2, args);
-       }
+       ft_face_cache = CALLN (Fmake_hash_table, QCtest, Qequal);
       cache_data = xmalloc (sizeof *cache_data);
       cache_data->ft_face = NULL;
       cache_data->fc_charset = NULL;
@@ -2582,13 +2570,10 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font 
*font,
 Lisp_Object
 ftfont_shape (Lisp_Object lgstring)
 {
-  struct font *font;
-  struct ftfont_info *ftfont_info;
-  OTF *otf;
+  struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
+  struct ftfont_info *ftfont_info = (struct ftfont_info *) font;
+  OTF *otf = ftfont_get_otf (ftfont_info);
 
-  CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
-  ftfont_info = (struct ftfont_info *) font;
-  otf = ftfont_get_otf (ftfont_info);
   if (! otf)
     return make_number (0);
   return ftfont_shape_by_flt (lgstring, font, ftfont_info->ft_size->face, otf,
@@ -2667,7 +2652,10 @@ ftfont_filter_properties (Lisp_Object font, Lisp_Object 
alist)
 void
 syms_of_ftfont (void)
 {
+  /* Symbolic type of this font-driver.  */
   DEFSYM (Qfreetype, "freetype");
+
+  /* Fontconfig's generic families and their aliases.  */
   DEFSYM (Qmonospace, "monospace");
   DEFSYM (Qsans_serif, "sans-serif");
   DEFSYM (Qserif, "serif");
diff --git a/src/ftxfont.c b/src/ftxfont.c
index 7e4608b..cd2bf3e 100644
--- a/src/ftxfont.c
+++ b/src/ftxfont.c
@@ -1,5 +1,5 @@
 /* ftxfont.c -- FreeType font driver on X (without using XFT).
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
@@ -35,8 +35,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 /* FTX font driver.  */
 
-static Lisp_Object Qftx;
-
 struct font_driver ftxfont_driver;
 
 struct ftxfont_frame_data
diff --git a/src/getpagesize.h b/src/getpagesize.h
index 496bf21..75dd99f 100644
--- a/src/getpagesize.h
+++ b/src/getpagesize.h
@@ -1,5 +1,5 @@
 /* Emulate getpagesize on systems that lack it.
-   Copyright (C) 1986, 1992, 1995, 2001-2014 Free Software Foundation,
+   Copyright (C) 1986, 1992, 1995, 2001-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/gfilenotify.c b/src/gfilenotify.c
index 9882f27..e03bec9 100644
--- a/src/gfilenotify.c
+++ b/src/gfilenotify.c
@@ -1,5 +1,5 @@
 /* Filesystem notifications support with glib API.
-   Copyright (C) 2013-2014 Free Software Foundation, Inc.
+   Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -29,24 +29,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "process.h"
 
 
-/* Subroutines.  */
-static Lisp_Object Qgfile_add_watch;
-static Lisp_Object Qgfile_rm_watch;
-
-/* Filter objects.  */
-static Lisp_Object Qwatch_mounts;      /* G_FILE_MONITOR_WATCH_MOUNTS  */
-static Lisp_Object Qsend_moved;        /* G_FILE_MONITOR_SEND_MOVED  */
-
-/* Event types.  */
-static Lisp_Object Qchanged;           /* G_FILE_MONITOR_EVENT_CHANGED  */
-static Lisp_Object Qchanges_done_hint; /* 
G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT  */
-static Lisp_Object Qdeleted;           /* G_FILE_MONITOR_EVENT_DELETED  */
-static Lisp_Object Qcreated;           /* G_FILE_MONITOR_EVENT_CREATED  */
-static Lisp_Object Qattribute_changed; /* 
G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED  */
-static Lisp_Object Qpre_unmount;       /* G_FILE_MONITOR_EVENT_PRE_UNMOUNT  */
-static Lisp_Object Qunmounted;         /* G_FILE_MONITOR_EVENT_UNMOUNTED  */
-static Lisp_Object Qmoved;             /* G_FILE_MONITOR_EVENT_MOVED  */
-
 static Lisp_Object watch_list;
 
 /* This is the callback function for arriving signals from
@@ -95,7 +77,7 @@ dir_monitor_callback (GFileMonitor *monitor,
     }
 
   /* Determine callback function.  */
-  monitor_object = XIL ((intptr_t) monitor);
+  monitor_object = make_pointer_integer (monitor);
   eassert (INTEGERP (monitor_object));
   watch_object = assq_no_quit (monitor_object, watch_list);
 
@@ -164,7 +146,7 @@ FILE is the name of the file whose event is being reported. 
 FILE1
 will be reported only in case of the 'moved' event.  */)
   (Lisp_Object file, Lisp_Object flags, Lisp_Object callback)
 {
-  Lisp_Object watch_descriptor, watch_object;
+  Lisp_Object watch_object;
   GFile *gfile;
   GFileMonitor *monitor;
   GFileMonitorFlags gflags = G_FILE_MONITOR_NONE;
@@ -194,10 +176,9 @@ will be reported only in case of the 'moved' event.  */)
   if (! monitor)
     xsignal2 (Qfile_notify_error, build_string ("Cannot watch file"), file);
 
-  /* On all known glib platforms, converting MONITOR directly to a
-     Lisp_Object value results is a Lisp integer, which is safe.  This
-     assumption is dicey, though, so check it now.  */
-  watch_descriptor = XIL ((intptr_t) monitor);
+  Lisp_Object watch_descriptor = make_pointer_integer (monitor);
+
+  /* Check the dicey assumption that make_pointer_integer is safe.  */
   if (! INTEGERP (watch_descriptor))
     {
       g_object_unref (monitor);
@@ -221,8 +202,6 @@ DEFUN ("gfile-rm-watch", Fgfile_rm_watch, Sgfile_rm_watch, 
1, 1, 0,
 WATCH-DESCRIPTOR should be an object returned by `gfile-add-watch'.  */)
      (Lisp_Object watch_descriptor)
 {
-  intptr_t int_monitor;
-  GFileMonitor *monitor;
   Lisp_Object watch_object = assq_no_quit (watch_descriptor, watch_list);
 
   if (! CONSP (watch_object))
@@ -230,8 +209,7 @@ WATCH-DESCRIPTOR should be an object returned by 
`gfile-add-watch'.  */)
              watch_descriptor);
 
   eassert (INTEGERP (watch_descriptor));
-  int_monitor = XLI (watch_descriptor);
-  monitor = (GFileMonitor *) int_monitor;
+  GFileMonitor *monitor = XINTPTR (watch_descriptor);
   if (!g_file_monitor_cancel (monitor))
     xsignal2 (Qfile_notify_error, build_string ("Could not rm watch"),
              watch_descriptor);
@@ -258,23 +236,27 @@ globals_of_gfilenotify (void)
 void
 syms_of_gfilenotify (void)
 {
-
   DEFSYM (Qgfile_add_watch, "gfile-add-watch");
   defsubr (&Sgfile_add_watch);
 
   DEFSYM (Qgfile_rm_watch, "gfile-rm-watch");
   defsubr (&Sgfile_rm_watch);
 
-  DEFSYM (Qwatch_mounts, "watch-mounts");
-  DEFSYM (Qsend_moved, "send-moved");
-  DEFSYM (Qchanged, "changed");
+  /* Filter objects.  */
+  DEFSYM (Qwatch_mounts, "watch-mounts"); /* G_FILE_MONITOR_WATCH_MOUNTS  */
+  DEFSYM (Qsend_moved, "send-moved");  /* G_FILE_MONITOR_SEND_MOVED  */
+
+  /* Event types.  */
+  DEFSYM (Qchanged, "changed");        /* G_FILE_MONITOR_EVENT_CHANGED  */
   DEFSYM (Qchanges_done_hint, "changes-done-hint");
-  DEFSYM (Qdeleted, "deleted");
-  DEFSYM (Qcreated, "created");
+                               /* G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT  */
+  DEFSYM (Qdeleted, "deleted");        /* G_FILE_MONITOR_EVENT_DELETED  */
+  DEFSYM (Qcreated, "created");        /* G_FILE_MONITOR_EVENT_CREATED  */
   DEFSYM (Qattribute_changed, "attribute-changed");
-  DEFSYM (Qpre_unmount, "pre-unmount");
-  DEFSYM (Qunmounted, "unmounted");
-  DEFSYM (Qmoved, "moved");
+                               /* G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED  */
+  DEFSYM (Qpre_unmount, "pre-unmount");        /* 
G_FILE_MONITOR_EVENT_PRE_UNMOUNT  */
+  DEFSYM (Qunmounted, "unmounted");    /* G_FILE_MONITOR_EVENT_UNMOUNTED  */
+  DEFSYM (Qmoved, "moved");    /* G_FILE_MONITOR_EVENT_MOVED  */
 
   staticpro (&watch_list);
 
diff --git a/src/gmalloc.c b/src/gmalloc.c
index 3456ff0..a88f4ab 100644
--- a/src/gmalloc.c
+++ b/src/gmalloc.c
@@ -1,5 +1,5 @@
 /* Declarations for `malloc' and friends.
-   Copyright (C) 1990-1993, 1995-1996, 1999, 2002-2007, 2013-2014 Free
+   Copyright (C) 1990-1993, 1995-1996, 1999, 2002-2007, 2013-2015 Free
    Software Foundation, Inc.
                  Written May 1989 by Mike Haertel.
 
diff --git a/src/gnutls.c b/src/gnutls.c
index 5d48f78..35f0eb4 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -1,5 +1,5 @@
 /* GnuTLS glue for GNU Emacs.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -18,9 +18,11 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include <errno.h>
+#include <stdio.h>
 
 #include "lisp.h"
 #include "process.h"
+#include "gnutls.h"
 #include "coding.h"
 
 #ifdef HAVE_GNUTLS
@@ -33,119 +35,148 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 static bool emacs_gnutls_handle_error (gnutls_session_t, int);
 
-static Lisp_Object Qgnutls_dll;
-static Lisp_Object Qgnutls_code;
-static Lisp_Object Qgnutls_anon, Qgnutls_x509pki;
-static Lisp_Object Qgnutls_e_interrupted, Qgnutls_e_again,
-  Qgnutls_e_invalid_session, Qgnutls_e_not_ready_for_handshake;
 static bool gnutls_global_initialized;
 
-/* The following are for the property list of `gnutls-boot'.  */
-static Lisp_Object QCgnutls_bootprop_priority;
-static Lisp_Object QCgnutls_bootprop_trustfiles;
-static Lisp_Object QCgnutls_bootprop_keylist;
-static Lisp_Object QCgnutls_bootprop_crlfiles;
-static Lisp_Object QCgnutls_bootprop_callbacks;
-static Lisp_Object QCgnutls_bootprop_loglevel;
-static Lisp_Object QCgnutls_bootprop_hostname;
-static Lisp_Object QCgnutls_bootprop_min_prime_bits;
-static Lisp_Object QCgnutls_bootprop_verify_flags;
-static Lisp_Object QCgnutls_bootprop_verify_error;
-
-/* Callback keys for `gnutls-boot'.  Unused currently.  */
-static Lisp_Object QCgnutls_bootprop_callbacks_verify;
-
 static void gnutls_log_function (int, const char *);
 static void gnutls_log_function2 (int, const char *, const char *);
 #ifdef HAVE_GNUTLS3
 static void gnutls_audit_log_function (gnutls_session_t, const char *);
 #endif
 
+enum extra_peer_verification
+{
+    CERTIFICATE_NOT_MATCHING = 2
+};
+
 
 #ifdef WINDOWSNT
 
-/* Macro for defining functions that will be loaded from the GnuTLS DLL.  */
-#define DEF_GNUTLS_FN(rettype,func,args) static rettype (FAR CDECL 
*fn_##func)args
+DEF_DLL_FN (gnutls_alert_description_t, gnutls_alert_get,
+           (gnutls_session_t));
+DEF_DLL_FN (const char *, gnutls_alert_get_name,
+           (gnutls_alert_description_t));
+DEF_DLL_FN (int, gnutls_alert_send_appropriate, (gnutls_session_t, int));
+DEF_DLL_FN (int, gnutls_anon_allocate_client_credentials,
+           (gnutls_anon_client_credentials_t *));
+DEF_DLL_FN (void, gnutls_anon_free_client_credentials,
+           (gnutls_anon_client_credentials_t));
+DEF_DLL_FN (int, gnutls_bye, (gnutls_session_t, gnutls_close_request_t));
+DEF_DLL_FN (int, gnutls_certificate_allocate_credentials,
+           (gnutls_certificate_credentials_t *));
+DEF_DLL_FN (void, gnutls_certificate_free_credentials,
+           (gnutls_certificate_credentials_t));
+DEF_DLL_FN (const gnutls_datum_t *, gnutls_certificate_get_peers,
+           (gnutls_session_t, unsigned int *));
+DEF_DLL_FN (void, gnutls_certificate_set_verify_flags,
+           (gnutls_certificate_credentials_t, unsigned int));
+DEF_DLL_FN (int, gnutls_certificate_set_x509_crl_file,
+           (gnutls_certificate_credentials_t, const char *,
+            gnutls_x509_crt_fmt_t));
+DEF_DLL_FN (int, gnutls_certificate_set_x509_key_file,
+           (gnutls_certificate_credentials_t, const char *, const char *,
+            gnutls_x509_crt_fmt_t));
+# if ((GNUTLS_VERSION_MAJOR                                            \
+       + (GNUTLS_VERSION_MINOR > 0 || GNUTLS_VERSION_PATCH >= 20))     \
+      > 3)
+DEF_DLL_FN (int, gnutls_certificate_set_x509_system_trust,
+           (gnutls_certificate_credentials_t));
+# endif
+DEF_DLL_FN (int, gnutls_certificate_set_x509_trust_file,
+           (gnutls_certificate_credentials_t, const char *,
+            gnutls_x509_crt_fmt_t));
+DEF_DLL_FN (gnutls_certificate_type_t, gnutls_certificate_type_get,
+           (gnutls_session_t));
+DEF_DLL_FN (int, gnutls_certificate_verify_peers2,
+           (gnutls_session_t, unsigned int *));
+DEF_DLL_FN (int, gnutls_credentials_set,
+           (gnutls_session_t, gnutls_credentials_type_t, void *));
+DEF_DLL_FN (void, gnutls_deinit, (gnutls_session_t));
+DEF_DLL_FN (void, gnutls_dh_set_prime_bits,
+           (gnutls_session_t, unsigned int));
+DEF_DLL_FN (int, gnutls_dh_get_prime_bits, (gnutls_session_t));
+DEF_DLL_FN (int, gnutls_error_is_fatal, (int));
+DEF_DLL_FN (int, gnutls_global_init, (void));
+DEF_DLL_FN (void, gnutls_global_set_log_function, (gnutls_log_func));
+# ifdef HAVE_GNUTLS3
+DEF_DLL_FN (void, gnutls_global_set_audit_log_function, 
(gnutls_audit_log_func));
+# endif
+DEF_DLL_FN (void, gnutls_global_set_log_level, (int));
+DEF_DLL_FN (int, gnutls_handshake, (gnutls_session_t));
+DEF_DLL_FN (int, gnutls_init, (gnutls_session_t *, unsigned int));
+DEF_DLL_FN (int, gnutls_priority_set_direct,
+           (gnutls_session_t, const char *, const char **));
+DEF_DLL_FN (size_t, gnutls_record_check_pending, (gnutls_session_t));
+DEF_DLL_FN (ssize_t, gnutls_record_recv, (gnutls_session_t, void *, size_t));
+DEF_DLL_FN (ssize_t, gnutls_record_send,
+           (gnutls_session_t, const void *, size_t));
+DEF_DLL_FN (const char *, gnutls_strerror, (int));
+DEF_DLL_FN (void, gnutls_transport_set_errno, (gnutls_session_t, int));
+DEF_DLL_FN (const char *, gnutls_check_version, (const char *));
+DEF_DLL_FN (void, gnutls_transport_set_lowat, (gnutls_session_t, int));
+DEF_DLL_FN (void, gnutls_transport_set_ptr2,
+           (gnutls_session_t, gnutls_transport_ptr_t,
+            gnutls_transport_ptr_t));
+DEF_DLL_FN (void, gnutls_transport_set_pull_function,
+           (gnutls_session_t, gnutls_pull_func));
+DEF_DLL_FN (void, gnutls_transport_set_push_function,
+           (gnutls_session_t, gnutls_push_func));
+DEF_DLL_FN (int, gnutls_x509_crt_check_hostname,
+           (gnutls_x509_crt_t, const char *));
+DEF_DLL_FN (int, gnutls_x509_crt_check_issuer,
+              (gnutls_x509_crt_t, gnutls_x509_crt_t));
+DEF_DLL_FN (void, gnutls_x509_crt_deinit, (gnutls_x509_crt_t));
+DEF_DLL_FN (int, gnutls_x509_crt_import,
+           (gnutls_x509_crt_t, const gnutls_datum_t *,
+            gnutls_x509_crt_fmt_t));
+DEF_DLL_FN (int, gnutls_x509_crt_init, (gnutls_x509_crt_t *));
+DEF_DLL_FN (int, gnutls_x509_crt_get_fingerprint,
+           (gnutls_x509_crt_t,
+            gnutls_digest_algorithm_t, void *, size_t *));
+DEF_DLL_FN (int, gnutls_x509_crt_get_version,
+           (gnutls_x509_crt_t));
+DEF_DLL_FN (int, gnutls_x509_crt_get_serial,
+           (gnutls_x509_crt_t, void *, size_t *));
+DEF_DLL_FN (int, gnutls_x509_crt_get_issuer_dn,
+           (gnutls_x509_crt_t, char *, size_t *));
+DEF_DLL_FN (time_t, gnutls_x509_crt_get_activation_time,
+           (gnutls_x509_crt_t));
+DEF_DLL_FN (time_t, gnutls_x509_crt_get_expiration_time,
+           (gnutls_x509_crt_t));
+DEF_DLL_FN (int, gnutls_x509_crt_get_dn,
+           (gnutls_x509_crt_t, char *, size_t *));
+DEF_DLL_FN (int, gnutls_x509_crt_get_pk_algorithm,
+           (gnutls_x509_crt_t, unsigned int *));
+DEF_DLL_FN (const char*, gnutls_pk_algorithm_get_name,
+           (gnutls_pk_algorithm_t));
+DEF_DLL_FN (int, gnutls_pk_bits_to_sec_param,
+           (gnutls_pk_algorithm_t, unsigned int));
+DEF_DLL_FN (int, gnutls_x509_crt_get_issuer_unique_id,
+           (gnutls_x509_crt_t, char *, size_t *));
+DEF_DLL_FN (int, gnutls_x509_crt_get_subject_unique_id,
+           (gnutls_x509_crt_t, char *, size_t *));
+DEF_DLL_FN (int, gnutls_x509_crt_get_signature_algorithm,
+           (gnutls_x509_crt_t));
+DEF_DLL_FN (int, gnutls_x509_crt_get_signature,
+           (gnutls_x509_crt_t, char *, size_t *));
+DEF_DLL_FN (int, gnutls_x509_crt_get_key_id,
+           (gnutls_x509_crt_t, unsigned int, unsigned char *, size_t *_size));
+DEF_DLL_FN (const char*, gnutls_sec_param_get_name, (gnutls_sec_param_t));
+DEF_DLL_FN (const char*, gnutls_sign_get_name, (gnutls_sign_algorithm_t));
+DEF_DLL_FN (int, gnutls_server_name_set,
+           (gnutls_session_t, gnutls_server_name_type_t,
+            const void *, size_t));
+DEF_DLL_FN (gnutls_kx_algorithm_t, gnutls_kx_get, (gnutls_session_t));
+DEF_DLL_FN (const char*, gnutls_kx_get_name, (gnutls_kx_algorithm_t));
+DEF_DLL_FN (gnutls_protocol_t, gnutls_protocol_get_version,
+           (gnutls_session_t));
+DEF_DLL_FN (const char*, gnutls_protocol_get_name, (gnutls_protocol_t));
+DEF_DLL_FN (gnutls_cipher_algorithm_t, gnutls_cipher_get,
+           (gnutls_session_t));
+DEF_DLL_FN (const char*, gnutls_cipher_get_name,
+           (gnutls_cipher_algorithm_t));
+DEF_DLL_FN (gnutls_mac_algorithm_t, gnutls_mac_get, (gnutls_session_t));
+DEF_DLL_FN (const char*, gnutls_mac_get_name, (gnutls_mac_algorithm_t));
 
-/* Macro for loading GnuTLS functions from the library.  */
-#define LOAD_GNUTLS_FN(lib,func) {                                     \
-    fn_##func = (void *) GetProcAddress (lib, #func);                  \
-    if (!fn_##func) return 0;                                          \
-  }
-
-DEF_GNUTLS_FN (gnutls_alert_description_t, gnutls_alert_get,
-              (gnutls_session_t));
-DEF_GNUTLS_FN (const char *, gnutls_alert_get_name,
-              (gnutls_alert_description_t));
-DEF_GNUTLS_FN (int, gnutls_alert_send_appropriate, (gnutls_session_t, int));
-DEF_GNUTLS_FN (int, gnutls_anon_allocate_client_credentials,
-              (gnutls_anon_client_credentials_t *));
-DEF_GNUTLS_FN (void, gnutls_anon_free_client_credentials,
-              (gnutls_anon_client_credentials_t));
-DEF_GNUTLS_FN (int, gnutls_bye, (gnutls_session_t, gnutls_close_request_t));
-DEF_GNUTLS_FN (int, gnutls_certificate_allocate_credentials,
-              (gnutls_certificate_credentials_t *));
-DEF_GNUTLS_FN (void, gnutls_certificate_free_credentials,
-              (gnutls_certificate_credentials_t));
-DEF_GNUTLS_FN (const gnutls_datum_t *, gnutls_certificate_get_peers,
-              (gnutls_session_t, unsigned int *));
-DEF_GNUTLS_FN (void, gnutls_certificate_set_verify_flags,
-              (gnutls_certificate_credentials_t, unsigned int));
-DEF_GNUTLS_FN (int, gnutls_certificate_set_x509_crl_file,
-              (gnutls_certificate_credentials_t, const char *,
-               gnutls_x509_crt_fmt_t));
-DEF_GNUTLS_FN (int, gnutls_certificate_set_x509_key_file,
-              (gnutls_certificate_credentials_t, const char *, const char *,
-               gnutls_x509_crt_fmt_t));
-DEF_GNUTLS_FN (int, gnutls_certificate_set_x509_trust_file,
-              (gnutls_certificate_credentials_t, const char *,
-               gnutls_x509_crt_fmt_t));
-DEF_GNUTLS_FN (gnutls_certificate_type_t, gnutls_certificate_type_get,
-              (gnutls_session_t));
-DEF_GNUTLS_FN (int, gnutls_certificate_verify_peers2,
-              (gnutls_session_t, unsigned int *));
-DEF_GNUTLS_FN (int, gnutls_credentials_set,
-              (gnutls_session_t, gnutls_credentials_type_t, void *));
-DEF_GNUTLS_FN (void, gnutls_deinit, (gnutls_session_t));
-DEF_GNUTLS_FN (void, gnutls_dh_set_prime_bits,
-              (gnutls_session_t, unsigned int));
-DEF_GNUTLS_FN (int, gnutls_error_is_fatal, (int));
-DEF_GNUTLS_FN (int, gnutls_global_init, (void));
-DEF_GNUTLS_FN (void, gnutls_global_set_log_function, (gnutls_log_func));
-#ifdef HAVE_GNUTLS3
-DEF_GNUTLS_FN (void, gnutls_global_set_audit_log_function, 
(gnutls_audit_log_func));
-#endif
-DEF_GNUTLS_FN (void, gnutls_global_set_log_level, (int));
-DEF_GNUTLS_FN (void, gnutls_global_set_mem_functions,
-              (gnutls_alloc_function, gnutls_alloc_function,
-               gnutls_is_secure_function, gnutls_realloc_function,
-               gnutls_free_function));
-DEF_GNUTLS_FN (int, gnutls_handshake, (gnutls_session_t));
-DEF_GNUTLS_FN (int, gnutls_init, (gnutls_session_t *, 
gnutls_connection_end_t));
-DEF_GNUTLS_FN (int, gnutls_priority_set_direct,
-              (gnutls_session_t, const char *, const char **));
-DEF_GNUTLS_FN (size_t, gnutls_record_check_pending, (gnutls_session_t));
-DEF_GNUTLS_FN (ssize_t, gnutls_record_recv, (gnutls_session_t, void *, 
size_t));
-DEF_GNUTLS_FN (ssize_t, gnutls_record_send,
-              (gnutls_session_t, const void *, size_t));
-DEF_GNUTLS_FN (const char *, gnutls_strerror, (int));
-DEF_GNUTLS_FN (void, gnutls_transport_set_errno, (gnutls_session_t, int));
-DEF_GNUTLS_FN (const char *, gnutls_check_version, (const char *));
-DEF_GNUTLS_FN (void, gnutls_transport_set_lowat, (gnutls_session_t, int));
-DEF_GNUTLS_FN (void, gnutls_transport_set_ptr2,
-              (gnutls_session_t, gnutls_transport_ptr_t,
-               gnutls_transport_ptr_t));
-DEF_GNUTLS_FN (void, gnutls_transport_set_pull_function,
-              (gnutls_session_t, gnutls_pull_func));
-DEF_GNUTLS_FN (void, gnutls_transport_set_push_function,
-              (gnutls_session_t, gnutls_push_func));
-DEF_GNUTLS_FN (int, gnutls_x509_crt_check_hostname,
-              (gnutls_x509_crt_t, const char *));
-DEF_GNUTLS_FN (void, gnutls_x509_crt_deinit, (gnutls_x509_crt_t));
-DEF_GNUTLS_FN (int, gnutls_x509_crt_import,
-              (gnutls_x509_crt_t, const gnutls_datum_t *,
-               gnutls_x509_crt_fmt_t));
-DEF_GNUTLS_FN (int, gnutls_x509_crt_init, (gnutls_x509_crt_t *));
 
 static bool
 init_gnutls_functions (void)
@@ -159,52 +190,84 @@ init_gnutls_functions (void)
       return 0;
     }
 
-  LOAD_GNUTLS_FN (library, gnutls_alert_get);
-  LOAD_GNUTLS_FN (library, gnutls_alert_get_name);
-  LOAD_GNUTLS_FN (library, gnutls_alert_send_appropriate);
-  LOAD_GNUTLS_FN (library, gnutls_anon_allocate_client_credentials);
-  LOAD_GNUTLS_FN (library, gnutls_anon_free_client_credentials);
-  LOAD_GNUTLS_FN (library, gnutls_bye);
-  LOAD_GNUTLS_FN (library, gnutls_certificate_allocate_credentials);
-  LOAD_GNUTLS_FN (library, gnutls_certificate_free_credentials);
-  LOAD_GNUTLS_FN (library, gnutls_certificate_get_peers);
-  LOAD_GNUTLS_FN (library, gnutls_certificate_set_verify_flags);
-  LOAD_GNUTLS_FN (library, gnutls_certificate_set_x509_crl_file);
-  LOAD_GNUTLS_FN (library, gnutls_certificate_set_x509_key_file);
-  LOAD_GNUTLS_FN (library, gnutls_certificate_set_x509_trust_file);
-  LOAD_GNUTLS_FN (library, gnutls_certificate_type_get);
-  LOAD_GNUTLS_FN (library, gnutls_certificate_verify_peers2);
-  LOAD_GNUTLS_FN (library, gnutls_credentials_set);
-  LOAD_GNUTLS_FN (library, gnutls_deinit);
-  LOAD_GNUTLS_FN (library, gnutls_dh_set_prime_bits);
-  LOAD_GNUTLS_FN (library, gnutls_error_is_fatal);
-  LOAD_GNUTLS_FN (library, gnutls_global_init);
-  LOAD_GNUTLS_FN (library, gnutls_global_set_log_function);
-#ifdef HAVE_GNUTLS3
-  LOAD_GNUTLS_FN (library, gnutls_global_set_audit_log_function);
-#endif
-  LOAD_GNUTLS_FN (library, gnutls_global_set_log_level);
-  LOAD_GNUTLS_FN (library, gnutls_global_set_mem_functions);
-  LOAD_GNUTLS_FN (library, gnutls_handshake);
-  LOAD_GNUTLS_FN (library, gnutls_init);
-  LOAD_GNUTLS_FN (library, gnutls_priority_set_direct);
-  LOAD_GNUTLS_FN (library, gnutls_record_check_pending);
-  LOAD_GNUTLS_FN (library, gnutls_record_recv);
-  LOAD_GNUTLS_FN (library, gnutls_record_send);
-  LOAD_GNUTLS_FN (library, gnutls_strerror);
-  LOAD_GNUTLS_FN (library, gnutls_transport_set_errno);
-  LOAD_GNUTLS_FN (library, gnutls_check_version);
+  LOAD_DLL_FN (library, gnutls_alert_get);
+  LOAD_DLL_FN (library, gnutls_alert_get_name);
+  LOAD_DLL_FN (library, gnutls_alert_send_appropriate);
+  LOAD_DLL_FN (library, gnutls_anon_allocate_client_credentials);
+  LOAD_DLL_FN (library, gnutls_anon_free_client_credentials);
+  LOAD_DLL_FN (library, gnutls_bye);
+  LOAD_DLL_FN (library, gnutls_certificate_allocate_credentials);
+  LOAD_DLL_FN (library, gnutls_certificate_free_credentials);
+  LOAD_DLL_FN (library, gnutls_certificate_get_peers);
+  LOAD_DLL_FN (library, gnutls_certificate_set_verify_flags);
+  LOAD_DLL_FN (library, gnutls_certificate_set_x509_crl_file);
+  LOAD_DLL_FN (library, gnutls_certificate_set_x509_key_file);
+# if ((GNUTLS_VERSION_MAJOR                                            \
+       + (GNUTLS_VERSION_MINOR > 0 || GNUTLS_VERSION_PATCH >= 20))     \
+      > 3)
+  LOAD_DLL_FN (library, gnutls_certificate_set_x509_system_trust);
+# endif
+  LOAD_DLL_FN (library, gnutls_certificate_set_x509_trust_file);
+  LOAD_DLL_FN (library, gnutls_certificate_type_get);
+  LOAD_DLL_FN (library, gnutls_certificate_verify_peers2);
+  LOAD_DLL_FN (library, gnutls_credentials_set);
+  LOAD_DLL_FN (library, gnutls_deinit);
+  LOAD_DLL_FN (library, gnutls_dh_set_prime_bits);
+  LOAD_DLL_FN (library, gnutls_dh_get_prime_bits);
+  LOAD_DLL_FN (library, gnutls_error_is_fatal);
+  LOAD_DLL_FN (library, gnutls_global_init);
+  LOAD_DLL_FN (library, gnutls_global_set_log_function);
+# ifdef HAVE_GNUTLS3
+  LOAD_DLL_FN (library, gnutls_global_set_audit_log_function);
+# endif
+  LOAD_DLL_FN (library, gnutls_global_set_log_level);
+  LOAD_DLL_FN (library, gnutls_handshake);
+  LOAD_DLL_FN (library, gnutls_init);
+  LOAD_DLL_FN (library, gnutls_priority_set_direct);
+  LOAD_DLL_FN (library, gnutls_record_check_pending);
+  LOAD_DLL_FN (library, gnutls_record_recv);
+  LOAD_DLL_FN (library, gnutls_record_send);
+  LOAD_DLL_FN (library, gnutls_strerror);
+  LOAD_DLL_FN (library, gnutls_transport_set_errno);
+  LOAD_DLL_FN (library, gnutls_check_version);
   /* We don't need to call gnutls_transport_set_lowat in GnuTLS 2.11.1
      and later, and the function was removed entirely in 3.0.0.  */
   if (!fn_gnutls_check_version ("2.11.1"))
-    LOAD_GNUTLS_FN (library, gnutls_transport_set_lowat);
-  LOAD_GNUTLS_FN (library, gnutls_transport_set_ptr2);
-  LOAD_GNUTLS_FN (library, gnutls_transport_set_pull_function);
-  LOAD_GNUTLS_FN (library, gnutls_transport_set_push_function);
-  LOAD_GNUTLS_FN (library, gnutls_x509_crt_check_hostname);
-  LOAD_GNUTLS_FN (library, gnutls_x509_crt_deinit);
-  LOAD_GNUTLS_FN (library, gnutls_x509_crt_import);
-  LOAD_GNUTLS_FN (library, gnutls_x509_crt_init);
+    LOAD_DLL_FN (library, gnutls_transport_set_lowat);
+  LOAD_DLL_FN (library, gnutls_transport_set_ptr2);
+  LOAD_DLL_FN (library, gnutls_transport_set_pull_function);
+  LOAD_DLL_FN (library, gnutls_transport_set_push_function);
+  LOAD_DLL_FN (library, gnutls_x509_crt_check_hostname);
+  LOAD_DLL_FN (library, gnutls_x509_crt_check_issuer);
+  LOAD_DLL_FN (library, gnutls_x509_crt_deinit);
+  LOAD_DLL_FN (library, gnutls_x509_crt_import);
+  LOAD_DLL_FN (library, gnutls_x509_crt_init);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_fingerprint);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_version);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_serial);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_issuer_dn);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_activation_time);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_expiration_time);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_dn);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_pk_algorithm);
+  LOAD_DLL_FN (library, gnutls_pk_algorithm_get_name);
+  LOAD_DLL_FN (library, gnutls_pk_bits_to_sec_param);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_issuer_unique_id);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_subject_unique_id);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_signature_algorithm);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_signature);
+  LOAD_DLL_FN (library, gnutls_x509_crt_get_key_id);
+  LOAD_DLL_FN (library, gnutls_sec_param_get_name);
+  LOAD_DLL_FN (library, gnutls_sign_get_name);
+  LOAD_DLL_FN (library, gnutls_server_name_set);
+  LOAD_DLL_FN (library, gnutls_kx_get);
+  LOAD_DLL_FN (library, gnutls_kx_get_name);
+  LOAD_DLL_FN (library, gnutls_protocol_get_version);
+  LOAD_DLL_FN (library, gnutls_protocol_get_name);
+  LOAD_DLL_FN (library, gnutls_cipher_get);
+  LOAD_DLL_FN (library, gnutls_cipher_get_name);
+  LOAD_DLL_FN (library, gnutls_mac_get);
+  LOAD_DLL_FN (library, gnutls_mac_get_name);
 
   max_log_level = global_gnutls_log_level;
 
@@ -217,55 +280,92 @@ init_gnutls_functions (void)
   return 1;
 }
 
-#else /* !WINDOWSNT */
-
-#define fn_gnutls_alert_get                    gnutls_alert_get
-#define fn_gnutls_alert_get_name               gnutls_alert_get_name
-#define fn_gnutls_alert_send_appropriate       gnutls_alert_send_appropriate
-#define fn_gnutls_anon_allocate_client_credentials 
gnutls_anon_allocate_client_credentials
-#define fn_gnutls_anon_free_client_credentials 
gnutls_anon_free_client_credentials
-#define fn_gnutls_bye                          gnutls_bye
-#define fn_gnutls_certificate_allocate_credentials 
gnutls_certificate_allocate_credentials
-#define fn_gnutls_certificate_free_credentials 
gnutls_certificate_free_credentials
-#define fn_gnutls_certificate_get_peers                
gnutls_certificate_get_peers
-#define fn_gnutls_certificate_set_verify_flags 
gnutls_certificate_set_verify_flags
-#define fn_gnutls_certificate_set_x509_crl_file        
gnutls_certificate_set_x509_crl_file
-#define fn_gnutls_certificate_set_x509_key_file 
gnutls_certificate_set_x509_key_file
-#define fn_gnutls_certificate_set_x509_trust_file 
gnutls_certificate_set_x509_trust_file
-#define fn_gnutls_certificate_type_get         gnutls_certificate_type_get
-#define fn_gnutls_certificate_verify_peers2    gnutls_certificate_verify_peers2
-#define fn_gnutls_credentials_set              gnutls_credentials_set
-#define fn_gnutls_deinit                       gnutls_deinit
-#define fn_gnutls_dh_set_prime_bits            gnutls_dh_set_prime_bits
-#define fn_gnutls_error_is_fatal               gnutls_error_is_fatal
-#define fn_gnutls_global_init                  gnutls_global_init
-#define fn_gnutls_global_set_log_function      gnutls_global_set_log_function
-#ifdef HAVE_GNUTLS3
-#define fn_gnutls_global_set_audit_log_function        
gnutls_global_set_audit_log_function
-#endif
-#define fn_gnutls_global_set_log_level         gnutls_global_set_log_level
-#define fn_gnutls_global_set_mem_functions     gnutls_global_set_mem_functions
-#define fn_gnutls_handshake                    gnutls_handshake
-#define fn_gnutls_init                         gnutls_init
-#define fn_gnutls_priority_set_direct          gnutls_priority_set_direct
-#define fn_gnutls_record_check_pending         gnutls_record_check_pending
-#define fn_gnutls_record_recv                  gnutls_record_recv
-#define fn_gnutls_record_send                  gnutls_record_send
-#define fn_gnutls_strerror                     gnutls_strerror
-#ifdef WINDOWSNT
-#define fn_gnutls_transport_set_errno          gnutls_transport_set_errno
-#endif
-#define fn_gnutls_transport_set_ptr2           gnutls_transport_set_ptr2
-#define fn_gnutls_x509_crt_check_hostname      gnutls_x509_crt_check_hostname
-#define fn_gnutls_x509_crt_deinit              gnutls_x509_crt_deinit
-#define fn_gnutls_x509_crt_import              gnutls_x509_crt_import
-#define fn_gnutls_x509_crt_init                        gnutls_x509_crt_init
+# define gnutls_alert_get fn_gnutls_alert_get
+# define gnutls_alert_get_name fn_gnutls_alert_get_name
+# define gnutls_alert_send_appropriate fn_gnutls_alert_send_appropriate
+# define gnutls_anon_allocate_client_credentials 
fn_gnutls_anon_allocate_client_credentials
+# define gnutls_anon_free_client_credentials 
fn_gnutls_anon_free_client_credentials
+# define gnutls_bye fn_gnutls_bye
+# define gnutls_certificate_allocate_credentials 
fn_gnutls_certificate_allocate_credentials
+# define gnutls_certificate_free_credentials 
fn_gnutls_certificate_free_credentials
+# define gnutls_certificate_get_peers fn_gnutls_certificate_get_peers
+# define gnutls_certificate_set_verify_flags 
fn_gnutls_certificate_set_verify_flags
+# define gnutls_certificate_set_x509_crl_file 
fn_gnutls_certificate_set_x509_crl_file
+# define gnutls_certificate_set_x509_key_file 
fn_gnutls_certificate_set_x509_key_file
+# define gnutls_certificate_set_x509_system_trust 
fn_gnutls_certificate_set_x509_system_trust
+# define gnutls_certificate_set_x509_trust_file 
fn_gnutls_certificate_set_x509_trust_file
+# define gnutls_certificate_type_get fn_gnutls_certificate_type_get
+# define gnutls_certificate_verify_peers2 fn_gnutls_certificate_verify_peers2
+# define gnutls_check_version fn_gnutls_check_version
+# define gnutls_cipher_get fn_gnutls_cipher_get
+# define gnutls_cipher_get_name fn_gnutls_cipher_get_name
+# define gnutls_credentials_set fn_gnutls_credentials_set
+# define gnutls_deinit fn_gnutls_deinit
+# define gnutls_dh_get_prime_bits fn_gnutls_dh_get_prime_bits
+# define gnutls_dh_set_prime_bits fn_gnutls_dh_set_prime_bits
+# define gnutls_error_is_fatal fn_gnutls_error_is_fatal
+# define gnutls_global_init fn_gnutls_global_init
+# define gnutls_global_set_audit_log_function 
fn_gnutls_global_set_audit_log_function
+# define gnutls_global_set_log_function fn_gnutls_global_set_log_function
+# define gnutls_global_set_log_level fn_gnutls_global_set_log_level
+# define gnutls_handshake fn_gnutls_handshake
+# define gnutls_init fn_gnutls_init
+# define gnutls_kx_get fn_gnutls_kx_get
+# define gnutls_kx_get_name fn_gnutls_kx_get_name
+# define gnutls_mac_get fn_gnutls_mac_get
+# define gnutls_mac_get_name fn_gnutls_mac_get_name
+# define gnutls_pk_algorithm_get_name fn_gnutls_pk_algorithm_get_name
+# define gnutls_pk_bits_to_sec_param fn_gnutls_pk_bits_to_sec_param
+# define gnutls_priority_set_direct fn_gnutls_priority_set_direct
+# define gnutls_protocol_get_name fn_gnutls_protocol_get_name
+# define gnutls_protocol_get_version fn_gnutls_protocol_get_version
+# define gnutls_record_check_pending fn_gnutls_record_check_pending
+# define gnutls_record_recv fn_gnutls_record_recv
+# define gnutls_record_send fn_gnutls_record_send
+# define gnutls_sec_param_get_name fn_gnutls_sec_param_get_name
+# define gnutls_server_name_set fn_gnutls_server_name_set
+# define gnutls_sign_get_name fn_gnutls_sign_get_name
+# define gnutls_strerror fn_gnutls_strerror
+# define gnutls_transport_set_errno fn_gnutls_transport_set_errno
+# define gnutls_transport_set_lowat fn_gnutls_transport_set_lowat
+# define gnutls_transport_set_ptr2 fn_gnutls_transport_set_ptr2
+# define gnutls_transport_set_pull_function 
fn_gnutls_transport_set_pull_function
+# define gnutls_transport_set_push_function 
fn_gnutls_transport_set_push_function
+# define gnutls_x509_crt_check_hostname fn_gnutls_x509_crt_check_hostname
+# define gnutls_x509_crt_check_issuer fn_gnutls_x509_crt_check_issuer
+# define gnutls_x509_crt_deinit fn_gnutls_x509_crt_deinit
+# define gnutls_x509_crt_get_activation_time 
fn_gnutls_x509_crt_get_activation_time
+# define gnutls_x509_crt_get_dn fn_gnutls_x509_crt_get_dn
+# define gnutls_x509_crt_get_expiration_time 
fn_gnutls_x509_crt_get_expiration_time
+# define gnutls_x509_crt_get_fingerprint fn_gnutls_x509_crt_get_fingerprint
+# define gnutls_x509_crt_get_issuer_dn fn_gnutls_x509_crt_get_issuer_dn
+# define gnutls_x509_crt_get_issuer_unique_id 
fn_gnutls_x509_crt_get_issuer_unique_id
+# define gnutls_x509_crt_get_key_id fn_gnutls_x509_crt_get_key_id
+# define gnutls_x509_crt_get_pk_algorithm fn_gnutls_x509_crt_get_pk_algorithm
+# define gnutls_x509_crt_get_serial fn_gnutls_x509_crt_get_serial
+# define gnutls_x509_crt_get_signature fn_gnutls_x509_crt_get_signature
+# define gnutls_x509_crt_get_signature_algorithm 
fn_gnutls_x509_crt_get_signature_algorithm
+# define gnutls_x509_crt_get_subject_unique_id 
fn_gnutls_x509_crt_get_subject_unique_id
+# define gnutls_x509_crt_get_version fn_gnutls_x509_crt_get_version
+# define gnutls_x509_crt_import fn_gnutls_x509_crt_import
+# define gnutls_x509_crt_init fn_gnutls_x509_crt_init
 
-#endif /* !WINDOWSNT */
+#endif
 
 
+/* Report memory exhaustion if ERR is an out-of-memory indication.  */
+static void
+check_memory_full (int err)
+{
+  /* When GnuTLS exhausts memory, it doesn't say how much memory it
+     asked for, so tell the Emacs allocator that GnuTLS asked for no
+     bytes.  This isn't accurate, but it's good enough.  */
+  if (err == GNUTLS_E_MEMORY_ERROR)
+    memory_full (0);
+}
+
 #ifdef HAVE_GNUTLS3
-/* Function to log a simple audit message.  */
+/* Log a simple audit message.  */
 static void
 gnutls_audit_log_function (gnutls_session_t session, const char *string)
 {
@@ -276,21 +376,21 @@ gnutls_audit_log_function (gnutls_session_t session, 
const char *string)
 }
 #endif
 
-/* Function to log a simple message.  */
+/* Log a simple message.  */
 static void
 gnutls_log_function (int level, const char *string)
 {
   message ("gnutls.c: [%d] %s", level, string);
 }
 
-/* Function to log a message and a string.  */
+/* Log a message and a string.  */
 static void
 gnutls_log_function2 (int level, const char *string, const char *extra)
 {
   message ("gnutls.c: [%d] %s %s", level, string, extra);
 }
 
-/* Function to log a message and an integer.  */
+/* Log a message and an integer.  */
 static void
 gnutls_log_function2i (int level, const char *string, int extra)
 {
@@ -312,11 +412,11 @@ emacs_gnutls_handshake (struct Lisp_Process *proc)
       /* On W32 we cannot transfer socket handles between different runtime
         libraries, so we tell GnuTLS to use our special push/pull
         functions.  */
-      fn_gnutls_transport_set_ptr2 (state,
-                                   (gnutls_transport_ptr_t) proc,
-                                   (gnutls_transport_ptr_t) proc);
-      fn_gnutls_transport_set_push_function (state, &emacs_gnutls_push);
-      fn_gnutls_transport_set_pull_function (state, &emacs_gnutls_pull);
+      gnutls_transport_set_ptr2 (state,
+                                (gnutls_transport_ptr_t) proc,
+                                (gnutls_transport_ptr_t) proc);
+      gnutls_transport_set_push_function (state, &emacs_gnutls_push);
+      gnutls_transport_set_pull_function (state, &emacs_gnutls_pull);
 
       /* For non blocking sockets or other custom made pull/push
         functions the gnutls_transport_set_lowat must be called, with
@@ -329,15 +429,15 @@ emacs_gnutls_handshake (struct Lisp_Process *proc)
         zero by default in version 2.11.1, and the function
         gnutls_transport_set_lowat was removed from the library in
         version 2.99.0.  */
-      if (!fn_gnutls_check_version ("2.11.1"))
-       fn_gnutls_transport_set_lowat (state, 0);
+      if (!gnutls_check_version ("2.11.1"))
+       gnutls_transport_set_lowat (state, 0);
 #else
       /* This is how GnuTLS takes sockets: as file descriptors passed
         in.  For an Emacs process socket, infd and outfd are the
         same but we use this two-argument version for clarity.  */
-      fn_gnutls_transport_set_ptr2 (state,
-                                   (void *) (intptr_t) proc->infd,
-                                   (void *) (intptr_t) proc->outfd);
+      gnutls_transport_set_ptr2 (state,
+                                (void *) (intptr_t) proc->infd,
+                                (void *) (intptr_t) proc->outfd);
 #endif
 
       proc->gnutls_initstage = GNUTLS_STAGE_TRANSPORT_POINTERS_SET;
@@ -345,11 +445,11 @@ emacs_gnutls_handshake (struct Lisp_Process *proc)
 
   do
     {
-      ret = fn_gnutls_handshake (state);
+      ret = gnutls_handshake (state);
       emacs_gnutls_handle_error (state, ret);
       QUIT;
     }
-  while (ret < 0 && fn_gnutls_error_is_fatal (ret) == 0);
+  while (ret < 0 && gnutls_error_is_fatal (ret) == 0);
 
   proc->gnutls_initstage = GNUTLS_STAGE_HANDSHAKE_TRIED;
 
@@ -360,7 +460,7 @@ emacs_gnutls_handshake (struct Lisp_Process *proc)
     }
   else
     {
-      fn_gnutls_alert_send_appropriate (state, ret);
+      check_memory_full (gnutls_alert_send_appropriate (state, ret));
     }
   return ret;
 }
@@ -368,14 +468,14 @@ emacs_gnutls_handshake (struct Lisp_Process *proc)
 ptrdiff_t
 emacs_gnutls_record_check_pending (gnutls_session_t state)
 {
-  return fn_gnutls_record_check_pending (state);
+  return gnutls_record_check_pending (state);
 }
 
 #ifdef WINDOWSNT
 void
 emacs_gnutls_transport_set_errno (gnutls_session_t state, int err)
 {
-  fn_gnutls_transport_set_errno (state, err);
+  gnutls_transport_set_errno (state, err);
 }
 #endif
 
@@ -396,7 +496,7 @@ emacs_gnutls_write (struct Lisp_Process *proc, const char 
*buf, ptrdiff_t nbyte)
 
   while (nbyte > 0)
     {
-      rtnval = fn_gnutls_record_send (state, buf, nbyte);
+      rtnval = gnutls_record_send (state, buf, nbyte);
 
       if (rtnval < 0)
        {
@@ -448,7 +548,7 @@ emacs_gnutls_read (struct Lisp_Process *proc, char *buf, 
ptrdiff_t nbyte)
       proc->gnutls_handshakes_tried = 0;
       return 0;
     }
-  rtnval = fn_gnutls_record_recv (state, buf, nbyte);
+  rtnval = gnutls_record_recv (state, buf, nbyte);
   if (rtnval >= 0)
     return rtnval;
   else if (rtnval == GNUTLS_E_UNEXPECTED_PACKET_LENGTH)
@@ -477,18 +577,20 @@ emacs_gnutls_handle_error (gnutls_session_t session, int 
err)
   if (err >= 0)
     return 1;
 
+  check_memory_full (err);
+
   max_log_level = global_gnutls_log_level;
 
   /* TODO: use gnutls-error-fatalp and gnutls-error-string.  */
 
-  str = fn_gnutls_strerror (err);
+  str = gnutls_strerror (err);
   if (!str)
     str = "unknown";
 
-  if (fn_gnutls_error_is_fatal (err))
+  if (gnutls_error_is_fatal (err))
     {
       ret = 0;
-      GNUTLS_LOG2 (0, max_log_level, "fatal error:", str);
+      GNUTLS_LOG2 (1, max_log_level, "fatal error:", str);
     }
   else
     {
@@ -512,9 +614,9 @@ emacs_gnutls_handle_error (gnutls_session_t session, int 
err)
   if (err == GNUTLS_E_WARNING_ALERT_RECEIVED
       || err == GNUTLS_E_FATAL_ALERT_RECEIVED)
     {
-      int alert = fn_gnutls_alert_get (session);
+      int alert = gnutls_alert_get (session);
       int level = (err == GNUTLS_E_FATAL_ALERT_RECEIVED) ? 0 : 1;
-      str = fn_gnutls_alert_get_name (alert);
+      str = gnutls_alert_get_name (alert);
       if (!str)
        str = "unknown";
 
@@ -542,6 +644,7 @@ gnutls_make_error (int err)
       return Qgnutls_e_invalid_session;
     }
 
+  check_memory_full (err);
   return make_number (err);
 }
 
@@ -560,20 +663,20 @@ emacs_gnutls_deinit (Lisp_Object proc)
   if (XPROCESS (proc)->gnutls_x509_cred)
     {
       GNUTLS_LOG (2, log_level, "Deallocating x509 credentials");
-      fn_gnutls_certificate_free_credentials (XPROCESS 
(proc)->gnutls_x509_cred);
+      gnutls_certificate_free_credentials (XPROCESS (proc)->gnutls_x509_cred);
       XPROCESS (proc)->gnutls_x509_cred = NULL;
     }
 
   if (XPROCESS (proc)->gnutls_anon_cred)
     {
       GNUTLS_LOG (2, log_level, "Deallocating anon credentials");
-      fn_gnutls_anon_free_client_credentials (XPROCESS 
(proc)->gnutls_anon_cred);
+      gnutls_anon_free_client_credentials (XPROCESS (proc)->gnutls_anon_cred);
       XPROCESS (proc)->gnutls_anon_cred = NULL;
     }
 
   if (XPROCESS (proc)->gnutls_state)
     {
-      fn_gnutls_deinit (XPROCESS (proc)->gnutls_state);
+      gnutls_deinit (XPROCESS (proc)->gnutls_state);
       XPROCESS (proc)->gnutls_state = NULL;
       if (GNUTLS_INITSTAGE (proc) >= GNUTLS_STAGE_INIT)
        GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_INIT - 1;
@@ -596,7 +699,8 @@ See also `gnutls-boot'.  */)
 DEFUN ("gnutls-errorp", Fgnutls_errorp, Sgnutls_errorp, 1, 1, 0,
        doc: /* Return t if ERROR indicates a GnuTLS problem.
 ERROR is an integer or a symbol with an integer `gnutls-code' property.
-usage: (gnutls-errorp ERROR)  */)
+usage: (gnutls-errorp ERROR)  */
+       attributes: const)
   (Lisp_Object err)
 {
   if (EQ (err, Qt)) return Qnil;
@@ -605,9 +709,9 @@ usage: (gnutls-errorp ERROR)  */)
 }
 
 DEFUN ("gnutls-error-fatalp", Fgnutls_error_fatalp, Sgnutls_error_fatalp, 1, 
1, 0,
-       doc: /* Check if ERROR is fatal.
+       doc: /* Return non-nil if ERROR is fatal.
 ERROR is an integer or a symbol with an integer `gnutls-code' property.
-usage: (gnutls-error-fatalp ERROR)  */)
+Usage: (gnutls-error-fatalp ERROR)  */)
   (Lisp_Object err)
 {
   Lisp_Object code;
@@ -630,7 +734,7 @@ usage: (gnutls-error-fatalp ERROR)  */)
   if (! TYPE_RANGED_INTEGERP (int, err))
     error ("Not an error symbol or code");
 
-  if (0 == fn_gnutls_error_is_fatal (XINT (err)))
+  if (0 == gnutls_error_is_fatal (XINT (err)))
     return Qnil;
 
   return Qt;
@@ -662,7 +766,7 @@ usage: (gnutls-error-string ERROR)  */)
   if (! TYPE_RANGED_INTEGERP (int, err))
     return build_string ("Not an error symbol or code");
 
-  return build_string (fn_gnutls_strerror (XINT (err)));
+  return build_string (gnutls_strerror (XINT (err)));
 }
 
 DEFUN ("gnutls-deinit", Fgnutls_deinit, Sgnutls_deinit, 1, 1, 0,
@@ -673,49 +777,368 @@ See also `gnutls-init'.  */)
   return emacs_gnutls_deinit (proc);
 }
 
-DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0,
-       doc: /* Return t if GnuTLS is available in this instance of Emacs.  */)
-     (void)
+static Lisp_Object
+gnutls_hex_string (unsigned char *buf, ptrdiff_t buf_size, const char *prefix)
 {
-#ifdef WINDOWSNT
-  Lisp_Object found = Fassq (Qgnutls_dll, Vlibrary_cache);
-  if (CONSP (found))
-    return XCDR (found);
-  else
+  ptrdiff_t prefix_length = strlen (prefix);
+  if ((STRING_BYTES_BOUND - prefix_length) / 3 < buf_size)
+    string_overflow ();
+  Lisp_Object ret = make_uninit_string (prefix_length + 3 * buf_size
+                                       - (buf_size != 0));
+  char *string = SSDATA (ret);
+  strcpy (string, prefix);
+
+  for (ptrdiff_t i = 0; i < buf_size; i++)
+    sprintf (string + i * 3 + prefix_length,
+            i == buf_size - 1 ? "%02x" : "%02x:",
+            buf[i]);
+
+  return ret;
+}
+
+static Lisp_Object
+gnutls_certificate_details (gnutls_x509_crt_t cert)
+{
+  Lisp_Object res = Qnil;
+  int err;
+  size_t buf_size;
+
+  /* Version. */
+  {
+    int version = gnutls_x509_crt_get_version (cert);
+    check_memory_full (version);
+    if (version >= GNUTLS_E_SUCCESS)
+      res = nconc2 (res, list2 (intern (":version"),
+                               make_number (version)));
+  }
+
+  /* Serial. */
+  buf_size = 0;
+  err = gnutls_x509_crt_get_serial (cert, NULL, &buf_size);
+  check_memory_full (err);
+  if (err == GNUTLS_E_SHORT_MEMORY_BUFFER)
     {
-      Lisp_Object status;
-      status = init_gnutls_functions () ? Qt : Qnil;
-      Vlibrary_cache = Fcons (Fcons (Qgnutls_dll, status), Vlibrary_cache);
-      return status;
+      void *serial = xmalloc (buf_size);
+      err = gnutls_x509_crt_get_serial (cert, serial, &buf_size);
+      check_memory_full (err);
+      if (err >= GNUTLS_E_SUCCESS)
+       res = nconc2 (res, list2 (intern (":serial-number"),
+                                 gnutls_hex_string (serial, buf_size, "")));
+      xfree (serial);
+    }
+
+  /* Issuer. */
+  buf_size = 0;
+  err = gnutls_x509_crt_get_issuer_dn (cert, NULL, &buf_size);
+  check_memory_full (err);
+  if (err == GNUTLS_E_SHORT_MEMORY_BUFFER)
+    {
+      char *dn = xmalloc (buf_size);
+      err = gnutls_x509_crt_get_issuer_dn (cert, dn, &buf_size);
+      check_memory_full (err);
+      if (err >= GNUTLS_E_SUCCESS)
+       res = nconc2 (res, list2 (intern (":issuer"),
+                                 make_string (dn, buf_size)));
+      xfree (dn);
+    }
+
+  /* Validity. */
+  {
+    /* Add 1 to the buffer size, since 1900 is added to tm_year and
+       that might add 1 to the year length.  */
+    char buf[INT_STRLEN_BOUND (int) + 1 + sizeof "-12-31"];
+    struct tm t;
+    time_t tim = gnutls_x509_crt_get_activation_time (cert);
+
+    if (gmtime_r (&tim, &t) && strftime (buf, sizeof buf, "%Y-%m-%d", &t))
+      res = nconc2 (res, list2 (intern (":valid-from"), build_string (buf)));
+
+    tim = gnutls_x509_crt_get_expiration_time (cert);
+    if (gmtime_r (&tim, &t) && strftime (buf, sizeof buf, "%Y-%m-%d", &t))
+      res = nconc2 (res, list2 (intern (":valid-to"), build_string (buf)));
+  }
+
+  /* Subject. */
+  buf_size = 0;
+  err = gnutls_x509_crt_get_dn (cert, NULL, &buf_size);
+  check_memory_full (err);
+  if (err == GNUTLS_E_SHORT_MEMORY_BUFFER)
+    {
+      char *dn = xmalloc (buf_size);
+      err = gnutls_x509_crt_get_dn (cert, dn, &buf_size);
+      check_memory_full (err);
+      if (err >= GNUTLS_E_SUCCESS)
+       res = nconc2 (res, list2 (intern (":subject"),
+                                 make_string (dn, buf_size)));
+      xfree (dn);
+    }
+
+  /* Versions older than 2.11 doesn't have these four functions. */
+#if GNUTLS_VERSION_NUMBER >= 0x020b00
+  /* SubjectPublicKeyInfo. */
+  {
+    unsigned int bits;
+
+    err = gnutls_x509_crt_get_pk_algorithm (cert, &bits);
+    check_memory_full (err);
+    if (err >= GNUTLS_E_SUCCESS)
+      {
+       const char *name = gnutls_pk_algorithm_get_name (err);
+       if (name)
+         res = nconc2 (res, list2 (intern (":public-key-algorithm"),
+                                   build_string (name)));
+
+       name = gnutls_sec_param_get_name (gnutls_pk_bits_to_sec_param
+                                         (err, bits));
+       res = nconc2 (res, list2 (intern (":certificate-security-level"),
+                                 build_string (name)));
+      }
+  }
+
+  /* Unique IDs. */
+  buf_size = 0;
+  err = gnutls_x509_crt_get_issuer_unique_id (cert, NULL, &buf_size);
+  check_memory_full (err);
+  if (err == GNUTLS_E_SHORT_MEMORY_BUFFER)
+    {
+      char *buf = xmalloc (buf_size);
+      err = gnutls_x509_crt_get_issuer_unique_id (cert, buf, &buf_size);
+      check_memory_full (err);
+      if (err >= GNUTLS_E_SUCCESS)
+       res = nconc2 (res, list2 (intern (":issuer-unique-id"),
+                                 make_string (buf, buf_size)));
+      xfree (buf);
+    }
+
+  buf_size = 0;
+  err = gnutls_x509_crt_get_subject_unique_id (cert, NULL, &buf_size);
+  check_memory_full (err);
+  if (err == GNUTLS_E_SHORT_MEMORY_BUFFER)
+    {
+      char *buf = xmalloc (buf_size);
+      err = gnutls_x509_crt_get_subject_unique_id (cert, buf, &buf_size);
+      check_memory_full (err);
+      if (err >= GNUTLS_E_SUCCESS)
+       res = nconc2 (res, list2 (intern (":subject-unique-id"),
+                                 make_string (buf, buf_size)));
+      xfree (buf);
     }
-#else
-  return Qt;
 #endif
+
+  /* Signature. */
+  err = gnutls_x509_crt_get_signature_algorithm (cert);
+  check_memory_full (err);
+  if (err >= GNUTLS_E_SUCCESS)
+    {
+      const char *name = gnutls_sign_get_name (err);
+      if (name)
+       res = nconc2 (res, list2 (intern (":signature-algorithm"),
+                                 build_string (name)));
+    }
+
+  /* Public key ID. */
+  buf_size = 0;
+  err = gnutls_x509_crt_get_key_id (cert, 0, NULL, &buf_size);
+  check_memory_full (err);
+  if (err == GNUTLS_E_SHORT_MEMORY_BUFFER)
+    {
+      void *buf = xmalloc (buf_size);
+      err = gnutls_x509_crt_get_key_id (cert, 0, buf, &buf_size);
+      check_memory_full (err);
+      if (err >= GNUTLS_E_SUCCESS)
+       res = nconc2 (res, list2 (intern (":public-key-id"),
+                                 gnutls_hex_string (buf, buf_size, "sha1:")));
+      xfree (buf);
+    }
+
+  /* Certificate fingerprint. */
+  buf_size = 0;
+  err = gnutls_x509_crt_get_fingerprint (cert, GNUTLS_DIG_SHA1,
+                                        NULL, &buf_size);
+  check_memory_full (err);
+  if (err == GNUTLS_E_SHORT_MEMORY_BUFFER)
+    {
+      void *buf = xmalloc (buf_size);
+      err = gnutls_x509_crt_get_fingerprint (cert, GNUTLS_DIG_SHA1,
+                                            buf, &buf_size);
+      check_memory_full (err);
+      if (err >= GNUTLS_E_SUCCESS)
+       res = nconc2 (res, list2 (intern (":certificate-id"),
+                                 gnutls_hex_string (buf, buf_size, "sha1:")));
+      xfree (buf);
+    }
+
+  return res;
 }
 
+DEFUN ("gnutls-peer-status-warning-describe", 
Fgnutls_peer_status_warning_describe, Sgnutls_peer_status_warning_describe, 1, 
1, 0,
+       doc: /* Describe the warning of a GnuTLS peer status from 
`gnutls-peer-status'.  */)
+  (Lisp_Object status_symbol)
+{
+  CHECK_SYMBOL (status_symbol);
+
+  if (EQ (status_symbol, intern (":invalid")))
+    return build_string ("certificate could not be verified");
+
+  if (EQ (status_symbol, intern (":revoked")))
+    return build_string ("certificate was revoked (CRL)");
+
+  if (EQ (status_symbol, intern (":self-signed")))
+    return build_string ("certificate signer was not found (self-signed)");
+
+  if (EQ (status_symbol, intern (":unknown-ca")))
+    return build_string ("the certificate was signed by an unknown "
+                         "and therefore untrusted authority");
+
+  if (EQ (status_symbol, intern (":not-ca")))
+    return build_string ("certificate signer is not a CA");
+
+  if (EQ (status_symbol, intern (":insecure")))
+    return build_string ("certificate was signed with an insecure algorithm");
+
+  if (EQ (status_symbol, intern (":not-activated")))
+    return build_string ("certificate is not yet activated");
+
+  if (EQ (status_symbol, intern (":expired")))
+    return build_string ("certificate has expired");
+
+  if (EQ (status_symbol, intern (":no-host-match")))
+    return build_string ("certificate host does not match hostname");
+
+  return Qnil;
+}
+
+DEFUN ("gnutls-peer-status", Fgnutls_peer_status, Sgnutls_peer_status, 1, 1, 0,
+       doc: /* Describe a GnuTLS PROC peer certificate and any warnings about 
it.
+The return value is a property list with top-level keys :warnings and
+:certificate.  The :warnings entry is a list of symbols you can describe with
+`gnutls-peer-status-warning-describe'. */)
+  (Lisp_Object proc)
+{
+  Lisp_Object warnings = Qnil, result = Qnil;
+  unsigned int verification;
+  gnutls_session_t state;
+
+  CHECK_PROCESS (proc);
+
+  if (GNUTLS_INITSTAGE (proc) < GNUTLS_STAGE_INIT)
+    return Qnil;
+
+  /* Then collect any warnings already computed by the handshake. */
+  verification = XPROCESS (proc)->gnutls_peer_verification;
+
+  if (verification & GNUTLS_CERT_INVALID)
+    warnings = Fcons (intern (":invalid"), warnings);
+
+  if (verification & GNUTLS_CERT_REVOKED)
+    warnings = Fcons (intern (":revoked"), warnings);
+
+  if (verification & GNUTLS_CERT_SIGNER_NOT_FOUND)
+    warnings = Fcons (intern (":unknown-ca"), warnings);
+
+  if (verification & GNUTLS_CERT_SIGNER_NOT_CA)
+    warnings = Fcons (intern (":not-ca"), warnings);
+
+  if (verification & GNUTLS_CERT_INSECURE_ALGORITHM)
+    warnings = Fcons (intern (":insecure"), warnings);
+
+  if (verification & GNUTLS_CERT_NOT_ACTIVATED)
+    warnings = Fcons (intern (":not-activated"), warnings);
+
+  if (verification & GNUTLS_CERT_EXPIRED)
+    warnings = Fcons (intern (":expired"), warnings);
+
+  if (XPROCESS (proc)->gnutls_extra_peer_verification &
+      CERTIFICATE_NOT_MATCHING)
+    warnings = Fcons (intern (":no-host-match"), warnings);
+
+  /* This could get called in the INIT stage, when the certificate is
+     not yet set. */
+  if (XPROCESS (proc)->gnutls_certificate != NULL &&
+      gnutls_x509_crt_check_issuer(XPROCESS (proc)->gnutls_certificate,
+                                   XPROCESS (proc)->gnutls_certificate))
+    warnings = Fcons (intern (":self-signed"), warnings);
+
+  if (!NILP (warnings))
+    result = list2 (intern (":warnings"), warnings);
+
+  /* This could get called in the INIT stage, when the certificate is
+     not yet set. */
+  if (XPROCESS (proc)->gnutls_certificate != NULL)
+    result = nconc2 (result, list2
+                     (intern (":certificate"),
+                      gnutls_certificate_details (XPROCESS 
(proc)->gnutls_certificate)));
+
+  state = XPROCESS (proc)->gnutls_state;
+
+  /* Diffie-Hellman prime bits. */
+  {
+    int bits = gnutls_dh_get_prime_bits (state);
+    check_memory_full (bits);
+    if (bits > 0)
+      result = nconc2 (result, list2 (intern (":diffie-hellman-prime-bits"),
+                                     make_number (bits)));
+  }
+
+  /* Key exchange. */
+  result = nconc2
+    (result, list2 (intern (":key-exchange"),
+                   build_string (gnutls_kx_get_name
+                                 (gnutls_kx_get (state)))));
+
+  /* Protocol name. */
+  result = nconc2
+    (result, list2 (intern (":protocol"),
+                   build_string (gnutls_protocol_get_name
+                                 (gnutls_protocol_get_version (state)))));
+
+  /* Cipher name. */
+  result = nconc2
+    (result, list2 (intern (":cipher"),
+                   build_string (gnutls_cipher_get_name
+                                 (gnutls_cipher_get (state)))));
 
-/* Initializes global GnuTLS state to defaults.
-Call `gnutls-global-deinit' when GnuTLS usage is no longer needed.
-Returns zero on success.  */
+  /* MAC name. */
+  result = nconc2
+    (result, list2 (intern (":mac"),
+                   build_string (gnutls_mac_get_name
+                                 (gnutls_mac_get (state)))));
+
+
+  return result;
+}
+
+/* Initialize global GnuTLS state to defaults.
+   Call `gnutls-global-deinit' when GnuTLS usage is no longer needed.
+   Return zero on success.  */
 static Lisp_Object
 emacs_gnutls_global_init (void)
 {
   int ret = GNUTLS_E_SUCCESS;
 
   if (!gnutls_global_initialized)
-    {
-      fn_gnutls_global_set_mem_functions (xmalloc, xmalloc, NULL,
-                                         xrealloc, xfree);
-      ret = fn_gnutls_global_init ();
-    }
+    ret = gnutls_global_init ();
+
   gnutls_global_initialized = 1;
 
   return gnutls_make_error (ret);
 }
 
+static bool
+gnutls_ip_address_p (char *string)
+{
+  char c;
+
+  while ((c = *string++) != 0)
+    if (! ((c == '.' || c == ':' || (c >= '0' && c <= '9'))))
+      return false;
+
+  return true;
+}
+
 #if 0
-/* Deinitializes global GnuTLS state.
-See also `gnutls-global-init'.  */
+/* Deinitialize global GnuTLS state.
+   See also `gnutls-global-init'.  */
 static Lisp_Object
 emacs_gnutls_global_deinit (void)
 {
@@ -806,6 +1229,7 @@ one trustfile (usually a CA bundle).  */)
   Lisp_Object hostname;
   Lisp_Object verify_error;
   Lisp_Object prime_bits;
+  Lisp_Object warnings;
 
   CHECK_PROCESS (proc);
   CHECK_SYMBOL (type);
@@ -843,16 +1267,18 @@ one trustfile (usually a CA bundle).  */)
 
   if (TYPE_RANGED_INTEGERP (int, loglevel))
     {
-      fn_gnutls_global_set_log_function (gnutls_log_function);
+      gnutls_global_set_log_function (gnutls_log_function);
 #ifdef HAVE_GNUTLS3
-      fn_gnutls_global_set_audit_log_function (gnutls_audit_log_function);
+      gnutls_global_set_audit_log_function (gnutls_audit_log_function);
 #endif
-      fn_gnutls_global_set_log_level (XINT (loglevel));
+      gnutls_global_set_log_level (XINT (loglevel));
       max_log_level = XINT (loglevel);
       XPROCESS (proc)->gnutls_log_level = max_log_level;
     }
 
-  /* always initialize globals.  */
+  GNUTLS_LOG2 (1, max_log_level, "connecting to host:", c_hostname);
+
+  /* Always initialize globals.  */
   global_init = emacs_gnutls_global_init ();
   if (! NILP (Fgnutls_errorp (global_init)))
     return global_init;
@@ -875,7 +1301,7 @@ one trustfile (usually a CA bundle).  */)
       unsigned int gnutls_verify_flags = GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT;
 
       GNUTLS_LOG (2, max_log_level, "allocating x509 credentials");
-      fn_gnutls_certificate_allocate_credentials (&x509_cred);
+      check_memory_full (gnutls_certificate_allocate_credentials (&x509_cred));
       XPROCESS (proc)->gnutls_x509_cred = x509_cred;
 
       verify_flags = Fplist_get (proplist, QCgnutls_bootprop_verify_flags);
@@ -889,12 +1315,12 @@ one trustfile (usually a CA bundle).  */)
       else
        GNUTLS_LOG (2, max_log_level, "ignoring invalid verify-flags");
 
-      fn_gnutls_certificate_set_verify_flags (x509_cred, gnutls_verify_flags);
+      gnutls_certificate_set_verify_flags (x509_cred, gnutls_verify_flags);
     }
   else /* Qgnutls_anon: */
     {
       GNUTLS_LOG (2, max_log_level, "allocating anon credentials");
-      fn_gnutls_anon_allocate_client_credentials (&anon_cred);
+      check_memory_full (gnutls_anon_allocate_client_credentials (&anon_cred));
       XPROCESS (proc)->gnutls_anon_cred = anon_cred;
     }
 
@@ -906,6 +1332,17 @@ one trustfile (usually a CA bundle).  */)
       int file_format = GNUTLS_X509_FMT_PEM;
       Lisp_Object tail;
 
+#if GNUTLS_VERSION_MAJOR +                                     \
+  (GNUTLS_VERSION_MINOR > 0 || GNUTLS_VERSION_PATCH >= 20) > 3
+      ret = gnutls_certificate_set_x509_system_trust (x509_cred);
+      if (ret < GNUTLS_E_SUCCESS)
+       {
+         check_memory_full (ret);
+         GNUTLS_LOG2i (4, max_log_level,
+                       "setting system trust failed with code ", ret);
+       }
+#endif
+
       for (tail = trustfiles; CONSP (tail); tail = XCDR (tail))
        {
          Lisp_Object trustfile = XCAR (tail);
@@ -920,7 +1357,7 @@ one trustfile (usually a CA bundle).  */)
                 name using the current ANSI codepage.  */
              trustfile = ansi_encode_filename (trustfile);
 #endif
-             ret = fn_gnutls_certificate_set_x509_trust_file
+             ret = gnutls_certificate_set_x509_trust_file
                (x509_cred,
                 SSDATA (trustfile),
                 file_format);
@@ -946,7 +1383,7 @@ one trustfile (usually a CA bundle).  */)
 #ifdef WINDOWSNT
              crlfile = ansi_encode_filename (crlfile);
 #endif
-             ret = fn_gnutls_certificate_set_x509_crl_file
+             ret = gnutls_certificate_set_x509_crl_file
                (x509_cred, SSDATA (crlfile), file_format);
 
              if (ret < GNUTLS_E_SUCCESS)
@@ -975,7 +1412,7 @@ one trustfile (usually a CA bundle).  */)
              keyfile = ansi_encode_filename (keyfile);
              certfile = ansi_encode_filename (certfile);
 #endif
-             ret = fn_gnutls_certificate_set_x509_key_file
+             ret = gnutls_certificate_set_x509_key_file
                (x509_cred, SSDATA (certfile), SSDATA (keyfile), file_format);
 
              if (ret < GNUTLS_E_SUCCESS)
@@ -997,7 +1434,7 @@ one trustfile (usually a CA bundle).  */)
   /* Call gnutls_init here: */
 
   GNUTLS_LOG (1, max_log_level, "gnutls_init");
-  ret = fn_gnutls_init (&state, GNUTLS_CLIENT);
+  ret = gnutls_init (&state, GNUTLS_CLIENT);
   XPROCESS (proc)->gnutls_state = state;
   if (ret < GNUTLS_E_SUCCESS)
     return gnutls_make_error (ret);
@@ -1016,23 +1453,29 @@ one trustfile (usually a CA bundle).  */)
     }
 
   GNUTLS_LOG (1, max_log_level, "setting the priority string");
-  ret = fn_gnutls_priority_set_direct (state,
-                                      priority_string_ptr,
-                                      NULL);
+  ret = gnutls_priority_set_direct (state, priority_string_ptr, NULL);
   if (ret < GNUTLS_E_SUCCESS)
     return gnutls_make_error (ret);
 
   GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_PRIORITY;
 
   if (INTEGERP (prime_bits))
-    fn_gnutls_dh_set_prime_bits (state, XUINT (prime_bits));
+    gnutls_dh_set_prime_bits (state, XUINT (prime_bits));
 
   ret = EQ (type, Qgnutls_x509pki)
-    ? fn_gnutls_credentials_set (state, GNUTLS_CRD_CERTIFICATE, x509_cred)
-    : fn_gnutls_credentials_set (state, GNUTLS_CRD_ANON, anon_cred);
+    ? gnutls_credentials_set (state, GNUTLS_CRD_CERTIFICATE, x509_cred)
+    : gnutls_credentials_set (state, GNUTLS_CRD_ANON, anon_cred);
   if (ret < GNUTLS_E_SUCCESS)
     return gnutls_make_error (ret);
 
+  if (!gnutls_ip_address_p (c_hostname))
+    {
+      ret = gnutls_server_name_set (state, GNUTLS_NAME_DNS, c_hostname,
+                                   strlen (c_hostname));
+      if (ret < GNUTLS_E_SUCCESS)
+       return gnutls_make_error (ret);
+    }
+
   GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_CRED_SET;
   ret = emacs_gnutls_handshake (XPROCESS (proc));
   if (ret < GNUTLS_E_SUCCESS)
@@ -1042,39 +1485,26 @@ one trustfile (usually a CA bundle).  */)
      
http://www.gnu.org/software/gnutls/manual/html_node/Verifying-peer_0027s-certificate.html.
      The peer should present at least one certificate in the chain; do a
      check of the certificate's hostname with
-     gnutls_x509_crt_check_hostname() against :hostname.  */
+     gnutls_x509_crt_check_hostname against :hostname.  */
 
-  ret = fn_gnutls_certificate_verify_peers2 (state, &peer_verification);
+  ret = gnutls_certificate_verify_peers2 (state, &peer_verification);
   if (ret < GNUTLS_E_SUCCESS)
     return gnutls_make_error (ret);
 
-  if (XINT (loglevel) > 0 && peer_verification & GNUTLS_CERT_INVALID)
-    message ("%s certificate could not be verified.", c_hostname);
-
-  if (peer_verification & GNUTLS_CERT_REVOKED)
-    GNUTLS_LOG2 (1, max_log_level, "certificate was revoked (CRL):",
-                c_hostname);
+  XPROCESS (proc)->gnutls_peer_verification = peer_verification;
 
-  if (peer_verification & GNUTLS_CERT_SIGNER_NOT_FOUND)
-    GNUTLS_LOG2 (1, max_log_level, "certificate signer was not found:",
-                c_hostname);
-
-  if (peer_verification & GNUTLS_CERT_SIGNER_NOT_CA)
-    GNUTLS_LOG2 (1, max_log_level, "certificate signer is not a CA:",
-                c_hostname);
-
-  if (peer_verification & GNUTLS_CERT_INSECURE_ALGORITHM)
-    GNUTLS_LOG2 (1, max_log_level,
-                "certificate was signed with an insecure algorithm:",
-                c_hostname);
-
-  if (peer_verification & GNUTLS_CERT_NOT_ACTIVATED)
-    GNUTLS_LOG2 (1, max_log_level, "certificate is not yet activated:",
-                c_hostname);
-
-  if (peer_verification & GNUTLS_CERT_EXPIRED)
-    GNUTLS_LOG2 (1, max_log_level, "certificate has expired:",
-                c_hostname);
+  warnings = Fplist_get (Fgnutls_peer_status (proc), intern (":warnings"));
+  if (!NILP (warnings))
+    {
+      Lisp_Object tail;
+      for (tail = warnings; CONSP (tail); tail = XCDR (tail))
+        {
+          Lisp_Object warning = XCAR (tail);
+          Lisp_Object message = Fgnutls_peer_status_warning_describe (warning);
+          if (!NILP (message))
+            GNUTLS_LOG2 (1, max_log_level, "verification:", SSDATA (message));
+        }
+    }
 
   if (peer_verification != 0)
     {
@@ -1095,43 +1525,50 @@ one trustfile (usually a CA bundle).  */)
   /* Up to here the process is the same for X.509 certificates and
      OpenPGP keys.  From now on X.509 certificates are assumed.  This
      can be easily extended to work with openpgp keys as well.  */
-  if (fn_gnutls_certificate_type_get (state) == GNUTLS_CRT_X509)
+  if (gnutls_certificate_type_get (state) == GNUTLS_CRT_X509)
     {
       gnutls_x509_crt_t gnutls_verify_cert;
       const gnutls_datum_t *gnutls_verify_cert_list;
       unsigned int gnutls_verify_cert_list_size;
 
-      ret = fn_gnutls_x509_crt_init (&gnutls_verify_cert);
+      ret = gnutls_x509_crt_init (&gnutls_verify_cert);
       if (ret < GNUTLS_E_SUCCESS)
        return gnutls_make_error (ret);
 
       gnutls_verify_cert_list =
-       fn_gnutls_certificate_get_peers (state, &gnutls_verify_cert_list_size);
+       gnutls_certificate_get_peers (state, &gnutls_verify_cert_list_size);
 
       if (gnutls_verify_cert_list == NULL)
        {
-         fn_gnutls_x509_crt_deinit (gnutls_verify_cert);
+         gnutls_x509_crt_deinit (gnutls_verify_cert);
          emacs_gnutls_deinit (proc);
          error ("No x509 certificate was found\n");
        }
 
       /* We only check the first certificate in the given chain.  */
-      ret = fn_gnutls_x509_crt_import (gnutls_verify_cert,
+      ret = gnutls_x509_crt_import (gnutls_verify_cert,
                                       &gnutls_verify_cert_list[0],
                                       GNUTLS_X509_FMT_DER);
 
       if (ret < GNUTLS_E_SUCCESS)
        {
-         fn_gnutls_x509_crt_deinit (gnutls_verify_cert);
+         gnutls_x509_crt_deinit (gnutls_verify_cert);
          return gnutls_make_error (ret);
        }
 
-      if (!fn_gnutls_x509_crt_check_hostname (gnutls_verify_cert, c_hostname))
+      XPROCESS (proc)->gnutls_certificate = gnutls_verify_cert;
+
+      int err = gnutls_x509_crt_check_hostname (gnutls_verify_cert,
+                                               c_hostname);
+      check_memory_full (err);
+      if (!err)
        {
+         XPROCESS (proc)->gnutls_extra_peer_verification |=
+           CERTIFICATE_NOT_MATCHING;
           if (verify_error_all
               || !NILP (Fmember (QCgnutls_bootprop_hostname, verify_error)))
             {
-             fn_gnutls_x509_crt_deinit (gnutls_verify_cert);
+             gnutls_x509_crt_deinit (gnutls_verify_cert);
              emacs_gnutls_deinit (proc);
              error ("The x509 certificate does not match \"%s\"", c_hostname);
             }
@@ -1141,7 +1578,6 @@ one trustfile (usually a CA bundle).  */)
                            c_hostname);
            }
        }
-      fn_gnutls_x509_crt_deinit (gnutls_verify_cert);
     }
 
   /* Set this flag only if the whole initialization succeeded.  */
@@ -1173,28 +1609,57 @@ This function may also return `gnutls-e-again', or
 
   state = XPROCESS (proc)->gnutls_state;
 
-  ret = fn_gnutls_bye (state,
-                      NILP (cont) ? GNUTLS_SHUT_RDWR : GNUTLS_SHUT_WR);
+  gnutls_x509_crt_deinit (XPROCESS (proc)->gnutls_certificate);
+
+  ret = gnutls_bye (state, NILP (cont) ? GNUTLS_SHUT_RDWR : GNUTLS_SHUT_WR);
 
   return gnutls_make_error (ret);
 }
 
+#endif /* HAVE_GNUTLS */
+
+DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0,
+       doc: /* Return t if GnuTLS is available in this instance of Emacs.  */)
+     (void)
+{
+#ifdef HAVE_GNUTLS
+# ifdef WINDOWSNT
+  Lisp_Object found = Fassq (Qgnutls_dll, Vlibrary_cache);
+  if (CONSP (found))
+    return XCDR (found);
+  else
+    {
+      Lisp_Object status;
+      status = init_gnutls_functions () ? Qt : Qnil;
+      Vlibrary_cache = Fcons (Fcons (Qgnutls_dll, status), Vlibrary_cache);
+      return status;
+    }
+# else /* !WINDOWSNT */
+  return Qt;
+# endif         /* !WINDOWSNT */
+#else  /* !HAVE_GNUTLS */
+  return Qnil;
+#endif /* !HAVE_GNUTLS */
+}
+
 void
 syms_of_gnutls (void)
 {
+#ifdef HAVE_GNUTLS
   gnutls_global_initialized = 0;
 
   DEFSYM (Qgnutls_dll, "gnutls");
   DEFSYM (Qgnutls_code, "gnutls-code");
   DEFSYM (Qgnutls_anon, "gnutls-anon");
   DEFSYM (Qgnutls_x509pki, "gnutls-x509pki");
+
+  /* The following are for the property list of 'gnutls-boot'.  */
   DEFSYM (QCgnutls_bootprop_hostname, ":hostname");
   DEFSYM (QCgnutls_bootprop_priority, ":priority");
   DEFSYM (QCgnutls_bootprop_trustfiles, ":trustfiles");
   DEFSYM (QCgnutls_bootprop_keylist, ":keylist");
   DEFSYM (QCgnutls_bootprop_crlfiles, ":crlfiles");
   DEFSYM (QCgnutls_bootprop_callbacks, ":callbacks");
-  DEFSYM (QCgnutls_bootprop_callbacks_verify, "verify");
   DEFSYM (QCgnutls_bootprop_min_prime_bits, ":min-prime-bits");
   DEFSYM (QCgnutls_bootprop_loglevel, ":loglevel");
   DEFSYM (QCgnutls_bootprop_verify_flags, ":verify-flags");
@@ -1223,7 +1688,8 @@ syms_of_gnutls (void)
   defsubr (&Sgnutls_boot);
   defsubr (&Sgnutls_deinit);
   defsubr (&Sgnutls_bye);
-  defsubr (&Sgnutls_available_p);
+  defsubr (&Sgnutls_peer_status);
+  defsubr (&Sgnutls_peer_status_warning_describe);
 
   DEFVAR_INT ("gnutls-log-level", global_gnutls_log_level,
              doc: /* Logging level used by the GnuTLS functions.
@@ -1231,6 +1697,8 @@ Set this larger than 0 to get debug output in the 
*Messages* buffer.
 1 is for important messages, 2 is for debug data, and higher numbers
 are as per the GnuTLS logging conventions.  */);
   global_gnutls_log_level = 0;
-}
 
-#endif /* HAVE_GNUTLS */
+#endif /* HAVE_GNUTLS */
+
+  defsubr (&Sgnutls_available_p);
+}
diff --git a/src/gnutls.h b/src/gnutls.h
index 8a667c0..fd69682 100644
--- a/src/gnutls.h
+++ b/src/gnutls.h
@@ -1,5 +1,5 @@
 /* GnuTLS glue for GNU Emacs.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -82,8 +82,8 @@ extern void emacs_gnutls_transport_set_errno 
(gnutls_session_t state, int err);
 #endif
 extern Lisp_Object emacs_gnutls_deinit (Lisp_Object);
 
-extern void syms_of_gnutls (void);
-
 #endif
 
+extern void syms_of_gnutls (void);
+
 #endif
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 6db8858..21f3cb1 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -1,6 +1,6 @@
 /* Functions for creating and updating GTK widgets.
 
-Copyright (C) 2003-2014 Free Software Foundation, Inc.
+Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -79,6 +79,20 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #define remove_submenu(w) gtk_menu_item_remove_submenu ((w))
 #endif
 
+#if ! GTK_CHECK_VERSION (2, 14, 0)
+#define gtk_adjustment_configure(adj, xvalue, xlower,            \
+                                 xupper, xstep_increment,        \
+                                 xpage_increment, xpagesize)     \
+  do {                                                           \
+    adj->lower = xlower;                                         \
+    adj->upper = xupper;                                         \
+    adj->page_size = xpagesize;                                  \
+    gtk_adjustment_set_value (adj, xvalue);                      \
+    adj->page_increment = xpage_increment;                       \
+    adj->step_increment = xstep_increment;                       \
+  } while (0)
+#endif /* < Gtk+ 2.14 */
+
 #ifdef HAVE_FREETYPE
 #if GTK_CHECK_VERSION (3, 2, 0)
 #define USE_NEW_GTK_FONT_CHOOSER 1
@@ -940,7 +954,7 @@ xg_frame_set_char_size (struct frame *f, int width, int 
height)
       x_wait_for_event (f, ConfigureNotify);
     }
   else
-    adjust_frame_size (f, -1, -1, 5, 0, Qnil);
+    adjust_frame_size (f, -1, -1, 5, 0, Qxg_frame_set_char_size);
 }
 
 /* Handle height/width changes (i.e. add/remove/move menu/toolbar).
@@ -1825,12 +1839,12 @@ xg_get_file_with_chooser (struct frame *f,
 
   if (x_gtk_file_dialog_help_text)
     {
-      msgbuf[0] = '\0';
+      char *z = msgbuf;
       /* Gtk+ 2.10 has the file name text entry box integrated in the dialog.
          Show the C-l help text only for versions < 2.10.  */
       if (gtk_check_version (2, 10, 0) && action != 
GTK_FILE_CHOOSER_ACTION_SAVE)
-        strcat (msgbuf, "\nType C-l to display a file name text entry box.\n");
-      strcat (msgbuf, "\nIf you don't like this file selector, use the "
+        z = stpcpy (z, "\nType C-l to display a file name text entry box.\n");
+      strcpy (z, "\nIf you don't like this file selector, use the "
               "corresponding\nkey binding or customize "
               "use-file-dialog to turn it off.");
 
@@ -2058,28 +2072,17 @@ xg_get_font (struct frame *f, const char *default_name)
 
       if (desc)
        {
-         Lisp_Object args[10];
          const char *name   = pango_font_description_get_family (desc);
          gint        size   = pango_font_description_get_size (desc);
          PangoWeight weight = pango_font_description_get_weight (desc);
          PangoStyle  style  = pango_font_description_get_style (desc);
 
-         args[0] = QCname;
-         args[1] = build_string (name);
-
-         args[2] = QCsize;
-         args[3] = make_float (pango_units_to_double (size));
-
-         args[4] = QCweight;
-         args[5] = XG_WEIGHT_TO_SYMBOL (weight);
-
-         args[6] = QCslant;
-         args[7] = XG_STYLE_TO_SYMBOL (style);
-
-         args[8] = QCtype;
-         args[9] = Qxft;
-
-         font = Ffont_spec (8, args);
+         font = CALLN (Ffont_spec,
+                       QCname, build_string (name),
+                       QCsize, make_float (pango_units_to_double (size)),
+                       QCweight, XG_WEIGHT_TO_SYMBOL (weight),
+                       QCslant, XG_STYLE_TO_SYMBOL (style),
+                       QCtype, Qxft);
 
          pango_font_description_free (desc);
          dupstring (&x_last_font_name, name);
@@ -3938,18 +3941,9 @@ xg_set_toolkit_horizontal_scroll_bar_thumb (struct 
scroll_bar *bar,
 
       block_input ();
       adj = gtk_range_get_adjustment (GTK_RANGE (wscroll));
-#if GTK_CHECK_VERSION (2, 3, 16)
       gtk_adjustment_configure (adj, (gdouble) value, (gdouble) lower,
                                (gdouble) upper, (gdouble) step_increment,
                                (gdouble) page_increment, (gdouble) pagesize);
-#else
-      gtk_adjustment_set_lower (adj, (gdouble) lower);
-      gtk_adjustment_set_upper (adj, (gdouble) upper);
-      gtk_adjustment_set_page_size (adj, (gdouble) pagesize);
-      gtk_adjustment_set_value (adj, (gdouble) value);
-      gtk_adjustment_set_page_increment (adj, (gdouble) page_increment);
-      gtk_adjustment_set_step_increment (adj, (gdouble) step_increment);
-#endif
       gtk_adjustment_changed (adj);
       unblock_input ();
     }
diff --git a/src/gtkutil.h b/src/gtkutil.h
index 594c7a7..0ac49ca 100644
--- a/src/gtkutil.h
+++ b/src/gtkutil.h
@@ -1,6 +1,6 @@
 /* Definitions and headers for GTK widgets.
 
-Copyright (C) 2003-2014 Free Software Foundation, Inc.
+Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -78,7 +78,7 @@ typedef struct xg_menu_item_cb_data_
 
 } xg_menu_item_cb_data;
 
-extern bool xg_uses_old_file_dialog (void) ATTRIBUTE_CONST;
+extern bool xg_uses_old_file_dialog (void);
 
 extern char *xg_get_file_name (struct frame *f,
                                char *prompt,
diff --git a/src/image.c b/src/image.c
index 1a2c0e2..df299bb 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1,6 +1,6 @@
 /* Functions for image support on window system.
 
-Copyright (C) 1989, 1992-2014 Free Software Foundation, Inc.
+Copyright (C) 1989, 1992-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -33,6 +33,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "lisp.h"
 #include "frame.h"
 #include "window.h"
+#include "buffer.h"
 #include "dispextern.h"
 #include "blockinput.h"
 #include "systime.h"
@@ -85,12 +86,6 @@ typedef struct w32_bitmap_record Bitmap_Record;
 #define x_defined_color w32_defined_color
 #define DefaultDepthOfScreen(screen) (one_w32_display_info.n_cbits)
 
-/* Versions of libpng, libgif, and libjpeg that we were compiled with,
-   or -1 if no PNG/GIF support was compiled in.  This is tested by
-   w32-win.el to correctly set up the alist used to search for the
-   respective image libraries.  */
-Lisp_Object Qlibpng_version, Qlibgif_version, Qlibjpeg_version;
-
 #endif /* HAVE_NTGUI */
 
 #ifdef HAVE_NS
@@ -109,11 +104,6 @@ typedef struct ns_bitmap_record Bitmap_Record;
 #define DefaultDepthOfScreen(screen) x_display_list->n_planes
 #endif /* HAVE_NS */
 
-
-/* The symbol `postscript' identifying images of this type.  */
-
-static Lisp_Object Qpostscript;
-
 static void x_disable_image (struct frame *, struct image *);
 static void x_edge_detection (struct frame *, struct image *, Lisp_Object,
                               Lisp_Object);
@@ -125,8 +115,6 @@ static void free_color_table (void);
 static unsigned long *colors_in_color_table (int *n);
 #endif
 
-static Lisp_Object QCmax_width, QCmax_height;
-
 /* Code to deal with bitmaps.  Bitmaps are referenced by their bitmap
    id, which is just an int that this section returns.  Bitmaps are
    reference counted so they can be shared among frames.
@@ -536,24 +524,6 @@ x_create_bitmap_mask (struct frame *f, ptrdiff_t id)
 
 static struct image_type *image_types;
 
-/* The symbol `xbm' which is used as the type symbol for XBM images.  */
-
-static Lisp_Object Qxbm;
-
-/* Keywords.  */
-
-Lisp_Object QCascent, QCmargin, QCrelief;
-Lisp_Object QCconversion;
-static Lisp_Object QCheuristic_mask;
-static Lisp_Object QCcolor_symbols;
-static Lisp_Object QCindex, QCmatrix, QCcolor_adjustment, QCmask, QCgeometry;
-static Lisp_Object QCcrop, QCrotation;
-
-/* Other symbols.  */
-
-static Lisp_Object Qcount, Qextension_data, Qdelay;
-static Lisp_Object Qlaplace, Qemboss, Qedge_detection, Qheuristic;
-
 /* Forward function prototypes.  */
 
 static struct image_type *lookup_image_type (Lisp_Object);
@@ -578,27 +548,29 @@ static struct image_type *
 define_image_type (struct image_type *type)
 {
   struct image_type *p = NULL;
-  Lisp_Object target_type = *type->type;
-  bool type_valid = 1;
+  int new_type = type->type;
+  bool type_valid = true;
 
   block_input ();
 
   for (p = image_types; p; p = p->next)
-    if (EQ (*p->type, target_type))
+    if (p->type == new_type)
       goto done;
 
   if (type->init)
     {
 #if defined HAVE_NTGUI && defined WINDOWSNT
       /* If we failed to load the library before, don't try again.  */
-      Lisp_Object tested = Fassq (target_type, Vlibrary_cache);
+      Lisp_Object tested = Fassq (builtin_lisp_symbol (new_type),
+                                 Vlibrary_cache);
       if (CONSP (tested) && NILP (XCDR (tested)))
-       type_valid = 0;
+       type_valid = false;
       else
 #endif
        {
          type_valid = type->init ();
-         CACHE_IMAGE_TYPE (target_type, type_valid ? Qt : Qnil);
+         CACHE_IMAGE_TYPE (builtin_lisp_symbol (new_type),
+                           type_valid ? Qt : Qnil);
        }
     }
 
@@ -1776,7 +1748,7 @@ lookup_image (struct frame *f, Lisp_Object spec)
 
          /* Do image transformations and compute masks, unless we
             don't have the image yet.  */
-         if (!EQ (*img->type->type, Qpostscript))
+         if (!EQ (builtin_lisp_symbol (img->type->type), Qpostscript))
            postprocess_image (f, img);
        }
 
@@ -1858,19 +1830,6 @@ mark_image_cache (struct image_cache *c)
                          X / NS / W32 support code
  ***********************************************************************/
 
-#ifdef WINDOWSNT
-
-/* Macro for defining functions that will be loaded from image DLLs.  */
-#define DEF_IMGLIB_FN(rettype,func,args) static rettype (FAR CDECL 
*fn_##func)args
-
-/* Macro for loading those image functions from the library.  */
-#define LOAD_IMGLIB_FN(lib,func) {                                     \
-    fn_##func = (void *) GetProcAddress (lib, #func);                  \
-    if (!fn_##func) return 0;                                          \
-  }
-
-#endif /* WINDOWSNT */
-
 /* Return true if XIMG's size WIDTH x HEIGHT doesn't break the
    windowing system.
    WIDTH and HEIGHT must both be positive.
@@ -2374,7 +2333,7 @@ static const struct image_keyword xbm_format[XBM_LAST] =
 
 static struct image_type xbm_type =
 {
-  &Qxbm,
+  SYMBOL_INDEX (Qxbm),
   xbm_image_p,
   xbm_load,
   x_clear_image,
@@ -3133,9 +3092,6 @@ static bool xpm_load (struct frame *f, struct image *img);
 #endif /* HAVE_XPM */
 
 #if defined (HAVE_XPM) || defined (HAVE_NS)
-/* The symbol `xpm' identifying XPM-format images.  */
-
-static Lisp_Object Qxpm;
 
 /* Indices of image specification fields in xpm_format, below.  */
 
@@ -3183,7 +3139,7 @@ static bool init_xpm_functions (void);
 
 static struct image_type xpm_type =
 {
-  &Qxpm,
+  SYMBOL_INDEX (Qxpm),
   xpm_image_p,
   xpm_load,
   x_clear_image,
@@ -3376,12 +3332,14 @@ xpm_free_colors (Display *dpy, Colormap cmap, Pixel 
*pixels, int npixels, void *
 
 /* XPM library details.  */
 
-DEF_IMGLIB_FN (void, XpmFreeAttributes, (XpmAttributes *));
-DEF_IMGLIB_FN (int, XpmCreateImageFromBuffer, (Display *, char *, xpm_XImage 
**,
-                                         xpm_XImage **, XpmAttributes *));
-DEF_IMGLIB_FN (int, XpmReadFileToImage, (Display *, char *, xpm_XImage **,
-                                   xpm_XImage **, XpmAttributes *));
-DEF_IMGLIB_FN (void, XImageFree, (xpm_XImage *));
+DEF_DLL_FN (void, XpmFreeAttributes, (XpmAttributes *));
+DEF_DLL_FN (int, XpmCreateImageFromBuffer,
+           (Display *, char *, xpm_XImage **,
+            xpm_XImage **, XpmAttributes *));
+DEF_DLL_FN (int, XpmReadFileToImage,
+           (Display *, char *, xpm_XImage **,
+            xpm_XImage **, XpmAttributes *));
+DEF_DLL_FN (void, XImageFree, (xpm_XImage *));
 
 static bool
 init_xpm_functions (void)
@@ -3391,22 +3349,24 @@ init_xpm_functions (void)
   if (!(library = w32_delayed_load (Qxpm)))
     return 0;
 
-  LOAD_IMGLIB_FN (library, XpmFreeAttributes);
-  LOAD_IMGLIB_FN (library, XpmCreateImageFromBuffer);
-  LOAD_IMGLIB_FN (library, XpmReadFileToImage);
-  LOAD_IMGLIB_FN (library, XImageFree);
+  LOAD_DLL_FN (library, XpmFreeAttributes);
+  LOAD_DLL_FN (library, XpmCreateImageFromBuffer);
+  LOAD_DLL_FN (library, XpmReadFileToImage);
+  LOAD_DLL_FN (library, XImageFree);
   return 1;
 }
 
-#endif /* WINDOWSNT */
+# undef XImageFree
+# undef XpmCreateImageFromBuffer
+# undef XpmFreeAttributes
+# undef XpmReadFileToImage
+
+# define XImageFree fn_XImageFree
+# define XpmCreateImageFromBuffer fn_XpmCreateImageFromBuffer
+# define XpmFreeAttributes fn_XpmFreeAttributes
+# define XpmReadFileToImage fn_XpmReadFileToImage
 
-#if defined HAVE_NTGUI && !defined WINDOWSNT
-/* Glue for code below */
-#define fn_XpmReadFileToImage XpmReadFileToImage
-#define fn_XpmCreateImageFromBuffer XpmCreateImageFromBuffer
-#define fn_XImageFree XImageFree
-#define fn_XpmFreeAttributes XpmFreeAttributes
-#endif /* HAVE_NTGUI && !WINDOWSNT */
+#endif /* WINDOWSNT */
 
 /* Value is true if COLOR_SYMBOLS is a valid color symbols list
    for XPM images.  Such a list must consist of conses whose car and
@@ -3623,9 +3583,9 @@ xpm_load (struct frame *f, struct image *img)
 #endif
       /* XpmReadFileToPixmap is not available in the Windows port of
         libxpm.  But XpmReadFileToImage almost does what we want.  */
-      rc = fn_XpmReadFileToImage (&hdc, SDATA (file),
-                                 &xpm_image, &xpm_mask,
-                                 &attrs);
+      rc = XpmReadFileToImage (&hdc, SDATA (file),
+                              &xpm_image, &xpm_mask,
+                              &attrs);
 #else
       rc = XpmReadFileToImage (FRAME_X_DISPLAY (f), SSDATA (file),
                               &img->ximg, &img->mask_img,
@@ -3647,9 +3607,9 @@ xpm_load (struct frame *f, struct image *img)
 #ifdef HAVE_NTGUI
       /* XpmCreatePixmapFromBuffer is not available in the Windows port
         of libxpm.  But XpmCreateImageFromBuffer almost does what we want.  */
-      rc = fn_XpmCreateImageFromBuffer (&hdc, SDATA (buffer),
-                                       &xpm_image, &xpm_mask,
-                                       &attrs);
+      rc = XpmCreateImageFromBuffer (&hdc, SDATA (buffer),
+                                    &xpm_image, &xpm_mask,
+                                    &attrs);
 #else
       rc = XpmCreateImageFromBuffer (FRAME_X_DISPLAY (f), SSDATA (buffer),
                                     &img->ximg, &img->mask_img,
@@ -3698,7 +3658,7 @@ xpm_load (struct frame *f, struct image *img)
          img->pixmap = xpm_image->bitmap;
          /* XImageFree in libXpm frees XImage struct without destroying
             the bitmap, which is what we want.  */
-         fn_XImageFree (xpm_image);
+         XImageFree (xpm_image);
        }
       if (xpm_mask && xpm_mask->bitmap)
        {
@@ -3712,7 +3672,7 @@ xpm_load (struct frame *f, struct image *img)
          SelectObject (hdc, old_obj);
 
          img->mask = xpm_mask->bitmap;
-         fn_XImageFree (xpm_mask);
+         XImageFree (xpm_mask);
          DeleteDC (hdc);
        }
 
@@ -3736,11 +3696,7 @@ xpm_load (struct frame *f, struct image *img)
       eassert (img->width > 0 && img->height > 0);
 
       /* The call to XpmFreeAttributes below frees attrs.alloc_pixels.  */
-#ifdef HAVE_NTGUI
-      fn_XpmFreeAttributes (&attrs);
-#else
       XpmFreeAttributes (&attrs);
-#endif /* HAVE_NTGUI */
 
 #ifdef HAVE_X_WINDOWS
       /* Maybe fill in the background field while we have ximg handy.  */
@@ -4467,7 +4423,7 @@ lookup_pixel_color (struct frame *f, unsigned long pixel)
       Colormap cmap;
       bool rc;
 
-      if (ct_colors_allocated_max <= ct_colors_allocated)
+      if (ct_colors_allocated >= ct_colors_allocated_max)
        return FRAME_FOREGROUND_PIXEL (f);
 
 #ifdef HAVE_X_WINDOWS
@@ -4598,7 +4554,7 @@ x_to_xcolors (struct frame *f, struct image *img, bool 
rgb_p)
   HGDIOBJ prev;
 #endif /* HAVE_NTGUI */
 
-  if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *colors / img->width < img->height)
+  if (img->height > min (PTRDIFF_MAX, SIZE_MAX) / sizeof *colors / img->width)
     memory_full (SIZE_MAX);
   colors = xmalloc (sizeof *colors * img->width * img->height);
 
@@ -4739,7 +4695,7 @@ x_detect_edges (struct frame *f, struct image *img, int 
*matrix, int color_adjus
 
 #define COLOR(A, X, Y) ((A) + (Y) * img->width + (X))
 
-  if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *new / img->width < img->height)
+  if (img->height > min (PTRDIFF_MAX, SIZE_MAX) / sizeof *new / img->width)
     memory_full (SIZE_MAX);
   new = xmalloc (sizeof *new * img->width * img->height);
 
@@ -5071,10 +5027,6 @@ x_build_heuristic_mask (struct frame *f, struct image 
*img, Lisp_Object how)
 static bool pbm_image_p (Lisp_Object object);
 static bool pbm_load (struct frame *f, struct image *img);
 
-/* The symbol `pbm' identifying images of this type.  */
-
-static Lisp_Object Qpbm;
-
 /* Indices of image specification fields in gs_format, below.  */
 
 enum pbm_keyword_index
@@ -5115,7 +5067,7 @@ static const struct image_keyword pbm_format[PBM_LAST] =
 
 static struct image_type pbm_type =
 {
-  &Qpbm,
+  SYMBOL_INDEX (Qpbm),
   pbm_image_p,
   pbm_load,
   x_clear_image,
@@ -5458,10 +5410,6 @@ pbm_load (struct frame *f, struct image *img)
 static bool png_image_p (Lisp_Object object);
 static bool png_load (struct frame *f, struct image *img);
 
-/* The symbol `png' identifying images of this type.  */
-
-static Lisp_Object Qpng;
-
 /* Indices of image specification fields in png_format, below.  */
 
 enum png_keyword_index
@@ -5506,7 +5454,7 @@ static bool init_png_functions (void);
 
 static struct image_type png_type =
 {
-  &Qpng,
+  SYMBOL_INDEX (Qpng),
   png_image_p,
   png_load,
   x_clear_image,
@@ -5534,39 +5482,42 @@ png_image_p (Lisp_Object object)
 
 #if defined HAVE_PNG && !defined HAVE_NS
 
-#ifdef WINDOWSNT
+# ifdef WINDOWSNT
 /* PNG library details.  */
 
-DEF_IMGLIB_FN (png_voidp, png_get_io_ptr, (png_structp));
-DEF_IMGLIB_FN (int, png_sig_cmp, (png_bytep, png_size_t, png_size_t));
-DEF_IMGLIB_FN (png_structp, png_create_read_struct, (png_const_charp, 
png_voidp,
-                                                    png_error_ptr, 
png_error_ptr));
-DEF_IMGLIB_FN (png_infop, png_create_info_struct, (png_structp));
-DEF_IMGLIB_FN (void, png_destroy_read_struct, (png_structpp, png_infopp, 
png_infopp));
-DEF_IMGLIB_FN (void, png_set_read_fn, (png_structp, png_voidp, png_rw_ptr));
-DEF_IMGLIB_FN (void, png_set_sig_bytes, (png_structp, int));
-DEF_IMGLIB_FN (void, png_read_info, (png_structp, png_infop));
-DEF_IMGLIB_FN (png_uint_32, png_get_IHDR, (png_structp, png_infop,
-                             png_uint_32 *, png_uint_32 *,
-                             int *, int *, int *, int *, int *));
-DEF_IMGLIB_FN (png_uint_32, png_get_valid, (png_structp, png_infop, 
png_uint_32));
-DEF_IMGLIB_FN (void, png_set_strip_16, (png_structp));
-DEF_IMGLIB_FN (void, png_set_expand, (png_structp));
-DEF_IMGLIB_FN (void, png_set_gray_to_rgb, (png_structp));
-DEF_IMGLIB_FN (void, png_set_background, (png_structp, png_color_16p,
-                                   int, int, double));
-DEF_IMGLIB_FN (png_uint_32, png_get_bKGD, (png_structp, png_infop, 
png_color_16p *));
-DEF_IMGLIB_FN (void, png_read_update_info, (png_structp, png_infop));
-DEF_IMGLIB_FN (png_byte, png_get_channels, (png_structp, png_infop));
-DEF_IMGLIB_FN (png_size_t, png_get_rowbytes, (png_structp, png_infop));
-DEF_IMGLIB_FN (void, png_read_image, (png_structp, png_bytepp));
-DEF_IMGLIB_FN (void, png_read_end, (png_structp, png_infop));
-DEF_IMGLIB_FN (void, png_error, (png_structp, png_const_charp));
-
-#if (PNG_LIBPNG_VER >= 10500)
-DEF_IMGLIB_FN (void, png_longjmp, (png_structp, int)) PNG_NORETURN;
-DEF_IMGLIB_FN (jmp_buf *, png_set_longjmp_fn, (png_structp, png_longjmp_ptr, 
size_t));
-#endif /* libpng version >= 1.5 */
+DEF_DLL_FN (png_voidp, png_get_io_ptr, (png_structp));
+DEF_DLL_FN (int, png_sig_cmp, (png_bytep, png_size_t, png_size_t));
+DEF_DLL_FN (png_structp, png_create_read_struct,
+           (png_const_charp, png_voidp, png_error_ptr, png_error_ptr));
+DEF_DLL_FN (png_infop, png_create_info_struct, (png_structp));
+DEF_DLL_FN (void, png_destroy_read_struct,
+           (png_structpp, png_infopp, png_infopp));
+DEF_DLL_FN (void, png_set_read_fn, (png_structp, png_voidp, png_rw_ptr));
+DEF_DLL_FN (void, png_set_sig_bytes, (png_structp, int));
+DEF_DLL_FN (void, png_read_info, (png_structp, png_infop));
+DEF_DLL_FN (png_uint_32, png_get_IHDR,
+           (png_structp, png_infop, png_uint_32 *, png_uint_32 *,
+            int *, int *, int *, int *, int *));
+DEF_DLL_FN (png_uint_32, png_get_valid, (png_structp, png_infop, png_uint_32));
+DEF_DLL_FN (void, png_set_strip_16, (png_structp));
+DEF_DLL_FN (void, png_set_expand, (png_structp));
+DEF_DLL_FN (void, png_set_gray_to_rgb, (png_structp));
+DEF_DLL_FN (void, png_set_background,
+           (png_structp, png_color_16p, int, int, double));
+DEF_DLL_FN (png_uint_32, png_get_bKGD,
+           (png_structp, png_infop, png_color_16p *));
+DEF_DLL_FN (void, png_read_update_info, (png_structp, png_infop));
+DEF_DLL_FN (png_byte, png_get_channels, (png_structp, png_infop));
+DEF_DLL_FN (png_size_t, png_get_rowbytes, (png_structp, png_infop));
+DEF_DLL_FN (void, png_read_image, (png_structp, png_bytepp));
+DEF_DLL_FN (void, png_read_end, (png_structp, png_infop));
+DEF_DLL_FN (void, png_error, (png_structp, png_const_charp));
+
+#  if (PNG_LIBPNG_VER >= 10500)
+DEF_DLL_FN (void, png_longjmp, (png_structp, int)) PNG_NORETURN;
+DEF_DLL_FN (jmp_buf *, png_set_longjmp_fn,
+           (png_structp, png_longjmp_ptr, size_t));
+#  endif /* libpng version >= 1.5 */
 
 static bool
 init_png_functions (void)
@@ -5576,87 +5527,107 @@ init_png_functions (void)
   if (!(library = w32_delayed_load (Qpng)))
     return 0;
 
-  LOAD_IMGLIB_FN (library, png_get_io_ptr);
-  LOAD_IMGLIB_FN (library, png_sig_cmp);
-  LOAD_IMGLIB_FN (library, png_create_read_struct);
-  LOAD_IMGLIB_FN (library, png_create_info_struct);
-  LOAD_IMGLIB_FN (library, png_destroy_read_struct);
-  LOAD_IMGLIB_FN (library, png_set_read_fn);
-  LOAD_IMGLIB_FN (library, png_set_sig_bytes);
-  LOAD_IMGLIB_FN (library, png_read_info);
-  LOAD_IMGLIB_FN (library, png_get_IHDR);
-  LOAD_IMGLIB_FN (library, png_get_valid);
-  LOAD_IMGLIB_FN (library, png_set_strip_16);
-  LOAD_IMGLIB_FN (library, png_set_expand);
-  LOAD_IMGLIB_FN (library, png_set_gray_to_rgb);
-  LOAD_IMGLIB_FN (library, png_set_background);
-  LOAD_IMGLIB_FN (library, png_get_bKGD);
-  LOAD_IMGLIB_FN (library, png_read_update_info);
-  LOAD_IMGLIB_FN (library, png_get_channels);
-  LOAD_IMGLIB_FN (library, png_get_rowbytes);
-  LOAD_IMGLIB_FN (library, png_read_image);
-  LOAD_IMGLIB_FN (library, png_read_end);
-  LOAD_IMGLIB_FN (library, png_error);
-
-#if (PNG_LIBPNG_VER >= 10500)
-  LOAD_IMGLIB_FN (library, png_longjmp);
-  LOAD_IMGLIB_FN (library, png_set_longjmp_fn);
-#endif /* libpng version >= 1.5 */
+  LOAD_DLL_FN (library, png_get_io_ptr);
+  LOAD_DLL_FN (library, png_sig_cmp);
+  LOAD_DLL_FN (library, png_create_read_struct);
+  LOAD_DLL_FN (library, png_create_info_struct);
+  LOAD_DLL_FN (library, png_destroy_read_struct);
+  LOAD_DLL_FN (library, png_set_read_fn);
+  LOAD_DLL_FN (library, png_set_sig_bytes);
+  LOAD_DLL_FN (library, png_read_info);
+  LOAD_DLL_FN (library, png_get_IHDR);
+  LOAD_DLL_FN (library, png_get_valid);
+  LOAD_DLL_FN (library, png_set_strip_16);
+  LOAD_DLL_FN (library, png_set_expand);
+  LOAD_DLL_FN (library, png_set_gray_to_rgb);
+  LOAD_DLL_FN (library, png_set_background);
+  LOAD_DLL_FN (library, png_get_bKGD);
+  LOAD_DLL_FN (library, png_read_update_info);
+  LOAD_DLL_FN (library, png_get_channels);
+  LOAD_DLL_FN (library, png_get_rowbytes);
+  LOAD_DLL_FN (library, png_read_image);
+  LOAD_DLL_FN (library, png_read_end);
+  LOAD_DLL_FN (library, png_error);
+
+#  if (PNG_LIBPNG_VER >= 10500)
+  LOAD_DLL_FN (library, png_longjmp);
+  LOAD_DLL_FN (library, png_set_longjmp_fn);
+#  endif /* libpng version >= 1.5 */
 
   return 1;
 }
-#else
-
-#define fn_png_get_io_ptr              png_get_io_ptr
-#define fn_png_sig_cmp                 png_sig_cmp
-#define fn_png_create_read_struct      png_create_read_struct
-#define fn_png_create_info_struct      png_create_info_struct
-#define fn_png_destroy_read_struct     png_destroy_read_struct
-#define fn_png_set_read_fn             png_set_read_fn
-#define fn_png_set_sig_bytes           png_set_sig_bytes
-#define fn_png_read_info               png_read_info
-#define fn_png_get_IHDR                        png_get_IHDR
-#define fn_png_get_valid               png_get_valid
-#define fn_png_set_strip_16            png_set_strip_16
-#define fn_png_set_expand              png_set_expand
-#define fn_png_set_gray_to_rgb         png_set_gray_to_rgb
-#define fn_png_set_background          png_set_background
-#define fn_png_get_bKGD                        png_get_bKGD
-#define fn_png_read_update_info                png_read_update_info
-#define fn_png_get_channels            png_get_channels
-#define fn_png_get_rowbytes            png_get_rowbytes
-#define fn_png_read_image              png_read_image
-#define fn_png_read_end                        png_read_end
-#define fn_png_error                   png_error
-
-#if (PNG_LIBPNG_VER >= 10500)
-#define fn_png_longjmp                 png_longjmp
-#define fn_png_set_longjmp_fn          png_set_longjmp_fn
-#endif /* libpng version >= 1.5 */
 
-#endif /* WINDOWSNT */
+#  undef png_create_info_struct
+#  undef png_create_read_struct
+#  undef png_destroy_read_struct
+#  undef png_error
+#  undef png_get_bKGD
+#  undef png_get_channels
+#  undef png_get_IHDR
+#  undef png_get_io_ptr
+#  undef png_get_rowbytes
+#  undef png_get_valid
+#  undef png_longjmp
+#  undef png_read_end
+#  undef png_read_image
+#  undef png_read_info
+#  undef png_read_update_info
+#  undef png_set_background
+#  undef png_set_expand
+#  undef png_set_gray_to_rgb
+#  undef png_set_longjmp_fn
+#  undef png_set_read_fn
+#  undef png_set_sig_bytes
+#  undef png_set_strip_16
+#  undef png_sig_cmp
+
+#  define png_create_info_struct fn_png_create_info_struct
+#  define png_create_read_struct fn_png_create_read_struct
+#  define png_destroy_read_struct fn_png_destroy_read_struct
+#  define png_error fn_png_error
+#  define png_get_bKGD fn_png_get_bKGD
+#  define png_get_channels fn_png_get_channels
+#  define png_get_IHDR fn_png_get_IHDR
+#  define png_get_io_ptr fn_png_get_io_ptr
+#  define png_get_rowbytes fn_png_get_rowbytes
+#  define png_get_valid fn_png_get_valid
+#  define png_longjmp fn_png_longjmp
+#  define png_read_end fn_png_read_end
+#  define png_read_image fn_png_read_image
+#  define png_read_info fn_png_read_info
+#  define png_read_update_info fn_png_read_update_info
+#  define png_set_background fn_png_set_background
+#  define png_set_expand fn_png_set_expand
+#  define png_set_gray_to_rgb fn_png_set_gray_to_rgb
+#  define png_set_longjmp_fn fn_png_set_longjmp_fn
+#  define png_set_read_fn fn_png_set_read_fn
+#  define png_set_sig_bytes fn_png_set_sig_bytes
+#  define png_set_strip_16 fn_png_set_strip_16
+#  define png_sig_cmp fn_png_sig_cmp
+
+# endif /* WINDOWSNT */
 
 /* Fast implementations of setjmp and longjmp.  Although setjmp and longjmp
    will do, POSIX _setjmp and _longjmp (if available) are often faster.
    Do not use sys_setjmp, as PNG supports only jmp_buf.
    It's OK if the longjmp substitute restores the signal mask.  */
-#ifdef HAVE__SETJMP
-# define FAST_SETJMP(j) _setjmp (j)
-# define FAST_LONGJMP _longjmp
-#else
-# define FAST_SETJMP(j) setjmp (j)
-# define FAST_LONGJMP longjmp
-#endif
-
-#if PNG_LIBPNG_VER < 10500
-#define PNG_LONGJMP(ptr) FAST_LONGJMP ((ptr)->jmpbuf, 1)
-#define PNG_JMPBUF(ptr) ((ptr)->jmpbuf)
-#else
+# ifdef HAVE__SETJMP
+#  define FAST_SETJMP(j) _setjmp (j)
+#  define FAST_LONGJMP _longjmp
+# else
+#  define FAST_SETJMP(j) setjmp (j)
+#  define FAST_LONGJMP longjmp
+# endif
+
+# if PNG_LIBPNG_VER < 10500
+#  define PNG_LONGJMP(ptr) FAST_LONGJMP ((ptr)->jmpbuf, 1)
+#  define PNG_JMPBUF(ptr) ((ptr)->jmpbuf)
+# else
 /* In libpng version 1.5, the jmpbuf member is hidden. (Bug#7908)  */
-#define PNG_LONGJMP(ptr) fn_png_longjmp (ptr, 1)
-#define PNG_JMPBUF(ptr) \
-  (*fn_png_set_longjmp_fn (ptr, FAST_LONGJMP, sizeof (jmp_buf)))
-#endif
+#  define PNG_LONGJMP(ptr) png_longjmp (ptr, 1)
+#  define PNG_JMPBUF(ptr) \
+     (*png_set_longjmp_fn (ptr, FAST_LONGJMP, sizeof (jmp_buf)))
+# endif
 
 /* Error and warning handlers installed when the PNG library
    is initialized.  */
@@ -5696,10 +5667,10 @@ struct png_memory_storage
 static void
 png_read_from_memory (png_structp png_ptr, png_bytep data, png_size_t length)
 {
-  struct png_memory_storage *tbr = fn_png_get_io_ptr (png_ptr);
+  struct png_memory_storage *tbr = png_get_io_ptr (png_ptr);
 
   if (length > tbr->len - tbr->index)
-    fn_png_error (png_ptr, "Read error");
+    png_error (png_ptr, "Read error");
 
   memcpy (data, tbr->bytes + tbr->index, length);
   tbr->index = tbr->index + length;
@@ -5713,10 +5684,10 @@ png_read_from_memory (png_structp png_ptr, png_bytep 
data, png_size_t length)
 static void
 png_read_from_file (png_structp png_ptr, png_bytep data, png_size_t length)
 {
-  FILE *fp = fn_png_get_io_ptr (png_ptr);
+  FILE *fp = png_get_io_ptr (png_ptr);
 
   if (fread (data, 1, length, fp) < length)
-    fn_png_error (png_ptr, "Read error");
+    png_error (png_ptr, "Read error");
 }
 
 
@@ -5778,7 +5749,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
 
       /* Check PNG signature.  */
       if (fread (sig, 1, sizeof sig, fp) != sizeof sig
-         || fn_png_sig_cmp (sig, 0, sizeof sig))
+         || png_sig_cmp (sig, 0, sizeof sig))
        {
          fclose (fp);
          image_error ("Not a PNG file: `%s'", file, Qnil);
@@ -5800,7 +5771,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
 
       /* Check PNG signature.  */
       if (tbr.len < sizeof sig
-         || fn_png_sig_cmp (tbr.bytes, 0, sizeof sig))
+         || png_sig_cmp (tbr.bytes, 0, sizeof sig))
        {
          image_error ("Not a PNG image: `%s'", img->spec, Qnil);
          return 0;
@@ -5811,13 +5782,13 @@ png_load_body (struct frame *f, struct image *img, 
struct png_load_context *c)
     }
 
   /* Initialize read and info structs for PNG lib.  */
-  png_ptr = fn_png_create_read_struct (PNG_LIBPNG_VER_STRING,
+  png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING,
                                       NULL, my_png_error,
                                       my_png_warning);
   if (png_ptr)
     {
-      info_ptr = fn_png_create_info_struct (png_ptr);
-      end_info = fn_png_create_info_struct (png_ptr);
+      info_ptr = png_create_info_struct (png_ptr);
+      end_info = png_create_info_struct (png_ptr);
     }
 
   c->png_ptr = png_ptr;
@@ -5829,7 +5800,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
 
   if (! (info_ptr && end_info))
     {
-      fn_png_destroy_read_struct (&c->png_ptr, &c->info_ptr, &c->end_info);
+      png_destroy_read_struct (&c->png_ptr, &c->info_ptr, &c->end_info);
       png_ptr = 0;
     }
   if (! png_ptr)
@@ -5844,7 +5815,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
     {
     error:
       if (c->png_ptr)
-       fn_png_destroy_read_struct (&c->png_ptr, &c->info_ptr, &c->end_info);
+       png_destroy_read_struct (&c->png_ptr, &c->info_ptr, &c->end_info);
       xfree (c->pixels);
       xfree (c->rows);
       if (c->fp)
@@ -5857,14 +5828,14 @@ png_load_body (struct frame *f, struct image *img, 
struct png_load_context *c)
 
   /* Read image info.  */
   if (!NILP (specified_data))
-    fn_png_set_read_fn (png_ptr, &tbr, png_read_from_memory);
+    png_set_read_fn (png_ptr, &tbr, png_read_from_memory);
   else
-    fn_png_set_read_fn (png_ptr, fp, png_read_from_file);
+    png_set_read_fn (png_ptr, fp, png_read_from_file);
 
-  fn_png_set_sig_bytes (png_ptr, sizeof sig);
-  fn_png_read_info (png_ptr, info_ptr);
-  fn_png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
-                  &interlace_type, NULL, NULL);
+  png_set_sig_bytes (png_ptr, sizeof sig);
+  png_read_info (png_ptr, info_ptr);
+  png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
+               &interlace_type, NULL, NULL);
 
   if (! (width <= INT_MAX && height <= INT_MAX
         && check_image_size (f, width, height)))
@@ -5880,7 +5851,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
 
   /* If image contains simply transparency data, we prefer to
      construct a clipping mask.  */
-  if (fn_png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS))
+  if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS))
     transparent_p = 1;
   else
     transparent_p = 0;
@@ -5891,16 +5862,16 @@ png_load_body (struct frame *f, struct image *img, 
struct png_load_context *c)
 
   /* Strip more than 8 bits per channel.  */
   if (bit_depth == 16)
-    fn_png_set_strip_16 (png_ptr);
+    png_set_strip_16 (png_ptr);
 
   /* Expand data to 24 bit RGB, or 8 bit grayscale, with alpha channel
      if available.  */
-  fn_png_set_expand (png_ptr);
+  png_set_expand (png_ptr);
 
   /* Convert grayscale images to RGB.  */
   if (color_type == PNG_COLOR_TYPE_GRAY
       || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-    fn_png_set_gray_to_rgb (png_ptr);
+    png_set_gray_to_rgb (png_ptr);
 
   /* Handle alpha channel by combining the image with a background
      color.  Do this only if a real alpha channel is supplied.  For
@@ -5926,28 +5897,28 @@ png_load_body (struct frame *f, struct image *img, 
struct png_load_context *c)
          bg.green = color.green >> shift;
          bg.blue = color.blue >> shift;
 
-         fn_png_set_background (png_ptr, &bg,
-                                PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
+         png_set_background (png_ptr, &bg,
+                             PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
        }
     }
 
   /* Update info structure.  */
-  fn_png_read_update_info (png_ptr, info_ptr);
+  png_read_update_info (png_ptr, info_ptr);
 
   /* Get number of channels.  Valid values are 1 for grayscale images
      and images with a palette, 2 for grayscale images with transparency
      information (alpha channel), 3 for RGB images, and 4 for RGB
      images with alpha channel, i.e. RGBA.  If conversions above were
      sufficient we should only have 3 or 4 channels here.  */
-  channels = fn_png_get_channels (png_ptr, info_ptr);
+  channels = png_get_channels (png_ptr, info_ptr);
   eassert (channels == 3 || channels == 4);
 
   /* Number of bytes needed for one row of the image.  */
-  row_bytes = fn_png_get_rowbytes (png_ptr, info_ptr);
+  row_bytes = png_get_rowbytes (png_ptr, info_ptr);
 
   /* Allocate memory for the image.  */
-  if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *rows < height
-      || min (PTRDIFF_MAX, SIZE_MAX) / sizeof *pixels / height < row_bytes)
+  if (height > min (PTRDIFF_MAX, SIZE_MAX) / sizeof *rows
+      || row_bytes > min (PTRDIFF_MAX, SIZE_MAX) / sizeof *pixels / height)
     memory_full (SIZE_MAX);
   c->pixels = pixels = xmalloc (sizeof *pixels * row_bytes * height);
   c->rows = rows = xmalloc (height * sizeof *rows);
@@ -5955,8 +5926,8 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
     rows[i] = pixels + i * row_bytes;
 
   /* Read the entire image.  */
-  fn_png_read_image (png_ptr, rows);
-  fn_png_read_end (png_ptr, info_ptr);
+  png_read_image (png_ptr, rows);
+  png_read_end (png_ptr, info_ptr);
   if (fp)
     {
       fclose (fp);
@@ -6020,21 +5991,21 @@ png_load_body (struct frame *f, struct image *img, 
struct png_load_context *c)
        overrode it.  */
     {
       png_color_16 *bg;
-      if (fn_png_get_bKGD (png_ptr, info_ptr, &bg))
+      if (png_get_bKGD (png_ptr, info_ptr, &bg))
        {
          img->background = lookup_rgb_color (f, bg->red, bg->green, bg->blue);
          img->background_valid = 1;
        }
     }
 
-#ifdef COLOR_TABLE_SUPPORT
+# ifdef COLOR_TABLE_SUPPORT
   /* Remember colors allocated for this image.  */
   img->colors = colors_in_color_table (&img->ncolors);
   free_color_table ();
-#endif /* COLOR_TABLE_SUPPORT */
+# endif /* COLOR_TABLE_SUPPORT */
 
   /* Clean up.  */
-  fn_png_destroy_read_struct (&c->png_ptr, &c->info_ptr, &c->end_info);
+  png_destroy_read_struct (&c->png_ptr, &c->info_ptr, &c->end_info);
   xfree (rows);
   xfree (pixels);
 
@@ -6091,10 +6062,6 @@ png_load (struct frame *f, struct image *img)
 static bool jpeg_image_p (Lisp_Object object);
 static bool jpeg_load (struct frame *f, struct image *img);
 
-/* The symbol `jpeg' identifying images of this type.  */
-
-static Lisp_Object Qjpeg;
-
 /* Indices of image specification fields in gs_format, below.  */
 
 enum jpeg_keyword_index
@@ -6139,7 +6106,7 @@ static bool init_jpeg_functions (void);
 
 static struct image_type jpeg_type =
 {
-  &Qjpeg,
+  SYMBOL_INDEX (Qjpeg),
   jpeg_image_p,
   jpeg_load,
   x_clear_image,
@@ -6169,15 +6136,15 @@ jpeg_image_p (Lisp_Object object)
 
 /* Work around a warning about HAVE_STDLIB_H being redefined in
    jconfig.h.  */
-#ifdef HAVE_STDLIB_H
-#undef HAVE_STDLIB_H
-#endif /* HAVE_STLIB_H */
+# ifdef HAVE_STDLIB_H
+#  undef HAVE_STDLIB_H
+# endif
 
-#if defined (HAVE_NTGUI) && !defined (__WIN32__)
+# if defined (HAVE_NTGUI) && !defined (__WIN32__)
 /* In older releases of the jpeg library, jpeglib.h will define boolean
    differently depending on __WIN32__, so make sure it is defined.  */
-#define __WIN32__ 1
-#endif
+#  define __WIN32__ 1
+# endif
 
 /* rpcndr.h (via windows.h) and jpeglib.h both define boolean types.
    Some versions of jpeglib try to detect whether rpcndr.h is loaded,
@@ -6193,23 +6160,25 @@ jpeg_image_p (Lisp_Object object)
    different name.  This name, jpeg_boolean, remains in effect through
    the rest of image.c.
 */
-#if defined CYGWIN && defined HAVE_NTGUI
-#define boolean jpeg_boolean
-#endif
-#include <jpeglib.h>
-#include <jerror.h>
+# if defined CYGWIN && defined HAVE_NTGUI
+#  define boolean jpeg_boolean
+# endif
+# include <jpeglib.h>
+# include <jerror.h>
 
-#ifdef WINDOWSNT
+# ifdef WINDOWSNT
 
 /* JPEG library details.  */
-DEF_IMGLIB_FN (void, jpeg_CreateDecompress, (j_decompress_ptr, int, size_t));
-DEF_IMGLIB_FN (boolean, jpeg_start_decompress, (j_decompress_ptr));
-DEF_IMGLIB_FN (boolean, jpeg_finish_decompress, (j_decompress_ptr));
-DEF_IMGLIB_FN (void, jpeg_destroy_decompress, (j_decompress_ptr));
-DEF_IMGLIB_FN (int, jpeg_read_header, (j_decompress_ptr, boolean));
-DEF_IMGLIB_FN (JDIMENSION, jpeg_read_scanlines, (j_decompress_ptr, JSAMPARRAY, 
JDIMENSION));
-DEF_IMGLIB_FN (struct jpeg_error_mgr *, jpeg_std_error, (struct jpeg_error_mgr 
*));
-DEF_IMGLIB_FN (boolean, jpeg_resync_to_restart, (j_decompress_ptr, int));
+DEF_DLL_FN (void, jpeg_CreateDecompress, (j_decompress_ptr, int, size_t));
+DEF_DLL_FN (boolean, jpeg_start_decompress, (j_decompress_ptr));
+DEF_DLL_FN (boolean, jpeg_finish_decompress, (j_decompress_ptr));
+DEF_DLL_FN (void, jpeg_destroy_decompress, (j_decompress_ptr));
+DEF_DLL_FN (int, jpeg_read_header, (j_decompress_ptr, boolean));
+DEF_DLL_FN (JDIMENSION, jpeg_read_scanlines,
+           (j_decompress_ptr, JSAMPARRAY, JDIMENSION));
+DEF_DLL_FN (struct jpeg_error_mgr *, jpeg_std_error,
+           (struct jpeg_error_mgr *));
+DEF_DLL_FN (boolean, jpeg_resync_to_restart, (j_decompress_ptr, int));
 
 static bool
 init_jpeg_functions (void)
@@ -6219,37 +6188,46 @@ init_jpeg_functions (void)
   if (!(library = w32_delayed_load (Qjpeg)))
     return 0;
 
-  LOAD_IMGLIB_FN (library, jpeg_finish_decompress);
-  LOAD_IMGLIB_FN (library, jpeg_read_scanlines);
-  LOAD_IMGLIB_FN (library, jpeg_start_decompress);
-  LOAD_IMGLIB_FN (library, jpeg_read_header);
-  LOAD_IMGLIB_FN (library, jpeg_CreateDecompress);
-  LOAD_IMGLIB_FN (library, jpeg_destroy_decompress);
-  LOAD_IMGLIB_FN (library, jpeg_std_error);
-  LOAD_IMGLIB_FN (library, jpeg_resync_to_restart);
+  LOAD_DLL_FN (library, jpeg_finish_decompress);
+  LOAD_DLL_FN (library, jpeg_read_scanlines);
+  LOAD_DLL_FN (library, jpeg_start_decompress);
+  LOAD_DLL_FN (library, jpeg_read_header);
+  LOAD_DLL_FN (library, jpeg_CreateDecompress);
+  LOAD_DLL_FN (library, jpeg_destroy_decompress);
+  LOAD_DLL_FN (library, jpeg_std_error);
+  LOAD_DLL_FN (library, jpeg_resync_to_restart);
   return 1;
 }
 
+#  undef jpeg_CreateDecompress
+#  undef jpeg_destroy_decompress
+#  undef jpeg_finish_decompress
+#  undef jpeg_read_header
+#  undef jpeg_read_scanlines
+#  undef jpeg_resync_to_restart
+#  undef jpeg_start_decompress
+#  undef jpeg_std_error
+
+#  define jpeg_CreateDecompress fn_jpeg_CreateDecompress
+#  define jpeg_destroy_decompress fn_jpeg_destroy_decompress
+#  define jpeg_finish_decompress fn_jpeg_finish_decompress
+#  define jpeg_read_header fn_jpeg_read_header
+#  define jpeg_read_scanlines fn_jpeg_read_scanlines
+#  define jpeg_resync_to_restart fn_jpeg_resync_to_restart
+#  define jpeg_start_decompress fn_jpeg_start_decompress
+#  define jpeg_std_error fn_jpeg_std_error
+
 /* Wrapper since we can't directly assign the function pointer
    to another function pointer that was declared more completely easily.  */
 static boolean
 jpeg_resync_to_restart_wrapper (j_decompress_ptr cinfo, int desired)
 {
-  return fn_jpeg_resync_to_restart (cinfo, desired);
+  return jpeg_resync_to_restart (cinfo, desired);
 }
+#  undef jpeg_resync_to_restart
+#  define jpeg_resync_to_restart jpeg_resync_to_restart_wrapper
 
-#else
-
-#define fn_jpeg_CreateDecompress(a,b,c)        jpeg_create_decompress (a)
-#define fn_jpeg_start_decompress       jpeg_start_decompress
-#define fn_jpeg_finish_decompress      jpeg_finish_decompress
-#define fn_jpeg_destroy_decompress     jpeg_destroy_decompress
-#define fn_jpeg_read_header            jpeg_read_header
-#define fn_jpeg_read_scanlines         jpeg_read_scanlines
-#define fn_jpeg_std_error              jpeg_std_error
-#define jpeg_resync_to_restart_wrapper jpeg_resync_to_restart
-
-#endif /* WINDOWSNT */
+# endif /* WINDOWSNT */
 
 struct my_jpeg_error_mgr
 {
@@ -6357,7 +6335,7 @@ jpeg_memory_src (j_decompress_ptr cinfo, JOCTET *data, 
ptrdiff_t len)
   src->init_source = our_common_init_source;
   src->fill_input_buffer = our_memory_fill_input_buffer;
   src->skip_input_data = our_memory_skip_input_data;
-  src->resync_to_restart = jpeg_resync_to_restart_wrapper; /* Use default 
method.  */
+  src->resync_to_restart = jpeg_resync_to_restart; /* Use default method.  */
   src->term_source = our_common_term_source;
   src->bytes_in_buffer = len;
   src->next_input_byte = data;
@@ -6463,7 +6441,7 @@ jpeg_file_src (j_decompress_ptr cinfo, FILE *fp)
   src->mgr.init_source = our_common_init_source;
   src->mgr.fill_input_buffer = our_stdio_fill_input_buffer;
   src->mgr.skip_input_data = our_stdio_skip_input_data;
-  src->mgr.resync_to_restart = jpeg_resync_to_restart_wrapper; /* Use default 
method.  */
+  src->mgr.resync_to_restart = jpeg_resync_to_restart; /* Use default.  */
   src->mgr.term_source = our_common_term_source;
   src->mgr.bytes_in_buffer = 0;
   src->mgr.next_input_byte = NULL;
@@ -6514,7 +6492,7 @@ jpeg_load_body (struct frame *f, struct image *img,
 
   /* Customize libjpeg's error handling to call my_error_exit when an
      error is detected.  This function will perform a longjmp.  */
-  mgr->cinfo.err = fn_jpeg_std_error (&mgr->pub);
+  mgr->cinfo.err = jpeg_std_error (&mgr->pub);
   mgr->pub.error_exit = my_error_exit;
   if (sys_setjmp (mgr->setjmp_buffer))
     {
@@ -6540,7 +6518,7 @@ jpeg_load_body (struct frame *f, struct image *img,
       /* Close the input file and destroy the JPEG object.  */
       if (fp)
        fclose (fp);
-      fn_jpeg_destroy_decompress (&mgr->cinfo);
+      jpeg_destroy_decompress (&mgr->cinfo);
 
       /* If we already have an XImage, free that.  */
       x_destroy_x_image (ximg);
@@ -6552,7 +6530,7 @@ jpeg_load_body (struct frame *f, struct image *img,
 
   /* Create the JPEG decompression object.  Let it read from fp.
         Read the JPEG image header.  */
-  fn_jpeg_CreateDecompress (&mgr->cinfo, JPEG_LIB_VERSION, sizeof 
*&mgr->cinfo);
+  jpeg_CreateDecompress (&mgr->cinfo, JPEG_LIB_VERSION, sizeof *&mgr->cinfo);
 
   if (NILP (specified_data))
     jpeg_file_src (&mgr->cinfo, fp);
@@ -6560,12 +6538,12 @@ jpeg_load_body (struct frame *f, struct image *img,
     jpeg_memory_src (&mgr->cinfo, SDATA (specified_data),
                     SBYTES (specified_data));
 
-  fn_jpeg_read_header (&mgr->cinfo, 1);
+  jpeg_read_header (&mgr->cinfo, 1);
 
   /* Customize decompression so that color quantization will be used.
         Start decompression.  */
   mgr->cinfo.quantize_colors = 1;
-  fn_jpeg_start_decompress (&mgr->cinfo);
+  jpeg_start_decompress (&mgr->cinfo);
   width = img->width = mgr->cinfo.output_width;
   height = img->height = mgr->cinfo.output_height;
 
@@ -6628,14 +6606,14 @@ jpeg_load_body (struct frame *f, struct image *img,
                                         JPOOL_IMAGE, row_stride, 1);
   for (y = 0; y < height; ++y)
     {
-      fn_jpeg_read_scanlines (&mgr->cinfo, buffer, 1);
+      jpeg_read_scanlines (&mgr->cinfo, buffer, 1);
       for (x = 0; x < mgr->cinfo.output_width; ++x)
        XPutPixel (ximg, x, y, colors[buffer[0][x]]);
     }
 
   /* Clean up.  */
-  fn_jpeg_finish_decompress (&mgr->cinfo);
-  fn_jpeg_destroy_decompress (&mgr->cinfo);
+  jpeg_finish_decompress (&mgr->cinfo);
+  jpeg_destroy_decompress (&mgr->cinfo);
   if (fp)
     fclose (fp);
 
@@ -6682,10 +6660,6 @@ jpeg_load (struct frame *f, struct image *img)
 static bool tiff_image_p (Lisp_Object object);
 static bool tiff_load (struct frame *f, struct image *img);
 
-/* The symbol `tiff' identifying images of this type.  */
-
-static Lisp_Object Qtiff;
-
 /* Indices of image specification fields in tiff_format, below.  */
 
 enum tiff_keyword_index
@@ -6732,7 +6706,7 @@ static bool init_tiff_functions (void);
 
 static struct image_type tiff_type =
 {
-  &Qtiff,
+  SYMBOL_INDEX (Qtiff),
   tiff_image_p,
   tiff_load,
   x_clear_image,
@@ -6759,22 +6733,22 @@ tiff_image_p (Lisp_Object object)
 
 #ifdef HAVE_TIFF
 
-#include <tiffio.h>
+# include <tiffio.h>
 
-#ifdef WINDOWSNT
+# ifdef WINDOWSNT
 
 /* TIFF library details.  */
-DEF_IMGLIB_FN (TIFFErrorHandler, TIFFSetErrorHandler, (TIFFErrorHandler));
-DEF_IMGLIB_FN (TIFFErrorHandler, TIFFSetWarningHandler, (TIFFErrorHandler));
-DEF_IMGLIB_FN (TIFF *, TIFFOpen, (const char *, const char *));
-DEF_IMGLIB_FN (TIFF *, TIFFClientOpen, (const char *, const char *, thandle_t,
-                               TIFFReadWriteProc, TIFFReadWriteProc,
-                               TIFFSeekProc, TIFFCloseProc, TIFFSizeProc,
-                               TIFFMapFileProc, TIFFUnmapFileProc));
-DEF_IMGLIB_FN (int, TIFFGetField, (TIFF *, ttag_t, ...));
-DEF_IMGLIB_FN (int, TIFFReadRGBAImage, (TIFF *, uint32, uint32, uint32 *, 
int));
-DEF_IMGLIB_FN (void, TIFFClose, (TIFF *));
-DEF_IMGLIB_FN (int, TIFFSetDirectory, (TIFF *, tdir_t));
+DEF_DLL_FN (TIFFErrorHandler, TIFFSetErrorHandler, (TIFFErrorHandler));
+DEF_DLL_FN (TIFFErrorHandler, TIFFSetWarningHandler, (TIFFErrorHandler));
+DEF_DLL_FN (TIFF *, TIFFOpen, (const char *, const char *));
+DEF_DLL_FN (TIFF *, TIFFClientOpen,
+           (const char *, const char *, thandle_t, TIFFReadWriteProc,
+            TIFFReadWriteProc, TIFFSeekProc, TIFFCloseProc, TIFFSizeProc,
+            TIFFMapFileProc, TIFFUnmapFileProc));
+DEF_DLL_FN (int, TIFFGetField, (TIFF *, ttag_t, ...));
+DEF_DLL_FN (int, TIFFReadRGBAImage, (TIFF *, uint32, uint32, uint32 *, int));
+DEF_DLL_FN (void, TIFFClose, (TIFF *));
+DEF_DLL_FN (int, TIFFSetDirectory, (TIFF *, tdir_t));
 
 static bool
 init_tiff_functions (void)
@@ -6784,28 +6758,36 @@ init_tiff_functions (void)
   if (!(library = w32_delayed_load (Qtiff)))
     return 0;
 
-  LOAD_IMGLIB_FN (library, TIFFSetErrorHandler);
-  LOAD_IMGLIB_FN (library, TIFFSetWarningHandler);
-  LOAD_IMGLIB_FN (library, TIFFOpen);
-  LOAD_IMGLIB_FN (library, TIFFClientOpen);
-  LOAD_IMGLIB_FN (library, TIFFGetField);
-  LOAD_IMGLIB_FN (library, TIFFReadRGBAImage);
-  LOAD_IMGLIB_FN (library, TIFFClose);
-  LOAD_IMGLIB_FN (library, TIFFSetDirectory);
+  LOAD_DLL_FN (library, TIFFSetErrorHandler);
+  LOAD_DLL_FN (library, TIFFSetWarningHandler);
+  LOAD_DLL_FN (library, TIFFOpen);
+  LOAD_DLL_FN (library, TIFFClientOpen);
+  LOAD_DLL_FN (library, TIFFGetField);
+  LOAD_DLL_FN (library, TIFFReadRGBAImage);
+  LOAD_DLL_FN (library, TIFFClose);
+  LOAD_DLL_FN (library, TIFFSetDirectory);
   return 1;
 }
 
-#else
+#  undef TIFFClientOpen
+#  undef TIFFClose
+#  undef TIFFGetField
+#  undef TIFFOpen
+#  undef TIFFReadRGBAImage
+#  undef TIFFSetDirectory
+#  undef TIFFSetErrorHandler
+#  undef TIFFSetWarningHandler
 
-#define fn_TIFFSetErrorHandler         TIFFSetErrorHandler
-#define fn_TIFFSetWarningHandler       TIFFSetWarningHandler
-#define fn_TIFFOpen                    TIFFOpen
-#define fn_TIFFClientOpen              TIFFClientOpen
-#define fn_TIFFGetField                        TIFFGetField
-#define fn_TIFFReadRGBAImage           TIFFReadRGBAImage
-#define fn_TIFFClose                   TIFFClose
-#define fn_TIFFSetDirectory            TIFFSetDirectory
-#endif /* WINDOWSNT */
+#  define TIFFClientOpen fn_TIFFClientOpen
+#  define TIFFClose fn_TIFFClose
+#  define TIFFGetField fn_TIFFGetField
+#  define TIFFOpen fn_TIFFOpen
+#  define TIFFReadRGBAImage fn_TIFFReadRGBAImage
+#  define TIFFSetDirectory fn_TIFFSetDirectory
+#  define TIFFSetErrorHandler fn_TIFFSetErrorHandler
+#  define TIFFSetWarningHandler fn_TIFFSetWarningHandler
+
+# endif /* WINDOWSNT */
 
 
 /* Reading from a memory buffer for TIFF images Based on the PNG
@@ -6903,11 +6885,11 @@ tiff_size_of_memory (thandle_t data)
    compiler error compiling tiff_handler, see Bugzilla bug #17406
    (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17406).  Declaring
    this function as external works around that problem.  */
-#if defined (__MINGW32__) && __GNUC__ == 3
-# define MINGW_STATIC
-#else
-# define MINGW_STATIC static
-#endif
+# if defined (__MINGW32__) && __GNUC__ == 3
+#  define MINGW_STATIC
+# else
+#  define MINGW_STATIC static
+# endif
 
 MINGW_STATIC void
 tiff_handler (const char *, const char *, const char *, va_list)
@@ -6926,7 +6908,7 @@ tiff_handler (const char *log_format, const char *title,
   add_to_log (log_format, build_string (title),
              make_string (buf, max (0, min (len, sizeof buf - 1))));
 }
-#undef MINGW_STATIC
+# undef MINGW_STATIC
 
 static void tiff_error_handler (const char *, const char *, va_list)
   ATTRIBUTE_FORMAT_PRINTF (2, 0);
@@ -6965,8 +6947,8 @@ tiff_load (struct frame *f, struct image *img)
   specified_file = image_spec_value (img->spec, QCfile, NULL);
   specified_data = image_spec_value (img->spec, QCdata, NULL);
 
-  fn_TIFFSetErrorHandler ((TIFFErrorHandler) tiff_error_handler);
-  fn_TIFFSetWarningHandler ((TIFFErrorHandler) tiff_warning_handler);
+  TIFFSetErrorHandler ((TIFFErrorHandler) tiff_error_handler);
+  TIFFSetWarningHandler ((TIFFErrorHandler) tiff_warning_handler);
 
   if (NILP (specified_data))
     {
@@ -6977,12 +6959,12 @@ tiff_load (struct frame *f, struct image *img)
          image_error ("Cannot find image file `%s'", specified_file, Qnil);
          return 0;
        }
-#ifdef WINDOWSNT
+# ifdef WINDOWSNT
       file = ansi_encode_filename (file);
-#endif
+# endif
 
       /* Try to open the image file.  */
-      tiff = fn_TIFFOpen (SSDATA (file), "r");
+      tiff = TIFFOpen (SSDATA (file), "r");
       if (tiff == NULL)
        {
          image_error ("Cannot open `%s'", file, Qnil);
@@ -7002,14 +6984,14 @@ tiff_load (struct frame *f, struct image *img)
       memsrc.len = SBYTES (specified_data);
       memsrc.index = 0;
 
-      tiff = fn_TIFFClientOpen ("memory_source", "r", (thandle_t)&memsrc,
-                               tiff_read_from_memory,
-                               tiff_write_from_memory,
-                               tiff_seek_in_memory,
-                               tiff_close_memory,
-                               tiff_size_of_memory,
-                               tiff_mmap_memory,
-                               tiff_unmap_memory);
+      tiff = TIFFClientOpen ("memory_source", "r", (thandle_t)&memsrc,
+                            tiff_read_from_memory,
+                            tiff_write_from_memory,
+                            tiff_seek_in_memory,
+                            tiff_close_memory,
+                            tiff_size_of_memory,
+                            tiff_mmap_memory,
+                            tiff_unmap_memory);
 
       if (!tiff)
        {
@@ -7023,24 +7005,24 @@ tiff_load (struct frame *f, struct image *img)
     {
       EMACS_INT ino = XFASTINT (image);
       if (! (TYPE_MINIMUM (tdir_t) <= ino && ino <= TYPE_MAXIMUM (tdir_t)
-            && fn_TIFFSetDirectory (tiff, ino)))
+            && TIFFSetDirectory (tiff, ino)))
        {
          image_error ("Invalid image number `%s' in image `%s'",
                       image, img->spec);
-         fn_TIFFClose (tiff);
+         TIFFClose (tiff);
          return 0;
        }
     }
 
   /* Get width and height of the image, and allocate a raster buffer
      of width x height 32-bit values.  */
-  fn_TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width);
-  fn_TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height);
+  TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width);
+  TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height);
 
   if (!check_image_size (f, width, height))
     {
       image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
-      fn_TIFFClose (tiff);
+      TIFFClose (tiff);
       return 0;
     }
 
@@ -7049,16 +7031,16 @@ tiff_load (struct frame *f, struct image *img)
         && image_create_x_image_and_pixmap (f, img, width, height, 0,
                                             &ximg, 0)))
     {
-      fn_TIFFClose (tiff);
+      TIFFClose (tiff);
       return 0;
     }
 
   buf = xmalloc (sizeof *buf * width * height);
 
-  rc = fn_TIFFReadRGBAImage (tiff, width, height, buf, 0);
+  rc = TIFFReadRGBAImage (tiff, width, height, buf, 0);
 
   /* Count the number of images in the file.  */
-  for (count = 1; fn_TIFFSetDirectory (tiff, count); count++)
+  for (count = 1; TIFFSetDirectory (tiff, count); count++)
     continue;
 
   if (count > 1)
@@ -7066,7 +7048,7 @@ tiff_load (struct frame *f, struct image *img)
                            Fcons (make_number (count),
                                   img->lisp_data));
 
-  fn_TIFFClose (tiff);
+  TIFFClose (tiff);
   if (!rc)
     {
       image_error ("Error reading TIFF image `%s'", img->spec, Qnil);
@@ -7092,11 +7074,11 @@ tiff_load (struct frame *f, struct image *img)
        }
     }
 
-#ifdef COLOR_TABLE_SUPPORT
+# ifdef COLOR_TABLE_SUPPORT
   /* Remember the colors allocated for the image.  Free the color table.  */
   img->colors = colors_in_color_table (&img->ncolors);
   free_color_table ();
-#endif /* COLOR_TABLE_SUPPORT */
+# endif /* COLOR_TABLE_SUPPORT */
 
   img->width = width;
   img->height = height;
@@ -7113,9 +7095,8 @@ tiff_load (struct frame *f, struct image *img)
   return 1;
 }
 
-#else /* HAVE_TIFF */
+#elif defined HAVE_NS
 
-#ifdef HAVE_NS
 static bool
 tiff_load (struct frame *f, struct image *img)
 {
@@ -7123,9 +7104,8 @@ tiff_load (struct frame *f, struct image *img)
                         image_spec_value (img->spec, QCfile, NULL),
                         image_spec_value (img->spec, QCdata, NULL));
 }
-#endif  /* HAVE_NS */
 
-#endif /* !HAVE_TIFF */
+#endif
 
 
 
@@ -7139,10 +7119,6 @@ static bool gif_image_p (Lisp_Object object);
 static bool gif_load (struct frame *f, struct image *img);
 static void gif_clear_image (struct frame *f, struct image *img);
 
-/* The symbol `gif' identifying images of this type.  */
-
-static Lisp_Object Qgif;
-
 /* Indices of image specification fields in gif_format, below.  */
 
 enum gif_keyword_index
@@ -7189,7 +7165,7 @@ static bool init_gif_functions (void);
 
 static struct image_type gif_type =
 {
-  &Qgif,
+  SYMBOL_INDEX (Qgif),
   gif_image_p,
   gif_load,
   gif_clear_image,
@@ -7225,54 +7201,54 @@ gif_image_p (Lisp_Object object)
 
 #ifdef HAVE_GIF
 
-#if defined (HAVE_NTGUI)
+# ifdef HAVE_NTGUI
 
 /* winuser.h might define DrawText to DrawTextA or DrawTextW.
    Undefine before redefining to avoid a preprocessor warning.  */
-#ifdef DrawText
-#undef DrawText
-#endif
+#  ifdef DrawText
+#   undef DrawText
+#  endif
 /* avoid conflict with QuickdrawText.h */
-#define DrawText gif_DrawText
-#include <gif_lib.h>
-#undef DrawText
+#  define DrawText gif_DrawText
+#  include <gif_lib.h>
+#  undef DrawText
 
 /* Giflib before 5.0 didn't define these macros (used only if HAVE_NTGUI).  */
-#ifndef GIFLIB_MINOR
-#define GIFLIB_MINOR 0
-#endif
-#ifndef GIFLIB_RELEASE
-#define GIFLIB_RELEASE 0
-#endif
+#  ifndef GIFLIB_MINOR
+#   define GIFLIB_MINOR 0
+#  endif
+#  ifndef GIFLIB_RELEASE
+#   define GIFLIB_RELEASE 0
+#  endif
 
-#else /* HAVE_NTGUI */
+# else /* HAVE_NTGUI */
 
-#include <gif_lib.h>
+#  include <gif_lib.h>
 
-#endif /* HAVE_NTGUI */
+# endif /* HAVE_NTGUI */
 
 /* Giflib before 5.0 didn't define these macros.  */
-#ifndef GIFLIB_MAJOR
-#define GIFLIB_MAJOR 4
-#endif
+# ifndef GIFLIB_MAJOR
+#  define GIFLIB_MAJOR 4
+# endif
 
-#ifdef WINDOWSNT
+# ifdef WINDOWSNT
 
 /* GIF library details.  */
-#if 5 < GIFLIB_MAJOR + (1 <= GIFLIB_MINOR)
-DEF_IMGLIB_FN (int, DGifCloseFile, (GifFileType *, int *));
-#else
-DEF_IMGLIB_FN (int, DGifCloseFile, (GifFileType *));
-#endif
-DEF_IMGLIB_FN (int, DGifSlurp, (GifFileType *));
-#if GIFLIB_MAJOR < 5
-DEF_IMGLIB_FN (GifFileType *, DGifOpen, (void *, InputFunc));
-DEF_IMGLIB_FN (GifFileType *, DGifOpenFileName, (const char *));
-#else
-DEF_IMGLIB_FN (GifFileType *, DGifOpen, (void *, InputFunc, int *));
-DEF_IMGLIB_FN (GifFileType *, DGifOpenFileName, (const char *, int *));
-DEF_IMGLIB_FN (char *, GifErrorString, (int));
-#endif
+#  if GIFLIB_MAJOR + (GIFLIB_MINOR >= 1) > 5
+DEF_DLL_FN (int, DGifCloseFile, (GifFileType *, int *));
+#   else
+DEF_DLL_FN (int, DGifCloseFile, (GifFileType *));
+#  endif
+DEF_DLL_FN (int, DGifSlurp, (GifFileType *));
+#  if GIFLIB_MAJOR < 5
+DEF_DLL_FN (GifFileType *, DGifOpen, (void *, InputFunc));
+DEF_DLL_FN (GifFileType *, DGifOpenFileName, (const char *));
+#  else
+DEF_DLL_FN (GifFileType *, DGifOpen, (void *, InputFunc, int *));
+DEF_DLL_FN (GifFileType *, DGifOpenFileName, (const char *, int *));
+DEF_DLL_FN (char *, GifErrorString, (int));
+#  endif
 
 static bool
 init_gif_functions (void)
@@ -7282,27 +7258,29 @@ init_gif_functions (void)
   if (!(library = w32_delayed_load (Qgif)))
     return 0;
 
-  LOAD_IMGLIB_FN (library, DGifCloseFile);
-  LOAD_IMGLIB_FN (library, DGifSlurp);
-  LOAD_IMGLIB_FN (library, DGifOpen);
-  LOAD_IMGLIB_FN (library, DGifOpenFileName);
-#if GIFLIB_MAJOR >= 5
-  LOAD_IMGLIB_FN (library, GifErrorString);
-#endif
+  LOAD_DLL_FN (library, DGifCloseFile);
+  LOAD_DLL_FN (library, DGifSlurp);
+  LOAD_DLL_FN (library, DGifOpen);
+  LOAD_DLL_FN (library, DGifOpenFileName);
+#  if GIFLIB_MAJOR >= 5
+  LOAD_DLL_FN (library, GifErrorString);
+#  endif
   return 1;
 }
 
-#else
+#  undef DGifCloseFile
+#  undef DGifOpen
+#  undef DGifOpenFileName
+#  undef DGifSlurp
+#  undef GifErrorString
 
-#define fn_DGifCloseFile       DGifCloseFile
-#define fn_DGifSlurp           DGifSlurp
-#define fn_DGifOpen            DGifOpen
-#define fn_DGifOpenFileName    DGifOpenFileName
-#if 5 <= GIFLIB_MAJOR
-# define fn_GifErrorString     GifErrorString
-#endif
+#  define DGifCloseFile fn_DGifCloseFile
+#  define DGifOpen fn_DGifOpen
+#  define DGifOpenFileName fn_DGifOpenFileName
+#  define DGifSlurp fn_DGifSlurp
+#  define GifErrorString fn_GifErrorString
 
-#endif /* WINDOWSNT */
+# endif /* WINDOWSNT */
 
 /* Reading a GIF image from memory
    Based on the PNG memory stuff to a certain extent. */
@@ -7338,10 +7316,10 @@ gif_close (GifFileType *gif, int *err)
 {
   int retval;
 
-#if 5 < GIFLIB_MAJOR + (1 <= GIFLIB_MINOR)
-  retval = fn_DGifCloseFile (gif, err);
+#if GIFLIB_MAJOR + (GIFLIB_MINOR >= 1) > 5
+  retval = DGifCloseFile (gif, err);
 #else
-  retval = fn_DGifCloseFile (gif);
+  retval = DGifCloseFile (gif);
 #if GIFLIB_MAJOR >= 5
   if (err)
     *err = gif->Error;
@@ -7389,18 +7367,18 @@ gif_load (struct frame *f, struct image *img)
 
       /* Open the GIF file.  */
 #if GIFLIB_MAJOR < 5
-      gif = fn_DGifOpenFileName (SSDATA (file));
+      gif = DGifOpenFileName (SSDATA (file));
       if (gif == NULL)
        {
          image_error ("Cannot open `%s'", file, Qnil);
          return 0;
        }
 #else
-      gif = fn_DGifOpenFileName (SSDATA (file), &gif_err);
+      gif = DGifOpenFileName (SSDATA (file), &gif_err);
       if (gif == NULL)
        {
          image_error ("Cannot open `%s': %s",
-                      file, build_string (fn_GifErrorString (gif_err)));
+                      file, build_string (GifErrorString (gif_err)));
          return 0;
        }
 #endif
@@ -7420,18 +7398,18 @@ gif_load (struct frame *f, struct image *img)
       memsrc.index = 0;
 
 #if GIFLIB_MAJOR < 5
-      gif = fn_DGifOpen (&memsrc, gif_read_from_memory);
+      gif = DGifOpen (&memsrc, gif_read_from_memory);
       if (!gif)
        {
          image_error ("Cannot open memory source `%s'", img->spec, Qnil);
          return 0;
        }
 #else
-      gif = fn_DGifOpen (&memsrc, gif_read_from_memory, &gif_err);
+      gif = DGifOpen (&memsrc, gif_read_from_memory, &gif_err);
       if (!gif)
        {
          image_error ("Cannot open memory source `%s': %s",
-                      img->spec, build_string (fn_GifErrorString (gif_err)));
+                      img->spec, build_string (GifErrorString (gif_err)));
          return 0;
        }
 #endif
@@ -7446,7 +7424,7 @@ gif_load (struct frame *f, struct image *img)
     }
 
   /* Read entire contents.  */
-  rc = fn_DGifSlurp (gif);
+  rc = DGifSlurp (gif);
   if (rc == GIF_ERROR || gif->ImageCount <= 0)
     {
       image_error ("Error reading `%s'", img->spec, Qnil);
@@ -7493,7 +7471,7 @@ gif_load (struct frame *f, struct image *img)
       int subimg_height = subimage->ImageDesc.Height;
       int subimg_top = subimage->ImageDesc.Top;
       int subimg_left = subimage->ImageDesc.Left;
-      if (! (0 <= subimg_width && 0 <= subimg_height
+      if (! (subimg_width >= 0 && subimg_height >= 0
             && 0 <= subimg_top && subimg_top <= height - subimg_height
             && 0 <= subimg_left && subimg_left <= width - subimg_width))
        {
@@ -7680,7 +7658,7 @@ gif_load (struct frame *f, struct image *img)
   if (gif_close (gif, &gif_err) == GIF_ERROR)
     {
 #if 5 <= GIFLIB_MAJOR
-      char *error_text = fn_GifErrorString (gif_err);
+      char *error_text = GifErrorString (gif_err);
 
       if (error_text)
        image_error ("Error closing `%s': %s",
@@ -7811,8 +7789,6 @@ compute_image_size (size_t width, size_t height,
   *d_height = desired_height;
 }
 
-static Lisp_Object Qimagemagick;
-
 static bool imagemagick_image_p (Lisp_Object);
 static bool imagemagick_load (struct frame *, struct image *);
 static void imagemagick_clear_image (struct frame *, struct image *);
@@ -7876,7 +7852,7 @@ static bool init_imagemagick_functions (void);
 
 static struct image_type imagemagick_type =
   {
-    &Qimagemagick,
+    SYMBOL_INDEX (Qimagemagick),
     imagemagick_image_p,
     imagemagick_load,
     imagemagick_clear_image,
@@ -8592,7 +8568,7 @@ and `imagemagick-types-inhibit'.  */)
                                 SVG
  ***********************************************************************/
 
-#if defined (HAVE_RSVG)
+#ifdef HAVE_RSVG
 
 /* Function prototypes.  */
 
@@ -8600,11 +8576,7 @@ static bool svg_image_p (Lisp_Object object);
 static bool svg_load (struct frame *f, struct image *img);
 
 static bool svg_load_image (struct frame *, struct image *,
-                           unsigned char *, ptrdiff_t);
-
-/* The symbol `svg' identifying images of this type. */
-
-static Lisp_Object Qsvg;
+                           unsigned char *, ptrdiff_t, char *);
 
 /* Indices of image specification fields in svg_format, below.  */
 
@@ -8640,11 +8612,11 @@ static const struct image_keyword svg_format[SVG_LAST] =
   {":background",      IMAGE_STRING_OR_NIL_VALUE,              0}
 };
 
-#if defined HAVE_NTGUI && defined WINDOWSNT
+# if defined HAVE_NTGUI && defined WINDOWSNT
 static bool init_svg_functions (void);
-#else
+# else
 #define init_svg_functions NULL
-#endif
+# endif
 
 /* Structure describing the image type `svg'.  Its the same type of
    structure defined for all image formats, handled by emacs image
@@ -8652,7 +8624,7 @@ static bool init_svg_functions (void);
 
 static struct image_type svg_type =
 {
-  &Qsvg,
+  SYMBOL_INDEX (Qsvg),
   svg_image_p,
   svg_load,
   x_clear_image,
@@ -8678,33 +8650,34 @@ svg_image_p (Lisp_Object object)
   return fmt[SVG_FILE].count + fmt[SVG_DATA].count == 1;
 }
 
-#include <librsvg/rsvg.h>
+# include <librsvg/rsvg.h>
 
-#ifdef WINDOWSNT
+# ifdef WINDOWSNT
 
 /* SVG library functions.  */
-DEF_IMGLIB_FN (RsvgHandle *, rsvg_handle_new, (void));
-DEF_IMGLIB_FN (void, rsvg_handle_get_dimensions, (RsvgHandle *, 
RsvgDimensionData *));
-DEF_IMGLIB_FN (gboolean, rsvg_handle_write, (RsvgHandle *, const guchar *, 
gsize, GError **));
-DEF_IMGLIB_FN (gboolean, rsvg_handle_close, (RsvgHandle *, GError **));
-DEF_IMGLIB_FN (GdkPixbuf *, rsvg_handle_get_pixbuf, (RsvgHandle *));
-
-DEF_IMGLIB_FN (int, gdk_pixbuf_get_width, (const GdkPixbuf *));
-DEF_IMGLIB_FN (int, gdk_pixbuf_get_height, (const GdkPixbuf *));
-DEF_IMGLIB_FN (guchar *, gdk_pixbuf_get_pixels, (const GdkPixbuf *));
-DEF_IMGLIB_FN (int, gdk_pixbuf_get_rowstride, (const GdkPixbuf *));
-DEF_IMGLIB_FN (GdkColorspace, gdk_pixbuf_get_colorspace, (const GdkPixbuf *));
-DEF_IMGLIB_FN (int, gdk_pixbuf_get_n_channels, (const GdkPixbuf *));
-DEF_IMGLIB_FN (gboolean, gdk_pixbuf_get_has_alpha, (const GdkPixbuf *));
-DEF_IMGLIB_FN (int, gdk_pixbuf_get_bits_per_sample, (const GdkPixbuf *));
-
-#if ! GLIB_CHECK_VERSION (2, 36, 0)
-DEF_IMGLIB_FN (void, g_type_init, (void));
-#endif
-DEF_IMGLIB_FN (void, g_object_unref, (gpointer));
-DEF_IMGLIB_FN (void, g_error_free, (GError *));
-
-Lisp_Object Qgdk_pixbuf, Qglib, Qgobject;
+DEF_DLL_FN (RsvgHandle *, rsvg_handle_new, (void));
+DEF_DLL_FN (void, rsvg_handle_get_dimensions,
+           (RsvgHandle *, RsvgDimensionData *));
+DEF_DLL_FN (gboolean, rsvg_handle_write,
+           (RsvgHandle *, const guchar *, gsize, GError **));
+DEF_DLL_FN (gboolean, rsvg_handle_close, (RsvgHandle *, GError **));
+DEF_DLL_FN (GdkPixbuf *, rsvg_handle_get_pixbuf, (RsvgHandle *));
+DEF_DLL_FN (void, rsvg_handle_set_base_uri, (RsvgHandle *, const char *));
+
+DEF_DLL_FN (int, gdk_pixbuf_get_width, (const GdkPixbuf *));
+DEF_DLL_FN (int, gdk_pixbuf_get_height, (const GdkPixbuf *));
+DEF_DLL_FN (guchar *, gdk_pixbuf_get_pixels, (const GdkPixbuf *));
+DEF_DLL_FN (int, gdk_pixbuf_get_rowstride, (const GdkPixbuf *));
+DEF_DLL_FN (GdkColorspace, gdk_pixbuf_get_colorspace, (const GdkPixbuf *));
+DEF_DLL_FN (int, gdk_pixbuf_get_n_channels, (const GdkPixbuf *));
+DEF_DLL_FN (gboolean, gdk_pixbuf_get_has_alpha, (const GdkPixbuf *));
+DEF_DLL_FN (int, gdk_pixbuf_get_bits_per_sample, (const GdkPixbuf *));
+
+#  if ! GLIB_CHECK_VERSION (2, 36, 0)
+DEF_DLL_FN (void, g_type_init, (void));
+#  endif
+DEF_DLL_FN (void, g_object_unref, (gpointer));
+DEF_DLL_FN (void, g_error_free, (GError *));
 
 static bool
 init_svg_functions (void)
@@ -8722,54 +8695,71 @@ init_svg_functions (void)
       return 0;
     }
 
-  LOAD_IMGLIB_FN (library, rsvg_handle_new);
-  LOAD_IMGLIB_FN (library, rsvg_handle_get_dimensions);
-  LOAD_IMGLIB_FN (library, rsvg_handle_write);
-  LOAD_IMGLIB_FN (library, rsvg_handle_close);
-  LOAD_IMGLIB_FN (library, rsvg_handle_get_pixbuf);
-
-  LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_width);
-  LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_height);
-  LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_pixels);
-  LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_rowstride);
-  LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_colorspace);
-  LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_n_channels);
-  LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_has_alpha);
-  LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_bits_per_sample);
-
-#if ! GLIB_CHECK_VERSION (2, 36, 0)
-  LOAD_IMGLIB_FN (gobject, g_type_init);
-#endif
-  LOAD_IMGLIB_FN (gobject, g_object_unref);
-  LOAD_IMGLIB_FN (glib, g_error_free);
+  LOAD_DLL_FN (library, rsvg_handle_new);
+  LOAD_DLL_FN (library, rsvg_handle_get_dimensions);
+  LOAD_DLL_FN (library, rsvg_handle_write);
+  LOAD_DLL_FN (library, rsvg_handle_close);
+  LOAD_DLL_FN (library, rsvg_handle_get_pixbuf);
+  LOAD_DLL_FN (library, rsvg_handle_set_base_uri);
+
+  LOAD_DLL_FN (gdklib, gdk_pixbuf_get_width);
+  LOAD_DLL_FN (gdklib, gdk_pixbuf_get_height);
+  LOAD_DLL_FN (gdklib, gdk_pixbuf_get_pixels);
+  LOAD_DLL_FN (gdklib, gdk_pixbuf_get_rowstride);
+  LOAD_DLL_FN (gdklib, gdk_pixbuf_get_colorspace);
+  LOAD_DLL_FN (gdklib, gdk_pixbuf_get_n_channels);
+  LOAD_DLL_FN (gdklib, gdk_pixbuf_get_has_alpha);
+  LOAD_DLL_FN (gdklib, gdk_pixbuf_get_bits_per_sample);
+
+#  if ! GLIB_CHECK_VERSION (2, 36, 0)
+  LOAD_DLL_FN (gobject, g_type_init);
+#  endif
+  LOAD_DLL_FN (gobject, g_object_unref);
+  LOAD_DLL_FN (glib, g_error_free);
 
   return 1;
 }
 
-#else
 /* The following aliases for library functions allow dynamic loading
    to be used on some platforms.  */
-#define fn_rsvg_handle_new             rsvg_handle_new
-#define fn_rsvg_handle_get_dimensions   rsvg_handle_get_dimensions
-#define fn_rsvg_handle_write           rsvg_handle_write
-#define fn_rsvg_handle_close           rsvg_handle_close
-#define fn_rsvg_handle_get_pixbuf      rsvg_handle_get_pixbuf
-
-#define fn_gdk_pixbuf_get_width                  gdk_pixbuf_get_width
-#define fn_gdk_pixbuf_get_height         gdk_pixbuf_get_height
-#define fn_gdk_pixbuf_get_pixels         gdk_pixbuf_get_pixels
-#define fn_gdk_pixbuf_get_rowstride      gdk_pixbuf_get_rowstride
-#define fn_gdk_pixbuf_get_colorspace     gdk_pixbuf_get_colorspace
-#define fn_gdk_pixbuf_get_n_channels     gdk_pixbuf_get_n_channels
-#define fn_gdk_pixbuf_get_has_alpha      gdk_pixbuf_get_has_alpha
-#define fn_gdk_pixbuf_get_bits_per_sample gdk_pixbuf_get_bits_per_sample
 
-#if ! GLIB_CHECK_VERSION (2, 36, 0)
-#define fn_g_type_init                    g_type_init
-#endif
-#define fn_g_object_unref                 g_object_unref
-#define fn_g_error_free                   g_error_free
-#endif /* !WINDOWSNT  */
+#  undef gdk_pixbuf_get_bits_per_sample
+#  undef gdk_pixbuf_get_colorspace
+#  undef gdk_pixbuf_get_has_alpha
+#  undef gdk_pixbuf_get_height
+#  undef gdk_pixbuf_get_n_channels
+#  undef gdk_pixbuf_get_pixels
+#  undef gdk_pixbuf_get_rowstride
+#  undef gdk_pixbuf_get_width
+#  undef g_error_free
+#  undef g_object_unref
+#  undef g_type_init
+#  undef rsvg_handle_close
+#  undef rsvg_handle_get_dimensions
+#  undef rsvg_handle_get_pixbuf
+#  undef rsvg_handle_new
+#  undef rsvg_handle_set_base_uri
+#  undef rsvg_handle_write
+
+#  define gdk_pixbuf_get_bits_per_sample fn_gdk_pixbuf_get_bits_per_sample
+#  define gdk_pixbuf_get_colorspace fn_gdk_pixbuf_get_colorspace
+#  define gdk_pixbuf_get_has_alpha fn_gdk_pixbuf_get_has_alpha
+#  define gdk_pixbuf_get_height fn_gdk_pixbuf_get_height
+#  define gdk_pixbuf_get_n_channels fn_gdk_pixbuf_get_n_channels
+#  define gdk_pixbuf_get_pixels fn_gdk_pixbuf_get_pixels
+#  define gdk_pixbuf_get_rowstride fn_gdk_pixbuf_get_rowstride
+#  define gdk_pixbuf_get_width fn_gdk_pixbuf_get_width
+#  define g_error_free fn_g_error_free
+#  define g_object_unref fn_g_object_unref
+#  define g_type_init fn_g_type_init
+#  define rsvg_handle_close fn_rsvg_handle_close
+#  define rsvg_handle_get_dimensions fn_rsvg_handle_get_dimensions
+#  define rsvg_handle_get_pixbuf fn_rsvg_handle_get_pixbuf
+#  define rsvg_handle_new fn_rsvg_handle_new
+#  define rsvg_handle_set_base_uri fn_rsvg_handle_set_base_uri
+#  define rsvg_handle_write fn_rsvg_handle_write
+
+# endif /* !WINDOWSNT  */
 
 /* Load SVG image IMG for use on frame F.  Value is true if
    successful.  */
@@ -8803,14 +8793,14 @@ svg_load (struct frame *f, struct image *img)
          return 0;
        }
       /* If the file was slurped into memory properly, parse it.  */
-      success_p = svg_load_image (f, img, contents, size);
+      success_p = svg_load_image (f, img, contents, size, SSDATA (file));
       xfree (contents);
     }
   /* Else its not a file, its a lisp object.  Load the image from a
      lisp object rather than a file.  */
   else
     {
-      Lisp_Object data;
+      Lisp_Object data, original_filename;
 
       data = image_spec_value (img->spec, QCdata, NULL);
       if (!STRINGP (data))
@@ -8818,7 +8808,10 @@ svg_load (struct frame *f, struct image *img)
          image_error ("Invalid image data `%s'", data, Qnil);
          return 0;
        }
-      success_p = svg_load_image (f, img, SDATA (data), SBYTES (data));
+      original_filename = BVAR (current_buffer, filename);
+      success_p = svg_load_image (f, img, SDATA (data), SBYTES (data),
+                                  (NILP (original_filename) ? NULL
+                                  : SSDATA (original_filename)));
     }
 
   return success_p;
@@ -8835,7 +8828,8 @@ static bool
 svg_load_image (struct frame *f,         /* Pointer to emacs frame structure.  
*/
                struct image *img,       /* Pointer to emacs image structure.  
*/
                unsigned char *contents, /* String containing the SVG XML data 
to be parsed.  */
-               ptrdiff_t size)          /* Size of data in bytes.  */
+               ptrdiff_t size,          /* Size of data in bytes.  */
+               char *filename)          /* Name of SVG file being loaded.  */
 {
   RsvgHandle *rsvg_handle;
   RsvgDimensionData dimension_data;
@@ -8854,22 +8848,28 @@ svg_load_image (struct frame *f,         /* Pointer to 
emacs frame structure.  *
 #if ! GLIB_CHECK_VERSION (2, 36, 0)
   /* g_type_init is a glib function that must be called prior to
      using gnome type library functions (obsolete since 2.36.0).  */
-  fn_g_type_init ();
+  g_type_init ();
 #endif
 
   /* Make a handle to a new rsvg object.  */
-  rsvg_handle = fn_rsvg_handle_new ();
+  rsvg_handle = rsvg_handle_new ();
+
+  /* Set base_uri for properly handling referenced images (via 'href').
+     See rsvg bug 596114 - "image refs are relative to curdir, not .svg file"
+     (https://bugzilla.gnome.org/show_bug.cgi?id=596114). */
+  if (filename)
+    rsvg_handle_set_base_uri(rsvg_handle, filename);
 
   /* Parse the contents argument and fill in the rsvg_handle.  */
-  fn_rsvg_handle_write (rsvg_handle, contents, size, &err);
+  rsvg_handle_write (rsvg_handle, contents, size, &err);
   if (err) goto rsvg_error;
 
   /* The parsing is complete, rsvg_handle is ready to used, close it
      for further writes.  */
-  fn_rsvg_handle_close (rsvg_handle, &err);
+  rsvg_handle_close (rsvg_handle, &err);
   if (err) goto rsvg_error;
 
-  fn_rsvg_handle_get_dimensions (rsvg_handle, &dimension_data);
+  rsvg_handle_get_dimensions (rsvg_handle, &dimension_data);
   if (! check_image_size (f, dimension_data.width, dimension_data.height))
     {
       image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
@@ -8878,26 +8878,26 @@ svg_load_image (struct frame *f,         /* Pointer to 
emacs frame structure.  *
 
   /* We can now get a valid pixel buffer from the svg file, if all
      went ok.  */
-  pixbuf = fn_rsvg_handle_get_pixbuf (rsvg_handle);
+  pixbuf = rsvg_handle_get_pixbuf (rsvg_handle);
   if (!pixbuf) goto rsvg_error;
-  fn_g_object_unref (rsvg_handle);
+  g_object_unref (rsvg_handle);
 
   /* Extract some meta data from the svg handle.  */
-  width     = fn_gdk_pixbuf_get_width (pixbuf);
-  height    = fn_gdk_pixbuf_get_height (pixbuf);
-  pixels    = fn_gdk_pixbuf_get_pixels (pixbuf);
-  rowstride = fn_gdk_pixbuf_get_rowstride (pixbuf);
+  width     = gdk_pixbuf_get_width (pixbuf);
+  height    = gdk_pixbuf_get_height (pixbuf);
+  pixels    = gdk_pixbuf_get_pixels (pixbuf);
+  rowstride = gdk_pixbuf_get_rowstride (pixbuf);
 
   /* Validate the svg meta data.  */
-  eassert (fn_gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB);
-  eassert (fn_gdk_pixbuf_get_n_channels (pixbuf) == 4);
-  eassert (fn_gdk_pixbuf_get_has_alpha (pixbuf));
-  eassert (fn_gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
+  eassert (gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB);
+  eassert (gdk_pixbuf_get_n_channels (pixbuf) == 4);
+  eassert (gdk_pixbuf_get_has_alpha (pixbuf));
+  eassert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
 
   /* Try to create a x pixmap to hold the svg pixmap.  */
   if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0))
     {
-      fn_g_object_unref (pixbuf);
+      g_object_unref (pixbuf);
       return 0;
     }
 
@@ -8954,7 +8954,7 @@ svg_load_image (struct frame *f,         /* Pointer to 
emacs frame structure.  *
   free_color_table ();
 #endif /* COLOR_TABLE_SUPPORT */
 
-  fn_g_object_unref (pixbuf);
+  g_object_unref (pixbuf);
 
   img->width  = width;
   img->height = height;
@@ -8969,11 +8969,11 @@ svg_load_image (struct frame *f,         /* Pointer to 
emacs frame structure.  *
   return 1;
 
  rsvg_error:
-  fn_g_object_unref (rsvg_handle);
+  g_object_unref (rsvg_handle);
   /* FIXME: Use error->message so the user knows what is the actual
      problem with the image.  */
   image_error ("Error parsing SVG image `%s'", img->spec, Qnil);
-  fn_g_error_free (err);
+  g_error_free (err);
   return 0;
 }
 
@@ -8996,10 +8996,6 @@ static bool gs_image_p (Lisp_Object object);
 static bool gs_load (struct frame *f, struct image *img);
 static void gs_clear_image (struct frame *f, struct image *img);
 
-/* Keyword symbols.  */
-
-static Lisp_Object QCloader, QCbounding_box, QCpt_width, QCpt_height;
-
 /* Indices of image specification fields in gs_format, below.  */
 
 enum gs_keyword_index
@@ -9044,7 +9040,7 @@ static const struct image_keyword gs_format[GS_LAST] =
 
 static struct image_type gs_type =
 {
-  &Qpostscript,
+  SYMBOL_INDEX (Qpostscript),
   gs_image_p,
   gs_load,
   gs_clear_image,
@@ -9292,7 +9288,8 @@ DEFUN ("imagep", Fimagep, Simagep, 1, 1, 0,
 }
 
 
-DEFUN ("lookup-image", Flookup_image, Slookup_image, 1, 1, 0, "")
+DEFUN ("lookup-image", Flookup_image, Slookup_image, 1, 1, 0,
+       doc: /* */)
   (Lisp_Object spec)
 {
   ptrdiff_t id = -1;
@@ -9419,10 +9416,12 @@ as a ratio to the frame height and width.  If the value 
is
 non-numeric, there is no explicit limit on the size of images.  */);
   Vmax_image_size = make_float (MAX_IMAGE_SIZE);
 
+  /* Other symbols.  */
   DEFSYM (Qcount, "count");
   DEFSYM (Qextension_data, "extension-data");
   DEFSYM (Qdelay, "delay");
 
+  /* Keywords.  */
   DEFSYM (QCascent, ":ascent");
   DEFSYM (QCmargin, ":margin");
   DEFSYM (QCrelief, ":relief");
@@ -9437,6 +9436,7 @@ non-numeric, there is no explicit limit on the size of 
images.  */);
   DEFSYM (QCcolor_adjustment, ":color-adjustment");
   DEFSYM (QCmask, ":mask");
 
+  /* Other symbols.  */
   DEFSYM (Qlaplace, "laplace");
   DEFSYM (Qemboss, "emboss");
   DEFSYM (Qedge_detection, "edge-detection");
@@ -9454,6 +9454,10 @@ non-numeric, there is no explicit limit on the size of 
images.  */);
 #endif /* HAVE_GHOSTSCRIPT */
 
 #ifdef HAVE_NTGUI
+  /* Versions of libpng, libgif, and libjpeg that we were compiled with,
+     or -1 if no PNG/GIF support was compiled in.  This is tested by
+     w32-win.el to correctly set up the alist used to search for the
+     respective image libraries.  */
   DEFSYM (Qlibpng_version, "libpng-version");
   Fset (Qlibpng_version,
 #if HAVE_PNG
diff --git a/src/indent.c b/src/indent.c
index e6b267a..8660400 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1,5 +1,5 @@
 /* Indentation functions.
-   Copyright (C) 1985-1988, 1993-1995, 1998, 2000-2014 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1998, 2000-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -439,7 +439,7 @@ current_column (void)
            /* With a display table entry, C is displayed as is, and
               not displayed as \NNN or as ^N.  If C is a single-byte
               character, it takes one column.  If C is multi-byte in
-              an unibyte buffer, it's translated to unibyte, so it
+              a unibyte buffer, it's translated to unibyte, so it
               also takes one column.  */
            ++col;
          else
@@ -2137,10 +2137,15 @@ whether or not it is currently displayed in some 
window.  */)
              if (nlines > 1)
                move_it_by_lines (&it, min (PTRDIFF_MAX, nlines - 1));
            }
-         else
+         else  /* it_start = ZV */
            {
              it.vpos = 0;
              move_it_by_lines (&it, min (PTRDIFF_MAX, nlines));
+             /* We could have some display or overlay string at ZV,
+                in which case it.vpos will be nonzero now, while
+                actually we didn't move vertically at all.  */
+             if (IT_CHARPOS (it) == CHARPOS (pt) && CHARPOS (pt) == it_start)
+               it.vpos = 0;
            }
        }
 
diff --git a/src/indent.h b/src/indent.h
index 6bee4ae..cece9e4 100644
--- a/src/indent.h
+++ b/src/indent.h
@@ -1,5 +1,5 @@
 /* Definitions for interface to indent.c
-   Copyright (C) 1985-1986, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/inotify.c b/src/inotify.c
index c55b130..eddad73 100644
--- a/src/inotify.c
+++ b/src/inotify.c
@@ -1,6 +1,6 @@
 /* Inotify support for Emacs
 
-Copyright (C) 2012-2014 Free Software Foundation, Inc.
+Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -29,34 +29,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "frame.h" /* Required for termhooks.h.  */
 #include "termhooks.h"
 
-static Lisp_Object Qaccess;        /* IN_ACCESS */
-static Lisp_Object Qattrib;        /* IN_ATTRIB */
-static Lisp_Object Qclose_write;   /* IN_CLOSE_WRITE */
-static Lisp_Object Qclose_nowrite; /* IN_CLOSE_NOWRITE */
-static Lisp_Object Qcreate;        /* IN_CREATE */
-static Lisp_Object Qdelete;        /* IN_DELETE */
-static Lisp_Object Qdelete_self;   /* IN_DELETE_SELF */
-static Lisp_Object Qmodify;        /* IN_MODIFY */
-static Lisp_Object Qmove_self;     /* IN_MOVE_SELF */
-static Lisp_Object Qmoved_from;    /* IN_MOVED_FROM */
-static Lisp_Object Qmoved_to;      /* IN_MOVED_TO */
-static Lisp_Object Qopen;          /* IN_OPEN */
-
-static Lisp_Object Qall_events;    /* IN_ALL_EVENTS */
-static Lisp_Object Qmove;          /* IN_MOVE */
-static Lisp_Object Qclose;         /* IN_CLOSE */
-
-static Lisp_Object Qdont_follow;   /* IN_DONT_FOLLOW */
-static Lisp_Object Qexcl_unlink;   /* IN_EXCL_UNLINK */
-static Lisp_Object Qmask_add;      /* IN_MASK_ADD */
-static Lisp_Object Qoneshot;       /* IN_ONESHOT */
-static Lisp_Object Qonlydir;       /* IN_ONLYDIR */
-
-static Lisp_Object Qignored;       /* IN_IGNORED */
-static Lisp_Object Qisdir;         /* IN_ISDIR */
-static Lisp_Object Qq_overflow;    /* IN_Q_OVERFLOW */
-static Lisp_Object Qunmount;       /* IN_UNMOUNT */
-
 #include <sys/inotify.h>
 #include <sys/ioctl.h>
 
@@ -398,33 +370,34 @@ See inotify_rm_watch(2) for more information.
 void
 syms_of_inotify (void)
 {
-  DEFSYM (Qaccess, "access");
-  DEFSYM (Qattrib, "attrib");
-  DEFSYM (Qclose_write, "close-write");
+  DEFSYM (Qaccess, "access");          /* IN_ACCESS */
+  DEFSYM (Qattrib, "attrib");          /* IN_ATTRIB */
+  DEFSYM (Qclose_write, "close-write");        /* IN_CLOSE_WRITE */
   DEFSYM (Qclose_nowrite, "close-nowrite");
-  DEFSYM (Qcreate, "create");
-  DEFSYM (Qdelete, "delete");
-  DEFSYM (Qdelete_self, "delete-self");
-  DEFSYM (Qmodify, "modify");
-  DEFSYM (Qmove_self, "move-self");
-  DEFSYM (Qmoved_from, "moved-from");
-  DEFSYM (Qmoved_to, "moved-to");
-  DEFSYM (Qopen, "open");
-
-  DEFSYM (Qall_events, "all-events");
-  DEFSYM (Qmove, "move");
-  DEFSYM (Qclose, "close");
-
-  DEFSYM (Qdont_follow, "dont-follow");
-  DEFSYM (Qexcl_unlink, "excl-unlink");
-  DEFSYM (Qmask_add, "mask-add");
-  DEFSYM (Qoneshot, "oneshot");
-  DEFSYM (Qonlydir, "onlydir");
-
-  DEFSYM (Qignored, "ignored");
-  DEFSYM (Qisdir, "isdir");
-  DEFSYM (Qq_overflow, "q-overflow");
-  DEFSYM (Qunmount, "unmount");
+                                       /* IN_CLOSE_NOWRITE */
+  DEFSYM (Qcreate, "create");          /* IN_CREATE */
+  DEFSYM (Qdelete, "delete");          /* IN_DELETE */
+  DEFSYM (Qdelete_self, "delete-self");        /* IN_DELETE_SELF */
+  DEFSYM (Qmodify, "modify");          /* IN_MODIFY */
+  DEFSYM (Qmove_self, "move-self");    /* IN_MOVE_SELF */
+  DEFSYM (Qmoved_from, "moved-from");  /* IN_MOVED_FROM */
+  DEFSYM (Qmoved_to, "moved-to");      /* IN_MOVED_TO */
+  DEFSYM (Qopen, "open");              /* IN_OPEN */
+
+  DEFSYM (Qall_events, "all-events");  /* IN_ALL_EVENTS */
+  DEFSYM (Qmove, "move");              /* IN_MOVE */
+  DEFSYM (Qclose, "close");            /* IN_CLOSE */
+
+  DEFSYM (Qdont_follow, "dont-follow");        /* IN_DONT_FOLLOW */
+  DEFSYM (Qexcl_unlink, "excl-unlink");        /* IN_EXCL_UNLINK */
+  DEFSYM (Qmask_add, "mask-add");      /* IN_MASK_ADD */
+  DEFSYM (Qoneshot, "oneshot");                /* IN_ONESHOT */
+  DEFSYM (Qonlydir, "onlydir");                /* IN_ONLYDIR */
+
+  DEFSYM (Qignored, "ignored");                /* IN_IGNORED */
+  DEFSYM (Qisdir, "isdir");            /* IN_ISDIR */
+  DEFSYM (Qq_overflow, "q-overflow");  /* IN_Q_OVERFLOW */
+  DEFSYM (Qunmount, "unmount");                /* IN_UNMOUNT */
 
   defsubr (&Sinotify_add_watch);
   defsubr (&Sinotify_rm_watch);
diff --git a/src/insdel.c b/src/insdel.c
index 3133ca4..80650be 100644
--- a/src/insdel.c
+++ b/src/insdel.c
@@ -1,6 +1,6 @@
 /* Buffer insertion/deletion and gap motion for GNU Emacs.
-
-Copyright (C) 1985-1986, 1993-1995, 1997-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software
+   Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -51,8 +51,6 @@ static Lisp_Object combine_after_change_list;
 /* Buffer which combine_after_change_list is about.  */
 static Lisp_Object combine_after_change_buffer;
 
-Lisp_Object Qinhibit_modification_hooks;
-
 static void signal_before_change (ptrdiff_t, ptrdiff_t, ptrdiff_t *);
 
 /* Also used in marker.c to enable expensive marker checks.  */
@@ -1202,10 +1200,10 @@ adjust_after_replace (ptrdiff_t from, ptrdiff_t 
from_byte,
 
   /* Update various buffer positions for the new text.  */
   GAP_SIZE -= len_byte;
-  ZV += len; Z+= len;
+  ZV += len; Z += len;
   ZV_BYTE += len_byte; Z_BYTE += len_byte;
   GPT += len; GPT_BYTE += len_byte;
-  if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
+  if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor.  */
 
   if (nchars_del > 0)
     adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del,
@@ -1228,7 +1226,7 @@ adjust_after_replace (ptrdiff_t from, ptrdiff_t from_byte,
   if (from < PT)
     adjust_point (len - nchars_del, len_byte - nbytes_del);
 
-  /* As byte combining will decrease Z, we must check this again. */
+  /* As byte combining will decrease Z, we must check this again.  */
   if (Z - GPT < END_UNCHANGED)
     END_UNCHANGED = Z - GPT;
 
@@ -1599,7 +1597,7 @@ del_range_byte (ptrdiff_t from_byte, ptrdiff_t to_byte, 
bool prepare)
 {
   ptrdiff_t from, to;
 
-  /* Make args be valid */
+  /* Make args be valid.  */
   if (from_byte < BEGV_BYTE)
     from_byte = BEGV_BYTE;
   if (to_byte > ZV_BYTE)
@@ -1681,7 +1679,7 @@ del_range_both (ptrdiff_t from, ptrdiff_t from_byte,
 /* Delete a range of text, specified both as character positions
    and byte positions.  FROM and TO are character positions,
    while FROM_BYTE and TO_BYTE are byte positions.
-   If RET_STRING, the deleted area is returned as a string. */
+   If RET_STRING, the deleted area is returned as a string.  */
 
 Lisp_Object
 del_range_2 (ptrdiff_t from, ptrdiff_t from_byte,
@@ -1780,8 +1778,6 @@ modify_text (ptrdiff_t start, ptrdiff_t end)
   bset_point_before_scroll (current_buffer, Qnil);
 }
 
-Lisp_Object Qregion_extract_function;
-
 /* Check that it is okay to modify the buffer between START and END,
    which are char positions.
 
@@ -1994,13 +1990,12 @@ signal_before_change (ptrdiff_t start_int, ptrdiff_t 
end_int,
     {
       PRESERVE_VALUE;
       PRESERVE_START_END;
-      Frun_hooks (1, &Qfirst_change_hook);
+      run_hook (Qfirst_change_hook);
     }
 
   /* Now run the before-change-functions if any.  */
   if (!NILP (Vbefore_change_functions))
     {
-      Lisp_Object args[3];
       rvoe_arg.location = &Vbefore_change_functions;
       rvoe_arg.errorp = 1;
 
@@ -2011,10 +2006,8 @@ signal_before_change (ptrdiff_t start_int, ptrdiff_t 
end_int,
       record_unwind_protect_ptr (reset_var_on_error, &rvoe_arg);
 
       /* Actually run the hook functions.  */
-      args[0] = Qbefore_change_functions;
-      args[1] = FETCH_START;
-      args[2] = FETCH_END;
-      Frun_hook_with_args (3, args);
+      CALLN (Frun_hook_with_args, Qbefore_change_functions,
+            FETCH_START, FETCH_END);
 
       /* There was no error: unarm the reset_on_error.  */
       rvoe_arg.errorp = 0;
@@ -2082,7 +2075,6 @@ signal_after_change (ptrdiff_t charpos, ptrdiff_t lendel, 
ptrdiff_t lenins)
 
   if (!NILP (Vafter_change_functions))
     {
-      Lisp_Object args[4];
       rvoe_arg.location = &Vafter_change_functions;
       rvoe_arg.errorp = 1;
 
@@ -2090,11 +2082,9 @@ signal_after_change (ptrdiff_t charpos, ptrdiff_t 
lendel, ptrdiff_t lenins)
       record_unwind_protect_ptr (reset_var_on_error, &rvoe_arg);
 
       /* Actually run the hook functions.  */
-      args[0] = Qafter_change_functions;
-      XSETFASTINT (args[1], charpos);
-      XSETFASTINT (args[2], charpos + lenins);
-      XSETFASTINT (args[3], lendel);
-      Frun_hook_with_args (4, args);
+      CALLN (Frun_hook_with_args, Qafter_change_functions,
+            make_number (charpos), make_number (charpos + lenins),
+            make_number (lendel));
 
       /* There was no error: unarm the reset_on_error.  */
       rvoe_arg.errorp = 0;
diff --git a/src/intervals.c b/src/intervals.c
index 842e0c2..78e0f50 100644
--- a/src/intervals.c
+++ b/src/intervals.c
@@ -1,5 +1,5 @@
 /* Code for doing intervals.
-   Copyright (C) 1993-1995, 1997-1998, 2001-2014 Free Software
+   Copyright (C) 1993-1995, 1997-1998, 2001-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/intervals.h b/src/intervals.h
index bd1f49d..b2260d0 100644
--- a/src/intervals.h
+++ b/src/intervals.h
@@ -1,5 +1,5 @@
 /* Definitions and global variables for intervals.
-   Copyright (C) 1993-1994, 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2000-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -271,21 +271,7 @@ extern INTERVAL interval_of (ptrdiff_t, Lisp_Object);
 /* Defined in xdisp.c.  */
 extern int invisible_p (Lisp_Object, Lisp_Object);
 
-/* Declared in textprop.c.  */
-
-/* Types of hooks.  */
-extern Lisp_Object Qpoint_left;
-extern Lisp_Object Qpoint_entered;
-extern Lisp_Object Qmodification_hooks;
-extern Lisp_Object Qcategory;
-extern Lisp_Object Qlocal_map;
-
-/* Visual properties text (including strings) may have.  */
-extern Lisp_Object Qinvisible, Qintangible;
-
-/* Sticky properties.  */
-extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
-
+/* Defined in textprop.c.  */
 extern Lisp_Object copy_text_properties (Lisp_Object, Lisp_Object,
                                          Lisp_Object, Lisp_Object,
                                          Lisp_Object, Lisp_Object);
diff --git a/src/keyboard.c b/src/keyboard.c
index 908eb59..7718f8e 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -1,6 +1,7 @@
 /* Keyboard and mouse input; editor command loop.
 
-Copyright (C) 1985-1989, 1993-1997, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1989, 1993-1997, 1999-2015 Free Software Foundation,
+Inc.
 
 This file is part of GNU Emacs.
 
@@ -87,11 +88,6 @@ static KBOARD *all_kboards;
 /* True in the single-kboard state, false in the any-kboard state.  */
 static bool single_kboard;
 
-/* Non-nil disable property on a command means
-   do not execute it; call disabled-command-function's value instead.  */
-Lisp_Object Qdisabled;
-static Lisp_Object Qdisabled_command_function;
-
 #define NUM_RECENT_KEYS (300)
 
 /* Index for storing next element into recent_keys.  */
@@ -231,48 +227,65 @@ static ptrdiff_t last_point_position;
    'volatile' here.  */
 Lisp_Object internal_last_event_frame;
 
-static Lisp_Object Qgui_set_selection, Qhandle_switch_frame;
-static Lisp_Object Qhandle_select_window;
-Lisp_Object QPRIMARY;
-
-static Lisp_Object Qself_insert_command;
-static Lisp_Object Qforward_char;
-static Lisp_Object Qbackward_char;
-Lisp_Object Qundefined;
-static Lisp_Object Qtimer_event_handler;
-
 /* `read_key_sequence' stores here the command definition of the
    key sequence that it reads.  */
 static Lisp_Object read_key_sequence_cmd;
 static Lisp_Object read_key_sequence_remapped;
 
-static Lisp_Object Qinput_method_function;
-
-static Lisp_Object Qdeactivate_mark;
-
-Lisp_Object Qrecompute_lucid_menubar, Qactivate_menubar_hook;
-
-static Lisp_Object Qecho_area_clear_hook;
-
-/* Hooks to run before and after each command.  */
-static Lisp_Object Qpre_command_hook;
-static Lisp_Object Qpost_command_hook;
-
-static Lisp_Object Qdeferred_action_function;
-
-static Lisp_Object Qdelayed_warnings_hook;
-
-static Lisp_Object Qinput_method_exit_on_first_char;
-static Lisp_Object Qinput_method_use_echo_area;
-
-static Lisp_Object Qhelp_form_show;
-
 /* File in which we write all commands we read.  */
 static FILE *dribble;
 
-/* Nonzero if input is available.  */
+/* True if input is available.  */
 bool input_pending;
 
+/* True if more input was available last time we read an event.
+
+   Since redisplay can take a significant amount of time and is not
+   indispensable to perform the user's commands, when input arrives
+   "too fast", Emacs skips redisplay.  More specifically, if the next
+   command has already been input when we finish the previous command,
+   we skip the intermediate redisplay.
+
+   This is useful to try and make sure Emacs keeps up with fast input
+   rates, such as auto-repeating keys.  But in some cases, this proves
+   too conservative: we may end up disabling redisplay for the whole
+   duration of a key repetition, even though we could afford to
+   redisplay every once in a while.
+
+   So we "sample" the input_pending flag before running a command and
+   use *that* value after running the command to decide whether to
+   skip redisplay or not.  This way, we only skip redisplay if we
+   really can't keep up with the repeat rate.
+
+   This only makes a difference if the next input arrives while running the
+   command, which is very unlikely if the command is executed quickly.
+   IOW this tends to avoid skipping redisplay after a long running command
+   (which is a case where skipping redisplay is not very useful since the
+   redisplay time is small compared to the time it took to run the command).
+
+   A typical use case is when scrolling.  Scrolling time can be split into:
+   - Time to do jit-lock on the newly displayed portion of buffer.
+   - Time to run the actual scroll command.
+   - Time to perform the redisplay.
+   Jit-lock can happen either during the command or during the redisplay.
+   In the most painful cases, the jit-lock time is the one that dominates.
+   Also jit-lock can be tweaked (via jit-lock-defer) to delay its job, at the
+   cost of temporary inaccuracy in display and scrolling.
+   So without input_was_pending, what typically happens is the following:
+   - when the command starts, there's no pending input (yet).
+   - the scroll command triggers jit-lock.
+   - during the long jit-lock time the next input arrives.
+   - at the end of the command, we check input_pending and hence decide to
+     skip redisplay.
+   - we read the next input and start over.
+   End result: all the hard work of jit-locking is "wasted" since redisplay
+   doesn't actually happens (at least not before the input rate slows down).
+   With input_was_pending redisplay is still skipped if Emacs can't keep up
+   with the input rate, but if it can keep up just enough that there's no
+   input_pending when we begin the command, then redisplay is not skipped
+   which results in better feedback to the user.  */
+static bool input_was_pending;
+
 /* Circular buffer for pre-read keyboard input.  */
 
 static struct input_event kbd_buffer[KBD_BUFFER_SIZE];
@@ -297,83 +310,12 @@ static struct input_event * volatile kbd_store_ptr;
    dequeuing functions?  Such a flag could be screwed up by interrupts
    at inopportune times.  */
 
-/* Symbols to head events.  */
-static Lisp_Object Qmouse_movement;
-static Lisp_Object Qscroll_bar_movement;
-Lisp_Object Qswitch_frame;
-static Lisp_Object Qfocus_in, Qfocus_out;
-static Lisp_Object Qdelete_frame;
-static Lisp_Object Qiconify_frame;
-static Lisp_Object Qmake_frame_visible;
-static Lisp_Object Qselect_window;
-Lisp_Object Qhelp_echo;
-
-static Lisp_Object Qmouse_fixup_help_message;
-
-/* Symbols to denote kinds of events.  */
-static Lisp_Object Qfunction_key;
-Lisp_Object Qmouse_click;
-#ifdef HAVE_NTGUI
-Lisp_Object Qlanguage_change;
-#endif
-static Lisp_Object Qdrag_n_drop;
-static Lisp_Object Qsave_session;
-#ifdef HAVE_DBUS
-static Lisp_Object Qdbus_event;
-#endif
-#ifdef USE_FILE_NOTIFY
-static Lisp_Object Qfile_notify;
-#endif /* USE_FILE_NOTIFY */
-static Lisp_Object Qconfig_changed_event;
-
-/* Lisp_Object Qmouse_movement; - also an event header */
-
-/* Properties of event headers.  */
-Lisp_Object Qevent_kind;
-static Lisp_Object Qevent_symbol_elements;
-
-/* Menu and tool bar item parts.  */
-static Lisp_Object Qmenu_enable;
-static Lisp_Object QCenable, QCvisible, QChelp, QCkeys, QCkey_sequence;
-Lisp_Object QCfilter;
-
-/* Non-nil disable property on a command means
-   do not execute it; call disabled-command-function's value instead.  */
-Lisp_Object QCtoggle, QCradio;
-static Lisp_Object QCbutton, QClabel;
-
-static Lisp_Object QCvert_only;
-
-/* An event header symbol HEAD may have a property named
-   Qevent_symbol_element_mask, which is of the form (BASE MODIFIERS);
-   BASE is the base, unmodified version of HEAD, and MODIFIERS is the
-   mask of modifiers applied to it.  If present, this is used to help
-   speed up parse_modifiers.  */
-Lisp_Object Qevent_symbol_element_mask;
-
-/* An unmodified event header BASE may have a property named
-   Qmodifier_cache, which is an alist mapping modifier masks onto
-   modified versions of BASE.  If present, this helps speed up
-   apply_modifiers.  */
-static Lisp_Object Qmodifier_cache;
-
-/* Symbols to use for parts of windows.  */
-Lisp_Object Qmode_line;
-Lisp_Object Qvertical_line;
-Lisp_Object Qright_divider, Qbottom_divider;
-Lisp_Object Qmenu_bar;
-
-static Lisp_Object Qecho_keystrokes;
-
 static void recursive_edit_unwind (Lisp_Object buffer);
 static Lisp_Object command_loop (void);
-static Lisp_Object Qcommand_execute;
 
 static void echo_now (void);
 static ptrdiff_t echo_length (void);
 
-static Lisp_Object Qpolling_period;
-
 /* Incremented whenever a timer is run.  */
 unsigned timers_run;
 
@@ -1221,7 +1163,8 @@ top_level_1 (Lisp_Object ignore)
 
 DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, "",
        doc: /* Exit all recursive editing levels.
-This also exits all active minibuffers.  */)
+This also exits all active minibuffers.  */
+       attributes: noreturn)
   (void)
 {
 #ifdef HAVE_WINDOW_SYSTEM
@@ -1244,7 +1187,8 @@ user_error (const char *msg)
 
 /* _Noreturn will be added to prototype by make-docfile.  */
 DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 
0, "",
-       doc: /* Exit from the innermost recursive edit or minibuffer.  */)
+       doc: /* Exit from the innermost recursive edit or minibuffer.  */
+       attributes: noreturn)
   (void)
 {
   if (command_loop_level > 0 || minibuf_level > 0)
@@ -1255,7 +1199,8 @@ DEFUN ("exit-recursive-edit", Fexit_recursive_edit, 
Sexit_recursive_edit, 0, 0,
 
 /* _Noreturn will be added to prototype by make-docfile.  */
 DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 
0, 0, "",
-       doc: /* Abort the command that requested this recursive edit or 
minibuffer input.  */)
+       doc: /* Abort the command that requested this recursive edit or 
minibuffer input.  */
+       attributes: noreturn)
   (void)
 {
   if (command_loop_level > 0 || minibuf_level > 0)
@@ -1664,10 +1609,7 @@ command_loop_1 (void)
                }
 
              if (current_buffer != prev_buffer || MODIFF != prev_modiff)
-                {
-                  Lisp_Object hook = intern ("activate-mark-hook");
-                  Frun_hooks (1, &hook);
-                }
+               run_hook (intern ("activate-mark-hook"));
            }
 
          Vsaved_region_selection = Qnil;
@@ -1902,7 +1844,7 @@ safe_run_hooks_error (Lisp_Object error, ptrdiff_t nargs, 
Lisp_Object *args)
   AUTO_STRING (format, "Error in %s (%S): %S");
   Lisp_Object hook = args[0];
   Lisp_Object fun = args[1];
-  Fmessage (4, (Lisp_Object []) {format, hook, fun, error});
+  CALLN (Fmessage, format, hook, fun, error);
 
   if (SYMBOLP (hook))
     {
@@ -1935,13 +1877,10 @@ safe_run_hooks_error (Lisp_Object error, ptrdiff_t 
nargs, Lisp_Object *args)
 static Lisp_Object
 safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Object *args)
 {
-  Lisp_Object iargs[2];
-
   eassert (nargs == 2);
-  /* Yes, run_hook_with_args works this way.  */
-  iargs[0] = args[1];
-  iargs[1] = args[0];
-  internal_condition_case_n (safe_run_hooks_1, 2, iargs,
+  /* Yes, run_hook_with_args works with args in the other order.  */
+  internal_condition_case_n (safe_run_hooks_1,
+                            2, ((Lisp_Object []) {args[1], args[0]}),
                             Qt, safe_run_hooks_error);
   return Qnil;
 }
@@ -1953,16 +1892,12 @@ safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Object 
*args)
 void
 safe_run_hooks (Lisp_Object hook)
 {
-  Lisp_Object args[2];
   struct gcpro gcpro1;
   ptrdiff_t count = SPECPDL_INDEX ();
 
-  args[0] = hook;
-  args[1] = hook;
-
   GCPRO1 (hook);
   specbind (Qinhibit_quit, Qt);
-  run_hook_with_args (2, args, safe_run_hook_funcall);
+  run_hook_with_args (2, ((Lisp_Object []) {hook, hook}), 
safe_run_hook_funcall);
   unbind_to (count, Qnil);
   UNGCPRO;
 }
@@ -2403,9 +2338,9 @@ echo_keystrokes_p (void)
 /* commandflag 0 means do not autosave, but do redisplay.
    -1 means do not redisplay, but do autosave.
    -2 means do neither.
-   1 means do both.  */
+   1 means do both.
 
-/* The argument MAP is a keymap for menu prompting.
+   The argument MAP is a keymap for menu prompting.
 
    PREV_EVENT is the previous input event, or nil if we are reading
    the first event of a key sequence (or not reading a key sequence).
@@ -2582,11 +2517,13 @@ read_char (int commandflag, Lisp_Object map,
           user-visible, such as X selection_request events.  */
       if (input_pending
          || detect_input_pending_run_timers (0))
-       swallow_events (0);             /* May clear input_pending.  */
+       swallow_events (false);         /* May clear input_pending.  */
 
       /* Redisplay if no pending input.  */
-      while (!input_pending)
+      while (!(input_pending
+              && (input_was_pending || !redisplay_dont_pause)))
        {
+         input_was_pending = input_pending;
          if (help_echo_showing_p && !EQ (selected_window, minibuf_window))
            redisplay_preserve_echo_area (5);
          else
@@ -2598,7 +2535,7 @@ read_char (int commandflag, Lisp_Object map,
 
          /* Input arrived and pre-empted redisplay.
             Process any events which are not user-visible.  */
-         swallow_events (0);
+         swallow_events (false);
          /* If that cleared input_pending, try again to redisplay.  */
        }
 
@@ -3255,6 +3192,7 @@ read_char (int commandflag, Lisp_Object map,
 
  exit:
   RESUME_POLLING;
+  input_was_pending = input_pending;
   RETURN_UNGCPRO (c);
 }
 
@@ -3701,7 +3639,9 @@ kbd_buffer_store_event_hold (register struct input_event 
*event,
      as input, set quit-flag to cause an interrupt.  */
   if (!NILP (Vthrow_on_input)
       && event->kind != FOCUS_IN_EVENT
+      && event->kind != FOCUS_OUT_EVENT
       && event->kind != HELP_EVENT
+      && event->kind != ICONIFY_EVENT
       && event->kind != DEICONIFY_EVENT)
     {
       Vquit_flag = Vthrow_on_input;
@@ -3878,7 +3818,7 @@ kbd_buffer_get_event (KBOARD **kbp,
   Lisp_Object obj;
 
 #ifdef subprocesses
-  if (kbd_on_hold_p () && kbd_buffer_nr_stored () < KBD_BUFFER_SIZE/4)
+  if (kbd_on_hold_p () && kbd_buffer_nr_stored () < KBD_BUFFER_SIZE / 4)
     {
       /* Start reading input again because we have processed enough to
          be able to accept new events again.  */
@@ -4083,11 +4023,7 @@ kbd_buffer_get_event (KBOARD **kbp,
        {
 #ifdef HAVE_W32NOTIFY
          /* Make an event (file-notify (DESCRIPTOR ACTION FILE) CALLBACK).  */
-         obj = list3 (Qfile_notify,
-                      list3 (make_number (event->code),
-                             XCAR (event->arg),
-                             XCDR (event->arg)),
-                      event->frame_or_window);
+         obj = list3 (Qfile_notify, event->arg, event->frame_or_window);
 #else
           obj = make_lispy_event (event);
 #endif
@@ -4370,7 +4306,7 @@ swallow_events (bool do_display)
   old_timers_run = timers_run;
   get_input_pending (READABLE_EVENTS_DO_TIMERS_NOW);
 
-  if (timers_run != old_timers_run && do_display)
+  if (!input_pending && timers_run != old_timers_run && do_display)
     redisplay_preserve_echo_area (7);
 }
 
@@ -5226,22 +5162,17 @@ static const char *const lispy_drag_n_drop_names[] =
   "drag-n-drop"
 };
 
-/* Scroll bar parts.  */
-static Lisp_Object Qabove_handle, Qhandle, Qbelow_handle;
-static Lisp_Object Qbefore_handle, Qhorizontal_handle, Qafter_handle;
-Lisp_Object Qup, Qdown, Qtop, Qbottom;
-static Lisp_Object Qleftmost, Qrightmost;
-static Lisp_Object Qend_scroll;
-static Lisp_Object Qratio;
-
-/* An array of scroll bar parts, indexed by an enum scroll_bar_part value.
-   Note that Qnil corresponds to scroll_bar_nowhere and should not appear
-   in Lisp events.  */
-static Lisp_Object *const scroll_bar_parts[] = {
-  &Qnil, &Qabove_handle, &Qhandle, &Qbelow_handle,
-  &Qup, &Qdown, &Qtop, &Qbottom, &Qend_scroll, &Qratio,
-  &Qbefore_handle, &Qhorizontal_handle, &Qafter_handle,
-  &Qleft, &Qright, &Qleftmost, &Qrightmost, &Qend_scroll, &Qratio
+/* An array of symbol indexes of scroll bar parts, indexed by an enum
+   scroll_bar_part value.  Note that Qnil corresponds to
+   scroll_bar_nowhere and should not appear in Lisp events.  */
+static short const scroll_bar_parts[] = {
+  SYMBOL_INDEX (Qnil), SYMBOL_INDEX (Qabove_handle), SYMBOL_INDEX (Qhandle),
+  SYMBOL_INDEX (Qbelow_handle), SYMBOL_INDEX (Qup), SYMBOL_INDEX (Qdown),
+  SYMBOL_INDEX (Qtop), SYMBOL_INDEX (Qbottom), SYMBOL_INDEX (Qend_scroll),
+  SYMBOL_INDEX (Qratio), SYMBOL_INDEX (Qbefore_handle),
+  SYMBOL_INDEX (Qhorizontal_handle), SYMBOL_INDEX (Qafter_handle),
+  SYMBOL_INDEX (Qleft), SYMBOL_INDEX (Qright), SYMBOL_INDEX (Qleftmost),
+  SYMBOL_INDEX (Qrightmost), SYMBOL_INDEX (Qend_scroll), SYMBOL_INDEX (Qratio)
 };
 
 /* A vector, indexed by button number, giving the down-going location
@@ -5514,7 +5445,8 @@ static Lisp_Object
 make_scroll_bar_position (struct input_event *ev, Lisp_Object type)
 {
   return list5 (ev->frame_or_window, type, Fcons (ev->x, ev->y),
-               make_number (ev->timestamp), *scroll_bar_parts[ev->part]);
+               make_number (ev->timestamp),
+               builtin_lisp_symbol (scroll_bar_parts[ev->part]));
 }
 
 /* Given a struct input_event, build the lisp event which represents
@@ -6153,7 +6085,7 @@ make_lispy_movement (struct frame *frame, Lisp_Object 
bar_window, enum scroll_ba
     {
       Lisp_Object part_sym;
 
-      part_sym = *scroll_bar_parts[(int) part];
+      part_sym = builtin_lisp_symbol (scroll_bar_parts[part]);
       return list2 (Qscroll_bar_movement,
                    list5 (bar_window,
                           Qvertical_scroll_bar,
@@ -6336,10 +6268,10 @@ apply_modifiers_uncached (int modifiers, char *base, 
int base_len, int base_len_
     if (modifiers & meta_modifier)  { *p++ = 'M'; *p++ = '-'; }
     if (modifiers & shift_modifier) { *p++ = 'S'; *p++ = '-'; }
     if (modifiers & super_modifier) { *p++ = 's'; *p++ = '-'; }
-    if (modifiers & double_modifier)  { strcpy (p, "double-");  p += 7; }
-    if (modifiers & triple_modifier)  { strcpy (p, "triple-");  p += 7; }
-    if (modifiers & down_modifier)  { strcpy (p, "down-");  p += 5; }
-    if (modifiers & drag_modifier)  { strcpy (p, "drag-");  p += 5; }
+    if (modifiers & double_modifier) p = stpcpy (p, "double-");
+    if (modifiers & triple_modifier) p = stpcpy (p, "triple-");
+    if (modifiers & down_modifier) p = stpcpy (p, "down-");
+    if (modifiers & drag_modifier) p = stpcpy (p, "drag-");
     /* The click modifier is denoted by the absence of other modifiers.  */
 
     *p = '\0';
@@ -8017,11 +7949,6 @@ static Lisp_Object tool_bar_item_properties;
 
 static int ntool_bar_items;
 
-/* The symbols `:image' and `:rtl'.  */
-
-static Lisp_Object QCimage;
-static Lisp_Object QCrtl;
-
 /* Function prototypes.  */
 
 static void init_tool_bar_items (Lisp_Object);
@@ -10280,7 +10207,6 @@ On such systems, Emacs starts a subshell instead of 
suspending.  */)
   int old_height, old_width;
   int width, height;
   struct gcpro gcpro1;
-  Lisp_Object hook;
 
   if (tty_list && tty_list->next)
     error ("There are other tty frames open; close them before suspending 
Emacs");
@@ -10288,9 +10214,7 @@ On such systems, Emacs starts a subshell instead of 
suspending.  */)
   if (!NILP (stuffstring))
     CHECK_STRING (stuffstring);
 
-  /* Run the functions in suspend-hook.  */
-  hook = intern ("suspend-hook");
-  Frun_hooks (1, &hook);
+  run_hook (intern ("suspend-hook"));
 
   GCPRO1 (stuffstring);
   get_tty_size (fileno (CURTTY ()->input), &old_width, &old_height);
@@ -10314,9 +10238,7 @@ On such systems, Emacs starts a subshell instead of 
suspending.  */)
                       height - FRAME_MENU_BAR_LINES (SELECTED_FRAME ()),
                       0, 0, 0, 0);
 
-  /* Run suspend-resume-hook.  */
-  hook = intern ("suspend-resume-hook");
-  Frun_hooks (1, &hook);
+  run_hook (intern ("suspend-resume-hook"));
 
   UNGCPRO;
   return Qnil;
@@ -10807,25 +10729,25 @@ The elements of this list correspond to the arguments 
of
 `set-input-mode'.  */)
   (void)
 {
-  Lisp_Object val[4];
   struct frame *sf = XFRAME (selected_frame);
 
-  val[0] = interrupt_input ? Qt : Qnil;
+  Lisp_Object interrupt = interrupt_input ? Qt : Qnil;
+  Lisp_Object flow, meta;
   if (FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf))
     {
-      val[1] = FRAME_TTY (sf)->flow_control ? Qt : Qnil;
-      val[2] = (FRAME_TTY (sf)->meta_key == 2
-                ? make_number (0)
-                : (CURTTY ()->meta_key == 1 ? Qt : Qnil));
+      flow = FRAME_TTY (sf)->flow_control ? Qt : Qnil;
+      meta = (FRAME_TTY (sf)->meta_key == 2
+             ? make_number (0)
+             : (CURTTY ()->meta_key == 1 ? Qt : Qnil));
     }
   else
     {
-      val[1] = Qnil;
-      val[2] = Qt;
+      flow = Qnil;
+      meta = Qt;
     }
-  XSETFASTINT (val[3], quit_char);
+  Lisp_Object quit = make_number (quit_char);
 
-  return Flist (ARRAYELTS (val), val);
+  return list4 (interrupt, flow, meta, quit);
 }
 
 DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, 2, 4, 0,
@@ -11060,26 +10982,29 @@ init_keyboard (void)
 #endif
 }
 
-/* This type's only use is in syms_of_keyboard, to initialize the
-   event header symbols and put properties on them.  */
-struct event_head {
-  Lisp_Object *var;
-  const char *name;
-  Lisp_Object *kind;
+/* This type's only use is in syms_of_keyboard, to put properties on the
+   event header symbols.  */
+struct event_head
+{
+  short var;
+  short kind;
 };
 
 static const struct event_head head_table[] = {
-  {&Qmouse_movement,      "mouse-movement",      &Qmouse_movement},
-  {&Qscroll_bar_movement, "scroll-bar-movement", &Qmouse_movement},
-  {&Qswitch_frame,        "switch-frame",        &Qswitch_frame},
-  {&Qfocus_in,            "focus-in",            &Qfocus_in},
-  {&Qfocus_out,           "focus-out",          &Qfocus_out},
-  {&Qdelete_frame,        "delete-frame",        &Qdelete_frame},
-  {&Qiconify_frame,       "iconify-frame",       &Qiconify_frame},
-  {&Qmake_frame_visible,  "make-frame-visible",  &Qmake_frame_visible},
+  {SYMBOL_INDEX (Qmouse_movement),      SYMBOL_INDEX (Qmouse_movement)},
+  {SYMBOL_INDEX (Qscroll_bar_movement), SYMBOL_INDEX (Qmouse_movement)},
+
+  /* Some of the event heads.  */
+  {SYMBOL_INDEX (Qswitch_frame),        SYMBOL_INDEX (Qswitch_frame)},
+
+  {SYMBOL_INDEX (Qfocus_in),            SYMBOL_INDEX (Qfocus_in)},
+  {SYMBOL_INDEX (Qfocus_out),           SYMBOL_INDEX (Qfocus_out)},
+  {SYMBOL_INDEX (Qdelete_frame),        SYMBOL_INDEX (Qdelete_frame)},
+  {SYMBOL_INDEX (Qiconify_frame),       SYMBOL_INDEX (Qiconify_frame)},
+  {SYMBOL_INDEX (Qmake_frame_visible),  SYMBOL_INDEX (Qmake_frame_visible)},
   /* `select-window' should be handled just like `switch-frame'
      in read_key_sequence.  */
-  {&Qselect_window,       "select-window",       &Qswitch_frame}
+  {SYMBOL_INDEX (Qselect_window),       SYMBOL_INDEX (Qswitch_frame)}
 };
 
 void
@@ -11118,17 +11043,29 @@ syms_of_keyboard (void)
   DEFSYM (Qself_insert_command, "self-insert-command");
   DEFSYM (Qforward_char, "forward-char");
   DEFSYM (Qbackward_char, "backward-char");
+
+  /* Non-nil disable property on a command means do not execute it;
+     call disabled-command-function's value instead.  */
   DEFSYM (Qdisabled, "disabled");
+
   DEFSYM (Qundefined, "undefined");
+
+  /* Hooks to run before and after each command.  */
   DEFSYM (Qpre_command_hook, "pre-command-hook");
   DEFSYM (Qpost_command_hook, "post-command-hook");
+
   DEFSYM (Qdeferred_action_function, "deferred-action-function");
   DEFSYM (Qdelayed_warnings_hook, "delayed-warnings-hook");
   DEFSYM (Qfunction_key, "function-key");
+
+  /* The values of Qevent_kind properties.  */
   DEFSYM (Qmouse_click, "mouse-click");
+
   DEFSYM (Qdrag_n_drop, "drag-n-drop");
   DEFSYM (Qsave_session, "save-session");
   DEFSYM (Qconfig_changed_event, "config-changed-event");
+
+  /* Menu and tool bar item parts.  */
   DEFSYM (Qmenu_enable, "menu-enable");
 
 #ifdef HAVE_NTGUI
@@ -11143,6 +11080,7 @@ syms_of_keyboard (void)
   DEFSYM (Qfile_notify, "file-notify");
 #endif /* USE_FILE_NOTIFY */
 
+  /* Menu and tool bar item parts.  */
   DEFSYM (QCenable, ":enable");
   DEFSYM (QCvisible, ":visible");
   DEFSYM (QChelp, ":help");
@@ -11150,14 +11088,16 @@ syms_of_keyboard (void)
   DEFSYM (QCbutton, ":button");
   DEFSYM (QCkeys, ":keys");
   DEFSYM (QCkey_sequence, ":key-sequence");
+
+  /* Non-nil disable property on a command means
+     do not execute it; call disabled-command-function's value instead.  */
   DEFSYM (QCtoggle, ":toggle");
   DEFSYM (QCradio, ":radio");
   DEFSYM (QClabel, ":label");
   DEFSYM (QCvert_only, ":vert-only");
 
-  DEFSYM (Qmode_line, "mode-line");
+  /* Symbols to use for parts of windows.  */
   DEFSYM (Qvertical_line, "vertical-line");
-  DEFSYM (Qmenu_bar, "menu-bar");
   DEFSYM (Qright_divider, "right-divider");
   DEFSYM (Qbottom_divider, "bottom-divider");
 
@@ -11180,9 +11120,21 @@ syms_of_keyboard (void)
   DEFSYM (Qleftmost, "leftmost");
   DEFSYM (Qrightmost, "rightmost");
 
+  /* Properties of event headers.  */
   DEFSYM (Qevent_kind, "event-kind");
   DEFSYM (Qevent_symbol_elements, "event-symbol-elements");
+
+  /* An event header symbol HEAD may have a property named
+     Qevent_symbol_element_mask, which is of the form (BASE MODIFIERS);
+     BASE is the base, unmodified version of HEAD, and MODIFIERS is the
+     mask of modifiers applied to it.  If present, this is used to help
+     speed up parse_modifiers.  */
   DEFSYM (Qevent_symbol_element_mask, "event-symbol-element-mask");
+
+  /* An unmodified event header BASE may have a property named
+     Qmodifier_cache, which is an alist mapping modifier masks onto
+     modified versions of BASE.  If present, this helps speed up
+     apply_modifiers.  */
   DEFSYM (Qmodifier_cache, "modifier-cache");
 
   DEFSYM (Qrecompute_lucid_menubar, "recompute-lucid-menubar");
@@ -11191,7 +11143,10 @@ syms_of_keyboard (void)
   DEFSYM (Qpolling_period, "polling-period");
 
   DEFSYM (Qgui_set_selection, "gui-set-selection");
+
+  /* The primary selection.  */
   DEFSYM (QPRIMARY, "PRIMARY");
+
   DEFSYM (Qhandle_switch_frame, "handle-switch-frame");
   DEFSYM (Qhandle_select_window, "handle-select-window");
 
@@ -11206,17 +11161,26 @@ syms_of_keyboard (void)
   Fset (Qinput_method_exit_on_first_char, Qnil);
   Fset (Qinput_method_use_echo_area, Qnil);
 
+  /* Symbols to head events.  */
+  DEFSYM (Qmouse_movement, "mouse-movement");
+  DEFSYM (Qscroll_bar_movement, "scroll-bar-movement");
+  DEFSYM (Qswitch_frame, "switch-frame");
+  DEFSYM (Qfocus_in, "focus-in");
+  DEFSYM (Qfocus_out, "focus-out");
+  DEFSYM (Qdelete_frame, "delete-frame");
+  DEFSYM (Qiconify_frame, "iconify-frame");
+  DEFSYM (Qmake_frame_visible, "make-frame-visible");
+  DEFSYM (Qselect_window, "select-window");
   {
     int i;
-    int len = ARRAYELTS (head_table);
 
-    for (i = 0; i < len; i++)
+    for (i = 0; i < ARRAYELTS (head_table); i++)
       {
        const struct event_head *p = &head_table[i];
-       *p->var = intern_c_string (p->name);
-       staticpro (p->var);
-       Fput (*p->var, Qevent_kind, *p->kind);
-       Fput (*p->var, Qevent_symbol_elements, list1 (*p->var));
+       Lisp_Object var = builtin_lisp_symbol (p->var);
+       Lisp_Object kind = builtin_lisp_symbol (p->kind);
+       Fput (var, Qevent_kind, kind);
+       Fput (var, Qevent_symbol_elements, list1 (var));
       }
   }
 
@@ -11542,13 +11506,13 @@ with no modifiers; thus, setting 
`extra-keyboard-modifiers' to zero
 cancels any modification.  */);
   extra_keyboard_modifiers = 0;
 
+  DEFSYM (Qdeactivate_mark, "deactivate-mark");
   DEFVAR_LISP ("deactivate-mark", Vdeactivate_mark,
               doc: /* If an editing command sets this to t, deactivate the 
mark afterward.
 The command loop sets this to nil before each command,
 and tests the value when the command returns.
 Buffer modification stores t in this variable.  */);
   Vdeactivate_mark = Qnil;
-  DEFSYM (Qdeactivate_mark, "deactivate-mark");
   Fmake_variable_buffer_local (Qdeactivate_mark);
 
   DEFVAR_LISP ("pre-command-hook", Vpre_command_hook,
@@ -11868,7 +11832,7 @@ keys_of_keyboard (void)
      - we enter the second prompt.
        current-prefix-arg is non-nil, prefix-arg is nil.
      - before running the first real event, we run the special iconify-frame
-       event, but we pass the `special' arg to execute-command so
+       event, but we pass the `special' arg to command-execute so
        current-prefix-arg and prefix-arg are left untouched.
      - here we foolishly copy the non-nil current-prefix-arg to prefix-arg.
      - the next key event will have a spuriously non-nil current-prefix-arg.  
*/
diff --git a/src/keyboard.h b/src/keyboard.h
index da83b9b..0ce6d18 100644
--- a/src/keyboard.h
+++ b/src/keyboard.h
@@ -1,5 +1,5 @@
 /* Declarations useful when processing input.
-   Copyright (C) 1985-1987, 1993, 2001-2014 Free Software Foundation,
+   Copyright (C) 1985-1987, 1993, 2001-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -248,8 +248,6 @@ extern ptrdiff_t this_command_key_count;
    generated by the next character.  */
 extern Lisp_Object internal_last_event_frame;
 
-extern Lisp_Object Qrecompute_lucid_menubar, Qactivate_menubar_hook;
-
 /* This holds a Lisp vector that holds the properties of a single
    menu item while decoding it in parse_menu_item.
    Using a Lisp vector to hold this information while we decode it
@@ -387,25 +385,10 @@ extern void unuse_menu_items (void);
 #define POSN_INBUFFER_P(posn) (NILP (POSN_STRING (posn)))
 #define POSN_BUFFER_POSN(posn) (Fnth (make_number (5), (posn)))
 
-/* Some of the event heads.  */
-extern Lisp_Object Qswitch_frame;
-
-/* Properties on event heads.  */
-extern Lisp_Object Qevent_kind;
-
-/* The values of Qevent_kind properties.  */
-extern Lisp_Object Qmouse_click;
-
-extern Lisp_Object Qhelp_echo;
-
 /* Getting the kind of an event head.  */
 #define EVENT_HEAD_KIND(event_head) \
   (Fget ((event_head), Qevent_kind))
 
-/* Symbols to use for non-text mouse positions.  */
-extern Lisp_Object Qmode_line, Qvertical_line, Qheader_line;
-extern Lisp_Object Qright_divider, Qbottom_divider;
-
 /* True while doing kbd input.  */
 extern bool waiting_for_input;
 
@@ -415,9 +398,6 @@ extern struct timespec *input_available_clear_time;
 
 extern bool ignore_mouse_drag_p;
 
-/* The primary selection.  */
-extern Lisp_Object QPRIMARY;
-
 extern Lisp_Object parse_modifiers (Lisp_Object);
 extern Lisp_Object reorder_modifiers (Lisp_Object);
 extern Lisp_Object read_char (int, Lisp_Object, Lisp_Object,
@@ -428,17 +408,6 @@ extern int parse_solitary_modifier (Lisp_Object symbol);
 /* This is like Vthis_command, except that commands never set it.  */
 extern Lisp_Object real_this_command;
 
-/* Non-nil disable property on a command means
-   do not execute it; call disabled-command-function's value instead.  */
-extern Lisp_Object QCtoggle, QCradio;
-
-/* An event header symbol HEAD may have a property named
-   Qevent_symbol_element_mask, which is of the form (BASE MODIFIERS);
-   BASE is the base, unmodified version of HEAD, and MODIFIERS is the
-   mask of modifiers applied to it.  If present, this is used to help
-   speed up parse_modifiers.  */
-extern Lisp_Object Qevent_symbol_element_mask;
-
 extern int quit_char;
 
 extern unsigned int timers_run;
diff --git a/src/keymap.c b/src/keymap.c
index c7c7d19..34fe1cb 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -1,5 +1,5 @@
 /* Manipulation of keymaps
-   Copyright (C) 1985-1988, 1993-1995, 1998-2014 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1998-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -76,12 +76,6 @@ Lisp_Object control_x_map;   /* The keymap used for globally 
bound
                                   bindings when spaces are not encouraged
                                   in the minibuf.  */
 
-/* Keymap used for minibuffers when doing completion.  */
-/* Keymap used for minibuffers when doing completion and require a match.  */
-static Lisp_Object Qkeymapp, Qnon_ascii;
-Lisp_Object Qkeymap, Qmenu_item, Qremap;
-static Lisp_Object QCadvertised_binding;
-
 /* Alist of elements like (DEL . "\d").  */
 static Lisp_Object exclude_keys;
 
@@ -654,8 +648,6 @@ map_keymap (Lisp_Object map, map_keymap_function_t fun, 
Lisp_Object args,
   UNGCPRO;
 }
 
-static Lisp_Object Qkeymap_canonicalize;
-
 /* Same as map_keymap, but does it right, properly eliminating duplicate
    bindings due to inheritance.   */
 void
@@ -1300,7 +1292,7 @@ static Lisp_Object
 append_key (Lisp_Object key_sequence, Lisp_Object key)
 {
   AUTO_LIST1 (key_list, key);
-  return Fvconcat (2, ((Lisp_Object []) { key_sequence, key_list }));
+  return CALLN (Fvconcat, key_sequence, key_list);
 }
 
 /* Given a event type C which is a symbol,
@@ -1998,7 +1990,6 @@ then the value includes only maps for prefixes that start 
with PREFIX.  */)
     }
   return maps;
 }
-static Lisp_Object Qsingle_key_description, Qkey_description;
 
 /* This function cannot GC.  */
 
@@ -2444,8 +2435,7 @@ where_is_internal (Lisp_Object definition, Lisp_Object 
keymaps,
       if (NILP (where_is_cache))
        {
          /* We need to create the cache.  */
-         Lisp_Object args[2];
-         where_is_cache = Fmake_hash_table (0, args);
+         where_is_cache = Fmake_hash_table (0, NULL);
          where_is_cache_keymaps = Qt;
        }
       else
@@ -3734,12 +3724,15 @@ be preferred.  */);
   Vwhere_is_preferred_modifier = Qnil;
   where_is_preferred_modifier = 0;
 
+  DEFSYM (Qmenu_bar, "menu-bar");
+  DEFSYM (Qmode_line, "mode-line");
+
   staticpro (&Vmouse_events);
   Vmouse_events = listn (CONSTYPE_PURE, 9,
-                        intern_c_string ("menu-bar"),
+                        Qmenu_bar,
                         intern_c_string ("tool-bar"),
                         intern_c_string ("header-line"),
-                        intern_c_string ("mode-line"),
+                        Qmode_line,
                         intern_c_string ("mouse-1"),
                         intern_c_string ("mouse-2"),
                         intern_c_string ("mouse-3"),
@@ -3748,6 +3741,9 @@ be preferred.  */);
 
   DEFSYM (Qsingle_key_description, "single-key-description");
   DEFSYM (Qkey_description, "key-description");
+
+  /* Keymap used for minibuffers when doing completion.  */
+  /* Keymap used for minibuffers when doing completion and require a match.  */
   DEFSYM (Qkeymapp, "keymapp");
   DEFSYM (Qnon_ascii, "non-ascii");
   DEFSYM (Qmenu_item, "menu-item");
diff --git a/src/keymap.h b/src/keymap.h
index b01886d..215dd3f 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -1,5 +1,5 @@
 /* Functions to manipulate keymaps.
-   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -30,9 +30,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #define KEY_DESCRIPTION_SIZE ((2 * 6) + 1 + (CHARACTERBITS / 3) + 1 + 1)
 
 #define KEYMAPP(m) (!NILP (get_keymap (m, false, false)))
-extern Lisp_Object Qkeymap, Qmenu_bar;
-extern Lisp_Object Qremap;
-extern Lisp_Object Qmenu_item;
 extern Lisp_Object current_global_map;
 extern char *push_key_description (EMACS_INT, char *);
 extern Lisp_Object access_keymap (Lisp_Object, Lisp_Object, bool, bool, bool);
diff --git a/src/lastfile.c b/src/lastfile.c
index 84b28b0..1c8e1f3 100644
--- a/src/lastfile.c
+++ b/src/lastfile.c
@@ -1,5 +1,5 @@
 /* Mark end of data space to dump as pure, for GNU Emacs.
-   Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/lisp.h b/src/lisp.h
index 44d28c2..e3ae396 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1,6 +1,6 @@
 /* Fundamental definitions for GNU Emacs Lisp interpreter.
 
-Copyright (C) 1985-1987, 1993-1995, 1997-2014 Free Software Foundation,
+Copyright (C) 1985-1987, 1993-1995, 1997-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -44,12 +44,13 @@ INLINE_HEADER_BEGIN
    definitions or enums visible to the debugger.  It's used for symbols
    that .gdbinit needs.  */
 
+#define DECLARE_GDB_SYM(type, id) type const id EXTERNALLY_VISIBLE
 #ifdef MAIN_PROGRAM
-# define DEFINE_GDB_SYMBOL_BEGIN(type, id) type const id EXTERNALLY_VISIBLE
+# define DEFINE_GDB_SYMBOL_BEGIN(type, id) DECLARE_GDB_SYM (type, id)
 # define DEFINE_GDB_SYMBOL_END(id) = id;
 #else
-# define DEFINE_GDB_SYMBOL_BEGIN(type, id)
-# define DEFINE_GDB_SYMBOL_END(val)
+# define DEFINE_GDB_SYMBOL_BEGIN(type, id) extern DECLARE_GDB_SYM (type, id)
+# define DEFINE_GDB_SYMBOL_END(val) ;
 #endif
 
 /* The ubiquitous max and min macros.  */
@@ -232,8 +233,8 @@ extern bool suppress_checking EXTERNALLY_VISIBLE;
 
    USE_LSB_TAG not only requires the least 3 bits of pointers returned by
    malloc to be 0 but also needs to be able to impose a mult-of-8 alignment
-   on the few static Lisp_Objects used: all the defsubr as well
-   as the two special buffers buffer_defaults and buffer_local_symbols.  */
+   on the few static Lisp_Objects used: lispsym, all the defsubr, and
+   the two special buffers buffer_defaults and buffer_local_symbols.  */
 
 enum Lisp_Bits
   {
@@ -257,16 +258,17 @@ enum Lisp_Bits
 
 /* The maximum value that can be stored in a EMACS_INT, assuming all
    bits other than the type bits contribute to a nonnegative signed value.
-   This can be used in #if, e.g., '#if VAL_MAX < UINTPTR_MAX' below.  */
+   This can be used in #if, e.g., '#if USB_TAG' below expands to an
+   expression involving VAL_MAX.  */
 #define VAL_MAX (EMACS_INT_MAX >> (GCTYPEBITS - 1))
 
 /* Whether the least-significant bits of an EMACS_INT contain the tag.
-   On hosts where pointers-as-ints do not exceed VAL_MAX, USE_LSB_TAG is:
+   On hosts where pointers-as-ints do not exceed VAL_MAX / 2, USE_LSB_TAG is:
     a. unnecessary, because the top bits of an EMACS_INT are unused, and
     b. slower, because it typically requires extra masking.
    So, USE_LSB_TAG is true only on hosts where it might be useful.  */
 DEFINE_GDB_SYMBOL_BEGIN (bool, USE_LSB_TAG)
-#define USE_LSB_TAG (EMACS_INT_MAX >> GCTYPEBITS < INTPTR_MAX)
+#define USE_LSB_TAG (VAL_MAX / 2 < INTPTR_MAX)
 DEFINE_GDB_SYMBOL_END (USE_LSB_TAG)
 
 #if !USE_LSB_TAG && !defined WIDE_EMACS_INT
@@ -336,7 +338,7 @@ error !;
 #define lisp_h_CONSP(x) (XTYPE (x) == Lisp_Cons)
 #define lisp_h_EQ(x, y) (XLI (x) == XLI (y))
 #define lisp_h_FLOATP(x) (XTYPE (x) == Lisp_Float)
-#define lisp_h_INTEGERP(x) ((XTYPE (x) & ~Lisp_Int1) == 0)
+#define lisp_h_INTEGERP(x) ((XTYPE (x) & (Lisp_Int0 | ~Lisp_Int1)) == 
Lisp_Int0)
 #define lisp_h_MARKERP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Marker)
 #define lisp_h_MISCP(x) (XTYPE (x) == Lisp_Misc)
 #define lisp_h_NILP(x) EQ (x, Qnil)
@@ -352,19 +354,22 @@ error !;
 #define lisp_h_XCONS(a) \
    (eassert (CONSP (a)), (struct Lisp_Cons *) XUNTAG (a, Lisp_Cons))
 #define lisp_h_XHASH(a) XUINT (a)
-#define lisp_h_XPNTR(a) ((void *) (intptr_t) (XLI (a) & VALMASK))
-#define lisp_h_XSYMBOL(a) \
-   (eassert (SYMBOLP (a)), (struct Lisp_Symbol *) XUNTAG (a, Lisp_Symbol))
+#define lisp_h_XPNTR(a) \
+   (SYMBOLP (a) ? XSYMBOL (a) : (void *) ((intptr_t) (XLI (a) & VALMASK)))
 #ifndef GC_CHECK_CONS_LIST
 # define lisp_h_check_cons_list() ((void) 0)
 #endif
 #if USE_LSB_TAG
 # define lisp_h_make_number(n) \
-    XIL ((EMACS_INT) ((EMACS_UINT) (n) << INTTYPEBITS))
+    XIL ((EMACS_INT) (((EMACS_UINT) (n) << INTTYPEBITS) + Lisp_Int0))
 # define lisp_h_XFASTINT(a) XINT (a)
 # define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)
+# define lisp_h_XSYMBOL(a) \
+    (eassert (SYMBOLP (a)), \
+     (struct Lisp_Symbol *) ((uintptr_t) XLI (a) - Lisp_Symbol \
+                            + (char *) lispsym))
 # define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a) & ~VALMASK))
-# define lisp_h_XUNTAG(a, type) ((void *) (XLI (a) - (type)))
+# define lisp_h_XUNTAG(a, type) ((void *) (intptr_t) (XLI (a) - (type)))
 #endif
 
 /* When compiling via gcc -O0, define the key operations as macros, as
@@ -396,7 +401,6 @@ error !;
 # define XCONS(a) lisp_h_XCONS (a)
 # define XHASH(a) lisp_h_XHASH (a)
 # define XPNTR(a) lisp_h_XPNTR (a)
-# define XSYMBOL(a) lisp_h_XSYMBOL (a)
 # ifndef GC_CHECK_CONS_LIST
 #  define check_cons_list() lisp_h_check_cons_list ()
 # endif
@@ -404,6 +408,7 @@ error !;
 #  define make_number(n) lisp_h_make_number (n)
 #  define XFASTINT(a) lisp_h_XFASTINT (a)
 #  define XINT(a) lisp_h_XINT (a)
+#  define XSYMBOL(a) lisp_h_XSYMBOL (a)
 #  define XTYPE(a) lisp_h_XTYPE (a)
 #  define XUNTAG(a, type) lisp_h_XUNTAG (a, type)
 # endif
@@ -445,20 +450,20 @@ error !;
 
 enum Lisp_Type
   {
-    /* Integer.  XINT (obj) is the integer value.  */
-    Lisp_Int0 = 0,
-    Lisp_Int1 = USE_LSB_TAG ? 1 << INTTYPEBITS : 1,
-
     /* Symbol.  XSYMBOL (object) points to a struct Lisp_Symbol.  */
-    Lisp_Symbol = 2,
+    Lisp_Symbol = 0,
 
     /* Miscellaneous.  XMISC (object) points to a union Lisp_Misc,
        whose first member indicates the subtype.  */
-    Lisp_Misc = 3,
+    Lisp_Misc = 1,
+
+    /* Integer.  XINT (obj) is the integer value.  */
+    Lisp_Int0 = 2,
+    Lisp_Int1 = USE_LSB_TAG ? 6 : 3,
 
     /* String.  XSTRING (object) points to a struct Lisp_String.
        The length of the string, and its contents, are stored therein.  */
-    Lisp_String = USE_LSB_TAG ? 1 : 1 << INTTYPEBITS,
+    Lisp_String = 4,
 
     /* Vector of Lisp objects, or something resembling it.
        XVECTOR (object) points to a struct Lisp_Vector, which contains
@@ -467,7 +472,7 @@ enum Lisp_Type
     Lisp_Vectorlike = 5,
 
     /* Cons.  XCONS (object) points to a struct Lisp_Cons.  */
-    Lisp_Cons = 6,
+    Lisp_Cons = USE_LSB_TAG ? 3 : 6,
 
     Lisp_Float = 7
   };
@@ -560,7 +565,7 @@ enum Lisp_Fwd_Type
 
 typedef struct { EMACS_INT i; } Lisp_Object;
 
-#define LISP_INITIALLY_ZERO {0}
+#define LISP_INITIALLY(i) {i}
 
 #undef CHECK_LISP_OBJECT_TYPE
 enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE = true };
@@ -569,10 +574,179 @@ enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE = 
true };
 /* If a struct type is not wanted, define Lisp_Object as just a number.  */
 
 typedef EMACS_INT Lisp_Object;
-#define LISP_INITIALLY_ZERO 0
+#define LISP_INITIALLY(i) (i)
 enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE = false };
 #endif /* CHECK_LISP_OBJECT_TYPE */
 
+#define LISP_INITIALLY_ZERO LISP_INITIALLY (0)
+
+/* Forward declarations.  */
+
+/* Defined in this file.  */
+union Lisp_Fwd;
+INLINE bool BOOL_VECTOR_P (Lisp_Object);
+INLINE bool BUFFER_OBJFWDP (union Lisp_Fwd *);
+INLINE bool BUFFERP (Lisp_Object);
+INLINE bool CHAR_TABLE_P (Lisp_Object);
+INLINE Lisp_Object CHAR_TABLE_REF_ASCII (Lisp_Object, ptrdiff_t);
+INLINE bool (CONSP) (Lisp_Object);
+INLINE bool (FLOATP) (Lisp_Object);
+INLINE bool functionp (Lisp_Object);
+INLINE bool (INTEGERP) (Lisp_Object);
+INLINE bool (MARKERP) (Lisp_Object);
+INLINE bool (MISCP) (Lisp_Object);
+INLINE bool (NILP) (Lisp_Object);
+INLINE bool OVERLAYP (Lisp_Object);
+INLINE bool PROCESSP (Lisp_Object);
+INLINE bool PSEUDOVECTORP (Lisp_Object, int);
+INLINE bool SAVE_VALUEP (Lisp_Object);
+INLINE void set_sub_char_table_contents (Lisp_Object, ptrdiff_t,
+                                             Lisp_Object);
+INLINE bool STRINGP (Lisp_Object);
+INLINE bool SUB_CHAR_TABLE_P (Lisp_Object);
+INLINE bool SUBRP (Lisp_Object);
+INLINE bool (SYMBOLP) (Lisp_Object);
+INLINE bool (VECTORLIKEP) (Lisp_Object);
+INLINE bool WINDOWP (Lisp_Object);
+INLINE bool TERMINALP (Lisp_Object);
+INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object);
+INLINE struct Lisp_Symbol *(XSYMBOL) (Lisp_Object);
+INLINE void *(XUNTAG) (Lisp_Object, int);
+
+/* Defined in chartab.c.  */
+extern Lisp_Object char_table_ref (Lisp_Object, int);
+extern void char_table_set (Lisp_Object, int, Lisp_Object);
+
+/* Defined in data.c.  */
+extern _Noreturn Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
+extern _Noreturn void wrong_choice (Lisp_Object, Lisp_Object);
+
+/* Defined in emacs.c.  */
+extern bool might_dump;
+/* True means Emacs has already been initialized.
+   Used during startup to detect startup of dumped Emacs.  */
+extern bool initialized;
+
+/* Defined in floatfns.c.  */
+extern double extract_float (Lisp_Object);
+
+
+/* Interned state of a symbol.  */
+
+enum symbol_interned
+{
+  SYMBOL_UNINTERNED = 0,
+  SYMBOL_INTERNED = 1,
+  SYMBOL_INTERNED_IN_INITIAL_OBARRAY = 2
+};
+
+enum symbol_redirect
+{
+  SYMBOL_PLAINVAL  = 4,
+  SYMBOL_VARALIAS  = 1,
+  SYMBOL_LOCALIZED = 2,
+  SYMBOL_FORWARDED = 3
+};
+
+struct Lisp_Symbol
+{
+  bool_bf gcmarkbit : 1;
+
+  /* Indicates where the value can be found:
+     0 : it's a plain var, the value is in the `value' field.
+     1 : it's a varalias, the value is really in the `alias' symbol.
+     2 : it's a localized var, the value is in the `blv' object.
+     3 : it's a forwarding variable, the value is in `forward'.  */
+  ENUM_BF (symbol_redirect) redirect : 3;
+
+  /* Non-zero means symbol is constant, i.e. changing its value
+     should signal an error.  If the value is 3, then the var
+     can be changed, but only by `defconst'.  */
+  unsigned constant : 2;
+
+  /* Interned state of the symbol.  This is an enumerator from
+     enum symbol_interned.  */
+  unsigned interned : 2;
+
+  /* True means that this variable has been explicitly declared
+     special (with `defvar' etc), and shouldn't be lexically bound.  */
+  bool_bf declared_special : 1;
+
+  /* True if pointed to from purespace and hence can't be GC'd.  */
+  bool_bf pinned : 1;
+
+  /* The symbol's name, as a Lisp string.  */
+  Lisp_Object name;
+
+  /* Value of the symbol or Qunbound if unbound.  Which alternative of the
+     union is used depends on the `redirect' field above.  */
+  union {
+    Lisp_Object value;
+    struct Lisp_Symbol *alias;
+    struct Lisp_Buffer_Local_Value *blv;
+    union Lisp_Fwd *fwd;
+  } val;
+
+  /* Function value of the symbol or Qnil if not fboundp.  */
+  Lisp_Object function;
+
+  /* The symbol's property list.  */
+  Lisp_Object plist;
+
+  /* Next symbol in obarray bucket, if the symbol is interned.  */
+  struct Lisp_Symbol *next;
+};
+
+/* Declare a Lisp-callable function.  The MAXARGS parameter has the same
+   meaning as in the DEFUN macro, and is used to construct a prototype.  */
+/* We can use the same trick as in the DEFUN macro to generate the
+   appropriate prototype.  */
+#define EXFUN(fnname, maxargs) \
+  extern Lisp_Object fnname DEFUN_ARGS_ ## maxargs
+
+/* Note that the weird token-substitution semantics of ANSI C makes
+   this work for MANY and UNEVALLED.  */
+#define DEFUN_ARGS_MANY                (ptrdiff_t, Lisp_Object *)
+#define DEFUN_ARGS_UNEVALLED   (Lisp_Object)
+#define DEFUN_ARGS_0   (void)
+#define DEFUN_ARGS_1   (Lisp_Object)
+#define DEFUN_ARGS_2   (Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_3   (Lisp_Object, Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_4   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_5   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
+                        Lisp_Object)
+#define DEFUN_ARGS_6   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
+                        Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_7   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
+                        Lisp_Object, Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_8   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
+                        Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
+
+/* Yield an integer that contains TAG along with PTR.  */
+#define TAG_PTR(tag, ptr) \
+  ((USE_LSB_TAG ? (tag) : (EMACS_UINT) (tag) << VALBITS) + (uintptr_t) (ptr))
+
+/* Yield an integer that contains a symbol tag along with OFFSET.
+   OFFSET should be the offset in bytes from 'lispsym' to the symbol.  */
+#define TAG_SYMOFFSET(offset)                              \
+  TAG_PTR (Lisp_Symbol,                                            \
+          ((uintptr_t) (offset) >> (USE_LSB_TAG ? 0 : GCTYPEBITS)))
+
+/* XLI_BUILTIN_LISPSYM (iQwhatever) is equivalent to
+   XLI (builtin_lisp_symbol (Qwhatever)),
+   except the former expands to an integer constant expression.  */
+#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET ((iname) * sizeof *lispsym)
+
+/* Declare extern constants for Lisp symbols.  These can be helpful
+   when using a debugger like GDB, on older platforms where the debug
+   format does not represent C macros.  */
+#define DEFINE_LISP_SYMBOL_BEGIN(name) \
+  DEFINE_GDB_SYMBOL_BEGIN (Lisp_Object, name)
+#define DEFINE_LISP_SYMBOL_END(name) \
+  DEFINE_GDB_SYMBOL_END (LISP_INITIALLY (XLI_BUILTIN_LISPSYM (i##name)))
+
+#include "globals.h"
+
 /* Convert a Lisp_Object to the corresponding EMACS_INT and vice versa.
    At the machine level, these operations are no-ops.  */
 LISP_MACRO_DEFUN (XLI, EMACS_INT, (Lisp_Object o), (o))
@@ -650,14 +824,12 @@ DEFINE_GDB_SYMBOL_END (VALMASK)
 #define MOST_POSITIVE_FIXNUM (EMACS_INT_MAX >> INTTYPEBITS)
 #define MOST_NEGATIVE_FIXNUM (-1 - MOST_POSITIVE_FIXNUM)
 
-/* Extract the pointer hidden within A.  */
-LISP_MACRO_DEFUN (XPNTR, void *, (Lisp_Object a), (a))
-
 #if USE_LSB_TAG
 
 LISP_MACRO_DEFUN (make_number, Lisp_Object, (EMACS_INT n), (n))
 LISP_MACRO_DEFUN (XINT, EMACS_INT, (Lisp_Object a), (a))
 LISP_MACRO_DEFUN (XFASTINT, EMACS_INT, (Lisp_Object a), (a))
+LISP_MACRO_DEFUN (XSYMBOL, struct Lisp_Symbol *, (Lisp_Object a), (a))
 LISP_MACRO_DEFUN (XTYPE, enum Lisp_Type, (Lisp_Object a), (a))
 LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
 
@@ -672,13 +844,18 @@ LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int 
type), (a, type))
 INLINE Lisp_Object
 make_number (EMACS_INT n)
 {
+  EMACS_INT int0 = Lisp_Int0;
   if (USE_LSB_TAG)
     {
       EMACS_UINT u = n;
       n = u << INTTYPEBITS;
+      n += int0;
     }
   else
-    n &= INTMASK;
+    {
+      n &= INTMASK;
+      n += (int0 << VALBITS);
+    }
   return XIL (n);
 }
 
@@ -701,11 +878,23 @@ XINT (Lisp_Object a)
 INLINE EMACS_INT
 XFASTINT (Lisp_Object a)
 {
-  EMACS_INT n = USE_LSB_TAG ? XINT (a) : XLI (a);
+  EMACS_INT int0 = Lisp_Int0;
+  EMACS_INT n = USE_LSB_TAG ? XINT (a) : XLI (a) - (int0 << VALBITS);
   eassert (0 <= n);
   return n;
 }
 
+/* Extract A's value as a symbol.  */
+INLINE struct Lisp_Symbol *
+XSYMBOL (Lisp_Object a)
+{
+  uintptr_t i = (uintptr_t) XUNTAG (a, Lisp_Symbol);
+  if (! USE_LSB_TAG)
+    i <<= GCTYPEBITS;
+  void *p = (char *) lispsym + i;
+  return p;
+}
+
 /* Extract A's type.  */
 INLINE enum Lisp_Type
 XTYPE (Lisp_Object a)
@@ -718,16 +907,15 @@ XTYPE (Lisp_Object a)
 INLINE void *
 XUNTAG (Lisp_Object a, int type)
 {
-  if (USE_LSB_TAG)
-    {
-      intptr_t i = XLI (a) - type;
-      return (void *) i;
-    }
-  return XPNTR (a);
+  intptr_t i = USE_LSB_TAG ? XLI (a) - type : XLI (a) & VALMASK;
+  return (void *) i;
 }
 
 #endif /* ! USE_LSB_TAG */
 
+/* Extract the pointer hidden within A.  */
+LISP_MACRO_DEFUN (XPNTR, void *, (Lisp_Object a), (a))
+
 /* Extract A's value as an unsigned integer.  */
 INLINE EMACS_UINT
 XUINT (Lisp_Object a)
@@ -746,7 +934,8 @@ INLINE Lisp_Object
 make_natnum (EMACS_INT n)
 {
   eassert (0 <= n && n <= MOST_POSITIVE_FIXNUM);
-  return USE_LSB_TAG ? make_number (n) : XIL (n);
+  EMACS_INT int0 = Lisp_Int0;
+  return USE_LSB_TAG ? make_number (n) : XIL (n + (int0 << VALBITS));
 }
 
 /* Return true if X and Y are the same object.  */
@@ -765,71 +954,6 @@ clip_to_bounds (ptrdiff_t lower, EMACS_INT num, ptrdiff_t 
upper)
   return num < lower ? lower : num <= upper ? num : upper;
 }
 
-/* Forward declarations.  */
-
-/* Defined in this file.  */
-union Lisp_Fwd;
-INLINE bool BOOL_VECTOR_P (Lisp_Object);
-INLINE bool BUFFER_OBJFWDP (union Lisp_Fwd *);
-INLINE bool BUFFERP (Lisp_Object);
-INLINE bool CHAR_TABLE_P (Lisp_Object);
-INLINE Lisp_Object CHAR_TABLE_REF_ASCII (Lisp_Object, ptrdiff_t);
-INLINE bool (CONSP) (Lisp_Object);
-INLINE bool (FLOATP) (Lisp_Object);
-INLINE bool functionp (Lisp_Object);
-INLINE bool (INTEGERP) (Lisp_Object);
-INLINE bool (MARKERP) (Lisp_Object);
-INLINE bool (MISCP) (Lisp_Object);
-INLINE bool (NILP) (Lisp_Object);
-INLINE bool OVERLAYP (Lisp_Object);
-INLINE bool PROCESSP (Lisp_Object);
-INLINE bool PSEUDOVECTORP (Lisp_Object, int);
-INLINE bool SAVE_VALUEP (Lisp_Object);
-INLINE void set_sub_char_table_contents (Lisp_Object, ptrdiff_t,
-                                             Lisp_Object);
-INLINE bool STRINGP (Lisp_Object);
-INLINE bool SUB_CHAR_TABLE_P (Lisp_Object);
-INLINE bool SUBRP (Lisp_Object);
-INLINE bool (SYMBOLP) (Lisp_Object);
-INLINE bool (VECTORLIKEP) (Lisp_Object);
-INLINE bool WINDOWP (Lisp_Object);
-INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object);
-
-/* Defined in chartab.c.  */
-extern Lisp_Object char_table_ref (Lisp_Object, int);
-extern void char_table_set (Lisp_Object, int, Lisp_Object);
-
-/* Defined in data.c.  */
-extern Lisp_Object Qarrayp, Qbufferp, Qbuffer_or_string_p, Qchar_table_p;
-extern Lisp_Object Qconsp, Qfloatp, Qintegerp, Qlambda, Qlistp, Qmarkerp, Qnil;
-extern Lisp_Object Qnumberp, Qstringp, Qsymbolp, Qt, Qvectorp;
-extern Lisp_Object Qbool_vector_p;
-extern Lisp_Object Qvector_or_char_table_p, Qwholenump;
-extern Lisp_Object Qwindow;
-extern _Noreturn Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
-extern _Noreturn void wrong_choice (Lisp_Object, Lisp_Object);
-
-/* Defined in emacs.c.  */
-extern bool might_dump;
-/* True means Emacs has already been initialized.
-   Used during startup to detect startup of dumped Emacs.  */
-extern bool initialized;
-
-/* Defined in eval.c.  */
-extern Lisp_Object Qautoload;
-
-/* Defined in floatfns.c.  */
-extern double extract_float (Lisp_Object);
-
-/* Defined in process.c.  */
-extern Lisp_Object Qprocessp;
-
-/* Defined in window.c.  */
-extern Lisp_Object Qwindowp;
-
-/* Defined in xdisp.c.  */
-extern Lisp_Object Qimage;
-
 
 /* Extract a value or address from a Lisp_Object.  */
 
@@ -849,7 +973,9 @@ XSTRING (Lisp_Object a)
   return XUNTAG (a, Lisp_String);
 }
 
-LISP_MACRO_DEFUN (XSYMBOL, struct Lisp_Symbol *, (Lisp_Object a), (a))
+/* The index of the C-defined Lisp symbol SYM.
+   This can be used in a static initializer.  */
+#define SYMBOL_INDEX(sym) i##sym
 
 INLINE struct Lisp_Float *
 XFLOAT (Lisp_Object a)
@@ -877,6 +1003,7 @@ XWINDOW (Lisp_Object a)
 INLINE struct terminal *
 XTERMINAL (Lisp_Object a)
 {
+  eassert (TERMINALP (a));
   return XUNTAG (a, Lisp_Vectorlike);
 }
 
@@ -920,17 +1047,23 @@ XBOOL_VECTOR (Lisp_Object a)
 INLINE Lisp_Object
 make_lisp_ptr (void *ptr, enum Lisp_Type type)
 {
-  EMACS_UINT utype = type;
-  EMACS_UINT typebits = USE_LSB_TAG ? type : utype << VALBITS;
-  Lisp_Object a = XIL (typebits | (uintptr_t) ptr);
+  Lisp_Object a = XIL (TAG_PTR (type, ptr));
   eassert (XTYPE (a) == type && XUNTAG (a, type) == ptr);
   return a;
 }
 
 INLINE Lisp_Object
-make_lisp_proc (struct Lisp_Process *p)
+make_lisp_symbol (struct Lisp_Symbol *sym)
 {
-  return make_lisp_ptr (p, Lisp_Vectorlike);
+  Lisp_Object a = XIL (TAG_SYMOFFSET ((char *) sym - (char *) lispsym));
+  eassert (XSYMBOL (a) == sym);
+  return a;
+}
+
+INLINE Lisp_Object
+builtin_lisp_symbol (int index)
+{
+  return make_lisp_symbol (lispsym + index);
 }
 
 #define XSETINT(a, b) ((a) = make_number (b))
@@ -938,7 +1071,7 @@ make_lisp_proc (struct Lisp_Process *p)
 #define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons))
 #define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, Lisp_Vectorlike))
 #define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, Lisp_String))
-#define XSETSYMBOL(a, b) ((a) = make_lisp_ptr (b, Lisp_Symbol))
+#define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (b))
 #define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, Lisp_Float))
 #define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Lisp_Misc))
 
@@ -976,6 +1109,25 @@ make_lisp_proc (struct Lisp_Process *p)
 #define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BOOL_VECTOR))
 #define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUB_CHAR_TABLE))
 
+/* Efficiently convert a pointer to a Lisp object and back.  The
+   pointer is represented as a Lisp integer, so the garbage collector
+   does not know about it.  The pointer should not have both Lisp_Int1
+   bits set, which makes this conversion inherently unportable.  */
+
+INLINE void *
+XINTPTR (Lisp_Object a)
+{
+  return XUNTAG (a, Lisp_Int0);
+}
+
+INLINE Lisp_Object
+make_pointer_integer (void *p)
+{
+  Lisp_Object a = XIL (TAG_PTR (Lisp_Int0, p));
+  eassert (INTEGERP (a) && XINTPTR (a) == p);
+  return a;
+}
+
 /* Type checking.  */
 
 LISP_MACRO_DEFUN_VOID (CHECK_TYPE,
@@ -1351,6 +1503,22 @@ gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object 
val)
   XVECTOR (array)->contents[idx] = val;
 }
 
+/* True, since Qnil's representation is zero.  Every place in the code
+   that assumes Qnil is zero should verify (NIL_IS_ZERO), to make it easy
+   to find such assumptions later if we change Qnil to be nonzero.  */
+enum { NIL_IS_ZERO = XLI_BUILTIN_LISPSYM (iQnil) == 0 };
+
+/* Clear the object addressed by P, with size NBYTES, so that all its
+   bytes are zero and all its Lisp values are nil.  */
+INLINE void
+memclear (void *p, ptrdiff_t nbytes)
+{
+  eassert (0 <= nbytes);
+  verify (NIL_IS_ZERO);
+  /* Since Qnil is zero, memset suffices.  */
+  memset (p, 0, nbytes);
+}
+
 /* If a struct is made to look like a vector, this macro returns the length
    of the shortest vector that would hold that struct.  */
 
@@ -1536,81 +1704,14 @@ CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct)
          - CHAR_TABLE_STANDARD_SLOTS);
 }
 
-/* Make sure that sub char-table contents slot
-   is aligned on a multiple of Lisp_Objects.  */
-verify ((offsetof (struct Lisp_Sub_Char_Table, contents)
-        - offsetof (struct Lisp_Sub_Char_Table, depth)) % word_size == 0);
+/* Make sure that sub char-table contents slot is where we think it is.  */
+verify (offsetof (struct Lisp_Sub_Char_Table, contents)
+       == offsetof (struct Lisp_Vector, contents[SUB_CHAR_TABLE_OFFSET]));
 
 /***********************************************************************
                               Symbols
  ***********************************************************************/
 
-/* Interned state of a symbol.  */
-
-enum symbol_interned
-{
-  SYMBOL_UNINTERNED = 0,
-  SYMBOL_INTERNED = 1,
-  SYMBOL_INTERNED_IN_INITIAL_OBARRAY = 2
-};
-
-enum symbol_redirect
-{
-  SYMBOL_PLAINVAL  = 4,
-  SYMBOL_VARALIAS  = 1,
-  SYMBOL_LOCALIZED = 2,
-  SYMBOL_FORWARDED = 3
-};
-
-struct Lisp_Symbol
-{
-  bool_bf gcmarkbit : 1;
-
-  /* Indicates where the value can be found:
-     0 : it's a plain var, the value is in the `value' field.
-     1 : it's a varalias, the value is really in the `alias' symbol.
-     2 : it's a localized var, the value is in the `blv' object.
-     3 : it's a forwarding variable, the value is in `forward'.  */
-  ENUM_BF (symbol_redirect) redirect : 3;
-
-  /* Non-zero means symbol is constant, i.e. changing its value
-     should signal an error.  If the value is 3, then the var
-     can be changed, but only by `defconst'.  */
-  unsigned constant : 2;
-
-  /* Interned state of the symbol.  This is an enumerator from
-     enum symbol_interned.  */
-  unsigned interned : 2;
-
-  /* True means that this variable has been explicitly declared
-     special (with `defvar' etc), and shouldn't be lexically bound.  */
-  bool_bf declared_special : 1;
-
-  /* True if pointed to from purespace and hence can't be GC'd.  */
-  bool_bf pinned : 1;
-
-  /* The symbol's name, as a Lisp string.  */
-  Lisp_Object name;
-
-  /* Value of the symbol or Qunbound if unbound.  Which alternative of the
-     union is used depends on the `redirect' field above.  */
-  union {
-    Lisp_Object value;
-    struct Lisp_Symbol *alias;
-    struct Lisp_Buffer_Local_Value *blv;
-    union Lisp_Fwd *fwd;
-  } val;
-
-  /* Function value of the symbol or Qnil if not fboundp.  */
-  Lisp_Object function;
-
-  /* The symbol's property list.  */
-  Lisp_Object plist;
-
-  /* Next symbol in obarray bucket, if the symbol is interned.  */
-  struct Lisp_Symbol *next;
-};
-
 /* Value is name of symbol.  */
 
 LISP_MACRO_DEFUN (SYMBOL_VAL, Lisp_Object, (struct Lisp_Symbol *sym), (sym))
@@ -1684,8 +1785,9 @@ SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object sym)
 
 LISP_MACRO_DEFUN (SYMBOL_CONSTANT_P, int, (Lisp_Object sym), (sym))
 
-#define DEFSYM(sym, name)                                              \
-  do { (sym) = intern_c_string ((name)); staticpro (&(sym)); } while (false)
+/* Placeholder for make-docfile to process.  The actual symbol
+   definition is done by lread.c's defsym.  */
+#define DEFSYM(sym, name) /* empty */
 
 
 /***********************************************************************
@@ -2679,24 +2781,6 @@ CHECK_NUMBER_CDR (Lisp_Object x)
    Lisp_Object fnname
 #endif
 
-/* Note that the weird token-substitution semantics of ANSI C makes
-   this work for MANY and UNEVALLED.  */
-#define DEFUN_ARGS_MANY                (ptrdiff_t, Lisp_Object *)
-#define DEFUN_ARGS_UNEVALLED   (Lisp_Object)
-#define DEFUN_ARGS_0   (void)
-#define DEFUN_ARGS_1   (Lisp_Object)
-#define DEFUN_ARGS_2   (Lisp_Object, Lisp_Object)
-#define DEFUN_ARGS_3   (Lisp_Object, Lisp_Object, Lisp_Object)
-#define DEFUN_ARGS_4   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
-#define DEFUN_ARGS_5   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
-                        Lisp_Object)
-#define DEFUN_ARGS_6   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
-                        Lisp_Object, Lisp_Object)
-#define DEFUN_ARGS_7   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
-                        Lisp_Object, Lisp_Object, Lisp_Object)
-#define DEFUN_ARGS_8   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
-                        Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
-
 /* True if OBJ is a Lisp function.  */
 INLINE bool
 FUNCTIONP (Lisp_Object obj)
@@ -2714,6 +2798,15 @@ enum maxargs
     UNEVALLED = -1
   };
 
+/* Call a function F that accepts many args, passing it ARRAY's elements.  */
+#define CALLMANY(f, array) (f) (ARRAYELTS (array), array)
+
+/* Call a function F that accepts many args, passing it the remaining args,
+   E.g., 'return CALLN (Fformat, fmt, text);' is less error-prone than
+   '{ Lisp_Object a[2]; a[0] = fmt; a[1] = text; return Fformat (2, a); }'.
+   CALLN is overkill for simple usages like 'Finsert (1, &text);'.  */
+#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object []) {__VA_ARGS__}))
+
 extern void defvar_lisp (struct Lisp_Objfwd *, const char *, Lisp_Object *);
 extern void defvar_lisp_nopro (struct Lisp_Objfwd *, const char *, Lisp_Object 
*);
 extern void defvar_bool (struct Lisp_Boolfwd *, const char *, bool *);
@@ -3245,15 +3338,6 @@ extern int gcpro_level;
 
 void staticpro (Lisp_Object *);
 
-/* Declare a Lisp-callable function.  The MAXARGS parameter has the same
-   meaning as in the DEFUN macro, and is used to construct a prototype.  */
-/* We can use the same trick as in the DEFUN macro to generate the
-   appropriate prototype.  */
-#define EXFUN(fnname, maxargs) \
-  extern Lisp_Object fnname DEFUN_ARGS_ ## maxargs
-
-#include "globals.h"
-
 /* Forward declarations for prototypes.  */
 struct window;
 struct frame;
@@ -3372,30 +3456,6 @@ set_sub_char_table_contents (Lisp_Object table, 
ptrdiff_t idx, Lisp_Object val)
 }
 
 /* Defined in data.c.  */
-extern Lisp_Object Qquote, Qunbound;
-extern Lisp_Object Qerror_conditions, Qerror_message, Qtop_level;
-extern Lisp_Object Qerror, Qquit, Qargs_out_of_range;
-extern Lisp_Object Qvoid_variable, Qvoid_function;
-extern Lisp_Object Qinvalid_read_syntax;
-extern Lisp_Object Qinvalid_function, Qwrong_number_of_arguments, Qno_catch;
-extern Lisp_Object Quser_error, Qend_of_file, Qarith_error, Qmark_inactive;
-extern Lisp_Object Qbeginning_of_buffer, Qend_of_buffer, Qbuffer_read_only;
-extern Lisp_Object Qtext_read_only;
-extern Lisp_Object Qinteractive_form;
-extern Lisp_Object Qcircular_list;
-extern Lisp_Object Qsequencep;
-extern Lisp_Object Qchar_or_string_p, Qinteger_or_marker_p;
-extern Lisp_Object Qfboundp;
-
-extern Lisp_Object Qcdr;
-
-extern Lisp_Object Qrange_error, Qoverflow_error;
-
-extern Lisp_Object Qnumber_or_marker_p;
-
-extern Lisp_Object Qbuffer, Qinteger, Qsymbol;
-
-/* Defined in data.c.  */
 extern Lisp_Object indirect_function (Lisp_Object);
 extern Lisp_Object find_symbol_value (Lisp_Object);
 enum Arith_Comparison {
@@ -3451,7 +3511,6 @@ extern void syms_of_cmds (void);
 extern void keys_of_cmds (void);
 
 /* Defined in coding.c.  */
-extern Lisp_Object Qcharset;
 extern Lisp_Object detect_coding_system (const unsigned char *, ptrdiff_t,
                                          ptrdiff_t, bool, bool, Lisp_Object);
 extern void init_coding (void);
@@ -3475,14 +3534,10 @@ extern void init_syntax_once (void);
 extern void syms_of_syntax (void);
 
 /* Defined in fns.c.  */
-extern Lisp_Object QCrehash_size, QCrehash_threshold;
 enum { NEXT_ALMOST_PRIME_LIMIT = 11 };
 extern EMACS_INT next_almost_prime (EMACS_INT) ATTRIBUTE_CONST;
 extern Lisp_Object larger_vector (Lisp_Object, ptrdiff_t, ptrdiff_t);
 extern void sweep_weak_hash_tables (void);
-extern Lisp_Object Qcursor_in_echo_area;
-extern Lisp_Object Qstring_lessp;
-extern Lisp_Object QCsize, QCtest, QCweakness, Qequal, Qeq;
 EMACS_UINT hash_string (char const *, ptrdiff_t);
 EMACS_UINT sxhash (Lisp_Object, int);
 Lisp_Object make_hash_table (struct hash_table_test, Lisp_Object, Lisp_Object,
@@ -3522,15 +3577,11 @@ extern void init_fringe_once (void);
 #endif /* HAVE_WINDOW_SYSTEM */
 
 /* Defined in image.c.  */
-extern Lisp_Object QCascent, QCmargin, QCrelief;
-extern Lisp_Object QCconversion;
 extern int x_bitmap_mask (struct frame *, ptrdiff_t);
 extern void reset_image_types (void);
 extern void syms_of_image (void);
 
 /* Defined in insdel.c.  */
-extern Lisp_Object Qinhibit_modification_hooks;
-extern Lisp_Object Qregion_extract_function;
 extern void move_gap_both (ptrdiff_t, ptrdiff_t);
 extern _Noreturn void buffer_overflow (void);
 extern void make_gap (ptrdiff_t);
@@ -3585,18 +3636,6 @@ extern Lisp_Object Vwindow_system;
 extern Lisp_Object sit_for (Lisp_Object, bool, int);
 
 /* Defined in xdisp.c.  */
-extern Lisp_Object Qinhibit_point_motion_hooks;
-extern Lisp_Object Qinhibit_redisplay;
-extern Lisp_Object Qmenu_bar_update_hook;
-extern Lisp_Object Qwindow_scroll_functions;
-extern Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map;
-extern Lisp_Object Qtext, Qboth, Qboth_horiz, Qtext_image_horiz;
-extern Lisp_Object Qspace, Qcenter, QCalign_to;
-extern Lisp_Object Qbar, Qhbar, Qhollow;
-extern Lisp_Object Qleft_margin, Qright_margin;
-extern Lisp_Object QCdata, QCfile;
-extern Lisp_Object QCmap;
-extern Lisp_Object Qrisky_local_variable;
 extern bool noninteractive_need_newline;
 extern Lisp_Object echo_area_buffer[2];
 extern void add_to_log (const char *, Lisp_Object, Lisp_Object);
@@ -3730,8 +3769,6 @@ build_string (const char *str)
 
 extern Lisp_Object pure_cons (Lisp_Object, Lisp_Object);
 extern void make_byte_code (struct Lisp_Vector *);
-extern Lisp_Object Qautomatic_gc;
-extern Lisp_Object Qchar_table_extra_slots;
 extern struct Lisp_Vector *allocate_vector (EMACS_INT);
 
 /* Make an uninitialized vector for SIZE objects.  NOTE: you must
@@ -3768,16 +3805,25 @@ make_uninit_sub_char_table (int depth, int min_char)
   return v;
 }
 
-extern struct Lisp_Vector *allocate_pseudovector (int, int, enum pvec_type);
-#define ALLOCATE_PSEUDOVECTOR(typ,field,tag)                           \
-  ((typ*)                                                              \
-   allocate_pseudovector                                               \
-       (VECSIZE (typ), PSEUDOVECSIZE (typ, field), tag))
-extern struct Lisp_Hash_Table *allocate_hash_table (void);
-extern struct window *allocate_window (void);
-extern struct frame *allocate_frame (void);
-extern struct Lisp_Process *allocate_process (void);
-extern struct terminal *allocate_terminal (void);
+extern struct Lisp_Vector *allocate_pseudovector (int, int, int,
+                                                 enum pvec_type);
+
+/* Allocate partially initialized pseudovector where all Lisp_Object
+   slots are set to Qnil but the rest (if any) is left uninitialized.  */
+
+#define ALLOCATE_PSEUDOVECTOR(type, field, tag)                               \
+  ((type *) allocate_pseudovector (VECSIZE (type),                    \
+                                  PSEUDOVECSIZE (type, field),        \
+                                  PSEUDOVECSIZE (type, field), tag))
+
+/* Allocate fully initialized pseudovector where all Lisp_Object
+   slots are set to Qnil and the rest (if any) is zeroed.  */
+
+#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, tag)                \
+  ((type *) allocate_pseudovector (VECSIZE (type),                    \
+                                  PSEUDOVECSIZE (type, field),        \
+                                  VECSIZE (type), tag))
+
 extern bool gc_in_progress;
 extern bool abort_on_gc;
 extern Lisp_Object make_float (double);
@@ -3835,11 +3881,8 @@ extern void syms_of_chartab (void);
 /* Defined in print.c.  */
 extern Lisp_Object Vprin1_to_string_buffer;
 extern void debug_print (Lisp_Object) EXTERNALLY_VISIBLE;
-extern Lisp_Object Qstandard_output;
-extern Lisp_Object Qexternal_debugging_output;
 extern void temp_output_buffer_setup (const char *);
 extern int print_level;
-extern Lisp_Object Qprint_escape_newlines;
 extern void write_string (const char *, int);
 extern void print_error_message (Lisp_Object, Lisp_Object, const char *,
                                 Lisp_Object);
@@ -3863,13 +3906,11 @@ extern ptrdiff_t evxprintf (char **, ptrdiff_t *, char 
const *, ptrdiff_t,
   ATTRIBUTE_FORMAT_PRINTF (5, 0);
 
 /* Defined in lread.c.  */
-extern Lisp_Object Qsize, Qvariable_documentation, Qstandard_input;
-extern Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction;
-extern Lisp_Object Qlexical_binding;
 extern Lisp_Object check_obarray (Lisp_Object);
 extern Lisp_Object intern_1 (const char *, ptrdiff_t);
 extern Lisp_Object intern_c_string_1 (const char *, ptrdiff_t);
-extern Lisp_Object intern_driver (Lisp_Object, Lisp_Object, ptrdiff_t);
+extern Lisp_Object intern_driver (Lisp_Object, Lisp_Object, Lisp_Object);
+extern void init_symbol (Lisp_Object, Lisp_Object);
 extern Lisp_Object oblookup (Lisp_Object, const char *, ptrdiff_t, ptrdiff_t);
 INLINE void
 LOADHIST_ATTACH (Lisp_Object x)
@@ -3901,10 +3942,8 @@ intern_c_string (const char *str)
 
 /* Defined in eval.c.  */
 extern EMACS_INT lisp_eval_depth;
-extern Lisp_Object Qexit, Qinteractive, Qcommandp, Qmacro;
-extern Lisp_Object Qinhibit_quit, Qinternal_interpreter_environment, Qclosure;
-extern Lisp_Object Qand_rest;
 extern Lisp_Object Vautoload_queue;
+extern Lisp_Object Vrun_hooks;
 extern Lisp_Object Vsignaling_function;
 extern Lisp_Object inhibit_lisp_code;
 extern struct handler *handlerlist;
@@ -3916,7 +3955,7 @@ extern struct handler *handlerlist;
      call1 (Vrun_hooks, Qmy_funny_hook);
 
    should no longer be used.  */
-extern Lisp_Object Vrun_hooks;
+extern void run_hook (Lisp_Object);
 extern void run_hook_with_args_2 (Lisp_Object, Lisp_Object, Lisp_Object);
 extern Lisp_Object run_hook_with_args (ptrdiff_t nargs, Lisp_Object *args,
                                       Lisp_Object (*funcall)
@@ -3977,7 +4016,6 @@ extern bool let_shadows_global_binding_p (Lisp_Object 
symbol);
 
 
 /* Defined in editfns.c.  */
-extern Lisp_Object Qfield;
 extern void insert1 (Lisp_Object);
 extern Lisp_Object format2 (const char *, Lisp_Object, Lisp_Object);
 extern Lisp_Object save_excursion_save (void);
@@ -4024,12 +4062,6 @@ extern void syms_of_marker (void);
 
 /* Defined in fileio.c.  */
 
-extern Lisp_Object Qfile_error;
-extern Lisp_Object Qfile_notify_error;
-extern Lisp_Object Qfile_exists_p;
-extern Lisp_Object Qfile_directory_p;
-extern Lisp_Object Qinsert_file_contents;
-extern Lisp_Object Qfile_name_history;
 extern Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
 extern Lisp_Object write_region (Lisp_Object, Lisp_Object, Lisp_Object,
                                 Lisp_Object, Lisp_Object, Lisp_Object,
@@ -4046,7 +4078,6 @@ extern bool file_accessible_directory_p (Lisp_Object);
 extern void init_fileio (void);
 extern void syms_of_fileio (void);
 extern Lisp_Object make_temp_name (Lisp_Object, bool);
-extern Lisp_Object Qdelete_file;
 
 /* Defined in search.c.  */
 extern void shrink_regexp_cache (void);
@@ -4056,10 +4087,23 @@ struct re_registers;
 extern struct re_pattern_buffer *compile_pattern (Lisp_Object,
                                                  struct re_registers *,
                                                  Lisp_Object, bool, bool);
-extern ptrdiff_t fast_string_match (Lisp_Object, Lisp_Object);
+extern ptrdiff_t fast_string_match_internal (Lisp_Object, Lisp_Object,
+                                            Lisp_Object);
+
+INLINE ptrdiff_t
+fast_string_match (Lisp_Object regexp, Lisp_Object string)
+{
+  return fast_string_match_internal (regexp, string, Qnil);
+}
+
+INLINE ptrdiff_t
+fast_string_match_ignore_case (Lisp_Object regexp, Lisp_Object string)
+{
+  return fast_string_match_internal (regexp, string, Vascii_canon_table);
+}
+
 extern ptrdiff_t fast_c_string_match_ignore_case (Lisp_Object, const char *,
                                                  ptrdiff_t);
-extern ptrdiff_t fast_string_match_ignore_case (Lisp_Object, Lisp_Object);
 extern ptrdiff_t fast_looking_at (Lisp_Object, ptrdiff_t, ptrdiff_t,
                                   ptrdiff_t, ptrdiff_t, Lisp_Object);
 extern ptrdiff_t find_newline (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
@@ -4076,7 +4120,6 @@ extern void clear_regexp_cache (void);
 
 /* Defined in minibuf.c.  */
 
-extern Lisp_Object Qcompletion_ignore_case;
 extern Lisp_Object Vminibuffer_list;
 extern Lisp_Object last_minibuf_string;
 extern Lisp_Object get_minibuffer (EMACS_INT);
@@ -4085,15 +4128,10 @@ extern void syms_of_minibuf (void);
 
 /* Defined in callint.c.  */
 
-extern Lisp_Object Qminus, Qplus;
-extern Lisp_Object Qprogn;
-extern Lisp_Object Qwhen;
-extern Lisp_Object Qmouse_leave_buffer_hook;
 extern void syms_of_callint (void);
 
 /* Defined in casefiddle.c.  */
 
-extern Lisp_Object Qidentity;
 extern void syms_of_casefiddle (void);
 extern void keys_of_casefiddle (void);
 
@@ -4107,8 +4145,6 @@ extern void syms_of_casetab (void);
 extern Lisp_Object echo_message_buffer;
 extern struct kboard *echo_kboard;
 extern void cancel_echoing (void);
-extern Lisp_Object Qdisabled, QCfilter;
-extern Lisp_Object Qup, Qdown;
 extern Lisp_Object last_undo_boundary;
 extern bool input_pending;
 #ifdef HAVE_STACK_OVERFLOW_HANDLING
@@ -4142,7 +4178,6 @@ extern bool indented_beyond_p (ptrdiff_t, ptrdiff_t, 
EMACS_INT);
 extern void syms_of_indent (void);
 
 /* Defined in frame.c.  */
-extern Lisp_Object Qonly, Qnone;
 extern void store_frame_param (struct frame *, Lisp_Object, Lisp_Object);
 extern void store_in_alist (Lisp_Object *, Lisp_Object, Lisp_Object);
 extern Lisp_Object do_switch_frame (Lisp_Object, int, int, Lisp_Object);
@@ -4158,9 +4193,7 @@ extern bool display_arg;
 #endif
 extern Lisp_Object decode_env_path (const char *, const char *, bool);
 extern Lisp_Object empty_unibyte_string, empty_multibyte_string;
-extern Lisp_Object Qfile_name_handler_alist;
 extern _Noreturn void terminate_due_to_signal (int, int);
-extern Lisp_Object Qkill_emacs;
 #ifdef WINDOWSNT
 extern Lisp_Object Vlibrary_cache;
 #endif
@@ -4195,7 +4228,6 @@ extern bool inhibit_window_system;
 extern bool running_asynch_code;
 
 /* Defined in process.c.  */
-extern Lisp_Object QCtype, Qlocal;
 extern void kill_buffer_processes (Lisp_Object);
 extern int wait_reading_process_output (intmax_t, int, int, bool, Lisp_Object,
                                        struct Lisp_Process *, int);
@@ -4231,7 +4263,6 @@ extern void set_initial_environment (void);
 extern void syms_of_callproc (void);
 
 /* Defined in doc.c.  */
-extern Lisp_Object Qfunction_documentation;
 extern Lisp_Object read_doc_string (Lisp_Object);
 extern Lisp_Object get_doc_string (Lisp_Object, bool, bool);
 extern void syms_of_doc (void);
@@ -4252,8 +4283,6 @@ extern void init_macros (void);
 extern void syms_of_macros (void);
 
 /* Defined in undo.c.  */
-extern Lisp_Object Qapply;
-extern Lisp_Object Qinhibit_read_only;
 extern void truncate_undo_list (struct buffer *);
 extern void record_insert (ptrdiff_t, ptrdiff_t);
 extern void record_delete (ptrdiff_t, Lisp_Object, bool);
@@ -4263,11 +4292,8 @@ extern void record_property_change (ptrdiff_t, ptrdiff_t,
                                    Lisp_Object, Lisp_Object,
                                     Lisp_Object);
 extern void syms_of_undo (void);
-/* Defined in textprop.c.  */
-extern Lisp_Object Qmouse_face;
-extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
-extern Lisp_Object Qminibuffer_prompt;
 
+/* Defined in textprop.c.  */
 extern void report_interval_modification (Lisp_Object, Lisp_Object);
 
 /* Defined in menu.c.  */
@@ -4351,9 +4377,6 @@ extern void init_font (void);
 #ifdef HAVE_WINDOW_SYSTEM
 /* Defined in fontset.c.  */
 extern void syms_of_fontset (void);
-
-/* Defined in xfns.c, w32fns.c, or macfns.c.  */
-extern Lisp_Object Qfont_param;
 #endif
 
 /* Defined in gfilenotify.c */
@@ -4373,16 +4396,6 @@ extern void syms_of_w32notify (void);
 #endif
 
 /* Defined in xfaces.c.  */
-extern Lisp_Object Qdefault, Qfringe;
-extern Lisp_Object Qscroll_bar, Qcursor;
-extern Lisp_Object Qmode_line_inactive;
-extern Lisp_Object Qface;
-extern Lisp_Object Qnormal;
-extern Lisp_Object QCfamily, QCweight, QCslant;
-extern Lisp_Object QCheight, QCname, QCwidth, QCforeground, QCbackground;
-extern Lisp_Object Qextra_light, Qlight, Qsemi_light, Qsemi_bold;
-extern Lisp_Object Qbold, Qextra_bold, Qultra_bold;
-extern Lisp_Object Qoblique, Qitalic;
 extern Lisp_Object Vface_alternative_font_family_alist;
 extern Lisp_Object Vface_alternative_font_registry_alist;
 extern void syms_of_xfaces (void);
@@ -4603,6 +4616,12 @@ lisp_word_count (ptrdiff_t nbytes)
 # define USE_STACK_LISP_OBJECTS false
 #endif
 
+#ifdef GC_CHECK_STRING_BYTES
+enum { defined_GC_CHECK_STRING_BYTES = true };
+#else
+enum { defined_GC_CHECK_STRING_BYTES = false };
+#endif
+
 /* Struct inside unions that are typically no larger and aligned enough.  */
 
 union Aligned_Cons
@@ -4627,6 +4646,7 @@ enum
     USE_STACK_CONS = (USE_STACK_LISP_OBJECTS
                      && alignof (union Aligned_Cons) % GCALIGNMENT == 0),
     USE_STACK_STRING = (USE_STACK_CONS
+                       && !defined_GC_CHECK_STRING_BYTES
                        && alignof (union Aligned_String) % GCALIGNMENT == 0)
   };
 
diff --git a/src/lisp.mk b/src/lisp.mk
index 675df2b..ee2a07c 100644
--- a/src/lisp.mk
+++ b/src/lisp.mk
@@ -1,6 +1,6 @@
 ### lisp.mk --- src/Makefile fragment for GNU Emacs
 
-## Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2014 Free Software
+## Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2015 Free Software
 ## Foundation, Inc.
 
 ## This file is part of GNU Emacs.
@@ -71,6 +71,7 @@ lisp = \
        $(lispsource)/faces.elc \
        $(lispsource)/button.elc \
        $(lispsource)/startup.elc \
+       $(lispsource)/emacs-lisp/cl-preloaded.elc \
        $(lispsource)/emacs-lisp/nadvice.elc \
        $(lispsource)/minibuffer.elc \
        $(lispsource)/abbrev.elc \
diff --git a/src/lread.c b/src/lread.c
index 3a2c29a..0fe7b27 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -1,6 +1,6 @@
 /* Lisp parsing and input streams.
 
-Copyright (C) 1985-1989, 1993-1995, 1997-2014 Free Software Foundation,
+Copyright (C) 1985-1989, 1993-1995, 1997-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -18,6 +18,8 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
+/* Tell globals.h to define tables needed by init_obarray.  */
+#define DEFINE_SYMBOLS
 
 #include <config.h>
 #include "sysstdio.h"
@@ -68,32 +70,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include <ltdl.h>
 #endif
 
-/* Hash table read constants.  */
-static Lisp_Object Qhash_table, Qdata;
-static Lisp_Object Qtest;
-Lisp_Object Qsize;
-static Lisp_Object Qweakness;
-static Lisp_Object Qrehash_size;
-static Lisp_Object Qrehash_threshold;
-
-static Lisp_Object Qread_char, Qget_file_char, Qcurrent_load_list;
-Lisp_Object Qstandard_input;
-Lisp_Object Qvariable_documentation;
-static Lisp_Object Qascii_character, Qload, Qload_file_name;
-Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction;
-static Lisp_Object Qinhibit_file_name_operation;
-static Lisp_Object Qeval_buffer_list;
-Lisp_Object Qlexical_binding;
-static Lisp_Object Qfile_truename, Qdo_after_load_evaluation; /* ACM 2006/5/16 
*/
-
-/* Used instead of Qget_file_char while loading *.elc files compiled
-   by Emacs 21 or older.  */
-static Lisp_Object Qget_emacs_mule_file_char;
-
-static Lisp_Object Qload_force_doc_strings;
-
-static Lisp_Object Qload_in_progress;
-
 /* The association list of objects read with the #n=object form.
    Each member of the list has the form (n . object), and is used to
    look up the object for the corresponding #n# construct.
@@ -137,7 +113,6 @@ static file_offset prev_saved_doc_string_position;
    Fread initializes this to false, so we need not specbind it
    or worry about what happens to it when there is an error.  */
 static bool new_backquote_flag;
-static Lisp_Object Qold_style_backquotes;
 
 /* A list of file names for files being loaded in Fload.  Used to
    check for recursive loads.  */
@@ -976,7 +951,7 @@ load_warn_old_style_backquotes (Lisp_Object file)
   if (!NILP (Vold_style_backquotes))
     {
       AUTO_STRING (format, "Loading `%s': old-style backquotes detected!");
-      Fmessage (2, (Lisp_Object []) {format, file});
+      CALLN (Fmessage, format, file);
     }
 }
 
@@ -1215,12 +1190,7 @@ Return t if the file exists and loads successfully.  */)
        {
          suffixes = Fget_load_suffixes ();
          if (NILP (must_suffix))
-           {
-             Lisp_Object arg[2];
-             arg[0] = suffixes;
-             arg[1] = Vload_file_rep_suffixes;
-             suffixes = Fappend (2, arg);
-           }
+           suffixes = CALLN (Fappend, suffixes, Vload_file_rep_suffixes);
        }
 
       fd = openp (Vload_path, file, suffixes, &found, Qnil, load_prefer_newer);
@@ -1537,8 +1507,6 @@ directories, make sure the PREDICATE function returns 
`dir-ok' for them.  */)
   return file;
 }
 
-static Lisp_Object Qdir_ok;
-
 /* Search for a file whose name is STR, looking in directories
    in the Lisp list PATH, and trying suffixes from SUFFIX.
    On success, return a file descriptor (or 1 or -2 as described below).
@@ -3899,30 +3867,38 @@ check_obarray (Lisp_Object obarray)
   return obarray;
 }
 
-/* Intern a symbol with name STRING in OBARRAY using bucket INDEX.  */
+/* Intern symbol SYM in OBARRAY using bucket INDEX.  */
 
-Lisp_Object
-intern_driver (Lisp_Object string, Lisp_Object obarray, ptrdiff_t index)
+static Lisp_Object
+intern_sym (Lisp_Object sym, Lisp_Object obarray, Lisp_Object index)
 {
-  Lisp_Object *ptr, sym = Fmake_symbol (string);
+  Lisp_Object *ptr;
 
   XSYMBOL (sym)->interned = (EQ (obarray, initial_obarray)
                             ? SYMBOL_INTERNED_IN_INITIAL_OBARRAY
                             : SYMBOL_INTERNED);
 
-  if ((SREF (string, 0) == ':') && EQ (obarray, initial_obarray))
+  if (SREF (SYMBOL_NAME (sym), 0) == ':' && EQ (obarray, initial_obarray))
     {
       XSYMBOL (sym)->constant = 1;
       XSYMBOL (sym)->redirect = SYMBOL_PLAINVAL;
       SET_SYMBOL_VAL (XSYMBOL (sym), sym);
     }
 
-  ptr = aref_addr (obarray, index);
+  ptr = aref_addr (obarray, XINT (index));
   set_symbol_next (sym, SYMBOLP (*ptr) ? XSYMBOL (*ptr) : NULL);
   *ptr = sym;
   return sym;
 }
 
+/* Intern a symbol with name STRING in OBARRAY using bucket INDEX.  */
+
+Lisp_Object
+intern_driver (Lisp_Object string, Lisp_Object obarray, Lisp_Object index)
+{
+  return intern_sym (Fmake_symbol (string), obarray, index);
+}
+
 /* Intern the C string STR: return a symbol with that name,
    interned in the current obarray.  */
 
@@ -3933,7 +3909,7 @@ intern_1 (const char *str, ptrdiff_t len)
   Lisp_Object tem = oblookup (obarray, str, len, len);
 
   return SYMBOLP (tem) ? tem : intern_driver (make_string (str, len),
-                                             obarray, XINT (tem));
+                                             obarray, tem);
 }
 
 Lisp_Object
@@ -3944,10 +3920,30 @@ intern_c_string_1 (const char *str, ptrdiff_t len)
 
   if (!SYMBOLP (tem))
     {
-      tem = intern_driver (make_pure_c_string (str, len), obarray, XINT (tem));
+      /* Creating a non-pure string from a string literal not implemented yet.
+        We could just use make_string here and live with the extra copy.  */
+      /* eassert (!NILP (Vpurify_flag)); FIXME: dynamic-modules */
+      tem = intern_driver (make_pure_c_string (str, len), obarray, tem);
     }
   return tem;
 }
+
+static void
+define_symbol (Lisp_Object sym, char const *str)
+{
+  ptrdiff_t len = strlen (str);
+  Lisp_Object string = make_pure_c_string (str, len);
+  init_symbol (sym, string);
+
+  /* Qunbound is uninterned, so that it's not confused with any symbol
+     'unbound' created by a Lisp program.  */
+  if (! EQ (sym, Qunbound))
+    {
+      Lisp_Object bucket = oblookup (initial_obarray, str, len, len);
+      eassert (INTEGERP (bucket));
+      intern_sym (sym, initial_obarray, bucket);
+    }
+}
 
 DEFUN ("intern", Fintern, Sintern, 1, 2, 0,
        doc: /* Return the canonical symbol whose name is STRING.
@@ -3963,8 +3959,8 @@ it defaults to the value of `obarray'.  */)
 
   tem = oblookup (obarray, SSDATA (string), SCHARS (string), SBYTES (string));
   if (!SYMBOLP (tem))
-    tem = intern_driver (NILP (Vpurify_flag) ? string
-                        : Fpurecopy (string), obarray, XINT (tem));
+    tem = intern_driver (NILP (Vpurify_flag) ? string : Fpurecopy (string),
+                        obarray, tem);
   return tem;
 }
 
@@ -4163,27 +4159,20 @@ init_obarray (void)
   initial_obarray = Vobarray;
   staticpro (&initial_obarray);
 
-  Qunbound = Fmake_symbol (build_pure_c_string ("unbound"));
-  /* Set temporary dummy values to Qnil and Vpurify_flag to satisfy the
-     NILP (Vpurify_flag) check in intern_c_string.  */
-  Qnil = make_number (-1); Vpurify_flag = make_number (1);
-  Qnil = intern_c_string ("nil");
-
-  /* Fmake_symbol inits fields of new symbols with Qunbound and Qnil,
-     so those two need to be fixed manually.  */
-  SET_SYMBOL_VAL (XSYMBOL (Qunbound), Qunbound);
-  set_symbol_function (Qunbound, Qnil);
-  set_symbol_plist (Qunbound, Qnil);
+  for (int i = 0; i < ARRAYELTS (lispsym); i++)
+    define_symbol (builtin_lisp_symbol (i), defsym_name[i]);
+
+  DEFSYM (Qunbound, "unbound");
+
+  DEFSYM (Qnil, "nil");
   SET_SYMBOL_VAL (XSYMBOL (Qnil), Qnil);
   XSYMBOL (Qnil)->constant = 1;
-  XSYMBOL (Qnil)->declared_special = 1;
-  set_symbol_plist (Qnil, Qnil);
-  set_symbol_function (Qnil, Qnil);
+  XSYMBOL (Qnil)->declared_special = true;
 
-  Qt = intern_c_string ("t");
+  DEFSYM (Qt, "t");
   SET_SYMBOL_VAL (XSYMBOL (Qt), Qt);
-  XSYMBOL (Qnil)->declared_special = 1;
   XSYMBOL (Qt)->constant = 1;
+  XSYMBOL (Qt)->declared_special = true;
 
   /* Qt is correct even if CANNOT_DUMP.  loadup.el will set to nil at end.  */
   Vpurify_flag = Qt;
@@ -4515,12 +4504,10 @@ init_lread (void)
           /* Replace nils from EMACSLOADPATH by default.  */
           while (CONSP (elpath))
             {
-              Lisp_Object arg[2];
               elem = XCAR (elpath);
               elpath = XCDR (elpath);
-              arg[0] = Vload_path;
-              arg[1] = NILP (elem) ? default_lpath : Fcons (elem, Qnil);
-              Vload_path = Fappend (2, arg);
+              Vload_path = CALLN (Fappend, Vload_path,
+                                 NILP (elem) ? default_lpath : list1 (elem));
             }
         }                       /* Fmemq (Qnil, Vload_path) */
     }
@@ -4849,7 +4836,11 @@ that are loaded before your customizations are read!  
*/);
   DEFSYM (Qstandard_input, "standard-input");
   DEFSYM (Qread_char, "read-char");
   DEFSYM (Qget_file_char, "get-file-char");
+
+  /* Used instead of Qget_file_char while loading *.elc files compiled
+     by Emacs 21 or older.  */
   DEFSYM (Qget_emacs_mule_file_char, "get-emacs-mule-file-char");
+
   DEFSYM (Qload_force_doc_strings, "load-force-doc-strings");
 
   DEFSYM (Qbackquote, "`");
diff --git a/src/macfont.h b/src/macfont.h
index e6e45ab..f311577 100644
--- a/src/macfont.h
+++ b/src/macfont.h
@@ -1,5 +1,5 @@
 /* Interface definition for Mac OSX Core text font backend.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/macfont.m b/src/macfont.m
index 7054839..cbf1b07 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -1,5 +1,5 @@
 /* Font driver on Mac OSX Core text.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -40,9 +40,6 @@ Original author: YAMAMOTO Mitsuharu
 
 static struct font_driver macfont_driver;
 
-/* Core Text, for Mac OS X.  */
-static Lisp_Object Qmac_ct;
-
 static double mac_ctfont_get_advance_width_for_glyph (CTFontRef, CGGlyph);
 static CGRect mac_ctfont_get_bounding_rect_for_glyph (CTFontRef, CGGlyph);
 static CFArrayRef mac_ctfont_create_available_families (void);
@@ -69,18 +66,6 @@ static CGGlyph mac_ctfont_get_glyph_for_cid (CTFontRef,
                                              CGFontIndex);
 #endif
 
-/* The font property key specifying the font design destination.  The
-   value is an unsigned integer code: 0 for WYSIWYG, and 1 for Video
-   text.  (See the documentation of X Logical Font Description
-   Conventions.)  In the Mac font driver, 1 means the screen font is
-   used for calculating some glyph metrics.  You can see the
-   difference with Monaco 8pt or 9pt, for example.  */
-static Lisp_Object QCdestination;
-
-/* The boolean-valued font property key specifying the use of
-   leading.  */
-static Lisp_Object QCminspace;
-
 struct macfont_metrics;
 
 /* The actual structure for Mac font that can be cast to struct font.  */
@@ -2803,9 +2788,9 @@ macfont_draw (struct glyph_string *s, int from, int to, 
int x, int y,
 static Lisp_Object
 macfont_shape (Lisp_Object lgstring)
 {
-  struct font *font;
-  struct macfont_info *macfont_info;
-  FontRef macfont;
+  struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
+  struct macfont_info *macfont_info = (struct macfont_info *) font;
+  FontRef macfont = macfont_info->macfont;
   ptrdiff_t glyph_len, len, i, j;
   CFIndex nonbmp_len;
   UniChar *unichars;
@@ -2814,10 +2799,6 @@ macfont_shape (Lisp_Object lgstring)
   CFIndex used = 0;
   struct mac_glyph_layout *glyph_layouts;
 
-  CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
-  macfont_info = (struct macfont_info *) font;
-  macfont = macfont_info->macfont;
-
   glyph_len = LGSTRING_GLYPH_LEN (lgstring);
   nonbmp_len = 0;
   for (i = 0; i < glyph_len; i++)
@@ -3927,10 +3908,19 @@ syms_of_macfont (void)
 {
   static struct font_driver mac_font_driver;
 
+  /* Core Text, for Mac OS X.  */
   DEFSYM (Qmac_ct, "mac-ct");
   macfont_driver.type = Qmac_ct;
   register_font_driver (&macfont_driver, NULL);
 
+  /* The font property key specifying the font design destination.  The
+     value is an unsigned integer code: 0 for WYSIWYG, and 1 for Video
+     text.  (See the documentation of X Logical Font Description
+     Conventions.)  In the Mac font driver, 1 means the screen font is
+     used for calculating some glyph metrics.  You can see the
+     difference with Monaco 8pt or 9pt, for example.  */
   DEFSYM (QCdestination, ":destination");
+
+  /* The boolean-valued font property key specifying the use of leading.  */
   DEFSYM (QCminspace, ":minspace");
 }
diff --git a/src/macros.c b/src/macros.c
index c3d26d0..e5b8ab7 100644
--- a/src/macros.c
+++ b/src/macros.c
@@ -1,6 +1,6 @@
 /* Keyboard macros.
 
-Copyright (C) 1985-1986, 1993, 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993, 2000-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -28,9 +28,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "window.h"
 #include "keyboard.h"
 
-static Lisp_Object Qexecute_kbd_macro;
-static Lisp_Object Qkbd_macro_termination_hook;
-
 /* Number of successful iterations so far
    for innermost keyboard macro.
    This is not bound at each level,
@@ -280,7 +277,7 @@ pop_kbd_macro (Lisp_Object info)
   tem = XCDR (info);
   executing_kbd_macro_index = XINT (XCAR (tem));
   Vreal_this_command = XCDR (tem);
-  Frun_hooks (1, &Qkbd_macro_termination_hook);
+  run_hook (Qkbd_macro_termination_hook);
 }
 
 DEFUN ("execute-kbd-macro", Fexecute_kbd_macro, Sexecute_kbd_macro, 1, 3, 0,
diff --git a/src/macros.h b/src/macros.h
index c43c813..eab8041 100644
--- a/src/macros.h
+++ b/src/macros.h
@@ -1,5 +1,5 @@
 /* Definitions for keyboard macro interpretation in GNU Emacs.
-   Copyright (C) 1985, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/makefile.w32-in b/src/makefile.w32-in
index ab7f305..795b55a 100644
--- a/src/makefile.w32-in
+++ b/src/makefile.w32-in
@@ -1,5 +1,5 @@
 # -*- Makefile -*- for GNU Emacs on the Microsoft Windows API.
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/src/marker.c b/src/marker.c
index d377efb..73928ba 100644
--- a/src/marker.c
+++ b/src/marker.c
@@ -1,5 +1,5 @@
 /* Markers: examining, setting and deleting.
-   Copyright (C) 1985, 1997-1998, 2001-2014 Free Software Foundation,
+   Copyright (C) 1985, 1997-1998, 2001-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/menu.c b/src/menu.c
index 61163ae..5a8ea34 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1,6 +1,6 @@
 /* Platform-independent code for terminal communications.
 
-Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2014 Free Software
+Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/menu.h b/src/menu.h
index 4dd7f17..de586a5 100644
--- a/src/menu.h
+++ b/src/menu.h
@@ -1,5 +1,5 @@
 /* Functions to manipulate menus.
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -22,10 +22,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "systime.h" /* for Time */
 #include "../lwlib/lwlib-widget.h"
 
-#ifdef HAVE_NTGUI
-extern Lisp_Object Qunsupported__w32_dialog;
-#endif
-
 /* Bit fields used by terminal-specific menu_show_hook.  */
 
 enum {
diff --git a/src/minibuf.c b/src/minibuf.c
index 0b45515..3408bb9 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -1,6 +1,6 @@
 /* Minibuffer input and completion.
 
-Copyright (C) 1985-1986, 1993-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -54,37 +54,10 @@ static Lisp_Object minibuf_save_list;
 
 EMACS_INT minibuf_level;
 
-/* The maximum length of a minibuffer history.  */
-
-static Lisp_Object Qhistory_length;
-
 /* Fread_minibuffer leaves the input here as a string.  */
 
 Lisp_Object last_minibuf_string;
 
-static Lisp_Object Qminibuffer_history, Qbuffer_name_history;
-
-static Lisp_Object Qread_file_name_internal;
-
-/* Normal hooks for entry to and exit from minibuffer.  */
-
-static Lisp_Object Qminibuffer_setup_hook;
-static Lisp_Object Qminibuffer_exit_hook;
-
-Lisp_Object Qcompletion_ignore_case;
-static Lisp_Object Qminibuffer_completion_table;
-static Lisp_Object Qminibuffer_completion_predicate;
-static Lisp_Object Qminibuffer_completion_confirm;
-static Lisp_Object Qcustom_variable_p;
-
-static Lisp_Object Qminibuffer_default;
-
-static Lisp_Object Qcurrent_input_method, Qactivate_input_method;
-
-static Lisp_Object Qcase_fold_search;
-
-static Lisp_Object Qread_expression_history;
-
 /* Prompt to display in front of the mini-buffer contents.  */
 
 static Lisp_Object minibuf_prompt;
@@ -244,7 +217,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object 
initial,
       suppress_echo_on_tty (fileno (stdin));
     }
 
-  fprintf (stdout, "%s", SDATA (prompt));
+  fwrite (SDATA (prompt), 1, SBYTES (prompt), stdout);
   fflush (stdout);
 
   val = Qnil;
@@ -699,7 +672,7 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, 
Lisp_Object prompt,
   if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
     call1 (Qactivate_input_method, input_method);
 
-  Frun_hooks (1, &Qminibuffer_setup_hook);
+  run_hook (Qminibuffer_setup_hook);
 
   /* Don't allow the user to undo past this point.  */
   bset_undo_list (current_buffer, Qnil);
@@ -713,8 +686,8 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, 
Lisp_Object prompt,
     {
       XWINDOW (minibuf_window)->cursor.hpos = 0;
       XWINDOW (minibuf_window)->cursor.x = 0;
-      XWINDOW (minibuf_window)->must_be_updated_p = 1;
-      update_frame (XFRAME (selected_frame), 1, 1);
+      XWINDOW (minibuf_window)->must_be_updated_p = true;
+      update_frame (XFRAME (selected_frame), true, true);
       flush_frame (XFRAME (XWINDOW (minibuf_window)->frame));
     }
 
@@ -1158,9 +1131,8 @@ function, instead of the usual behavior.  */)
            }
 
          AUTO_STRING (format, "%s (default %s): ");
-         prompt = Fformat (3, ((Lisp_Object [])
-                               {format, prompt,
-                                CONSP (def) ? XCAR (def) : def}));
+         prompt = CALLN (Fformat, format, prompt,
+                         CONSP (def) ? XCAR (def) : def);
        }
 
       result = Fcompleting_read (prompt, intern ("internal-complete-buffer"),
@@ -1168,8 +1140,7 @@ function, instead of the usual behavior.  */)
                                 Qbuffer_name_history, def, Qnil);
     }
   else
-    result = Ffuncall (4, ((Lisp_Object [])
-      { Vread_buffer_function, prompt, def, require_match }));
+    result = call3 (Vread_buffer_function, prompt, def, require_match);
   return unbind_to (count, result);
 }
 
@@ -1689,17 +1660,10 @@ Completion ignores case if the ambient value of
 See also `completing-read-function'.  */)
   (Lisp_Object prompt, Lisp_Object collection, Lisp_Object predicate, 
Lisp_Object require_match, Lisp_Object initial_input, Lisp_Object hist, 
Lisp_Object def, Lisp_Object inherit_input_method)
 {
-  Lisp_Object args[9];
-  args[0] = Fsymbol_value (intern ("completing-read-function"));
-  args[1] = prompt;
-  args[2] = collection;
-  args[3] = predicate;
-  args[4] = require_match;
-  args[5] = initial_input;
-  args[6] = hist;
-  args[7] = def;
-  args[8] = inherit_input_method;
-  return Ffuncall (9, args);
+  return CALLN (Ffuncall,
+               Fsymbol_value (intern ("completing-read-function")),
+               prompt, collection, predicate, require_match, initial_input,
+               hist, def, inherit_input_method);
 }
 
 /* Test whether TXT is an exact completion.  */
@@ -1821,8 +1785,6 @@ the values STRING, PREDICATE and `lambda'.  */)
     return Qt;
 }
 
-static Lisp_Object Qmetadata;
-
 DEFUN ("internal-complete-buffer", Finternal_complete_buffer, 
Sinternal_complete_buffer, 3, 3, 0,
        doc: /* Perform completion on buffer names.
 STRING and PREDICATE have the same meanings as in `try-completion',
@@ -1956,9 +1918,14 @@ syms_of_minibuf (void)
   Fset (Qbuffer_name_history, Qnil);
 
   DEFSYM (Qcustom_variable_p, "custom-variable-p");
+
+  /* Normal hooks for entry to and exit from minibuffer.  */
   DEFSYM (Qminibuffer_setup_hook, "minibuffer-setup-hook");
   DEFSYM (Qminibuffer_exit_hook, "minibuffer-exit-hook");
+
+  /* The maximum length of a minibuffer history.  */
   DEFSYM (Qhistory_length, "history-length");
+
   DEFSYM (Qcurrent_input_method, "current-input-method");
   DEFSYM (Qactivate_input_method, "activate-input-method");
   DEFSYM (Qcase_fold_search, "case-fold-search");
diff --git a/src/msdos.c b/src/msdos.c
index 14c2624..8b05b34 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -1,6 +1,6 @@
 /* MS-DOS specific C utilities.          -*- coding: cp850 -*-
 
-Copyright (C) 1993-1997, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1997, 1999-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1733,7 +1733,7 @@ IT_set_frame_parameters (struct frame *f, Lisp_Object 
alist)
 
   if (redraw)
     {
-      face_change_count++;     /* forces xdisp.c to recompute basic faces */
+      face_change = true;      /* forces xdisp.c to recompute basic faces */
       if (f == SELECTED_FRAME ())
        redraw_frame (f);
     }
diff --git a/src/msdos.h b/src/msdos.h
index e863c7c..1e37599 100644
--- a/src/msdos.h
+++ b/src/msdos.h
@@ -1,5 +1,5 @@
 /* MS-DOS specific C utilities, interface.
-   Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/nsfns.m b/src/nsfns.m
index 4f158f4..cc2e496 100644
--- a/src/nsfns.m
+++ b/src/nsfns.m
@@ -1,6 +1,6 @@
 /* Functions for the NeXT/Open/GNUstep and MacOSX window system.
 
-Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2014 Free Software
+Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -61,35 +61,6 @@ int fns_trace_num = 1;
 
 extern NSArray *ns_send_types, *ns_return_types, *ns_drag_types;
 
-extern Lisp_Object Qforeground_color;
-extern Lisp_Object Qbackground_color;
-extern Lisp_Object Qcursor_color;
-extern Lisp_Object Qinternal_border_width;
-extern Lisp_Object Qvisibility;
-extern Lisp_Object Qcursor_type;
-extern Lisp_Object Qicon_type;
-extern Lisp_Object Qicon_name;
-extern Lisp_Object Qicon_left;
-extern Lisp_Object Qicon_top;
-extern Lisp_Object Qtop;
-extern Lisp_Object Qdisplay;
-extern Lisp_Object Qvertical_scroll_bars;
-extern Lisp_Object Qhorizontal_scroll_bars;
-extern Lisp_Object Qauto_raise;
-extern Lisp_Object Qauto_lower;
-extern Lisp_Object Qbox;
-extern Lisp_Object Qscroll_bar_width;
-extern Lisp_Object Qscroll_bar_height;
-extern Lisp_Object Qx_resource_name;
-extern Lisp_Object Qface_set_after_frame_default;
-extern Lisp_Object Qunderline, Qundefined;
-extern Lisp_Object Qheight, Qminibuffer, Qname, Qonly, Qwidth;
-extern Lisp_Object Qunsplittable, Qmenu_bar_lines, Qbuffer_predicate, Qtitle;
-
-
-Lisp_Object Qbuffered;
-Lisp_Object Qfontsize;
-
 EmacsTooltip *ns_tooltip = nil;
 
 /* Need forward declaration here to preserve organizational integrity of file 
*/
@@ -619,18 +590,11 @@ ns_set_name_as_filename (struct frame *f)
 
           fstr = [NSString stringWithUTF8String: SSDATA (encoded_filename)];
           if (fstr == nil) fstr = @"";
-#ifdef NS_IMPL_COCOA
-          /* work around a bug observed on 10.3 and later where
-             setTitleWithRepresentedFilename does not clear out previous state
-             if given filename does not exist */
-          if (! [[NSFileManager defaultManager] fileExistsAtPath: fstr])
-            [[view window] setRepresentedFilename: @""];
-#endif
         }
       else
         fstr = @"";
 
-      [[view window] setRepresentedFilename: fstr];
+      ns_set_represented_filename (fstr, f);
       [[view window] setTitle: str];
       fset_name (f, name);
     }
@@ -1287,7 +1251,8 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
 
   /* Read comment about this code in corresponding place in xfns.c.  */
   adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
-                    FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, 1, Qnil);
+                    FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, 1,
+                    Qx_create_frame_1);
 
   /* The resources controlling the menu-bar and tool-bar are
      processed specially at startup, and reflected in the mode
@@ -1361,7 +1326,8 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
   /* Allow x_set_window_size, now.  */
   f->can_x_set_window_size = true;
 
-  adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, 1, 
Qnil);
+  adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, 1,
+                    Qx_create_frame_2);
 
   if (! f->output_data.ns->explicit_parent)
     {
@@ -2978,8 +2944,7 @@ handlePanelKeys (NSSavePanel *panel, NSEvent *theEvent)
 void
 syms_of_nsfns (void)
 {
-  Qfontsize = intern_c_string ("fontsize");
-  staticpro (&Qfontsize);
+  DEFSYM (Qfontsize, "fontsize");
 
   DEFVAR_LISP ("ns-icon-type-alist", Vns_icon_type_alist,
                doc: /* Alist of elements (REGEXP . IMAGE) for images of icons 
associated to frames.
diff --git a/src/nsfont.m b/src/nsfont.m
index 13c7b0b..683ab17 100644
--- a/src/nsfont.m
+++ b/src/nsfont.m
@@ -1,6 +1,6 @@
 /* Font back-end driver for the NeXT/Open/GNUstep and MacOSX window system.
    See font.h
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -45,11 +45,6 @@ Author: Adrian Robert (address@hidden)
 #define NSFONT_TRACE 0
 #define LCD_SMOOTHING_MARGIN 2
 
-extern Lisp_Object Qns;
-extern Lisp_Object Qnormal, Qbold, Qitalic;
-static Lisp_Object Qapple, Qroman, Qmedium;
-static Lisp_Object Qcondensed, Qexpanded;
-extern Lisp_Object Qappend;
 extern float ns_antialias_threshold;
 
 
@@ -98,7 +93,7 @@ ns_get_family (Lisp_Object font_spec)
       return nil;
   else
     {
-      char *tmp = xstrdup (SSDATA (SYMBOL_NAME (tem)));
+      char *tmp = xlispstrdup (SYMBOL_NAME (tem));
       NSString *family;
       ns_unescape_name (tmp);
       family = [NSString stringWithUTF8String: tmp];
@@ -1493,7 +1488,7 @@ ns_glyph_metrics (struct nsfont_info *font_info, unsigned 
char block)
         characterIndex: (NSUInteger)charIndex
 {
   len = glyphIndex+length;
-  for (i =glyphIndex; i<len; i++) 
+  for (i =glyphIndex; i<len; i++)
     cglyphs[i] = glyphs[i-glyphIndex];
   if (len > maxGlyph)
     maxGlyph = len;
diff --git a/src/nsgui.h b/src/nsgui.h
index 0f963f6..498eb7f 100644
--- a/src/nsgui.h
+++ b/src/nsgui.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication on the NeXT/Open/GNUstep API.
-   Copyright (C) 1995, 2005, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2005, 2008-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/nsimage.m b/src/nsimage.m
index 580d8f3..f37ad38 100644
--- a/src/nsimage.m
+++ b/src/nsimage.m
@@ -1,5 +1,5 @@
 /* Image support for the NeXT/Open/GNUstep and MacOSX window system.
-   Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2014 Free Software
+   Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -34,8 +34,6 @@ GNUstep port and post-20 update by Adrian Robert 
(address@hidden)
 #include "nsterm.h"
 #include "frame.h"
 
-extern Lisp_Object QCfile, QCdata;
-
 /* call tracing */
 #if 0
 int image_trace_num = 0;
@@ -247,6 +245,7 @@ ns_set_alpha (void *img, int x, int y, unsigned char a)
               if (s >= bits + length)
                 {
                   [bmRep release];
+                  bmRep = nil;
                   return nil;
                 }
 #define hexchar(x) ('0' <= (x) && (x) <= '9' ? (x) - '0' : (x) - 'a' + 10)
@@ -350,15 +349,15 @@ ns_set_alpha (void *img, int x, int y, unsigned char a)
     {
       if ([rep respondsToSelector: @selector (getBitmapDataPlanes:)])
         {
-          bmRep = (NSBitmapImageRep *) rep;
+          NSBitmapImageRep *bmr = (NSBitmapImageRep *) rep;
 
-          if ([bmRep numberOfPlanes] >= 3)
-              [bmRep getBitmapDataPlanes: pixmapData];
+          if ([bmr numberOfPlanes] >= 3)
+              [bmr getBitmapDataPlanes: pixmapData];
 
           /* The next two lines cause the DPI of the image to be ignored.
              This seems to be the behavior users expect. */
           [self setScalesWhenResized: YES];
-          [self setSize: NSMakeSize([bmRep pixelsWide], [bmRep pixelsHigh])];
+          [self setSize: NSMakeSize([bmr pixelsWide], [bmr pixelsHigh])];
 
           break;
         }
diff --git a/src/nsmenu.m b/src/nsmenu.m
index 0e8b68b..26fe26e 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -1,5 +1,5 @@
 /* NeXT/Open/GNUstep and MacOSX Cocoa menu and toolbar module.
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -59,12 +59,6 @@ int menu_trace_num = 0;
 #include "nsmenu_common.c"
 #endif
 
-extern Lisp_Object Qundefined, Qmenu_enable, Qmenu_bar_update_hook;
-extern Lisp_Object QCtoggle, QCradio;
-
-Lisp_Object Qdebug_on_next_call;
-extern Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map;
-
 extern long context_menu_value;
 EmacsMenu *mainMenu, *svcsMenu, *dockMenu;
 
@@ -1876,6 +1870,5 @@ syms_of_nsmenu (void)
   defsubr (&Sns_reset_menu);
   defsubr (&Smenu_or_popup_active_p);
 
-  Qdebug_on_next_call = intern_c_string ("debug-on-next-call");
-  staticpro (&Qdebug_on_next_call);
+  DEFSYM (Qdebug_on_next_call, "debug-on-next-call");
 }
diff --git a/src/nsselect.m b/src/nsselect.m
index bcf2ac1..1544b16 100644
--- a/src/nsselect.m
+++ b/src/nsselect.m
@@ -1,5 +1,5 @@
 /* NeXT/Open/GNUstep / MacOSX Cocoa selection processing for emacs.
-   Copyright (C) 1993-1994, 2005-2006, 2008-2014 Free Software
+   Copyright (C) 1993-1994, 2005-2006, 2008-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -34,8 +34,6 @@ GNUstep port and post-20 update by Adrian Robert 
(address@hidden)
 #include "termhooks.h"
 #include "keyboard.h"
 
-static Lisp_Object QCLIPBOARD, QSECONDARY, QTEXT, QFILE_NAME;
-
 static Lisp_Object Vselection_alist;
 
 /* NSGeneralPboard is pretty much analogous to X11 CLIPBOARD */
@@ -438,7 +436,8 @@ On Nextstep, TERMINAL is unused.  */)
   if (EQ (selection, Qnil)) selection = QPRIMARY;
   if (EQ (selection, Qt)) selection = QSECONDARY;
   return ns_get_pb_change_count (selection)
-    == ns_get_our_change_count_for (selection);
+    == ns_get_our_change_count_for (selection)
+    ? Qt : Qnil;
 }
 
 
@@ -504,10 +503,10 @@ nxatoms_of_nsselect (void)
 void
 syms_of_nsselect (void)
 {
-  QCLIPBOARD = intern_c_string ("CLIPBOARD");  staticpro (&QCLIPBOARD);
-  QSECONDARY = intern_c_string ("SECONDARY");  staticpro (&QSECONDARY);
-  QTEXT      = intern_c_string ("TEXT");       staticpro (&QTEXT);
-  QFILE_NAME = intern_c_string ("FILE_NAME");  staticpro (&QFILE_NAME);
+  DEFSYM (QCLIPBOARD, "CLIPBOARD");
+  DEFSYM (QSECONDARY, "SECONDARY");
+  DEFSYM (QTEXT, "TEXT");
+  DEFSYM (QFILE_NAME, "FILE_NAME");
 
   defsubr (&Sns_disown_selection_internal);
   defsubr (&Sns_get_selection);
diff --git a/src/nsterm.h b/src/nsterm.h
index b33e6b2..9035ee1 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication with NeXT/Open/GNUstep API.
-   Copyright (C) 1989, 1993, 2005, 2008-2014 Free Software Foundation,
+   Copyright (C) 1989, 1993, 2005, 2008-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -792,7 +792,6 @@ struct glyph_string;
 void ns_dump_glyphstring (struct glyph_string *s);
 
 /* Implemented in nsterm, published in or needed from nsfns. */
-extern Lisp_Object Qfontsize;
 extern Lisp_Object ns_list_fonts (struct frame *f, Lisp_Object pattern,
                                   int size, int maxnames);
 extern void ns_clear_frame (struct frame *f);
@@ -890,11 +889,15 @@ extern unsigned long ns_get_rgb_color (struct frame *f,
 extern void ns_init_events ();
 extern void ns_finish_events ();
 
-/* From nsterm.m, needed in nsfont.m. */
 #ifdef __OBJC__
+/* From nsterm.m, needed in nsfont.m. */
 extern void
 ns_draw_text_decoration (struct glyph_string *s, struct face *face,
                          NSColor *defaultCol, CGFloat width, CGFloat x);
+/* Needed in nsfns.m.  */
+extern void
+ns_set_represented_filename (NSString* fstr, struct frame *f);
+
 #endif
 
 #ifdef NS_IMPL_GNUSTEP
diff --git a/src/nsterm.m b/src/nsterm.m
index 8729fa5..e90c3d7 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -1,6 +1,6 @@
 /* NeXT/Open/GNUstep / MacOSX communication module.
 
-Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2014 Free Software
+Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -225,14 +225,6 @@ static unsigned convert_ns_to_X_keysym[] =
   0x1B,                                0x1B   /* escape */
 };
 
-static Lisp_Object Qmodifier_value;
-Lisp_Object Qalt, Qcontrol, Qhyper, Qmeta, Qsuper;
-extern Lisp_Object Qcursor_color, Qcursor_type, Qns;
-
-static Lisp_Object QUTF8_STRING;
-static Lisp_Object Qcocoa, Qgnustep;
-static Lisp_Object Qfile, Qurl;
-
 /* On OS X picks up the default NSGlobalDomain AppleAntiAliasingThreshold,
    the maximum font size to NOT antialias.  On GNUstep there is currently
    no way to control this behavior. */
@@ -293,6 +285,9 @@ static struct {
   NULL, 0, 0
 };
 
+static NSString *represented_filename = nil;
+static struct frame *represented_frame = 0;
+
 #ifdef NS_IMPL_COCOA
 /*
  * State for pending menu activation:
@@ -378,8 +373,11 @@ static CGPoint menu_mouse_point;
       if (e) emacs_event->timestamp = EV_TIMESTAMP (e);                 \
       if (q_event_ptr)                                                  \
         {                                                               \
+          Lisp_Object tem = Vinhibit_quit;                              \
+          Vinhibit_quit = Qt;                                           \
           n_emacs_events_pending++;                                     \
           kbd_buffer_store_event_hold (emacs_event, q_event_ptr);       \
+          Vinhibit_quit = tem;                                          \
         }                                                               \
       else                                                              \
         hold_event (emacs_event);                                       \
@@ -400,6 +398,13 @@ void x_set_frame_alpha (struct frame *f);
    ========================================================================== 
*/
 
 void
+ns_set_represented_filename (NSString* fstr, struct frame *f)
+{
+  represented_filename = [fstr retain];
+  represented_frame = f;
+}
+
+void
 ns_init_events (struct input_event* ev)
 {
   EVENT_INIT (*ev);
@@ -1072,7 +1077,7 @@ ns_lower_frame (struct frame *f)
 
 
 static void
-ns_frame_raise_lower (struct frame *f, int raise)
+ns_frame_raise_lower (struct frame *f, bool raise)
 /* --------------------------------------------------------------------------
      External (hook)
    -------------------------------------------------------------------------- 
*/
@@ -1312,7 +1317,7 @@ x_set_offset (struct frame *f, int xoff, int yoff, int 
change_grav)
 
 void
 x_set_window_size (struct frame *f,
-                   int change_grav,
+                   bool change_gravity,
                    int width,
                    int height,
                    bool pixelwise)
@@ -1402,15 +1407,8 @@ x_set_window_size (struct frame *f,
     [view setBoundsOrigin: origin];
   }
 
-  change_frame_size (f, width, height, 0, 1, 0, pixelwise);
-/*  SET_FRAME_GARBAGED (f); // this short-circuits expose call in drawRect */
-
-  mark_window_cursors_off (XWINDOW (f->root_window));
-  cancel_mouse_face (f);
-
+  [view updateFrameSize: NO];
   unblock_input ();
-
-  do_pending_window_change (0);
 }
 
 
@@ -4318,7 +4316,7 @@ ns_term_init (Lisp_Object display_name)
 
   dpyinfo->name_list_element = Fcons (display_name, Qnil);
 
-  terminal->name = xstrdup (SSDATA (display_name));
+  terminal->name = xlispstrdup (display_name);
 
   unblock_input ();
 
@@ -4600,6 +4598,23 @@ ns_term_shutdown (int sig)
     }
 #endif
 
+  if (represented_filename != nil && represented_frame)
+    {
+      NSString *fstr = represented_filename;
+      NSView *view = FRAME_NS_VIEW (represented_frame);
+#ifdef NS_IMPL_COCOA
+      /* work around a bug observed on 10.3 and later where
+         setTitleWithRepresentedFilename does not clear out previous state
+         if given filename does not exist */
+      if (! [[NSFileManager defaultManager] fileExistsAtPath: fstr])
+        [[view window] setRepresentedFilename: @""];
+#endif
+      [[view window] setRepresentedFilename: fstr];
+      [represented_filename release];
+      represented_filename = nil;
+      represented_frame = NULL;
+    }
+
   if (type == NSApplicationDefined)
     {
       switch ([theEvent data2])
@@ -6758,7 +6773,9 @@ if (cols > 0 && rows > 0)
     return;
 
   ns_clear_frame_area (emacsframe, x, y, width, height);
+  block_input ();
   expose_frame (emacsframe, x, y, width, height);
+  unblock_input ();
 
   /*
     drawRect: may be called (at least in OS X 10.5) for invisible
@@ -7595,8 +7612,8 @@ x_new_font (struct frame *f, Lisp_Object font_object, int 
fontset)
 
   /* Now make the frame display the given font.  */
   if (FRAME_NS_WINDOW (f) != 0 && ! [view isFullscreen])
-    x_set_window_size (f, 0, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
-                       FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 1);
+    x_set_window_size (f, false, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
+                       FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), true);
 
   return font_object;
 }
diff --git a/src/print.c b/src/print.c
index 49331ef..1a0aebb 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1,6 +1,6 @@
 /* Lisp object printing and output streams.
 
-Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2014 Free Software
+Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -37,14 +37,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "termhooks.h"         /* For struct terminal.  */
 #include "font.h"
 
-Lisp_Object Qstandard_output;
-
-static Lisp_Object Qtemp_buffer_setup_hook;
-
-/* These are used to print like we read.  */
-
-static Lisp_Object Qfloat_output_format;
-
 #include <float.h>
 #include <ftoastr.h>
 
@@ -72,9 +64,6 @@ static ptrdiff_t print_buffer_pos;
 /* Bytes stored in print_buffer.  */
 static ptrdiff_t print_buffer_pos_byte;
 
-Lisp_Object Qprint_escape_newlines;
-static Lisp_Object Qprint_escape_multibyte, Qprint_escape_nonascii;
-
 /* Vprint_number_table is a table, that keeps objects that are going to
    be printed, to allow use of #n= and #n# to express sharing.
    For any given object, the table can give the following values:
@@ -507,7 +496,7 @@ temp_output_buffer_setup (const char *bufname)
   Ferase_buffer ();
   XSETBUFFER (buf, current_buffer);
 
-  Frun_hooks (1, &Qtemp_buffer_setup_hook);
+  run_hook (Qtemp_buffer_setup_hook);
 
   unbind_to (count, Qnil);
 
@@ -716,10 +705,6 @@ is used instead.  */)
   return object;
 }
 
-/* The subroutine object for external-debugging-output is kept here
-   for the convenience of the debugger.  */
-Lisp_Object Qexternal_debugging_output;
-
 DEFUN ("external-debugging-output", Fexternal_debugging_output, 
Sexternal_debugging_output, 1, 1, 0,
        doc: /* Write CHARACTER to stderr.
 You can call print while debugging emacs, and pass it this function
@@ -1186,12 +1171,7 @@ print_preprocess (Lisp_Object obj)
   if (PRINT_CIRCLE_CANDIDATE_P (obj))
     {
       if (!HASH_TABLE_P (Vprint_number_table))
-       {
-         Lisp_Object args[2];
-         args[0] = QCtest;
-         args[1] = Qeq;
-         Vprint_number_table = Fmake_hash_table (2, args);
-       }
+       Vprint_number_table = CALLN (Fmake_hash_table, QCtest, Qeq);
 
       /* In case print-circle is nil and print-gensym is t,
         add OBJ to Vprint_number_table only when OBJ is a symbol.  */
@@ -2098,14 +2078,16 @@ print_object (Lisp_Object obj, Lisp_Object 
printcharfun, bool escapeflag)
                for (i = 0; i < limit; i++)
                  {
                    Lisp_Object maybe = area[i];
+                   int valid = valid_lisp_object_p (maybe);
 
-                   if (valid_lisp_object_p (maybe) > 0)
+                   if (0 < valid)
                      {
                        PRINTCHAR (' ');
                        print_object (maybe, printcharfun, escapeflag);
                      }
                    else
-                     strout (" <invalid>", -1, -1, printcharfun);
+                     strout (valid ? " <some>" : " <invalid>",
+                             -1, -1, printcharfun);
                  }
                if (i == limit && i < amount)
                  strout (" ...", 4, 4, printcharfun);
@@ -2218,7 +2200,10 @@ print_interval (INTERVAL interval, Lisp_Object 
printcharfun)
 void
 init_print_once (void)
 {
+  /* The subroutine object for external-debugging-output is kept here
+     for the convenience of the debugger.  */
   DEFSYM (Qexternal_debugging_output, "external-debugging-output");
+
   defsubr (&Sexternal_debugging_output);
 }
 
diff --git a/src/process.c b/src/process.c
index 6eae516..1d935ba 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1,7 +1,7 @@
 /* Asynchronous subprocess control for GNU Emacs.
 
-Copyright (C) 1985-1988, 1993-1996, 1998-1999, 2001-2014
-  Free Software Foundation, Inc.
+Copyright (C) 1985-1988, 1993-1996, 1998-1999, 2001-2015 Free Software
+Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -140,12 +140,6 @@ extern int sys_select (int, fd_set *, fd_set *, fd_set *,
 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
 # pragma GCC diagnostic ignored "-Wstrict-overflow"
 #endif
-
-Lisp_Object Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess, Qttname, Qtpgid;
-Lisp_Object Qminflt, Qmajflt, Qcminflt, Qcmajflt, Qutime, Qstime, Qcstime;
-Lisp_Object Qcutime, Qpri, Qnice, Qthcount, Qstart, Qvsize, Qrss, Qargs;
-Lisp_Object Quser, Qgroup, Qetime, Qpcpu, Qpmem, Qtime, Qctime;
-Lisp_Object QCname, QCtype;
 
 /* True if keyboard input is on hold, zero otherwise.  */
 
@@ -191,27 +185,6 @@ process_socket (int domain, int type, int protocol)
 # define socket(domain, type, protocol) process_socket (domain, type, protocol)
 #endif
 
-Lisp_Object Qprocessp;
-static Lisp_Object Qrun, Qstop, Qsignal;
-static Lisp_Object Qopen, Qclosed, Qconnect, Qfailed, Qlisten;
-Lisp_Object Qlocal;
-static Lisp_Object Qipv4, Qdatagram, Qseqpacket;
-static Lisp_Object Qreal, Qnetwork, Qserial;
-#ifdef AF_INET6
-static Lisp_Object Qipv6;
-#endif
-static Lisp_Object QCport, QCprocess;
-Lisp_Object QCspeed;
-Lisp_Object QCbytesize, QCstopbits, QCparity, Qodd, Qeven;
-Lisp_Object QCflowcontrol, Qhw, Qsw, QCsummary;
-static Lisp_Object QCbuffer, QChost, QCservice;
-static Lisp_Object QClocal, QCremote, QCcoding;
-static Lisp_Object QCserver, QCnowait, QCnoquery, QCstop;
-static Lisp_Object QCsentinel, QClog, QCoptions, QCplist;
-static Lisp_Object Qlast_nonmenu_event;
-static Lisp_Object Qinternal_default_process_sentinel;
-static Lisp_Object Qinternal_default_process_filter;
-
 #define NETCONN_P(p) (EQ (XPROCESS (p)->type, Qnetwork))
 #define NETCONN1_P(p) (EQ (p->type, Qnetwork))
 #define SERIALCONN_P(p) (EQ (XPROCESS (p)->type, Qserial))
@@ -326,10 +299,10 @@ static int max_process_desc;
 /* The largest descriptor currently in use for input; -1 if none.  */
 static int max_input_desc;
 
-/* Indexed by descriptor, gives the process (if any) for that descriptor */
+/* Indexed by descriptor, gives the process (if any) for that descriptor.  */
 static Lisp_Object chan_process[FD_SETSIZE];
 
-/* Alist of elements (NAME . PROCESS) */
+/* Alist of elements (NAME . PROCESS).  */
 static Lisp_Object Vprocess_alist;
 
 /* Buffered-ahead input char from process, indexed by channel.
@@ -449,6 +422,11 @@ pset_write_queue (struct Lisp_Process *p, Lisp_Object val)
 }
 
 
+static Lisp_Object
+make_lisp_proc (struct Lisp_Process *p)
+{
+  return make_lisp_ptr (p, Lisp_Vectorlike);
+}
 
 static struct fd_callback_data
 {
@@ -456,7 +434,7 @@ static struct fd_callback_data
   void *data;
 #define FOR_READ  1
 #define FOR_WRITE 2
-  int condition; /* mask of the defines above.  */
+  int condition; /* Mask of the defines above.  */
 } fd_callback_info[FD_SETSIZE];
 
 
@@ -691,8 +669,8 @@ allocate_pty (char pty_name[PTY_NAME_SIZE])
               have a race condition between the PTY_OPEN and here.  */
            fcntl (fd, F_SETFD, FD_CLOEXEC);
 #endif
-           /* check to make certain that both sides are available
-              this avoids a nasty yet stupid bug in rlogins */
+           /* Check to make certain that both sides are available
+              this avoids a nasty yet stupid bug in rlogins.  */
 #ifdef PTY_TTY_NAME_SPRINTF
            PTY_TTY_NAME_SPRINTF
 #else
@@ -714,7 +692,15 @@ allocate_pty (char pty_name[PTY_NAME_SIZE])
 #endif /* HAVE_PTYS */
   return -1;
 }
-
+
+/* Allocate basically initialized process.  */
+
+static struct Lisp_Process *
+allocate_process (void)
+{
+  return ALLOCATE_ZEROED_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
+}
+
 static Lisp_Object
 make_process (Lisp_Object name)
 {
@@ -1343,7 +1329,7 @@ Returns nil if format of ADDRESS is invalid.  */)
              && XINT (p->contents[i]) > 255)
            return Qnil;
 
-         args[i+1] = p->contents[i];
+         args[i + 1] = p->contents[i];
        }
 
       return Fformat (nargs + 1, args);
@@ -1352,7 +1338,7 @@ Returns nil if format of ADDRESS is invalid.  */)
   if (CONSP (address))
     {
       AUTO_STRING (format, "<Family %d>");
-      return Fformat (2, (Lisp_Object []) {format, Fcar (address)});
+      return CALLN (Fformat, format, Fcar (address));
     }
 
   return Qnil;
@@ -1544,11 +1530,8 @@ usage: (start-process NAME BUFFER PROGRAM &rest 
PROGRAM-ARGS)  */)
          tem = program;
        }
 
-      /* If program file name starts with /: for quoting a magic name,
-        discard that.  */
-      if (SBYTES (tem) > 2 && SREF (tem, 0) == '/'
-         && SREF (tem, 1) == ':')
-       tem = Fsubstring (tem, make_number (2), Qnil);
+      /* Remove "/:" from TEM.  */
+      tem = remove_slash_colon (tem);
 
       {
        Lisp_Object arg_encoding = Qnil;
@@ -1723,7 +1706,7 @@ create_process (Lisp_Object process, char **new_argv, 
Lisp_Object current_dir)
   if (inchannel > max_process_desc)
     max_process_desc = inchannel;
 
-  /* This may signal an error. */
+  /* This may signal an error.  */
   setup_process_coding_systems (process);
 
   block_input ();
@@ -1996,7 +1979,7 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len)
       {
        struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
        uint16_t *ip6 = (uint16_t *) &sin6->sin6_addr;
-       len = sizeof (sin6->sin6_addr)/2 + 1;
+       len = sizeof (sin6->sin6_addr) / 2 + 1;
        address = Fmake_vector (make_number (len), Qnil);
        p = XVECTOR (address);
        p->contents[--len] = make_number (ntohs (sin6->sin6_port));
@@ -2207,14 +2190,14 @@ Returns nil upon error setting address, ADDRESS 
otherwise.  */)
 
 static const struct socket_options {
   /* The name of this option.  Should be lowercase version of option
-     name without SO_ prefix. */
+     name without SO_ prefix.  */
   const char *name;
-  /* Option level SOL_... */
+  /* Option level SOL_...  */
   int optlevel;
-  /* Option number SO_... */
+  /* Option number SO_...  */
   int optnum;
   enum { SOPT_UNKNOWN, SOPT_BOOL, SOPT_INT, SOPT_IFNAME, SOPT_LINGER } opttype;
-  enum { OPIX_NONE=0, OPIX_MISC=1, OPIX_REUSEADDR=2 } optbit;
+  enum { OPIX_NONE = 0, OPIX_MISC = 1, OPIX_REUSEADDR = 2 } optbit;
 } socket_options[] =
   {
 #ifdef SO_BINDTODEVICE
@@ -2290,7 +2273,7 @@ set_socket_option (int s, Lisp_Object opt, Lisp_Object 
val)
 #ifdef SO_BINDTODEVICE
     case SOPT_IFNAME:
       {
-       char devname[IFNAMSIZ+1];
+       char devname[IFNAMSIZ + 1];
 
        /* This is broken, at least in the Linux 2.4 kernel.
           To unbind, the arg must be a zero integer, not the empty string.
@@ -2667,7 +2650,7 @@ usage:  (make-serial-process &rest ARGS)  */)
    exactly like a normal process when reading and writing.  Primary
    differences are in status display and process deletion.  A network
    connection has no PID; you cannot signal it.  All you can do is
-   stop/continue it and deactivate/close it via delete-process */
+   stop/continue it and deactivate/close it via delete-process.  */
 
 DEFUN ("make-network-process", Fmake_network_process, Smake_network_process,
        0, MANY, 0,
@@ -2871,7 +2854,7 @@ usage: (make-network-process &rest ARGS)  */)
   GCPRO1 (contact);
 
 #ifdef WINDOWSNT
-  /* Ensure socket support is loaded if available. */
+  /* Ensure socket support is loaded if available.  */
   init_winsock (TRUE);
 #endif
 
@@ -2978,7 +2961,7 @@ usage: (make-network-process &rest ARGS)  */)
     {
       if (EQ (host, Qlocal))
        /* Depending on setup, "localhost" may map to different IPv4 and/or
-          IPv6 addresses, so it's better to be explicit.  (Bug#6781) */
+          IPv6 addresses, so it's better to be explicit (Bug#6781).  */
        host = build_string ("127.0.0.1");
       CHECK_STRING (host);
     }
@@ -3110,7 +3093,7 @@ usage: (make-network-process &rest ARGS)  */)
          address_in.sin_family = family;
        }
       else
-       /* Attempt to interpret host as numeric inet address */
+       /* Attempt to interpret host as numeric inet address.  */
        {
          unsigned long numeric_addr;
          numeric_addr = inet_addr (SSDATA (host));
@@ -3176,8 +3159,8 @@ usage: (make-network-process &rest ARGS)  */)
       /* Parse network options in the arg list.
         We simply ignore anything which isn't a known option (including other 
keywords).
         An error is signaled if setting a known option fails.  */
-      for (optn = optbits = 0; optn < nargs-1; optn += 2)
-       optbits |= set_socket_option (s, args[optn], args[optn+1]);
+      for (optn = optbits = 0; optn < nargs - 1; optn += 2)
+       optbits |= set_socket_option (s, args[optn], args[optn + 1]);
 
       if (is_server)
        {
@@ -3248,7 +3231,7 @@ usage: (make-network-process &rest ARGS)  */)
        {
          /* Unlike most other syscalls connect() cannot be called
             again.  (That would return EALREADY.)  The proper way to
-            wait for completion is pselect(). */
+            wait for completion is pselect().  */
          int sc;
          socklen_t len;
          fd_set fdset;
@@ -3439,7 +3422,7 @@ usage: (make-network-process &rest ARGS)  */)
     struct gcpro gcpro1;
     /* Qt denotes we have not yet called Ffind_operation_coding_system.  */
     Lisp_Object coding_systems = Qt;
-    Lisp_Object fargs[5], val;
+    Lisp_Object val;
 
     if (!NILP (tem))
       {
@@ -3462,10 +3445,10 @@ usage: (make-network-process &rest ARGS)  */)
          coding_systems = Qnil;
        else
          {
-           fargs[0] = Qopen_network_stream, fargs[1] = name,
-             fargs[2] = buffer, fargs[3] = host, fargs[4] = service;
            GCPRO1 (proc);
-           coding_systems = Ffind_operation_coding_system (5, fargs);
+           coding_systems = CALLN (Ffind_operation_coding_system,
+                                   Qopen_network_stream, name, buffer,
+                                   host, service);
            UNGCPRO;
          }
        if (CONSP (coding_systems))
@@ -3495,10 +3478,10 @@ usage: (make-network-process &rest ARGS)  */)
              coding_systems = Qnil;
            else
              {
-               fargs[0] = Qopen_network_stream, fargs[1] = name,
-                 fargs[2] = buffer, fargs[3] = host, fargs[4] = service;
                GCPRO1 (proc);
-               coding_systems = Ffind_operation_coding_system (5, fargs);
+               coding_systems = CALLN (Ffind_operation_coding_system,
+                                       Qopen_network_stream, name, buffer,
+                                       host, service);
                UNGCPRO;
              }
          }
@@ -3626,7 +3609,7 @@ static const struct ifflag_def ifflag_table[] = {
 #endif
 #ifdef IFF_NOTRAILERS
 #ifdef NS_IMPL_COCOA
-  /* Really means smart, notrailers is obsolete */
+  /* Really means smart, notrailers is obsolete.  */
   { IFF_NOTRAILERS,    "smart" },
 #else
   { IFF_NOTRAILERS,    "notrailers" },
@@ -3654,19 +3637,19 @@ static const struct ifflag_def ifflag_table[] = {
   { IFF_DYNAMIC,       "dynamic" },
 #endif
 #ifdef IFF_OACTIVE
-  { IFF_OACTIVE,       "oactive" },    /* OpenBSD: transmission in progress */
+  { IFF_OACTIVE,       "oactive" }, /* OpenBSD: transmission in progress.  */
 #endif
 #ifdef IFF_SIMPLEX
-  { IFF_SIMPLEX,       "simplex" },    /* OpenBSD: can't hear own 
transmissions */
+  { IFF_SIMPLEX,       "simplex" }, /* OpenBSD: can't hear own transmissions.  
*/
 #endif
 #ifdef IFF_LINK0
-  { IFF_LINK0,         "link0" },      /* OpenBSD: per link layer defined bit 
*/
+  { IFF_LINK0,         "link0" }, /* OpenBSD: per link layer defined bit.  */
 #endif
 #ifdef IFF_LINK1
-  { IFF_LINK1,         "link1" },      /* OpenBSD: per link layer defined bit 
*/
+  { IFF_LINK1,         "link1" }, /* OpenBSD: per link layer defined bit.  */
 #endif
 #ifdef IFF_LINK2
-  { IFF_LINK2,         "link2" },      /* OpenBSD: per link layer defined bit 
*/
+  { IFF_LINK2,         "link2" }, /* OpenBSD: per link layer defined bit.  */
 #endif
   { 0, 0 }
 };
@@ -3857,6 +3840,18 @@ Data that is unavailable is returned as nil.  */)
 #endif
 }
 
+/* If program file NAME starts with /: for quoting a magic
+   name, remove that, preserving the multibyteness of NAME.  */
+
+Lisp_Object
+remove_slash_colon (Lisp_Object name)
+{
+  return
+    ((SBYTES (name) > 2 && SREF (name, 0) == '/' && SREF (name, 1) == ':')
+     ? make_specified_string (SSDATA (name) + 2, SCHARS (name) - 2,
+                             SBYTES (name) - 2, STRING_MULTIBYTE (name))
+     : name);
+}
 
 /* Turn off input and output for process PROC.  */
 
@@ -3882,7 +3877,7 @@ deactivate_process (Lisp_Object proc)
     }
 #endif
 
-  /* Beware SIGCHLD hereabouts. */
+  /* Beware SIGCHLD hereabouts.  */
 
   for (i = 0; i < PROCESS_OPEN_FDS; i++)
     close_process_fd (&p->open_fd[i]);
@@ -3997,10 +3992,10 @@ is nil, from any process) before the timeout expired.  
*/)
 
   return
     ((wait_reading_process_output (secs, nsecs, 0, 0,
-                                 Qnil,
-                                 !NILP (process) ? XPROCESS (process) : NULL,
-                                 NILP (just_this_one) ? 0 :
-                                 !INTEGERP (just_this_one) ? 1 : -1)
+                                  Qnil,
+                                  !NILP (process) ? XPROCESS (process) : NULL,
+                                  (NILP (just_this_one) ? 0
+                                   : !INTEGERP (just_this_one) ? 1 : -1))
       <= 0)
      ? Qnil : Qt);
 }
@@ -4014,7 +4009,7 @@ server_accept_connection (Lisp_Object server, int channel)
 {
   Lisp_Object proc, caller, name, buffer;
   Lisp_Object contact, host, service;
-  struct Lisp_Process *ps= XPROCESS (server);
+  struct Lisp_Process *ps = XPROCESS (server);
   struct Lisp_Process *p;
   int s;
   union u_sockaddr {
@@ -4069,12 +4064,12 @@ server_accept_connection (Lisp_Object server, int 
channel)
        unsigned char *ip = (unsigned char *)&saddr.in.sin_addr.s_addr;
 
        AUTO_STRING (ipv4_format, "%d.%d.%d.%d");
-       host = Fformat (5, ((Lisp_Object [])
-         { ipv4_format, make_number (ip[0]),
-           make_number (ip[1]), make_number (ip[2]), make_number (ip[3]) }));
+       host = CALLN (Fformat, ipv4_format,
+                     make_number (ip[0]), make_number (ip[1]),
+                     make_number (ip[2]), make_number (ip[3]));
        service = make_number (ntohs (saddr.in.sin_port));
        AUTO_STRING (caller_format, " <%s:%d>");
-       caller = Fformat (3, (Lisp_Object []) {caller_format, host, service});
+       caller = CALLN (Fformat, caller_format, host, service);
       }
       break;
 
@@ -4089,10 +4084,10 @@ server_accept_connection (Lisp_Object server, int 
channel)
        args[0] = ipv6_format;
        for (i = 0; i < 8; i++)
          args[i + 1] = make_number (ntohs (ip6[i]));
-       host = Fformat (9, args);
+       host = CALLMANY (Fformat, args);
        service = make_number (ntohs (saddr.in.sin_port));
        AUTO_STRING (caller_format, " <[%s]:%d>");
-       caller = Fformat (3, (Lisp_Object []) {caller_format, host, service});
+       caller = CALLN (Fformat, caller_format, host, service);
       }
       break;
 #endif
@@ -4323,7 +4318,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
 
   while (1)
     {
-      bool timeout_reduced_for_timers = 0;
+      bool timeout_reduced_for_timers = false;
 
       /* If calling from keyboard input, do not quit
         since we want to return C-g as an input character.
@@ -4347,7 +4342,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
        {
          /* A negative timeout means
             gobble output available now
-            but don't wait at all. */
+            but don't wait at all.  */
 
          timeout = make_timespec (0, 0);
        }
@@ -4410,7 +4405,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
                  if (timespec_cmp (timer_delay, timeout) < 0)
                    {
                      timeout = timer_delay;
-                     timeout_reduced_for_timers = 1;
+                     timeout_reduced_for_timers = true;
                    }
                }
              else
@@ -4473,7 +4468,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
          && ! EQ (wait_proc->status, Qrun)
          && ! EQ (wait_proc->status, Qconnect))
        {
-         bool read_some_bytes = 0;
+         bool read_some_bytes = false;
 
          clear_waiting_for_input ();
          XSETPROCESS (proc, wait_proc);
@@ -4506,11 +4501,11 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
          break;
        }
 
-      /* Wait till there is something to do */
+      /* Wait till there is something to do.  */
 
       if (wait_proc && just_wait_proc)
        {
-         if (wait_proc->infd < 0)  /* Terminated */
+         if (wait_proc->infd < 0)  /* Terminated.  */
            break;
          FD_SET (wait_proc->infd, &Available);
          check_delay = 0;
@@ -4641,7 +4636,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
                }
              else
                {
-                 /* Check this specific channel. */
+                 /* Check this specific channel.  */
                  if (wait_proc->gnutls_p /* Check for valid process.  */
                      && wait_proc->gnutls_state
                      /* Do we have pending data?  */
@@ -4661,7 +4656,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
 
       xerrno = errno;
 
-      /* Make C-g and alarm signals set flags again */
+      /* Make C-g and alarm signals set flags again.  */
       clear_waiting_for_input ();
 
       /*  If we woke up due to SIGWINCH, actually change size now.  */
@@ -4680,22 +4675,22 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
            report_file_errno ("Failed select", Qnil, xerrno);
        }
 
-      /* Check for keyboard input */
+      /* Check for keyboard input.  */
       /* If there is any, return immediately
-        to give it higher priority than subprocesses */
+        to give it higher priority than subprocesses.  */
 
       if (read_kbd != 0)
        {
          unsigned old_timers_run = timers_run;
          struct buffer *old_buffer = current_buffer;
          Lisp_Object old_window = selected_window;
-         bool leave = 0;
+         bool leave = false;
 
          if (detect_input_pending_run_timers (do_display))
            {
              swallow_events (do_display);
              if (detect_input_pending_run_timers (do_display))
-               leave = 1;
+               leave = true;
            }
 
          /* If a timer has run, this might have changed buffers
@@ -5691,7 +5686,7 @@ return t unconditionally.  */)
   return Qt;
 }
 
-/* send a signal number SIGNO to PROCESS.
+/* Send a signal number SIGNO to PROCESS.
    If CURRENT_GROUP is t, that means send to the process group
    that currently owns the terminal being used to communicate with PROCESS.
    This is used for various commands in shell mode.
@@ -5794,11 +5789,11 @@ process_send_signal (Lisp_Object process, int signo, 
Lisp_Object current_group,
         Or perhaps this is vestigial.  */
       if (gid == -1)
        no_pgrp = 1;
-#else  /* ! defined (TIOCGPGRP ) */
+#else  /* ! defined (TIOCGPGRP) */
       /* Can't select pgrps on this system, so we know that
         the child itself heads the pgrp.  */
       gid = p->pid;
-#endif /* ! defined (TIOCGPGRP ) */
+#endif /* ! defined (TIOCGPGRP) */
 
       /* If current_group is lambda, and the shell owns the terminal,
         don't send any signal.  */
@@ -5980,8 +5975,8 @@ SIGCODE may be an integer, or a symbol whose name is a 
signal name.  */)
       Lisp_Object tem = Fget_process (process);
       if (NILP (tem))
        {
-         Lisp_Object process_number =
-           string_to_number (SSDATA (process), 10, 1);
+         Lisp_Object process_number
+           = string_to_number (SSDATA (process), 10, 1);
          if (INTEGERP (process_number) || FLOATP (process_number))
            tem = process_number;
        }
@@ -6164,7 +6159,7 @@ static signal_handler_t volatile lib_child_handler;
    Inc.
 
    ** Malloc WARNING: This should never call malloc either directly or
-   indirectly; if it does, that is a bug  */
+   indirectly; if it does, that is a bug.  */
 
 static void
 handle_child_signal (int sig)
@@ -6237,7 +6232,7 @@ handle_child_signal (int sig)
 #ifdef NS_IMPL_GNUSTEP
   /* NSTask in GNUstep sets its child handler each time it is called.
      So we must re-set ours.  */
-  catch_child_signal();
+  catch_child_signal ();
 #endif
 }
 
@@ -6669,7 +6664,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
 
   while (1)
     {
-      bool timeout_reduced_for_timers = 0;
+      bool timeout_reduced_for_timers = false;
       fd_set waitchannels;
       int xerrno;
 
@@ -6736,7 +6731,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
              if (timespec_cmp (timer_delay, timeout) < 0)
                {
                  timeout = timer_delay;
-                 timeout_reduced_for_timers = 1;
+                 timeout_reduced_for_timers = true;
                }
            }
        }
@@ -6769,7 +6764,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
 
       xerrno = errno;
 
-      /* Make C-g and alarm signals set flags again */
+      /* Make C-g and alarm signals set flags again.  */
       clear_waiting_for_input ();
 
       /*  If we woke up due to SIGWINCH, actually change size now.  */
@@ -6789,7 +6784,7 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
            report_file_errno ("Failed select", Qnil, xerrno);
        }
 
-      /* Check for keyboard input */
+      /* Check for keyboard input.  */
 
       if (read_kbd
          && detect_input_pending_run_timers (do_display))
@@ -6858,7 +6853,7 @@ add_timer_wait_descriptor (int fd)
 void
 add_keyboard_wait_descriptor (int desc)
 {
-#ifdef subprocesses /* actually means "not MSDOS" */
+#ifdef subprocesses /* Actually means "not MSDOS".  */
   FD_SET (desc, &input_wait_mask);
   FD_SET (desc, &non_process_wait_mask);
   if (desc > max_input_desc)
@@ -6949,7 +6944,7 @@ the process output.  */)
 }
 
 /* Kill all processes associated with `buffer'.
-   If `buffer' is nil, kill all processes  */
+   If `buffer' is nil, kill all processes.  */
 
 void
 kill_buffer_processes (Lisp_Object buffer)
@@ -7228,10 +7223,7 @@ syms_of_process (void)
   DEFSYM (Qsignal, "signal");
 
   /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
-     here again.
-
-     Qexit = intern_c_string ("exit");
-     staticpro (&Qexit); */
+     here again.  */
 
   DEFSYM (Qopen, "open");
   DEFSYM (Qclosed, "closed");
diff --git a/src/process.h b/src/process.h
index 273ad92..36979dc 100644
--- a/src/process.h
+++ b/src/process.h
@@ -1,5 +1,5 @@
 /* Definitions for asynchronous process control in GNU Emacs.
-   Copyright (C) 1985, 1994, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -162,6 +162,9 @@ struct Lisp_Process
     gnutls_session_t gnutls_state;
     gnutls_certificate_client_credentials gnutls_x509_cred;
     gnutls_anon_client_credentials_t gnutls_anon_cred;
+    gnutls_x509_crt_t gnutls_certificate;
+    unsigned int gnutls_peer_verification;
+    unsigned int gnutls_extra_peer_verification;
     int gnutls_log_level;
     int gnutls_handshakes_tried;
     bool_bf gnutls_p : 1;
@@ -194,15 +197,6 @@ pset_gnutls_cred_type (struct Lisp_Process *p, Lisp_Object 
val)
    when exiting.  */
 extern bool inhibit_sentinels;
 
-extern Lisp_Object Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess, Qttname;
-extern Lisp_Object Qminflt, Qmajflt, Qcminflt, Qcmajflt, Qutime, Qstime;
-extern Lisp_Object Qcutime, Qpri, Qnice, Qthcount, Qstart, Qvsize, Qrss, Qargs;
-extern Lisp_Object Quser, Qgroup, Qetime, Qpcpu, Qpmem, Qtpgid, Qcstime;
-extern Lisp_Object Qtime, Qctime;
-extern Lisp_Object QCspeed;
-extern Lisp_Object QCbytesize, QCstopbits, QCparity, Qodd, Qeven;
-extern Lisp_Object QCflowcontrol, Qhw, Qsw, QCsummary;
-
 /* Exit statuses for GNU programs that exec other programs.  */
 enum
 {
@@ -243,4 +237,6 @@ extern Lisp_Object network_interface_list (void);
 extern Lisp_Object network_interface_info (Lisp_Object);
 #endif
 
+extern Lisp_Object remove_slash_colon (Lisp_Object);
+
 INLINE_HEADER_END
diff --git a/src/profiler.c b/src/profiler.c
index 919aabc..1b49afe 100644
--- a/src/profiler.c
+++ b/src/profiler.c
@@ -1,6 +1,6 @@
 /* Profiler implementation.
 
-Copyright (C) 2012-2014 Free Software Foundation, Inc.
+Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -35,7 +35,6 @@ saturated_add (EMACS_INT a, EMACS_INT b)
 
 typedef struct Lisp_Hash_Table log_t;
 
-static Lisp_Object Qprofiler_backtrace_equal;
 static struct hash_table_test hashtest_profiler;
 
 static Lisp_Object
diff --git a/src/puresize.h b/src/puresize.h
index 376b11c..b72fb6c 100644
--- a/src/puresize.h
+++ b/src/puresize.h
@@ -1,5 +1,5 @@
 /* How much read-only Lisp storage a dumped Emacs needs.
-   Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/ralloc.c b/src/ralloc.c
index e63ed34..fb5087d 100644
--- a/src/ralloc.c
+++ b/src/ralloc.c
@@ -1,5 +1,5 @@
 /* Block-relocating memory allocator.
-   Copyright (C) 1993, 1995, 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1995, 2000-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/regex.c b/src/regex.c
index 766ad26..41fe3fa 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -2,7 +2,7 @@
    0.12.  (Implements POSIX draft P1003.2/D11.2, except for some of the
    internationalization features.)
 
-   Copyright (C) 1993-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993-2015 Free Software Foundation, Inc.
 
    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
@@ -515,7 +515,7 @@ init_syntax_once (void)
 
 #define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
 
-#ifndef emacs  
+#ifndef emacs
 # undef max
 # undef min
 # define max(a, b) ((a) > (b) ? (a) : (b))
@@ -1632,7 +1632,7 @@ static boolean at_begline_loc_p (re_char *pattern, 
re_char *p,
 static boolean at_endline_loc_p (re_char *p, re_char *pend,
                                 reg_syntax_t syntax);
 static re_char *skip_one_char (re_char *p);
-static int analyse_first (re_char *p, re_char *pend,
+static int analyze_first (re_char *p, re_char *pend,
                          char *fastmap, const int multibyte);
 
 /* Fetch the next character in the uncompiled pattern, with no
@@ -2688,7 +2688,7 @@ regex_compile (const_re_char *pattern, size_t size, 
reg_syntax_t syntax,
                    size_t startoffset = 0;
                    re_opcode_t ofj =
                      /* Check if the loop can match the empty string.  */
-                     (simple || !analyse_first (laststart, b, NULL, 0))
+                     (simple || !analyze_first (laststart, b, NULL, 0))
                      ? on_failure_jump : on_failure_jump_loop;
                    assert (skip_one_char (laststart) <= b);
 
@@ -2735,7 +2735,7 @@ regex_compile (const_re_char *pattern, size_t size, 
reg_syntax_t syntax,
                GET_BUFFER_SPACE (7); /* We might use less.  */
                if (many_times_ok)
                  {
-                   boolean emptyp = analyse_first (laststart, b, NULL, 0);
+                   boolean emptyp = analyze_first (laststart, b, NULL, 0);
 
                    /* The non-greedy multiple match looks like
                       a repeat..until: we only need a conditional jump
@@ -3836,7 +3836,7 @@ group_in_compile_stack (compile_stack_type compile_stack, 
regnum_t regnum)
   return false;
 }
 
-/* analyse_first.
+/* analyze_first.
    If fastmap is non-NULL, go through the pattern and fill fastmap
    with all the possible leading chars.  If fastmap is NULL, don't
    bother filling it up (obviously) and only return whether the
@@ -3847,7 +3847,7 @@ group_in_compile_stack (compile_stack_type compile_stack, 
regnum_t regnum)
    Return -1 if fastmap was not updated accurately.  */
 
 static int
-analyse_first (const_re_char *p, const_re_char *pend, char *fastmap,
+analyze_first (const_re_char *p, const_re_char *pend, char *fastmap,
               const int multibyte)
 {
   int j, k;
@@ -4089,7 +4089,7 @@ analyse_first (const_re_char *p, const_re_char *pend, 
char *fastmap,
            { /* We have to look down both arms.
                 We first go down the "straight" path so as to minimize
                 stack usage when going through alternatives.  */
-             int r = analyse_first (p, pend, fastmap, multibyte);
+             int r = analyze_first (p, pend, fastmap, multibyte);
              if (r) return r;
              p += j;
            }
@@ -4139,7 +4139,7 @@ analyse_first (const_re_char *p, const_re_char *pend, 
char *fastmap,
   /* We reached the end without matching anything.  */
   return 1;
 
-} /* analyse_first */
+} /* analyze_first */
 
 /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
    BUFP.  A fastmap records which of the (1 << BYTEWIDTH) possible
@@ -4169,7 +4169,7 @@ re_compile_fastmap (struct re_pattern_buffer *bufp)
   memset (fastmap, 0, 1 << BYTEWIDTH);  /* Assume nothing's valid.  */
   bufp->fastmap_accurate = 1;      /* It will be when we're done.  */
 
-  analysis = analyse_first (bufp->buffer, bufp->buffer + bufp->used,
+  analysis = analyze_first (bufp->buffer, bufp->buffer + bufp->used,
                            fastmap, RE_MULTIBYTE_P (bufp));
   bufp->can_be_null = (analysis != 0);
   return 0;
diff --git a/src/regex.h b/src/regex.h
index 0e25723..3dfecf0 100644
--- a/src/regex.h
+++ b/src/regex.h
@@ -1,7 +1,7 @@
 /* Definitions for data structures and routines for the regular
    expression library, version 0.12.
 
-   Copyright (C) 1985, 1989-1993, 1995, 2000-2014 Free Software
+   Copyright (C) 1985, 1989-1993, 1995, 2000-2015 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/src/region-cache.c b/src/region-cache.c
index 1123a0f..937f3d0 100644
--- a/src/region-cache.c
+++ b/src/region-cache.c
@@ -1,6 +1,6 @@
 /* Caching facts about regions of the buffer, for optimization.
 
-Copyright (C) 1985-1989, 1993, 1995, 2001-2014 Free Software Foundation,
+Copyright (C) 1985-1989, 1993, 1995, 2001-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/region-cache.h b/src/region-cache.h
index 4b9d519..1f336ce 100644
--- a/src/region-cache.h
+++ b/src/region-cache.h
@@ -1,6 +1,6 @@
 /* Header file: Caching facts about regions of the buffer, for optimization.
 
-Copyright (C) 1985-1986, 1993, 1995, 2001-2014 Free Software Foundation,
+Copyright (C) 1985-1986, 1993, 1995, 2001-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/scroll.c b/src/scroll.c
index 7cb683c..ad7f0f7 100644
--- a/src/scroll.c
+++ b/src/scroll.c
@@ -1,6 +1,6 @@
 /* Calculate what line insertion or deletion to do, and do it
 
-Copyright (C) 1985-1986, 1990, 1993-1994, 2001-2014 Free Software
+Copyright (C) 1985-1986, 1990, 1993-1994, 2001-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/search.c b/src/search.c
index c6ae9d7..e961798 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1,6 +1,6 @@
 /* String search routines for GNU Emacs.
 
-Copyright (C) 1985-1987, 1993-1994, 1997-1999, 2001-2014 Free Software
+Copyright (C) 1985-1987, 1993-1994, 1997-1999, 2001-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -84,12 +84,6 @@ static struct re_registers search_regs;
    Qnil if no searching has been done yet.  */
 static Lisp_Object last_thing_searched;
 
-/* Error condition signaled when regexp compile_pattern fails.  */
-static Lisp_Object Qinvalid_regexp;
-
-/* Error condition used for failing searches.  */
-static Lisp_Object Qsearch_failed;
-
 static void set_search_regs (ptrdiff_t, ptrdiff_t);
 static void save_search_regs (void);
 static EMACS_INT simple_search (EMACS_INT, unsigned char *, ptrdiff_t,
@@ -465,17 +459,18 @@ matched by parenthesis constructs in the pattern.  */)
   return string_match_1 (regexp, string, start, 1);
 }
 
-/* Match REGEXP against STRING, searching all of STRING,
-   and return the index of the match, or negative on failure.
-   This does not clobber the match data.  */
+/* Match REGEXP against STRING using translation table TABLE,
+   searching all of STRING, and return the index of the match,
+   or negative on failure.  This does not clobber the match data.  */
 
 ptrdiff_t
-fast_string_match (Lisp_Object regexp, Lisp_Object string)
+fast_string_match_internal (Lisp_Object regexp, Lisp_Object string,
+                           Lisp_Object table)
 {
   ptrdiff_t val;
   struct re_pattern_buffer *bufp;
 
-  bufp = compile_pattern (regexp, 0, Qnil,
+  bufp = compile_pattern (regexp, 0, table,
                          0, STRING_MULTIBYTE (string));
   immediate_quit = 1;
   re_match_object = string;
@@ -510,26 +505,6 @@ fast_c_string_match_ignore_case (Lisp_Object regexp,
   return val;
 }
 
-/* Like fast_string_match but ignore case.  */
-
-ptrdiff_t
-fast_string_match_ignore_case (Lisp_Object regexp, Lisp_Object string)
-{
-  ptrdiff_t val;
-  struct re_pattern_buffer *bufp;
-
-  bufp = compile_pattern (regexp, 0, Vascii_canon_table,
-                         0, STRING_MULTIBYTE (string));
-  immediate_quit = 1;
-  re_match_object = string;
-
-  val = re_search (bufp, SSDATA (string),
-                  SBYTES (string), 0,
-                  SBYTES (string), 0);
-  immediate_quit = 0;
-  return val;
-}
-
 /* Match REGEXP against the characters after POS to LIMIT, and return
    the number of matched characters.  If STRING is non-nil, match
    against the characters in it.  In that case, POS and LIMIT are
@@ -3329,7 +3304,10 @@ syms_of_search (void)
     }
   searchbuf_head = &searchbufs[0];
 
+  /* Error condition used for failing searches.  */
   DEFSYM (Qsearch_failed, "search-failed");
+
+  /* Error condition signaled when regexp compile_pattern fails.  */
   DEFSYM (Qinvalid_regexp, "invalid-regexp");
 
   Fput (Qsearch_failed, Qerror_conditions,
diff --git a/src/sheap.c b/src/sheap.c
index 956faa3..58a6a0b 100644
--- a/src/sheap.c
+++ b/src/sheap.c
@@ -1,7 +1,7 @@
 /* simulate `sbrk' with an array in .bss, for `unexec' support for Cygwin;
    complete rewrite of xemacs Cygwin `unexec' code
 
-   Copyright (C) 2004-2014 Free Software Foundation, Inc.
+   Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/sound.c b/src/sound.c
index b49348f..05c7b06 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -1,6 +1,6 @@
 /* sound.c -- sound support.
 
-Copyright (C) 1998-1999, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1998-1999, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -99,12 +99,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 /* BEGIN: Common Definitions */
 
-/* Symbols.  */
-
-static Lisp_Object QCvolume, QCdevice;
-static Lisp_Object Qsound;
-static Lisp_Object Qplay_sound_functions;
-
 /* Indices of attributes in a sound attributes vector.  */
 
 enum sound_attr
@@ -1357,8 +1351,6 @@ Internal use only, use `play-sound' instead.  */)
 {
   Lisp_Object attrs[SOUND_ATTR_SENTINEL];
   ptrdiff_t count = SPECPDL_INDEX ();
-  Lisp_Object file;
-  Lisp_Object args[2];
   struct gcpro gcpro1, gcpro2;
 
 #ifdef WINDOWSNT
@@ -1370,9 +1362,10 @@ Internal use only, use `play-sound' instead.  */)
   if (!parse_sound (sound, attrs))
     error ("Invalid sound specification");
 
-#ifndef WINDOWSNT
-  file = Qnil;
+  Lisp_Object file = Qnil;
   GCPRO2 (sound, file);
+
+#ifndef WINDOWSNT
   current_sound_device = xzalloc (sizeof *current_sound_device);
   current_sound = xzalloc (sizeof *current_sound);
   record_unwind_protect_void (sound_cleanup);
@@ -1413,9 +1406,7 @@ Internal use only, use `play-sound' instead.  */)
   else if (FLOATP (attrs[SOUND_VOLUME]))
     current_sound_device->volume = XFLOAT_DATA (attrs[SOUND_VOLUME]) * 100;
 
-  args[0] = Qplay_sound_functions;
-  args[1] = sound;
-  Frun_hook_with_args (2, args);
+  CALLN (Frun_hook_with_args, Qplay_sound_functions, sound);
 
 #ifdef HAVE_ALSA
   if (!alsa_init (current_sound_device))
@@ -1429,9 +1420,6 @@ Internal use only, use `play-sound' instead.  */)
   /* Play the sound.  */
   current_sound->play (current_sound, current_sound_device);
 
-  /* Clean up.  */
-  UNGCPRO;
-
 #else /* WINDOWSNT */
 
   file = Fexpand_file_name (attrs[SOUND_FILE], Vdata_directory);
@@ -1445,11 +1433,7 @@ Internal use only, use `play-sound' instead.  */)
       ui_volume_tmp = XFLOAT_DATA (attrs[SOUND_VOLUME]) * 100;
     }
 
-  GCPRO2 (sound, file);
-
-  args[0] = Qplay_sound_functions;
-  args[1] = sound;
-  Frun_hook_with_args (2, args);
+  CALLN (Frun_hook_with_args, Qplay_sound_functions, sound);
 
   /*
     Based on some experiments I have conducted, a value of 100 or less
@@ -1466,12 +1450,10 @@ Internal use only, use `play-sound' instead.  */)
     }
   (void)do_play_sound (SSDATA (file), ui_volume);
 
-  UNGCPRO;
-
 #endif /* WINDOWSNT */
 
-  unbind_to (count, Qnil);
-  return Qnil;
+  UNGCPRO;
+  return unbind_to (count, Qnil);
 }
 
 /***********************************************************************
diff --git a/src/syntax.c b/src/syntax.c
index dc84ca6..2f82156 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1,5 +1,5 @@
 /* GNU Emacs routines to deal with syntax tables; also word and list parsing.
-   Copyright (C) 1985, 1987, 1993-1995, 1997-1999, 2001-2014 Free
+   Copyright (C) 1985, 1987, 1993-1995, 1997-1999, 2001-2015 Free
    Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -137,9 +137,6 @@ enum
     ST_STRING_STYLE = 256 + 2
   };
 
-static Lisp_Object Qsyntax_table_p;
-static Lisp_Object Qsyntax_table, Qscan_error;
-
 /* This is the internal form of the parse state used in parse-partial-sexp.  */
 
 struct lisp_parse_state
@@ -3500,11 +3497,6 @@ init_syntax_once (void)
   /* This has to be done here, before we call Fmake_char_table.  */
   DEFSYM (Qsyntax_table, "syntax-table");
 
-  /* This variable is DEFSYMed in alloc.c and not initialized yet, so
-     intern it here.  NOTE: you must guarantee that init_syntax_once
-     is called before all other users of this variable.  */
-  Qchar_table_extra_slots = intern_c_string ("char-table-extra-slots");
-
   /* Create objects which can be shared among syntax tables.  */
   Vsyntax_code_object = make_uninit_vector (Smax);
   for (i = 0; i < Smax; i++)
diff --git a/src/syntax.h b/src/syntax.h
index 549ca4a..bfcb871 100644
--- a/src/syntax.h
+++ b/src/syntax.h
@@ -1,6 +1,6 @@
 /* Declarations having to do with GNU Emacs syntax tables.
 
-Copyright (C) 1985, 1993-1994, 1997-1998, 2001-2014 Free Software
+Copyright (C) 1985, 1993-1994, 1997-1998, 2001-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/sysdep.c b/src/sysdep.c
index 24cc5cb..a2bda96 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -1,5 +1,5 @@
 /* Interfaces to system-dependent kernel and library entries.
-   Copyright (C) 1985-1988, 1993-1995, 1999-2014 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1999-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -110,6 +110,9 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #define _P_WAIT 0
 int _cdecl _spawnlp (int, const char *, const char *, ...);
 int _cdecl _getpid (void);
+/* The following is needed for O_CLOEXEC, F_SETFD, FD_CLOEXEC, and
+   several prototypes of functions called below.  */
+#include <sys/socket.h>
 #endif
 
 #include "syssignal.h"
@@ -1406,29 +1409,19 @@ setup_pty (int fd)
 }
 #endif /* HAVE_PTYS */
 
-#ifdef HAVE_SOCKETS
-#include <sys/socket.h>
-#include <netdb.h>
-#endif /* HAVE_SOCKETS */
-
-#ifdef TRY_AGAIN
-#ifndef HAVE_H_ERRNO
-extern int h_errno;
-#endif
-#endif /* TRY_AGAIN */
-
 void
 init_system_name (void)
 {
+  char *hostname_alloc = NULL;
+  char *hostname;
 #ifndef HAVE_GETHOSTNAME
   struct utsname uts;
   uname (&uts);
-  Vsystem_name = build_string (uts.nodename);
+  hostname = uts.nodename;
 #else /* HAVE_GETHOSTNAME */
-  char *hostname_alloc = NULL;
   char hostname_buf[256];
   ptrdiff_t hostname_size = sizeof hostname_buf;
-  char *hostname = hostname_buf;
+  hostname = hostname_buf;
 
   /* Try to get the host name; if the buffer is too short, try
      again.  Apparently, the only indication gethostname gives of
@@ -1446,110 +1439,15 @@ init_system_name (void)
       hostname = hostname_alloc = xpalloc (hostname_alloc, &hostname_size, 1,
                                           min (PTRDIFF_MAX, SIZE_MAX), 1);
     }
-#ifdef HAVE_SOCKETS
-  /* Turn the hostname into the official, fully-qualified hostname.
-     Don't do this if we're going to dump; this can confuse system
-     libraries on some machines and make the dumped emacs core dump. */
-#ifndef CANNOT_DUMP
-  if (initialized)
-#endif /* not CANNOT_DUMP */
-    if (! strchr (hostname, '.'))
-      {
-       int count;
-#ifdef HAVE_GETADDRINFO
-        struct addrinfo *res;
-        struct addrinfo hints;
-        int ret;
-
-        memset (&hints, 0, sizeof (hints));
-        hints.ai_socktype = SOCK_STREAM;
-        hints.ai_flags = AI_CANONNAME;
-
-       for (count = 0;; count++)
-         {
-            if ((ret = getaddrinfo (hostname, NULL, &hints, &res)) == 0
-                || ret != EAI_AGAIN)
-              break;
-
-            if (count >= 5)
-             break;
-           Fsleep_for (make_number (1), Qnil);
-         }
-
-        if (ret == 0)
-          {
-            struct addrinfo *it = res;
-            while (it)
-              {
-                char *fqdn = it->ai_canonname;
-                if (fqdn && strchr (fqdn, '.')
-                    && strcmp (fqdn, "localhost.localdomain") != 0)
-                  break;
-                it = it->ai_next;
-              }
-            if (it)
-              {
-               ptrdiff_t len = strlen (it->ai_canonname);
-               if (hostname_size <= len)
-                 {
-                   hostname_size = len + 1;
-                   hostname = hostname_alloc = xrealloc (hostname_alloc,
-                                                         hostname_size);
-                 }
-                strcpy (hostname, it->ai_canonname);
-              }
-            freeaddrinfo (res);
-          }
-#else /* !HAVE_GETADDRINFO */
-        struct hostent *hp;
-       for (count = 0;; count++)
-         {
-
-#ifdef TRY_AGAIN
-           h_errno = 0;
-#endif
-           hp = gethostbyname (hostname);
-#ifdef TRY_AGAIN
-           if (! (hp == 0 && h_errno == TRY_AGAIN))
-#endif
-
-             break;
-
-           if (count >= 5)
-             break;
-           Fsleep_for (make_number (1), Qnil);
-         }
-
-       if (hp)
-         {
-           char *fqdn = (char *) hp->h_name;
-
-           if (!strchr (fqdn, '.'))
-             {
-               /* We still don't have a fully qualified domain name.
-                  Try to find one in the list of alternate names */
-               char **alias = hp->h_aliases;
-               while (*alias
-                      && (!strchr (*alias, '.')
-                          || !strcmp (*alias, "localhost.localdomain")))
-                 alias++;
-               if (*alias)
-                 fqdn = *alias;
-             }
-           hostname = fqdn;
-         }
-#endif /* !HAVE_GETADDRINFO */
-      }
-#endif /* HAVE_SOCKETS */
-  Vsystem_name = build_string (hostname);
-  xfree (hostname_alloc);
 #endif /* HAVE_GETHOSTNAME */
-  {
-    char *p;
-    for (p = SSDATA (Vsystem_name); *p; p++)
-      if (*p == ' ' || *p == '\t')
-       *p = '-';
-  }
+  char *p;
+  for (p = hostname; *p; p++)
+    if (*p == ' ' || *p == '\t')
+      *p = '-';
+  if (! (STRINGP (Vsystem_name) && SBYTES (Vsystem_name) == p - hostname
+        && strcmp (SSDATA (Vsystem_name), hostname) == 0))
+    Vsystem_name = build_string (hostname);
+  xfree (hostname_alloc);
 }
 
 sigset_t empty_mask;
diff --git a/src/sysselect.h b/src/sysselect.h
index db6438e..54f90fb 100644
--- a/src/sysselect.h
+++ b/src/sysselect.h
@@ -1,5 +1,5 @@
 /* sysselect.h - System-dependent definitions for the select function.
-   Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/syssignal.h b/src/syssignal.h
index 3fd9730..b536eb5 100644
--- a/src/syssignal.h
+++ b/src/syssignal.h
@@ -1,6 +1,6 @@
 /* syssignal.h - System-dependent definitions for signals.
 
-Copyright (C) 1993, 1999, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1993, 1999, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/systime.h b/src/systime.h
index e0f7eec..1d3a4ba 100644
--- a/src/systime.h
+++ b/src/systime.h
@@ -1,5 +1,5 @@
 /* systime.h - System-dependent definitions for time manipulations.
-   Copyright (C) 1993-1994, 2002-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2002-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/systty.h b/src/systty.h
index a29c493..3a46156 100644
--- a/src/systty.h
+++ b/src/systty.h
@@ -1,5 +1,5 @@
 /* systty.h - System-dependent definitions for terminals.
-   Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/syswait.h b/src/syswait.h
index 9c8cbd5..5891822 100644
--- a/src/syswait.h
+++ b/src/syswait.h
@@ -1,5 +1,5 @@
 /* Define wait system call interface for Emacs.
-   Copyright (C) 1993-1995, 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993-1995, 2000-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/term.c b/src/term.c
index 04f6e33..15d33b4 100644
--- a/src/term.c
+++ b/src/term.c
@@ -1,5 +1,5 @@
 /* Terminal control module for terminals described by TERMCAP
-   Copyright (C) 1985-1987, 1993-1995, 1998, 2000-2014 Free Software
+   Copyright (C) 1985-1987, 1993-1995, 1998, 2000-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -130,9 +130,6 @@ enum no_color_bit
 
 static int max_frame_cols;
 
-static Lisp_Object Qtty_mode_set_strings;
-static Lisp_Object Qtty_mode_reset_strings;
-
 
 
 #ifdef HAVE_GPM
@@ -2256,10 +2253,9 @@ A suspended tty may be resumed by calling `resume-tty' 
on it.  */)
       /* First run `suspend-tty-functions' and then clean up the tty
         state because `suspend-tty-functions' might need to change
         the tty state.  */
-      Lisp_Object args[2];
-      args[0] = intern ("suspend-tty-functions");
-      XSETTERMINAL (args[1], t);
-      Frun_hook_with_args (2, args);
+      Lisp_Object term;
+      XSETTERMINAL (term, t);
+      CALLN (Frun_hook_with_args, intern ("suspend-tty-functions"), term);
 
       reset_sys_modes (t->display_info.tty);
       delete_keyboard_wait_descriptor (fileno (f));
@@ -2356,13 +2352,10 @@ frame's terminal). */)
       set_tty_hooks (t);
       init_sys_modes (t->display_info.tty);
 
-      {
-        /* Run `resume-tty-functions'.  */
-        Lisp_Object args[2];
-        args[0] = intern ("resume-tty-functions");
-        XSETTERMINAL (args[1], t);
-        Frun_hook_with_args (2, args);
-      }
+      /* Run `resume-tty-functions'.  */
+      Lisp_Object term;
+      XSETTERMINAL (term, t);
+      CALLN (Frun_hook_with_args, intern ("resume-tty-functions"), term);
     }
 
   set_tty_hooks (t);
@@ -2710,12 +2703,6 @@ static const char *menu_help_message, 
*prev_menu_help_message;
    last menu help message.  */
 static int menu_help_paneno, menu_help_itemno;
 
-static Lisp_Object Qtty_menu_navigation_map, Qtty_menu_exit;
-static Lisp_Object Qtty_menu_prev_item, Qtty_menu_next_item;
-static Lisp_Object Qtty_menu_next_menu, Qtty_menu_prev_menu;
-static Lisp_Object Qtty_menu_select, Qtty_menu_ignore;
-static Lisp_Object Qtty_menu_mouse_movement;
-
 typedef struct tty_menu_struct
 {
   int count;
diff --git a/src/termcap.c b/src/termcap.c
index 26c6de0..394b405 100644
--- a/src/termcap.c
+++ b/src/termcap.c
@@ -1,5 +1,5 @@
 /* Work-alike for termcap, plus extra features.
-   Copyright (C) 1985-1986, 1993-1995, 2000-2008, 2011, 2013-2014 Free
+   Copyright (C) 1985-1986, 1993-1995, 2000-2008, 2011, 2013-2015 Free
    Software Foundation, Inc.
 
 This program is free software; you can redistribute it and/or modify
diff --git a/src/termchar.h b/src/termchar.h
index f22581a..d8066d7 100644
--- a/src/termchar.h
+++ b/src/termchar.h
@@ -1,5 +1,5 @@
 /* Flags and parameters describing terminal's characteristics.
-   Copyright (C) 1985-1986, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/termhooks.h b/src/termhooks.h
index 9cab853..3cafc43 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -1,6 +1,6 @@
 /* Parameters and display hooks for terminal devices.
 
-Copyright (C) 1985-1986, 1993-1994, 2001-2014 Free Software Foundation,
+Copyright (C) 1985-1986, 1993-1994, 2001-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -451,7 +451,7 @@ struct terminal
   void (*delete_glyphs_hook) (struct frame *, int);
 
   void (*ring_bell_hook) (struct frame *f);
-  void (*toggle_invisible_pointer_hook) (struct frame *f, int invisible);
+  void (*toggle_invisible_pointer_hook) (struct frame *f, bool invisible);
 
   void (*reset_terminal_modes_hook) (struct terminal *);
   void (*set_terminal_modes_hook) (struct terminal *);
@@ -496,10 +496,10 @@ struct terminal
      support overlapping frames, so there's no need to raise or lower
      anything.
 
-     If RAISE_FLAG is non-zero, F is brought to the front, before all other
-     windows.  If RAISE_FLAG is zero, F is sent to the back, behind all other
+     If RAISE_FLAG, F is brought to the front, before all other
+     windows.  If !RAISE_FLAG, F is sent to the back, behind all other
      windows.  */
-  void (*frame_raise_lower_hook) (struct frame *f, int raise_flag);
+  void (*frame_raise_lower_hook) (struct frame *f, bool raise_flag);
 
   /* If the value of the frame parameter changed, this hook is called.
      For example, if going from fullscreen to not fullscreen this hook
diff --git a/src/terminal.c b/src/terminal.c
index 0cd6a0b..b48d062 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1,5 +1,5 @@
 /* Functions related to terminal devices.
-   Copyright (C) 2005-2014 Free Software Foundation, Inc.
+   Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -37,10 +37,6 @@ static int next_terminal_id;
 /* The initial terminal device, created by initial_term_init.  */
 struct terminal *initial_terminal;
 
-Lisp_Object Qrun_hook_with_args;
-static Lisp_Object Qterminal_live_p;
-static Lisp_Object Qdelete_terminal_functions;
-
 static void delete_initial_terminal (struct terminal *);
 
 /* This setter is used only in this file, so it can be private.  */
@@ -258,6 +254,15 @@ get_named_terminal (const char *name)
   return NULL;
 }
 
+/* Allocate basically initialized terminal.  */
+
+static struct terminal *
+allocate_terminal (void)
+{
+  return ALLOCATE_ZEROED_PSEUDOVECTOR
+    (struct terminal, next_terminal, PVEC_TERMINAL);
+}
+
 /* Create a new terminal object of TYPE and add it to the terminal list.  RIF
    may be NULL if this terminal type doesn't support window-based redisplay.  
*/
 
diff --git a/src/terminfo.c b/src/terminfo.c
index e03a42f..c453841 100644
--- a/src/terminfo.c
+++ b/src/terminfo.c
@@ -1,5 +1,5 @@
 /* Interface from Emacs to terminfo.
-   Copyright (C) 1985-1986, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/termopts.h b/src/termopts.h
index ad13583..c54d392 100644
--- a/src/termopts.h
+++ b/src/termopts.h
@@ -1,5 +1,5 @@
 /* Flags and parameters describing user options for handling the terminal.
-   Copyright (C) 1985-1986, 1990, 2001-2014 Free Software Foundation,
+   Copyright (C) 1985-1986, 1990, 2001-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/textprop.c b/src/textprop.c
index 7ecac62..35f22bf 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -1,5 +1,5 @@
 /* Interface code for dealing with text properties.
-   Copyright (C) 1993-1995, 1997, 1999-2014 Free Software Foundation,
+   Copyright (C) 1993-1995, 1997, 1999-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -44,21 +44,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
   is enforced by the subrs installing properties onto the intervals.  */
 
 
-/* Types of hooks.  */
-static Lisp_Object Qmouse_left;
-static Lisp_Object Qmouse_entered;
-Lisp_Object Qpoint_left;
-Lisp_Object Qpoint_entered;
-Lisp_Object Qcategory;
-Lisp_Object Qlocal_map;
-
-/* Visual properties text (including strings) may have.  */
-static Lisp_Object Qforeground, Qbackground, Qunderline;
-Lisp_Object Qfont;
-static Lisp_Object Qstipple;
-Lisp_Object Qinvisible, Qintangible, Qmouse_face;
-static Lisp_Object Qread_only;
-Lisp_Object Qminibuffer_prompt;
 
 enum property_set_type
 {
@@ -67,9 +52,6 @@ enum property_set_type
   TEXT_PROPERTY_APPEND
 };
 
-/* Sticky properties.  */
-Lisp_Object Qfront_sticky, Qrear_nonsticky;
-
 /* If o1 is a cons whose cdr is a cons, return non-zero and set o2 to
    the o1's cdr.  Otherwise, return zero.  This is handy for
    traversing plists.  */
@@ -2383,7 +2365,7 @@ inherits it if NONSTICKINESS is nil.  The `front-sticky' 
and
   interval_insert_in_front_hooks = Qnil;
 
 
-  /* Common attributes one might give text */
+  /* Common attributes one might give text.  */
 
   DEFSYM (Qforeground, "foreground");
   DEFSYM (Qbackground, "background");
@@ -2401,7 +2383,7 @@ inherits it if NONSTICKINESS is nil.  The `front-sticky' 
and
   DEFSYM (Qmouse_face, "mouse-face");
   DEFSYM (Qminibuffer_prompt, "minibuffer-prompt");
 
-  /* Properties that text might use to specify certain actions */
+  /* Properties that text might use to specify certain actions.  */
 
   DEFSYM (Qmouse_left, "mouse-left");
   DEFSYM (Qmouse_entered, "mouse-entered");
diff --git a/src/tparam.c b/src/tparam.c
index e02cea3..538f26c 100644
--- a/src/tparam.c
+++ b/src/tparam.c
@@ -1,5 +1,5 @@
 /* Merge parameters into a termcap entry string.
-   Copyright (C) 1985, 1987, 1993, 1995, 2000-2008, 2013-2014 Free
+   Copyright (C) 1985, 1987, 1993, 1995, 2000-2008, 2013-2015 Free
    Software Foundation, Inc.
 
 This program is free software; you can redistribute it and/or modify
@@ -255,9 +255,9 @@ tparam1 (const char *string, char *outstring, int len,
     }
   *op = 0;
   while (doup-- > 0)
-    strcat (op, up);
+    op = stpcpy (op, up);
   while (doleft-- > 0)
-    strcat (op, left);
+    op = stpcpy (op, left);
   return outstring;
 }
 
diff --git a/src/tparam.h b/src/tparam.h
index 3bef6c6..59fc859 100644
--- a/src/tparam.h
+++ b/src/tparam.h
@@ -1,6 +1,6 @@
 /* Interface definitions for termcap entries.
 
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/undo.c b/src/undo.c
index 2dde02b..948dcf9 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -1,5 +1,5 @@
 /* undo handling for GNU Emacs.
-   Copyright (C) 1990, 1993-1994, 2000-2014 Free Software Foundation,
+   Copyright (C) 1990, 1993-1994, 2000-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -34,12 +34,6 @@ static struct buffer *last_undo_buffer;
 static struct buffer *last_boundary_buffer;
 static ptrdiff_t last_boundary_position;
 
-Lisp_Object Qinhibit_read_only;
-
-/* Marker for function call undo list elements.  */
-
-Lisp_Object Qapply;
-
 /* The first time a command records something for undo.
    it also allocates the undo-boundary object
    which will be added to the list at the end of the command.
@@ -461,6 +455,8 @@ void
 syms_of_undo (void)
 {
   DEFSYM (Qinhibit_read_only, "inhibit-read-only");
+
+  /* Marker for function call undo list elements.  */
   DEFSYM (Qapply, "apply");
 
   pending_boundary = Qnil;
diff --git a/src/unexaix.c b/src/unexaix.c
index c97d5ca..af114e4 100644
--- a/src/unexaix.c
+++ b/src/unexaix.c
@@ -1,5 +1,5 @@
 /* Dump an executable image.
-   Copyright (C) 1985-1988, 1999, 2001-2014 Free Software Foundation,
+   Copyright (C) 1985-1988, 1999, 2001-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -55,7 +55,6 @@ what you give them.   Help stamp out software-hoarding!  */
 #include <inttypes.h>
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/stat.h>
 #include <errno.h>
 #include <unistd.h>
 #include <fcntl.h>
@@ -134,7 +133,7 @@ unexec (const char *new_name, const char *a_name)
     {
       PERROR (a_name);
     }
-  if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0)
+  if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0777)) < 0)
     {
       PERROR (new_name);
     }
@@ -152,7 +151,6 @@ unexec (const char *new_name, const char *a_name)
   emacs_close (new);
   if (a_out >= 0)
     emacs_close (a_out);
-  mark_x (new_name);
 }
 
 /* ****************************************************************
@@ -466,29 +464,6 @@ copy_sym (int new, int a_out, const char *a_name, const 
char *new_name)
   return 0;
 }
 
-/* ****************************************************************
- * mark_x
- *
- * After successfully building the new a.out, mark it executable
- */
-static void
-mark_x (const char *name)
-{
-  struct stat sbuf;
-  int um;
-  int new = 0;  /* for PERROR */
-
-  um = umask (777);
-  umask (um);
-  if (stat (name, &sbuf) == -1)
-    {
-      PERROR (name);
-    }
-  sbuf.st_mode |= 0111 & ~um;
-  if (chmod (name, sbuf.st_mode) == -1)
-    PERROR (name);
-}
-
 static int
 adjust_lnnoptrs (int writedesc, int readdesc, const char *new_name)
 {
diff --git a/src/unexcoff.c b/src/unexcoff.c
index 0e47bdd..3f65490 100644
--- a/src/unexcoff.c
+++ b/src/unexcoff.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1985-1988, 1992-1994, 2001-2014 Free Software
+/* Copyright (C) 1985-1988, 1992-1994, 2001-2015 Free Software
  * Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -97,7 +97,6 @@ struct aouthdr
 #include <sys/types.h>
 #endif /* makedev */
 #include <stdio.h>
-#include <sys/stat.h>
 #include <errno.h>
 
 #include <sys/file.h>
@@ -439,29 +438,6 @@ copy_sym (int new, int a_out, const char *a_name, const 
char *new_name)
   return 0;
 }
 
-/* ****************************************************************
- * mark_x
- *
- * After successfully building the new a.out, mark it executable
- */
-static void
-mark_x (const char *name)
-{
-  struct stat sbuf;
-  int um;
-  int new = 0;  /* for PERROR */
-
-  um = umask (777);
-  umask (um);
-  if (stat (name, &sbuf) == -1)
-    {
-      PERROR (name);
-    }
-  sbuf.st_mode |= 0111 & ~um;
-  if (chmod (name, sbuf.st_mode) == -1)
-    PERROR (name);
-}
-
 
 /*
  *     If the COFF file contains a symbol table and a line number section,
@@ -542,7 +518,7 @@ unexec (const char *new_name, const char *a_name)
     {
       PERROR (a_name);
     }
-  if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0)
+  if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0777)) < 0)
     {
       PERROR (new_name);
     }
@@ -560,7 +536,6 @@ unexec (const char *new_name, const char *a_name)
   emacs_close (new);
   if (a_out >= 0)
     emacs_close (a_out);
-  mark_x (new_name);
 }
 
 #endif /* not CANNOT_DUMP */
diff --git a/src/unexcw.c b/src/unexcw.c
index cdeb899..be88578 100644
--- a/src/unexcw.c
+++ b/src/unexcw.c
@@ -1,7 +1,7 @@
 /* unexec() support for Cygwin;
    complete rewrite of xemacs Cygwin unexec() code
 
-   Copyright (C) 2004-2014 Free Software Foundation, Inc.
+   Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/unexelf.c b/src/unexelf.c
index 0983f8f..483da6e 100644
--- a/src/unexelf.c
+++ b/src/unexelf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1985-1988, 1990, 1992, 1999-2014 Free Software
+/* Copyright (C) 1985-1988, 1990, 1992, 1999-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -665,7 +665,6 @@ unexec (const char *new_name, const char *old_name)
 #endif
   struct stat stat_buf;
   off_t old_file_size;
-  int mask;
 
   /* Open the old file, allocate a buffer of the right size, and read
      in the file contents.  */
@@ -799,7 +798,7 @@ unexec (const char *new_name, const char *old_name)
      the image of the new file.  Set pointers to various interesting
      objects.  */
 
-  new_file = emacs_open (new_name, O_RDWR | O_CREAT, 0666);
+  new_file = emacs_open (new_name, O_RDWR | O_CREAT, 0777);
   if (new_file < 0)
     fatal ("Can't creat (%s): %s", new_name, strerror (errno));
 
@@ -1319,13 +1318,4 @@ temacs:
 
   if (emacs_close (new_file) != 0)
     fatal ("Can't close (%s): %s", new_name, strerror (errno));
-
-  if (stat (new_name, &stat_buf) != 0)
-    fatal ("Can't stat (%s): %s", new_name, strerror (errno));
-
-  mask = umask (777);
-  umask (mask);
-  stat_buf.st_mode |= 0111 & ~mask;
-  if (chmod (new_name, stat_buf.st_mode) != 0)
-    fatal ("Can't chmod (%s): %s", new_name, strerror (errno));
 }
diff --git a/src/unexmacosx.c b/src/unexmacosx.c
index 2e1ac88..fe6637e 100644
--- a/src/unexmacosx.c
+++ b/src/unexmacosx.c
@@ -1,5 +1,5 @@
 /* Dump Emacs in Mach-O format for use on Mac OS X.
-   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1267,7 +1267,7 @@ unexec (const char *outfile, const char *infile)
       unexec_error ("cannot open input file `%s'", infile);
     }
 
-  outfd = emacs_open (outfile, O_WRONLY | O_TRUNC | O_CREAT, 0755);
+  outfd = emacs_open (outfile, O_WRONLY | O_TRUNC | O_CREAT, 0777);
   if (outfd < 0)
     {
       emacs_close (infd);
diff --git a/src/unexw32.c b/src/unexw32.c
index 5c1c1f3..322d60d 100644
--- a/src/unexw32.c
+++ b/src/unexw32.c
@@ -1,5 +1,5 @@
 /* unexec for GNU Emacs on Windows NT.
-   Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/vm-limit.c b/src/vm-limit.c
index 015f3ee..ab102e3 100644
--- a/src/vm-limit.c
+++ b/src/vm-limit.c
@@ -1,5 +1,5 @@
 /* Functions for memory limit warnings.
-   Copyright (C) 1990, 1992, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1990, 1992, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w16select.c b/src/w16select.c
index 2403a9b..96f8437 100644
--- a/src/w16select.c
+++ b/src/w16select.c
@@ -1,6 +1,6 @@
 /* 16-bit Windows Selection processing for emacs on MS-Windows
 
-Copyright (C) 1996-1997, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-1997, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32.c b/src/w32.c
index f014cd7..9009668 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -1,6 +1,6 @@
 /* Utility and Unix shadow routines for GNU Emacs on the Microsoft Windows API.
 
-Copyright (C) 1994-1995, 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 1994-1995, 2000-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -72,7 +72,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include <pwd.h>
 #include <grp.h>
 
-/* MinGW64 (_W64) defines these in its _mingw.h.  */
+/* MinGW64 defines these in its _mingw.h.  */
 #ifndef _ANONYMOUS_UNION
 # define _ANONYMOUS_UNION
 #endif
@@ -151,7 +151,7 @@ typedef struct _PROCESS_MEMORY_COUNTERS_EX {
 #define SDDL_REVISION_1        1
 #endif /* SDDL_REVISION_1 */
 
-#if defined(_MSC_VER) || defined(_W64)
+#if defined(_MSC_VER) || defined(MINGW_W64)
 /* MSVC and MinGW64 don't provide the definition of
    REPARSE_DATA_BUFFER and the associated macros, except on ntifs.h,
    which cannot be included because it triggers conflicts with other
@@ -242,8 +242,6 @@ typedef struct _REPARSE_DATA_BUFFER {
 typedef HRESULT (WINAPI * ShGetFolderPath_fn)
   (IN HWND, IN int, IN HANDLE, IN DWORD, OUT char *);
 
-Lisp_Object QCloaded_from;
-
 void globals_of_w32 (void);
 static DWORD get_rid (PSID);
 static int is_symlink (const char *);
@@ -3405,10 +3403,10 @@ sys_readdir (DIR *dirp)
       int ln;
 
       strcpy (filename, dir_pathname);
-      ln = strlen (filename) - 1;
-      if (!IS_DIRECTORY_SEP (filename[ln]))
-       strcat (filename, "\\");
-      strcat (filename, "*");
+      ln = strlen (filename);
+      if (!IS_DIRECTORY_SEP (filename[ln - 1]))
+       filename[ln++] = '\\';
+      strcpy (filename + ln, "*");
 
       /* Note: No need to resolve symlinks in FILENAME, because
         FindFirst opens the directory that is the target of a
@@ -3435,17 +3433,51 @@ sys_readdir (DIR *dirp)
        }
 
       if (dir_find_handle == INVALID_HANDLE_VALUE)
-       return NULL;
+       {
+         /* Any changes in the value of errno here should be in sync
+            with what directory_files_internal does when it calls
+            readdir.  */
+         switch (GetLastError ())
+           {
+             /* Windows uses this value when FindFirstFile finds no
+                files that match the wildcard.  This is not supposed
+                to happen, since our wildcard is "*", but just in
+                case, if there's some weird empty directory with not
+                even "." and ".." entries...  */
+           case ERROR_FILE_NOT_FOUND:
+             errno = 0;
+             /* FALLTHRU */
+           default:
+             break;
+           case ERROR_ACCESS_DENIED:
+           case ERROR_NETWORK_ACCESS_DENIED:
+             errno = EACCES;
+             break;
+           case ERROR_PATH_NOT_FOUND:
+           case ERROR_INVALID_DRIVE:
+           case ERROR_BAD_NETPATH:
+           case ERROR_BAD_NET_NAME:
+             errno = ENOENT;
+             break;
+           }
+         return NULL;
+       }
     }
   else if (w32_unicode_filenames)
     {
       if (!FindNextFileW (dir_find_handle, &dir_find_data_w))
-       return NULL;
+       {
+         errno = 0;
+         return NULL;
+       }
     }
   else
     {
       if (!FindNextFileA (dir_find_handle, &dir_find_data_a))
-       return NULL;
+       {
+         errno = 0;
+         return NULL;
+       }
     }
 
   /* Emacs never uses this value, so don't bother making it match
@@ -3547,7 +3579,11 @@ open_unc_volume (const char *path)
   if (result == NO_ERROR)
     return henum;
   else
-    return INVALID_HANDLE_VALUE;
+    {
+      /* Make sure directory_files_internal reports a sensible error.  */
+      errno = ENOENT;
+      return INVALID_HANDLE_VALUE;
+    }
 }
 
 static void *
@@ -4969,7 +5005,7 @@ stat_worker (const char * path, struct stat * buf, int 
follow_symlinks)
        {
          /* Make sure root directories end in a slash.  */
          if (!IS_DIRECTORY_SEP (name[len-1]))
-           strcat (name, "\\");
+           strcpy (name + len, "\\");
          if (GetDriveType (name) < 2)
            {
              errno = ENOENT;
@@ -5438,8 +5474,7 @@ symlink (char const *filename, char const *linkname)
        p--;
       if (p > linkfn)
        strncpy (tem, linkfn, p - linkfn);
-      tem[p - linkfn] = '\0';
-      strcat (tem, filename);
+      strcpy (tem + (p - linkfn), filename);
       dir_access = faccessat (AT_FDCWD, tem, D_OK, AT_EACCESS);
     }
   else
diff --git a/src/w32.h b/src/w32.h
index e0aedcb..835557d 100644
--- a/src/w32.h
+++ b/src/w32.h
@@ -2,7 +2,7 @@
 #define EMACS_W32_H
 
 /* Support routines for the NT version of Emacs.
-   Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -172,7 +172,6 @@ extern void init_timers (void);
 extern int _sys_read_ahead (int fd);
 extern int _sys_wait_accept (int fd);
 
-extern Lisp_Object QCloaded_from;
 extern HMODULE w32_delayed_load (Lisp_Object);
 
 extern int (WINAPI *pMultiByteToWideChar)(UINT,DWORD,LPCSTR,int,LPWSTR,int);
@@ -225,4 +224,17 @@ extern ssize_t emacs_gnutls_push (gnutls_transport_ptr_t p,
                                   const void* buf, size_t sz);
 #endif /* HAVE_GNUTLS */
 
+/* Definine a function that will be loaded from a DLL.  */
+#define DEF_DLL_FN(type, func, args) static type (FAR CDECL *fn_##func) args
+
+/* Load a function from the DLL.  */
+#define LOAD_DLL_FN(lib, func)                                         \
+  do                                                                   \
+    {                                                                  \
+      fn_##func = (void *) GetProcAddress (lib, #func);                        
\
+      if (!fn_##func)                                                  \
+       return false;                                                   \
+    }                                                                  \
+  while (false)
+
 #endif /* EMACS_W32_H */
diff --git a/src/w32common.h b/src/w32common.h
index 86323ea..9aba2d8 100644
--- a/src/w32common.h
+++ b/src/w32common.h
@@ -1,5 +1,5 @@
 /* Common functions for Microsoft Windows builds of Emacs
-   Copyright (C) 2012-2014 Free Software Foundation, Inc.
+   Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32console.c b/src/w32console.c
index 82a7c04..a38a558 100644
--- a/src/w32console.c
+++ b/src/w32console.c
@@ -1,5 +1,5 @@
 /* Terminal hooks for GNU Emacs on the Microsoft Windows API.
-   Copyright (C) 1992, 1999, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1999, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32fns.c b/src/w32fns.c
index 1b290b7..8435270 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -1,6 +1,6 @@
 /* Graphical user interface functions for the Microsoft Windows API.
 
-Copyright (C) 1989, 1992-2014 Free Software Foundation, Inc.
+Copyright (C) 1989, 1992-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -93,19 +93,6 @@ extern char * w32_strerror (int error_no);
 #define IDC_HAND MAKEINTRESOURCE(32649)
 #endif
 
-Lisp_Object Qundefined_color;
-Lisp_Object Qcancel_timer;
-Lisp_Object Qfont_param;
-Lisp_Object Qhyper;
-Lisp_Object Qsuper;
-Lisp_Object Qmeta;
-Lisp_Object Qalt;
-Lisp_Object Qctrl;
-Lisp_Object Qcontrol;
-Lisp_Object Qshift;
-static Lisp_Object Qgeometry, Qworkarea, Qmm_size, Qframes;
-
-
 /* Prefix for system colors.  */
 #define SYSTEM_COLOR_PREFIX "System"
 #define SYSTEM_COLOR_PREFIX_LEN (sizeof (SYSTEM_COLOR_PREFIX) - 1)
@@ -1146,7 +1133,8 @@ gamma_correct (struct frame *f, COLORREF *color)
    If ALLOC is nonzero, allocate a new colormap cell.  */
 
 int
-w32_defined_color (struct frame *f, const char *color, XColor *color_def, int 
alloc)
+w32_defined_color (struct frame *f, const char *color, XColor *color_def,
+                  bool alloc_p)
 {
   register Lisp_Object tem;
   COLORREF w32_color_ref;
@@ -1180,7 +1168,7 @@ w32_defined_color (struct frame *f, const char *color, 
XColor *color_def, int al
              entry = entry->next;
            }
 
-         if (entry == NULL && alloc)
+         if (entry == NULL && alloc_p)
            {
              /* not already mapped, so add to list */
              entry = xmalloc (sizeof (struct w32_palette_entry));
@@ -1233,7 +1221,7 @@ x_decode_color (struct frame *f, Lisp_Object arg, int def)
 
   /* w32_defined_color is responsible for coping with failures
      by looking for a near-miss.  */
-  if (w32_defined_color (f, SDATA (arg), &cdef, 1))
+  if (w32_defined_color (f, SDATA (arg), &cdef, true))
     return cdef.pixel;
 
   /* defined_color failed; return an ultimate default.  */
@@ -1537,7 +1525,7 @@ x_set_cursor_type (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
 void
 x_set_icon_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
-  int result;
+  bool result;
 
   if (NILP (arg) && NILP (oldval))
     return;
@@ -1645,7 +1633,7 @@ x_set_internal_border_width (struct frame *f, Lisp_Object 
arg, Lisp_Object oldva
 
       if (FRAME_X_WINDOW (f) != 0)
        {
-         adjust_frame_size (f, -1, -1, 3, 0, Qinternal_border_width);
+         adjust_frame_size (f, -1, -1, 3, false, Qinternal_border_width);
 
          if (FRAME_VISIBLE_P (f))
            x_clear_under_internal_border (f);
@@ -1691,7 +1679,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, 
Lisp_Object oldval)
         of the outer rectangle (including decorations) unchanged, and a
         second time because we want to keep the height of the inner
         rectangle (without the decorations unchanged).  */
-      adjust_frame_size (f, -1, -1, 2, 1, Qmenu_bar_lines);
+      adjust_frame_size (f, -1, -1, 2, true, Qmenu_bar_lines);
 
       /* Not sure whether this is needed.  */
       x_clear_under_internal_border (f);
@@ -1721,15 +1709,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object 
value, Lisp_Object oldval)
   else
     nlines = 0;
 
-  if (nlines == 0)
-    x_change_tool_bar_height (f, nlines * FRAME_LINE_HEIGHT (f));
-  else
-    {
-      f->n_tool_bar_rows = 0;
-      FRAME_TOOL_BAR_LINES (f) = nlines;
-      adjust_frame_glyphs (f);
-      SET_FRAME_GARBAGED (f);
-    }
+  x_change_tool_bar_height (f, nlines * FRAME_LINE_HEIGHT (f));
 }
 
 
@@ -1749,11 +1729,7 @@ x_change_tool_bar_height (struct frame *f, int height)
   /* Recalculate tool bar and frame text sizes.  */
   FRAME_TOOL_BAR_HEIGHT (f) = height;
   FRAME_TOOL_BAR_LINES (f) = lines;
-/**   FRAME_TEXT_HEIGHT (f) **/
-/**     = FRAME_PIXEL_TO_TEXT_HEIGHT (f, FRAME_PIXEL_HEIGHT (f)); **/
-/**   FRAME_LINES (f) **/
-/**     = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, FRAME_PIXEL_HEIGHT (f)); **/
-  /* Store the `tool-bar-lines' and `height' frame parameters.  */
+  /* Store `tool-bar-lines' and `height' frame parameters.  */
   store_frame_param (f, Qtool_bar_lines, make_number (lines));
   store_frame_param (f, Qheight, make_number (FRAME_LINES (f)));
 
@@ -1769,13 +1745,64 @@ x_change_tool_bar_height (struct frame *f, int height)
   /* Recalculate toolbar height.  */
   f->n_tool_bar_rows = 0;
 
-  adjust_frame_size (f, -1, -1, (old_height == 0 || height == 0) ? 2 : 4, 0,
-                    Qtool_bar_lines);
+  adjust_frame_size (f, -1, -1,
+                    (!f->tool_bar_redisplayed_once ? 1
+                     : (old_height == 0 || height == 0) ? 2
+                     : 4),
+                    false, Qtool_bar_lines);
 
+  /* adjust_frame_size might not have done anything, garbage frame
+     here.  */
+  adjust_frame_glyphs (f);
+  SET_FRAME_GARBAGED (f);
   if (FRAME_X_WINDOW (f))
     x_clear_under_internal_border (f);
 }
 
+static void
+w32_set_title_bar_text (struct frame *f, Lisp_Object name)
+{
+  if (FRAME_W32_WINDOW (f))
+    {
+      block_input ();
+#ifdef __CYGWIN__
+      GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
+                              GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
+#else
+      /* The frame's title many times shows the name of the file
+        visited in the selected window's buffer, so it makes sense to
+        support non-ASCII characters outside of the current system
+        codepage in the title.  */
+      if (w32_unicode_filenames)
+       {
+         Lisp_Object encoded_title = ENCODE_UTF_8 (name);
+         wchar_t *title_w;
+         int tlen = pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title),
+                                          -1, NULL, 0);
+
+         if (tlen > 0)
+           {
+             /* Windows truncates the title text beyond what fits on
+                a single line, so we can limit the length to some
+                reasonably large value, and use alloca.  */
+             if (tlen > 10000)
+               tlen = 10000;
+             title_w = alloca ((tlen + 1) * sizeof (wchar_t));
+             pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title), -1,
+                                   title_w, tlen);
+             title_w[tlen] = L'\0';
+             SetWindowTextW (FRAME_W32_WINDOW (f), title_w);
+           }
+         else  /* Conversion to UTF-16 failed, so we punt.  */
+           SetWindowTextA (FRAME_W32_WINDOW (f),
+                           SSDATA (ENCODE_SYSTEM (name)));
+       }
+      else
+       SetWindowTextA (FRAME_W32_WINDOW (f), SSDATA (ENCODE_SYSTEM (name)));
+#endif
+      unblock_input ();
+    }
+}
 
 /* Change the name of frame F to NAME.  If NAME is nil, set F's name to
        w32_id_name.
@@ -1789,7 +1816,7 @@ x_change_tool_bar_height (struct frame *f, int height)
        F->explicit_name is set, ignore the new name; otherwise, set it.  */
 
 void
-x_set_name (struct frame *f, Lisp_Object name, int explicit)
+x_set_name (struct frame *f, Lisp_Object name, bool explicit)
 {
   /* Make sure that requests from lisp code override requests from
      Emacs redisplay code.  */
@@ -1829,13 +1856,7 @@ x_set_name (struct frame *f, Lisp_Object name, int 
explicit)
   if (! NILP (f->title))
     name = f->title;
 
-  if (FRAME_W32_WINDOW (f))
-    {
-      block_input ();
-      GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
-                              GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
-      unblock_input ();
-    }
+  w32_set_title_bar_text (f, name);
 }
 
 /* This function should be called when the user's lisp code has
@@ -1844,7 +1865,7 @@ x_set_name (struct frame *f, Lisp_Object name, int 
explicit)
 void
 x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
-  x_set_name (f, arg, 1);
+  x_set_name (f, arg, true);
 }
 
 /* This function should be called by Emacs redisplay code to set the
@@ -1853,7 +1874,7 @@ x_explicitly_set_name (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
 void
 x_implicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
-  x_set_name (f, arg, 0);
+  x_set_name (f, arg, false);
 }
 
 /* Change the title of frame F to NAME.
@@ -1873,13 +1894,7 @@ x_set_title (struct frame *f, Lisp_Object name, 
Lisp_Object old_name)
   if (NILP (name))
     name = f->name;
 
-  if (FRAME_W32_WINDOW (f))
-    {
-      block_input ();
-      GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
-                              GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
-      unblock_input ();
-    }
+  w32_set_title_bar_text (f, name);
 }
 
 void
@@ -2561,7 +2576,7 @@ w32_msg_pump (deferred_msg * msg_buf)
                  thread-safe.  The next line is okay because the cons
                  cell is never made into garbage and is not relocated by
                  GC.  */
-             XSETCAR (XIL ((EMACS_INT) msg.lParam), Qnil);
+             XSETCAR (make_lisp_ptr ((void *)msg.lParam, Lisp_Cons), Qnil);
              if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0))
                emacs_abort ();
              break;
@@ -2569,16 +2584,10 @@ w32_msg_pump (deferred_msg * msg_buf)
              {
                int vk_code = (int) msg.wParam;
                int cur_state = (GetKeyState (vk_code) & 1);
-               Lisp_Object new_state = XIL ((EMACS_INT) msg.lParam);
-
-               /* NB: This code must be thread-safe.  It is safe to
-                   call NILP because symbols are not relocated by GC,
-                   and pointer here is not touched by GC (so the markbit
-                   can't be set).  Numbers are safe because they are
-                   immediate values.  */
-               if (NILP (new_state)
-                   || (NUMBERP (new_state)
-                       && ((XUINT (new_state)) & 1) != cur_state))
+               int new_state = msg.lParam;
+
+               if (new_state == -1
+                   || ((new_state & 1) != cur_state))
                  {
                    one_w32_display_info.faked_key = vk_code;
 
@@ -4223,7 +4232,7 @@ my_create_tip_window (struct frame *f)
 /* Create and set up the w32 window for frame F.  */
 
 static void
-w32_window (struct frame *f, long window_prompting, int minibuffer_only)
+w32_window (struct frame *f, long window_prompting, bool minibuffer_only)
 {
   block_input ();
 
@@ -4232,7 +4241,7 @@ w32_window (struct frame *f, long window_prompting, int 
minibuffer_only)
      for the window manager, so GC relocation won't bother it.
 
      Elsewhere we specify the window name for the window manager.  */
-  f->namebuf = xstrdup (SSDATA (Vx_resource_name));
+  f->namebuf = xlispstrdup (Vx_resource_name);
 
   my_create_window (f);
 
@@ -4442,7 +4451,7 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
   struct frame *f;
   Lisp_Object frame, tem;
   Lisp_Object name;
-  int minibuffer_only = 0;
+  bool minibuffer_only = false;
   long window_prompting = 0;
   ptrdiff_t count = SPECPDL_INDEX ();
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
@@ -4502,12 +4511,12 @@ This function is an internal primitive--use 
`make-frame' instead.  */)
   else if (EQ (tem, Qonly))
     {
       f = make_minibuffer_frame ();
-      minibuffer_only = 1;
+      minibuffer_only = true;
     }
   else if (WINDOWP (tem))
     f = make_frame_without_minibuffer (tem, kb, display);
   else
-    f = make_frame (1);
+    f = make_frame (true);
 
   XSETFRAME (frame, f);
 
@@ -4541,13 +4550,15 @@ This function is an internal primitive--use 
`make-frame' instead.  */)
   /* Specify the parent under which to make this window.  */
   if (!NILP (parent))
     {
-      f->output_data.w32->parent_desc = (Window) XFASTINT (parent);
-      f->output_data.w32->explicit_parent = 1;
+      /* Cast to UINT_PTR shuts up compiler warnings about cast to
+        pointer from integer of different size.  */
+      f->output_data.w32->parent_desc = (Window) (UINT_PTR) XFASTINT (parent);
+      f->output_data.w32->explicit_parent = true;
     }
   else
     {
       f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
-      f->output_data.w32->explicit_parent = 0;
+      f->output_data.w32->explicit_parent = false;
     }
 
   /* Set the name; the functions to which we pass f expect the name to
@@ -4555,12 +4566,12 @@ This function is an internal primitive--use 
`make-frame' instead.  */)
   if (EQ (name, Qunbound) || NILP (name))
     {
       fset_name (f, build_string (dpyinfo->w32_id_name));
-      f->explicit_name = 0;
+      f->explicit_name = false;
     }
   else
     {
       fset_name (f, name);
-      f->explicit_name = 1;
+      f->explicit_name = true;
       /* Use the frame's title when getting resources for this frame.  */
       specbind (Qx_resource_name, name);
     }
@@ -4638,7 +4649,8 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
      had one frame line vs one toolbar line which left us with a zero
      root window height which was obviously wrong as well ...  */
   adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
-                    FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, 1, Qnil);
+                    FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, true,
+                    Qx_create_frame_1);
 
   /* The X resources controlling the menu-bar and tool-bar are
      processed specially at startup, and reflected in the mode
@@ -4672,7 +4684,7 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
 
   f->output_data.w32->current_cursor = f->output_data.w32->nontext_cursor;
 
-  window_prompting = x_figure_window_size (f, parameters, 1);
+  window_prompting = x_figure_window_size (f, parameters, true);
 
   tem = x_get_arg (dpyinfo, parameters, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN);
   f->no_split = minibuffer_only || EQ (tem, Qt);
@@ -4706,13 +4718,14 @@ This function is an internal primitive--use 
`make-frame' instead.  */)
   /* Allow x_set_window_size, now.  */
   f->can_x_set_window_size = true;
 
-  adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, 1, 
Qnil);
+  adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, true,
+                    Qx_create_frame_2);
 
   /* Tell the server what size and position, etc, we want, and how
      badly we want them.  This should be done after we have the menu
      bar so that its size can be taken into account.  */
   block_input ();
-  x_wm_set_size_hint (f, window_prompting, 0);
+  x_wm_set_size_hint (f, window_prompting, false);
   unblock_input ();
 
   /* Make the window appear on the frame and enable display, unless
@@ -4782,7 +4795,7 @@ DEFUN ("xw-color-defined-p", Fxw_color_defined_p, 
Sxw_color_defined_p, 1, 2, 0,
 
   CHECK_STRING (color);
 
-  if (w32_defined_color (f, SDATA (color), &foo, 0))
+  if (w32_defined_color (f, SDATA (color), &foo, false))
     return Qt;
   else
     return Qnil;
@@ -4797,7 +4810,7 @@ DEFUN ("xw-color-values", Fxw_color_values, 
Sxw_color_values, 1, 2, 0,
 
   CHECK_STRING (color);
 
-  if (w32_defined_color (f, SDATA (color), &foo, 0))
+  if (w32_defined_color (f, SDATA (color), &foo, false))
     return list3i ((GetRValue (foo.pixel) << 8) | GetRValue (foo.pixel),
                   (GetGValue (foo.pixel) << 8) | GetGValue (foo.pixel),
                   (GetBValue (foo.pixel) << 8) | GetBValue (foo.pixel));
@@ -4914,25 +4927,38 @@ If omitted or nil, that stands for the selected frame's 
display.  */)
 }
 
 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
-       doc: /* Return the "vendor ID" string of the W32 system (Microsoft).
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+       doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
+
+\(Labeling every distributor as a "vendor" embodies the false assumption
+that operating systems cannot be developed and distributed noncommercially.)
+
+For GNU and Unix systems, this queries the X server software; for
+MS-Windows, this queries the OS.
+
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
 If omitted or nil, that stands for the selected frame's display.  */)
-  (Lisp_Object display)
+  (Lisp_Object terminal)
 {
   return build_string ("Microsoft Corp.");
 }
 
 DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
-       doc: /* Return the version numbers of the server of DISPLAY.
-The value is a list of three integers: the major and minor
-version numbers of the X Protocol in use, and the distributor-specific
-release number.  See also the function `x-server-vendor'.
+       doc: /* Return the version numbers of the GUI software on TERMINAL.
+The value is a list of three integers specifying the version of the GUI
+software in use.
 
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+For GNU and Unix system, the first 2 numbers are the version of the X
+Protocol used on TERMINAL and the 3rd number is the distributor-specific
+release number.  For MS-Windows, the 3 numbers report the version and
+the build number of the OS.
+
+See also the function `x-server-vendor'.
+
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
 If omitted or nil, that stands for the selected frame's display.  */)
-  (Lisp_Object display)
+  (Lisp_Object terminal)
 {
   return list3i (w32_major_version, w32_minor_version, w32_build_number);
 }
@@ -5642,7 +5668,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   ptrdiff_t count = SPECPDL_INDEX ();
   struct gcpro gcpro1, gcpro2, gcpro3;
   struct kboard *kb;
-  int face_change_count_before = face_change_count;
+  bool face_change_before = face_change;
   Lisp_Object buffer;
   struct buffer *old_buffer;
 
@@ -5667,7 +5693,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   frame = Qnil;
   GCPRO3 (parms, name, frame);
   /* Make a frame without minibuffer nor mode-line.  */
-  f = make_frame (0);
+  f = make_frame (false);
   f->wants_modeline = 0;
   XSETFRAME (frame, f);
 
@@ -5675,7 +5701,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   buffer = Fget_buffer_create (tip);
   /* Use set_window_buffer instead of Fset_window_buffer (see
      discussion of bug#11984, bug#12025, bug#12026).  */
-  set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, 0, 0);
+  set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, false, false);
   old_buffer = current_buffer;
   set_buffer_internal_1 (XBUFFER (buffer));
   bset_truncate_lines (current_buffer, Qnil);
@@ -5705,19 +5731,19 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
 #endif /* GLYPH_DEBUG */
   FRAME_KBOARD (f) = kb;
   f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
-  f->output_data.w32->explicit_parent = 0;
+  f->output_data.w32->explicit_parent = false;
 
   /* Set the name; the functions to which we pass f expect the name to
      be set.  */
   if (EQ (name, Qunbound) || NILP (name))
     {
       fset_name (f, build_string (dpyinfo->w32_id_name));
-      f->explicit_name = 0;
+      f->explicit_name = false;
     }
   else
     {
       fset_name (f, name);
-      f->explicit_name = 1;
+      f->explicit_name = true;
       /* use the frame's title when getting resources for this frame.  */
       specbind (Qx_resource_name, name);
     }
@@ -5778,7 +5804,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   f->output_data.w32->dwStyle = WS_BORDER | WS_POPUP | WS_DISABLED;
   f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
 
-  window_prompting = x_figure_window_size (f, parms, 0);
+  window_prompting = x_figure_window_size (f, parms, false);
 
   /* No fringes on tip frame.  */
   f->fringe_cols = 0;
@@ -5806,7 +5832,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   SET_FRAME_COLS (f, 0);
   SET_FRAME_LINES (f, 0);
   adjust_frame_size (f, width * FRAME_COLUMN_WIDTH (f),
-                    height * FRAME_LINE_HEIGHT (f), 0, 1, Qnil);
+                    height * FRAME_LINE_HEIGHT (f), 0, true, Qnil);
 
   /* Add `tooltip' frame parameter's default value. */
   if (NILP (Fframe_parameter (frame, Qtooltip)))
@@ -5838,7 +5864,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
       Fmodify_frame_parameters (frame, colors);
   }
 
-  f->no_split = 1;
+  f->no_split = true;
 
   UNGCPRO;
 
@@ -5854,11 +5880,11 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   f->can_x_set_window_size = true;
 
   /* Setting attributes of faces of the tooltip frame from resources
-     and similar will increment face_change_count, which leads to the
+     and similar will set face_change, which leads to the
      clearing of all current matrices.  Since this isn't necessary
-     here, avoid it by resetting face_change_count to the value it
+     here, avoid it by resetting face_change to the value it
      had before we created the tip frame.  */
-  face_change_count = face_change_count_before;
+  face_change = face_change_before;
 
   /* Discard the unwind_protect.  */
   return unbind_to (count, frame);
@@ -5985,7 +6011,8 @@ Text larger than the specified size is clipped.  */)
   int root_x, root_y;
   struct buffer *old_buffer;
   struct text_pos pos;
-  int i, width, height, seen_reversed_p;
+  int i, width, height;
+  bool seen_reversed_p;
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
   int old_windows_or_buffers_changed = windows_or_buffers_changed;
   ptrdiff_t count = SPECPDL_INDEX ();
@@ -6114,7 +6141,7 @@ Text larger than the specified size is clipped.  */)
 
   FRAME_TOTAL_COLS (f) = WINDOW_TOTAL_COLS (w);
   adjust_frame_glyphs (f);
-  w->pseudo_window_p = 1;
+  w->pseudo_window_p = true;
 
   /* Display the tooltip text in a temporary buffer.  */
   old_buffer = current_buffer;
@@ -6126,7 +6153,8 @@ Text larger than the specified size is clipped.  */)
   try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
 
   /* Compute width and height of the tooltip.  */
-  width = height = seen_reversed_p = 0;
+  width = height = 0;
+  seen_reversed_p = false;
   for (i = 0; i < w->desired_matrix->nrows; ++i)
     {
       struct glyph_row *row = &w->desired_matrix->rows[i];
@@ -6138,7 +6166,7 @@ Text larger than the specified size is clipped.  */)
        break;
 
       /* Let the row go over the full width of the frame.  */
-      row->full_width_p = 1;
+      row->full_width_p = true;
 
       row_width = row->pixel_width;
       if (row->used[TEXT_AREA])
@@ -6149,7 +6177,7 @@ Text larger than the specified size is clipped.  */)
                 place the cursor there.  Don't include the width of
                 this glyph.  */
              last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
-             if (INTEGERP (last->object))
+             if (NILP (last->object))
                row_width -= last->pixel_width;
            }
          else
@@ -6159,10 +6187,10 @@ Text larger than the specified size is clipped.  */)
                 Don't count that glyph.  */
              struct glyph *g = row->glyphs[TEXT_AREA];
 
-             if (g->type == STRETCH_GLYPH && INTEGERP (g->object))
+             if (g->type == STRETCH_GLYPH && NILP (g->object))
                {
                  row_width -= g->pixel_width;
-                 seen_reversed_p = 1;
+                 seen_reversed_p = true;
                }
            }
        }
@@ -6203,12 +6231,12 @@ Text larger than the specified size is clipped.  */)
 
          if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
            break;
-         row->full_width_p = 1;
+         row->full_width_p = true;
          row_width = row->pixel_width;
          if (row->used[TEXT_AREA] && !row->reversed_p)
            {
              last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
-             if (INTEGERP (last->object))
+             if (NILP (last->object))
                row_width -= last->pixel_width;
            }
 
@@ -6260,8 +6288,8 @@ Text larger than the specified size is clipped.  */)
   }
 
   /* Draw into the window.  */
-  w->must_be_updated_p = 1;
-  update_single_window (w, 1);
+  w->must_be_updated_p = true;
+  update_single_window (w);
 
   unblock_input ();
 
@@ -7019,7 +7047,14 @@ a ShowWindow flag:
       Lisp_Object absdoc_encoded = ENCODE_FILE (absdoc);
 
       if (faccessat (AT_FDCWD, SSDATA (absdoc_encoded), F_OK, AT_EACCESS) == 0)
-       document = absdoc_encoded;
+       {
+         /* ShellExecute fails if DOCUMENT is a UNC with forward
+            slashes (expand-file-name above converts all backslashes
+            to forward slashes).  Now that we know DOCUMENT is a
+            file, we can mirror all forward slashes into backslashes.  */
+         unixtodos_filename (SSDATA (absdoc_encoded));
+         document = absdoc_encoded;
+       }
       else
        document = ENCODE_FILE (document);
     }
@@ -7249,7 +7284,7 @@ The return value is the hotkey-id if registered, 
otherwise nil.  */)
       /* Notify input thread about new hot-key definition, so that it
         takes effect without needing to switch focus.  */
       PostThreadMessage (dwWindowsThreadId, WM_EMACS_REGISTER_HOT_KEY,
-                        (WPARAM) XLI (key), 0);
+                        (WPARAM) XINT (key), 0);
     }
 
   return key;
@@ -7269,10 +7304,17 @@ DEFUN ("w32-unregister-hot-key", 
Fw32_unregister_hot_key,
 
   if (!NILP (item))
     {
+      LPARAM lparam;
+
+      eassert (CONSP (item));
+      /* Pass the tail of the list as a pointer to a Lisp_Cons cell,
+        so that it works in a --with-wide-int build as well.  */
+      lparam = (LPARAM) XUNTAG (item, Lisp_Cons);
+
       /* Notify input thread about hot-key definition being removed, so
         that it takes effect without needing focus switch.  */
       if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_UNREGISTER_HOT_KEY,
-                            (WPARAM) XINT (XCAR (item)), (LPARAM) XLI (item)))
+                            (WPARAM) XINT (XCAR (item)), lparam))
        {
          MSG msg;
          GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE);
@@ -7327,10 +7369,15 @@ DEFUN ("w32-toggle-lock-key", Fw32_toggle_lock_key,
        doc: /* Toggle the state of the lock key KEY.
 KEY can be `capslock', `kp-numlock', or `scroll'.
 If the optional parameter NEW-STATE is a number, then the state of KEY
-is set to off if the low bit of NEW-STATE is zero, otherwise on.  */)
+is set to off if the low bit of NEW-STATE is zero, otherwise on.
+If NEW-STATE is omitted or nil, the function toggles the state,
+
+Value is the new state of the key, or nil if the function failed
+to change the state.  */)
   (Lisp_Object key, Lisp_Object new_state)
 {
   int vk_code;
+  LPARAM lparam;
 
   if (EQ (key, intern ("capslock")))
     vk_code = VK_CAPITAL;
@@ -7344,8 +7391,12 @@ is set to off if the low bit of NEW-STATE is zero, 
otherwise on.  */)
   if (!dwWindowsThreadId)
     return make_number (w32_console_toggle_lock_key (vk_code, new_state));
 
+  if (NILP (new_state))
+    lparam = -1;
+  else
+    lparam = (XUINT (new_state)) & 1;
   if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_TOGGLE_LOCK_KEY,
-                        (WPARAM) vk_code, (LPARAM) XLI (new_state)))
+                        (WPARAM) vk_code, lparam))
     {
       MSG msg;
       GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE);
diff --git a/src/w32font.c b/src/w32font.c
index 8959318..360ad3f 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -1,5 +1,5 @@
 /* Font backend for the Microsoft Windows API.
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -57,51 +57,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #define JOHAB_CHARSET 130
 #endif
 
-Lisp_Object Qgdi;
-Lisp_Object Quniscribe;
-static Lisp_Object QCformat;
-static Lisp_Object Qmonospace, Qsansserif, Qmono, Qsans, Qsans_serif;
-static Lisp_Object Qserif, Qscript, Qdecorative;
-static Lisp_Object Qraster, Qoutline, Qunknown;
-
-/* antialiasing  */
-static Lisp_Object Qstandard, Qsubpixel, Qnatural;
-
-/* languages */
-static Lisp_Object Qzh;
-
-/* scripts */
-static Lisp_Object Qgreek, Qcoptic, Qcyrillic, Qarmenian, Qhebrew;
-static Lisp_Object Qarabic, Qsyriac, Qnko, Qthaana, Qdevanagari, Qbengali;
-static Lisp_Object Qgurmukhi, Qgujarati, Qoriya, Qtamil, Qtelugu;
-static Lisp_Object Qkannada, Qmalayalam, Qsinhala, Qthai, Qlao;
-static Lisp_Object Qtibetan, Qmyanmar, Qgeorgian, Qhangul, Qethiopic;
-static Lisp_Object Qcherokee, Qcanadian_aboriginal, Qogham, Qrunic;
-static Lisp_Object Qkhmer, Qmongolian, Qbraille, Qhan;
-static Lisp_Object Qideographic_description, Qcjk_misc, Qkana, Qbopomofo;
-static Lisp_Object Qkanbun, Qyi, Qbyzantine_musical_symbol;
-static Lisp_Object Qmusical_symbol, Qmathematical, Qcham, Qphonetic;
-/* Not defined in characters.el, but referenced in fontset.el.  */
-static Lisp_Object Qbalinese, Qbuginese, Qbuhid, Qcuneiform, Qcypriot;
-static Lisp_Object Qdeseret, Qglagolitic, Qgothic, Qhanunoo, Qkharoshthi;
-static Lisp_Object Qlimbu, Qlinear_b, Qold_italic, Qold_persian, Qosmanya;
-static Lisp_Object Qphags_pa, Qphoenician, Qshavian, Qsyloti_nagri;
-static Lisp_Object Qtagalog, Qtagbanwa, Qtai_le, Qtifinagh, Qugaritic;
-
-/* W32 charsets: for use in Vw32_charset_info_alist.  */
-static Lisp_Object Qw32_charset_ansi, Qw32_charset_default;
-static Lisp_Object Qw32_charset_symbol, Qw32_charset_shiftjis;
-static Lisp_Object Qw32_charset_hangeul, Qw32_charset_gb2312;
-static Lisp_Object Qw32_charset_chinesebig5, Qw32_charset_oem;
-static Lisp_Object Qw32_charset_easteurope, Qw32_charset_turkish;
-static Lisp_Object Qw32_charset_baltic, Qw32_charset_russian;
-static Lisp_Object Qw32_charset_arabic, Qw32_charset_greek;
-static Lisp_Object Qw32_charset_hebrew, Qw32_charset_vietnamese;
-static Lisp_Object Qw32_charset_thai, Qw32_charset_johab, Qw32_charset_mac;
-
-/* Font spacing symbols - defined in font.c.  */
-extern Lisp_Object Qc, Qp, Qm;
-
 static void fill_in_logfont (struct frame *, LOGFONT *, Lisp_Object);
 
 static BYTE w32_antialias_type (Lisp_Object);
@@ -140,7 +95,7 @@ struct font_callback_data
   /* The list to add matches to.  */
   Lisp_Object list;
   /* Whether to match only opentype fonts.  */
-  int opentype_only;
+  bool opentype_only;
 };
 
 /* Handles the problem that EnumFontFamiliesEx will not return all
@@ -291,7 +246,7 @@ intern_font_name (char * string)
   Lisp_Object obarray = check_obarray (Vobarray);
   Lisp_Object tem = oblookup (obarray, SDATA (str), len, len);
   /* This code is similar to intern function from lread.c.  */
-  return SYMBOLP (tem) ? tem : intern_driver (str, obarray, XINT (tem));
+  return SYMBOLP (tem) ? tem : intern_driver (str, obarray, tem);
 }
 
 /* w32 implementation of get_cache for font backend.
@@ -791,7 +746,8 @@ w32font_otf_drive (struct font *font, Lisp_Object features,
    Additional parameter opentype_only restricts the returned fonts to
    opentype fonts, which can be used with the Uniscribe backend.  */
 Lisp_Object
-w32font_list_internal (struct frame *f, Lisp_Object font_spec, int 
opentype_only)
+w32font_list_internal (struct frame *f, Lisp_Object font_spec,
+                      bool opentype_only)
 {
   struct font_callback_data match_data;
   HDC dc;
@@ -843,7 +799,8 @@ w32font_list_internal (struct frame *f, Lisp_Object 
font_spec, int opentype_only
    Additional parameter opentype_only restricts the returned fonts to
    opentype fonts, which can be used with the Uniscribe backend.  */
 Lisp_Object
-w32font_match_internal (struct frame *f, Lisp_Object font_spec, int 
opentype_only)
+w32font_match_internal (struct frame *f, Lisp_Object font_spec,
+                       bool opentype_only)
 {
   struct font_callback_data match_data;
   HDC dc;
@@ -2504,7 +2461,7 @@ w32font_filter_properties (Lisp_Object font, Lisp_Object 
alist)
 struct font_driver w32font_driver =
   {
     LISP_INITIALLY_ZERO, /* Qgdi */
-    0, /* case insensitive */
+    false, /* case insensitive */
     w32font_get_cache,
     w32font_list,
     w32font_match,
diff --git a/src/w32font.h b/src/w32font.h
index 5ce3ac7..0ad0125 100644
--- a/src/w32font.h
+++ b/src/w32font.h
@@ -1,5 +1,5 @@
 /* Shared GDI and Uniscribe Font backend declarations for the Windows API.
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -66,10 +66,10 @@ struct w32font_info
 Lisp_Object w32font_get_cache (struct frame *fe);
 Lisp_Object w32font_list_internal (struct frame *f,
                                    Lisp_Object font_spec,
-                                   int opentype_only);
+                                   bool opentype_only);
 Lisp_Object w32font_match_internal (struct frame *f,
                                     Lisp_Object font_spec,
-                                    int opentype_only);
+                                    bool opentype_only);
 int w32font_open_internal (struct frame *f, Lisp_Object font_entity,
                            int pixel_size, Lisp_Object font_object);
 void w32font_close (struct font *font);
diff --git a/src/w32gui.h b/src/w32gui.h
index d04ce62..c90404b 100644
--- a/src/w32gui.h
+++ b/src/w32gui.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication on the Microsoft Windows API.
-   Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32heap.c b/src/w32heap.c
index c431b87..ee0eb16 100644
--- a/src/w32heap.c
+++ b/src/w32heap.c
@@ -1,5 +1,5 @@
-/* Heap management routines for GNU Emacs on the Microsoft Windows
-   API.  Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+/* Heap management routines for GNU Emacs on the Microsoft Windows API.
+   Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
    This file is part of GNU Emacs.
 
@@ -114,7 +114,7 @@ typedef struct _RTL_HEAP_PARAMETERS {
    than half of the size stated below.  It would be nice to find a way
    to build only the first bootstrap-emacs.exe with the large size,
    and reset that to a lower value afterwards.  */
-#ifdef _WIN64
+#if defined _WIN64 || defined WIDE_EMACS_INT
 # define DUMPED_HEAP_SIZE (18*1024*1024)
 #else
 # define DUMPED_HEAP_SIZE (11*1024*1024)
@@ -214,7 +214,7 @@ dumped_data_commit (PVOID Base, PVOID *CommitAddress, 
PSIZE_T CommitSize)
 
 /* We want to turn on Low Fragmentation Heap for XP and older systems.
    MinGW32 lacks those definitions.  */
-#ifndef _W64
+#ifndef MINGW_W64
 typedef enum _HEAP_INFORMATION_CLASS {
   HeapCompatibilityInformation
 } HEAP_INFORMATION_CLASS;
@@ -244,7 +244,7 @@ init_heap (void)
       /* Create the private heap.  */
       heap = HeapCreate (0, 0, 0);
 
-#ifndef _W64
+#ifndef MINGW_W64
       /* Set the low-fragmentation heap for OS before Vista.  */
       HMODULE hm_kernel32dll = LoadLibrary ("kernel32.dll");
       HeapSetInformation_Proc s_pfn_Heap_Set_Information = 
(HeapSetInformation_Proc) GetProcAddress (hm_kernel32dll, "HeapSetInformation");
diff --git a/src/w32heap.h b/src/w32heap.h
index 787fe9a..b5eb3ff 100644
--- a/src/w32heap.h
+++ b/src/w32heap.h
@@ -1,5 +1,5 @@
 /* Heap management routines (including unexec) for GNU Emacs on Windows NT.
-   Copyright (C) 1994, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32inevt.c b/src/w32inevt.c
index 7d10d88..e09903f 100644
--- a/src/w32inevt.c
+++ b/src/w32inevt.c
@@ -1,5 +1,5 @@
 /* Input event support for Emacs on the Microsoft Windows API.
-   Copyright (C) 1992-1993, 1995, 2001-2014 Free Software Foundation,
+   Copyright (C) 1992-1993, 1995, 2001-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -657,11 +657,12 @@ handle_file_notifications (struct input_event *hold_quit)
              Lisp_Object action = lispy_file_action (fni->Action);
 
              inev.kind = FILE_NOTIFY_EVENT;
-             inev.code = (ptrdiff_t)XINT (XIL ((EMACS_INT)notifications_desc));
              inev.timestamp = GetTickCount ();
              inev.modifiers = 0;
              inev.frame_or_window = callback;
              inev.arg = Fcons (action, fname);
+             inev.arg = list3 (make_pointer_integer (notifications_desc),
+                               action, fname);
              kbd_buffer_store_event_hold (&inev, hold_quit);
 
              if (!fni->NextEntryOffset)
diff --git a/src/w32inevt.h b/src/w32inevt.h
index c483621..4677c3e 100644
--- a/src/w32inevt.h
+++ b/src/w32inevt.h
@@ -1,5 +1,5 @@
 /* Input routines for GNU Emacs on the Microsoft Windows API.
-   Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32menu.c b/src/w32menu.c
index 6633ffd..40b8f5f 100644
--- a/src/w32menu.c
+++ b/src/w32menu.c
@@ -1,5 +1,5 @@
 /* Menu support for GNU Emacs on the Microsoft Windows API.
-   Copyright (C) 1986, 1988, 1993-1994, 1996, 1998-1999, 2001-2014 Free
+   Copyright (C) 1986, 1988, 1993-1994, 1996, 1998-1999, 2001-2015 Free
    Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -98,14 +98,12 @@ AppendMenuW_Proc unicode_append_menu = NULL;
 MessageBoxW_Proc unicode_message_box = NULL;
 #endif /* NTGUI_UNICODE */
 
-Lisp_Object Qdebug_on_next_call, Qunsupported__w32_dialog;
-
 void set_frame_menubar (struct frame *, bool, bool);
 
 #ifdef HAVE_DIALOGS
 static Lisp_Object w32_dialog_show (struct frame *, Lisp_Object, Lisp_Object, 
char **);
 #else
-static int is_simple_dialog (Lisp_Object);
+static bool is_simple_dialog (Lisp_Object);
 static Lisp_Object simple_dialog_show (struct frame *, Lisp_Object, 
Lisp_Object);
 #endif
 
@@ -168,7 +166,7 @@ w32_popup_dialog (struct frame *f, Lisp_Object header, 
Lisp_Object contents)
 void
 x_activate_menubar (struct frame *f)
 {
-  set_frame_menubar (f, 0, 1);
+  set_frame_menubar (f, false, true);
 
   /* Lock out further menubar changes while active.  */
   f->output_data.w32->menubar_active = 1;
@@ -219,9 +217,9 @@ menubar_selection_callback (struct frame *f, void * 
client_data)
       else
        {
          entry = AREF (vector, i + MENU_ITEMS_ITEM_VALUE);
-         /* The EMACS_INT cast avoids a warning.  There's no problem
+         /* The UINT_PTR cast avoids a warning.  There's no problem
             as long as pointers have enough bits to hold small integers.  */
-         if ((int) (EMACS_INT) client_data == i)
+         if ((int) (UINT_PTR) client_data == i)
            {
              int j;
              struct input_event buf;
@@ -291,7 +289,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool 
deep_p)
   XSETFRAME (Vmenu_updating_frame, f);
 
   if (! menubar_widget)
-    deep_p = 1;
+    deep_p = true;
 
   if (deep_p)
     {
@@ -390,7 +388,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool 
deep_p)
          else
            first_wv->contents = wv;
          /* Don't set wv->name here; GC during the loop might relocate it.  */
-         wv->enabled = 1;
+         wv->enabled = true;
          wv->button_type = BUTTON_TYPE_NONE;
          prev_wv = wv;
        }
@@ -503,8 +501,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool 
deep_p)
     /* Force the window size to be recomputed so that the frame's text
        area remains the same, if menubar has just been created.  */
     if (old_widget == NULL)
-      adjust_frame_size (f, FRAME_TEXT_WIDTH (f),
-                        FRAME_TEXT_HEIGHT (f), 2, 0, Qmenu_bar_lines);
+      adjust_frame_size (f, -1, -1, 2, false, Qmenu_bar_lines);
   }
 
   unblock_input ();
@@ -521,7 +518,7 @@ initialize_frame_menubar (struct frame *f)
   /* This function is called before the first chance to redisplay
      the frame.  It has to be, so the frame will have the right size.  */
   fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f)));
-  set_frame_menubar (f, 1, 1);
+  set_frame_menubar (f, true, true);
 }
 
 /* Get rid of the menu bar of frame F, and free its storage.
@@ -573,7 +570,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
   Lisp_Object *subprefix_stack
     = (Lisp_Object *) alloca (menu_items_used * word_size);
   int submenu_depth = 0;
-  int first_pane;
+  bool first_pane;
 
   *error = NULL;
 
@@ -593,7 +590,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
   wv = make_widget_value ("menu", NULL, true, Qnil);
   wv->button_type = BUTTON_TYPE_NONE;
   first_wv = wv;
-  first_pane = 1;
+  first_pane = true;
 
   /* Loop over all panes and items, filling in the tree.  */
   i = 0;
@@ -604,14 +601,14 @@ w32_menu_show (struct frame *f, int x, int y, int 
menuflags,
          submenu_stack[submenu_depth++] = save_wv;
          save_wv = prev_wv;
          prev_wv = 0;
-         first_pane = 1;
+         first_pane = false;
          i++;
        }
       else if (EQ (AREF (menu_items, i), Qlambda))
        {
          prev_wv = save_wv;
          save_wv = submenu_stack[--submenu_depth];
-         first_pane = 0;
+         first_pane = false;
          i++;
        }
       else if (EQ (AREF (menu_items, i), Qt)
@@ -667,7 +664,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
              save_wv = wv;
              prev_wv = 0;
            }
-         first_pane = 0;
+         first_pane = false;
          i += MENU_ITEMS_PANE_LENGTH;
        }
       else
@@ -709,7 +706,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
            wv->key = SSDATA (descrip);
          /* Use the contents index as call_data, since we are
              restricted to 16-bits.  */
-         wv->call_data = !NILP (def) ? (void *) (EMACS_INT) i : 0;
+         wv->call_data = !NILP (def) ? (void *) (UINT_PTR) i : 0;
 
          if (NILP (type))
            wv->button_type = BUTTON_TYPE_NONE;
@@ -886,8 +883,9 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
 
   /* Number of elements seen so far, before boundary.  */
   int left_count = 0;
-  /* 1 means we've seen the boundary between left-hand elts and right-hand.  */
-  int boundary_seen = 0;
+  /* true means we've seen the boundary between left-hand elts and
+     right-hand.  */
+  bool boundary_seen = false;
 
   *error = NULL;
 
@@ -931,7 +929,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
          {
            /* This is the boundary between left-side elts
               and right-side elts.  Stop incrementing right_count.  */
-           boundary_seen = 1;
+           boundary_seen = true;
            i++;
            continue;
          }
@@ -989,7 +987,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
   /* Actually create the dialog.  */
   dialog_id = widget_id_tick++;
   menu = lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv,
-                          f->output_data.w32->widget, 1, 0,
+                          f->output_data.w32->widget, true, 0,
                           dialog_selection_callback, 0);
   lw_modify_all_widgets (dialog_id, first_wv->contents, TRUE);
 
@@ -1040,25 +1038,25 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
    anywhere in Emacs that uses the other specific dialog choices that
    MessageBox provides.  */
 
-static int
+static bool
 is_simple_dialog (Lisp_Object contents)
 {
   Lisp_Object options;
   Lisp_Object name, yes, no, other;
 
   if (!CONSP (contents))
-    return 0;
+    return false;
   options = XCDR (contents);
 
   yes = build_string ("Yes");
   no = build_string ("No");
 
   if (!CONSP (options))
-    return 0;
+    return false;
 
   name = XCAR (options);
   if (!CONSP (name))
-    return 0;
+    return false;
   name = XCAR (name);
 
   if (!NILP (Fstring_equal (name, yes)))
@@ -1066,18 +1064,18 @@ is_simple_dialog (Lisp_Object contents)
   else if (!NILP (Fstring_equal (name, no)))
     other = yes;
   else
-    return 0;
+    return false;
 
   options = XCDR (options);
   if (!CONSP (options))
-    return 0;
+    return false;
 
   name = XCAR (options);
   if (!CONSP (name))
-    return 0;
+    return false;
   name = XCAR (name);
   if (NILP (Fstring_equal (name, other)))
-    return 0;
+    return false;
 
   /* Check there are no more options.  */
   options = XCDR (options);
@@ -1256,9 +1254,9 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
       if (wv->key != NULL)
        {
          out_string = SAFE_ALLOCA (strlen (wv->name) + strlen (wv->key) + 2);
-         strcpy (out_string, wv->name);
-         strcat (out_string, "\t");
-         strcat (out_string, wv->key);
+         p = stpcpy (out_string, wv->name);
+         p = stpcpy (p, "\t");
+         strcpy (p, wv->key);
        }
       else
        out_string = (char *)wv->name;
@@ -1404,17 +1402,21 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
          info.cbSize = sizeof (info);
          info.fMask = MIIM_DATA;
 
-         /* Set help string for menu item.  Leave it as a Lisp_Object
-            until it is ready to be displayed, since GC can happen while
-            menus are active.  */
+         /* Set help string for menu item.  Leave it as a pointer to
+            a Lisp_String until it is ready to be displayed, since GC
+            can happen while menus are active.  */
          if (!NILP (wv->help))
            {
+             /* We use XUNTAG below because in a 32-bit build
+                --with-wide-int we cannot pass a Lisp_Object
+                via a DWORD member of MENUITEMINFO.  */
              /* As of Jul-2012, w32api headers say that dwItemData
                 has DWORD type, but that's a bug: it should actually
                 be ULONG_PTR, which is correct for 32-bit and 64-bit
                 Windows alike.  MSVC headers get it right; hopefully,
                 MinGW headers will, too.  */
-             info.dwItemData = (ULONG_PTR) XLI (wv->help);
+             eassert (STRINGP (wv->help));
+             info.dwItemData = (ULONG_PTR) XUNTAG (wv->help, Lisp_String);
            }
          if (wv->button_type == BUTTON_TYPE_RADIO)
            {
@@ -1475,11 +1477,24 @@ w32_menu_display_help (HWND owner, HMENU menu, UINT 
item, UINT flags)
       struct frame *f = x_window_to_frame (&one_w32_display_info, owner);
       Lisp_Object frame, help;
 
-      /* No help echo on owner-draw menu items, or when the keyboard is used
-        to navigate the menus, since tooltips are distracting if they pop
-        up elsewhere.  */
-      if (flags & MF_OWNERDRAW || flags & MF_POPUP
-         || !(flags & MF_MOUSESELECT))
+      /* No help echo on owner-draw menu items, or when the keyboard
+        is used to navigate the menus, since tooltips are distracting
+        if they pop up elsewhere.  */
+      if ((flags & MF_OWNERDRAW) || (flags & MF_POPUP)
+         || !(flags & MF_MOUSESELECT)
+         /* Ignore any dwItemData for menu items whose flags don't
+            have the MF_HILITE bit set.  These are dwItemData that
+            Windows sends our way, but they aren't pointers to our
+            Lisp_String objects, so trying to create Lisp_Strings out
+            of them below and pass that to the keyboard queue will
+            crash Emacs when we try to display those "strings".  It
+            is unclear why we get these dwItemData, or what they are:
+            sometimes they point to a wchar_t string that is the menu
+            title, sometimes to someting that doesn't look like text
+            at all.  (The problematic data also comes with the 0x0800
+            bit set, but this bit is not documented, so we don't want
+            to depend on it.)  */
+         || !(flags & MF_HILITE))
        help = Qnil;
       else
        {
@@ -1490,7 +1505,10 @@ w32_menu_display_help (HWND owner, HMENU menu, UINT 
item, UINT flags)
          info.fMask = MIIM_DATA;
          get_menu_item_info (menu, item, FALSE, &info);
 
-         help = info.dwItemData ? XIL (info.dwItemData) : Qnil;
+         help =
+           info.dwItemData
+           ? make_lisp_ptr ((void *) info.dwItemData, Lisp_String)
+           : Qnil;
        }
 
       /* Store the help echo in the keyboard buffer as the X toolkit
diff --git a/src/w32notify.c b/src/w32notify.c
index 4f8c79a..ab6cd12 100644
--- a/src/w32notify.c
+++ b/src/w32notify.c
@@ -1,5 +1,5 @@
 /* Filesystem notifications support for GNU Emacs on the Microsoft Windows API.
-   Copyright (C) 2012-2014 Free Software Foundation, Inc.
+   Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -118,9 +118,7 @@ BYTE file_notifications[16384];
 DWORD notifications_size;
 void *notifications_desc;
 
-static Lisp_Object Qfile_name, Qdirectory_name, Qattributes;
-static Lisp_Object Qlast_write_time, Qlast_access_time, Qcreation_time;
-static Lisp_Object Qsecurity_desc, Qsubtree, watch_list;
+static Lisp_Object watch_list;
 
 /* Signal to the main thread that we have file notifications for it to
    process.  */
@@ -582,7 +580,7 @@ generate notifications correctly, though.  */)
        report_file_error ("Cannot watch file", Fcons (file, Qnil));
     }
   /* Store watch object in watch list. */
-  watch_descriptor = XIL ((EMACS_INT)dirwatch);
+  watch_descriptor = make_pointer_integer (dirwatch);
   watch_object = Fcons (watch_descriptor, callback);
   watch_list = Fcons (watch_object, watch_list);
 
@@ -607,7 +605,7 @@ WATCH-DESCRIPTOR should be an object returned by 
`w32notify-add-watch'.  */)
   if (!NILP (watch_object))
     {
       watch_list = Fdelete (watch_object, watch_list);
-      dirwatch = (struct notification *)XLI (watch_descriptor);
+      dirwatch = (struct notification *)XINTPTR (watch_descriptor);
       if (w32_valid_pointer_p (dirwatch, sizeof(struct notification)))
        status = remove_watch (dirwatch);
     }
@@ -622,7 +620,7 @@ WATCH-DESCRIPTOR should be an object returned by 
`w32notify-add-watch'.  */)
 Lisp_Object
 w32_get_watch_object (void *desc)
 {
-  Lisp_Object descriptor = XIL ((EMACS_INT)desc);
+  Lisp_Object descriptor = make_pointer_integer (desc);
 
   /* This is called from the input queue handling code, inside a
      critical section, so we cannot possibly QUIT if watch_list is not
diff --git a/src/w32proc.c b/src/w32proc.c
index 09e0c05..74731db 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -1,6 +1,6 @@
 /* Process support for GNU Emacs on the Microsoft Windows API.
 
-Copyright (C) 1992, 1995, 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1992, 1995, 1999-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -72,8 +72,6 @@ extern BOOL WINAPI IsValidLocale (LCID, DWORD);
            + ((DWORD_PTR)(var) - (section)->VirtualAddress)            \
            + (filedata).file_base))
 
-Lisp_Object Qhigh, Qlow;
-
 /* Signal handlers...SIG_DFL == 0 so this is initialized correctly.  */
 static signal_handler sig_handlers[NSIG];
 
@@ -1665,10 +1663,7 @@ sys_spawnve (int mode, char *cmdname, char **argv, char 
**envp)
       if (egetenv ("CMDPROXY"))
        strcpy (cmdname, egetenv ("CMDPROXY"));
       else
-       {
-         lispstpcpy (cmdname, Vinvocation_directory);
-         strcat (cmdname, "cmdproxy.exe");
-       }
+       strcpy (lispstpcpy (cmdname, Vinvocation_directory), "cmdproxy.exe");
 
       /* Can't use unixtodos_filename here, since that needs its file
         name argument encoded in UTF-8.  */
@@ -3073,17 +3068,27 @@ If successful, the new CP is returned, otherwise nil.  
*/)
 DEFUN ("w32-get-codepage-charset", Fw32_get_codepage_charset,
        Sw32_get_codepage_charset, 1, 1, 0,
        doc: /* Return charset ID corresponding to codepage CP.
-Returns nil if the codepage is not valid.  */)
+Returns nil if the codepage is not valid or its charset ID could
+not be determined.
+
+Note that this function is only guaranteed to work with ANSI
+codepages; most console codepages are not supported and will
+yield nil.  */)
   (Lisp_Object cp)
 {
   CHARSETINFO info;
+  DWORD dwcp;
 
   CHECK_NUMBER (cp);
 
   if (!IsValidCodePage (XINT (cp)))
     return Qnil;
 
-  if (TranslateCharsetInfo ((DWORD *) XINT (cp), &info, TCI_SRCCODEPAGE))
+  /* Going through a temporary DWORD variable avoids compiler warning
+     about cast to pointer from integer of different size, when
+     building --with-wide-int.  */
+  dwcp = XINT (cp);
+  if (TranslateCharsetInfo ((DWORD *) dwcp, &info, TCI_SRCCODEPAGE))
     return make_number (info.ciCharset);
 
   return Qnil;
@@ -3142,8 +3147,8 @@ If successful, the new layout id is returned, otherwise 
nil.  */)
   CHECK_NUMBER_CAR (layout);
   CHECK_NUMBER_CDR (layout);
 
- kl = (HKL) ((XINT (XCAR (layout)) & 0xffff)
-            | (XINT (XCDR (layout)) << 16));
+  kl = (HKL) (UINT_PTR) ((XINT (XCAR (layout)) & 0xffff)
+                        | (XINT (XCDR (layout)) << 16));
 
   /* Synchronize layout with input thread.  */
   if (dwWindowsThreadId)
@@ -3183,18 +3188,20 @@ get_lcid_callback (LPTSTR locale_num_str)
   if (GetLocaleInfo (try_lcid, LOCALE_SABBREVLANGNAME,
                     locval, LOCALE_NAME_MAX_LENGTH))
     {
+      size_t locval_len;
+
       /* This is for when they only specify the language, as in "ENU".  */
       if (stricmp (locval, lname) == 0)
        {
          found_lcid = try_lcid;
          return FALSE;
        }
-      strcat (locval, "_");
+      locval_len = strlen (locval);
+      strcpy (locval + locval_len, "_");
       if (GetLocaleInfo (try_lcid, LOCALE_SABBREVCTRYNAME,
-                        locval + strlen (locval), LOCALE_NAME_MAX_LENGTH))
+                        locval + locval_len + 1, LOCALE_NAME_MAX_LENGTH))
        {
-         size_t locval_len = strlen (locval);
-
+         locval_len = strlen (locval);
          if (strnicmp (locval, lname, locval_len) == 0
              && (lname[locval_len] == '.'
                  || lname[locval_len] == '\0'))
diff --git a/src/w32reg.c b/src/w32reg.c
index 5068f42..261cfcd 100644
--- a/src/w32reg.c
+++ b/src/w32reg.c
@@ -1,5 +1,5 @@
 /* Emulate the X Resource Manager through the registry.
-   Copyright (C) 1990, 1993-1994, 2001-2014 Free Software Foundation,
+   Copyright (C) 1990, 1993-1994, 2001-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/w32select.c b/src/w32select.c
index b1419e5..3c554c6 100644
--- a/src/w32select.c
+++ b/src/w32select.c
@@ -1,6 +1,6 @@
 /* Selection processing for Emacs on the Microsoft Windows API.
 
-Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -107,17 +107,11 @@ static Lisp_Object validate_coding_system (Lisp_Object 
coding_system);
 static void setup_windows_coding_system (Lisp_Object coding_system,
                                         struct coding_system * coding);
 
-
-/* A remnant from X11: Symbol for the CLIPBORD selection type.  Other
-   selections are not used on Windows, so we don't need symbols for
-   PRIMARY and SECONDARY.  */
-Lisp_Object QCLIPBOARD;
-
 /* Internal pseudo-constants, initialized in globals_of_w32select()
    based on current system parameters. */
 static LCID DEFAULT_LCID;
 static UINT ANSICP, OEMCP;
-static Lisp_Object QUNICODE, QANSICP, QOEMCP;
+static Lisp_Object QANSICP, QOEMCP;
 
 /* A hidden window just for the clipboard management. */
 static HWND clipboard_owner;
diff --git a/src/w32select.h b/src/w32select.h
index c56bc3c..0fa9f18 100644
--- a/src/w32select.h
+++ b/src/w32select.h
@@ -1,6 +1,6 @@
 /* Selection processing for Emacs on the Microsoft W32 API.
 
-Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32term.c b/src/w32term.c
index c2a37d0..251c46c 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -1,6 +1,6 @@
 /* Implementation of GUI terminal on the Microsoft Windows API.
 
-Copyright (C) 1989, 1993-2014 Free Software Foundation, Inc.
+Copyright (C) 1989, 1993-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -101,10 +101,10 @@ extern Cursor w32_load_cursor (LPCTSTR name);
 struct w32_display_info one_w32_display_info;
 struct w32_display_info *x_display_list;
 
-#if _WIN32_WINNT < 0x0500 && !defined(_W64)
+#if _WIN32_WINNT < 0x0500 && !defined(MINGW_W64)
 /* Pre Windows 2000, this was not available, but define it here so
    that Emacs compiled on such a platform will run on newer versions.
-   MinGW64 (_W64) defines these unconditionally, so avoid redefining.  */
+   MinGW64 defines these unconditionally, so avoid redefining.  */
 
 typedef struct tagWCRANGE
 {
@@ -185,7 +185,7 @@ void x_lower_frame (struct frame *);
 void x_scroll_bar_clear (struct frame *);
 void x_wm_set_size_hint (struct frame *, long, bool);
 void x_raise_frame (struct frame *);
-void x_set_window_size (struct frame *, int, int, int, bool);
+void x_set_window_size (struct frame *, bool, int, int, bool);
 void x_wm_set_window_state (struct frame *, int);
 void x_wm_set_icon_pixmap (struct frame *, int);
 static void w32_initialize (void);
@@ -220,10 +220,6 @@ static void w32fullscreen_hook (struct frame *);
 static void x_check_font (struct frame *, struct font *);
 #endif
 
-static Lisp_Object Qvendor_specific_keysyms;
-static Lisp_Object Qadded, Qremoved, Qmodified;
-static Lisp_Object Qrenamed_from, Qrenamed_to;
-
 
 /***********************************************************************
                              Debugging
@@ -563,7 +559,7 @@ x_update_window_begin (struct window *w)
   if (f == hlinfo->mouse_face_mouse_frame)
     {
       /* Don't do highlighting for mouse motion during the update.  */
-      hlinfo->mouse_face_defer = 1;
+      hlinfo->mouse_face_defer = true;
 
       /* If F needs to be redrawn, simply forget about any prior mouse
         highlighting.  */
@@ -686,11 +682,11 @@ x_update_window_end (struct window *w, bool cursor_on_p,
       block_input ();
 
       if (cursor_on_p)
-       display_and_set_cursor (w, 1,
+       display_and_set_cursor (w, true,
                                w->output_cursor.hpos, w->output_cursor.vpos,
                                w->output_cursor.x, w->output_cursor.y);
 
-      if (draw_window_fringes (w, 1))
+      if (draw_window_fringes (w, true))
        {
          if (WINDOW_RIGHT_DIVIDER_WIDTH (w))
            x_draw_right_divider (w);
@@ -732,7 +728,7 @@ x_update_end (struct frame *f)
     return;
 
   /* Mouse highlight may be displayed again.  */
-  MOUSE_HL_INFO (f)->mouse_face_defer = 0;
+  MOUSE_HL_INFO (f)->mouse_face_defer = false;
 }
 
 
@@ -762,7 +758,7 @@ x_after_update_window_line (struct window *w, struct 
glyph_row *desired_row)
   eassert (w);
 
   if (!desired_row->mode_line_p && !w->pseudo_window_p)
-    desired_row->redraw_fringe_bitmaps_p = 1;
+    desired_row->redraw_fringe_bitmaps_p = true;
 
   /* When a window has disappeared, make sure that no rest of
      full-width rows stays visible in the internal border.  Could
@@ -907,7 +903,7 @@ w32_destroy_fringe_bitmap (int which)
 static void x_set_glyph_string_clipping (struct glyph_string *);
 static void x_set_glyph_string_gc (struct glyph_string *);
 static void x_draw_glyph_string_background (struct glyph_string *,
-                                            int);
+                                            bool);
 static void x_draw_glyph_string_foreground (struct glyph_string *);
 static void x_draw_composite_glyph_string_foreground (struct glyph_string *);
 static void x_draw_glyph_string_box (struct glyph_string *);
@@ -929,7 +925,7 @@ static void w32_draw_relief_rect (struct frame *, int, int, 
int, int,
                                   int, int, int, int, int, int,
                                   RECT *);
 static void w32_draw_box_rect (struct glyph_string *, int, int, int, int,
-                               int, int, int, RECT *);
+                               int, bool, bool, RECT *);
 
 
 /* Set S->gc to a suitable GC for drawing glyph string S in cursor
@@ -1068,7 +1064,7 @@ x_set_glyph_string_gc (struct glyph_string *s)
   else if (s->hl == DRAW_CURSOR)
     {
       x_set_cursor_gc (s);
-      s->stippled_p = 0;
+      s->stippled_p = false;
     }
   else if (s->hl == DRAW_MOUSE_FACE)
     {
@@ -1194,7 +1190,7 @@ x_clear_glyph_string_rect (struct glyph_string *s,
    contains the first component of a composition.  */
 
 static void
-x_draw_glyph_string_background (struct glyph_string *s, int force_p)
+x_draw_glyph_string_background (struct glyph_string *s, bool force_p)
 {
   /* Nothing to do if background has already been drawn or if it
      shouldn't be drawn in the first place.  */
@@ -1212,7 +1208,7 @@ x_draw_glyph_string_background (struct glyph_string *s, 
int force_p)
                          s->background_width,
                          s->height - 2 * box_line_width);
          XSetFillStyle (s->display, s->gc, FillSolid);
-         s->background_filled_p = 1;
+         s->background_filled_p = true;
        }
       else
 #endif
@@ -1224,7 +1220,7 @@ x_draw_glyph_string_background (struct glyph_string *s, 
int force_p)
          x_clear_glyph_string_rect (s, s->x, s->y + box_line_width,
                                     s->background_width,
                                     s->height - 2 * box_line_width);
-         s->background_filled_p = 1;
+         s->background_filled_p = true;
        }
     }
 }
@@ -1277,11 +1273,11 @@ x_draw_glyph_string_foreground (struct glyph_string *s)
       y = s->ybase - boff;
       if (s->for_overlaps
          || (s->background_filled_p && s->hl != DRAW_CURSOR))
-       font->driver->draw (s, 0, s->nchars, x, y, 0);
+       font->driver->draw (s, 0, s->nchars, x, y, false);
       else
-       font->driver->draw (s, 0, s->nchars, x, y, 1);
+       font->driver->draw (s, 0, s->nchars, x, y, true);
       if (s->face->overstrike)
-       font->driver->draw (s, 0, s->nchars, x + 1, y, 0);
+       font->driver->draw (s, 0, s->nchars, x + 1, y, false);
 
       SelectObject (s->hdc, old_font);
     }
@@ -1335,9 +1331,9 @@ x_draw_composite_glyph_string_foreground (struct 
glyph_string *s)
            int xx = x + s->cmp->offsets[j * 2];
            int yy = y - s->cmp->offsets[j * 2 + 1];
 
-           font->driver->draw (s, j, j + 1, xx, yy, 0);
+           font->driver->draw (s, j, j + 1, xx, yy, false);
            if (s->face->overstrike)
-             font->driver->draw (s, j, j + 1, xx + 1, yy, 0);
+             font->driver->draw (s, j, j + 1, xx + 1, yy, false);
          }
       SelectObject (s->hdc, old_font);
     }
@@ -1362,20 +1358,20 @@ x_draw_composite_glyph_string_foreground (struct 
glyph_string *s)
 
              if (j < i)
                {
-                 font->driver->draw (s, j, i, x, y, 0);
+                 font->driver->draw (s, j, i, x, y, false);
                  x += width;
                }
              xoff = LGLYPH_XOFF (glyph);
              yoff = LGLYPH_YOFF (glyph);
              wadjust = LGLYPH_WADJUST (glyph);
-             font->driver->draw (s, i, i + 1, x + xoff, y + yoff, 0);
+             font->driver->draw (s, i, i + 1, x + xoff, y + yoff, false);
              x += wadjust;
              j = i + 1;
              width = 0;
            }
        }
       if (j < i)
-       font->driver->draw (s, j, i, x, y, 0);
+       font->driver->draw (s, j, i, x, y, false);
 
       SelectObject (s->hdc, old_font);
     }
@@ -1390,7 +1386,7 @@ x_draw_glyphless_glyph_string_foreground (struct 
glyph_string *s)
   struct glyph *glyph = s->first_glyph;
   XChar2b char2b[8];
   int x, i, j;
-  int with_background;
+  bool with_background;
 
   /* If first glyph of S has a left box line, start drawing the text
      of S to the right of that box line.  */
@@ -1405,8 +1401,8 @@ x_draw_glyphless_glyph_string_foreground (struct 
glyph_string *s)
   SetTextAlign (s->hdc, TA_BASELINE | TA_LEFT);
 
   s->char2b = char2b;
-  with_background = ! (s->for_overlaps
-                      || (s->background_filled_p && s->hl != DRAW_CURSOR));
+  with_background = ((s->for_overlaps
+                     || (s->background_filled_p && s->hl != DRAW_CURSOR))) == 
0;
   for (i = 0; i < s->nchars; i++, glyph++)
     {
       char buf[7], *str = NULL;
@@ -1716,7 +1712,7 @@ w32_draw_relief_rect (struct frame *f,
 static void
 w32_draw_box_rect (struct glyph_string *s,
                   int left_x, int top_y, int right_x, int bottom_y, int width,
-                   int left_p, int right_p, RECT *clip_rect)
+                   bool left_p, bool right_p, RECT *clip_rect)
 {
   w32_set_clip_rectangle (s->hdc, clip_rect);
 
@@ -1751,8 +1747,8 @@ w32_draw_box_rect (struct glyph_string *s,
 static void
 x_draw_glyph_string_box (struct glyph_string *s)
 {
-  int width, left_x, right_x, top_y, bottom_y, last_x, raised_p;
-  int left_p, right_p;
+  int width, left_x, right_x, top_y, bottom_y, last_x;
+  bool left_p, right_p, raised_p;
   struct glyph *last_glyph;
   RECT clip_rect;
 
@@ -2161,7 +2157,7 @@ x_draw_image_glyph_string (struct glyph_string *s)
 #endif
        x_draw_glyph_string_bg_rect (s, x, y, width, height);
 
-      s->background_filled_p = 1;
+      s->background_filled_p = true;
     }
 
   /* Draw the foreground.  */
@@ -2297,7 +2293,7 @@ x_draw_stretch_glyph_string (struct glyph_string *s)
        x_draw_glyph_string_bg_rect (s, x, s->y, background_width, s->height);
     }
 
-  s->background_filled_p = 1;
+  s->background_filled_p = true;
 }
 
 
@@ -2325,7 +2321,7 @@ x_draw_glyph_string (struct glyph_string *s)
            if (next->first_glyph->type == STRETCH_GLYPH)
              x_draw_stretch_glyph_string (next);
            else
-             x_draw_glyph_string_background (next, 1);
+             x_draw_glyph_string_background (next, true);
             next->num_clips = 0;
           }
     }
@@ -2342,7 +2338,7 @@ x_draw_glyph_string (struct glyph_string *s)
 
     {
       x_set_glyph_string_clipping (s);
-      x_draw_glyph_string_background (s, 1);
+      x_draw_glyph_string_background (s, true);
       x_draw_glyph_string_box (s);
       x_set_glyph_string_clipping (s);
       relief_drawn_p = 1;
@@ -2370,26 +2366,26 @@ x_draw_glyph_string (struct glyph_string *s)
 
     case CHAR_GLYPH:
       if (s->for_overlaps)
-       s->background_filled_p = 1;
+       s->background_filled_p = true;
       else
-        x_draw_glyph_string_background (s, 0);
+        x_draw_glyph_string_background (s, false);
       x_draw_glyph_string_foreground (s);
       break;
 
     case COMPOSITE_GLYPH:
       if (s->for_overlaps || (s->cmp_from > 0
                              && ! s->first_glyph->u.cmp.automatic))
-       s->background_filled_p = 1;
+       s->background_filled_p = true;
       else
-       x_draw_glyph_string_background (s, 1);
+       x_draw_glyph_string_background (s, true);
       x_draw_composite_glyph_string_foreground (s);
       break;
 
     case GLYPHLESS_GLYPH:
       if (s->for_overlaps)
-       s->background_filled_p = 1;
+       s->background_filled_p = true;
       else
-       x_draw_glyph_string_background (s, 0);
+       x_draw_glyph_string_background (s, false);
       x_draw_glyphless_glyph_string_foreground (s);
       break;
 
@@ -3251,12 +3247,11 @@ queue_notifications (struct input_event *event, W32Msg 
*msg, struct frame *f,
              Lisp_Object action = lispy_file_action (fni->Action);
 
              event->kind = FILE_NOTIFY_EVENT;
-             event->code
-               = (ptrdiff_t)XINT (XIL ((EMACS_INT)notifications_desc));
              event->timestamp = msg->msg.time;
              event->modifiers = 0;
              event->frame_or_window = callback;
-             event->arg = Fcons (action, fname);
+             event->arg = list3 (make_pointer_integer (notifications_desc),
+                                 action, fname);
              kbd_buffer_store_event (event);
              (*evcount)++;
 
@@ -3307,7 +3302,7 @@ note_mouse_movement (struct frame *frame, MSG *msg)
 
   if (msg->hwnd != FRAME_W32_WINDOW (frame))
     {
-      frame->mouse_moved = 1;
+      frame->mouse_moved = true;
       dpyinfo->last_mouse_scroll_bar = NULL;
       note_mouse_highlight (frame, -1, -1);
       dpyinfo->last_mouse_glyph_frame = NULL;
@@ -3320,7 +3315,7 @@ note_mouse_movement (struct frame *frame, MSG *msg)
       || mouse_x < r->left || mouse_x >= r->right
       || mouse_y < r->top  || mouse_y >= r->bottom)
     {
-      frame->mouse_moved = 1;
+      frame->mouse_moved = true;
       dpyinfo->last_mouse_scroll_bar = NULL;
       note_mouse_highlight (frame, mouse_x, mouse_y);
       /* Remember the mouse position here, as w32_mouse_position only
@@ -3404,7 +3399,7 @@ w32_mouse_position (struct frame **fp, int insist, 
Lisp_Object *bar_window,
 
       /* Clear the mouse-moved flag for every frame on this display.  */
       FOR_EACH_FRAME (tail, frame)
-       XFRAME (frame)->mouse_moved = 0;
+       XFRAME (frame)->mouse_moved = false;
 
       dpyinfo->last_mouse_scroll_bar = NULL;
 
@@ -3827,7 +3822,7 @@ w32_set_vertical_scroll_bar (struct window *w,
        }
       unblock_input ();
 
-      bar = x_scroll_bar_create (w, left, top, width, height, 0);
+      bar = x_scroll_bar_create (w, left, top, width, height, false);
     }
   else
     {
@@ -3927,7 +3922,7 @@ w32_set_horizontal_scroll_bar (struct window *w,
        }
       unblock_input ();
 
-      bar = x_scroll_bar_create (w, left, top, width, height, 1);
+      bar = x_scroll_bar_create (w, left, top, width, height, true);
     }
   else
     {
@@ -4410,7 +4405,7 @@ x_scroll_bar_report_motion (struct frame **fp, 
Lisp_Object *bar_window,
   XSETINT (*x, pos);
   XSETINT (*y, top_range);
 
-  f->mouse_moved = 0;
+  f->mouse_moved = false;
   dpyinfo->last_mouse_scroll_bar = NULL;
 
   *time = dpyinfo->last_mouse_movement_time;
@@ -4461,7 +4456,7 @@ x_horizontal_scroll_bar_report_motion (struct frame **fp, 
Lisp_Object *bar_windo
   XSETINT (*y, pos);
   XSETINT (*x, left_range);
 
-  f->mouse_moved = 0;
+  f->mouse_moved = false;
   dpyinfo->last_mouse_scroll_bar = NULL;
 
   *time = dpyinfo->last_mouse_movement_time;
@@ -4601,7 +4596,7 @@ w32_read_socket (struct terminal *terminal,
 
                  /* Definitely not obscured, so mark as visible.  */
                  SET_FRAME_VISIBLE (f, 1);
-                 SET_FRAME_ICONIFIED (f, 0);
+                 SET_FRAME_ICONIFIED (f, false);
                  SET_FRAME_GARBAGED (f);
                  if (!f->output_data.w32->asked_for_visible)
                    DebPrint (("frame %p (%s) reexposed by WM_PAINT\n", f,
@@ -4663,7 +4658,7 @@ w32_read_socket (struct terminal *terminal,
                  && !EQ (f->tool_bar_window, hlinfo->mouse_face_window))
                {
                  clear_mouse_face (hlinfo);
-                 hlinfo->mouse_face_hidden = 1;
+                 hlinfo->mouse_face_hidden = true;
                }
 
              if (temp_index == sizeof temp_buffer / sizeof (short))
@@ -4688,7 +4683,7 @@ w32_read_socket (struct terminal *terminal,
                  && !EQ (f->tool_bar_window, hlinfo->mouse_face_window))
                {
                  clear_mouse_face (hlinfo);
-                 hlinfo->mouse_face_hidden = 1;
+                 hlinfo->mouse_face_hidden = true;
                }
 
              if (temp_index == sizeof temp_buffer / sizeof (short))
@@ -4766,7 +4761,7 @@ w32_read_socket (struct terminal *terminal,
                  && !EQ (f->tool_bar_window, hlinfo->mouse_face_window))
                {
                  clear_mouse_face (hlinfo);
-                 hlinfo->mouse_face_hidden = 1;
+                 hlinfo->mouse_face_hidden = true;
                }
 
              if (temp_index == sizeof temp_buffer / sizeof (short))
@@ -4799,7 +4794,7 @@ w32_read_socket (struct terminal *terminal,
 
          if (hlinfo->mouse_face_hidden)
            {
-             hlinfo->mouse_face_hidden = 0;
+             hlinfo->mouse_face_hidden = false;
              clear_mouse_face (hlinfo);
            }
 
@@ -4918,7 +4913,7 @@ w32_read_socket (struct terminal *terminal,
                    the ButtonPress.  */
                 if (f != 0)
                  {
-                   f->mouse_moved = 0;
+                   f->mouse_moved = false;
                    if (!tool_bar_p)
                      f->last_tool_bar_item = -1;
                  }
@@ -4945,7 +4940,7 @@ w32_read_socket (struct terminal *terminal,
                   event; any subsequent mouse-movement Emacs events
                   should reflect only motion after the
                   ButtonPress.  */
-               f->mouse_moved = 0;
+               f->mouse_moved = false;
                f->last_tool_bar_item = -1;
              }
            dpyinfo->last_mouse_frame = f;
@@ -5046,7 +5041,7 @@ w32_read_socket (struct terminal *terminal,
                {
                case SIZE_MINIMIZED:
                  SET_FRAME_VISIBLE (f, 0);
-                 SET_FRAME_ICONIFIED (f, 1);
+                 SET_FRAME_ICONIFIED (f, true);
 
                  inev.kind = ICONIFY_EVENT;
                  XSETFRAME (inev.frame_or_window, f);
@@ -5057,7 +5052,7 @@ w32_read_socket (struct terminal *terminal,
                    bool iconified = FRAME_ICONIFIED_P (f);
 
                    SET_FRAME_VISIBLE (f, 1);
-                   SET_FRAME_ICONIFIED (f, 0);
+                   SET_FRAME_ICONIFIED (f, false);
 
                    /* wait_reading_process_output will notice this
                       and update the frame's display structures.  */
@@ -5104,7 +5099,7 @@ w32_read_socket (struct terminal *terminal,
                       conditional again in revision 116727.  martin */
                    if (iconified)
                      SET_FRAME_VISIBLE (f, 1);
-                   SET_FRAME_ICONIFIED (f, 0);
+                   SET_FRAME_ICONIFIED (f, false);
 
                    /* wait_reading_process_output will notice this
                       and update the frame's display structures.  */
@@ -5641,7 +5636,7 @@ w32_draw_window_cursor (struct window *w, struct 
glyph_row *glyph_row,
          w->phys_cursor_type = cursor_type;
        }
 
-      w->phys_cursor_on_p = 1;
+      w->phys_cursor_on_p = true;
 
       /* If this is the active cursor, we need to track it with the
         system caret, so third party software like screen magnifiers
@@ -5679,7 +5674,7 @@ w32_draw_window_cursor (struct window *w, struct 
glyph_row *glyph_row,
              ? (w->phys_cursor.hpos < 0)
              : (w->phys_cursor.hpos >= glyph_row->used[TEXT_AREA])))
        {
-         glyph_row->cursor_in_fringe_p = 1;
+         glyph_row->cursor_in_fringe_p = true;
          draw_fringe_bitmap (w, glyph_row, glyph_row->reversed_p);
          return;
        }
@@ -5716,7 +5711,7 @@ w32_draw_window_cursor (struct window *w, struct 
glyph_row *glyph_row,
 
 /* Icons.  */
 
-int
+bool
 x_bitmap_icon (struct frame *f, Lisp_Object icon)
 {
   HANDLE main_icon;
@@ -5843,7 +5838,8 @@ x_new_font (struct frame *f, Lisp_Object font_object, int 
fontset)
         problems because the tip frame has no widget.  */
       if (NILP (tip_frame) || XFRAME (tip_frame) != f)
        adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
-                          FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 3, 0, 
Qfont);
+                          FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 3,
+                          false, Qfont);
     }
 
   /* X version sets font of input methods here also.  */
@@ -5950,7 +5946,7 @@ x_set_offset (struct frame *f, register int xoff, 
register int yoff,
   x_calc_absolute_position (f);
 
   block_input ();
-  x_wm_set_size_hint (f, (long) 0, 0);
+  x_wm_set_size_hint (f, (long) 0, false);
 
   modified_left = f->left_pos;
   modified_top = f->top_pos;
@@ -6096,12 +6092,13 @@ w32fullscreen_hook (struct frame *f)
 }
 
 /* Call this to change the size of frame F's x-window.
-   If CHANGE_GRAVITY is 1, we change to top-left-corner window gravity
+   If CHANGE_GRAVITY, change to top-left-corner window gravity
    for this size change and subsequent size changes.
    Otherwise we leave the window gravity unchanged.  */
 
 void
-x_set_window_size (struct frame *f, int change_gravity, int width, int height, 
bool pixelwise)
+x_set_window_size (struct frame *f, bool change_gravity,
+                  int width, int height, bool pixelwise)
 {
   int pixelwidth, pixelheight;
   RECT rect;
@@ -6144,7 +6141,7 @@ x_set_window_size (struct frame *f, int change_gravity, 
int width, int height, b
     }
 
   f->win_gravity = NorthWestGravity;
-  x_wm_set_size_hint (f, (long) 0, 0);
+  x_wm_set_size_hint (f, (long) 0, false);
 
   f->want_fullscreen = FULLSCREEN_NONE;
   w32fullscreen_hook (f);
@@ -6331,7 +6328,7 @@ x_lower_frame (struct frame *f)
 }
 
 static void
-w32_frame_raise_lower (struct frame *f, int raise_flag)
+w32_frame_raise_lower (struct frame *f, bool raise_flag)
 {
   if (! FRAME_W32_P (f))
     return;
@@ -6456,7 +6453,7 @@ x_make_frame_invisible (struct frame *f)
      FRAME_SAMPLE_VISIBILITY set this.  So do it by hand,
      and synchronize with the server to make sure we agree.  */
   SET_FRAME_VISIBLE (f, 0);
-  SET_FRAME_ICONIFIED (f, 0);
+  SET_FRAME_ICONIFIED (f, false);
 
   unblock_input ();
 }
@@ -6481,7 +6478,7 @@ x_iconify_frame (struct frame *f)
   SendMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_MINIMIZE, 0);
 
   SET_FRAME_VISIBLE (f, 0);
-  SET_FRAME_ICONIFIED (f, 1);
+  SET_FRAME_ICONIFIED (f, true);
 
   unblock_input ();
 }
diff --git a/src/w32term.h b/src/w32term.h
index fb37550..3532e95 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication on the Microsoft Windows API.
-   Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -239,8 +239,8 @@ Lisp_Object display_x_get_resource (struct w32_display_info 
*,
 extern struct w32_display_info *w32_term_init (Lisp_Object,
                                               char *, char *);
 extern int w32_defined_color (struct frame *f, const char *color,
-                              XColor *color_def, int alloc);
-extern void x_set_window_size (struct frame *f, int change_grav,
+                              XColor *color_def, bool alloc_p);
+extern void x_set_window_size (struct frame *f, bool change_gravity,
                               int width, int height, bool pixelwise);
 extern int x_display_pixel_height (struct w32_display_info *);
 extern int x_display_pixel_width (struct w32_display_info *);
@@ -257,7 +257,7 @@ extern void x_set_internal_border_width (struct frame *f,
                                         Lisp_Object value,
                                         Lisp_Object oldval);
 extern void x_activate_menubar (struct frame *);
-extern int x_bitmap_icon (struct frame *, Lisp_Object);
+extern bool x_bitmap_icon (struct frame *, Lisp_Object);
 extern void initialize_frame_menubar (struct frame *);
 extern void x_free_frame_resources (struct frame *);
 extern void x_real_positions (struct frame *, int *, int *);
@@ -493,8 +493,8 @@ struct scroll_bar {
   (XSETINT ((low),   ((DWORDLONG)(int64))        & 0xffffffff), \
    XSETINT ((high), ((DWORDLONG)(int64) >> 32) & 0xffffffff))
 #else  /* not _WIN64 */
-/* Building a 32-bit C integer from two 16-bit lisp integers.  */
-#define SCROLL_BAR_PACK(low, high) (XINT (high) << 16 | XINT (low))
+/* Building a 32-bit C unsigned integer from two 16-bit lisp integers.  */
+#define SCROLL_BAR_PACK(low, high) ((UINT_PTR)(XINT (high) << 16 | XINT (low)))
 
 /* Setting two lisp integers to the low and high words of a 32-bit C int.  */
 #define SCROLL_BAR_UNPACK(low, high, int32) \
diff --git a/src/w32uniscribe.c b/src/w32uniscribe.c
index 1c7b256..73c0410 100644
--- a/src/w32uniscribe.c
+++ b/src/w32uniscribe.c
@@ -1,5 +1,5 @@
 /* Font backend for the Microsoft W32 Uniscribe API.
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -47,10 +47,6 @@ struct uniscribe_font_info
 
 int uniscribe_available = 0;
 
-/* Defined in w32font.c, since it is required there as well.  */
-extern Lisp_Object Quniscribe;
-extern Lisp_Object Qopentype;
-
 /* EnumFontFamiliesEx callback.  */
 static int CALLBACK ALIGN_STACK add_opentype_font_name_to_list (ENUMLOGFONTEX 
*,
                                                                NEWTEXTMETRICEX 
*,
@@ -71,7 +67,7 @@ memq_no_quit (Lisp_Object elt, Lisp_Object list)
 static Lisp_Object
 uniscribe_list (struct frame *f, Lisp_Object font_spec)
 {
-  Lisp_Object fonts = w32font_list_internal (f, font_spec, 1);
+  Lisp_Object fonts = w32font_list_internal (f, font_spec, true);
   FONT_ADD_LOG ("uniscribe-list", font_spec, fonts);
   return fonts;
 }
@@ -79,7 +75,7 @@ uniscribe_list (struct frame *f, Lisp_Object font_spec)
 static Lisp_Object
 uniscribe_match (struct frame *f, Lisp_Object font_spec)
 {
-  Lisp_Object entity = w32font_match_internal (f, font_spec, 1);
+  Lisp_Object entity = w32font_match_internal (f, font_spec, true);
   FONT_ADD_LOG ("uniscribe-match", font_spec, entity);
   return entity;
 }
@@ -187,8 +183,9 @@ uniscribe_otf_capability (struct font *font)
 static Lisp_Object
 uniscribe_shape (Lisp_Object lgstring)
 {
-  struct font * font;
-  struct uniscribe_font_info * uniscribe_font;
+  struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
+  struct uniscribe_font_info *uniscribe_font
+    = (struct uniscribe_font_info *) font;
   EMACS_UINT nchars;
   int nitems, max_items, i, max_glyphs, done_glyphs;
   wchar_t *chars;
@@ -203,9 +200,6 @@ uniscribe_shape (Lisp_Object lgstring)
   HDC context = NULL;
   HFONT old_font = NULL;
 
-  CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
-  uniscribe_font = (struct uniscribe_font_info *) font;
-
   /* Get the chars from lgstring in a form we can use with uniscribe.  */
   max_glyphs = nchars = LGSTRING_GLYPH_LEN (lgstring);
   done_glyphs = 0;
diff --git a/src/w32xfns.c b/src/w32xfns.c
index f7e1e02..35e12fd 100644
--- a/src/w32xfns.c
+++ b/src/w32xfns.c
@@ -1,5 +1,5 @@
 /* Functions taken directly from X sources for use with the Microsoft Windows 
API.
-   Copyright (C) 1989, 1992-1995, 1999, 2001-2014 Free Software
+   Copyright (C) 1989, 1992-1995, 1999, 2001-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/widget.c b/src/widget.c
index ecf1451..c4d6940 100644
--- a/src/widget.c
+++ b/src/widget.c
@@ -1,5 +1,5 @@
 /* The emacs frame widget.
-   Copyright (C) 1992-1993, 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 1992-1993, 2000-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/widget.h b/src/widget.h
index 2903666..a782035 100644
--- a/src/widget.h
+++ b/src/widget.h
@@ -1,5 +1,5 @@
 /* The emacs frame widget public header file.
-   Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/widgetprv.h b/src/widgetprv.h
index f5e2eb5..6cbbbd6 100644
--- a/src/widgetprv.h
+++ b/src/widgetprv.h
@@ -1,5 +1,5 @@
 /* The emacs frame widget private header file.
-   Copyright (C) 1993, 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/window.c b/src/window.c
index 7c2b3ca..2f44bf7 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1,6 +1,6 @@
 /* Window creation, deletion and examination for GNU Emacs.
    Does not include redisplay.
-   Copyright (C) 1985-1987, 1993-1998, 2000-2014 Free Software
+   Copyright (C) 1985-1987, 1993-1998, 2000-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -45,20 +45,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "msdos.h"
 #endif
 
-Lisp_Object Qwindowp, Qwindow_live_p;
-static Lisp_Object Qwindow_valid_p;
-static Lisp_Object Qwindow_configuration_p;
-static Lisp_Object Qrecord_window_buffer;
-static Lisp_Object Qwindow_deletable_p, Qdelete_window, Qdisplay_buffer;
-static Lisp_Object Qreplace_buffer_in_windows, Qget_mru_window;
-static Lisp_Object Qwindow_resize_root_window, 
Qwindow_resize_root_window_vertically;
-static Lisp_Object Qwindow_sanitize_window_sizes;
-static Lisp_Object Qwindow_pixel_to_total;
-static Lisp_Object Qscroll_up, Qscroll_down, Qscroll_command;
-static Lisp_Object Qsafe, Qabove, Qbelow, Qwindow_size, Qclone_of;
-static Lisp_Object Qfloor, Qceiling;
-static Lisp_Object Qwindow_point_insertion_type;
-
 static int displayed_window_lines (struct window *);
 static int count_windows (struct window *);
 static int get_leaf_windows (struct window *, struct window **, int);
@@ -115,15 +101,9 @@ Lisp_Object minibuf_window;
    shown as the selected window when the minibuffer is selected.  */
 Lisp_Object minibuf_selected_window;
 
-/* Hook run at end of temp_output_buffer_show.  */
-static Lisp_Object Qtemp_buffer_show_hook;
-
 /* Incremented for each window created.  */
 static int sequence_number;
 
-/* Hook to run when window config changes.  */
-static Lisp_Object Qwindow_configuration_change_hook;
-
 /* Used by the function window_scroll_pixel_based.  */
 static int window_scroll_pixel_based_preserve_x;
 static int window_scroll_pixel_based_preserve_y;
@@ -994,7 +974,10 @@ or scroll bars.
 If PIXELWISE is nil, return the largest integer smaller than WINDOW's
 pixel width divided by the character width of WINDOW's frame.  This
 means that if a column at the right of the text area is only partially
-visible, that column is not counted.  */)
+visible, that column is not counted.
+
+Note that the returned value includes the column reserved for the
+continuation glyph.  */)
   (Lisp_Object window, Lisp_Object pixelwise)
 {
   return make_number (window_body_width (decode_live_window (window),
@@ -2443,16 +2426,14 @@ window_list (void)
       Vwindow_list = Qnil;
       FOR_EACH_FRAME (tail, frame)
        {
-         Lisp_Object args[2];
+         Lisp_Object arglist = Qnil;
 
          /* We are visiting windows in canonical order, and add
             new windows at the front of args[1], which means we
             have to reverse this list at the end.  */
-         args[1] = Qnil;
-         foreach_window (XFRAME (frame), add_window_to_list, &args[1]);
-         args[0] = Vwindow_list;
-         args[1] = Fnreverse (args[1]);
-         Vwindow_list = Fnconc (2, args);
+         foreach_window (XFRAME (frame), add_window_to_list, &arglist);
+         arglist = Fnreverse (arglist);
+         Vwindow_list = CALLN (Fnconc, Vwindow_list, arglist);
        }
     }
 
@@ -3014,6 +2995,15 @@ resize_root_window (Lisp_Object window, Lisp_Object 
delta, Lisp_Object horizonta
   return call5 (Qwindow_resize_root_window, window, delta, horizontal, ignore, 
pixelwise);
 }
 
+/* Placeholder used by temacs -nw before window.el is loaded.  */
+DEFUN ("window--sanitize-window-sizes", Fwindow__sanitize_window_sizes,
+       Swindow__sanitize_window_sizes, 2, 2, 0,
+       doc: /* */
+       attributes: const)
+     (Lisp_Object frame, Lisp_Object horizontal)
+{
+  return Qnil;
+}
 
 Lisp_Object
 sanitize_window_sizes (Lisp_Object frame, Lisp_Object horizontal)
@@ -3645,12 +3635,21 @@ temp_output_buffer_show (register Lisp_Object buf)
         record_unwind_protect (select_window_norecord, prev_window);
         Fselect_window (window, Qt);
         Fset_buffer (w->contents);
-        Frun_hooks (1, &Qtemp_buffer_show_hook);
+        run_hook (Qtemp_buffer_show_hook);
         unbind_to (count, Qnil);
       }
     }
 }
-
+
+/* Allocate basically initialized window.  */
+
+static struct window *
+allocate_window (void)
+{
+  return ALLOCATE_ZEROED_PSEUDOVECTOR
+    (struct window, current_matrix, PVEC_WINDOW);
+}
+
 /* Make new window, have it replace WINDOW in window-tree, and make
    WINDOW its only vertical child (HORFLAG 1 means make WINDOW its only
    horizontal child).   */
@@ -4135,11 +4134,7 @@ values.  */)
 
 /* Resize frame F's windows when number of lines of F is set to SIZE.
    HORFLAG 1 means resize windows when number of columns of F is set to
-   SIZE.  PIXELWISE 1 means to interpret SIZE as pixels.
-
-   This function can delete all windows but the selected one in order to
-   satisfy the request.  The result will be meaningful if and only if
-   F's windows have meaningful sizes when you call this.  */
+   SIZE.  PIXELWISE 1 means to interpret SIZE as pixels.  */
 void
 resize_frame_windows (struct frame *f, int size, bool horflag, bool pixelwise)
 {
@@ -4869,11 +4864,16 @@ window_internal_height (struct window *w)
 static void
 window_scroll (Lisp_Object window, EMACS_INT n, bool whole, int noerror)
 {
+  ptrdiff_t count = SPECPDL_INDEX ();
+
   immediate_quit = 1;
   n = clip_to_bounds (INT_MIN, n, INT_MAX);
 
   wset_redisplay (XWINDOW (window));
 
+  if (whole && Vfast_but_imprecise_scrolling)
+    specbind (Qfontification_functions, Qnil);
+
   /* If we must, use the pixel-based version which is much slower than
      the line-based one but can handle varying line heights.  */
   if (FRAME_WINDOW_P (XFRAME (XWINDOW (window)->frame)))
@@ -4881,6 +4881,8 @@ window_scroll (Lisp_Object window, EMACS_INT n, bool 
whole, int noerror)
   else
     window_scroll_line_based (window, n, whole, noerror);
 
+  unbind_to (count, Qnil);
+
   /* Bug#15957.  */
   XWINDOW (window)->window_end_valid = 0;
   immediate_quit = 0;
@@ -6427,7 +6429,7 @@ the return value is nil.  Otherwise the value is t.  */)
       /* Allow x_set_window_size again and apply frame size changes if
         needed.  */
       f->can_x_set_window_size = true;
-      adjust_frame_size (f, -1, -1, 1, 0, Qnil);
+      adjust_frame_size (f, -1, -1, 1, 0, Qset_window_configuration);
 
       adjust_frame_glyphs (f);
       unblock_input ();
@@ -7345,7 +7347,7 @@ the buffer; `temp-buffer-show-hook' is not run unless 
this function runs it.  */
               doc: /* Non-nil means to use `mode-line-inactive' face in 
non-selected windows.
 If the minibuffer is active, the `minibuffer-scroll-window' mode line
 is displayed in the `mode-line' face.  */);
-  mode_line_in_non_selected_windows = 1;
+  mode_line_in_non_selected_windows = true;
 
   DEFVAR_LISP ("other-window-scroll-buffer", Vother_window_scroll_buffer,
               doc: /* If this is a live buffer, \\[scroll-other-window] should 
scroll its window.  */);
@@ -7353,7 +7355,7 @@ is displayed in the `mode-line' face.  */);
 
   DEFVAR_BOOL ("auto-window-vscroll", auto_window_vscroll_p,
               doc: /* Non-nil means to automatically adjust `window-vscroll' 
to view tall lines.  */);
-  auto_window_vscroll_p = 1;
+  auto_window_vscroll_p = true;
 
   DEFVAR_INT ("next-screen-context-lines", next_screen_context_lines,
              doc: /* Number of lines of continuity when scrolling by 
screenfuls.  */);
@@ -7476,7 +7478,18 @@ all functions that symmetrically resize a parent window.
 Note that when a frame's pixel size is not a multiple of the
 frame's character size, at least one window may get resized
 pixelwise even if this option is nil.  */);
-  window_resize_pixelwise = 0;
+  window_resize_pixelwise = false;
+
+  DEFVAR_BOOL ("fast-but-imprecise-scrolling",
+               Vfast_but_imprecise_scrolling,
+               doc: /* When non-nil, accelerate scrolling operations.
+This comes into play when scrolling rapidly over previously
+unfontified buffer regions.  Only those portions of the buffer which
+are actually going to be displayed get fontified.
+
+Note that this optimization can cause the portion of the buffer
+displayed after a scrolling operation to be somewhat inaccurate.  */);
+  Vfast_but_imprecise_scrolling = false;
 
   defsubr (&Sselected_window);
   defsubr (&Sminibuffer_window);
@@ -7549,6 +7562,7 @@ pixelwise even if this option is nil.  */);
   defsubr (&Sset_window_display_table);
   defsubr (&Snext_window);
   defsubr (&Sprevious_window);
+  defsubr (&Swindow__sanitize_window_sizes);
   defsubr (&Sget_buffer_window);
   defsubr (&Sdelete_other_windows_internal);
   defsubr (&Sdelete_window_internal);
diff --git a/src/window.h b/src/window.h
index 4e4c65b..2ec28ab 100644
--- a/src/window.h
+++ b/src/window.h
@@ -1,5 +1,5 @@
 /* Window definitions for GNU Emacs.
-   Copyright (C) 1985-1986, 1993, 1995, 1997-2014 Free Software
+   Copyright (C) 1985-1986, 1993, 1995, 1997-2015 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -1085,7 +1085,6 @@ struct glyph *get_phys_cursor_glyph (struct window *w);
   CHECK_TYPE (WINDOW_LIVE_P (WINDOW), Qwindow_live_p, WINDOW)
 
 /* These used to be in lisp.h.  */
-extern Lisp_Object Qwindow_live_p;
 extern Lisp_Object Vwindow_list;
 
 extern Lisp_Object window_list (void);
diff --git a/src/xdisp.c b/src/xdisp.c
index 1b015e7..68c0fa5 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -1,6 +1,6 @@
 /* Display generation from window structure and buffer text.
 
-Copyright (C) 1985-1988, 1993-1995, 1997-2014 Free Software Foundation,
+Copyright (C) 1985-1988, 1993-1995, 1997-2015 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -324,52 +324,9 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 #define INFINITY 10000000
 
-Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map;
-Lisp_Object Qwindow_scroll_functions;
-static Lisp_Object Qwindow_text_change_functions;
-static Lisp_Object Qredisplay_end_trigger_functions;
-Lisp_Object Qinhibit_point_motion_hooks;
-static Lisp_Object QCeval, QCpropertize;
-Lisp_Object QCfile, QCdata;
-static Lisp_Object Qfontified;
-static Lisp_Object Qgrow_only;
-static Lisp_Object Qinhibit_eval_during_redisplay;
-static Lisp_Object Qbuffer_position, Qposition, Qobject;
-static Lisp_Object Qright_to_left, Qleft_to_right;
-
-/* Cursor shapes.  */
-Lisp_Object Qbar, Qhbar, Qbox, Qhollow;
-
-/* Pointer shapes.  */
-static Lisp_Object Qarrow, Qhand;
-Lisp_Object Qtext;
-
 /* Holds the list (error).  */
 static Lisp_Object list_of_error;
 
-static Lisp_Object Qfontification_functions;
-
-static Lisp_Object Qwrap_prefix;
-static Lisp_Object Qline_prefix;
-static Lisp_Object Qredisplay_internal;
-
-/* Non-nil means don't actually do any redisplay.  */
-
-Lisp_Object Qinhibit_redisplay;
-
-/* Names of text properties relevant for redisplay.  */
-
-Lisp_Object Qdisplay;
-
-Lisp_Object Qspace, QCalign_to;
-static Lisp_Object QCrelative_width, QCrelative_height;
-Lisp_Object Qleft_margin, Qright_margin;
-static Lisp_Object Qspace_width, Qraise;
-static Lisp_Object Qslice;
-Lisp_Object Qcenter;
-static Lisp_Object Qmargin, Qpointer;
-static Lisp_Object Qline_height;
-
 #ifdef HAVE_WINDOW_SYSTEM
 
 /* Test if overflow newline into fringe.  Called with iterator IT
@@ -403,31 +360,6 @@ static Lisp_Object Qline_height;
           && (*BYTE_POS_ADDR (IT_BYTEPOS (*it)) == ' '                 \
               || *BYTE_POS_ADDR (IT_BYTEPOS (*it)) == '\t'))))         \
 
-/* Name of the face used to highlight trailing whitespace.  */
-
-static Lisp_Object Qtrailing_whitespace;
-
-/* Name and number of the face used to highlight escape glyphs.  */
-
-static Lisp_Object Qescape_glyph;
-
-/* Name and number of the face used to highlight non-breaking spaces.  */
-
-static Lisp_Object Qnobreak_space;
-
-/* The symbol `image' which is the car of the lists used to represent
-   images in Lisp.  Also a tool bar style.  */
-
-Lisp_Object Qimage;
-
-/* The image map types.  */
-Lisp_Object QCmap;
-static Lisp_Object QCpointer;
-static Lisp_Object Qrect, Qcircle, Qpoly;
-
-/* Tool bar styles */
-Lisp_Object Qboth, Qboth_horiz, Qtext_image_horiz;
-
 /* Non-zero means print newline to stdout before next mini-buffer
    message.  */
 
@@ -477,21 +409,6 @@ static struct text_pos this_line_min_pos;
 
 static struct buffer *this_line_buffer;
 
-
-/* Values of those variables at last redisplay are stored as
-   properties on `overlay-arrow-position' symbol.  However, if
-   Voverlay_arrow_position is a marker, last-arrow-position is its
-   numerical position.  */
-
-static Lisp_Object Qlast_arrow_position, Qlast_arrow_string;
-
-/* Alternative overlay-arrow-string and overlay-arrow-bitmap
-   properties on a symbol in overlay-arrow-variable-list.  */
-
-static Lisp_Object Qoverlay_arrow_string, Qoverlay_arrow_bitmap;
-
-Lisp_Object Qmenu_bar_update_hook;
-
 /* Nonzero if an overlay arrow has been displayed in this window.  */
 
 static bool overlay_arrow_seen;
@@ -567,11 +484,6 @@ static bool display_last_displayed_message_p;
 
 static bool message_buf_print;
 
-/* The symbol `inhibit-menubar-update' and its DEFVAR_BOOL variable.  */
-
-static Lisp_Object Qinhibit_menubar_update;
-static Lisp_Object Qmessage_truncate_lines;
-
 /* Set to 1 in clear_message to make redisplay_internal aware
    of an emptied echo area.  */
 
@@ -691,8 +603,6 @@ int trace_move;
 #define TRACE_MOVE(x)  (void) 0
 #endif
 
-static Lisp_Object Qauto_hscroll_mode;
-
 /* Buffer being redisplayed -- for redisplay_window_error.  */
 
 static struct buffer *displayed_buffer;
@@ -712,8 +622,8 @@ enum prop_handled
 
 struct props
 {
-  /* The name of the property.  */
-  Lisp_Object *name;
+  /* The symbol index of the name of the property.  */
+  short name;
 
   /* A unique index for the property.  */
   enum prop_idx idx;
@@ -734,14 +644,14 @@ static enum prop_handled handle_fontified_prop (struct it 
*);
 
 static struct props it_props[] =
 {
-  {&Qfontified,                FONTIFIED_PROP_IDX,     handle_fontified_prop},
+  {SYMBOL_INDEX (Qfontified),  FONTIFIED_PROP_IDX,     handle_fontified_prop},
   /* Handle `face' before `display' because some sub-properties of
      `display' need to know the face.  */
-  {&Qface,             FACE_PROP_IDX,          handle_face_prop},
-  {&Qdisplay,          DISPLAY_PROP_IDX,       handle_display_prop},
-  {&Qinvisible,                INVISIBLE_PROP_IDX,     handle_invisible_prop},
-  {&Qcomposition,      COMPOSITION_PROP_IDX,   handle_composition_prop},
-  {NULL,               0,                      NULL}
+  {SYMBOL_INDEX (Qface),       FACE_PROP_IDX,          handle_face_prop},
+  {SYMBOL_INDEX (Qdisplay),    DISPLAY_PROP_IDX,       handle_display_prop},
+  {SYMBOL_INDEX (Qinvisible),  INVISIBLE_PROP_IDX,     handle_invisible_prop},
+  {SYMBOL_INDEX (Qcomposition),        COMPOSITION_PROP_IDX, 
handle_composition_prop},
+  {0,                          0,                      NULL}
 };
 
 /* Value is the position described by X.  If X is a marker, value is
@@ -796,9 +706,6 @@ static struct glyph_slice null_glyph_slice = { 0, 0, 0, 0 };
 
 bool redisplaying_p;
 
-static Lisp_Object Qinhibit_free_realized_faces;
-static Lisp_Object Qmode_line_default_help_echo;
-
 /* If a string, XTread_socket generates an event to display that string.
    (The display is done in read_char.)  */
 
@@ -824,15 +731,6 @@ static struct atimer *hourglass_atimer;
 
 #endif /* HAVE_WINDOW_SYSTEM */
 
-/* Name of the face used to display glyphless characters.  */
-static Lisp_Object Qglyphless_char;
-
-/* Symbol for the purpose of Vglyphless_char_display.  */
-static Lisp_Object Qglyphless_char_display;
-
-/* Method symbols for Vglyphless_char_display.  */
-static Lisp_Object Qhex_code, Qempty_box, Qthin_space, Qzero_width;
-
 /* Default number of seconds to wait before displaying an hourglass
    cursor.  */
 #define DEFAULT_HOURGLASS_DELAY 1
@@ -905,7 +803,7 @@ static void iterate_out_of_display_property (struct it *);
 static void pop_it (struct it *);
 static void sync_frame_with_window_matrix_rows (struct window *);
 static void redisplay_internal (void);
-static int echo_area_display (int);
+static bool echo_area_display (bool);
 static void redisplay_windows (Lisp_Object);
 static void redisplay_window (Lisp_Object, bool);
 static Lisp_Object redisplay_window_error (Lisp_Object);
@@ -1406,6 +1304,7 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int 
*x, int *y,
   struct text_pos top;
   int visible_p = 0;
   struct buffer *old_buffer = NULL;
+  bool r2l = false;
 
   if (FRAME_INITIAL_P (XFRAME (WINDOW_FRAME (w))))
     return visible_p;
@@ -1691,6 +1590,8 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int 
*x, int *y,
          *rowh = max (0, (min (bottom_y, it.last_visible_y)
                           - max (top_y, window_top_y)));
          *vpos = it.vpos;
+         if (it.bidi_it.paragraph_dir == R2L)
+           r2l = true;
        }
     }
   else
@@ -1720,6 +1621,8 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int 
*x, int *y,
                           - max (it2.current_y,
                                  WINDOW_HEADER_LINE_HEIGHT (w))));
          *vpos = it2.vpos;
+         if (it2.bidi_it.paragraph_dir == R2L)
+           r2l = true;
        }
       else
        bidi_unshelve_cache (it2data, 1);
@@ -1729,10 +1632,20 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int 
*x, int *y,
   if (old_buffer)
     set_buffer_internal_1 (old_buffer);
 
-  if (visible_p && w->hscroll > 0)
-    *x -=
-      window_hscroll_limited (w, WINDOW_XFRAME (w))
-      * WINDOW_FRAME_COLUMN_WIDTH (w);
+  if (visible_p)
+    {
+      if (w->hscroll > 0)
+       *x -=
+         window_hscroll_limited (w, WINDOW_XFRAME (w))
+         * WINDOW_FRAME_COLUMN_WIDTH (w);
+      /* For lines in an R2L paragraph, we need to mirror the X pixel
+         coordinate wrt the text area.  For the reasons, see the
+         commentary in buffer_posn_from_coords and the explanation of
+         the geometry used by the move_it_* functions at the end of
+         the large commentary near the beginning of this file.  */
+      if (r2l)
+       *x = window_box_width (w, TEXT_AREA) - *x - 1;
+    }
 
 #if 0
   /* Debugging code.  */
@@ -2681,8 +2594,6 @@ safe__call1 (bool inhibit_quit, Lisp_Object fn, ...)
   return retval;
 }
 
-static Lisp_Object Qeval;
-
 Lisp_Object
 safe_eval (Lisp_Object sexpr)
 {
@@ -2813,9 +2724,9 @@ init_iterator (struct it *it, struct window *w,
      free realized faces now because they depend on face definitions
      that might have changed.  Don't free faces while there might be
      desired matrices pending which reference these faces.  */
-  if (face_change_count && !inhibit_free_realized_faces)
+  if (face_change && !inhibit_free_realized_faces)
     {
-      face_change_count = 0;
+      face_change = false;
       free_all_realized_faces (Qnil);
     }
 
@@ -2835,17 +2746,14 @@ init_iterator (struct it *it, struct window *w,
        row = MATRIX_HEADER_LINE_ROW (w->desired_matrix);
     }
 
-  /* Clear IT.  */
-  memset (it, 0, sizeof *it);
+  /* Clear IT, and set it->object and other IT's Lisp objects to Qnil.
+     Other parts of redisplay rely on that.  */
+  memclear (it, sizeof *it);
   it->current.overlay_string_index = -1;
   it->current.dpvec_index = -1;
   it->base_face_id = remapped_base_face_id;
-  it->string = Qnil;
   IT_STRING_CHARPOS (*it) = IT_STRING_BYTEPOS (*it) = -1;
   it->paragraph_embedding = L2R;
-  it->bidi_it.string.lstring = Qnil;
-  it->bidi_it.string.s = NULL;
-  it->bidi_it.string.bufpos = 0;
   it->bidi_it.w = w;
 
   /* The window in which we iterate over current_buffer:  */
@@ -2866,7 +2774,6 @@ init_iterator (struct it *it, struct window *w,
                                  * FRAME_LINE_HEIGHT (it->f));
       else if (it->f->extra_line_spacing > 0)
        it->extra_line_spacing = it->f->extra_line_spacing;
-      it->max_extra_line_spacing = 0;
     }
 
   /* If realized faces have been removed, e.g. because of face
@@ -2878,10 +2785,6 @@ init_iterator (struct it *it, struct window *w,
   if (FRAME_FACE_CACHE (it->f)->used == 0)
     recompute_basic_faces (it->f);
 
-  /* Current value of the `slice', `space-width', and 'height' properties.  */
-  it->slice.x = it->slice.y = it->slice.width = it->slice.height = Qnil;
-  it->space_width = Qnil;
-  it->font_height = Qnil;
   it->override_ascent = -1;
 
   /* Are control characters displayed as `^C'?  */
@@ -2919,21 +2822,19 @@ init_iterator (struct it *it, struct window *w,
   it->tab_width = SANE_TAB_WIDTH (current_buffer);
 
   /* Are lines in the display truncated?  */
-  if (base_face_id != DEFAULT_FACE_ID
-      || it->w->hscroll
-      || (! WINDOW_FULL_WIDTH_P (it->w)
-         && ((!NILP (Vtruncate_partial_width_windows)
-              && !INTEGERP (Vtruncate_partial_width_windows))
-             || (INTEGERP (Vtruncate_partial_width_windows)
-                 /* PXW: Shall we do something about this?  */
-                 && (WINDOW_TOTAL_COLS (it->w)
-                     < XINT (Vtruncate_partial_width_windows))))))
+  if (TRUNCATE != 0)
     it->line_wrap = TRUNCATE;
-  else if (NILP (BVAR (current_buffer, truncate_lines)))
+  if (base_face_id == DEFAULT_FACE_ID
+      && !it->w->hscroll
+      && (WINDOW_FULL_WIDTH_P (it->w)
+         || NILP (Vtruncate_partial_width_windows)
+         || (INTEGERP (Vtruncate_partial_width_windows)
+             /* PXW: Shall we do something about this?  */
+             && (XINT (Vtruncate_partial_width_windows)
+                 <= WINDOW_TOTAL_COLS (it->w))))
+      && NILP (BVAR (current_buffer, truncate_lines)))
     it->line_wrap = NILP (BVAR (current_buffer, word_wrap))
       ? WINDOW_WRAP : WORD_WRAP;
-  else
-    it->line_wrap = TRUNCATE;
 
   /* Get dimensions of truncation and continuation glyphs.  These are
      displayed as fringe bitmaps under X, but we need them for such
@@ -3605,7 +3506,8 @@ compute_stop_pos (struct it *it)
 
       /* Get properties here.  */
       for (p = it_props; p->handler; ++p)
-       values_here[p->idx] = textget (iv->plist, *p->name);
+       values_here[p->idx] = textget (iv->plist,
+                                      builtin_lisp_symbol (p->name));
 
       /* Look for an interval following iv that has different
         properties.  */
@@ -3617,9 +3519,8 @@ compute_stop_pos (struct it *it)
        {
          for (p = it_props; p->handler; ++p)
            {
-             Lisp_Object new_value;
-
-             new_value = textget (next_iv->plist, *p->name);
+             Lisp_Object new_value = textget (next_iv->plist,
+                                              builtin_lisp_symbol (p->name));
              if (!EQ (values_here[p->idx], new_value))
                break;
            }
@@ -3976,7 +3877,7 @@ handle_face_prop (struct it *it)
                                   &next_stop,
                                   (IT_CHARPOS (*it)
                                    + TEXT_PROP_DISTANCE_LIMIT),
-                                  0, it->base_face_id);
+                                  false, it->base_face_id);
 
       /* Is this a start of a run of characters with box face?
         Caveat: this can be called for a freshly initialized
@@ -4052,7 +3953,7 @@ handle_face_prop (struct it *it)
                                       &next_stop,
                                       (IT_CHARPOS (*it)
                                        + TEXT_PROP_DISTANCE_LIMIT),
-                                      0,
+                                      false,
                                       from_overlay);
        }
       else
@@ -4087,7 +3988,7 @@ handle_face_prop (struct it *it)
                                             IT_STRING_CHARPOS (*it),
                                             bufpos,
                                             &next_stop,
-                                            base_face_id, 0);
+                                            base_face_id, false);
 
       /* Is this a start of a run of characters with box?  Caveat:
         this can be called for a freshly allocated iterator; face_id
@@ -4229,7 +4130,7 @@ face_before_or_after_it_pos (struct it *it, int before_p)
                                         charpos,
                                         bufpos,
                                         &next_check_charpos,
-                                        base_face_id, 0);
+                                        base_face_id, false);
 
       /* Correct the face for charsets different from ASCII.  Do it
         for the multibyte case only.  The face returned above is
@@ -4318,7 +4219,7 @@ face_before_or_after_it_pos (struct it *it, int before_p)
       face_id = face_at_buffer_position (it->w,
                                         CHARPOS (pos),
                                         &next_check_charpos,
-                                        limit, 0, -1);
+                                        limit, false, -1);
 
       /* Correct the face for charsets different from ASCII.  Do it
         for the multibyte case only.  The face returned above is
@@ -5106,6 +5007,11 @@ handle_single_display_spec (struct it *it, Lisp_Object 
spec, Lisp_Object object,
                  iterate_out_of_display_property (it);
                  *position = it->position;
                }
+             /* If we were to display this fringe bitmap,
+                next_element_from_image would have reset this flag.
+                Do the same, to avoid affecting overlays that
+                follow.  */
+             it->ignore_overlay_strings_at_pos_p = 0;
              return 1;
            }
        }
@@ -5125,6 +5031,9 @@ handle_single_display_spec (struct it *it, Lisp_Object 
spec, Lisp_Object object,
              iterate_out_of_display_property (it);
              *position = it->position;
            }
+         if (it)
+           /* Reset this flag like next_element_from_image would.  */
+           it->ignore_overlay_strings_at_pos_p = 0;
          return 1;
        }
 
@@ -7256,7 +7165,7 @@ get_next_display_element (struct it *it)
                    {
                      next_face_id = face_at_buffer_position
                        (it->w, CHARPOS (pos), &ignore,
-                        CHARPOS (pos) + TEXT_PROP_DISTANCE_LIMIT, 0, -1);
+                        CHARPOS (pos) + TEXT_PROP_DISTANCE_LIMIT, false, -1);
                      it->end_of_box_run_p
                        = (FACE_FROM_ID (it->f, next_face_id)->box
                           == FACE_NO_BOX);
@@ -7324,27 +7233,15 @@ set_iterator_to_next (struct it *it, int reseat_p)
       else if (it->cmp_it.id >= 0)
        {
          /* We are currently getting glyphs from a composition.  */
-         int i;
-
          if (! it->bidi_p)
            {
              IT_CHARPOS (*it) += it->cmp_it.nchars;
              IT_BYTEPOS (*it) += it->cmp_it.nbytes;
-             if (it->cmp_it.to < it->cmp_it.nglyphs)
-               {
-                 it->cmp_it.from = it->cmp_it.to;
-               }
-             else
-               {
-                 it->cmp_it.id = -1;
-                 composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
-                                               IT_BYTEPOS (*it),
-                                               it->end_charpos, Qnil);
-               }
            }
-         else if (! it->cmp_it.reversed_p)
+         else
            {
-             /* Composition created while scanning forward.  */
+             int i;
+
              /* Update IT's char/byte positions to point to the first
                 character of the next grapheme cluster, or to the
                 character visually after the current composition.  */
@@ -7352,52 +7249,34 @@ set_iterator_to_next (struct it *it, int reseat_p)
                bidi_move_to_visually_next (&it->bidi_it);
              IT_BYTEPOS (*it) = it->bidi_it.bytepos;
              IT_CHARPOS (*it) = it->bidi_it.charpos;
+           }
 
-             if (it->cmp_it.to < it->cmp_it.nglyphs)
-               {
-                 /* Proceed to the next grapheme cluster.  */
-                 it->cmp_it.from = it->cmp_it.to;
-               }
-             else
-               {
-                 /* No more grapheme clusters in this composition.
-                    Find the next stop position.  */
-                 ptrdiff_t stop = it->end_charpos;
-                 if (it->bidi_it.scan_dir < 0)
-                   /* Now we are scanning backward and don't know
-                      where to stop.  */
-                   stop = -1;
-                 composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
-                                               IT_BYTEPOS (*it), stop, Qnil);
-               }
+         if ((! it->bidi_p || ! it->cmp_it.reversed_p)
+             && it->cmp_it.to < it->cmp_it.nglyphs)
+           {
+             /* Composition created while scanning forward.  Proceed
+                to the next grapheme cluster.  */
+             it->cmp_it.from = it->cmp_it.to;
+           }
+         else if ((it->bidi_p && it->cmp_it.reversed_p)
+                  && it->cmp_it.from > 0)
+           {
+             /* Composition created while scanning backward.  Proceed
+                to the previous grapheme cluster.  */
+             it->cmp_it.to = it->cmp_it.from;
            }
          else
            {
-             /* Composition created while scanning backward.  */
-             /* Update IT's char/byte positions to point to the last
-                character of the previous grapheme cluster, or the
-                character visually after the current composition.  */
-             for (i = 0; i < it->cmp_it.nchars; i++)
-               bidi_move_to_visually_next (&it->bidi_it);
-             IT_BYTEPOS (*it) = it->bidi_it.bytepos;
-             IT_CHARPOS (*it) = it->bidi_it.charpos;
-             if (it->cmp_it.from > 0)
-               {
-                 /* Proceed to the previous grapheme cluster.  */
-                 it->cmp_it.to = it->cmp_it.from;
-               }
-             else
-               {
-                 /* No more grapheme clusters in this composition.
-                    Find the next stop position.  */
-                 ptrdiff_t stop = it->end_charpos;
-                 if (it->bidi_it.scan_dir < 0)
-                   /* Now we are scanning backward and don't know
-                      where to stop.  */
-                   stop = -1;
-                 composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
-                                               IT_BYTEPOS (*it), stop, Qnil);
-               }
+             /* No more grapheme clusters in this composition.
+                Find the next stop position.  */
+             ptrdiff_t stop = it->end_charpos;
+
+             if (it->bidi_it.scan_dir < 0)
+               /* Now we are scanning backward and don't know
+                  where to stop.  */
+               stop = -1;
+             composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
+                                           IT_BYTEPOS (*it), stop, Qnil);
            }
        }
       else
@@ -7526,61 +7405,63 @@ set_iterator_to_next (struct it *it, int reseat_p)
        }
       if (it->cmp_it.id >= 0)
        {
-         int i;
-
+         /* We are delivering display elements from a composition.
+            Update the string position past the grapheme cluster
+            we've just processed.  */
          if (! it->bidi_p)
            {
              IT_STRING_CHARPOS (*it) += it->cmp_it.nchars;
              IT_STRING_BYTEPOS (*it) += it->cmp_it.nbytes;
-             if (it->cmp_it.to < it->cmp_it.nglyphs)
-               it->cmp_it.from = it->cmp_it.to;
-             else
-               {
-                 it->cmp_it.id = -1;
-                 composition_compute_stop_pos (&it->cmp_it,
-                                               IT_STRING_CHARPOS (*it),
-                                               IT_STRING_BYTEPOS (*it),
-                                               it->end_charpos, it->string);
-               }
            }
-         else if (! it->cmp_it.reversed_p)
+         else
            {
+             int i;
+
              for (i = 0; i < it->cmp_it.nchars; i++)
                bidi_move_to_visually_next (&it->bidi_it);
              IT_STRING_BYTEPOS (*it) = it->bidi_it.bytepos;
              IT_STRING_CHARPOS (*it) = it->bidi_it.charpos;
+           }
 
-             if (it->cmp_it.to < it->cmp_it.nglyphs)
-               it->cmp_it.from = it->cmp_it.to;
-             else
-               {
-                 ptrdiff_t stop = it->end_charpos;
-                 if (it->bidi_it.scan_dir < 0)
-                   stop = -1;
-                 composition_compute_stop_pos (&it->cmp_it,
-                                               IT_STRING_CHARPOS (*it),
-                                               IT_STRING_BYTEPOS (*it), stop,
-                                               it->string);
-               }
+         /* Did we exhaust all the grapheme clusters of this
+            composition?  */
+         if ((! it->bidi_p || ! it->cmp_it.reversed_p)
+             && (it->cmp_it.to < it->cmp_it.nglyphs))
+           {
+             /* Not all the grapheme clusters were processed yet;
+                advance to the next cluster.  */
+             it->cmp_it.from = it->cmp_it.to;
+           }
+         else if ((it->bidi_p && it->cmp_it.reversed_p)
+                  && it->cmp_it.from > 0)
+           {
+             /* Likewise: advance to the next cluster, but going in
+                the reverse direction.  */
+             it->cmp_it.to = it->cmp_it.from;
            }
          else
            {
-             for (i = 0; i < it->cmp_it.nchars; i++)
-               bidi_move_to_visually_next (&it->bidi_it);
-             IT_STRING_BYTEPOS (*it) = it->bidi_it.bytepos;
-             IT_STRING_CHARPOS (*it) = it->bidi_it.charpos;
-             if (it->cmp_it.from > 0)
-               it->cmp_it.to = it->cmp_it.from;
-             else
+             /* This composition was fully processed; find the next
+                candidate place for checking for composed
+                characters.  */
+             /* Always limit string searches to the string length;
+                any padding spaces are not part of the string, and
+                there cannot be any compositions in that padding.  */
+             ptrdiff_t stop = SCHARS (it->string);
+
+             if (it->bidi_p && it->bidi_it.scan_dir < 0)
+               stop = -1;
+             else if (it->end_charpos < stop)
                {
-                 ptrdiff_t stop = it->end_charpos;
-                 if (it->bidi_it.scan_dir < 0)
-                   stop = -1;
-                 composition_compute_stop_pos (&it->cmp_it,
-                                               IT_STRING_CHARPOS (*it),
-                                               IT_STRING_BYTEPOS (*it), stop,
-                                               it->string);
+                 /* Cf. PRECISION in reseat_to_string: we might be
+                    limited in how many of the string characters we
+                    need to deliver.  */
+                 stop = it->end_charpos;
                }
+             composition_compute_stop_pos (&it->cmp_it,
+                                           IT_STRING_CHARPOS (*it),
+                                           IT_STRING_BYTEPOS (*it), stop,
+                                           it->string);
            }
        }
       else
@@ -7603,12 +7484,17 @@ set_iterator_to_next (struct it *it, int reseat_p)
              bidi_move_to_visually_next (&it->bidi_it);
              IT_STRING_BYTEPOS (*it) = it->bidi_it.bytepos;
              IT_STRING_CHARPOS (*it) = it->bidi_it.charpos;
+             /* If the scan direction changes, we may need to update
+                the place where to check for composed characters.  */
              if (prev_scan_dir != it->bidi_it.scan_dir)
                {
-                 ptrdiff_t stop = it->end_charpos;
+                 ptrdiff_t stop = SCHARS (it->string);
 
                  if (it->bidi_it.scan_dir < 0)
                    stop = -1;
+                 else if (it->end_charpos < stop)
+                   stop = it->end_charpos;
+
                  composition_compute_stop_pos (&it->cmp_it,
                                                IT_STRING_CHARPOS (*it),
                                                IT_STRING_BYTEPOS (*it), stop,
@@ -8038,7 +7924,7 @@ next_element_from_c_string (struct it *it)
   eassert (!it->bidi_p || it->s == it->bidi_it.string.s);
   it->what = IT_CHARACTER;
   BYTEPOS (it->position) = CHARPOS (it->position) = 0;
-  it->object = Qnil;
+  it->object = make_number (0);
 
   /* With bidi reordering, the character to display might not be the
      character at IT_CHARPOS.  BIDI_IT.FIRST_ELT non-zero means that
@@ -8329,6 +8215,10 @@ next_element_from_buffer (struct it *it)
       unsigned char *p;
       ptrdiff_t stop;
 
+      /* We moved to the next buffer position, so any info about
+        previously seen overlays is no longer valid.  */
+      it->ignore_overlay_strings_at_pos_p = 0;
+
       /* Maybe run the redisplay end trigger hook.  Performance note:
         This doesn't seem to cost measurable time.  */
       if (it->redisplay_end_trigger_charpos
@@ -8396,22 +8286,18 @@ next_element_from_buffer (struct it *it)
 static void
 run_redisplay_end_trigger_hook (struct it *it)
 {
-  Lisp_Object args[3];
-
   /* IT->glyph_row should be non-null, i.e. we should be actually
      displaying something, or otherwise we should not run the hook.  */
   eassert (it->glyph_row);
 
-  /* Set up hook arguments.  */
-  args[0] = Qredisplay_end_trigger_functions;
-  args[1] = it->window;
-  XSETINT (args[2], it->redisplay_end_trigger_charpos);
+  ptrdiff_t charpos = it->redisplay_end_trigger_charpos;
   it->redisplay_end_trigger_charpos = 0;
 
   /* Since we are *trying* to run these functions, don't try to run
      them again, even if they get an error.  */
   wset_redisplay_end_trigger (it->w, Qnil);
-  Frun_hook_with_args (3, args);
+  CALLN (Frun_hook_with_args, Qredisplay_end_trigger_functions, it->window,
+        make_number (charpos));
 
   /* Notice if it changed the face of the character we are on.  */
   handle_face_prop (it);
@@ -8782,12 +8668,7 @@ move_it_in_display_line_to (struct it *it,
                         doesn't fit on the line, e.g. a wide image.  */
                      it->hpos == 0
                      || (new_x == it->last_visible_x
-                         && FRAME_WINDOW_P (it->f)
-                         /* When word-wrap is ON and we have a valid
-                            wrap point, we don't allow the last glyph
-                            to "just barely fit" on the line.  */
-                         && (it->line_wrap != WORD_WRAP
-                             || wrap_it.sp < 0)))
+                         && FRAME_WINDOW_P (it->f)))
                    {
                      ++it->hpos;
                      it->current_x = new_x;
@@ -8854,7 +8735,8 @@ move_it_in_display_line_to (struct it *it,
                                }
                              if (ITERATOR_AT_END_OF_LINE_P (it)
                                  && (it->line_wrap != WORD_WRAP
-                                     || wrap_it.sp < 0))
+                                     || wrap_it.sp < 0
+                                     || IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)))
                                {
                                  result = MOVE_NEWLINE_OR_CR;
                                  break;
@@ -9381,6 +9263,7 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int 
to_x, int to_y, int to_vpos
       && it->current_x == it->last_visible_x - 1
       && it->c != '\n'
       && it->c != '\t'
+      && it->w->window_end_valid
       && it->vpos < it->w->window_end_vpos)
     {
       it->continuation_lines_width += it->current_x;
@@ -9914,7 +9797,6 @@ include the height of both, if present, in the return 
value.  */)
 void
 add_to_log (const char *format, Lisp_Object arg1, Lisp_Object arg2)
 {
-  Lisp_Object args[3];
   Lisp_Object msg, fmt;
   char *buffer;
   ptrdiff_t len;
@@ -9924,10 +9806,8 @@ add_to_log (const char *format, Lisp_Object arg1, 
Lisp_Object arg2)
   fmt = msg = Qnil;
   GCPRO4 (fmt, msg, arg1, arg2);
 
-  args[0] = fmt = build_string (format);
-  args[1] = arg1;
-  args[2] = arg2;
-  msg = Fformat (3, args);
+  fmt = build_string (format);
+  msg = CALLN (Fformat, fmt, arg1, arg2);
 
   len = SBYTES (msg) + 1;
   buffer = SAFE_ALLOCA (len);
@@ -10267,9 +10147,9 @@ message3_nolog (Lisp_Object m)
       else
        clear_message (true, true);
 
-      do_pending_window_change (0);
-      echo_area_display (1);
-      do_pending_window_change (0);
+      do_pending_window_change (false);
+      echo_area_display (true);
+      do_pending_window_change (false);
       if (FRAME_TERMINAL (f)->frame_up_to_date_hook)
        (*FRAME_TERMINAL (f)->frame_up_to_date_hook) (f);
     }
@@ -10342,15 +10222,13 @@ message_with_string (const char *m, Lisp_Object 
string, int log)
         initialized yet, just toss it.  */
       if (f->glyphs_initialized_p)
        {
-         Lisp_Object args[2], msg;
          struct gcpro gcpro1, gcpro2;
 
-         args[0] = build_string (m);
-         args[1] = msg = string;
-         GCPRO2 (args[0], msg);
-         gcpro1.nvars = 2;
+         Lisp_Object fmt = build_string (m);
+         Lisp_Object msg = string;
+         GCPRO2 (fmt, msg);
 
-         msg = Fformat (2, args);
+         msg = CALLN (Fformat, fmt, msg);
 
          if (log)
            message3 (msg);
@@ -11240,13 +11118,13 @@ clear_garbaged_frames (void)
    is non-zero update selected_frame.  Value is non-zero if the
    mini-windows height has been changed.  */
 
-static int
-echo_area_display (int update_frame_p)
+static bool
+echo_area_display (bool update_frame_p)
 {
   Lisp_Object mini_window;
   struct window *w;
   struct frame *f;
-  int window_height_changed_p = 0;
+  bool window_height_changed_p = false;
   struct frame *sf = SELECTED_FRAME ();
 
   mini_window = FRAME_MINIBUF_WINDOW (sf);
@@ -11309,11 +11187,11 @@ echo_area_display (int update_frame_p)
              /* Window configuration is the same as before.
                 Can do with a display update of the echo area,
                 unless we displayed some mode lines.  */
-             update_single_window (w, 1);
+             update_single_window (w);
              flush_frame (f);
            }
          else
-           update_frame (f, 1, 1);
+           update_frame (f, true, true);
 
          /* If cursor is in the echo area, make sure that the next
             redisplay displays the minibuffer, so that the cursor will
@@ -12456,6 +12334,7 @@ redisplay_tool_bar (struct frame *f)
       if (new_height != WINDOW_PIXEL_HEIGHT (w))
        {
          x_change_tool_bar_height (f, new_height);
+         frame_default_tool_bar_height = new_height;
          /* Always do that now.  */
          clear_glyph_matrix (w->desired_matrix);
          f->fonts_changed = 1;
@@ -12550,6 +12429,7 @@ redisplay_tool_bar (struct frame *f)
          if (change_height_p)
            {
              x_change_tool_bar_height (f, new_height);
+             frame_default_tool_bar_height = new_height;
              clear_glyph_matrix (w->desired_matrix);
              f->n_tool_bar_rows = nrows;
              f->fonts_changed = 1;
@@ -13427,7 +13307,7 @@ redisplay_internal (void)
   struct window *w = XWINDOW (selected_window);
   struct window *sw;
   struct frame *fr;
-  int pending;
+  bool pending;
   bool must_finish = 0, match_p;
   struct text_pos tlbufpos, tlendpos;
   int number_of_visible_frames;
@@ -13478,7 +13358,7 @@ redisplay_internal (void)
   specbind (Qinhibit_free_realized_faces, Qnil);
 
   /* Record this function, so it appears on the profiler's backtraces.  */
-  record_in_backtrace (Qredisplay_internal, &Qnil, 0);
+  record_in_backtrace (Qredisplay_internal, 0, 0);
 
   FOR_EACH_FRAME (tail, frame)
     XFRAME (frame)->already_hscrolled_p = 0;
@@ -13487,16 +13367,16 @@ redisplay_internal (void)
   /* Remember the currently selected window.  */
   sw = w;
 
-  pending = 0;
+  pending = false;
   last_escape_glyph_frame = NULL;
   last_escape_glyph_face_id = (1 << FACE_ID_BITS);
   last_glyphless_glyph_frame = NULL;
   last_glyphless_glyph_face_id = (1 << FACE_ID_BITS);
 
-  /* If face_change_count is non-zero, init_iterator will free all
-     realized faces, which includes the faces referenced from current
-     matrices.  So, we can't reuse current matrices in this case.  */
-  if (face_change_count)
+  /* If face_change, init_iterator will free all realized faces, which
+     includes the faces referenced from current matrices.  So, we
+     can't reuse current matrices in this case.  */
+  if (face_change)
     windows_or_buffers_changed = 47;
 
   if ((FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf))
@@ -13539,7 +13419,7 @@ redisplay_internal (void)
     }
 
   /* Notice any pending interrupt request to change frame size.  */
-  do_pending_window_change (1);
+  do_pending_window_change (true);
 
   /* do_pending_window_change could change the selected_window due to
      frame resizing which makes the selected window too small.  */
@@ -13586,7 +13466,7 @@ redisplay_internal (void)
             echo-area doesn't show through.  */
          && !MINI_WINDOW_P (XWINDOW (selected_window))))
     {
-      int window_height_changed_p = echo_area_display (0);
+      int window_height_changed_p = echo_area_display (false);
 
       if (message_cleared_p)
        update_miniwindow_p = true;
@@ -13794,7 +13674,7 @@ redisplay_internal (void)
        {
          if (!must_finish)
            {
-             do_pending_window_change (1);
+             do_pending_window_change (true);
              /* If selected_window changed, redisplay again.  */
              if (WINDOWP (selected_window)
                  && (w = XWINDOW (selected_window)) != sw)
@@ -13879,6 +13759,17 @@ redisplay_internal (void)
 
        retry_frame:
 
+#if defined (HAVE_WINDOW_SYSTEM) && !defined (USE_GTK) && !defined (HAVE_NS)
+         /* Redisplay internal tool bar if this is the first time so we
+            can adjust the frame height right now, if necessary.  */
+         if (!f->tool_bar_redisplayed_once)
+           {
+             if (redisplay_tool_bar (f))
+               adjust_frame_glyphs (f);
+             f->tool_bar_redisplayed_once = true;
+           }
+#endif
+
          if (FRAME_WINDOW_P (f) || FRAME_TERMCAP_P (f) || f == sf)
            {
              bool gcscrollbars
@@ -13911,14 +13802,14 @@ redisplay_internal (void)
                  if (f->fonts_changed)
                    {
                      adjust_frame_glyphs (f);
-                     f->fonts_changed = 0;
+                     f->fonts_changed = false;
                      goto retry_frame;
                    }
 
                  /* See if we have to hscroll.  */
                  if (!f->already_hscrolled_p)
                    {
-                     f->already_hscrolled_p = 1;
+                     f->already_hscrolled_p = true;
                      if (hscroll_windows (f->root_window))
                        goto retry_frame;
                    }
@@ -13930,9 +13821,9 @@ redisplay_internal (void)
                    unrequest_sigio ();
                  STOP_POLLING;
 
-                 pending |= update_frame (f, 0, 0);
-                 f->cursor_type_changed = 0;
-                 f->updated_p = 1;
+                 pending |= update_frame (f, false, false);
+                 f->cursor_type_changed = false;
+                 f->updated_p = true;
                }
            }
        }
@@ -13993,8 +13884,8 @@ redisplay_internal (void)
            goto retry;
 
          XWINDOW (selected_window)->must_be_updated_p = true;
-         pending = update_frame (sf, 0, 0);
-         sf->cursor_type_changed = 0;
+         pending = update_frame (sf, false, false);
+         sf->cursor_type_changed = false;
        }
 
       /* We may have called echo_area_display at the top of this
@@ -14008,8 +13899,8 @@ redisplay_internal (void)
       if (mini_frame != sf && FRAME_WINDOW_P (mini_frame))
        {
          XWINDOW (mini_window)->must_be_updated_p = true;
-         pending |= update_frame (mini_frame, 0, 0);
-         mini_frame->cursor_type_changed = 0;
+         pending |= update_frame (mini_frame, false, false);
+         mini_frame->cursor_type_changed = false;
          if (!pending && hscroll_windows (mini_window))
            goto retry;
        }
@@ -14086,7 +13977,7 @@ redisplay_internal (void)
     }
 
   /* Change frame size now if a change is pending.  */
-  do_pending_window_change (1);
+  do_pending_window_change (true);
 
   /* If we just did a pending size change, or have additional
      visible frames, or selected_window changed, redisplay again.  */
@@ -14102,7 +13993,7 @@ redisplay_internal (void)
 
   if (clear_face_cache_count > CLEAR_FACE_CACHE_COUNT)
     {
-      clear_face_cache (0);
+      clear_face_cache (false);
       clear_face_cache_count = 0;
     }
 
@@ -14146,9 +14037,9 @@ redisplay_preserve_echo_area (int from_where)
     {
       /* We have a previously displayed message, but no current
         message.  Redisplay the previous message.  */
-      display_last_displayed_message_p = 1;
+      display_last_displayed_message_p = true;
       redisplay_internal ();
-      display_last_displayed_message_p = 0;
+      display_last_displayed_message_p = false;
     }
   else
     redisplay_internal ();
@@ -14385,14 +14276,14 @@ set_cursor_from_row (struct window *w, struct 
glyph_row *row,
       if (!row->reversed_p)
        {
          while (glyph < end
-                && INTEGERP (glyph->object)
+                && NILP (glyph->object)
                 && glyph->charpos < 0)
            {
              x += glyph->pixel_width;
              ++glyph;
            }
          while (end > glyph
-                && INTEGERP ((end - 1)->object)
+                && NILP ((end - 1)->object)
                 /* CHARPOS is zero for blanks and stretch glyphs
                    inserted by extend_face_to_end_of_line.  */
                 && (end - 1)->charpos <= 0)
@@ -14410,20 +14301,20 @@ set_cursor_from_row (struct window *w, struct 
glyph_row *row,
          glyph += row->used[TEXT_AREA] - 1;
 
          while (glyph > end + 1
-                && INTEGERP (glyph->object)
+                && NILP (glyph->object)
                 && glyph->charpos < 0)
            {
              --glyph;
              x -= glyph->pixel_width;
            }
-         if (INTEGERP (glyph->object) && glyph->charpos < 0)
+         if (NILP (glyph->object) && glyph->charpos < 0)
            --glyph;
          /* By default, in reversed rows we put the cursor on the
             rightmost (first in the reading order) glyph.  */
          for (g = end + 1; g < glyph; g++)
            x += g->pixel_width;
          while (end < glyph
-                && INTEGERP ((end + 1)->object)
+                && NILP ((end + 1)->object)
                 && (end + 1)->charpos <= 0)
            ++end;
          glyph_before = glyph + 1;
@@ -14454,7 +14345,7 @@ set_cursor_from_row (struct window *w, struct glyph_row 
*row,
     while (/* not marched to end of glyph row */
           glyph < end
           /* glyph was not inserted by redisplay for internal purposes */
-          && !INTEGERP (glyph->object))
+          && !NILP (glyph->object))
       {
        if (BUFFERP (glyph->object))
          {
@@ -14542,7 +14433,7 @@ set_cursor_from_row (struct window *w, struct glyph_row 
*row,
        ++glyph;
       }
   else if (glyph > end)        /* row is reversed */
-    while (!INTEGERP (glyph->object))
+    while (!NILP (glyph->object))
       {
        if (BUFFERP (glyph->object))
          {
@@ -14619,16 +14510,16 @@ set_cursor_from_row (struct window *w, struct 
glyph_row *row,
        && BUFFERP (glyph->object) && glyph->charpos == pt_old)
       && !(bpos_max <= pt_old && pt_old <= bpos_covered))
     {
-      /* An empty line has a single glyph whose OBJECT is zero and
+      /* An empty line has a single glyph whose OBJECT is nil and
         whose CHARPOS is the position of a newline on that line.
         Note that on a TTY, there are more glyphs after that, which
         were produced by extend_face_to_end_of_line, but their
         CHARPOS is zero or negative.  */
       int empty_line_p =
        (row->reversed_p ? glyph > glyphs_end : glyph < glyphs_end)
-       && INTEGERP (glyph->object) && glyph->charpos > 0
+       && NILP (glyph->object) && glyph->charpos > 0
        /* On a TTY, continued and truncated rows also have a glyph at
-          their end whose OBJECT is zero and whose CHARPOS is
+          their end whose OBJECT is nil and whose CHARPOS is
           positive (the continuation and truncation glyphs), but such
           rows are obviously not "empty".  */
        && !(row->continued_p || row->truncated_on_right_p);
@@ -14905,7 +14796,7 @@ set_cursor_from_row (struct window *w, struct glyph_row 
*row,
                          && string_from_text_prop)
                      /* this candidate is from newline and its
                         position is not an exact match */
-                     || (INTEGERP (glyph->object)
+                     || (NILP (glyph->object)
                          && glyph->charpos != pt_old)))))
        return 0;
       /* If this candidate gives an exact match, use that.  */
@@ -14914,7 +14805,7 @@ set_cursor_from_row (struct window *w, struct glyph_row 
*row,
               terminating newline of a line, and point is on that
               newline, it wins because it's an exact match.  */
            || (!row->continued_p
-               && INTEGERP (glyph->object)
+               && NILP (glyph->object)
                && glyph->charpos == 0
                && pt_old == MATRIX_ROW_END_CHARPOS (row) - 1))
          /* Otherwise, keep the candidate that comes from a row
@@ -15493,7 +15384,8 @@ try_cursor_movement (Lisp_Object window, struct 
text_pos startp, int *scroll_ste
   /* Likewise there was a check whether window_end_vpos is nil or larger
      than the window.  Now window_end_vpos is int and so never nil, but
      let's leave eassert to check whether it fits in the window.  */
-  eassert (w->window_end_vpos < w->current_matrix->nrows);
+  eassert (!w->window_end_valid
+          || w->window_end_vpos < w->current_matrix->nrows);
 
   /* Handle case where text has not changed, only point, and it has
      not moved off the frame.  */
@@ -15757,7 +15649,7 @@ try_cursor_movement (Lisp_Object window, struct 
text_pos startp, int *scroll_ste
 
                          exact_match_p =
                            (BUFFERP (g->object) && g->charpos == PT)
-                           || (INTEGERP (g->object)
+                           || (NILP (g->object)
                                && (g->charpos == PT
                                    || (g->charpos == 0 && endpos - 1 == PT)));
                        }
@@ -18233,6 +18125,21 @@ try_window_id (struct window *w)
   if (f->fonts_changed)
     return -1;
 
+  /* The redisplay iterations in display_line above could have
+     triggered font-lock, which could have done something that
+     invalidates IT->w window's end-point information, on which we
+     rely below.  E.g., one package, which will remain unnamed, used
+     to install a font-lock-fontify-region-function that called
+     bury-buffer, whose side effect is to switch the buffer displayed
+     by IT->w, and that predictably resets IT->w's window_end_valid
+     flag, which we already tested at the entry to this function.
+     Amply punish such packages/modes by giving up on this
+     optimization in those cases.  */
+  if (!w->window_end_valid)
+    {
+      clear_glyph_matrix (w->desired_matrix);
+      return -1;
+    }
 
   /* Compute differences in buffer positions, y-positions etc.  for
      lines reused at the bottom of the window.  Compute what we can
@@ -18611,7 +18518,7 @@ dump_glyph (struct glyph_row *row, struct glyph *glyph, 
int area)
                ? 'B'
                : (STRINGP (glyph->object)
                   ? 'S'
-                  : (INTEGERP (glyph->object)
+                  : (NILP (glyph->object)
                      ? '0'
                      : '-'))),
               glyph->pixel_width,
@@ -18634,7 +18541,7 @@ dump_glyph (struct glyph_row *row, struct glyph *glyph, 
int area)
                ? 'B'
                : (STRINGP (glyph->object)
                   ? 'S'
-                  : (INTEGERP (glyph->object)
+                  : (NILP (glyph->object)
                      ? '0'
                      : '-'))),
               glyph->pixel_width,
@@ -18655,7 +18562,7 @@ dump_glyph (struct glyph_row *row, struct glyph *glyph, 
int area)
                ? 'B'
                : (STRINGP (glyph->object)
                   ? 'S'
-                  : (INTEGERP (glyph->object)
+                  : (NILP (glyph->object)
                      ? '0'
                      : '-'))),
               glyph->pixel_width,
@@ -18676,7 +18583,7 @@ dump_glyph (struct glyph_row *row, struct glyph *glyph, 
int area)
                ? 'B'
                : (STRINGP (glyph->object)
                   ? 'S'
-                  : (INTEGERP (glyph->object)
+                  : (NILP (glyph->object)
                      ? '0'
                      : '-'))),
               glyph->pixel_width,
@@ -18776,7 +18683,7 @@ dump_glyph_row (struct glyph_row *row, int vpos, int 
glyphs)
              struct glyph *glyph = row->glyphs[area] + i;
              if (i == row->used[area] - 1
                  && area == TEXT_AREA
-                 && INTEGERP (glyph->object)
+                 && NILP (glyph->object)
                  && glyph->type == CHAR_GLYPH
                  && glyph->u.ch == ' ')
                {
@@ -18907,7 +18814,7 @@ usage: (trace-to-stderr STRING &rest OBJECTS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {
   Lisp_Object s = Fformat (nargs, args);
-  fprintf (stderr, "%s", SDATA (s));
+  fwrite (SDATA (s), 1, SBYTES (s), stderr);
   return Qnil;
 }
 
@@ -19006,7 +18913,7 @@ insert_left_trunc_glyphs (struct it *it)
   truncate_it.area = TEXT_AREA;
   truncate_it.glyph_row->used[TEXT_AREA] = 0;
   CHARPOS (truncate_it.position) = BYTEPOS (truncate_it.position) = -1;
-  truncate_it.object = make_number (0);
+  truncate_it.object = Qnil;
   produce_special_glyphs (&truncate_it, IT_TRUNCATION);
 
   /* Overwrite glyphs from IT with truncation glyphs.  */
@@ -19289,7 +19196,7 @@ append_space_for_newline (struct it *it, int 
default_face_p)
 
          it->what = IT_CHARACTER;
          memset (&it->position, 0, sizeof it->position);
-         it->object = make_number (0);
+         it->object = Qnil;
          it->c = it->char_to_display = ' ';
          it->len = 1;
 
@@ -19481,7 +19388,7 @@ extend_face_to_end_of_line (struct it *it)
              else
                it->face_id = face->id;
              it->start_of_box_run_p = 0;
-             append_stretch_glyph (it, make_number (0), stretch_width,
+             append_stretch_glyph (it, Qnil, stretch_width,
                                    it->ascent + it->descent, stretch_ascent);
              it->position = saved_pos;
              it->avoid_cursor_p = saved_avoid_cursor;
@@ -19511,7 +19418,7 @@ extend_face_to_end_of_line (struct it *it)
 
       it->what = IT_CHARACTER;
       memset (&it->position, 0, sizeof it->position);
-      it->object = make_number (0);
+      it->object = Qnil;
       it->c = it->char_to_display = ' ';
       it->len = 1;
 
@@ -19640,14 +19547,14 @@ highlight_trailing_whitespace (struct frame *f, 
struct glyph_row *row)
        {
          while (glyph >= start
                 && glyph->type == CHAR_GLYPH
-                && INTEGERP (glyph->object))
+                && NILP (glyph->object))
            --glyph;
        }
       else
        {
          while (glyph <= start
                 && glyph->type == CHAR_GLYPH
-                && INTEGERP (glyph->object))
+                && NILP (glyph->object))
            ++glyph;
        }
 
@@ -19661,7 +19568,7 @@ highlight_trailing_whitespace (struct frame *f, struct 
glyph_row *row)
                  && glyph->u.ch == ' '))
          && trailing_whitespace_p (glyph->charpos))
        {
-         int face_id = lookup_named_face (f, Qtrailing_whitespace, 0);
+         int face_id = lookup_named_face (f, Qtrailing_whitespace, false);
          if (face_id < 0)
            return;
 
@@ -20010,10 +19917,9 @@ find_row_edges (struct it *it, struct glyph_row *row,
            {
              start = r1->glyphs[TEXT_AREA];
              end = start + r1->used[TEXT_AREA];
-             /* Glyphs inserted by redisplay have an integer (zero)
-                as their object.  */
+             /* Glyphs inserted by redisplay have nil as their object.  */
              while (end > start
-                    && INTEGERP ((end - 1)->object)
+                    && NILP ((end - 1)->object)
                     && (end - 1)->charpos <= 0)
                --end;
              if (end > start)
@@ -20034,7 +19940,7 @@ find_row_edges (struct it *it, struct glyph_row *row,
              end = r1->glyphs[TEXT_AREA] - 1;
              start = end + r1->used[TEXT_AREA];
              while (end < start
-                    && INTEGERP ((end + 1)->object)
+                    && NILP ((end + 1)->object)
                     && (end + 1)->charpos <= 0)
                ++end;
              if (end < start)
@@ -20426,7 +20332,8 @@ display_line (struct it *it)
                        {
                          /* If line-wrap is on, check if a previous
                             wrap point was found.  */
-                         if (wrap_row_used > 0
+                         if (!IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)
+                             && wrap_row_used > 0
                              /* Even if there is a previous wrap
                                 point, continue the line here as
                                 usual, if (i) the previous character
@@ -20456,6 +20363,18 @@ display_line (struct it *it)
                                  row->continued_p = 0;
                                  row->exact_window_width_line_p = 1;
                                }
+                             /* If line-wrap is on, check if a
+                                previous wrap point was found.  */
+                             else if (wrap_row_used > 0
+                                      /* Even if there is a previous wrap
+                                         point, continue the line here as
+                                         usual, if (i) the previous character
+                                         was a space or tab AND (ii) the
+                                         current character is not.  */
+                                      && (!may_wrap
+                                          || IT_DISPLAYING_WHITESPACE (it)))
+                               goto back_to_wrap;
+
                            }
                        }
                      else if (it->bidi_p)
@@ -21020,6 +20939,143 @@ See also `bidi-paragraph-direction'.  */)
     }
 }
 
+DEFUN ("bidi-find-overridden-directionality",
+       Fbidi_find_overridden_directionality,
+       Sbidi_find_overridden_directionality, 2, 3, 0,
+       doc: /* Return position between FROM and TO where directionality was 
overridden.
+
+This function returns the first character position in the specified
+region of OBJECT where there is a character whose `bidi-class' property
+is `L', but which was forced to display as `R' by a directional
+override, and likewise with characters whose `bidi-class' is `R'
+or `AL' that were forced to display as `L'.
+
+If no such character is found, the function returns nil.
+
+OBJECT is a Lisp string or buffer to search for overridden
+directionality, and defaults to the current buffer if nil or omitted.
+OBJECT can also be a window, in which case the function will search
+the buffer displayed in that window.  Passing the window instead of
+a buffer is preferable when the buffer is displayed in some window,
+because this function will then be able to correctly account for
+window-specific overlays, which can affect the results.
+
+Strong directional characters `L', `R', and `AL' can have their
+intrinsic directionality overridden by directional override
+control characters RLO \(u+202e) and LRO \(u+202d).  See the
+function `get-char-code-property' for a way to inquire about
+the `bidi-class' property of a character.  */)
+  (Lisp_Object from, Lisp_Object to, Lisp_Object object)
+{
+  struct buffer *buf = current_buffer;
+  struct buffer *old = buf;
+  struct window *w = NULL;
+  bool frame_window_p = FRAME_WINDOW_P (SELECTED_FRAME ());
+  struct bidi_it itb;
+  ptrdiff_t from_pos, to_pos, from_bpos;
+  void *itb_data;
+
+  if (!NILP (object))
+    {
+      if (BUFFERP (object))
+       buf = XBUFFER (object);
+      else if (WINDOWP (object))
+       {
+         w = decode_live_window (object);
+         buf = XBUFFER (w->contents);
+         frame_window_p = FRAME_WINDOW_P (XFRAME (w->frame));
+       }
+      else
+       CHECK_STRING (object);
+    }
+
+  if (STRINGP (object))
+    {
+      /* Characters in unibyte strings are always treated by bidi.c as
+        strong LTR.  */
+      if (!STRING_MULTIBYTE (object)
+         /* When we are loading loadup.el, the character property
+            tables needed for bidi iteration are not yet
+            available.  */
+         || !NILP (Vpurify_flag))
+       return Qnil;
+
+      validate_subarray (object, from, to, SCHARS (object), &from_pos, 
&to_pos);
+      if (from_pos >= SCHARS (object))
+       return Qnil;
+
+      /* Set up the bidi iterator.  */
+      itb_data = bidi_shelve_cache ();
+      itb.paragraph_dir = NEUTRAL_DIR;
+      itb.string.lstring = object;
+      itb.string.s = NULL;
+      itb.string.schars = SCHARS (object);
+      itb.string.bufpos = 0;
+      itb.string.from_disp_str = 0;
+      itb.string.unibyte = 0;
+      itb.w = w;
+      bidi_init_it (0, 0, frame_window_p, &itb);
+    }
+  else
+    {
+      /* Nothing this fancy can happen in unibyte buffers, or in a
+        buffer that disabled reordering, or if FROM is at EOB.  */
+      if (NILP (BVAR (buf, bidi_display_reordering))
+         || NILP (BVAR (buf, enable_multibyte_characters))
+         /* When we are loading loadup.el, the character property
+            tables needed for bidi iteration are not yet
+            available.  */
+         || !NILP (Vpurify_flag))
+       return Qnil;
+
+      set_buffer_temp (buf);
+      validate_region (&from, &to);
+      from_pos = XINT (from);
+      to_pos = XINT (to);
+      if (from_pos >= ZV)
+       return Qnil;
+
+      /* Set up the bidi iterator.  */
+      itb_data = bidi_shelve_cache ();
+      from_bpos = CHAR_TO_BYTE (from_pos);
+      if (from_pos == BEGV)
+       {
+         itb.charpos = BEGV;
+         itb.bytepos = BEGV_BYTE;
+       }
+      else if (FETCH_CHAR (from_bpos - 1) == '\n')
+       {
+         itb.charpos = from_pos;
+         itb.bytepos = from_bpos;
+       }
+      else
+       itb.charpos = find_newline_no_quit (from_pos, CHAR_TO_BYTE (from_pos),
+                                           -1, &itb.bytepos);
+      itb.paragraph_dir = NEUTRAL_DIR;
+      itb.string.s = NULL;
+      itb.string.lstring = Qnil;
+      itb.string.bufpos = 0;
+      itb.string.from_disp_str = 0;
+      itb.string.unibyte = 0;
+      itb.w = w;
+      bidi_init_it (itb.charpos, itb.bytepos, frame_window_p, &itb);
+    }
+
+  ptrdiff_t found;
+  do {
+    /* For the purposes of this function, the actual base direction of
+       the paragraph doesn't matter, so just set it to L2R.  */
+    bidi_paragraph_init (L2R, &itb, 0);
+    while ((found = bidi_find_first_overridden (&itb)) < from_pos)
+      ;
+  } while (found == ZV && itb.ch == '\n' && itb.charpos < to_pos);
+
+  bidi_unshelve_cache (itb_data, 0);
+  set_buffer_temp (old);
+
+  return (from_pos <= found && found < to_pos) ? make_number (found) : Qnil;
+}
+
 DEFUN ("move-point-visually", Fmove_point_visually,
        Smove_point_visually, 1, 1, 0,
        doc: /* Move point in the visual order in the specified DIRECTION.
@@ -21037,7 +21093,7 @@ Value is the new character position of point.  */)
 
 #define ROW_GLYPH_NEWLINE_P(ROW,GLYPH)         \
   (!(ROW)->continued_p                         \
-   && INTEGERP ((GLYPH)->object)               \
+   && NILP ((GLYPH)->object)                   \
    && (GLYPH)->type == CHAR_GLYPH              \
    && (GLYPH)->u.ch == ' '                     \
    && (GLYPH)->charpos >= 0                    \
@@ -21079,7 +21135,7 @@ Value is the new character position of point.  */)
              w->cursor.vpos = -1;
              return make_number (PT);
            }
-         else if (!INTEGERP (g->object) && !EQ (g->object, gpt->object))
+         else if (!NILP (g->object) && !EQ (g->object, gpt->object))
            {
              ptrdiff_t new_pos;
 
@@ -21116,7 +21172,7 @@ Value is the new character position of point.  */)
              return make_number (PT);
            }
        }
-      if (g == e || INTEGERP (g->object))
+      if (g == e || NILP (g->object))
        {
          if (row->truncated_on_left_p || row->truncated_on_right_p)
            goto simulate_display;
@@ -21149,7 +21205,7 @@ Value is the new character position of point.  */)
                         EOB also has one glyph, but its charpos is -1.  */
                      || (row->ends_at_zv_p
                          && !row->reversed_p
-                         && INTEGERP (g->object)
+                         && NILP (g->object)
                          && g->type == CHAR_GLYPH
                          && g->u.ch == ' '))
                    {
@@ -21187,7 +21243,7 @@ Value is the new character position of point.  */)
                      || g->type == STRETCH_GLYPH
                      || (row->ends_at_zv_p
                          && row->reversed_p
-                         && INTEGERP (g->object)
+                         && NILP (g->object)
                          && g->type == CHAR_GLYPH
                          && g->u.ch == ' '))
                    {
@@ -21551,13 +21607,13 @@ Emacs UBA implementation, in particular with the test 
suite.  */)
          /* Skip over glyphs at the start of the row that was
             generated by redisplay for its own needs.  */
          while (g < e
-                && INTEGERP (g->object)
+                && NILP (g->object)
                 && g->charpos < 0)
            g++;
          g1 = g;
 
          /* Count the "interesting" glyphs in this row.  */
-         for (nglyphs = 0; g < e && !INTEGERP (g->object); g++)
+         for (nglyphs = 0; g < e && !NILP (g->object); g++)
            nglyphs++;
 
          /* Create and fill the array.  */
@@ -21570,11 +21626,11 @@ Emacs UBA implementation, in particular with the test 
suite.  */)
          g = row->glyphs[TEXT_AREA] + row->used[TEXT_AREA] - 1;
          e = row->glyphs[TEXT_AREA] - 1;
          while (g > e
-                && INTEGERP (g->object)
+                && NILP (g->object)
                 && g->charpos < 0)
            g--;
          g1 = g;
-         for (nglyphs = 0; g > e && !INTEGERP (g->object); g--)
+         for (nglyphs = 0; g > e && !NILP (g->object); g--)
            nglyphs++;
          levels = make_uninit_vector (nglyphs);
          for (i = 0; g1 > g; i++, g1--)
@@ -23522,7 +23578,7 @@ display_string (const char *string, Lisp_Object 
lisp_string, Lisp_Object face_st
 
       it->face_id
        = face_at_string_position (it->w, face_string, face_string_pos,
-                                  0, &endptr, it->base_face_id, 0);
+                                  0, &endptr, it->base_face_id, false);
       face = FACE_FROM_ID (it->f, it->face_id);
       it->face_box_p = face->box != FACE_NO_BOX;
     }
@@ -25555,6 +25611,15 @@ produce_image_glyph (struct it *it)
       enum glyph_row_area area = it->area;
 
       glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
+      if (it->glyph_row->reversed_p)
+       {
+         struct glyph *g;
+
+         /* Make room for the new glyph.  */
+         for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--)
+           g[1] = *g;
+         glyph = it->glyph_row->glyphs[it->area];
+       }
       if (glyph < it->glyph_row->glyphs[area + 1])
        {
          glyph->charpos = CHARPOS (it->position);
@@ -25899,7 +25964,7 @@ produce_special_glyphs (struct it *it, enum 
display_element_type what)
   GLYPH glyph;
 
   temp_it = *it;
-  temp_it.object = make_number (0);
+  temp_it.object = Qnil;
   memset (&temp_it.current, 0, sizeof temp_it.current);
 
   if (what == IT_CONTINUATION)
@@ -25962,7 +26027,7 @@ produce_special_glyphs (struct it *it, enum 
display_element_type what)
            (((temp_it.ascent + temp_it.descent)
              * FONT_BASE (font)) / FONT_HEIGHT (font));
 
-         append_stretch_glyph (&temp_it, make_number (0), stretch_width,
+         append_stretch_glyph (&temp_it, Qnil, stretch_width,
                                temp_it.ascent + temp_it.descent,
                                stretch_ascent);
        }
@@ -26028,7 +26093,7 @@ calc_line_height_property (struct it *it, Lisp_Object 
val, struct font *font,
       int face_id;
       struct face *face;
 
-      face_id = lookup_named_face (it->f, face_name, 0);
+      face_id = lookup_named_face (it->f, face_name, false);
       if (face_id < 0)
        return make_number (-1);
 
@@ -28137,7 +28202,7 @@ rows_from_pos_range (struct window *w,
 
          while (g < e)
            {
-             if (((BUFFERP (g->object) || INTEGERP (g->object))
+             if (((BUFFERP (g->object) || NILP (g->object))
                   && start_charpos <= g->charpos && g->charpos < end_charpos)
                  /* A glyph that comes from DISP_STRING is by
                     definition to be highlighted.  */
@@ -28192,7 +28257,7 @@ rows_from_pos_range (struct window *w,
 
          while (g < e)
            {
-             if (((BUFFERP (g->object) || INTEGERP (g->object))
+             if (((BUFFERP (g->object) || NILP (g->object))
                   && ((start_charpos <= g->charpos && g->charpos < end_charpos)
                       /* If the buffer position of the first glyph in
                          the row is equal to END_CHARPOS, it means
@@ -28274,7 +28339,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
        {
          struct glyph *beg = prev->glyphs[TEXT_AREA];
          glyph = beg + prev->used[TEXT_AREA];
-         while (--glyph >= beg && INTEGERP (glyph->object));
+         while (--glyph >= beg && NILP (glyph->object));
          if (glyph < beg
              || !(EQ (glyph->object, before_string)
                   || EQ (glyph->object, disp_string)))
@@ -28338,7 +28403,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
       /* Skip truncation glyphs at the start of the glyph row.  */
       if (MATRIX_ROW_DISPLAYS_TEXT_P (r1))
        for (; glyph < end
-              && INTEGERP (glyph->object)
+              && NILP (glyph->object)
               && glyph->charpos < 0;
             ++glyph)
          x += glyph->pixel_width;
@@ -28347,7 +28412,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
         or DISP_STRING, and the first glyph from buffer whose
         position is between START_CHARPOS and END_CHARPOS.  */
       for (; glyph < end
-            && !INTEGERP (glyph->object)
+            && !NILP (glyph->object)
             && !EQ (glyph->object, disp_string)
             && !(BUFFERP (glyph->object)
                  && (glyph->charpos >= start_charpos
@@ -28389,7 +28454,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
       /* Skip truncation glyphs at the start of the glyph row.  */
       if (MATRIX_ROW_DISPLAYS_TEXT_P (r1))
        for (; glyph > end
-              && INTEGERP (glyph->object)
+              && NILP (glyph->object)
               && glyph->charpos < 0;
             --glyph)
          ;
@@ -28398,7 +28463,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
         or DISP_STRING, and the first glyph from buffer whose
         position is between START_CHARPOS and END_CHARPOS.  */
       for (; glyph > end
-            && !INTEGERP (glyph->object)
+            && !NILP (glyph->object)
             && !EQ (glyph->object, disp_string)
             && !(BUFFERP (glyph->object)
                  && (glyph->charpos >= start_charpos
@@ -28455,7 +28520,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
         row, and also blanks and stretch glyphs inserted by
         extend_face_to_end_of_line.  */
       while (end > glyph
-            && INTEGERP ((end - 1)->object))
+            && NILP ((end - 1)->object))
        --end;
       /* Scan the rest of the glyph row from the end, looking for the
         first glyph that comes from BEFORE_STRING, AFTER_STRING, or
@@ -28463,7 +28528,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
         and END_CHARPOS */
       for (--end;
             end > glyph
-            && !INTEGERP (end->object)
+            && !NILP (end->object)
             && !EQ (end->object, disp_string)
             && !(BUFFERP (end->object)
                  && (end->charpos >= start_charpos
@@ -28501,7 +28566,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
       x = r2->x;
       end++;
       while (end < glyph
-            && INTEGERP (end->object))
+            && NILP (end->object))
        {
          x += end->pixel_width;
          ++end;
@@ -28512,7 +28577,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
         and END_CHARPOS */
       for ( ;
             end < glyph
-            && !INTEGERP (end->object)
+            && !NILP (end->object)
             && !EQ (end->object, disp_string)
             && !(BUFFERP (end->object)
                  && (end->charpos >= start_charpos
@@ -29244,7 +29309,7 @@ note_mode_line_or_margin_highlight (Lisp_Object window, 
int x, int y,
                                                                charpos,
                                                                0, &ignore,
                                                                glyph->face_id,
-                                                               1);
+                                                               true);
          show_mouse_face (hlinfo, DRAW_MOUSE_FACE);
 
          if (NILP (pointer))
@@ -29444,12 +29509,12 @@ note_mouse_highlight (struct frame *f, int x, int y)
       if (glyph == NULL
          || area != TEXT_AREA
          || !MATRIX_ROW_DISPLAYS_TEXT_P (MATRIX_ROW (w->current_matrix, vpos))
-         /* Glyph's OBJECT is an integer for glyphs inserted by the
+         /* Glyph's OBJECT is nil for glyphs inserted by the
             display engine for its internal purposes, like truncation
             and continuation glyphs and blanks beyond the end of
             line's text on text terminals.  If we are over such a
             glyph, we are not over any text.  */
-         || INTEGERP (glyph->object)
+         || NILP (glyph->object)
          /* R2L rows have a stretch glyph at their front, which
             stands for no text, whereas L2R rows have no glyphs at
             all beyond the end of text.  Treat such stretch glyphs
@@ -29572,7 +29637,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
              hlinfo->mouse_face_window = window;
              hlinfo->mouse_face_face_id
                = face_at_string_position (w, object, pos, 0, &ignore,
-                                          glyph->face_id, 1);
+                                          glyph->face_id, true);
              show_mouse_face (hlinfo, DRAW_MOUSE_FACE);
              cursor = No_Cursor;
            }
@@ -30421,7 +30486,9 @@ syms_of_xdisp (void)
   Vmessage_stack = Qnil;
   staticpro (&Vmessage_stack);
 
+  /* Non-nil means don't actually do any redisplay.  */
   DEFSYM (Qinhibit_redisplay, "inhibit-redisplay");
+
   DEFSYM (Qredisplay_internal, "redisplay_internal (C function)");
 
   message_dolog_marker1 = Fmake_marker ();
@@ -30449,6 +30516,7 @@ syms_of_xdisp (void)
   defsubr (&Scurrent_bidi_paragraph_direction);
   defsubr (&Swindow_text_pixel_size);
   defsubr (&Smove_point_visually);
+  defsubr (&Sbidi_find_overridden_directionality);
 
   DEFSYM (Qmenu_bar_update_hook, "menu-bar-update-hook");
   DEFSYM (Qoverriding_terminal_local_map, "overriding-terminal-local-map");
@@ -30459,6 +30527,8 @@ syms_of_xdisp (void)
   DEFSYM (Qinhibit_point_motion_hooks, "inhibit-point-motion-hooks");
   DEFSYM (Qeval, "eval");
   DEFSYM (QCdata, ":data");
+
+  /* Names of text properties relevant for redisplay.  */
   DEFSYM (Qdisplay, "display");
   DEFSYM (Qspace_width, "space-width");
   DEFSYM (Qraise, "raise");
@@ -30478,40 +30548,69 @@ syms_of_xdisp (void)
   DEFSYM (QCfile, ":file");
   DEFSYM (Qfontified, "fontified");
   DEFSYM (Qfontification_functions, "fontification-functions");
+
+  /* Name of the face used to highlight trailing whitespace.  */
   DEFSYM (Qtrailing_whitespace, "trailing-whitespace");
+
+  /* Name and number of the face used to highlight escape glyphs.  */
   DEFSYM (Qescape_glyph, "escape-glyph");
+
+  /* Name and number of the face used to highlight non-breaking spaces.  */
   DEFSYM (Qnobreak_space, "nobreak-space");
+
+  /* The symbol 'image' which is the car of the lists used to represent
+     images in Lisp.  Also a tool bar style.  */
   DEFSYM (Qimage, "image");
+
+  /* Tool bar styles.  */
   DEFSYM (Qtext, "text");
   DEFSYM (Qboth, "both");
   DEFSYM (Qboth_horiz, "both-horiz");
   DEFSYM (Qtext_image_horiz, "text-image-horiz");
+
+  /* The image map types.  */
   DEFSYM (QCmap, ":map");
   DEFSYM (QCpointer, ":pointer");
   DEFSYM (Qrect, "rect");
   DEFSYM (Qcircle, "circle");
   DEFSYM (Qpoly, "poly");
+
+  /* The symbol `inhibit-menubar-update' and its DEFVAR_BOOL variable.  */
+  DEFSYM (Qinhibit_menubar_update, "inhibit-menubar-update");
   DEFSYM (Qmessage_truncate_lines, "message-truncate-lines");
+
   DEFSYM (Qgrow_only, "grow-only");
-  DEFSYM (Qinhibit_menubar_update, "inhibit-menubar-update");
   DEFSYM (Qinhibit_eval_during_redisplay, "inhibit-eval-during-redisplay");
   DEFSYM (Qposition, "position");
   DEFSYM (Qbuffer_position, "buffer-position");
   DEFSYM (Qobject, "object");
+
+  /* Cursor shapes.  */
   DEFSYM (Qbar, "bar");
   DEFSYM (Qhbar, "hbar");
   DEFSYM (Qbox, "box");
   DEFSYM (Qhollow, "hollow");
+
+  /* Pointer shapes.  */
   DEFSYM (Qhand, "hand");
   DEFSYM (Qarrow, "arrow");
+  /* also Qtext */
+
   DEFSYM (Qinhibit_free_realized_faces, "inhibit-free-realized-faces");
 
   list_of_error = list1 (list2 (intern_c_string ("error"),
                                intern_c_string ("void-variable")));
   staticpro (&list_of_error);
 
+  /* Values of those variables at last redisplay are stored as
+     properties on 'overlay-arrow-position' symbol.  However, if
+     Voverlay_arrow_position is a marker, last-arrow-position is its
+     numerical position.  */
   DEFSYM (Qlast_arrow_position, "last-arrow-position");
   DEFSYM (Qlast_arrow_string, "last-arrow-string");
+
+  /* Alternative overlay-arrow-string and overlay-arrow-bitmap
+     properties on a symbol in overlay-arrow-variable-list.  */
   DEFSYM (Qoverlay_arrow_string, "overlay-arrow-string");
   DEFSYM (Qoverlay_arrow_bitmap, "overlay-arrow-bitmap");
 
@@ -31011,7 +31110,10 @@ cursor shapes.  */);
   hourglass_shown_p = 0;
 #endif /* HAVE_WINDOW_SYSTEM */
 
+  /* Name of the face used to display glyphless characters.  */
   DEFSYM (Qglyphless_char, "glyphless-char");
+
+  /* Method symbols for Vglyphless_char_display.  */
   DEFSYM (Qhex_code, "hex-code");
   DEFSYM (Qempty_box, "empty-box");
   DEFSYM (Qthin_space, "thin-space");
@@ -31024,6 +31126,7 @@ be redisplayed.  This set can be nil (meaning, only the 
selected window),
 or t (meaning all windows).  */);
   Vpre_redisplay_function = intern ("ignore");
 
+  /* Symbol for the purpose of Vglyphless_char_display.  */
   DEFSYM (Qglyphless_char_display, "glyphless-char-display");
   Fput (Qglyphless_char_display, Qchar_table_extra_slots, make_number (1));
 
diff --git a/src/xfaces.c b/src/xfaces.c
index 446107e..6e01ab0 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -1,6 +1,6 @@
 /* xfaces.c -- "Face" primitives.
 
-Copyright (C) 1993-1994, 1998-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 1998-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -265,11 +265,11 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 #include <c-ctype.h>
 
-/* Non-zero if face attribute ATTR is unspecified.  */
+/* True if face attribute ATTR is unspecified.  */
 
 #define UNSPECIFIEDP(ATTR) EQ ((ATTR), Qunspecified)
 
-/* Non-zero if face attribute ATTR is `ignore-defface'.  */
+/* True if face attribute ATTR is `ignore-defface'.  */
 
 #define IGNORE_DEFFACE_P(ATTR) EQ ((ATTR), QCignore_defface)
 
@@ -278,57 +278,8 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 #define FACE_CACHE_BUCKETS_SIZE 1001
 
-/* Keyword symbols used for face attribute names.  */
-
-Lisp_Object QCfamily, QCheight, QCweight, QCslant;
-static Lisp_Object QCunderline;
-static Lisp_Object QCinverse_video, QCstipple;
-Lisp_Object QCforeground, QCbackground;
-Lisp_Object QCwidth;
-static Lisp_Object QCfont, QCbold, QCitalic;
-static Lisp_Object QCreverse_video;
-static Lisp_Object QCoverline, QCstrike_through, QCbox, QCinherit;
-static Lisp_Object QCfontset, QCdistant_foreground;
-
-/* Symbols used for attribute values.  */
-
-Lisp_Object Qnormal;
-Lisp_Object Qbold;
-static Lisp_Object Qline, Qwave;
-Lisp_Object Qextra_light, Qlight;
-Lisp_Object Qsemi_light, Qsemi_bold, Qextra_bold, Qultra_bold;
-Lisp_Object Qoblique;
-Lisp_Object Qitalic;
-static Lisp_Object Qreleased_button, Qpressed_button;
-static Lisp_Object QCstyle, QCcolor, QCline_width;
-Lisp_Object Qunspecified;      /* used in dosfns.c */
-static Lisp_Object QCignore_defface;
-
 char unspecified_fg[] = "unspecified-fg", unspecified_bg[] = "unspecified-bg";
 
-/* The name of the function to call when the background of the frame
-   has changed, frame_set_background_mode.  */
-
-static Lisp_Object Qframe_set_background_mode;
-
-/* Names of basic faces.  */
-
-Lisp_Object Qdefault, Qtool_bar, Qfringe;
-static Lisp_Object Qregion;
-Lisp_Object Qheader_line, Qscroll_bar, Qcursor;
-static Lisp_Object Qborder, Qmouse, Qmenu;
-Lisp_Object Qmode_line_inactive;
-static Lisp_Object Qvertical_border;
-static Lisp_Object Qwindow_divider;
-static Lisp_Object Qwindow_divider_first_pixel;
-static Lisp_Object Qwindow_divider_last_pixel;
-
-/* The symbol `face-alias'.  A symbols having that property is an
-   alias for another face.  Value of the property is the name of
-   the aliased face.  */
-
-static Lisp_Object Qface_alias;
-
 /* Alist of alternative font families.  Each element is of the form
    (FAMILY FAMILY1 FAMILY2 ...).  If fonts of FAMILY can't be loaded,
    try FAMILY1, then FAMILY2, ...  */
@@ -341,32 +292,6 @@ Lisp_Object Vface_alternative_font_family_alist;
 
 Lisp_Object Vface_alternative_font_registry_alist;
 
-/* Allowed scalable fonts.  A value of nil means don't allow any
-   scalable fonts.  A value of t means allow the use of any scalable
-   font.  Otherwise, value must be a list of regular expressions.  A
-   font may be scaled if its name matches a regular expression in the
-   list.  */
-
-static Lisp_Object Qscalable_fonts_allowed;
-
-/* The symbols `foreground-color' and `background-color' which can be
-   used as part of a `face' property.  This is for compatibility with
-   Emacs 20.2.  */
-
-Lisp_Object Qforeground_color, Qbackground_color;
-
-/* The symbols `face' and `mouse-face' used as text properties.  */
-
-Lisp_Object Qface;
-
-/* Property for basic faces which other faces cannot inherit.  */
-
-static Lisp_Object Qface_no_inherit;
-
-/* Error symbol for wrong_type_argument in load_pixmap.  */
-
-static Lisp_Object Qbitmap_spec_p;
-
 /* The next ID to assign to Lisp faces.  */
 
 static int next_lface_id;
@@ -376,14 +301,6 @@ static int next_lface_id;
 static Lisp_Object *lface_id_to_name;
 static ptrdiff_t lface_id_to_name_size;
 
-/* TTY color-related functions (defined in tty-colors.el).  */
-
-static Lisp_Object Qtty_color_desc, Qtty_color_by_index, 
Qtty_color_standard_values;
-
-/* The name of the function used to compute colors on TTYs.  */
-
-static Lisp_Object Qtty_color_alist;
-
 #ifdef HAVE_WINDOW_SYSTEM
 
 /* Counter for calls to clear_face_cache.  If this counter reaches
@@ -396,17 +313,17 @@ static int clear_font_table_count;
 
 #endif /* HAVE_WINDOW_SYSTEM */
 
-/* Non-zero means face attributes have been changed since the last
+/* True means face attributes have been changed since the last
    redisplay.  Used in redisplay_internal.  */
 
-int face_change_count;
+bool face_change;
 
-/* Non-zero means don't display bold text if a face's foreground
+/* True means don't display bold text if a face's foreground
    and background colors are the inverse of the default colors of the
    display.   This is a kluge to suppress `bold black' foreground text
    which is hard to read on an LCD monitor.  */
 
-static int tty_suppress_bold_inverse_default_colors_p;
+static bool tty_suppress_bold_inverse_default_colors_p;
 
 /* A list of the form `((x . y))' used to avoid consing in
    Finternal_set_lisp_face_attribute.  */
@@ -421,10 +338,10 @@ static int npixmaps_allocated;
 static int ngcs;
 #endif
 
-/* Non-zero means the definition of the `menu' face for new frames has
+/* True means the definition of the `menu' face for new frames has
    been changed.  */
 
-static int menu_face_changed_default;
+static bool menu_face_changed_default;
 
 struct named_merge_point;
 
@@ -437,8 +354,8 @@ static bool realize_default_face (struct frame *);
 static void realize_named_face (struct frame *, Lisp_Object, int);
 static struct face_cache *make_face_cache (struct frame *);
 static void free_face_cache (struct face_cache *);
-static int merge_face_ref (struct frame *, Lisp_Object, Lisp_Object *,
-                          int, struct named_merge_point *);
+static bool merge_face_ref (struct frame *, Lisp_Object, Lisp_Object *,
+                           bool, struct named_merge_point *);
 static int color_distance (XColor *x, XColor *y);
 
 #ifdef HAVE_WINDOW_SYSTEM
@@ -721,18 +638,18 @@ recompute_basic_faces (struct frame *f)
 {
   if (FRAME_FACE_CACHE (f))
     {
-      clear_face_cache (0);
+      clear_face_cache (false);
       if (!realize_basic_faces (f))
        emacs_abort ();
     }
 }
 
 
-/* Clear the face caches of all frames.  CLEAR_FONTS_P non-zero means
+/* Clear the face caches of all frames.  CLEAR_FONTS_P means
    try to free unused fonts, too.  */
 
 void
-clear_face_cache (int clear_fonts_p)
+clear_face_cache (bool clear_fonts_p)
 {
 #ifdef HAVE_WINDOW_SYSTEM
   Lisp_Object tail, frame;
@@ -777,7 +694,7 @@ Optional THOROUGHLY non-nil means try to free unused fonts, 
too.  */)
   (Lisp_Object thoroughly)
 {
   clear_face_cache (!NILP (thoroughly));
-  ++face_change_count;
+  face_change = true;
   windows_or_buffers_changed = 53;
   return Qnil;
 }
@@ -798,11 +715,11 @@ the pixmap.  Bits are stored row by row, each row occupies
 \(WIDTH + 7)/8 bytes.  */)
   (Lisp_Object object)
 {
-  bool pixmap_p = 0;
+  bool pixmap_p = false;
 
   if (STRINGP (object))
     /* If OBJECT is a string, it's a file name.  */
-    pixmap_p = 1;
+    pixmap_p = true;
   else if (CONSP (object))
     {
       /* Otherwise OBJECT must be (WIDTH HEIGHT DATA), WIDTH and
@@ -832,7 +749,7 @@ the pixmap.  Bits are stored row by row, each row occupies
          int bytes_per_row = ((XINT (width) + BITS_PER_CHAR - 1)
                               / BITS_PER_CHAR);
          if (XINT (height) <= SBYTES (data) / bytes_per_row)
-           pixmap_p = 1;
+           pixmap_p = true;
        }
     }
 
@@ -903,9 +820,9 @@ load_pixmap (struct frame *f, Lisp_Object name)
 
 /* Parse RGB_LIST, and fill in the RGB fields of COLOR.
    RGB_LIST should contain (at least) 3 lisp integers.
-   Return 0 if there's a problem with RGB_LIST, otherwise return 1.  */
+   Return true iff RGB_LIST is OK.  */
 
-static int
+static bool
 parse_rgb_list (Lisp_Object rgb_list, XColor *color)
 {
 #define PARSE_RGB_LIST_FIELD(field)                                    \
@@ -915,13 +832,13 @@ parse_rgb_list (Lisp_Object rgb_list, XColor *color)
       rgb_list = XCDR (rgb_list);                                      \
     }                                                                  \
   else                                                                 \
-    return 0;
+    return false;
 
   PARSE_RGB_LIST_FIELD (red);
   PARSE_RGB_LIST_FIELD (green);
   PARSE_RGB_LIST_FIELD (blue);
 
-  return 1;
+  return true;
 }
 
 
@@ -937,7 +854,7 @@ tty_lookup_color (struct frame *f, Lisp_Object color, 
XColor *tty_color,
   Lisp_Object frame, color_desc;
 
   if (!STRINGP (color) || NILP (Ffboundp (Qtty_color_desc)))
-    return 0;
+    return false;
 
   XSETFRAME (frame, f);
 
@@ -947,13 +864,13 @@ tty_lookup_color (struct frame *f, Lisp_Object color, 
XColor *tty_color,
       Lisp_Object rgb;
 
       if (! INTEGERP (XCAR (XCDR (color_desc))))
-       return 0;
+       return false;
 
       tty_color->pixel = XINT (XCAR (XCDR (color_desc)));
 
       rgb = XCDR (XCDR (color_desc));
       if (! parse_rgb_list (rgb, tty_color))
-       return 0;
+       return false;
 
       /* Should we fill in STD_COLOR too?  */
       if (std_color)
@@ -972,21 +889,21 @@ tty_lookup_color (struct frame *f, Lisp_Object color, 
XColor *tty_color,
              /* Look up STD_COLOR separately.  */
              rgb = call1 (Qtty_color_standard_values, color);
              if (! parse_rgb_list (rgb, std_color))
-               return 0;
+               return false;
            }
        }
 
-      return 1;
+      return true;
     }
   else if (NILP (Fsymbol_value (intern ("tty-defined-color-alist"))))
     /* We were called early during startup, and the colors are not
        yet set up in tty-defined-color-alist.  Don't return a failure
        indication, since this produces the annoying "Unable to
        load color" messages in the *Messages* buffer.  */
-    return 1;
+    return true;
   else
     /* tty-color-desc seems to have returned a bad value.  */
-    return 0;
+    return false;
 }
 
 /* A version of defined_color for non-X frames.  */
@@ -995,7 +912,7 @@ static bool
 tty_defined_color (struct frame *f, const char *color_name,
                   XColor *color_def, bool alloc)
 {
-  bool status = 1;
+  bool status = true;
 
   /* Defaults.  */
   color_def->pixel = FACE_TTY_DEFAULT_COLOR;
@@ -1015,7 +932,7 @@ tty_defined_color (struct frame *f, const char *color_name,
     }
 
   if (color_def->pixel != FACE_TTY_DEFAULT_COLOR)
-    status = 1;
+    status = true;
 
   return status;
 }
@@ -1043,7 +960,7 @@ defined_color (struct frame *f, const char *color_name, 
XColor *color_def,
 #endif
 #ifdef HAVE_NS
   else if (FRAME_NS_P (f))
-    return ns_defined_color (f, color_name, color_def, alloc, 1);
+    return ns_defined_color (f, color_name, color_def, alloc, true);
 #endif
   else
     emacs_abort ();
@@ -1083,18 +1000,18 @@ tty_color_name (struct frame *f, int idx)
 }
 
 
-/* Return non-zero if COLOR_NAME is a shade of gray (or white or
+/* Return true if COLOR_NAME is a shade of gray (or white or
    black) on frame F.
 
    The criterion implemented here is not a terribly sophisticated one.  */
 
-static int
+static bool
 face_color_gray_p (struct frame *f, const char *color_name)
 {
   XColor color;
-  int gray_p;
+  bool gray_p;
 
-  if (defined_color (f, color_name, &color, 0))
+  if (defined_color (f, color_name, &color, false))
     gray_p = (/* Any color sufficiently close to black counts as gray.  */
              (color.red < 5000 && color.green < 5000 && color.blue < 5000)
              ||
@@ -1105,19 +1022,18 @@ face_color_gray_p (struct frame *f, const char 
*color_name)
               && (eabs (color.blue - color.red)
                   < max (color.blue, color.red) / 20)));
   else
-    gray_p = 0;
+    gray_p = false;
 
   return gray_p;
 }
 
 
-/* Return non-zero if color COLOR_NAME can be displayed on frame F.
-   BACKGROUND_P non-zero means the color will be used as background
-   color.  */
+/* Return true if color COLOR_NAME can be displayed on frame F.
+   BACKGROUND_P means the color will be used as background color.  */
 
-static int
+static bool
 face_color_supported_p (struct frame *f, const char *color_name,
-                       int background_p)
+                       bool background_p)
 {
   Lisp_Object frame;
   XColor not_used;
@@ -1135,7 +1051,7 @@ face_color_supported_p (struct frame *f, const char 
*color_name,
           && face_color_gray_p (f, color_name)))
     :
 #endif
-    tty_defined_color (f, color_name, &not_used, 0);
+    tty_defined_color (f, color_name, &not_used, false);
 }
 
 
@@ -1181,39 +1097,39 @@ load_color2 (struct frame *f, struct face *face, 
Lisp_Object name,
 
   /* if the color map is full, defined_color will return a best match
      to the values in an existing cell. */
-  if (!defined_color (f, SSDATA (name), color, 1))
+  if (!defined_color (f, SSDATA (name), color, true))
     {
       add_to_log ("Unable to load color \"%s\"", name, Qnil);
 
       switch (target_index)
        {
        case LFACE_FOREGROUND_INDEX:
-         face->foreground_defaulted_p = 1;
+         face->foreground_defaulted_p = true;
          color->pixel = FRAME_FOREGROUND_PIXEL (f);
          break;
 
        case LFACE_BACKGROUND_INDEX:
-         face->background_defaulted_p = 1;
+         face->background_defaulted_p = true;
          color->pixel = FRAME_BACKGROUND_PIXEL (f);
          break;
 
        case LFACE_UNDERLINE_INDEX:
-         face->underline_defaulted_p = 1;
+         face->underline_defaulted_p = true;
          color->pixel = FRAME_FOREGROUND_PIXEL (f);
          break;
 
        case LFACE_OVERLINE_INDEX:
-         face->overline_color_defaulted_p = 1;
+         face->overline_color_defaulted_p = true;
          color->pixel = FRAME_FOREGROUND_PIXEL (f);
          break;
 
        case LFACE_STRIKE_THROUGH_INDEX:
-         face->strike_through_color_defaulted_p = 1;
+         face->strike_through_color_defaulted_p = true;
          color->pixel = FRAME_FOREGROUND_PIXEL (f);
          break;
 
        case LFACE_BOX_INDEX:
-         face->box_color_defaulted_p = 1;
+         face->box_color_defaulted_p = true;
          color->pixel = FRAME_FOREGROUND_PIXEL (f);
          break;
 
@@ -1279,7 +1195,7 @@ load_face_colors (struct frame *f, struct face *face,
      face_color_supported_p is smart enough to know that grays are
      "supported" as background because we are supposed to use stipple
      for them.  */
-  if (!face_color_supported_p (f, SSDATA (bg), 0)
+  if (!face_color_supported_p (f, SSDATA (bg), false)
       && !NILP (Fbitmap_spec_p (Vface_default_stipple)))
     {
       x_destroy_bitmap (f, face->stipple);
@@ -1644,7 +1560,7 @@ the WIDTH times as wide as FACE on FRAME.  */)
     {
       /* This is of limited utility since it works with character
         widths.  Keep it for compatibility.  --gerd.  */
-      int face_id = lookup_named_face (f, face, 0);
+      int face_id = lookup_named_face (f, face, false);
       struct face *width_face = (face_id < 0
                                 ? NULL
                                 : FACE_FROM_ID (f, face_id));
@@ -1663,43 +1579,38 @@ the WIDTH times as wide as FACE on FRAME.  */)
        avgwidth *= XINT (width);
     }
 
-  {
-    Lisp_Object font_spec;
-    Lisp_Object args[2], tail;
-
-    font_spec = font_spec_from_name (pattern);
-    if (!FONTP (font_spec))
-      signal_error ("Invalid font name", pattern);
+  Lisp_Object font_spec = font_spec_from_name (pattern);
+  if (!FONTP (font_spec))
+    signal_error ("Invalid font name", pattern);
 
-    if (size)
-      {
-       Ffont_put (font_spec, QCsize, make_number (size));
-       Ffont_put (font_spec, QCavgwidth, make_number (avgwidth));
-      }
-    args[0] = Flist_fonts (font_spec, frame, maximum, font_spec);
-    for (tail = args[0]; CONSP (tail); tail = XCDR (tail))
-      {
-       Lisp_Object font_entity;
+  if (size)
+    {
+      Ffont_put (font_spec, QCsize, make_number (size));
+      Ffont_put (font_spec, QCavgwidth, make_number (avgwidth));
+    }
+  Lisp_Object fonts = Flist_fonts (font_spec, frame, maximum, font_spec);
+  for (Lisp_Object tail = fonts; CONSP (tail); tail = XCDR (tail))
+    {
+      Lisp_Object font_entity;
 
-       font_entity = XCAR (tail);
-       if ((NILP (AREF (font_entity, FONT_SIZE_INDEX))
-            || XINT (AREF (font_entity, FONT_SIZE_INDEX)) == 0)
-           && ! NILP (AREF (font_spec, FONT_SIZE_INDEX)))
-         {
-           /* This is a scalable font.  For backward compatibility,
-              we set the specified size. */
-           font_entity = copy_font_spec (font_entity);
-           ASET (font_entity, FONT_SIZE_INDEX,
-                 AREF (font_spec, FONT_SIZE_INDEX));
-         }
-       XSETCAR (tail, Ffont_xlfd_name (font_entity, Qnil));
-      }
-    if (NILP (frame))
-      /* We don't have to check fontsets.  */
-      return args[0];
-    args[1] = list_fontsets (f, pattern, size);
-    return Fnconc (2, args);
-  }
+      font_entity = XCAR (tail);
+      if ((NILP (AREF (font_entity, FONT_SIZE_INDEX))
+          || XINT (AREF (font_entity, FONT_SIZE_INDEX)) == 0)
+         && ! NILP (AREF (font_spec, FONT_SIZE_INDEX)))
+       {
+         /* This is a scalable font.  For backward compatibility,
+            we set the specified size. */
+         font_entity = copy_font_spec (font_entity);
+         ASET (font_entity, FONT_SIZE_INDEX,
+               AREF (font_spec, FONT_SIZE_INDEX));
+       }
+      XSETCAR (tail, Ffont_xlfd_name (font_entity, Qnil));
+    }
+  if (NILP (frame))
+    /* We don't have to check fontsets.  */
+    return fonts;
+  Lisp_Object fontsets = list_fontsets (f, pattern, size);
+  return CALLN (Fnconc, fonts, fontsets);
 }
 
 #endif /* HAVE_WINDOW_SYSTEM */
@@ -1731,7 +1642,7 @@ the WIDTH times as wide as FACE on FRAME.  */)
 #define LFACE_DISTANT_FOREGROUND(LFACE) \
   AREF ((LFACE), LFACE_DISTANT_FOREGROUND_INDEX)
 
-/* Non-zero if LFACE is a Lisp face.  A Lisp face is a vector of size
+/* True if LFACE is a Lisp face.  A Lisp face is a vector of size
    LFACE_VECTOR_SIZE which has the symbol `face' in slot 0.  */
 
 #define LFACEP(LFACE)                                  \
@@ -1861,12 +1772,12 @@ struct named_merge_point
 };
 
 
-/* If a face merging cycle is detected for FACE_NAME, return 0,
+/* If a face merging cycle is detected for FACE_NAME, return false,
    otherwise add NEW_NAMED_MERGE_POINT, which is initialized using
    FACE_NAME and NAMED_MERGE_POINT_KIND, as the head of the linked list
-   pointed to by NAMED_MERGE_POINTS, and return 1.  */
+   pointed to by NAMED_MERGE_POINTS, and return true.  */
 
-static int
+static bool
 push_named_merge_point (struct named_merge_point *new_named_merge_point,
                        Lisp_Object face_name,
                        enum named_merge_point_kind named_merge_point_kind,
@@ -1879,7 +1790,7 @@ push_named_merge_point (struct named_merge_point 
*new_named_merge_point,
       {
        if (prev->named_merge_point_kind == named_merge_point_kind)
          /* A cycle, so fail.  */
-         return 0;
+         return false;
        else if (prev->named_merge_point_kind == NAMED_MERGE_POINT_REMAP)
          /* A remap `hides ' any previous normal merge points
             (because the remap means that it's actually different face),
@@ -1894,7 +1805,7 @@ push_named_merge_point (struct named_merge_point 
*new_named_merge_point,
 
   *named_merge_points = new_named_merge_point;
 
-  return 1;
+  return true;
 }
 
 
@@ -1905,7 +1816,7 @@ push_named_merge_point (struct named_merge_point 
*new_named_merge_point,
    Return default face in case of errors.  */
 
 static Lisp_Object
-resolve_face_name (Lisp_Object face_name, int signal_p)
+resolve_face_name (Lisp_Object face_name, bool signal_p)
 {
   Lisp_Object orig_face;
   Lisp_Object tortoise, hare;
@@ -1919,7 +1830,7 @@ resolve_face_name (Lisp_Object face_name, int signal_p)
   orig_face = face_name;
   tortoise = hare = face_name;
 
-  while (1)
+  while (true)
     {
       face_name = hare;
       hare = Fget (hare, Qface_alias);
@@ -1947,12 +1858,12 @@ resolve_face_name (Lisp_Object face_name, int signal_p)
 /* Return the face definition of FACE_NAME on frame F.  F null means
    return the definition for new frames.  FACE_NAME may be a string or
    a symbol (apparently Emacs 20.2 allowed strings as face names in
-   face text properties; Ediff uses that).  If SIGNAL_P is non-zero,
-   signal an error if FACE_NAME is not a valid face name.  If SIGNAL_P
-   is zero, value is nil if FACE_NAME is not a valid face name.  */
+   face text properties; Ediff uses that).
+   If SIGNAL_P, signal an error if FACE_NAME is not a valid face name.
+   Otherwise, value is nil if FACE_NAME is not a valid face name.  */
 static Lisp_Object
 lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name,
-                                int signal_p)
+                                bool signal_p)
 {
   Lisp_Object lface;
 
@@ -1975,12 +1886,11 @@ lface_from_face_name_no_resolve (struct frame *f, 
Lisp_Object face_name,
    return the definition for new frames.  FACE_NAME may be a string or
    a symbol (apparently Emacs 20.2 allowed strings as face names in
    face text properties; Ediff uses that).  If FACE_NAME is an alias
-   for another face, return that face's definition.  If SIGNAL_P is
-   non-zero, signal an error if FACE_NAME is not a valid face name.
-   If SIGNAL_P is zero, value is nil if FACE_NAME is not a valid face
-   name.  */
+   for another face, return that face's definition.
+   If SIGNAL_P, signal an error if FACE_NAME is not a valid face name.
+   Otherwise, value is nil if FACE_NAME is not a valid face name.  */
 static Lisp_Object
-lface_from_face_name (struct frame *f, Lisp_Object face_name, int signal_p)
+lface_from_face_name (struct frame *f, Lisp_Object face_name, bool signal_p)
 {
   face_name = resolve_face_name (face_name, signal_p);
   return lface_from_face_name_no_resolve (f, face_name, signal_p);
@@ -1989,14 +1899,14 @@ lface_from_face_name (struct frame *f, Lisp_Object 
face_name, int signal_p)
 
 /* Get face attributes of face FACE_NAME from frame-local faces on
    frame F.  Store the resulting attributes in ATTRS which must point
-   to a vector of Lisp_Objects of size LFACE_VECTOR_SIZE.  If SIGNAL_P
-   is non-zero, signal an error if FACE_NAME does not name a face.
-   Otherwise, value is zero if FACE_NAME is not a face.  */
+   to a vector of Lisp_Objects of size LFACE_VECTOR_SIZE.
+   If SIGNAL_P, signal an error if FACE_NAME does not name a face.
+   Otherwise, return true iff FACE_NAME is a face.  */
 
-static int
+static bool
 get_lface_attributes_no_remap (struct frame *f, Lisp_Object face_name,
                               Lisp_Object attrs[LFACE_VECTOR_SIZE],
-                              int signal_p)
+                              bool signal_p)
 {
   Lisp_Object lface;
 
@@ -2012,13 +1922,13 @@ get_lface_attributes_no_remap (struct frame *f, 
Lisp_Object face_name,
 /* Get face attributes of face FACE_NAME from frame-local faces on frame
    F.  Store the resulting attributes in ATTRS which must point to a
    vector of Lisp_Objects of size LFACE_VECTOR_SIZE.  If FACE_NAME is an
-   alias for another face, use that face's definition.  If SIGNAL_P is
-   non-zero, signal an error if FACE_NAME does not name a face.
-   Otherwise, value is zero if FACE_NAME is not a face.  */
+   alias for another face, use that face's definition.
+   If SIGNAL_P, signal an error if FACE_NAME does not name a face.
+   Otherwise, return true iff FACE_NAME is a face.  */
 
-static int
+static bool
 get_lface_attributes (struct frame *f, Lisp_Object face_name,
-                     Lisp_Object attrs[LFACE_VECTOR_SIZE], int signal_p,
+                     Lisp_Object attrs[LFACE_VECTOR_SIZE], bool signal_p,
                      struct named_merge_point *named_merge_points)
 {
   Lisp_Object face_remapping;
@@ -2051,10 +1961,10 @@ get_lface_attributes (struct frame *f, Lisp_Object 
face_name,
 }
 
 
-/* Non-zero if all attributes in face attribute vector ATTRS are
+/* True iff all attributes in face attribute vector ATTRS are
    specified, i.e. are non-nil.  */
 
-static int
+static bool
 lface_fully_specified_p (Lisp_Object attrs[LFACE_VECTOR_SIZE])
 {
   int i;
@@ -2071,13 +1981,13 @@ lface_fully_specified_p (Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
 #ifdef HAVE_WINDOW_SYSTEM
 
 /* Set font-related attributes of Lisp face LFACE from FONT-OBJECT.
-   If FORCE_P is zero, set only unspecified attributes of LFACE.  The
+   If FORCE_P, set only unspecified attributes of LFACE.  The
    exception is `font' attribute.  It is set to FONT_OBJECT regardless
    of FORCE_P.  */
 
-static int
+static void
 set_lface_from_font (struct frame *f, Lisp_Object lface,
-                    Lisp_Object font_object, int force_p)
+                    Lisp_Object font_object, bool force_p)
 {
   Lisp_Object val;
   struct font *font = XFONT_OBJECT (font_object);
@@ -2125,7 +2035,6 @@ set_lface_from_font (struct frame *f, Lisp_Object lface,
     }
 
   ASET (lface, LFACE_FONT_INDEX, font_object);
-  return 1;
 }
 
 #endif /* HAVE_WINDOW_SYSTEM */
@@ -2196,7 +2105,7 @@ merge_face_vectors (struct frame *f, Lisp_Object *from, 
Lisp_Object *to,
      other code uses `unspecified' as a generic value for face attributes. */
   if (!UNSPECIFIEDP (from[LFACE_INHERIT_INDEX])
       && !NILP (from[LFACE_INHERIT_INDEX]))
-    merge_face_ref (f, from[LFACE_INHERIT_INDEX], to, 0, named_merge_points);
+    merge_face_ref (f, from[LFACE_INHERIT_INDEX], to, false, 
named_merge_points);
 
   if (FONT_SPEC_P (from[LFACE_FONT_INDEX]))
     {
@@ -2254,11 +2163,11 @@ merge_face_vectors (struct frame *f, Lisp_Object *from, 
Lisp_Object *to,
 }
 
 /* Merge the named face FACE_NAME on frame F, into the vector of face
-   attributes TO.  NAMED_MERGE_POINTS is used to detect loops in face
-   inheritance.  Returns true if FACE_NAME is a valid face name and
+   attributes TO.  Use NAMED_MERGE_POINTS to detect loops in face
+   inheritance.  Return true if FACE_NAME is a valid face name and
    merging succeeded.  */
 
-static int
+static bool
 merge_named_face (struct frame *f, Lisp_Object face_name, Lisp_Object *to,
                  struct named_merge_point *named_merge_points)
 {
@@ -2270,7 +2179,8 @@ merge_named_face (struct frame *f, Lisp_Object face_name, 
Lisp_Object *to,
     {
       struct gcpro gcpro1;
       Lisp_Object from[LFACE_VECTOR_SIZE];
-      int ok = get_lface_attributes (f, face_name, from, 0, 
named_merge_points);
+      bool ok = get_lface_attributes (f, face_name, from, false,
+                                     named_merge_points);
 
       if (ok)
        {
@@ -2282,15 +2192,15 @@ merge_named_face (struct frame *f, Lisp_Object 
face_name, Lisp_Object *to,
       return ok;
     }
   else
-    return 0;
+    return false;
 }
 
 
 /* Merge face attributes from the lisp `face reference' FACE_REF on
-   frame F into the face attribute vector TO.  If ERR_MSGS is non-zero,
+   frame F into the face attribute vector TO.  If ERR_MSGS,
    problems with FACE_REF cause an error message to be shown.  Return
-   non-zero if no errors occurred (regardless of the value of ERR_MSGS).
-   NAMED_MERGE_POINTS is used to detect loops in face inheritance or
+   true if no errors occurred (regardless of the value of ERR_MSGS).
+   Use NAMED_MERGE_POINTS to detect loops in face inheritance or
    list structure; it may be 0 for most callers.
 
    FACE_REF may be a single face specification or a list of such
@@ -2309,11 +2219,11 @@ merge_named_face (struct frame *f, Lisp_Object 
face_name, Lisp_Object *to,
    Face specifications earlier in lists take precedence over later
    specifications.  */
 
-static int
+static bool
 merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to,
-               int err_msgs, struct named_merge_point *named_merge_points)
+               bool err_msgs, struct named_merge_point *named_merge_points)
 {
-  int ok = 1;                  /* Succeed without an error? */
+  bool ok = true;              /* Succeed without an error? */
 
   if (CONSP (face_ref))
     {
@@ -2338,7 +2248,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
            {
              if (err_msgs)
                add_to_log ("Invalid face color", color_name, Qnil);
-             ok = 0;
+             ok = false;
            }
        }
       else if (SYMBOLP (first)
@@ -2349,7 +2259,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
            {
              Lisp_Object keyword = XCAR (face_ref);
              Lisp_Object value = XCAR (XCDR (face_ref));
-             int err = 0;
+             bool err = false;
 
              /* Specifying `unspecified' is a no-op.  */
              if (EQ (value, Qunspecified))
@@ -2362,7 +2272,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      font_clear_prop (to, FONT_FAMILY_INDEX);
                    }
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCfoundry))
                {
@@ -2372,7 +2282,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      font_clear_prop (to, FONT_FOUNDRY_INDEX);
                    }
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCheight))
                {
@@ -2385,7 +2295,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      font_clear_prop (to, FONT_SIZE_INDEX);
                    }
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCweight))
                {
@@ -2395,7 +2305,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      font_clear_prop (to, FONT_WEIGHT_INDEX);
                    }
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCslant))
                {
@@ -2405,7 +2315,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      font_clear_prop (to, FONT_SLANT_INDEX);
                    }
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCunderline))
                {
@@ -2415,7 +2325,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      || CONSP (value))
                    to[LFACE_UNDERLINE_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCoverline))
                {
@@ -2424,7 +2334,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      || STRINGP (value))
                    to[LFACE_OVERLINE_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCstrike_through))
                {
@@ -2433,7 +2343,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      || STRINGP (value))
                    to[LFACE_STRIKE_THROUGH_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCbox))
                {
@@ -2445,7 +2355,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      || NILP (value))
                    to[LFACE_BOX_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCinverse_video)
                       || EQ (keyword, QCreverse_video))
@@ -2453,28 +2363,28 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                  if (EQ (value, Qt) || NILP (value))
                    to[LFACE_INVERSE_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCforeground))
                {
                  if (STRINGP (value))
                    to[LFACE_FOREGROUND_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCdistant_foreground))
                {
                  if (STRINGP (value))
                    to[LFACE_DISTANT_FOREGROUND_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCbackground))
                {
                  if (STRINGP (value))
                    to[LFACE_BACKGROUND_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCstipple))
                {
@@ -2483,7 +2393,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                  if (!NILP (pixmap_p))
                    to[LFACE_STIPPLE_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
 #endif /* HAVE_WINDOW_SYSTEM */
                }
              else if (EQ (keyword, QCwidth))
@@ -2494,14 +2404,14 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                      font_clear_prop (to, FONT_WIDTH_INDEX);
                    }
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCfont))
                {
                  if (FONTP (value))
                    to[LFACE_FONT_INDEX] = value;
                  else
-                   err = 1;
+                   err = true;
                }
              else if (EQ (keyword, QCinherit))
                {
@@ -2509,15 +2419,15 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
                     normal face reference.  */
                  if (! merge_face_ref (f, value, to,
                                        err_msgs, named_merge_points))
-                   err = 1;
+                   err = true;
                }
              else
-               err = 1;
+               err = true;
 
              if (err)
                {
                  add_to_log ("Invalid face attribute %S %S", keyword, value);
-                 ok = 0;
+                 ok = false;
                }
 
              face_ref = XCDR (XCDR (face_ref));
@@ -2534,7 +2444,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, 
Lisp_Object *to,
            ok = merge_face_ref (f, next, to, err_msgs, named_merge_points);
 
          if (! merge_face_ref (f, first, to, err_msgs, named_merge_points))
-           ok = 0;
+           ok = false;
        }
     }
   else
@@ -2563,13 +2473,13 @@ Value is a vector of face attributes.  */)
   int i;
 
   CHECK_SYMBOL (face);
-  global_lface = lface_from_face_name (NULL, face, 0);
+  global_lface = lface_from_face_name (NULL, face, false);
 
   if (!NILP (frame))
     {
       CHECK_LIVE_FRAME (frame);
       f = XFRAME (frame);
-      lface = lface_from_face_name (f, face, 0);
+      lface = lface_from_face_name (f, face, false);
     }
   else
     f = NULL, lface = Qnil;
@@ -2620,11 +2530,11 @@ Value is a vector of face attributes.  */)
   /* Changing a named face means that all realized faces depending on
      that face are invalid.  Since we cannot tell which realized faces
      depend on the face, make sure they are all removed.  This is done
-     by incrementing face_change_count.  The next call to
-     init_iterator will then free realized faces.  */
+     by setting face_change.  The next call to init_iterator will then
+     free realized faces.  */
   if (NILP (Fget (face, Qface_no_inherit)))
     {
-      ++face_change_count;
+      face_change = true;
       windows_or_buffers_changed = 54;
     }
 
@@ -2645,15 +2555,15 @@ Otherwise check for the existence of a global face.  */)
 {
   Lisp_Object lface;
 
-  face = resolve_face_name (face, 1);
+  face = resolve_face_name (face, true);
 
   if (!NILP (frame))
     {
       CHECK_LIVE_FRAME (frame);
-      lface = lface_from_face_name (XFRAME (frame), face, 0);
+      lface = lface_from_face_name (XFRAME (frame), face, false);
     }
   else
-    lface = lface_from_face_name (NULL, face, 0);
+    lface = lface_from_face_name (NULL, face, false);
 
   return lface;
 }
@@ -2680,7 +2590,7 @@ The value is TO.  */)
     {
       /* Copy global definition of FROM.  We don't make copies of
         strings etc. because 20.2 didn't do it either.  */
-      lface = lface_from_face_name (NULL, from, 1);
+      lface = lface_from_face_name (NULL, from, true);
       copy = Finternal_make_lisp_face (to, Qnil);
     }
   else
@@ -2690,7 +2600,7 @@ The value is TO.  */)
        new_frame = frame;
       CHECK_LIVE_FRAME (frame);
       CHECK_LIVE_FRAME (new_frame);
-      lface = lface_from_face_name (XFRAME (frame), from, 1);
+      lface = lface_from_face_name (XFRAME (frame), from, true);
       copy = Finternal_make_lisp_face (to, new_frame);
     }
 
@@ -2699,11 +2609,11 @@ The value is TO.  */)
   /* Changing a named face means that all realized faces depending on
      that face are invalid.  Since we cannot tell which realized faces
      depend on the face, make sure they are all removed.  This is done
-     by incrementing face_change_count.  The next call to
-     init_iterator will then free realized faces.  */
+     by setting face_change.  The next call to init_iterator will then
+     free realized faces.  */
   if (NILP (Fget (to, Qface_no_inherit)))
     {
-      ++face_change_count;
+      face_change = true;
       windows_or_buffers_changed = 55;
     }
 
@@ -2730,7 +2640,7 @@ FRAME 0 means change the face on all frames, and change 
the default
   CHECK_SYMBOL (face);
   CHECK_SYMBOL (attr);
 
-  face = resolve_face_name (face, 1);
+  face = resolve_face_name (face, true);
 
   /* If FRAME is 0, change face on all frames, and change the
      default for new frames.  */
@@ -2746,7 +2656,7 @@ FRAME 0 means change the face on all frames, and change 
the default
   /* Set lface to the Lisp attribute vector of FACE.  */
   if (EQ (frame, Qt))
     {
-      lface = lface_from_face_name (NULL, face, 1);
+      lface = lface_from_face_name (NULL, face, true);
 
       /* When updating face-new-frame-defaults, we put :ignore-defface
         where the caller wants `unspecified'.  This forces the frame
@@ -2763,7 +2673,7 @@ FRAME 0 means change the face on all frames, and change 
the default
        frame = selected_frame;
 
       CHECK_LIVE_FRAME (frame);
-      lface = lface_from_face_name (XFRAME (frame), face, 0);
+      lface = lface_from_face_name (XFRAME (frame), face, false);
 
       /* If a frame-local face doesn't exist yet, create one.  */
       if (NILP (lface))
@@ -2848,14 +2758,14 @@ FRAME 0 means change the face on all frames, and change 
the default
     }
   else if (EQ (attr, QCunderline))
     {
-      bool valid_p = 0;
+      bool valid_p = false;
 
       if (UNSPECIFIEDP (value) || IGNORE_DEFFACE_P (value))
-       valid_p = 1;
+       valid_p = true;
       else if (NILP (value) || EQ (value, Qt))
-        valid_p = 1;
+        valid_p = true;
       else if (STRINGP (value) && SCHARS (value) > 0)
-        valid_p = 1;
+        valid_p = true;
       else if (CONSP (value))
         {
           Lisp_Object key, val, list;
@@ -2867,7 +2777,7 @@ FRAME 0 means change the face on all frames, and change 
the default
              Non-nil symbols other than t are not documented as being valid.
              Eg compare with inverse-video, which explicitly rejects them.
           */
-          valid_p = 1;
+          valid_p = true;
 
           while (!NILP (CAR_SAFE(list)))
             {
@@ -2878,7 +2788,7 @@ FRAME 0 means change the face on all frames, and change 
the default
 
               if (NILP (key) || NILP (val))
                 {
-                  valid_p = 0;
+                  valid_p = false;
                   break;
                 }
 
@@ -2886,14 +2796,14 @@ FRAME 0 means change the face on all frames, and change 
the default
                        && !(EQ (val, Qforeground_color)
                             || (STRINGP (val) && SCHARS (val) > 0)))
                 {
-                  valid_p = 0;
+                  valid_p = false;
                   break;
                 }
 
               else if (EQ (key, QCstyle)
                        && !(EQ (val, Qline) || EQ (val, Qwave)))
                 {
-                  valid_p = 0;
+                  valid_p = false;
                   break;
                 }
             }
@@ -2943,9 +2853,9 @@ FRAME 0 means change the face on all frames, and change 
the default
        value = make_number (1);
 
       if (UNSPECIFIEDP (value) || IGNORE_DEFFACE_P (value))
-       valid_p = 1;
+       valid_p = true;
       else if (NILP (value))
-       valid_p = 1;
+       valid_p = true;
       else if (INTEGERP (value))
        valid_p = XINT (value) != 0;
       else if (STRINGP (value))
@@ -2988,7 +2898,7 @@ FRAME 0 means change the face on all frames, and change 
the default
          valid_p = NILP (tem);
        }
       else
-       valid_p = 0;
+       valid_p = false;
 
       if (!valid_p)
        signal_error ("Invalid face box", value);
@@ -3130,7 +3040,7 @@ FRAME 0 means change the face on all frames, and change 
the default
                         signal_error ("Font not available", value);
                       value = font_object;
                     }
-                  set_lface_from_font (f, lface, value, 1);
+                  set_lface_from_font (f, lface, value, true);
                 }
            }
          else
@@ -3197,13 +3107,13 @@ FRAME 0 means change the face on all frames, and change 
the default
   /* Changing a named face means that all realized faces depending on
      that face are invalid.  Since we cannot tell which realized faces
      depend on the face, make sure they are all removed.  This is done
-     by incrementing face_change_count.  The next call to
-     init_iterator will then free realized faces.  */
+     by setting face_change.  The next call to init_iterator will then
+     free realized faces.  */
   if (!EQ (frame, Qt)
       && NILP (Fget (face, Qface_no_inherit))
       && NILP (Fequal (old_value, value)))
     {
-      ++face_change_count;
+      face_change = true;
       windows_or_buffers_changed = 56;
     }
 
@@ -3275,10 +3185,10 @@ FRAME 0 means change the face on all frames, and change 
the default
              struct frame *f = XFRAME (frame);
              if (FRAME_FACE_CACHE (f) == NULL)
                FRAME_FACE_CACHE (f) = make_face_cache (f);
-             FRAME_FACE_CACHE (f)->menu_face_changed_p = 1;
+             FRAME_FACE_CACHE (f)->menu_face_changed_p = true;
            }
          else
-           menu_face_changed_default = 1;
+           menu_face_changed_default = true;
        }
 
       if (!NILP (param))
@@ -3323,7 +3233,7 @@ update_face_from_frame_parameter (struct frame *f, 
Lisp_Object param,
   if (EQ (param, Qforeground_color))
     {
       face = Qdefault;
-      lface = lface_from_face_name (f, face, 1);
+      lface = lface_from_face_name (f, face, true);
       ASET (lface, LFACE_FOREGROUND_INDEX,
            (STRINGP (new_value) ? new_value : Qunspecified));
       realize_basic_faces (f);
@@ -3339,7 +3249,7 @@ update_face_from_frame_parameter (struct frame *f, 
Lisp_Object param,
       call1 (Qframe_set_background_mode, frame);
 
       face = Qdefault;
-      lface = lface_from_face_name (f, face, 1);
+      lface = lface_from_face_name (f, face, true);
       ASET (lface, LFACE_BACKGROUND_INDEX,
            (STRINGP (new_value) ? new_value : Qunspecified));
       realize_basic_faces (f);
@@ -3348,21 +3258,21 @@ update_face_from_frame_parameter (struct frame *f, 
Lisp_Object param,
   else if (EQ (param, Qborder_color))
     {
       face = Qborder;
-      lface = lface_from_face_name (f, face, 1);
+      lface = lface_from_face_name (f, face, true);
       ASET (lface, LFACE_BACKGROUND_INDEX,
            (STRINGP (new_value) ? new_value : Qunspecified));
     }
   else if (EQ (param, Qcursor_color))
     {
       face = Qcursor;
-      lface = lface_from_face_name (f, face, 1);
+      lface = lface_from_face_name (f, face, true);
       ASET (lface, LFACE_BACKGROUND_INDEX,
            (STRINGP (new_value) ? new_value : Qunspecified));
     }
   else if (EQ (param, Qmouse_color))
     {
       face = Qmouse;
-      lface = lface_from_face_name (f, face, 1);
+      lface = lface_from_face_name (f, face, true);
       ASET (lface, LFACE_BACKGROUND_INDEX,
            (STRINGP (new_value) ? new_value : Qunspecified));
     }
@@ -3371,12 +3281,12 @@ update_face_from_frame_parameter (struct frame *f, 
Lisp_Object param,
   /* Changing a named face means that all realized faces depending on
      that face are invalid.  Since we cannot tell which realized faces
      depend on the face, make sure they are all removed.  This is done
-     by incrementing face_change_count.  The next call to
-     init_iterator will then free realized faces.  */
+     by setting face_change.  The next call to init_iterator will then
+     free realized faces.  */
   if (!NILP (face)
       && NILP (Fget (face, Qface_no_inherit)))
     {
-      ++face_change_count;
+      face_change = true;
       windows_or_buffers_changed = 57;
     }
 }
@@ -3406,7 +3316,7 @@ set_font_frame_param (Lisp_Object frame, Lisp_Object 
lface)
            return;
          ASET (lface, LFACE_FONT_INDEX, font);
        }
-      f->default_face_done_p = 0;
+      f->default_face_done_p = false;
       AUTO_FRAME_ARG (arg, Qfont, font);
       Fmodify_frame_parameters (frame, arg);
     }
@@ -3436,11 +3346,11 @@ ordinary `x-get-resource' doesn't take a frame 
argument.  */)
 
 /* Return resource string VALUE as a boolean value, i.e. nil, or t.
    If VALUE is "on" or "true", return t.  If VALUE is "off" or
-   "false", return nil.  Otherwise, if SIGNAL_P is non-zero, signal an
-   error; if SIGNAL_P is zero, return 0.  */
+   "false", return nil.  Otherwise, if SIGNAL_P, signal an
+   error; if !SIGNAL_P, return 0.  */
 
 static Lisp_Object
-face_boolean_x_resource_value (Lisp_Object value, int signal_p)
+face_boolean_x_resource_value (Lisp_Object value, bool signal_p)
 {
   Lisp_Object result = make_number (0);
 
@@ -3480,11 +3390,11 @@ DEFUN ("internal-set-lisp-face-attribute-from-resource",
        signal_error ("Invalid face height from X resource", value);
     }
   else if (EQ (attr, QCbold) || EQ (attr, QCitalic))
-    value = face_boolean_x_resource_value (value, 1);
+    value = face_boolean_x_resource_value (value, true);
   else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth))
     value = intern (SSDATA (value));
   else if (EQ (attr, QCreverse_video) || EQ (attr, QCinverse_video))
-    value = face_boolean_x_resource_value (value, 1);
+    value = face_boolean_x_resource_value (value, true);
   else if (EQ (attr, QCunderline)
           || EQ (attr, QCoverline)
           || EQ (attr, QCstrike_through))
@@ -3493,7 +3403,7 @@ DEFUN ("internal-set-lisp-face-attribute-from-resource",
 
       /* If the result of face_boolean_x_resource_value is t or nil,
         VALUE does NOT specify a color. */
-      boolean_value = face_boolean_x_resource_value (value, 0);
+      boolean_value = face_boolean_x_resource_value (value, false);
       if (SYMBOLP (boolean_value))
        value = boolean_value;
     }
@@ -3527,10 +3437,10 @@ x_update_menu_appearance (struct frame *f)
       char line[512];
       char *buf = line;
       ptrdiff_t bufsize = sizeof line;
-      Lisp_Object lface = lface_from_face_name (f, Qmenu, 1);
+      Lisp_Object lface = lface_from_face_name (f, Qmenu, true);
       struct face *face = FACE_FROM_ID (f, MENU_FACE_ID);
       const char *myname = SSDATA (Vx_resource_name);
-      bool changed_p = 0;
+      bool changed_p = false;
 #ifdef USE_MOTIF
       const char *popup_path = "popup_menu";
 #else
@@ -3546,7 +3456,7 @@ x_update_menu_appearance (struct frame *f)
          exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*foreground: %s",
                    myname, SDATA (LFACE_FOREGROUND (lface)));
          XrmPutLineResource (&rdb, line);
-         changed_p = 1;
+         changed_p = true;
        }
 
       if (STRINGP (LFACE_BACKGROUND (lface)))
@@ -3559,7 +3469,7 @@ x_update_menu_appearance (struct frame *f)
          exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*background: %s",
                    myname, SDATA (LFACE_BACKGROUND (lface)));
          XrmPutLineResource (&rdb, line);
-         changed_p = 1;
+         changed_p = true;
        }
 
       if (face->font
@@ -3577,7 +3487,7 @@ x_update_menu_appearance (struct frame *f)
          Lisp_Object xlfd = Ffont_xlfd_name (LFACE_FONT (lface), Qnil);
 #ifdef USE_MOTIF
          const char *suffix = "List";
-         Bool motif = True;
+         bool motif = true;
 #else
 #if defined HAVE_X_I18N
 
@@ -3585,7 +3495,7 @@ x_update_menu_appearance (struct frame *f)
 #else
          const char *suffix = "";
 #endif
-         Bool motif = False;
+         bool motif = false;
 #endif
 
          if (! NILP (xlfd))
@@ -3602,7 +3512,7 @@ x_update_menu_appearance (struct frame *f)
              exprintf (&buf, &bufsize, line, -1, "%s.%s*font%s: %s",
                        myname, popup_path, suffix, fontsetname);
              XrmPutLineResource (&rdb, line);
-             changed_p = 1;
+             changed_p = true;
              if (fontsetname != SSDATA (xlfd))
                xfree (fontsetname);
            }
@@ -3629,7 +3539,8 @@ with the value VALUE is relative.
 A relative value is one that doesn't entirely override whatever is
 inherited from another face.  For most possible attributes,
 the only relative value that users see is `unspecified'.
-However, for :height, floating point values are also relative.  */)
+However, for :height, floating point values are also relative.  */
+       attributes: const)
   (Lisp_Object attribute, Lisp_Object value)
 {
   if (EQ (value, Qunspecified) || (EQ (value, QCignore_defface)))
@@ -3668,7 +3579,7 @@ frames).  If FRAME is omitted or nil, use the selected 
frame.  */)
   (Lisp_Object symbol, Lisp_Object keyword, Lisp_Object frame)
 {
   struct frame *f = EQ (frame, Qt) ? NULL : decode_live_frame (frame);
-  Lisp_Object lface = lface_from_face_name (f, symbol, 1), value = Qnil;
+  Lisp_Object lface = lface_from_face_name (f, symbol, true), value = Qnil;
 
   CHECK_SYMBOL (symbol);
   CHECK_SYMBOL (keyword);
@@ -3751,8 +3662,8 @@ Default face attributes override any local face 
attributes.  */)
   struct frame *f = XFRAME (frame);
 
   CHECK_LIVE_FRAME (frame);
-  global_lface = lface_from_face_name (NULL, face, 1);
-  local_lface = lface_from_face_name (f, face, 0);
+  global_lface = lface_from_face_name (NULL, face, true);
+  local_lface = lface_from_face_name (f, face, false);
   if (NILP (local_lface))
     local_lface = Finternal_make_lisp_face (face, frame);
 
@@ -3841,7 +3752,7 @@ return the font name used for CHARACTER.  */)
   if (EQ (frame, Qt))
     {
       Lisp_Object result = Qnil;
-      Lisp_Object lface = lface_from_face_name (NULL, face, 1);
+      Lisp_Object lface = lface_from_face_name (NULL, face, true);
 
       if (!UNSPECIFIEDP (LFACE_WEIGHT (lface))
          && !EQ (LFACE_WEIGHT (lface), Qnormal))
@@ -3856,7 +3767,7 @@ return the font name used for CHARACTER.  */)
   else
     {
       struct frame *f = decode_live_frame (frame);
-      int face_id = lookup_named_face (f, face, 1);
+      int face_id = lookup_named_face (f, face, true);
       struct face *fface = FACE_FROM_ID (f, face_id);
 
       if (! fface)
@@ -3881,7 +3792,7 @@ return the font name used for CHARACTER.  */)
 }
 
 
-/* Compare face-attribute values v1 and v2 for equality.  Value is non-zero if
+/* Compare face-attribute values v1 and v2 for equality.  Value is true if
    all attributes are `equal'.  Tries to be fast because this function
    is called quite often.  */
 
@@ -3891,22 +3802,22 @@ face_attr_equal_p (Lisp_Object v1, Lisp_Object v2)
   /* Type can differ, e.g. when one attribute is unspecified, i.e. nil,
      and the other is specified.  */
   if (XTYPE (v1) != XTYPE (v2))
-    return 0;
+    return false;
 
   if (EQ (v1, v2))
-    return 1;
+    return true;
 
   switch (XTYPE (v1))
     {
     case Lisp_String:
       if (SBYTES (v1) != SBYTES (v2))
-       return 0;
+       return false;
 
       return memcmp (SDATA (v1), SDATA (v2), SBYTES (v1)) == 0;
 
     case_Lisp_Int:
     case Lisp_Symbol:
-      return 0;
+      return false;
 
     default:
       return !NILP (Fequal (v1, v2));
@@ -3914,7 +3825,7 @@ face_attr_equal_p (Lisp_Object v1, Lisp_Object v2)
 }
 
 
-/* Compare face vectors V1 and V2 for equality.  Value is non-zero if
+/* Compare face vectors V1 and V2 for equality.  Value is true if
    all attributes are `equal'.  Tries to be fast because this function
    is called quite often.  */
 
@@ -3922,7 +3833,7 @@ static bool
 lface_equal_p (Lisp_Object *v1, Lisp_Object *v2)
 {
   int i;
-  bool equal_p = 1;
+  bool equal_p = true;
 
   for (i = 1; i < LFACE_VECTOR_SIZE && equal_p; ++i)
     equal_p = face_attr_equal_p (v1[i], v2[i]);
@@ -3939,7 +3850,7 @@ If FRAME is t, report on the defaults for FACE1 and FACE2 
(for new frames).
 If FRAME is omitted or nil, use the selected frame.  */)
   (Lisp_Object face1, Lisp_Object face2, Lisp_Object frame)
 {
-  int equal_p;
+  bool equal_p;
   struct frame *f;
   Lisp_Object lface1, lface2;
 
@@ -3949,8 +3860,8 @@ If FRAME is omitted or nil, use the selected frame.  */)
      Emacs.  That frame is not an X frame.  */
   f = EQ (frame, Qt) ? NULL : decode_live_frame (frame);
 
-  lface1 = lface_from_face_name (f, face1, 1);
-  lface2 = lface_from_face_name (f, face2, 1);
+  lface1 = lface_from_face_name (f, face1, true);
+  lface2 = lface_from_face_name (f, face2, true);
   equal_p = lface_equal_p (XVECTOR (lface1)->contents,
                           XVECTOR (lface2)->contents);
   return equal_p ? Qt : Qnil;
@@ -3966,7 +3877,7 @@ If FRAME is omitted or nil, use the selected frame.  */)
   (Lisp_Object face, Lisp_Object frame)
 {
   struct frame *f = EQ (frame, Qt) ? NULL : decode_live_frame (frame);
-  Lisp_Object lface = lface_from_face_name (f, face, 1);
+  Lisp_Object lface = lface_from_face_name (f, face, true);
   int i;
 
   for (i = 1; i < LFACE_VECTOR_SIZE; ++i)
@@ -4019,12 +3930,12 @@ lface_hash (Lisp_Object *v)
 
 #ifdef HAVE_WINDOW_SYSTEM
 
-/* Return non-zero if LFACE1 and LFACE2 specify the same font (without
+/* Return true if LFACE1 and LFACE2 specify the same font (without
    considering charsets/registries).  They do if they specify the same
    family, point size, weight, width, slant, and font.  Both
    LFACE1 and LFACE2 must be fully-specified.  */
 
-static int
+static bool
 lface_same_font_attributes_p (Lisp_Object *lface1, Lisp_Object *lface2)
 {
   eassert (lface_fully_specified_p (lface1)
@@ -4181,10 +4092,12 @@ If FRAME is unspecified or nil, the current frame is 
used.  */)
   XColor cdef1, cdef2;
 
   if (!(CONSP (color1) && parse_rgb_list (color1, &cdef1))
-      && !(STRINGP (color1) && defined_color (f, SSDATA (color1), &cdef1, 0)))
+      && !(STRINGP (color1)
+          && defined_color (f, SSDATA (color1), &cdef1, false)))
     signal_error ("Invalid color", color1);
   if (!(CONSP (color2) && parse_rgb_list (color2, &cdef2))
-      && !(STRINGP (color2) && defined_color (f, SSDATA (color2), &cdef2, 0)))
+      && !(STRINGP (color2)
+          && defined_color (f, SSDATA (color2), &cdef2, false)))
     signal_error ("Invalid color", color2);
 
   return make_number (color_distance (&cdef1, &cdef2));
@@ -4500,7 +4413,7 @@ face_for_font (struct frame *f, Lisp_Object font_object, 
struct face *base_face)
    face isn't realized and cannot be realized.  */
 
 int
-lookup_named_face (struct frame *f, Lisp_Object symbol, int signal_p)
+lookup_named_face (struct frame *f, Lisp_Object symbol, bool signal_p)
 {
   Lisp_Object attrs[LFACE_VECTOR_SIZE];
   Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE];
@@ -4567,7 +4480,7 @@ lookup_basic_face (struct frame *f, int face_id)
 
   /* If there is a remapping entry, lookup the face using NAME, which will
      handle the remapping too.  */
-  remapped_face_id = lookup_named_face (f, name, 0);
+  remapped_face_id = lookup_named_face (f, name, false);
   if (remapped_face_id < 0)
     return face_id;            /* Give up. */
 
@@ -4669,7 +4582,7 @@ face_with_height (struct frame *f, int face_id, int 
height)
 
 int
 lookup_derived_face (struct frame *f, Lisp_Object symbol, int face_id,
-                    int signal_p)
+                    bool signal_p)
 {
   Lisp_Object attrs[LFACE_VECTOR_SIZE];
   Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE];
@@ -4695,7 +4608,7 @@ DEFUN ("face-attributes-as-vector", 
Fface_attributes_as_vector,
   lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE),
                        Qunspecified);
   merge_face_ref (XFRAME (selected_frame), plist, XVECTOR (lface)->contents,
-                 1, 0);
+                 true, 0);
   return lface;
 }
 
@@ -4760,7 +4673,7 @@ x_supports_face_attributes_p (struct frame *f,
       || (!UNSPECIFIEDP (attrs[LFACE_BOX_INDEX])
          && face_attr_equal_p (attrs[LFACE_BOX_INDEX],
                                def_attrs[LFACE_BOX_INDEX])))
-    return 0;
+    return false;
 
   /* Check font-related attributes, as those are the most commonly
      "unsupported" on a window-system (because of missing fonts).  */
@@ -4790,7 +4703,7 @@ x_supports_face_attributes_p (struct frame *f,
         supported.  */
       if (face->font == def_face->font
          || ! face->font)
-       return 0;
+       return false;
       for (i = FONT_TYPE_INDEX; i <= FONT_SIZE_INDEX; i++)
        if (! EQ (face->font->props[i], def_face->font->props[i]))
          {
@@ -4798,18 +4711,18 @@ x_supports_face_attributes_p (struct frame *f,
 
            if (i < FONT_FOUNDRY_INDEX || i > FONT_REGISTRY_INDEX
                || face->font->driver->case_sensitive)
-             return 1;
+             return true;
            s1 = SYMBOL_NAME (face->font->props[i]);
            s2 = SYMBOL_NAME (def_face->font->props[i]);
            if (! EQ (Fcompare_strings (s1, make_number (0), Qnil,
                                        s2, make_number (0), Qnil, Qt), Qt))
-             return 1;
+             return true;
          }
-      return 0;
+      return false;
     }
 
   /* Everything checks out, this face is supported.  */
-  return 1;
+  return true;
 }
 
 #endif /* HAVE_WINDOW_SYSTEM */
@@ -4858,7 +4771,7 @@ tty_supports_face_attributes_p (struct frame *f,
       || !UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX])
       || !UNSPECIFIEDP (attrs[LFACE_STRIKE_THROUGH_INDEX])
       || !UNSPECIFIEDP (attrs[LFACE_BOX_INDEX]))
-    return 0;
+    return false;
 
   /* Test for terminal `capabilities' (non-color character attributes).  */
 
@@ -4872,17 +4785,17 @@ tty_supports_face_attributes_p (struct frame *f,
       if (weight > 100)
        {
          if (def_weight > 100)
-           return 0;           /* same as default */
+           return false;       /* same as default */
          test_caps = TTY_CAP_BOLD;
        }
       else if (weight < 100)
        {
          if (def_weight < 100)
-           return 0;           /* same as default */
+           return false;       /* same as default */
          test_caps = TTY_CAP_DIM;
        }
       else if (def_weight == 100)
-       return 0;               /* same as default */
+       return false;           /* same as default */
     }
 
   /* font slant */
@@ -4892,7 +4805,7 @@ tty_supports_face_attributes_p (struct frame *f,
     {
       int def_slant = FONT_SLANT_NAME_NUMERIC (def_attrs[LFACE_SLANT_INDEX]);
       if (slant == 100 || slant == def_slant)
-       return 0; /* same as default */
+       return false;           /* same as default */
       else
        test_caps |= TTY_CAP_ITALIC;
     }
@@ -4902,11 +4815,11 @@ tty_supports_face_attributes_p (struct frame *f,
   if (!UNSPECIFIEDP (val))
     {
       if (STRINGP (val))
-       return 0;               /* ttys can't use colored underlines */
+       return false;           /* ttys can't use colored underlines */
       else if (EQ (CAR_SAFE (val), QCstyle) && EQ (CAR_SAFE (CDR_SAFE (val)), 
Qwave))
-       return 0;               /* ttys can't use wave underlines */
+       return false;           /* ttys can't use wave underlines */
       else if (face_attr_equal_p (val, def_attrs[LFACE_UNDERLINE_INDEX]))
-       return 0;               /* same as default */
+       return false;           /* same as default */
       else
        test_caps |= TTY_CAP_UNDERLINE;
     }
@@ -4916,7 +4829,7 @@ tty_supports_face_attributes_p (struct frame *f,
   if (!UNSPECIFIEDP (val))
     {
       if (face_attr_equal_p (val, def_attrs[LFACE_INVERSE_INDEX]))
-       return 0;               /* same as default */
+       return false;           /* same as default */
       else
        test_caps |= TTY_CAP_INVERSE;
     }
@@ -4931,12 +4844,12 @@ tty_supports_face_attributes_p (struct frame *f,
       Lisp_Object def_fg = def_attrs[LFACE_FOREGROUND_INDEX];
 
       if (face_attr_equal_p (fg, def_fg))
-       return 0;               /* same as default */
+       return false;           /* same as default */
       else if (! tty_lookup_color (f, fg, &fg_tty_color, &fg_std_color))
-       return 0;               /* not a valid color */
+       return false;           /* not a valid color */
       else if (color_distance (&fg_tty_color, &fg_std_color)
               > TTY_SAME_COLOR_THRESHOLD)
-       return 0;               /* displayed color is too different */
+       return false;           /* displayed color is too different */
       else
        /* Make sure the color is really different than the default.  */
        {
@@ -4944,7 +4857,7 @@ tty_supports_face_attributes_p (struct frame *f,
          if (tty_lookup_color (f, def_fg, &def_fg_color, 0)
              && (color_distance (&fg_tty_color, &def_fg_color)
                  <= TTY_SAME_COLOR_THRESHOLD))
-           return 0;
+           return false;
        }
     }
 
@@ -4955,12 +4868,12 @@ tty_supports_face_attributes_p (struct frame *f,
       Lisp_Object def_bg = def_attrs[LFACE_BACKGROUND_INDEX];
 
       if (face_attr_equal_p (bg, def_bg))
-       return 0;               /* same as default */
+       return false;           /* same as default */
       else if (! tty_lookup_color (f, bg, &bg_tty_color, &bg_std_color))
-       return 0;               /* not a valid color */
+       return false;           /* not a valid color */
       else if (color_distance (&bg_tty_color, &bg_std_color)
               > TTY_SAME_COLOR_THRESHOLD)
-       return 0;               /* displayed color is too different */
+       return false;           /* displayed color is too different */
       else
        /* Make sure the color is really different than the default.  */
        {
@@ -4968,7 +4881,7 @@ tty_supports_face_attributes_p (struct frame *f,
          if (tty_lookup_color (f, def_bg, &def_bg_color, 0)
              && (color_distance (&bg_tty_color, &def_bg_color)
                  <= TTY_SAME_COLOR_THRESHOLD))
-           return 0;
+           return false;
        }
     }
 
@@ -4983,7 +4896,7 @@ tty_supports_face_attributes_p (struct frame *f,
           - color_distance (&fg_tty_color, &bg_tty_color));
       if (delta_delta > TTY_SAME_COLOR_THRESHOLD
          || delta_delta < -TTY_SAME_COLOR_THRESHOLD)
-       return 0;
+       return false;
     }
 
 
@@ -5014,7 +4927,7 @@ satisfied by the tty display code's automatic 
substitution of a `dim'
 face for italic.  */)
   (Lisp_Object attributes, Lisp_Object display)
 {
-  bool supports = 0;
+  bool supports = false;
   int i;
   Lisp_Object frame;
   struct frame *f;
@@ -5049,7 +4962,7 @@ face for italic.  */)
 
   for (i = 0; i < LFACE_VECTOR_SIZE; i++)
     attrs[i] = Qunspecified;
-  merge_face_ref (f, attributes, attrs, 1, 0);
+  merge_face_ref (f, attributes, attrs, true, 0);
 
   def_face = FACE_FROM_ID (f, DEFAULT_FACE_ID);
   if (def_face == NULL)
@@ -5227,7 +5140,7 @@ face_fontset (Lisp_Object attrs[LFACE_VECTOR_SIZE])
 static bool
 realize_basic_faces (struct frame *f)
 {
-  bool success_p = 0;
+  bool success_p = false;
   ptrdiff_t count = SPECPDL_INDEX ();
 
   /* Block input here so that we won't be surprised by an X expose
@@ -5257,14 +5170,14 @@ realize_basic_faces (struct frame *f)
       /* Reflect changes in the `menu' face in menu bars.  */
       if (FRAME_FACE_CACHE (f)->menu_face_changed_p)
        {
-         FRAME_FACE_CACHE (f)->menu_face_changed_p = 0;
+         FRAME_FACE_CACHE (f)->menu_face_changed_p = false;
 #ifdef USE_X_TOOLKIT
          if (FRAME_WINDOW_P (f))
            x_update_menu_appearance (f);
 #endif
        }
 
-      success_p = 1;
+      success_p = true;
     }
 
   unbind_to (count, Qnil);
@@ -5286,7 +5199,7 @@ realize_default_face (struct frame *f)
   struct face *face;
 
   /* If the `default' face is not yet known, create it.  */
-  lface = lface_from_face_name (f, Qdefault, 0);
+  lface = lface_from_face_name (f, Qdefault, false);
   if (NILP (lface))
     {
        Lisp_Object frame;
@@ -5302,7 +5215,7 @@ realize_default_face (struct frame *f)
       XSETFONT (font_object, FRAME_FONT (f));
       set_lface_from_font (f, lface, font_object, f->default_face_done_p);
       ASET (lface, LFACE_FONTSET_INDEX, fontset_name (FRAME_FONTSET (f)));
-      f->default_face_done_p = 1;
+      f->default_face_done_p = true;
     }
 #endif /* HAVE_WINDOW_SYSTEM */
 
@@ -5344,7 +5257,7 @@ realize_default_face (struct frame *f)
       if (CONSP (color) && STRINGP (XCDR (color)))
        ASET (lface, LFACE_FOREGROUND_INDEX, XCDR (color));
       else if (FRAME_WINDOW_P (f))
-       return 0;
+       return false;
       else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f))
        ASET (lface, LFACE_FOREGROUND_INDEX, build_string (unspecified_fg));
       else
@@ -5359,7 +5272,7 @@ realize_default_face (struct frame *f)
       if (CONSP (color) && STRINGP (XCDR (color)))
        ASET (lface, LFACE_BACKGROUND_INDEX, XCDR (color));
       else if (FRAME_WINDOW_P (f))
-       return 0;
+       return false;
       else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f))
        ASET (lface, LFACE_BACKGROUND_INDEX, build_string (unspecified_bg));
       else
@@ -5382,7 +5295,7 @@ realize_default_face (struct frame *f)
       /* This can happen when making a frame on a display that does
         not support the default font.  */
       if (!face->font)
-       return 0;
+       return false;
 
       /* Otherwise, the font specified for the frame was not
         acceptable as a font for the default face (perhaps because
@@ -5392,7 +5305,7 @@ realize_default_face (struct frame *f)
     }
 #endif /* HAVE_X_WINDOWS */
 #endif /* HAVE_WINDOW_SYSTEM */
-  return 1;
+  return true;
 }
 
 
@@ -5404,12 +5317,12 @@ static void
 realize_named_face (struct frame *f, Lisp_Object symbol, int id)
 {
   struct face_cache *c = FRAME_FACE_CACHE (f);
-  Lisp_Object lface = lface_from_face_name (f, symbol, 0);
+  Lisp_Object lface = lface_from_face_name (f, symbol, false);
   Lisp_Object attrs[LFACE_VECTOR_SIZE];
   Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE];
 
   /* The default face must exist and be fully specified.  */
-  get_lface_attributes_no_remap (f, Qdefault, attrs, 1);
+  get_lface_attributes_no_remap (f, Qdefault, attrs, true);
   check_lface_attrs (attrs);
   eassert (lface_fully_specified_p (attrs));
 
@@ -5422,7 +5335,7 @@ realize_named_face (struct frame *f, Lisp_Object symbol, 
int id)
     }
 
   /* Merge SYMBOL's face with the default face.  */
-  get_lface_attributes_no_remap (f, symbol, symbol_attrs, 1);
+  get_lface_attributes_no_remap (f, symbol, symbol_attrs, true);
   merge_face_vectors (f, symbol_attrs, attrs, 0);
 
   /* Realize the face.  */
@@ -5494,7 +5407,7 @@ realize_non_ascii_face (struct frame *f, Lisp_Object 
font_object,
        && FONT_WEIGHT_NUMERIC (font_object) <= 100);
 
   /* Don't try to free the colors copied bitwise from BASE_FACE.  */
-  face->colors_copied_bitwise_p = 1;
+  face->colors_copied_bitwise_p = true;
   face->font = NILP (font_object) ? NULL : XFONT_OBJECT (font_object);
   face->gc = 0;
 
@@ -5578,7 +5491,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
   if (face->font
       && FONT_WEIGHT_NAME_NUMERIC (attrs[LFACE_WEIGHT_INDEX]) > 100
       && FONT_WEIGHT_NUMERIC (attrs[LFACE_FONT_INDEX]) <= 100)
-    face->overstrike = 1;
+    face->overstrike = true;
 
   /* Load colors, and set remaining attributes.  */
 
@@ -5603,7 +5516,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
       face->box = FACE_SIMPLE_BOX;
       face->box_line_width = XINT (box);
       face->box_color = face->foreground;
-      face->box_color_defaulted_p = 1;
+      face->box_color_defaulted_p = true;
     }
   else if (CONSP (box))
     {
@@ -5611,7 +5524,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
         being one of `raised' or `sunken'.  */
       face->box = FACE_SIMPLE_BOX;
       face->box_color = face->foreground;
-      face->box_color_defaulted_p = 1;
+      face->box_color_defaulted_p = true;
       face->box_line_width = 1;
 
       while (CONSP (box))
@@ -5637,7 +5550,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
                {
                  face->box_color = load_color (f, face, value,
                                                LFACE_BOX_INDEX);
-                 face->use_box_color_for_shadows_p = 1;
+                 face->use_box_color_for_shadows_p = true;
                }
            }
          else if (EQ (keyword, QCstyle))
@@ -5656,34 +5569,34 @@ realize_x_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
   if (EQ (underline, Qt))
     {
       /* Use default color (same as foreground color).  */
-      face->underline_p = 1;
+      face->underline_p = true;
       face->underline_type = FACE_UNDER_LINE;
-      face->underline_defaulted_p = 1;
+      face->underline_defaulted_p = true;
       face->underline_color = 0;
     }
   else if (STRINGP (underline))
     {
       /* Use specified color.  */
-      face->underline_p = 1;
+      face->underline_p = true;
       face->underline_type = FACE_UNDER_LINE;
-      face->underline_defaulted_p = 0;
+      face->underline_defaulted_p = false;
       face->underline_color
        = load_color (f, face, underline,
                      LFACE_UNDERLINE_INDEX);
     }
   else if (NILP (underline))
     {
-      face->underline_p = 0;
-      face->underline_defaulted_p = 0;
+      face->underline_p = false;
+      face->underline_defaulted_p = false;
       face->underline_color = 0;
     }
   else if (CONSP (underline))
     {
       /* `(:color COLOR :style STYLE)'.
          STYLE being one of `line' or `wave'. */
-      face->underline_p = 1;
+      face->underline_p = true;
       face->underline_color = 0;
-      face->underline_defaulted_p = 1;
+      face->underline_defaulted_p = true;
       face->underline_type = FACE_UNDER_LINE;
 
       /* FIXME?  This is also not robust about checking the precise form.
@@ -5704,12 +5617,12 @@ realize_x_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
             {
               if (EQ (value, Qforeground_color))
                 {
-                  face->underline_defaulted_p = 1;
+                  face->underline_defaulted_p = true;
                   face->underline_color = 0;
                 }
               else if (STRINGP (value))
                 {
-                  face->underline_defaulted_p = 0;
+                  face->underline_defaulted_p = false;
                   face->underline_color = load_color (f, face, value,
                                                       LFACE_UNDERLINE_INDEX);
                 }
@@ -5730,13 +5643,13 @@ realize_x_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
       face->overline_color
        = load_color (f, face, attrs[LFACE_OVERLINE_INDEX],
                      LFACE_OVERLINE_INDEX);
-      face->overline_p = 1;
+      face->overline_p = true;
     }
   else if (EQ (overline, Qt))
     {
       face->overline_color = face->foreground;
-      face->overline_color_defaulted_p = 1;
-      face->overline_p = 1;
+      face->overline_color_defaulted_p = true;
+      face->overline_p = true;
     }
 
   strike_through = attrs[LFACE_STRIKE_THROUGH_INDEX];
@@ -5745,13 +5658,13 @@ realize_x_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
       face->strike_through_color
        = load_color (f, face, attrs[LFACE_STRIKE_THROUGH_INDEX],
                      LFACE_STRIKE_THROUGH_INDEX);
-      face->strike_through_p = 1;
+      face->strike_through_p = true;
     }
   else if (EQ (strike_through, Qt))
     {
       face->strike_through_color = face->foreground;
-      face->strike_through_color_defaulted_p = 1;
-      face->strike_through_p = 1;
+      face->strike_through_color_defaulted_p = true;
+      face->strike_through_p = true;
     }
 
   stipple = attrs[LFACE_STIPPLE_INDEX];
@@ -5765,15 +5678,15 @@ realize_x_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE])
 
 /* Map a specified color of face FACE on frame F to a tty color index.
    IDX is either LFACE_FOREGROUND_INDEX or LFACE_BACKGROUND_INDEX, and
-   specifies which color to map.  Set *DEFAULTED to 1 if mapping to the
+   specifies which color to map.  Set *DEFAULTED to true if mapping to the
    default foreground/background colors.  */
 
 static void
 map_tty_color (struct frame *f, struct face *face,
-              enum lface_attribute_index idx, int *defaulted)
+              enum lface_attribute_index idx, bool *defaulted)
 {
   Lisp_Object frame, color, def;
-  int foreground_p = idx == LFACE_FOREGROUND_INDEX;
+  bool foreground_p = idx == LFACE_FOREGROUND_INDEX;
   unsigned long default_pixel =
     foreground_p ? FACE_TTY_DEFAULT_FG_COLOR : FACE_TTY_DEFAULT_BG_COLOR;
   unsigned long pixel = default_pixel;
@@ -5815,7 +5728,7 @@ map_tty_color (struct frame *f, struct face *face,
              else
                pixel = FRAME_BACKGROUND_PIXEL (f);
              face->lface[idx] = tty_color_name (f, pixel);
-             *defaulted = 1;
+             *defaulted = true;
            }
          else if (pixel == default_other_pixel)
            {
@@ -5824,7 +5737,7 @@ map_tty_color (struct frame *f, struct face *face,
              else
                pixel = FRAME_FOREGROUND_PIXEL (f);
              face->lface[idx] = tty_color_name (f, pixel);
-             *defaulted = 1;
+             *defaulted = true;
            }
        }
 #endif /* MSDOS */
@@ -5847,7 +5760,7 @@ realize_tty_face (struct face_cache *cache,
 {
   struct face *face;
   int weight, slant;
-  int face_colors_defaulted = 0;
+  bool face_colors_defaulted = false;
   struct frame *f = cache->f;
 
   /* Frame must be a termcap frame.  */
@@ -5855,7 +5768,7 @@ realize_tty_face (struct face_cache *cache,
 
   /* Allocate a new realized face.  */
   face = make_realized_face (attrs);
-#if 0
+#if false
   face->font_name = FRAME_MSDOS_P (cache->f) ? "ms-dos" : "tty";
 #endif
 
@@ -5863,13 +5776,13 @@ realize_tty_face (struct face_cache *cache,
   weight = FONT_WEIGHT_NAME_NUMERIC (attrs[LFACE_WEIGHT_INDEX]);
   slant = FONT_SLANT_NAME_NUMERIC (attrs[LFACE_SLANT_INDEX]);
   if (weight > 100)
-    face->tty_bold_p = 1;
+    face->tty_bold_p = true;
   if (slant != 100)
-    face->tty_italic_p = 1;
+    face->tty_italic_p = true;
   if (!NILP (attrs[LFACE_UNDERLINE_INDEX]))
-    face->tty_underline_p = 1;
+    face->tty_underline_p = true;
   if (!NILP (attrs[LFACE_INVERSE_INDEX]))
-    face->tty_reverse_p = 1;
+    face->tty_reverse_p = true;
 
   /* Map color names to color indices.  */
   map_tty_color (f, face, LFACE_FOREGROUND_INDEX, &face_colors_defaulted);
@@ -5889,7 +5802,7 @@ realize_tty_face (struct face_cache *cache,
       && face->tty_bold_p
       && face->background == FACE_TTY_DEFAULT_FG_COLOR
       && face->foreground == FACE_TTY_DEFAULT_BG_COLOR)
-    face->tty_bold_p = 0;
+    face->tty_bold_p = false;
 
   return face;
 }
@@ -5907,7 +5820,7 @@ is non-nil.  */)
   (Lisp_Object suppress)
 {
   tty_suppress_bold_inverse_default_colors_p = !NILP (suppress);
-  ++face_change_count;
+  face_change = true;
   return suppress;
 }
 
@@ -5938,7 +5851,7 @@ compute_char_face (struct frame *f, int ch, Lisp_Object 
prop)
       Lisp_Object attrs[LFACE_VECTOR_SIZE];
       struct face *default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID);
       memcpy (attrs, default_face->lface, sizeof attrs);
-      merge_face_ref (f, prop, attrs, 1, 0);
+      merge_face_ref (f, prop, attrs, true, 0);
       face_id = lookup_face (f, attrs);
     }
 
@@ -5956,7 +5869,7 @@ compute_char_face (struct frame *f, int ch, Lisp_Object 
prop)
    LIMIT is a position not to scan beyond.  That is to limit the time
    this function can take.
 
-   If MOUSE is non-zero, use the character's mouse-face, not its face.
+   If MOUSE, use the character's mouse-face, not its face.
 
    BASE_FACE_ID, if non-negative, specifies a base face id to use
    instead of DEFAULT_FACE_ID.
@@ -5966,7 +5879,7 @@ compute_char_face (struct frame *f, int ch, Lisp_Object 
prop)
 int
 face_at_buffer_position (struct window *w, ptrdiff_t pos,
                         ptrdiff_t *endptr, ptrdiff_t limit,
-                        int mouse, int base_face_id)
+                        bool mouse, int base_face_id)
 {
   struct frame *f = XFRAME (w->frame);
   Lisp_Object attrs[LFACE_VECTOR_SIZE];
@@ -5999,7 +5912,7 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos,
   {
     ptrdiff_t next_overlay;
 
-    GET_OVERLAYS_AT (pos, overlay_vec, noverlays, &next_overlay, 0);
+    GET_OVERLAYS_AT (pos, overlay_vec, noverlays, &next_overlay, false);
     if (next_overlay < endpos)
       endpos = next_overlay;
   }
@@ -6032,7 +5945,7 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos,
 
   /* Merge in attributes specified via text properties.  */
   if (!NILP (prop))
-    merge_face_ref (f, prop, attrs, 1, 0);
+    merge_face_ref (f, prop, attrs, true, 0);
 
   /* Now merge the overlay data.  */
   noverlays = sort_overlays (overlay_vec, noverlays, w);
@@ -6043,7 +5956,7 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos,
 
       prop = Foverlay_get (overlay_vec[i], propname);
       if (!NILP (prop))
-       merge_face_ref (f, prop, attrs, 1, 0);
+       merge_face_ref (f, prop, attrs, true, 0);
 
       oend = OVERLAY_END (overlay_vec[i]);
       oendpos = OVERLAY_POSITION (oend);
@@ -6069,7 +5982,7 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos,
 int
 face_for_overlay_string (struct window *w, ptrdiff_t pos,
                         ptrdiff_t *endptr, ptrdiff_t limit,
-                        int mouse, Lisp_Object overlay)
+                        bool mouse, Lisp_Object overlay)
 {
   struct frame *f = XFRAME (w->frame);
   Lisp_Object attrs[LFACE_VECTOR_SIZE];
@@ -6108,7 +6021,7 @@ face_for_overlay_string (struct window *w, ptrdiff_t pos,
 
   /* Merge in attributes specified via text properties.  */
   if (!NILP (prop))
-    merge_face_ref (f, prop, attrs, 1, 0);
+    merge_face_ref (f, prop, attrs, true, 0);
 
   *endptr = endpos;
 
@@ -6130,7 +6043,7 @@ face_for_overlay_string (struct window *w, ptrdiff_t pos,
    BASE_FACE_ID is the id of a face to merge with.  For strings coming
    from overlays or the `display' property it is the face at BUFPOS.
 
-   If MOUSE_P is non-zero, use the character's mouse-face, not its face.
+   If MOUSE_P, use the character's mouse-face, not its face.
 
    Set *ENDPTR to the next position where to check for faces in
    STRING; -1 if the face is constant from POS to the end of the
@@ -6143,7 +6056,7 @@ int
 face_at_string_position (struct window *w, Lisp_Object string,
                         ptrdiff_t pos, ptrdiff_t bufpos,
                         ptrdiff_t *endptr, enum face_id base_face_id,
-                        int mouse_p)
+                        bool mouse_p)
 {
   Lisp_Object prop, position, end, limit;
   struct frame *f = XFRAME (WINDOW_FRAME (w));
@@ -6188,7 +6101,7 @@ face_at_string_position (struct window *w, Lisp_Object 
string,
 
   /* Merge in attributes specified via text properties.  */
   if (!NILP (prop))
-    merge_face_ref (f, prop, attrs, 1, 0);
+    merge_face_ref (f, prop, attrs, true, 0);
 
   /* Look up a realized face with the given face attributes,
      or realize a new one for ASCII characters.  */
@@ -6397,9 +6310,17 @@ DEFUN ("show-face-resources", Fshow_face_resources, 
Sshow_face_resources,
 void
 syms_of_xfaces (void)
 {
+  /* The symbols `face' and `mouse-face' used as text properties.  */
   DEFSYM (Qface, "face");
+
+  /* Property for basic faces which other faces cannot inherit.  */
   DEFSYM (Qface_no_inherit, "face-no-inherit");
+
+  /* Error symbol for wrong_type_argument in load_pixmap.  */
   DEFSYM (Qbitmap_spec_p, "bitmap-spec-p");
+
+  /* The name of the function to call when the background of the frame
+     has changed, frame_set_background_mode.  */
   DEFSYM (Qframe_set_background_mode, "frame-set-background-mode");
 
   /* Lisp face attribute keywords.  */
@@ -6442,12 +6363,22 @@ syms_of_xfaces (void)
   DEFSYM (Qultra_bold, "ultra-bold");
   DEFSYM (Qoblique, "oblique");
   DEFSYM (Qitalic, "italic");
+
+  /* The symbols `foreground-color' and `background-color' which can be
+     used as part of a `face' property.  This is for compatibility with
+     Emacs 20.2.  */
   DEFSYM (Qbackground_color, "background-color");
   DEFSYM (Qforeground_color, "foreground-color");
+
   DEFSYM (Qunspecified, "unspecified");
   DEFSYM (QCignore_defface, ":ignore-defface");
 
+  /* The symbol `face-alias'.  A symbol having that property is an
+     alias for another face.  Value of the property is the name of
+     the aliased face.  */
   DEFSYM (Qface_alias, "face-alias");
+
+  /* Names of basic faces.  */
   DEFSYM (Qdefault, "default");
   DEFSYM (Qtool_bar, "tool-bar");
   DEFSYM (Qregion, "region");
@@ -6460,13 +6391,23 @@ syms_of_xfaces (void)
   DEFSYM (Qmouse, "mouse");
   DEFSYM (Qmode_line_inactive, "mode-line-inactive");
   DEFSYM (Qvertical_border, "vertical-border");
+
+  /* TTY color-related functions (defined in tty-colors.el).  */
   DEFSYM (Qwindow_divider, "window-divider");
   DEFSYM (Qwindow_divider_first_pixel, "window-divider-first-pixel");
   DEFSYM (Qwindow_divider_last_pixel, "window-divider-last-pixel");
   DEFSYM (Qtty_color_desc, "tty-color-desc");
   DEFSYM (Qtty_color_standard_values, "tty-color-standard-values");
   DEFSYM (Qtty_color_by_index, "tty-color-by-index");
+
+  /* The name of the function used to compute colors on TTYs.  */
   DEFSYM (Qtty_color_alist, "tty-color-alist");
+
+  /* Allowed scalable fonts.  A value of nil means don't allow any
+     scalable fonts.  A value of t means allow the use of any scalable
+     font.  Otherwise, value must be a list of regular expressions.  A
+     font may be scaled if its name matches a regular expression in the
+     list.  */
   DEFSYM (Qscalable_fonts_allowed, "scalable-fonts-allowed");
 
   Vparam_value_alist = list1 (Fcons (Qnil, Qnil));
diff --git a/src/xfns.c b/src/xfns.c
index aaa75f2..65eb6b4 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -1,6 +1,6 @@
 /* Functions for the X window system.
 
-Copyright (C) 1989, 1992-2014 Free Software Foundation, Inc.
+Copyright (C) 1989, 1992-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -46,12 +46,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include <sys/types.h>
 #include <sys/stat.h>
 
-#if 1 /* Used to be #ifdef EMACS_BITMAP_FILES, but this should always work.  */
 #include "bitmaps/gray.xbm"
-#else
-#include <X11/bitmaps/gray>
-#endif
-
 #include "xsettings.h"
 
 #ifdef HAVE_XRANDR
@@ -125,10 +120,6 @@ extern LWLIB_ID widget_id_tick;
 
 #define MAXREQUEST(dpy) (XMaxRequestSize (dpy))
 
-static Lisp_Object Qundefined_color;
-static Lisp_Object Qcompound_text, Qcancel_timer;
-Lisp_Object Qfont_param;
-
 #ifdef GLYPH_DEBUG
 static ptrdiff_t image_cache_refcount;
 static int dpyinfo_refcount;
@@ -186,7 +177,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr)
 {
   int win_x, win_y, outer_x IF_LINT (= 0), outer_y IF_LINT (= 0);
   int real_x = 0, real_y = 0;
-  int had_errors = 0;
+  bool had_errors = false;
   Window win = f->output_data.x->parent_desc;
   Atom actual_type;
   unsigned long actual_size, bytes_remaining;
@@ -390,7 +381,7 @@ bool
 x_defined_color (struct frame *f, const char *color_name,
                 XColor *color, bool alloc_p)
 {
-  bool success_p = 0;
+  bool success_p = false;
   Display *dpy = FRAME_X_DISPLAY (f);
   Colormap cmap = FRAME_X_COLORMAP (f);
 
@@ -419,9 +410,9 @@ x_decode_color (struct frame *f, Lisp_Object color_name, 
int mono_color)
 
   CHECK_STRING (color_name);
 
-#if 0 /* Don't do this.  It's wrong when we're not using the default
-        colormap, it makes freeing difficult, and it's probably not
-        an important optimization.  */
+#if false /* Don't do this.  It's wrong when we're not using the default
+            colormap, it makes freeing difficult, and it's probably not
+            an important optimization.  */
   if (strcmp (SDATA (color_name), "black") == 0)
     return BLACK_PIX_DEFAULT (f);
   else if (strcmp (SDATA (color_name), "white") == 0)
@@ -434,7 +425,7 @@ x_decode_color (struct frame *f, Lisp_Object color_name, 
int mono_color)
 
   /* x_defined_color is responsible for coping with failures
      by looking for a near-miss.  */
-  if (x_defined_color (f, SSDATA (color_name), &cdef, 1))
+  if (x_defined_color (f, SSDATA (color_name), &cdef, true))
     return cdef.pixel;
 
   signal_error ("Undefined color", color_name);
@@ -481,10 +472,10 @@ x_set_tool_bar_position (struct frame *f,
 /* Set icon from FILE for frame F.  By using GTK functions the icon
    may be any format that GdkPixbuf knows about, i.e. not just bitmaps.  */
 
-int
+bool
 xg_set_icon (struct frame *f, Lisp_Object file)
 {
-  int result = 0;
+  bool result = false;
   Lisp_Object found;
 
   found = x_find_image_file (file);
@@ -504,7 +495,7 @@ xg_set_icon (struct frame *f, Lisp_Object file)
                               pixbuf);
          g_object_unref (pixbuf);
 
-         result = 1;
+         result = true;
        }
       else
        g_error_free (err);
@@ -515,17 +506,17 @@ xg_set_icon (struct frame *f, Lisp_Object file)
   return result;
 }
 
-int
+bool
 xg_set_icon_from_xpm_data (struct frame *f, const char **data)
 {
   GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data (data);
 
   if (!pixbuf)
-    return 0;
+    return false;
 
   gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), pixbuf);
   g_object_unref (pixbuf);
-  return 1;
+  return true;
 }
 #endif /* USE_GTK */
 
@@ -782,20 +773,20 @@ static void
 x_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
   unsigned long fore_pixel, pixel;
-  bool fore_pixel_allocated_p = 0, pixel_allocated_p = 0;
+  bool fore_pixel_allocated_p = false, pixel_allocated_p = false;
   struct x_output *x = f->output_data.x;
 
   if (!NILP (Vx_cursor_fore_pixel))
     {
       fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel,
                                   WHITE_PIX_DEFAULT (f));
-      fore_pixel_allocated_p = 1;
+      fore_pixel_allocated_p = true;
     }
   else
     fore_pixel = FRAME_BACKGROUND_PIXEL (f);
 
   pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
-  pixel_allocated_p = 1;
+  pixel_allocated_p = true;
 
   /* Make sure that the cursor color differs from the background color.  */
   if (pixel == FRAME_BACKGROUND_PIXEL (f))
@@ -803,7 +794,7 @@ x_set_cursor_color (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
       if (pixel_allocated_p)
        {
          x_free_colors (f, &pixel, 1);
-         pixel_allocated_p = 0;
+         pixel_allocated_p = false;
        }
 
       pixel = x->mouse_pixel;
@@ -812,7 +803,7 @@ x_set_cursor_color (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
          if (fore_pixel_allocated_p)
            {
              x_free_colors (f, &fore_pixel, 1);
-             fore_pixel_allocated_p = 0;
+             fore_pixel_allocated_p = false;
            }
          fore_pixel = FRAME_BACKGROUND_PIXEL (f);
        }
@@ -837,8 +828,8 @@ x_set_cursor_color (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
 
       if (FRAME_VISIBLE_P (f))
        {
-         x_update_cursor (f, 0);
-         x_update_cursor (f, 1);
+         x_update_cursor (f, false);
+         x_update_cursor (f, true);
        }
     }
 
@@ -898,7 +889,7 @@ x_set_cursor_type (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
 static void
 x_set_icon_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
-  int result;
+  bool result;
 
   if (STRINGP (arg))
     {
@@ -930,7 +921,7 @@ x_set_icon_type (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
 static void
 x_set_icon_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
-  int result;
+  bool result;
 
   if (STRINGP (arg))
     {
@@ -996,7 +987,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, 
Lisp_Object oldval)
       FRAME_EXTERNAL_MENU_BAR (f) = 1;
       if (FRAME_X_P (f) && f->output_data.x->menubar_widget == 0)
        /* Make sure next redisplay shows the menu bar.  */
-       XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = 1;
+       XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = true;
     }
   else
     {
@@ -1009,7 +1000,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, 
Lisp_Object oldval)
 #else /* not USE_X_TOOLKIT && not USE_GTK */
   FRAME_MENU_BAR_LINES (f) = nlines;
   FRAME_MENU_BAR_HEIGHT (f) = nlines * FRAME_LINE_HEIGHT (f);
-  adjust_frame_size (f, -1, -1, 2, 1, Qmenu_bar_lines);
+  adjust_frame_size (f, -1, -1, 2, true, Qmenu_bar_lines);
   if (FRAME_X_WINDOW (f))
     x_clear_under_internal_border (f);
 
@@ -1075,19 +1066,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object 
value, Lisp_Object oldval)
   else
     nlines = 0;
 
-#ifdef USE_GTK
   x_change_tool_bar_height (f, nlines * FRAME_LINE_HEIGHT (f));
-#else /* !USE_GTK */
-  if (nlines == 0)
-    x_change_tool_bar_height (f, nlines * FRAME_LINE_HEIGHT (f));
-  else
-    {
-      f->n_tool_bar_rows = 0;
-      FRAME_TOOL_BAR_LINES (f) = nlines;
-      adjust_frame_glyphs (f);
-      SET_FRAME_GARBAGED (f);
-    }
-#endif /* USE_GTK */
 }
 
 
@@ -1100,17 +1079,17 @@ x_change_tool_bar_height (struct frame *f, int height)
   FRAME_TOOL_BAR_HEIGHT (f) = 0;
   if (height)
     {
-      FRAME_EXTERNAL_TOOL_BAR (f) = 1;
+      FRAME_EXTERNAL_TOOL_BAR (f) = true;
       if (FRAME_X_P (f) && f->output_data.x->toolbar_widget == 0)
        /* Make sure next redisplay shows the tool bar.  */
-       XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = 1;
+       XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = true;
       update_frame_tool_bar (f);
     }
   else
     {
       if (FRAME_EXTERNAL_TOOL_BAR (f))
         free_frame_tool_bar (f);
-      FRAME_EXTERNAL_TOOL_BAR (f) = 0;
+      FRAME_EXTERNAL_TOOL_BAR (f) = false;
     }
 #else /* !USE_GTK */
   int unit = FRAME_LINE_HEIGHT (f);
@@ -1124,10 +1103,6 @@ x_change_tool_bar_height (struct frame *f, int height)
   /* Recalculate tool bar and frame text sizes.  */
   FRAME_TOOL_BAR_HEIGHT (f) = height;
   FRAME_TOOL_BAR_LINES (f) = lines;
-/**   FRAME_TEXT_HEIGHT (f) **/
-/**     = FRAME_PIXEL_TO_TEXT_HEIGHT (f, FRAME_PIXEL_HEIGHT (f)); **/
-/**   FRAME_LINES (f) **/
-/**     = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, FRAME_PIXEL_HEIGHT (f)); **/
   /* Store the `tool-bar-lines' and `height' frame parameters.  */
   store_frame_param (f, Qtool_bar_lines, make_number (lines));
   store_frame_param (f, Qheight, make_number (FRAME_LINES (f)));
@@ -1150,9 +1125,16 @@ x_change_tool_bar_height (struct frame *f, int height)
   /* Recalculate toolbar height.  */
   f->n_tool_bar_rows = 0;
 
-  adjust_frame_size (f, -1, -1, (old_height == 0 || height == 0) ? 2 : 4, 0,
-                    Qtool_bar_lines);
+  adjust_frame_size (f, -1, -1,
+                    (!f->tool_bar_redisplayed_once ? 1
+                     : (old_height == 0 || height == 0) ? 2
+                     : 4),
+                    false, Qtool_bar_lines);
 
+  /* adjust_frame_size might not have done anything, garbage frame
+     here.  */
+  adjust_frame_glyphs (f);
+  SET_FRAME_GARBAGED (f);
   if (FRAME_X_WINDOW (f))
     x_clear_under_internal_border (f);
 
@@ -1179,7 +1161,7 @@ x_set_internal_border_width (struct frame *f, Lisp_Object 
arg, Lisp_Object oldva
 
       if (FRAME_X_WINDOW (f) != 0)
        {
-         adjust_frame_size (f, -1, -1, 3, 0, Qinternal_border_width);
+         adjust_frame_size (f, -1, -1, 3, false, Qinternal_border_width);
 
 #ifdef USE_GTK
          xg_clear_under_internal_border (f);
@@ -1284,14 +1266,14 @@ x_set_scroll_bar_background (struct frame *f, 
Lisp_Object value, Lisp_Object old
 
    Store the byte length of resulting text in *TEXT_BYTES.
 
-   If the text contains only ASCII and Latin-1, store 1 in *STRING_P,
+   If the text contains only ASCII and Latin-1, store true in *STRING_P,
    which means that the `encoding' of the result can be `STRING'.
-   Otherwise store 0 in *STRINGP, which means that the `encoding' of
+   Otherwise store false in *STRINGP, which means that the `encoding' of
    the result should be `COMPOUND_TEXT'.  */
 
 static unsigned char *
 x_encode_text (Lisp_Object string, Lisp_Object coding_system,
-              ptrdiff_t *text_bytes, int *stringp, bool *freep)
+              ptrdiff_t *text_bytes, bool *stringp, bool *freep)
 {
   int result = string_xstring_p (string);
   struct coding_system coding;
@@ -1300,8 +1282,8 @@ x_encode_text (Lisp_Object string, Lisp_Object 
coding_system,
     {
       /* No multibyte character in OBJ.  We need not encode it.  */
       *text_bytes = SBYTES (string);
-      *stringp = 1;
-      *freep = 0;
+      *stringp = true;
+      *freep = false;
       return SDATA (string);
     }
 
@@ -1315,7 +1297,7 @@ x_encode_text (Lisp_Object string, Lisp_Object 
coding_system,
                        SCHARS (string), SBYTES (string), Qnil);
   *text_bytes = coding.produced;
   *stringp = (result == 1 || !EQ (coding_system, Qcompound_text));
-  *freep = 1;
+  *freep = true;
   return coding.destination;
 }
 
@@ -1333,8 +1315,8 @@ x_set_name_internal (struct frame *f, Lisp_Object name)
       {
        XTextProperty text, icon;
        ptrdiff_t bytes;
-       int stringp;
-       bool do_free_icon_value = 0, do_free_text_value = 0;
+       bool stringp;
+       bool do_free_icon_value = false, do_free_text_value = false;
        Lisp_Object coding_system;
        Lisp_Object encoded_name;
        Lisp_Object encoded_icon_name;
@@ -1482,7 +1464,7 @@ x_set_name (struct frame *f, Lisp_Object name, bool 
explicit)
 static void
 x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
-  x_set_name (f, arg, 1);
+  x_set_name (f, arg, true);
 }
 
 /* This function should be called by Emacs redisplay code to set the
@@ -1491,7 +1473,7 @@ x_explicitly_set_name (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
 void
 x_implicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
-  x_set_name (f, arg, 0);
+  x_set_name (f, arg, false);
 }
 
 /* Change the title of frame F to NAME.
@@ -1570,7 +1552,7 @@ static Lisp_Object
 x_default_scroll_bar_color_parameter (struct frame *f,
                                      Lisp_Object alist, Lisp_Object prop,
                                      const char *xprop, const char *xclass,
-                                     int foreground_p)
+                                     bool foreground_p)
 {
   struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
   Lisp_Object tem;
@@ -1627,9 +1609,9 @@ hack_wm_protocols (struct frame *f, Widget widget)
 {
   Display *dpy = XtDisplay (widget);
   Window w = XtWindow (widget);
-  int need_delete = 1;
-  int need_focus = 1;
-  int need_save = 1;
+  bool need_delete = true;
+  bool need_focus = true;
+  bool need_save = true;
 
   block_input ();
   {
@@ -1653,20 +1635,20 @@ hack_wm_protocols (struct frame *f, Widget widget)
            nitems--;
            if (atoms[nitems]
                == FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window)
-             need_delete = 0;
+             need_delete = false;
            else if (atoms[nitems]
                     == FRAME_DISPLAY_INFO (f)->Xatom_wm_take_focus)
-             need_focus = 0;
+             need_focus = false;
            else if (atoms[nitems]
                     == FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself)
-             need_save = 0;
+             need_save = false;
          }
       }
     if (catoms)
       XFree (catoms);
   }
   {
-    Atom props [10];
+    Atom props[10];
     int count = 0;
     if (need_delete)
       props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window;
@@ -1718,17 +1700,18 @@ static const char xic_default_fontset[] = 
"-*-*-*-r-normal--14-*-*-*-*-*-*-*";
 /* Create an Xt fontset spec from the name of a base font.
    If `motif' is True use the Motif syntax.  */
 char *
-xic_create_fontsetname (const char *base_fontname, int motif)
+xic_create_fontsetname (const char *base_fontname, bool motif)
 {
   const char *sep = motif ? ";" : ",";
   char *fontsetname;
+  char *z;
 
   /* Make a fontset name from the base font name.  */
   if (xic_default_fontset == base_fontname)
     {
       /* There is no base font name, use the default.  */
       fontsetname = xmalloc (strlen (base_fontname) + 2);
-      strcpy (fontsetname, base_fontname);
+      z = stpcpy (fontsetname, base_fontname);
     }
   else
     {
@@ -1749,9 +1732,9 @@ xic_create_fontsetname (const char *base_fontname, int 
motif)
             Use the specified font plus the default.  */
          fontsetname = xmalloc (strlen (base_fontname)
                                 + strlen (xic_default_fontset) + 3);
-         strcpy (fontsetname, base_fontname);
-         strcat (fontsetname, sep);
-         strcat (fontsetname, xic_default_fontset);
+         z = stpcpy (fontsetname, base_fontname);
+         z = stpcpy (z, sep);
+         z = stpcpy (z, xic_default_fontset);
        }
       else
        {
@@ -1812,27 +1795,26 @@ xic_create_fontsetname (const char *base_fontname, int 
motif)
          /* Build the font spec that matches all.  */
          len = p - p2 + strlen (allcs) + strlen (all) + strlen (allfamilies) + 
1;
          font_all = alloca (len);
-         strcpy (font_all, allfamilies);
-         strcat (font_all, all);
-         memcpy (font_all + strlen (all) + strlen (allfamilies), p2, p - p2);
-         strcpy (font_all + strlen (all) + strlen (allfamilies) + (p - p2),
-                 allcs);
+         z = stpcpy (font_all, allfamilies);
+         z = stpcpy (z, all);
+         memcpy (z, p2, p - p2);
+         strcpy (z + (p - p2), allcs);
 
          /* Build the actual font set name.  */
          len = strlen (base_fontname) + strlen (font_allcs)
            + strlen (font_allfamilies) + strlen (font_all) + 5;
          fontsetname = xmalloc (len);
-         strcpy (fontsetname, base_fontname);
-         strcat (fontsetname, sep);
-         strcat (fontsetname, font_allcs);
-         strcat (fontsetname, sep);
-         strcat (fontsetname, font_allfamilies);
-         strcat (fontsetname, sep);
-         strcat (fontsetname, font_all);
+         z = stpcpy (fontsetname, base_fontname);
+         z = stpcpy (z, sep);
+         z = stpcpy (z, font_allcs);
+         z = stpcpy (z, sep);
+         z = stpcpy (z, font_allfamilies);
+         z = stpcpy (z, sep);
+         z = stpcpy (z, font_all);
        }
     }
   if (motif)
-    return strcat (fontsetname, ":");
+    strcpy (z, ":");
   return fontsetname;
 }
 #endif /* HAVE_X_WINDOWS && USE_X_TOOLKIT */
@@ -1960,7 +1942,7 @@ void
 xic_free_xfontset (struct frame *f)
 {
   Lisp_Object rest, frame;
-  bool shared_p = 0;
+  bool shared_p = false;
 
   if (!FRAME_XIC_FONTSET (f))
     return;
@@ -1973,7 +1955,7 @@ xic_free_xfontset (struct frame *f)
           && FRAME_DISPLAY_INFO (cf) == FRAME_DISPLAY_INFO (f)
           && FRAME_XIC_FONTSET (cf) == FRAME_XIC_FONTSET (f))
         {
-          shared_p = 1;
+          shared_p = true;
           break;
         }
     }
@@ -2233,7 +2215,7 @@ xic_set_xfontset (struct frame *f, const char 
*base_fontname)
 /* Create and set up the X widget for frame F.  */
 
 static void
-x_window (struct frame *f, long window_prompting, int minibuffer_only)
+x_window (struct frame *f, long window_prompting)
 {
   XClassHint class_hints;
   XSetWindowAttributes attributes;
@@ -2241,7 +2223,7 @@ x_window (struct frame *f, long window_prompting, int 
minibuffer_only)
   Widget shell_widget;
   Widget pane_widget;
   Widget frame_widget;
-  Arg al [25];
+  Arg al[25];
   int ac;
 
   block_input ();
@@ -2251,7 +2233,7 @@ x_window (struct frame *f, long window_prompting, int 
minibuffer_only)
      for the window manager, so GC relocation won't bother it.
 
      Elsewhere we specify the window name for the window manager.  */
-  f->namebuf = xstrdup (SSDATA (Vx_resource_name));
+  f->namebuf = xlispstrdup (Vx_resource_name);
 
   ac = 0;
   XtSetArg (al[ac], XtNallowShellResize, 1); ac++;
@@ -2311,8 +2293,8 @@ x_window (struct frame *f, long window_prompting, int 
minibuffer_only)
            + f->output_data.x->menubar_widget->core.border_width)
         : 0);
 
-#if 0 /* Experimentally, we now get the right results
-        for -geometry -0-0 without this.  24 Aug 96, rms.  */
+#if false /* Experimentally, we now get the right results
+            for -geometry -0-0 without this.  24 Aug 96, rms.  */
     if (FRAME_EXTERNAL_MENU_BAR (f))
       {
         Dimension ibw = 0;
@@ -2341,9 +2323,9 @@ x_window (struct frame *f, long window_prompting, int 
minibuffer_only)
        We pass that information later, in x_wm_set_size_hints.  */
     {
       int left = f->left_pos;
-      int xneg = window_prompting & XNegative;
+      bool xneg = (window_prompting & XNegative) != 0;
       int top = f->top_pos;
-      int yneg = window_prompting & YNegative;
+      bool yneg = (window_prompting & YNegative) != 0;
       if (xneg)
        left = -left;
       if (yneg)
@@ -2442,7 +2424,7 @@ x_window (struct frame *f, long window_prompting, int 
minibuffer_only)
     Lisp_Object name;
     bool explicit = f->explicit_name;
 
-    f->explicit_name = 0;
+    f->explicit_name = false;
     name = f->name;
     fset_name (f, Qnil);
     x_set_name (f, name, explicit);
@@ -2581,7 +2563,7 @@ x_window (struct frame *f)
     Lisp_Object name;
     bool explicit = f->explicit_name;
 
-    f->explicit_name = 0;
+    f->explicit_name = false;
     name = f->name;
     fset_name (f, Qnil);
     x_set_name (f, name, explicit);
@@ -2627,15 +2609,12 @@ x_icon_verify (struct frame *f, Lisp_Object parms)
 static void
 x_icon (struct frame *f, Lisp_Object parms)
 {
-  Lisp_Object icon_x, icon_y;
-#if 0
-  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
-#endif
-
   /* Set the position of the icon.  Note that twm groups all
      icons in an icon window.  */
-  icon_x = x_frame_get_and_record_arg (f, parms, Qicon_left, 0, 0, 
RES_TYPE_NUMBER);
-  icon_y = x_frame_get_and_record_arg (f, parms, Qicon_top, 0, 0, 
RES_TYPE_NUMBER);
+  Lisp_Object icon_x
+    = x_frame_get_and_record_arg (f, parms, Qicon_left, 0, 0, RES_TYPE_NUMBER);
+  Lisp_Object icon_y
+    = x_frame_get_and_record_arg (f, parms, Qicon_top, 0, 0, RES_TYPE_NUMBER);
   if (!EQ (icon_x, Qunbound) && !EQ (icon_y, Qunbound))
     {
       CHECK_TYPE_RANGED_INTEGER (int, icon_x);
@@ -2649,9 +2628,10 @@ x_icon (struct frame *f, Lisp_Object parms)
   if (! EQ (icon_x, Qunbound))
     x_wm_set_icon_position (f, XINT (icon_x), XINT (icon_y));
 
-#if 0 /* x_get_arg removes the visibility parameter as a side effect,
-         but x_create_frame still needs it.  */
+#if false /* x_get_arg removes the visibility parameter as a side effect,
+            but x_create_frame still needs it.  */
   /* Start up iconic or window? */
+  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
   x_wm_set_window_state
     (f, (EQ (x_get_arg (dpyinfo, parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL),
             Qicon)
@@ -2879,7 +2859,7 @@ Signal error if FRAME is not an X frame.  */)
   struct frame *f = decode_window_system_frame (frame);
 
   block_input ();
-  x_wm_set_size_hint (f, 0, 0);
+  x_wm_set_size_hint (f, 0, false);
   unblock_input ();
   return Qnil;
 }
@@ -2919,7 +2899,7 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
   struct frame *f;
   Lisp_Object frame, tem;
   Lisp_Object name;
-  int minibuffer_only = 0;
+  bool minibuffer_only = false;
   long window_prompting = 0;
   ptrdiff_t count = SPECPDL_INDEX ();
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
@@ -2973,12 +2953,12 @@ This function is an internal primitive--use 
`make-frame' instead.  */)
   else if (EQ (tem, Qonly))
     {
       f = make_minibuffer_frame ();
-      minibuffer_only = 1;
+      minibuffer_only = true;
     }
   else if (WINDOWP (tem))
     f = make_frame_without_minibuffer (tem, kb, display);
   else
-    f = make_frame (1);
+    f = make_frame (true);
 
   XSETFRAME (frame, f);
 
@@ -3045,12 +3025,12 @@ This function is an internal primitive--use 
`make-frame' instead.  */)
   if (!NILP (parent))
     {
       f->output_data.x->parent_desc = (Window) XFASTINT (parent);
-      f->output_data.x->explicit_parent = 1;
+      f->output_data.x->explicit_parent = true;
     }
   else
     {
       f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
-      f->output_data.x->explicit_parent = 0;
+      f->output_data.x->explicit_parent = false;
     }
 
   /* Set the name; the functions to which we pass f expect the name to
@@ -3058,12 +3038,12 @@ This function is an internal primitive--use 
`make-frame' instead.  */)
   if (EQ (name, Qunbound) || NILP (name))
     {
       fset_name (f, build_string (dpyinfo->x_id_name));
-      f->explicit_name = 0;
+      f->explicit_name = false;
     }
   else
     {
       fset_name (f, name);
-      f->explicit_name = 1;
+      f->explicit_name = true;
       /* Use the frame's title when getting resources for this frame.  */
       specbind (Qx_resource_name, name);
     }
@@ -3150,10 +3130,10 @@ This function is an internal primitive--use 
`make-frame' instead.  */)
 
   x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_foreground,
                                        "scrollBarForeground",
-                                       "ScrollBarForeground", 1);
+                                       "ScrollBarForeground", true);
   x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_background,
                                        "scrollBarBackground",
-                                       "ScrollBarBackground", 0);
+                                       "ScrollBarBackground", false);
 
 #ifdef GLYPH_DEBUG
   image_cache_refcount =
@@ -3176,7 +3156,8 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
      had one frame line vs one toolbar line which left us with a zero
      root window height which was obviously wrong as well ...  */
   adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
-                    FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, 1, Qnil);
+                    FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, true,
+                    Qx_create_frame_1);
 
   /* Set the menu-bar-lines and tool-bar-lines parameters.  We don't
      look up the X resources controlling the menu-bar and tool-bar
@@ -3205,7 +3186,7 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
                        FRAME_TOOL_BAR_POSITION (f), 0, 0, RES_TYPE_SYMBOL);
 
   /* Compute the size of the X window.  */
-  window_prompting = x_figure_window_size (f, parms, 1);
+  window_prompting = x_figure_window_size (f, parms, true);
 
   tem = x_get_arg (dpyinfo, parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN);
   f->no_split = minibuffer_only || EQ (tem, Qt);
@@ -3214,7 +3195,7 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
 
   /* Create the X widget or window.  */
 #ifdef USE_X_TOOLKIT
-  x_window (f, window_prompting, minibuffer_only);
+  x_window (f, window_prompting);
 #else
   x_window (f);
 #endif
@@ -3250,7 +3231,8 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
   /* Consider frame official, now.  */
   f->can_x_set_window_size = true;
 
-  adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, 1, 
Qnil);
+  adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, true,
+                    Qx_create_frame_2);
 
 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
   /* Create the menu bar.  */
@@ -3274,7 +3256,7 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
      badly we want them.  This should be done after we have the menu
      bar so that its size can be taken into account.  */
   block_input ();
-  x_wm_set_size_hint (f, window_prompting, 0);
+  x_wm_set_size_hint (f, window_prompting, false);
   unblock_input ();
 
   /* Make the window appear on the frame and enable display, unless
@@ -3403,7 +3385,7 @@ DEFUN ("xw-color-defined-p", Fxw_color_defined_p, 
Sxw_color_defined_p, 1, 2, 0,
 
   CHECK_STRING (color);
 
-  if (x_defined_color (f, SSDATA (color), &foo, 0))
+  if (x_defined_color (f, SSDATA (color), &foo, false))
     return Qt;
   else
     return Qnil;
@@ -3418,7 +3400,7 @@ DEFUN ("xw-color-values", Fxw_color_values, 
Sxw_color_values, 1, 2, 0,
 
   CHECK_STRING (color);
 
-  if (x_defined_color (f, SSDATA (color), &foo, 0))
+  if (x_defined_color (f, SSDATA (color), &foo, false))
     return list3i (foo.red, foo.green, foo.blue);
   else
     return Qnil;
@@ -3560,10 +3542,15 @@ If omitted or nil, that stands for the selected frame's 
display.  */)
 }
 
 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
-       doc: /* Return the "vendor ID" string of the X server of display 
TERMINAL.
+       doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
+
 \(Labeling every distributor as a "vendor" embodies the false assumption
 that operating systems cannot be developed and distributed noncommercially.)
 The optional argument TERMINAL specifies which display to ask about.
+
+For GNU and Unix systems, this queries the X server software; for
+MS-Windows, this queries the OS.
+
 TERMINAL should be a terminal object, a frame or a display name (a string).
 If omitted or nil, that stands for the selected frame's display.  */)
   (Lisp_Object terminal)
@@ -3576,10 +3563,16 @@ If omitted or nil, that stands for the selected frame's 
display.  */)
 }
 
 DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
-       doc: /* Return the version numbers of the X server of display TERMINAL.
-The value is a list of three integers: the major and minor
-version numbers of the X Protocol in use, and the distributor-specific release
-number.  See also the function `x-server-vendor'.
+       doc: /* Return the version numbers of the GUI software on TERMINAL.
+The value is a list of three integers specifying the version of the GUI
+software in use.
+
+For GNU and Unix system, the first 2 numbers are the version of the X
+Protocol used on TERMINAL and the 3rd number is the distributor-specific
+release number.  For MS-Windows, the 3 numbers report the version and
+the build number of the OS.
+
+See also the function `x-server-vendor'.
 
 The optional argument TERMINAL specifies which display to ask about.
 TERMINAL should be a terminal object, a frame or a display name (a string).
@@ -4939,7 +4932,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
   int width, height;
   ptrdiff_t count = SPECPDL_INDEX ();
   struct gcpro gcpro1, gcpro2, gcpro3;
-  int face_change_count_before = face_change_count;
+  bool face_change_before = face_change;
   Lisp_Object buffer;
   struct buffer *old_buffer;
 
@@ -4957,14 +4950,14 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
 
   frame = Qnil;
   GCPRO3 (parms, name, frame);
-  f = make_frame (1);
+  f = make_frame (true);
   XSETFRAME (frame, f);
 
   AUTO_STRING (tip, " *tip*");
   buffer = Fget_buffer_create (tip);
   /* Use set_window_buffer instead of Fset_window_buffer (see
      discussion of bug#11984, bug#12025, bug#12026).  */
-  set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, 0, 0);
+  set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, false, false);
   old_buffer = current_buffer;
   set_buffer_internal_1 (XBUFFER (buffer));
   bset_truncate_lines (current_buffer, Qnil);
@@ -4998,7 +4991,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
   fset_icon_name (f, Qnil);
   FRAME_DISPLAY_INFO (f) = dpyinfo;
   f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
-  f->output_data.x->explicit_parent = 0;
+  f->output_data.x->explicit_parent = false;
 
   /* These colors will be set anyway later, but it's important
      to get the color reference counts right, so initialize them!  */
@@ -5038,12 +5031,12 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
   if (EQ (name, Qunbound) || NILP (name))
     {
       fset_name (f, build_string (dpyinfo->x_id_name));
-      f->explicit_name = 0;
+      f->explicit_name = false;
     }
   else
     {
       fset_name (f, name);
-      f->explicit_name = 1;
+      f->explicit_name = true;
       /* use the frame's title when getting resources for this frame.  */
       specbind (Qx_resource_name, name);
     }
@@ -5114,7 +5107,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
 
   f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
 
-  x_figure_window_size (f, parms, 0);
+  x_figure_window_size (f, parms, false);
 
   {
     XSetWindowAttributes attrs;
@@ -5167,7 +5160,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
   height = FRAME_LINES (f);
   SET_FRAME_COLS (f, 0);
   SET_FRAME_LINES (f, 0);
-  change_frame_size (f, width, height, 1, 0, 0, 0);
+  change_frame_size (f, width, height, true, false, false, false);
 
   /* Add `tooltip' frame parameter's default value. */
   if (NILP (Fframe_parameter (frame, Qtooltip)))
@@ -5220,7 +5213,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
       }
   }
 
-  f->no_split = 1;
+  f->no_split = true;
 
   UNGCPRO;
 
@@ -5236,11 +5229,11 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
   f->can_x_set_window_size = true;
 
   /* Setting attributes of faces of the tooltip frame from resources
-     and similar will increment face_change_count, which leads to the
-     clearing of all current matrices.  Since this isn't necessary
-     here, avoid it by resetting face_change_count to the value it
-     had before we created the tip frame.  */
-  face_change_count = face_change_count_before;
+     and similar will set face_change, which leads to the clearing of
+     all current matrices.  Since this isn't necessary here, avoid it
+     by resetting face_change to the value it had before we created
+     the tip frame.  */
+  face_change = face_change_before;
 
   /* Discard the unwind_protect.  */
   return unbind_to (count, frame);
@@ -5338,7 +5331,8 @@ Text larger than the specified size is clipped.  */)
   int root_x, root_y;
   struct buffer *old_buffer;
   struct text_pos pos;
-  int i, width, height, seen_reversed_p;
+  int i, width, height;
+  bool seen_reversed_p;
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
   int old_windows_or_buffers_changed = windows_or_buffers_changed;
   ptrdiff_t count = SPECPDL_INDEX ();
@@ -5476,7 +5470,7 @@ Text larger than the specified size is clipped.  */)
 
   FRAME_TOTAL_COLS (f) = w->total_cols;
   adjust_frame_glyphs (f);
-  w->pseudo_window_p = 1;
+  w->pseudo_window_p = true;
 
   /* Display the tooltip text in a temporary buffer.  */
   old_buffer = current_buffer;
@@ -5488,7 +5482,8 @@ Text larger than the specified size is clipped.  */)
   try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
 
   /* Compute width and height of the tooltip.  */
-  width = height = seen_reversed_p = 0;
+  width = height = 0;
+  seen_reversed_p = false;
   for (i = 0; i < w->desired_matrix->nrows; ++i)
     {
       struct glyph_row *row = &w->desired_matrix->rows[i];
@@ -5500,7 +5495,7 @@ Text larger than the specified size is clipped.  */)
        break;
 
       /* Let the row go over the full width of the frame.  */
-      row->full_width_p = 1;
+      row->full_width_p = true;
 
       row_width = row->pixel_width;
       if (row->used[TEXT_AREA])
@@ -5510,7 +5505,7 @@ Text larger than the specified size is clipped.  */)
          if (!row->reversed_p)
            {
              last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
-             if (INTEGERP (last->object))
+             if (NILP (last->object))
                row_width -= last->pixel_width;
            }
          else
@@ -5520,10 +5515,10 @@ Text larger than the specified size is clipped.  */)
                 Don't count that glyph.  */
              struct glyph *g = row->glyphs[TEXT_AREA];
 
-             if (g->type == STRETCH_GLYPH && INTEGERP (g->object))
+             if (g->type == STRETCH_GLYPH && NILP (g->object))
                {
                  row_width -= g->pixel_width;
-                 seen_reversed_p = 1;
+                 seen_reversed_p = true;
                }
            }
        }
@@ -5559,12 +5554,12 @@ Text larger than the specified size is clipped.  */)
 
          if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
            break;
-         row->full_width_p = 1;
+         row->full_width_p = true;
          row_width = row->pixel_width;
          if (row->used[TEXT_AREA] && !row->reversed_p)
            {
              last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
-             if (INTEGERP (last->object))
+             if (NILP (last->object))
                row_width -= last->pixel_width;
            }
 
@@ -5589,8 +5584,8 @@ Text larger than the specified size is clipped.  */)
   unblock_input ();
 
   /* Draw into the window.  */
-  w->must_be_updated_p = 1;
-  update_single_window (w, 1);
+  w->must_be_updated_p = true;
+  update_single_window (w);
 
   /* Restore original current buffer.  */
   set_buffer_internal_1 (old_buffer);
@@ -5726,7 +5721,7 @@ clean_up_file_dialog (void *arg)
   block_input ();
   XtUnmanageChild (dialog);
   XtDestroyWidget (dialog);
-  x_menu_set_in_use (0);
+  x_menu_set_in_use (false);
   unblock_input ();
 }
 
@@ -5850,7 +5845,7 @@ value of DIR as in previous invocations; this is standard 
Windows behavior.  */)
   record_unwind_protect_ptr (clean_up_file_dialog, dialog);
 
   /* Process events until the user presses Cancel or OK.  */
-  x_menu_set_in_use (1);
+  x_menu_set_in_use (true);
   result = 0;
   while (result == 0)
     {
@@ -5904,7 +5899,7 @@ value of DIR as in previous invocations; this is standard 
Windows behavior.  */)
 static void
 clean_up_dialog (void)
 {
-  x_menu_set_in_use (0);
+  x_menu_set_in_use (false);
 }
 
 DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0,
@@ -6006,12 +6001,12 @@ nil, it defaults to the selected frame. */)
   XSETFONT (font, FRAME_FONT (f));
   font_param = Ffont_get (font, intern (":name"));
   if (STRINGP (font_param))
-    default_name = xstrdup (SSDATA (font_param));
+    default_name = xlispstrdup (font_param);
   else
     {
       font_param = Fframe_parameter (frame, Qfont_param);
       if (STRINGP (font_param))
-        default_name = xstrdup (SSDATA (font_param));
+        default_name = xlispstrdup (font_param);
     }
 
   font = xg_get_font (f, default_name);
@@ -6203,7 +6198,7 @@ Changing the value does not affect existing frames
 unless you set the mouse color.  */);
   Vx_pointer_shape = Qnil;
 
-#if 0 /* This doesn't really do anything.  */
+#if false /* This doesn't really do anything.  */
   DEFVAR_LISP ("x-nontext-pointer-shape", Vx_nontext_pointer_shape,
     doc: /* The shape of the pointer when not over text.
 This variable takes effect when you create a new frame
@@ -6217,7 +6212,7 @@ This variable takes effect when you create a new frame
 or when you set the mouse color.  */);
   Vx_hourglass_pointer_shape = Qnil;
 
-#if 0 /* This doesn't really do anything.  */
+#if false /* This doesn't really do anything.  */
   DEFVAR_LISP ("x-mode-pointer-shape", Vx_mode_pointer_shape,
     doc: /* The shape of the pointer when over the mode line.
 This variable takes effect when you create a new frame
@@ -6279,25 +6274,25 @@ Chinese, Japanese, and Korean.  */);
 If nil or if the file selection dialog is not available, the new GTK file
 chooser is used instead.  To turn off all file dialogs set the
 variable `use-file-dialog'.  */);
-  x_gtk_use_old_file_dialog = 0;
+  x_gtk_use_old_file_dialog = false;
 
   DEFVAR_BOOL ("x-gtk-show-hidden-files", x_gtk_show_hidden_files,
     doc: /* If non-nil, the GTK file chooser will by default show hidden files.
 Note that this is just the default, there is a toggle button on the file
 chooser to show or not show hidden files on a case by case basis.  */);
-  x_gtk_show_hidden_files = 0;
+  x_gtk_show_hidden_files = false;
 
   DEFVAR_BOOL ("x-gtk-file-dialog-help-text", x_gtk_file_dialog_help_text,
     doc: /* If non-nil, the GTK file chooser will show additional help text.
 If more space for files in the file chooser dialog is wanted, set this to nil
 to turn the additional text off.  */);
-  x_gtk_file_dialog_help_text = 1;
+  x_gtk_file_dialog_help_text = true;
 
   DEFVAR_BOOL ("x-gtk-use-system-tooltips", x_gtk_use_system_tooltips,
     doc: /* If non-nil with a Gtk+ built Emacs, the Gtk+ tooltip is used.
 Otherwise use Emacs own tooltip implementation.
 When using Gtk+ tooltips, the tooltip face is not used.  */);
-  x_gtk_use_system_tooltips = 1;
+  x_gtk_use_system_tooltips = true;
 
   /* Tell Emacs about this window system.  */
   Fprovide (Qx, Qnil);
@@ -6328,7 +6323,7 @@ When using Gtk+ tooltips, the tooltip face is not used.  
*/);
     char gtk_version[sizeof ".." + 3 * INT_STRLEN_BOUND (int)];
     int len = sprintf (gtk_version, "%d.%d.%d",
                       GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
-    Vgtk_version_string = make_pure_string (gtk_version, len, len, 0);
+    Vgtk_version_string = make_pure_string (gtk_version, len, len, false);
   }
 #endif /* USE_GTK */
 
diff --git a/src/xfont.c b/src/xfont.c
index 06a4479..3a0f5e3 100644
--- a/src/xfont.c
+++ b/src/xfont.c
@@ -1,5 +1,5 @@
 /* xfont.c -- X core font driver.
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
@@ -132,7 +132,7 @@ static int xfont_check (struct frame *, struct font *);
 struct font_driver xfont_driver =
   {
     LISP_INITIALLY_ZERO,       /* Qx */
-    0,                         /* case insensitive */
+    false,                     /* case insensitive */
     xfont_get_cache,
     xfont_list,
     xfont_match,
@@ -269,7 +269,7 @@ xfont_chars_supported (Lisp_Object chars, XFontStruct 
*xfont,
        }
       return (i >= 0);
     }
-  return 0;
+  return false;
 }
 
 /* A hash table recoding which font supports which scripts.  Each key
@@ -983,7 +983,7 @@ xfont_text_extents (struct font *font, unsigned int *code,
   int i, width = 0;
   bool first;
 
-  for (i = 0, first = 1; i < nglyphs; i++)
+  for (i = 0, first = true; i < nglyphs; i++)
     {
       XChar2b char2b;
       static XCharStruct *pcm;
@@ -1000,7 +1000,7 @@ xfont_text_extents (struct font *font, unsigned int *code,
          metrics->rbearing = pcm->rbearing;
          metrics->ascent = pcm->ascent;
          metrics->descent = pcm->descent;
-         first = 0;
+         first = false;
        }
       else
        {
@@ -1106,13 +1106,7 @@ void
 syms_of_xfont (void)
 {
   staticpro (&xfont_scripts_cache);
-  { /* Here we rely on the fact that syms_of_xfont (via syms_of_font)
-       is called fairly late, when QCtest and Qequal are known to be set.  */
-    Lisp_Object args[2];
-    args[0] = QCtest;
-    args[1] = Qequal;
-    xfont_scripts_cache = Fmake_hash_table (2, args);
-  }
+  xfont_scripts_cache = CALLN (Fmake_hash_table, QCtest, Qequal);
   staticpro (&xfont_scratch_props);
   xfont_scratch_props = Fmake_vector (make_number (8), Qnil);
   xfont_driver.type = Qx;
diff --git a/src/xftfont.c b/src/xftfont.c
index 0a883a7..0e8b876 100644
--- a/src/xftfont.c
+++ b/src/xftfont.c
@@ -1,5 +1,5 @@
 /* xftfont.c -- XFT font driver.
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
@@ -38,9 +38,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 /* Xft font driver.  */
 
-Lisp_Object Qxft;
-static Lisp_Object QChinting, QCautohint, QChintstyle, QCrgba, QCembolden,
-  QClcdfilter;
 
 /* The actual structure for Xft font that can be cast to struct
    font.  */
@@ -88,7 +85,7 @@ xftfont_get_colors (struct frame *f, struct face *face, GC gc,
   else
     {
       XGCValues xgcv;
-      bool fg_done = 0, bg_done = 0;
+      bool fg_done = false, bg_done = false;
 
       block_input ();
       XGetGCValues (FRAME_X_DISPLAY (f), gc,
@@ -96,15 +93,15 @@ xftfont_get_colors (struct frame *f, struct face *face, GC 
gc,
       if (xftface_info)
        {
          if (xgcv.foreground == face->foreground)
-           *fg = xftface_info->xft_fg, fg_done = 1;
+           *fg = xftface_info->xft_fg, fg_done = true;
          else if (xgcv.foreground == face->background)
-           *fg = xftface_info->xft_bg, fg_done = 1;
+           *fg = xftface_info->xft_bg, fg_done = true;
          if (! bg)
-           bg_done = 1;
+           bg_done = true;
          else if (xgcv.background == face->background)
-           *bg = xftface_info->xft_bg, bg_done = 1;
+           *bg = xftface_info->xft_bg, bg_done = true;
          else if (xgcv.background == face->foreground)
-           *bg = xftface_info->xft_fg, bg_done = 1;
+           *bg = xftface_info->xft_fg, bg_done = true;
        }
 
       if (! (fg_done & bg_done))
@@ -437,7 +434,7 @@ xftfont_open (struct frame *f, Lisp_Object entity, int 
pixel_size)
   font->baseline_offset = 0;
   font->relative_compose = 0;
   font->default_ascent = 0;
-  font->vertical_centering = 0;
+  font->vertical_centering = false;
 #ifdef FT_BDF_H
   if (! (ft_face->face_flags & FT_FACE_FLAG_SFNT))
     {
@@ -490,7 +487,7 @@ xftfont_prepare_face (struct frame *f, struct face *face)
 {
   struct xftface_info *xftface_info;
 
-#if 0
+#if false
   /* This doesn't work if face->ascii_face doesn't use an Xft font. */
   if (face != face->ascii_face)
     {
@@ -510,7 +507,7 @@ xftfont_done_face (struct frame *f, struct face *face)
 {
   struct xftface_info *xftface_info;
 
-#if 0
+#if false
   /* This doesn't work if face->ascii_face doesn't use an Xft font. */
   if (face != face->ascii_face
       || ! face->extra)
@@ -643,13 +640,11 @@ xftfont_draw (struct glyph_string *s, int from, int to, 
int x, int y,
 static Lisp_Object
 xftfont_shape (Lisp_Object lgstring)
 {
-  struct font *font;
-  struct xftfont_info *xftfont_info;
+  struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
+  struct xftfont_info *xftfont_info = (struct xftfont_info *) font;
   FT_Face ft_face;
   Lisp_Object val;
 
-  CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
-  xftfont_info = (struct xftfont_info *) font;
   ft_face = XftLockFace (xftfont_info->xftfont);
   xftfont_info->ft_size = ft_face->size;
   val = ftfont_driver.shape (lgstring);
@@ -687,7 +682,7 @@ xftfont_cached_font_ok (struct frame *f, Lisp_Object 
font_object,
   Display *display = FRAME_X_DISPLAY (f);
   FcPattern *pat = FcPatternCreate ();
   FcBool b1, b2;
-  bool ok = 0;
+  bool ok = false;
   int i1, i2, r1, r2;
 
   xftfont_add_rendering_parameters (pat, entity);
@@ -717,7 +712,7 @@ xftfont_cached_font_ok (struct frame *f, Lisp_Object 
font_object,
   r2 = FcPatternGetInteger (oldpat, FC_RGBA, 0, &i2);
   if (r1 != r2 || i1 != i2) goto out;
 
-  ok = 1;
+  ok = true;
  out:
   FcPatternDestroy (pat);
   return ok;
diff --git a/src/xgselect.c b/src/xgselect.c
index 7e883eb..0b62d3e 100644
--- a/src/xgselect.c
+++ b/src/xgselect.c
@@ -1,6 +1,6 @@
 /* Function for handling the GLib event loop.
 
-Copyright (C) 2009-2014 Free Software Foundation, Inc.
+Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -50,7 +50,7 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set 
*efds,
   struct timespec const *tmop = timeout;
 
   GMainContext *context;
-  int have_wfds = wfds != NULL;
+  bool have_wfds = wfds != NULL;
   GPollFD gfds_buf[128];
   GPollFD *gfds = gfds_buf;
   int gfds_size = ARRAYELTS (gfds_buf);
@@ -96,7 +96,7 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set 
*efds,
         {
           FD_SET (gfds[i].fd, &all_wfds);
           if (gfds[i].fd > max_fds) max_fds = gfds[i].fd;
-          have_wfds = 1;
+          have_wfds = true;
         }
     }
 
diff --git a/src/xgselect.h b/src/xgselect.h
index 48f109d..ada2376 100644
--- a/src/xgselect.h
+++ b/src/xgselect.h
@@ -1,6 +1,6 @@
 /* Header for xg_select.
 
-Copyright (C) 2009-2014 Free Software Foundation, Inc.
+Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xmenu.c b/src/xmenu.c
index 0f69ee2..fdf1f6f 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -1,6 +1,6 @@
 /* X Communication module for terminals which understand the X protocol.
 
-Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2014 Free Software
+Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2015 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -104,12 +104,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 
 #include "menu.h"
 
-#ifndef TRUE
-#define TRUE 1
-#endif /* no TRUE */
-
-static Lisp_Object Qdebug_on_next_call;
-
+
 /* Flag which when set indicates a dialog or menu has been posted by
    Xt on behalf of one of the widget sets.  */
 static int popup_activated_flag;
@@ -147,7 +142,7 @@ menubar_id_to_frame (LWLIB_ID id)
 /* Set menu_items_inuse so no other popup menu or dialog is created.  */
 
 void
-x_menu_set_in_use (int in_use)
+x_menu_set_in_use (bool in_use)
 {
   menu_items_inuse = in_use ? Qt : Qnil;
   popup_activated_flag = in_use;
@@ -223,7 +218,8 @@ x_menu_wait_for_event (void *data)
    with BLOCK_INPUT, UNBLOCK_INPUT wrappers.  */
 
 static void
-popup_get_selection (XEvent *initial_event, struct x_display_info *dpyinfo, 
LWLIB_ID id, int do_timers)
+popup_get_selection (XEvent *initial_event, struct x_display_info *dpyinfo,
+                    LWLIB_ID id, bool do_timers)
 {
   XEvent event;
 
@@ -288,13 +284,13 @@ If FRAME is nil or not given, use the selected frame.  */)
   block_input ();
 
   if (FRAME_EXTERNAL_MENU_BAR (f))
-    set_frame_menubar (f, 0, 1);
+    set_frame_menubar (f, false, true);
 
   menubar = FRAME_X_OUTPUT (f)->menubar_widget;
   if (menubar)
     {
       Window child;
-      bool error_p = 0;
+      bool error_p = false;
 
       x_catch_errors (FRAME_X_DISPLAY (f));
       memset (&ev, 0, sizeof ev);
@@ -367,7 +363,7 @@ If FRAME is nil or not given, use the selected frame.  */)
   f = decode_window_system_frame (frame);
 
   if (FRAME_EXTERNAL_MENU_BAR (f))
-    set_frame_menubar (f, 0, 1);
+    set_frame_menubar (f, false, true);
 
   menubar = FRAME_X_OUTPUT (f)->menubar_widget;
   if (menubar)
@@ -391,7 +387,7 @@ If FRAME is nil or not given, use the selected frame.  */)
    Used for popup menus and dialogs. */
 
 static void
-popup_widget_loop (int do_timers, GtkWidget *widget)
+popup_widget_loop (bool do_timers, GtkWidget *widget)
 {
   ++popup_activated_flag;
 
@@ -432,7 +428,7 @@ x_activate_menubar (struct frame *f)
     return;
 #endif
 
-  set_frame_menubar (f, 0, 1);
+  set_frame_menubar (f, false, true);
   block_input ();
   popup_activated_flag = 1;
 #ifdef USE_GTK
@@ -489,24 +485,7 @@ show_help_event (struct frame *f, xt_or_gtk_widget widget, 
Lisp_Object help)
       kbd_buffer_store_help_event (frame, help);
     }
   else
-    {
-#if 0  /* This code doesn't do anything useful.  ++kfs */
-      /* WIDGET is the popup menu.  It's parent is the frame's
-        widget.  See which frame that is.  */
-      xt_or_gtk_widget frame_widget = XtParent (widget);
-      Lisp_Object tail;
-
-      for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
-       {
-         frame = XCAR (tail);
-         if (FRAMEP (frame)
-             && (f = XFRAME (frame),
-                 FRAME_X_P (f) && f->output_data.x->widget == frame_widget))
-           break;
-       }
-#endif
-      show_help_echo (help, Qnil, Qnil, Qnil);
-    }
+    show_help_echo (help, Qnil, Qnil, Qnil);
 }
 
 /* Callback called when menu items are highlighted/unhighlighted
@@ -555,7 +534,7 @@ menu_highlight_callback (Widget widget, LWLIB_ID id, void 
*call_data)
    selected in a radio group.  If this variable is set to a non-zero
    value, we are creating menus and don't want callbacks right now.
 */
-static int xg_crazy_callback_abort;
+static bool xg_crazy_callback_abort;
 
 /* This callback is called from the menu bar pulldown menu
    when the user makes a selection.
@@ -657,13 +636,13 @@ update_frame_menubar (struct frame *f)
   lw_refigure_widget (x->column_widget, True);
 
   /* Force the pane widget to resize itself.  */
+  int new_height = -1;
 #ifdef USE_LUCID
   /* For reasons I don't know Lucid wants to add one pixel to the frame
      height when adding the menu bar.  Compensate that here.  */
-  adjust_frame_size (f, -1, FRAME_TEXT_HEIGHT (f) - 1, 2, 0, Qmenu_bar_lines);
-#else
-  adjust_frame_size (f, -1, -1, 2, 0, Qmenu_bar_lines);
+  new_height = FRAME_TEXT_HEIGHT (f) - 1;
 #endif /* USE_LUCID */
+  adjust_frame_size (f, -1, new_height, 2, false, Qmenu_bar_lines);
   unblock_input ();
 #endif /* USE_GTK */
 }
@@ -730,11 +709,11 @@ set_frame_menubar (struct frame *f, bool first_time, bool 
deep_p)
 #endif
 
   if (! menubar_widget)
-    deep_p = 1;
+    deep_p = true;
   /* Make the first call for any given frame always go deep.  */
   else if (!f->output_data.x->saved_menu_event && !deep_p)
     {
-      deep_p = 1;
+      deep_p = true;
       f->output_data.x->saved_menu_event = xmalloc (sizeof (XEvent));
       f->output_data.x->saved_menu_event->type = 0;
     }
@@ -841,7 +820,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool 
deep_p)
          else
            first_wv->contents = wv;
          /* Don't set wv->name here; GC during the loop might relocate it.  */
-         wv->enabled = 1;
+         wv->enabled = true;
          wv->button_type = BUTTON_TYPE_NONE;
          prev_wv = wv;
        }
@@ -932,7 +911,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool 
deep_p)
   block_input ();
 
 #ifdef USE_GTK
-  xg_crazy_callback_abort = 1;
+  xg_crazy_callback_abort = true;
   if (menubar_widget)
     {
       /* The fourth arg is DEEP_P, which says to consider the entire
@@ -981,7 +960,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool 
deep_p)
       menubar_widget = lw_create_widget ("menubar", "menubar", id,
                                          first_wv,
                                         f->output_data.x->column_widget,
-                                        0,
+                                        false,
                                         popup_activate_callback,
                                         menubar_selection_callback,
                                         popup_deactivate_callback,
@@ -1003,11 +982,11 @@ set_frame_menubar (struct frame *f, bool first_time, 
bool deep_p)
            + f->output_data.x->menubar_widget->core.border_width)
         : 0);
 
-#if 1 /* Experimentally, we now get the right results
+#ifdef USE_LUCID
+      /* Experimentally, we now get the right results
         for -geometry -0-0 without this.  24 Aug 96, rms.
          Maybe so, but the menu bar size is missing the pixels so the
          WM size hints are off by these pixels.  Jan D, oct 2009.  */
-#ifdef USE_LUCID
     if (FRAME_EXTERNAL_MENU_BAR (f))
       {
         Dimension ibw = 0;
@@ -1016,7 +995,6 @@ set_frame_menubar (struct frame *f, bool first_time, bool 
deep_p)
         menubar_size += ibw;
       }
 #endif /* USE_LUCID */
-#endif /* 1 */
 
     FRAME_MENUBAR_HEIGHT (f) = menubar_size;
   }
@@ -1026,7 +1004,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool 
deep_p)
   update_frame_menubar (f);
 
 #ifdef USE_GTK
-  xg_crazy_callback_abort = 0;
+  xg_crazy_callback_abort = false;
 #endif
 
   unblock_input ();
@@ -1043,7 +1021,7 @@ initialize_frame_menubar (struct frame *f)
   /* This function is called before the first chance to redisplay
      the frame.  It has to be, so the frame will have the right size.  */
   fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f)));
-  set_frame_menubar (f, 1, 1);
+  set_frame_menubar (f, true, true);
 }
 
 
@@ -1095,21 +1073,21 @@ free_frame_menubar (struct frame *f)
 
       if (f->output_data.x->widget)
        {
+         int new_height = -1;
 #ifdef USE_MOTIF
          XtVaGetValues (f->output_data.x->widget, XtNx, &x1, XtNy, &y1, NULL);
          if (x1 == 0 && y1 == 0)
            XtVaSetValues (f->output_data.x->widget, XtNx, x0, XtNy, y0, NULL);
-         if (frame_inhibit_resize (f, 0, Qmenu_bar_lines))
-           adjust_frame_size (f, -1, old_height, 1, 0, Qmenu_bar_lines);
-         else
+         if (frame_inhibit_resize (f, false, Qmenu_bar_lines))
+           new_height = old_height;
 #endif /* USE_MOTIF */
-           adjust_frame_size (f, -1, -1, 2, 0, Qmenu_bar_lines);
+         adjust_frame_size (f, -1, new_height, 2, false, Qmenu_bar_lines);
        }
       else
        {
 #ifdef USE_MOTIF
-         if (frame_inhibit_resize (f, 0, Qmenu_bar_lines))
-           adjust_frame_size (f, -1, old_height, 1, 0, Qmenu_bar_lines);
+         if (frame_inhibit_resize (f, false, Qmenu_bar_lines))
+           adjust_frame_size (f, -1, old_height, 1, false, Qmenu_bar_lines);
 #endif
        }
 
@@ -1219,17 +1197,17 @@ create_and_show_popup_menu (struct frame *f, 
widget_value *first_wv,
 #ifdef HAVE_GTK3
   /* Always use position function for Gtk3.  Otherwise menus may become
      too small to show anything.  */
-  use_pos_func = 1;
+  use_pos_func = true;
 #endif
 
   eassert (FRAME_X_P (f));
 
-  xg_crazy_callback_abort = 1;
+  xg_crazy_callback_abort = true;
   menu = xg_create_widget ("popup", first_wv->name, f, first_wv,
                            G_CALLBACK (popup_selection_callback),
                            G_CALLBACK (popup_deactivate_callback),
                            G_CALLBACK (menu_highlight_callback));
-  xg_crazy_callback_abort = 0;
+  xg_crazy_callback_abort = false;
 
   if (use_pos_func)
     {
@@ -1270,7 +1248,7 @@ create_and_show_popup_menu (struct frame *f, widget_value 
*first_wv,
          two.  show_help_echo uses this to detect popup menus.  */
       popup_activated_flag = 1;
       /* Process events that apply to the menu.  */
-      popup_widget_loop (1, menu);
+      popup_widget_loop (true, menu);
     }
 
   unbind_to (specpdl_count, Qnil);
@@ -1332,14 +1310,14 @@ create_and_show_popup_menu (struct frame *f, 
widget_value *first_wv,
 
   menu_id = widget_id_tick++;
   menu = lw_create_widget ("popup", first_wv->name, menu_id, first_wv,
-                           f->output_data.x->widget, 1, 0,
+                           f->output_data.x->widget, true, 0,
                            popup_selection_callback,
                            popup_deactivate_callback,
                            menu_highlight_callback);
 
   event->type = ButtonPress;
   event->serial = 0;
-  event->send_event = 0;
+  event->send_event = false;
   event->display = FRAME_X_DISPLAY (f);
   event->time = CurrentTime;
   event->root = FRAME_DISPLAY_INFO (f)->root_window;
@@ -1375,7 +1353,7 @@ create_and_show_popup_menu (struct frame *f, widget_value 
*first_wv,
     record_unwind_protect_int (pop_down_menu, (int) menu_id);
 
     /* Process events that apply to the menu.  */
-    popup_get_selection (0, FRAME_DISPLAY_INFO (f), menu_id, 1);
+    popup_get_selection (0, FRAME_DISPLAY_INFO (f), menu_id, true);
 
     unbind_to (specpdl_count, Qnil);
   }
@@ -1401,8 +1379,6 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
     = alloca (menu_items_used * sizeof *subprefix_stack);
   int submenu_depth = 0;
 
-  int first_pane;
-
   ptrdiff_t specpdl_count = SPECPDL_INDEX ();
 
   eassert (FRAME_X_P (f));
@@ -1422,7 +1398,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
   wv = make_widget_value ("menu", NULL, true, Qnil);
   wv->button_type = BUTTON_TYPE_NONE;
   first_wv = wv;
-  first_pane = 1;
+  bool first_pane = true;
 
   /* Loop over all panes and items, filling in the tree.  */
   i = 0;
@@ -1433,14 +1409,14 @@ x_menu_show (struct frame *f, int x, int y, int 
menuflags,
          submenu_stack[submenu_depth++] = save_wv;
          save_wv = prev_wv;
          prev_wv = 0;
-         first_pane = 1;
+         first_pane = true;
          i++;
        }
       else if (EQ (AREF (menu_items, i), Qlambda))
        {
          prev_wv = save_wv;
          save_wv = submenu_stack[--submenu_depth];
-         first_pane = 0;
+         first_pane = false;
          i++;
        }
       else if (EQ (AREF (menu_items, i), Qt)
@@ -1494,7 +1470,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
              save_wv = wv;
              prev_wv = 0;
            }
-         first_pane = 0;
+         first_pane = false;
          i += MENU_ITEMS_PANE_LENGTH;
        }
       else
@@ -1689,7 +1665,7 @@ create_and_show_dialog (struct frame *f, widget_value 
*first_wv)
       gtk_widget_show_all (menu);
 
       /* Process events that apply to the menu.  */
-      popup_widget_loop (1, menu);
+      popup_widget_loop (true, menu);
 
       unbind_to (specpdl_count, Qnil);
     }
@@ -1726,7 +1702,7 @@ create_and_show_dialog (struct frame *f, widget_value 
*first_wv)
   apply_systemfont_to_dialog (f->output_data.x->widget);
 #endif
   lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv,
-                    f->output_data.x->widget, 1, 0,
+                    f->output_data.x->widget, true, 0,
                     dialog_selection_callback, 0, 0);
   lw_modify_all_widgets (dialog_id, first_wv->contents, True);
   /* Display the dialog box.  */
@@ -1743,7 +1719,7 @@ create_and_show_dialog (struct frame *f, widget_value 
*first_wv)
 
     record_unwind_protect_int (pop_down_menu, (int) dialog_id);
 
-    popup_get_selection (0, FRAME_DISPLAY_INFO (f), dialog_id, 1);
+    popup_get_selection (0, FRAME_DISPLAY_INFO (f), dialog_id, true);
 
     unbind_to (count, Qnil);
   }
@@ -1766,8 +1742,8 @@ x_dialog_show (struct frame *f, Lisp_Object title,
 
   /* Number of elements seen so far, before boundary.  */
   int left_count = 0;
-  /* 1 means we've seen the boundary between left-hand elts and right-hand.  */
-  int boundary_seen = 0;
+  /* Whether we've seen the boundary between left-hand elts and right-hand.  */
+  bool boundary_seen = false;
 
   ptrdiff_t specpdl_count = SPECPDL_INDEX ();
 
@@ -1814,7 +1790,7 @@ x_dialog_show (struct frame *f, Lisp_Object title,
          {
            /* This is the boundary between left-side elts
               and right-side elts.  Stop incrementing right_count.  */
-           boundary_seen = 1;
+           boundary_seen = true;
            i++;
            continue;
          }
@@ -2100,7 +2076,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
          if ((menuflags & MENU_KEYMAPS) && !NILP (prefix))
            pane_string++;
 
-         lpane = XMenuAddPane (FRAME_X_DISPLAY (f), menu, pane_string, TRUE);
+         lpane = XMenuAddPane (FRAME_X_DISPLAY (f), menu, pane_string, true);
          if (lpane == XM_FAILURE)
            {
              XMenuDestroy (FRAME_X_DISPLAY (f), menu);
@@ -2225,8 +2201,8 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
       y += 1.5*height/(maxlines+2);
     }
 
-  XMenuSetAEQ (menu, TRUE);
-  XMenuSetFreeze (menu, TRUE);
+  XMenuSetAEQ (menu, true);
+  XMenuSetFreeze (menu, true);
   pane = selidx = 0;
 
 #ifndef MSDOS
@@ -2312,7 +2288,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
 /* Detect if a dialog or menu has been posted.  MSDOS has its own
    implementation on msdos.c.  */
 
-int ATTRIBUTE_CONST
+int
 popup_activated (void)
 {
   return popup_activated_flag;
diff --git a/src/xml.c b/src/xml.c
index 7e99beb..e324177 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -1,5 +1,5 @@
 /* Interface to libxml2.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -29,64 +29,70 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "buffer.h"
 
 
-static Lisp_Object Qlibxml2_dll;
-
 #ifdef WINDOWSNT
 
-#include <windows.h>
-#include "w32.h"
-
-/* Macro for defining functions that will be loaded from the libxml2 DLL.  */
-#define DEF_XML2_FN(rettype,func,args) static rettype (FAR CDECL 
*fn_##func)args
+# include <windows.h>
+# include "w32.h"
 
-/* Macro for loading libxml2 functions from the library.  */
-#define LOAD_XML2_FN(lib,func) {                                       \
-    fn_##func = (void *) GetProcAddress (lib, #func);                  \
-    if (!fn_##func) goto bad_library;                                  \
-  }
-
-DEF_XML2_FN (htmlDocPtr, htmlReadMemory,
+DEF_DLL_FN (htmlDocPtr, htmlReadMemory,
             (const char *, int, const char *, const char *, int));
-DEF_XML2_FN (xmlDocPtr, xmlReadMemory,
+DEF_DLL_FN (xmlDocPtr, xmlReadMemory,
             (const char *, int, const char *, const char *, int));
-DEF_XML2_FN (xmlNodePtr, xmlDocGetRootElement, (xmlDocPtr));
-DEF_XML2_FN (void, xmlFreeDoc, (xmlDocPtr));
-DEF_XML2_FN (void, xmlCleanupParser, (void));
-DEF_XML2_FN (void, xmlCheckVersion, (int));
+DEF_DLL_FN (xmlNodePtr, xmlDocGetRootElement, (xmlDocPtr));
+DEF_DLL_FN (void, xmlFreeDoc, (xmlDocPtr));
+DEF_DLL_FN (void, xmlCleanupParser, (void));
+DEF_DLL_FN (void, xmlCheckVersion, (int));
 
-static int
+static bool
 libxml2_loaded_p (void)
 {
   Lisp_Object found = Fassq (Qlibxml2_dll, Vlibrary_cache);
 
-  if (CONSP (found))
-    return EQ (XCDR (found), Qt) ? 1 : 0;
-  return 0;
+  return CONSP (found) && EQ (XCDR (found), Qt);
 }
 
-#else  /* !WINDOWSNT */
+# undef htmlReadMemory
+# undef xmlCheckVersion
+# undef xmlCleanupParser
+# undef xmlDocGetRootElement
+# undef xmlFreeDoc
+# undef xmlReadMemory
+
+# define htmlReadMemory fn_htmlReadMemory
+# define xmlCheckVersion fn_xmlCheckVersion
+# define xmlCleanupParser fn_xmlCleanupParser
+# define xmlDocGetRootElement fn_xmlDocGetRootElement
+# define xmlFreeDoc fn_xmlFreeDoc
+# define xmlReadMemory fn_xmlReadMemory
+
+static bool
+load_dll_functions (HMODULE library)
+{
+  LOAD_DLL_FN (library, htmlReadMemory);
+  LOAD_DLL_FN (library, xmlReadMemory);
+  LOAD_DLL_FN (library, xmlDocGetRootElement);
+  LOAD_DLL_FN (library, xmlFreeDoc);
+  LOAD_DLL_FN (library, xmlCleanupParser);
+  LOAD_DLL_FN (library, xmlCheckVersion);
+  return true;
+}
 
-#define fn_htmlReadMemory       htmlReadMemory
-#define fn_xmlReadMemory        xmlReadMemory
-#define fn_xmlDocGetRootElement xmlDocGetRootElement
-#define fn_xmlFreeDoc           xmlFreeDoc
-#define fn_xmlCleanupParser     xmlCleanupParser
-#define fn_xmlCheckVersion      xmlCheckVersion
+#else  /* !WINDOWSNT */
 
-static int
+static bool
 libxml2_loaded_p (void)
 {
-  return 1;
+  return true;
 }
 
 #endif /* !WINDOWSNT */
 
-static int
+static bool
 init_libxml2_functions (void)
 {
 #ifdef WINDOWSNT
   if (libxml2_loaded_p ())
-    return 1;
+    return true;
   else
     {
       HMODULE library;
@@ -94,28 +100,22 @@ init_libxml2_functions (void)
       if (!(library = w32_delayed_load (Qlibxml2_dll)))
        {
          message1 ("libxml2 library not found");
-         return 0;
+         return false;
        }
 
-      /* LOAD_XML2_FN jumps to bad_library if it fails to find the
-        named function.  */
-      LOAD_XML2_FN (library, htmlReadMemory);
-      LOAD_XML2_FN (library, xmlReadMemory);
-      LOAD_XML2_FN (library, xmlDocGetRootElement);
-      LOAD_XML2_FN (library, xmlFreeDoc);
-      LOAD_XML2_FN (library, xmlCleanupParser);
-      LOAD_XML2_FN (library, xmlCheckVersion);
+      if (! load_dll_functions (library))
+       goto bad_library;
 
       Vlibrary_cache = Fcons (Fcons (Qlibxml2_dll, Qt), Vlibrary_cache);
-      return 1;
+      return true;
     }
 
  bad_library:
   Vlibrary_cache = Fcons (Fcons (Qlibxml2_dll, Qnil), Vlibrary_cache);
 
-  return 0;
+  return false;
 #else  /* !WINDOWSNT */
-  return 1;
+  return true;
 #endif /* !WINDOWSNT */
 }
 
@@ -175,14 +175,15 @@ make_dom (xmlNode *node)
 }
 
 static Lisp_Object
-parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, int 
htmlp)
+parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url,
+             Lisp_Object discard_comments, bool htmlp)
 {
   xmlDoc *doc;
   Lisp_Object result = Qnil;
   const char *burl = "";
   ptrdiff_t istart, iend, istart_byte, iend_byte;
 
-  fn_xmlCheckVersion (LIBXML_VERSION);
+  xmlCheckVersion (LIBXML_VERSION);
 
   validate_region (&start, &end);
 
@@ -201,42 +202,45 @@ parse_region (Lisp_Object start, Lisp_Object end, 
Lisp_Object base_url, int html
     }
 
   if (htmlp)
-    doc = fn_htmlReadMemory ((char *) BYTE_POS_ADDR (istart_byte),
-                            iend_byte - istart_byte, burl, "utf-8",
-                            HTML_PARSE_RECOVER|HTML_PARSE_NONET|
-                            HTML_PARSE_NOWARNING|HTML_PARSE_NOERROR|
-                            HTML_PARSE_NOBLANKS);
+    doc = htmlReadMemory ((char *) BYTE_POS_ADDR (istart_byte),
+                         iend_byte - istart_byte, burl, "utf-8",
+                         HTML_PARSE_RECOVER|HTML_PARSE_NONET|
+                         HTML_PARSE_NOWARNING|HTML_PARSE_NOERROR|
+                         HTML_PARSE_NOBLANKS);
   else
-    doc = fn_xmlReadMemory ((char *) BYTE_POS_ADDR (istart_byte),
-                           iend_byte - istart_byte, burl, "utf-8",
-                           XML_PARSE_NONET|XML_PARSE_NOWARNING|
-                           XML_PARSE_NOBLANKS |XML_PARSE_NOERROR);
+    doc = xmlReadMemory ((char *) BYTE_POS_ADDR (istart_byte),
+                        iend_byte - istart_byte, burl, "utf-8",
+                        XML_PARSE_NONET|XML_PARSE_NOWARNING|
+                        XML_PARSE_NOBLANKS |XML_PARSE_NOERROR);
 
   if (doc != NULL)
     {
-      /* If the document is just comments, then this should get us the
-        nodes anyway. */
-      xmlNode *n = doc->children;
       Lisp_Object r = Qnil;
-
-      while (n) {
-       if (!NILP (r))
-         result = Fcons (r, result);
-       r = make_dom (n);
-       n = n->next;
-      }
+      if (NILP(discard_comments))
+        {
+          /* If the document has toplevel comments, then this should
+             get us the nodes and the comments. */
+          xmlNode *n = doc->children;
+
+          while (n) {
+            if (!NILP (r))
+              result = Fcons (r, result);
+            r = make_dom (n);
+            n = n->next;
+          }
+        }
 
       if (NILP (result)) {
-       /* The document isn't just comments, so get the tree the
-          proper way. */
-       xmlNode *node = fn_xmlDocGetRootElement (doc);
+       /* The document doesn't have toplevel comments or we discarded
+          them.  Get the tree the proper way. */
+       xmlNode *node = xmlDocGetRootElement (doc);
        if (node != NULL)
          result = make_dom (node);
       } else
        result = Fcons (intern ("top"),
                        Fcons (Qnil, Fnreverse (Fcons (r, result))));
 
-      fn_xmlFreeDoc (doc);
+      xmlFreeDoc (doc);
     }
 
   return result;
@@ -246,30 +250,32 @@ void
 xml_cleanup_parser (void)
 {
   if (libxml2_loaded_p ())
-    fn_xmlCleanupParser ();
+    xmlCleanupParser ();
 }
 
 DEFUN ("libxml-parse-html-region", Flibxml_parse_html_region,
        Slibxml_parse_html_region,
-       2, 3, 0,
+       2, 4, 0,
        doc: /* Parse the region as an HTML document and return the parse tree.
-If BASE-URL is non-nil, it is used to expand relative URLs.  */)
-  (Lisp_Object start, Lisp_Object end, Lisp_Object base_url)
+If BASE-URL is non-nil, it is used to expand relative URLs.
+If DISCARD-COMMENTS is non-nil, all HTML comments are discarded. */)
+  (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, Lisp_Object 
discard_comments)
 {
   if (init_libxml2_functions ())
-    return parse_region (start, end, base_url, 1);
+    return parse_region (start, end, base_url, discard_comments, true);
   return Qnil;
 }
 
 DEFUN ("libxml-parse-xml-region", Flibxml_parse_xml_region,
        Slibxml_parse_xml_region,
-       2, 3, 0,
+       2, 4, 0,
        doc: /* Parse the region as an XML document and return the parse tree.
-If BASE-URL is non-nil, it is used to expand relative URLs.  */)
-  (Lisp_Object start, Lisp_Object end, Lisp_Object base_url)
+If BASE-URL is non-nil, it is used to expand relative URLs.
+If DISCARD-COMMENTS is non-nil, all HTML comments are discarded. */)
+  (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, Lisp_Object 
discard_comments)
 {
   if (init_libxml2_functions ())
-    return parse_region (start, end, base_url, 0);
+    return parse_region (start, end, base_url, discard_comments, false);
   return Qnil;
 }
 
diff --git a/src/xrdb.c b/src/xrdb.c
index 32ad3c7..9e85e5a 100644
--- a/src/xrdb.c
+++ b/src/xrdb.c
@@ -1,5 +1,5 @@
 /* Deal with the X Resource Manager.
-   Copyright (C) 1990, 1993-1994, 2000-2014 Free Software Foundation,
+   Copyright (C) 1990, 1993-1994, 2000-2015 Free Software Foundation,
    Inc.
 
 Author: Joseph Arceneaux
@@ -232,9 +232,10 @@ gethomedir (void)
   if (ptr == NULL)
     return xstrdup ("/");
 
-  copy = xmalloc (strlen (ptr) + 2);
-  strcpy (copy, ptr);
-  return strcat (copy, "/");
+  ptrdiff_t len = strlen (ptr);
+  copy = xmalloc (len + 2);
+  strcpy (copy + len, "/");
+  return memcpy (copy, ptr, len);
 }
 
 
@@ -334,6 +335,7 @@ get_user_app (const char *class)
   return db;
 }
 
+static char const xdefaults[] = ".Xdefaults";
 
 static XrmDatabase
 get_user_db (Display *display)
@@ -351,16 +353,12 @@ get_user_db (Display *display)
     db = XrmGetStringDatabase (xdefs);
   else
     {
-      char *home;
-      char *xdefault;
-
-      home = gethomedir ();
-      xdefault = xmalloc (strlen (home) + sizeof ".Xdefaults");
-      strcpy (xdefault, home);
-      strcat (xdefault, ".Xdefaults");
-      db = XrmGetFileDatabase (xdefault);
-      xfree (home);
-      xfree (xdefault);
+      char *home = gethomedir ();
+      ptrdiff_t homelen = strlen (home);
+      char *filename = xrealloc (home, homelen + sizeof xdefaults);
+      strcpy (filename + homelen, xdefaults);
+      db = XrmGetFileDatabase (filename);
+      xfree (filename);
     }
 
 #ifdef HAVE_XSCREENRESOURCESTRING
@@ -380,24 +378,23 @@ static XrmDatabase
 get_environ_db (void)
 {
   XrmDatabase db;
-  char *p;
-  char *path = 0;
+  char *p = getenv ("XENVIRONMENT");
+  char *filename = 0;
 
-  if ((p = getenv ("XENVIRONMENT")) == NULL)
+  if (!p)
     {
-      static char const xdefaults[] = ".Xdefaults-";
       char *home = gethomedir ();
-      char const *host = SSDATA (Vsystem_name);
-      ptrdiff_t pathsize = (strlen (home) + sizeof xdefaults
-                           + SBYTES (Vsystem_name));
-      path = xrealloc (home, pathsize);
-      strcat (strcat (path, xdefaults), host);
-      p = path;
+      ptrdiff_t homelen = strlen (home);
+      Lisp_Object system_name = Fsystem_name ();
+      ptrdiff_t filenamesize = (homelen + sizeof xdefaults
+                               + SBYTES (system_name));
+      p = filename = xrealloc (home, filenamesize);
+      lispstpcpy (stpcpy (filename + homelen, xdefaults), system_name);
     }
 
   db = XrmGetFileDatabase (p);
 
-  xfree (path);
+  xfree (filename);
 
   return db;
 }
@@ -670,7 +667,7 @@ main (int argc, char **argv)
   /* In a real program, you'd want to also do this: */
   display->db = xdb;
 
-  while (1)
+  while (true)
     {
       char query_name[90];
       char query_class[90];
diff --git a/src/xselect.c b/src/xselect.c
index 92e8982..027192d 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -1,5 +1,5 @@
 /* X Selection processing for Emacs.
-   Copyright (C) 1993-1997, 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 1993-1997, 2000-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -46,9 +46,10 @@ struct prop_location;
 struct selection_data;
 
 static void x_decline_selection_request (struct input_event *);
-static int x_convert_selection (struct input_event *, Lisp_Object, Lisp_Object,
-                               Atom, int, struct x_display_info *);
-static int waiting_for_other_props_on_window (Display *, Window);
+static bool x_convert_selection (struct input_event *, Lisp_Object,
+                                Lisp_Object, Atom, bool,
+                                struct x_display_info *);
+static bool waiting_for_other_props_on_window (Display *, Window);
 static struct prop_location *expect_property_change (Display *, Window,
                                                      Atom, int);
 static void unexpect_property_change (struct prop_location *);
@@ -79,19 +80,6 @@ static void lisp_data_to_selection_data (struct 
x_display_info *, Lisp_Object,
 #define TRACE2(fmt, a0, a1)    (void) 0
 #endif
 
-
-static Lisp_Object QSECONDARY, QSTRING, QINTEGER, QCLIPBOARD, QTIMESTAMP,
-  QTEXT, QDELETE, QMULTIPLE, QINCR, QEMACS_TMP, QTARGETS, QATOM, QNULL,
-  QATOM_PAIR, QCLIPBOARD_MANAGER, QSAVE_TARGETS;
-
-static Lisp_Object QCOMPOUND_TEXT;     /* This is a type of selection.  */
-static Lisp_Object QUTF8_STRING;       /* This is a type of selection.  */
-
-static Lisp_Object Qcompound_text_with_extensions;
-
-static Lisp_Object Qforeign_selection;
-static Lisp_Object Qx_lost_selection_functions, Qx_sent_selection_functions;
-
 /* Bytes needed to represent 'long' data.  This is as per libX11; it
    is not necessarily sizeof (long).  */
 #define X_LONG_SIZE 4
@@ -360,7 +348,7 @@ x_own_selection (Lisp_Object selection_name, Lisp_Object 
selection_value,
 
 static Lisp_Object
 x_get_local_selection (Lisp_Object selection_symbol, Lisp_Object target_type,
-                      int local_request, struct x_display_info *dpyinfo)
+                      bool local_request, struct x_display_info *dpyinfo)
 {
   Lisp_Object local_value;
   Lisp_Object handler_fn, value, check;
@@ -470,7 +458,7 @@ struct selection_data
   ptrdiff_t size;
   int format;
   Atom type;
-  int nofree;
+  bool nofree;
   Atom property;
   /* This can be set to non-NULL during x_reply_selection_request, if
      the selection is waiting for an INCR transfer to complete.  Don't
@@ -498,7 +486,7 @@ x_selection_request_lisp_error (void)
   for (cs = converted_selections; cs; cs = next)
     {
       next = cs->next;
-      if (cs->nofree == 0 && cs->data)
+      if (! cs->nofree && cs->data)
        xfree (cs->data);
       xfree (cs);
     }
@@ -531,7 +519,7 @@ struct prop_location
   Window window;
   Atom property;
   int desired_state;
-  int arrived;
+  bool arrived;
   struct prop_location *next;
 };
 
@@ -747,7 +735,7 @@ x_handle_selection_request (struct input_event *event)
   Lisp_Object target_symbol = x_atom_to_symbol (dpyinfo, target);
   Atom property = SELECTION_EVENT_PROPERTY (event);
   Lisp_Object local_selection_data;
-  int success = 0;
+  bool success = false;
   ptrdiff_t count = SPECPDL_INDEX ();
   GCPRO2 (local_selection_data, target_symbol);
 
@@ -805,9 +793,9 @@ x_handle_selection_request (struct input_event *event)
 
          if (subproperty != None)
            x_convert_selection (event, selection_symbol, subtarget,
-                                subproperty, 1, dpyinfo);
+                                subproperty, true, dpyinfo);
        }
-      success = 1;
+      success = true;
     }
   else
     {
@@ -815,7 +803,7 @@ x_handle_selection_request (struct input_event *event)
        property = SELECTION_EVENT_TARGET (event);
       success = x_convert_selection (event, selection_symbol,
                                     target_symbol, property,
-                                    0, dpyinfo);
+                                    false, dpyinfo);
     }
 
  DONE:
@@ -829,14 +817,8 @@ x_handle_selection_request (struct input_event *event)
   /* Run the `x-sent-selection-functions' abnormal hook.  */
   if (!NILP (Vx_sent_selection_functions)
       && !EQ (Vx_sent_selection_functions, Qunbound))
-    {
-      Lisp_Object args[4];
-      args[0] = Qx_sent_selection_functions;
-      args[1] = selection_symbol;
-      args[2] = target_symbol;
-      args[3] = success ? Qt : Qnil;
-      Frun_hook_with_args (4, args);
-    }
+    CALLN (Frun_hook_with_args, Qx_sent_selection_functions,
+          selection_symbol, target_symbol, success ? Qt : Qnil);
 
   unbind_to (count, Qnil);
   UNGCPRO;
@@ -844,15 +826,15 @@ x_handle_selection_request (struct input_event *event)
 
 /* Perform the requested selection conversion, and write the data to
    the converted_selections linked list, where it can be accessed by
-   x_reply_selection_request.  If FOR_MULTIPLE is non-zero, write out
+   x_reply_selection_request.  If FOR_MULTIPLE, write out
    the data even if conversion fails, using conversion_fail_tag.
 
-   Return 0 if the selection failed to convert, 1 otherwise.  */
+   Return true iff successful.  */
 
-static int
+static bool
 x_convert_selection (struct input_event *event, Lisp_Object selection_symbol,
                     Lisp_Object target_symbol, Atom property,
-                    int for_multiple, struct x_display_info *dpyinfo)
+                    bool for_multiple, struct x_display_info *dpyinfo)
 {
   struct gcpro gcpro1;
   Lisp_Object lisp_selection;
@@ -861,7 +843,7 @@ x_convert_selection (struct input_event *event, Lisp_Object 
selection_symbol,
 
   lisp_selection
     = x_get_local_selection (selection_symbol, target_symbol,
-                            0, dpyinfo);
+                            false, dpyinfo);
 
   /* A nil return value means we can't perform the conversion.  */
   if (NILP (lisp_selection)
@@ -874,7 +856,7 @@ x_convert_selection (struct input_event *event, Lisp_Object 
selection_symbol,
          cs->size = 1;
          cs->format = 32;
          cs->type = XA_ATOM;
-         cs->nofree = 1;
+         cs->nofree = true;
          cs->property = property;
          cs->wait_object = NULL;
          cs->next = converted_selections;
@@ -882,20 +864,20 @@ x_convert_selection (struct input_event *event, 
Lisp_Object selection_symbol,
        }
 
       UNGCPRO;
-      return 0;
+      return false;
     }
 
   /* Otherwise, record the converted selection to binary.  */
   cs = xmalloc (sizeof *cs);
   cs->data = NULL;
-  cs->nofree = 1;
+  cs->nofree = true;
   cs->property = property;
   cs->wait_object = NULL;
   cs->next = converted_selections;
   converted_selections = cs;
   lisp_data_to_selection_data (dpyinfo, lisp_selection, cs);
   UNGCPRO;
-  return 1;
+  return true;
 }
 
 /* Handle a SelectionClear event EVENT, which indicates that some
@@ -949,12 +931,7 @@ x_handle_selection_clear (struct input_event *event)
   tset_selection_alist (dpyinfo->terminal, Vselection_alist);
 
   /* Run the `x-lost-selection-functions' abnormal hook.  */
-  {
-    Lisp_Object args[2];
-    args[0] = Qx_lost_selection_functions;
-    args[1] = selection_symbol;
-    Frun_hook_with_args (2, args);
-  }
+  CALLN (Frun_hook_with_args, Qx_lost_selection_functions, selection_symbol);
 
   redisplay_preserve_echo_area (20);
 }
@@ -990,10 +967,8 @@ x_clear_frame_selections (struct frame *f)
         && EQ (frame, XCAR (XCDR (XCDR (XCDR (XCAR (t->Vselection_alist)))))))
     {
       /* Run the `x-lost-selection-functions' abnormal hook.  */
-      Lisp_Object args[2];
-      args[0] = Qx_lost_selection_functions;
-      args[1] = Fcar (Fcar (t->Vselection_alist));
-      Frun_hook_with_args (2, args);
+      CALLN (Frun_hook_with_args, Qx_lost_selection_functions,
+            Fcar (Fcar (t->Vselection_alist)));
 
       tset_selection_alist (t, XCDR (t->Vselection_alist));
     }
@@ -1003,28 +978,23 @@ x_clear_frame_selections (struct frame *f)
     if (CONSP (XCDR (rest))
        && EQ (frame, XCAR (XCDR (XCDR (XCDR (XCAR (XCDR (rest))))))))
       {
-       Lisp_Object args[2];
-       args[0] = Qx_lost_selection_functions;
-       args[1] = XCAR (XCAR (XCDR (rest)));
-       Frun_hook_with_args (2, args);
+       CALLN (Frun_hook_with_args, Qx_lost_selection_functions,
+              XCAR (XCAR (XCDR (rest))));
        XSETCDR (rest, XCDR (XCDR (rest)));
        break;
       }
 }
 
-/* Nonzero if any properties for DISPLAY and WINDOW
+/* True if any properties for DISPLAY and WINDOW
    are on the list of what we are waiting for.  */
 
-static int
+static bool
 waiting_for_other_props_on_window (Display *display, Window window)
 {
-  struct prop_location *rest = property_change_wait_list;
-  while (rest)
-    if (rest->display == display && rest->window == window)
-      return 1;
-    else
-      rest = rest->next;
-  return 0;
+  for (struct prop_location *p = property_change_wait_list; p; p = p->next)
+    if (p->display == display && p->window == window)
+      return true;
+  return false;
 }
 
 /* Add an entry to the list of property changes we are waiting for.
@@ -1043,7 +1013,7 @@ expect_property_change (Display *display, Window window,
   pl->property = property;
   pl->desired_state = state;
   pl->next = property_change_wait_list;
-  pl->arrived = 0;
+  pl->arrived = false;
   property_change_wait_list = pl;
   return pl;
 }
@@ -1106,7 +1076,7 @@ wait_for_property_change (struct prop_location *location)
       EMACS_INT secs = timeout / 1000;
       int nsecs = (timeout % 1000) * 1000000;
       TRACE2 ("  Waiting %"pI"d secs, %d nsecs", secs, nsecs);
-      wait_reading_process_output (secs, nsecs, 0, 0,
+      wait_reading_process_output (secs, nsecs, 0, false,
                                   property_change_reply, NULL, 0);
 
       if (NILP (XCAR (property_change_reply)))
@@ -1138,7 +1108,7 @@ x_handle_property_notify (const XPropertyEvent *event)
                  (event->state == PropertyDelete ? "deletion" : "change"),
                  XGetAtomName (event->display, event->atom));
 
-         rest->arrived = 1;
+         rest->arrived = true;
 
          /* If this is the one wait_for_property_change is waiting for,
             tell it to wake up.  */
@@ -1204,7 +1174,7 @@ x_get_foreign_selection (Lisp_Object selection_symbol, 
Lisp_Object target_type,
      during this time.  In fact, the SAVE_TARGETS mechanism requires
      us to handle a clipboard manager's requests before it returns
      SelectionNotify. */
-#if 0
+#if false
   x_start_queuing_selection_requests ();
   record_unwind_protect_void (x_stop_queuing_selection_requests);
 #endif
@@ -1216,7 +1186,7 @@ x_get_foreign_selection (Lisp_Object selection_symbol, 
Lisp_Object target_type,
   secs = timeout / 1000;
   nsecs = (timeout % 1000) * 1000000;
   TRACE1 ("  Start waiting %"pI"d secs for SelectionNotify", secs);
-  wait_reading_process_output (secs, nsecs, 0, 0,
+  wait_reading_process_output (secs, nsecs, 0, false,
                               reading_selection_reply, NULL, 0);
   TRACE1 ("  Got event = %d", !NILP (XCAR (reading_selection_reply)));
 
@@ -1240,7 +1210,7 @@ static void
 x_get_window_property (Display *display, Window window, Atom property,
                       unsigned char **data_ret, ptrdiff_t *bytes_ret,
                       Atom *actual_type_ret, int *actual_format_ret,
-                      unsigned long *actual_size_ret, int delete_p)
+                      unsigned long *actual_size_ret)
 {
   ptrdiff_t total_size;
   unsigned long bytes_remaining;
@@ -1413,7 +1383,7 @@ receive_incremental_selection (struct x_display_info 
*dpyinfo,
   XFlush (display);
   unblock_input ();
 
-  while (1)
+  while (true)
     {
       unsigned char *tmp_data;
       ptrdiff_t tmp_size_bytes;
@@ -1427,7 +1397,7 @@ receive_incremental_selection (struct x_display_info 
*dpyinfo,
       TRACE0 ("  Get property value");
       x_get_window_property (display, window, property,
                             &tmp_data, &tmp_size_bytes,
-                            type_ret, format_ret, size_ret, 1);
+                            type_ret, format_ret, size_ret);
 
       TRACE1 ("  Read increment of %"pD"d bytes", tmp_size_bytes);
 
@@ -1488,13 +1458,12 @@ x_get_window_property_as_lisp_data (struct 
x_display_info *dpyinfo,
   TRACE0 ("Reading selection data");
 
   x_get_window_property (display, window, property, &data, &bytes,
-                        &actual_type, &actual_format, &actual_size, 1);
+                        &actual_type, &actual_format, &actual_size);
   if (! data)
     {
-      int there_is_a_selection_owner;
       block_input ();
-      there_is_a_selection_owner
-       = XGetSelectionOwner (display, selection_atom);
+      bool there_is_a_selection_owner
+       = XGetSelectionOwner (display, selection_atom) != 0;
       unblock_input ();
       if (there_is_a_selection_owner)
        signal_error ("Selection owner couldn't convert",
@@ -1687,7 +1656,7 @@ lisp_data_to_selection_data (struct x_display_info 
*dpyinfo,
   Lisp_Object type = Qnil;
 
   eassert (cs != NULL);
-  cs->nofree = 0;
+  cs->nofree = false;
 
   if (CONSP (obj) && SYMBOLP (XCAR (obj)))
     {
@@ -1714,7 +1683,7 @@ lisp_data_to_selection_data (struct x_display_info 
*dpyinfo,
       cs->format = 8;
       cs->size = SBYTES (obj);
       cs->data = SDATA (obj);
-      cs->nofree = 1;
+      cs->nofree = true;
     }
   else if (SYMBOLP (obj))
     {
@@ -1981,7 +1950,7 @@ On Nextstep, TIME-STAMP and TERMINAL are unused.  */)
   if (!f)
     error ("X selection unavailable for this frame");
 
-  val = x_get_local_selection (selection_symbol, target_type, 1,
+  val = x_get_local_selection (selection_symbol, target_type, true,
                               FRAME_DISPLAY_INFO (f));
 
   if (NILP (val) && FRAME_LIVE_P (f))
@@ -2154,7 +2123,7 @@ x_clipboard_manager_error_1 (Lisp_Object err)
 {
   AUTO_STRING (format, "X clipboard manager error: %s\n\
 If the problem persists, set `x-select-enable-clipboard-manager' to nil.");
-  Fmessage (2, (Lisp_Object []) {format, CAR (CDR (err))});
+  CALLN (Fmessage, format, CAR (CDR (err)));
   return Qnil;
 }
 
@@ -2432,7 +2401,7 @@ FRAME is on.  If FRAME is nil, the selected frame is 
used.  */)
 
 /* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT.  
*/
 
-int
+bool
 x_handle_dnd_message (struct frame *f, const XClientMessageEvent *event,
                       struct x_display_info *dpyinfo, struct input_event *bufp)
 {
@@ -2448,7 +2417,7 @@ x_handle_dnd_message (struct frame *f, const 
XClientMessageEvent *event,
   for (i = 0; i < dpyinfo->x_dnd_atoms_length; ++i)
     if (dpyinfo->x_dnd_atoms[i] == event->message_type) break;
 
-  if (i == dpyinfo->x_dnd_atoms_length) return 0;
+  if (i == dpyinfo->x_dnd_atoms_length) return false;
 
   XSETFRAME (frame, f);
 
@@ -2484,7 +2453,7 @@ x_handle_dnd_message (struct frame *f, const 
XClientMessageEvent *event,
   bufp->arg = vec;
   bufp->modifiers = 0;
 
-  return 1;
+  return true;
 }
 
 DEFUN ("x-send-client-message", Fx_send_client_message,
@@ -2535,7 +2504,7 @@ x_send_client_event (Lisp_Object display, Lisp_Object 
dest, Lisp_Object from,
   Window wdest;
   XEvent event;
   struct frame *f = decode_window_system_frame (from);
-  int to_root;
+  bool to_root;
 
   CHECK_NUMBER (format);
   CHECK_CONS (values);
@@ -2592,7 +2561,7 @@ x_send_client_event (Lisp_Object display, Lisp_Object 
dest, Lisp_Object from,
      event then goes to clients selecting for events on the root window.  */
   x_catch_errors (dpyinfo->display);
   {
-    int propagate = to_root ? False : True;
+    bool propagate = !to_root;
     long mask = to_root ? 0xffffff : 0;
 
     XSendEvent (dpyinfo->display, wdest, propagate, mask, &event);
@@ -2690,8 +2659,11 @@ A value of 0 means wait as long as necessary.  This is 
initialized from the
   DEFSYM (QCLIPBOARD, "CLIPBOARD");
   DEFSYM (QTIMESTAMP, "TIMESTAMP");
   DEFSYM (QTEXT, "TEXT");
+
+  /* These are types of selection.  */
   DEFSYM (QCOMPOUND_TEXT, "COMPOUND_TEXT");
   DEFSYM (QUTF8_STRING, "UTF8_STRING");
+
   DEFSYM (QDELETE, "DELETE");
   DEFSYM (QMULTIPLE, "MULTIPLE");
   DEFSYM (QINCR, "INCR");
diff --git a/src/xsettings.c b/src/xsettings.c
index 5f4275d..028487b 100644
--- a/src/xsettings.c
+++ b/src/xsettings.c
@@ -1,6 +1,6 @@
 /* Functions for handling font and other changes dynamically.
 
-Copyright (C) 2009-2014 Free Software Foundation, Inc.
+Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -51,8 +51,6 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 static char *current_mono_font;
 static char *current_font;
 static struct x_display_info *first_dpyinfo;
-static Lisp_Object Qmonospace_font_name, Qfont_name, Qfont_render,
-  Qtool_bar_style;
 static Lisp_Object current_tool_bar_style;
 
 /* Store an config changed event in to the event queue.  */
@@ -68,11 +66,11 @@ store_config_changed_event (Lisp_Object arg, Lisp_Object 
display_name)
   kbd_buffer_store_event (&event);
 }
 
-/* Return non-zero if DPYINFO is still valid.  */
-static int
+/* Return true if DPYINFO is still valid.  */
+static bool
 dpyinfo_valid (struct x_display_info *dpyinfo)
 {
-  int found = 0;
+  bool found = false;
   if (dpyinfo != NULL)
     {
       struct x_display_info *d;
@@ -404,7 +402,7 @@ parse_settings (unsigned char *prop,
 
   /* First 4 bytes is a serial number, skip that.  */
 
-  if (bytes < 12) return BadLength;
+  if (bytes < 12) return settings_seen;
   memcpy (&n_settings, prop+8, 4);
   if (my_bo != that_bo) n_settings = bswap_32 (n_settings);
   bytes_parsed = 12;
@@ -419,7 +417,7 @@ parse_settings (unsigned char *prop,
       CARD32 vlen, ival = 0;
       char name[128]; /* The names we are looking for are not this long.  */
       char sval[128]; /* The values we are looking for are not this long.  */
-      int want_this;
+      bool want_this;
       int to_cpy;
 
       sval[0] = '\0';
@@ -429,8 +427,8 @@ parse_settings (unsigned char *prop,
       memcpy (&nlen, prop+bytes_parsed, 2);
       bytes_parsed += 2;
       if (my_bo != that_bo) nlen = bswap_16 (nlen);
-      if (bytes_parsed+nlen > bytes) return BadLength;
-      to_cpy = nlen > 127 ? 127 : nlen;
+      if (bytes_parsed + nlen > bytes) return settings_seen;
+      to_cpy = min (nlen, sizeof name - 1);
       memcpy (name, prop+bytes_parsed, to_cpy);
       name[to_cpy] = '\0';
 
@@ -438,20 +436,19 @@ parse_settings (unsigned char *prop,
       bytes_parsed = PAD (bytes_parsed);
 
       bytes_parsed += 4; /* Skip serial for this value */
-      if (bytes_parsed > bytes) return BadLength;
+      if (bytes_parsed > bytes) return settings_seen;
 
-      want_this =
+      want_this = strcmp (XSETTINGS_TOOL_BAR_STYLE, name) == 0;
 #ifdef HAVE_XFT
-        (nlen > 6 && strncmp (name, "Xft/", 4) == 0)
-        || strcmp (XSETTINGS_FONT_NAME, name) == 0
-        ||
+      if ((nlen > 6 && memcmp (name, "Xft/", 4) == 0)
+         || strcmp (XSETTINGS_FONT_NAME, name) == 0)
+       want_this = true;
 #endif
-        strcmp (XSETTINGS_TOOL_BAR_STYLE, name) == 0;
 
       switch (type)
         {
         case 0: /* Integer */
-          if (bytes_parsed+4 > bytes) return BadLength;
+          if (bytes_parsed + 4 > bytes) return settings_seen;
           if (want_this)
             {
               memcpy (&ival, prop+bytes_parsed, 4);
@@ -461,13 +458,13 @@ parse_settings (unsigned char *prop,
           break;
 
         case 1: /* String */
-          if (bytes_parsed+4 > bytes) return BadLength;
+          if (bytes_parsed + 4 > bytes) return settings_seen;
           memcpy (&vlen, prop+bytes_parsed, 4);
           bytes_parsed += 4;
           if (my_bo != that_bo) vlen = bswap_32 (vlen);
           if (want_this)
             {
-              to_cpy = vlen > 127 ? 127 : vlen;
+              to_cpy = min (vlen, sizeof sval - 1);
               memcpy (sval, prop+bytes_parsed, to_cpy);
               sval[to_cpy] = '\0';
             }
@@ -477,17 +474,16 @@ parse_settings (unsigned char *prop,
 
         case 2: /* RGB value */
           /* No need to parse this */
-          if (bytes_parsed+8 > bytes) return BadLength;
+          if (bytes_parsed + 8 > bytes) return settings_seen;
           bytes_parsed += 8; /* 4 values (r, b, g, alpha), 2 bytes each.  */
           break;
 
         default: /* Parse Error */
-          return BadValue;
+          return settings_seen;
         }
 
       if (want_this)
         {
-          ++settings_seen;
           if (strcmp (name, XSETTINGS_TOOL_BAR_STYLE) == 0)
             {
               dupstring (&settings->tb_style, sval);
@@ -557,6 +553,9 @@ parse_settings (unsigned char *prop,
                 settings->seen &= ~SEEN_LCDFILTER;
             }
 #endif /* HAVE_XFT */
+         else
+           want_this = false;
+         settings_seen += want_this;
         }
     }
 
@@ -565,9 +564,9 @@ parse_settings (unsigned char *prop,
 
 /* Read settings from the XSettings property window on display for DPYINFO.
    Store settings read in SETTINGS.
-   Return non-zero if successful, zero if not.  */
+   Return true iff successful.  */
 
-static int
+static bool
 read_settings (struct x_display_info *dpyinfo, struct xsettings *settings)
 {
   Atom act_type;
@@ -576,6 +575,7 @@ read_settings (struct x_display_info *dpyinfo, struct 
xsettings *settings)
   unsigned char *prop = NULL;
   Display *dpy = dpyinfo->display;
   int rc;
+  bool got_settings = false;
 
   x_catch_errors (dpy);
   rc = XGetWindowProperty (dpy,
@@ -587,27 +587,26 @@ read_settings (struct x_display_info *dpyinfo, struct 
xsettings *settings)
 
   if (rc == Success && prop != NULL && act_form == 8 && nitems > 0
       && act_type == dpyinfo->Xatom_xsettings_prop)
-    rc = parse_settings (prop, nitems, settings);
+    got_settings = parse_settings (prop, nitems, settings) != 0;
 
   XFree (prop);
 
   x_uncatch_errors ();
 
-  return rc != 0;
+  return got_settings;
 }
 
 /* Apply Xft settings in SETTINGS to the Xft library.
-   If SEND_EVENT_P is non-zero store a Lisp event that Xft settings changed.  
*/
+   Store a Lisp event that Xft settings changed.  */
 
 static void
 apply_xft_settings (struct x_display_info *dpyinfo,
-                    int send_event_p,
                     struct xsettings *settings)
 {
 #ifdef HAVE_XFT
   FcPattern *pat;
   struct xsettings oldsettings;
-  int changed = 0;
+  bool changed = false;
 
   memset (&oldsettings, 0, sizeof (oldsettings));
   pat = FcPatternCreate ();
@@ -627,7 +626,7 @@ apply_xft_settings (struct x_display_info *dpyinfo,
     {
       FcPatternDel (pat, FC_ANTIALIAS);
       FcPatternAddBool (pat, FC_ANTIALIAS, settings->aa);
-      ++changed;
+      changed = true;
       oldsettings.aa = settings->aa;
     }
 
@@ -636,7 +635,7 @@ apply_xft_settings (struct x_display_info *dpyinfo,
     {
       FcPatternDel (pat, FC_HINTING);
       FcPatternAddBool (pat, FC_HINTING, settings->hinting);
-      ++changed;
+      changed = true;
       oldsettings.hinting = settings->hinting;
     }
   if ((settings->seen & SEEN_RGBA) != 0 && oldsettings.rgba != settings->rgba)
@@ -644,7 +643,7 @@ apply_xft_settings (struct x_display_info *dpyinfo,
       FcPatternDel (pat, FC_RGBA);
       FcPatternAddInteger (pat, FC_RGBA, settings->rgba);
       oldsettings.rgba = settings->rgba;
-      ++changed;
+      changed = true;
     }
 
   /* Older fontconfig versions don't have FC_LCD_FILTER. */
@@ -653,7 +652,7 @@ apply_xft_settings (struct x_display_info *dpyinfo,
     {
       FcPatternDel (pat, FC_LCD_FILTER);
       FcPatternAddInteger (pat, FC_LCD_FILTER, settings->lcdfilter);
-      ++changed;
+      changed = true;
       oldsettings.lcdfilter = settings->lcdfilter;
     }
 
@@ -663,7 +662,7 @@ apply_xft_settings (struct x_display_info *dpyinfo,
     {
       FcPatternDel (pat, FC_HINT_STYLE);
       FcPatternAddInteger (pat, FC_HINT_STYLE, settings->hintstyle);
-      ++changed;
+      changed = true;
       oldsettings.hintstyle = settings->hintstyle;
     }
 #endif
@@ -673,7 +672,7 @@ apply_xft_settings (struct x_display_info *dpyinfo,
     {
       FcPatternDel (pat, FC_DPI);
       FcPatternAddDouble (pat, FC_DPI, settings->dpi);
-      ++changed;
+      changed = true;
       oldsettings.dpi = settings->dpi;
 
       /* Changing the DPI on this display affects all frames on it.
@@ -699,9 +698,8 @@ apply_xft_settings (struct x_display_info *dpyinfo,
       char buf[sizeof format + d_formats * d_growth + lf_formats * lf_growth];
 
       XftDefaultSet (dpyinfo->display, pat);
-      if (send_event_p)
-        store_config_changed_event (Qfont_render,
-                                    XCAR (dpyinfo->name_list_element));
+      store_config_changed_event (Qfont_render,
+                                 XCAR (dpyinfo->name_list_element));
       Vxft_settings
        = make_formatted_string (buf, format,
                                 oldsettings.aa, oldsettings.hinting,
@@ -715,17 +713,17 @@ apply_xft_settings (struct x_display_info *dpyinfo,
 }
 
 /* Read XSettings from the display for DPYINFO.
-   If SEND_EVENT_P is non-zero store a Lisp event settings that changed.  */
+   If SEND_EVENT_P store a Lisp event settings that changed.  */
 
 static void
-read_and_apply_settings (struct x_display_info *dpyinfo, int send_event_p)
+read_and_apply_settings (struct x_display_info *dpyinfo, bool send_event_p)
 {
   struct xsettings settings;
 
   if (!read_settings (dpyinfo, &settings))
     return;
 
-  apply_xft_settings (dpyinfo, True, &settings);
+  apply_xft_settings (dpyinfo, &settings);
   if (settings.seen & SEEN_TB_STYLE)
     {
       if (send_event_p)
@@ -751,27 +749,27 @@ read_and_apply_settings (struct x_display_info *dpyinfo, 
int send_event_p)
 void
 xft_settings_event (struct x_display_info *dpyinfo, const XEvent *event)
 {
-  bool check_window_p = 0, apply_settings_p = 0;
+  bool check_window_p = false, apply_settings_p = false;
 
   switch (event->type)
     {
     case DestroyNotify:
       if (dpyinfo->xsettings_window == event->xany.window)
-        check_window_p = 1;
+        check_window_p = true;
       break;
 
     case ClientMessage:
       if (event->xclient.message_type == dpyinfo->Xatom_xsettings_mgr
           && event->xclient.data.l[1] == dpyinfo->Xatom_xsettings_sel
           && event->xclient.window == dpyinfo->root_window)
-        check_window_p = 1;
+        check_window_p = true;
       break;
 
     case PropertyNotify:
       if (event->xproperty.window == dpyinfo->xsettings_window
           && event->xproperty.state == PropertyNewValue
           && event->xproperty.atom == dpyinfo->Xatom_xsettings_prop)
-        apply_settings_p = 1;
+        apply_settings_p = true;
       break;
     }
 
@@ -781,11 +779,11 @@ xft_settings_event (struct x_display_info *dpyinfo, const 
XEvent *event)
       dpyinfo->xsettings_window = None;
       get_prop_window (dpyinfo);
       if (dpyinfo->xsettings_window != None)
-        apply_settings_p = 1;
+        apply_settings_p = true;
     }
 
   if (apply_settings_p)
-    read_and_apply_settings (dpyinfo, True);
+    read_and_apply_settings (dpyinfo, true);
 }
 
 /* Initialize GSettings and read startup values.  */
@@ -795,7 +793,7 @@ init_gsettings (void)
 {
 #ifdef HAVE_GSETTINGS
   GVariant *val;
-  int schema_found = 0;
+  bool schema_found = false;
 
 #if ! GLIB_CHECK_VERSION (2, 36, 0)
   g_type_init ();
@@ -806,7 +804,7 @@ init_gsettings (void)
     GSettingsSchema *sc = g_settings_schema_source_lookup
       (g_settings_schema_source_get_default (),
        GSETTINGS_SCHEMA,
-       TRUE);
+       true);
     schema_found = sc != NULL;
     if (sc) g_settings_schema_unref (sc);
   }
@@ -937,7 +935,7 @@ init_xsettings (struct x_display_info *dpyinfo)
 
   get_prop_window (dpyinfo);
   if (dpyinfo->xsettings_window != None)
-    read_and_apply_settings (dpyinfo, False);
+    read_and_apply_settings (dpyinfo, false);
 
   unblock_input ();
 }
@@ -1030,7 +1028,7 @@ syms_of_xsettings (void)
 When this is non-nil and the system defined fixed width font changes, we
 update frames dynamically.
 If this variable is nil, Emacs ignores system font changes.  */);
-  use_system_font = 0;
+  use_system_font = false;
 
   DEFVAR_LISP ("xft-settings", Vxft_settings,
                doc: /* Font settings applied to Xft.  */);
diff --git a/src/xsettings.h b/src/xsettings.h
index fde1fe6..7ef94a0 100644
--- a/src/xsettings.h
+++ b/src/xsettings.h
@@ -1,6 +1,6 @@
 /* Functions for handle font changes dynamically.
 
-Copyright (C) 2009-2014 Free Software Foundation, Inc.
+Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xsmfns.c b/src/xsmfns.c
index cd4f9ce..0e635d3 100644
--- a/src/xsmfns.c
+++ b/src/xsmfns.c
@@ -1,7 +1,7 @@
 /* Session management module for systems which understand the X Session
    management protocol.
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -53,7 +53,7 @@ static int ice_fd = -1;
 
 /* A flag that says if we are in shutdown interactions or not.  */
 
-static int doing_interact;
+static bool doing_interact;
 
 /* The session manager object for the session manager connection.  */
 
@@ -123,9 +123,9 @@ x_session_check_input (int fd, void *data)
     kbd_buffer_store_event (&emacs_event);
 }
 
-/* Return non-zero if we have a connection to a session manager.  */
+/* Return true if we have a connection to a session manager.  */
 
-int
+bool
 x_session_have_connection (void)
 {
   return ice_fd != -1;
@@ -138,7 +138,7 @@ x_session_have_connection (void)
 static void
 smc_interact_CB (SmcConn smcConn, SmPointer clientData)
 {
-  doing_interact = True;
+  doing_interact = true;
   emacs_event.kind = SAVE_SESSION_EVENT;
   emacs_event.arg = Qnil;
 }
@@ -230,8 +230,7 @@ smc_save_yourself_CB (SmcConn smcConn,
   props[props_idx]->vals[vp_idx++].value = emacs_program;
 
   smid_opt = xmalloc (strlen (SMID_OPT) + strlen (client_id) + 1);
-  strcpy (smid_opt, SMID_OPT);
-  strcat (smid_opt, client_id);
+  strcpy (stpcpy (smid_opt, SMID_OPT), client_id);
 
   props[props_idx]->vals[vp_idx].length = strlen (smid_opt);
   props[props_idx]->vals[vp_idx++].value = smid_opt;
@@ -242,8 +241,7 @@ smc_save_yourself_CB (SmcConn smcConn,
   if (cwd)
     {
       chdir_opt = xmalloc (strlen (CHDIR_OPT) + strlen (cwd) + 1);
-      strcpy (chdir_opt, CHDIR_OPT);
-      strcat (chdir_opt, cwd);
+      strcpy (stpcpy (chdir_opt, CHDIR_OPT), cwd);
 
       props[props_idx]->vals[vp_idx].length = strlen (chdir_opt);
       props[props_idx]->vals[vp_idx++].value = chdir_opt;
@@ -400,15 +398,15 @@ x_session_initialize (struct x_display_info *dpyinfo)
   ptrdiff_t name_len = 0;
 
   ice_fd = -1;
-  doing_interact = False;
+  doing_interact = false;
 
   /* Check if we where started by the session manager.  If so, we will
      have a previous id.  */
-  if (! EQ (Vx_session_previous_id, Qnil) && STRINGP (Vx_session_previous_id))
+  if (! NILP (Vx_session_previous_id) && STRINGP (Vx_session_previous_id))
     previous_id = SSDATA (Vx_session_previous_id);
 
   /* Construct the path to the Emacs program.  */
-  if (! EQ (Vinvocation_directory, Qnil))
+  if (! NILP (Vinvocation_directory))
     name_len += SBYTES (Vinvocation_directory);
   name_len += SBYTES (Vinvocation_name);
 
@@ -417,7 +415,7 @@ x_session_initialize (struct x_display_info *dpyinfo)
   emacs_program = xmalloc (name_len + 1);
   char *z = emacs_program;
 
-  if (! EQ (Vinvocation_directory, Qnil))
+  if (! NILP (Vinvocation_directory))
     z = lispstpcpy (z, Vinvocation_directory);
   lispstpcpy (z, Vinvocation_name);
 
@@ -491,21 +489,19 @@ is told to abort the window system shutdown.
 Do not call this function yourself. */)
   (Lisp_Object event)
 {
-  int kill_emacs = CONSP (event) && CONSP (XCDR (event))
-    && EQ (Qt, XCAR (XCDR (event)));
+  bool kill_emacs = (CONSP (event) && CONSP (XCDR (event))
+                    && EQ (Qt, XCAR (XCDR (event))));
 
   /* Check doing_interact so that we don't do anything if someone called
      this at the wrong time. */
   if (doing_interact && ! kill_emacs)
     {
-      Bool cancel_shutdown = False;
-
-      cancel_shutdown = ! EQ (call0 (intern ("emacs-session-save")), Qnil);
+      bool cancel_shutdown = ! NILP (call0 (intern ("emacs-session-save")));
 
       SmcInteractDone (smc_conn, cancel_shutdown);
       SmcSaveYourselfDone (smc_conn, True);
 
-      doing_interact = False;
+      doing_interact = false;
     }
   else if (kill_emacs)
     {
@@ -513,7 +509,7 @@ Do not call this function yourself. */)
          prevent.  Fix this in next version.  */
       Fkill_emacs (Qnil);
 
-#if 0
+#if false
       /* This will not be reached, but we want kill-emacs-hook to be run.  */
       SmcCloseConnection (smc_conn, 0, 0);
       ice_connection_closed ();
diff --git a/src/xterm.c b/src/xterm.c
index 98f2a27..3955d02 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -1,6 +1,6 @@
 /* X Communication module for terminals which understand the X protocol.
 
-Copyright (C) 1989, 1993-2014 Free Software Foundation, Inc.
+Copyright (C) 1989, 1993-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -180,17 +180,9 @@ static Time ignore_next_mouse_click_timeout;
 
 static int x_noop_count;
 
-static Lisp_Object Qalt, Qhyper, Qmeta, Qsuper, Qmodifier_value;
-
-static Lisp_Object Qvendor_specific_keysyms;
-static Lisp_Object Qlatin_1;
-
 #ifdef USE_GTK
 /* The name of the Emacs icon file.  */
 static Lisp_Object xg_default_icon_file;
-
-/* Used in gtkutil.c.  */
-Lisp_Object Qx_gtk_map_stock;
 #endif
 
 /* Some functions take this as char *, not const char *.  */
@@ -220,7 +212,7 @@ enum xembed_message
   };
 
 static bool x_alloc_nearest_color_1 (Display *, Colormap, XColor *);
-static void x_set_window_size_1 (struct frame *, int, int, int, bool);
+static void x_set_window_size_1 (struct frame *, bool, int, int, bool);
 static void x_raise_frame (struct frame *);
 static void x_lower_frame (struct frame *);
 static const XColor *x_color_cells (Display *, int *);
@@ -255,10 +247,10 @@ static void x_horizontal_scroll_bar_report_motion (struct 
frame **, Lisp_Object
                                                   enum scroll_bar_part *,
                                                   Lisp_Object *, Lisp_Object *,
                                                   Time *);
-static int x_handle_net_wm_state (struct frame *, const XPropertyEvent *);
+static bool x_handle_net_wm_state (struct frame *, const XPropertyEvent *);
 static void x_check_fullscreen (struct frame *);
 static void x_check_expected_move (struct frame *, int, int);
-static void x_sync_with_move (struct frame *, int, int, int);
+static void x_sync_with_move (struct frame *, int, int, bool);
 static int handle_one_xevent (struct x_display_info *,
                              const XEvent *, int *,
                              struct input_event *);
@@ -272,7 +264,7 @@ static void x_wm_set_window_state (struct frame *, int);
 static void x_wm_set_icon_pixmap (struct frame *, ptrdiff_t);
 static void x_initialize (void);
 
-static int get_current_wm_state (struct frame *, Window, int *, int *);
+static bool get_current_wm_state (struct frame *, Window, int *, bool *);
 
 /* Flush display of frame F.  */
 
@@ -305,7 +297,7 @@ x_flush (struct frame *f)
                              Debugging
  ***********************************************************************/
 
-#if 0
+#if false
 
 /* This is a function useful for recording debugging information about
    the sequence of occurrences in this file.  */
@@ -331,7 +323,7 @@ record_event (char *locus, int type)
   event_record_index++;
 }
 
-#endif /* 0 */
+#endif
 
 
 
@@ -479,7 +471,7 @@ x_update_window_begin (struct window *w)
   if (f == hlinfo->mouse_face_mouse_frame)
     {
       /* Don't do highlighting for mouse motion during the update.  */
-      hlinfo->mouse_face_defer = 1;
+      hlinfo->mouse_face_defer = true;
 
       /* If F needs to be redrawn, simply forget about any prior mouse
         highlighting.  */
@@ -583,11 +575,11 @@ x_update_window_end (struct window *w, bool cursor_on_p,
       block_input ();
 
       if (cursor_on_p)
-       display_and_set_cursor (w, 1,
+       display_and_set_cursor (w, true,
                                w->output_cursor.hpos, w->output_cursor.vpos,
                                w->output_cursor.x, w->output_cursor.y);
 
-      if (draw_window_fringes (w, 1))
+      if (draw_window_fringes (w, true))
        {
          if (WINDOW_RIGHT_DIVIDER_WIDTH (w))
            x_draw_right_divider (w);
@@ -618,7 +610,7 @@ static void
 x_update_end (struct frame *f)
 {
   /* Mouse highlight may be displayed again.  */
-  MOUSE_HL_INFO (f)->mouse_face_defer = 0;
+  MOUSE_HL_INFO (f)->mouse_face_defer = false;
 
 #ifndef XFlush
   block_input ();
@@ -675,7 +667,7 @@ x_after_update_window_line (struct window *w, struct 
glyph_row *desired_row)
   eassert (w);
 
   if (!desired_row->mode_line_p && !w->pseudo_window_p)
-    desired_row->redraw_fringe_bitmaps_p = 1;
+    desired_row->redraw_fringe_bitmaps_p = true;
 
 #ifdef USE_X_TOOLKIT
   /* When a window has disappeared, make sure that no rest of
@@ -817,10 +809,10 @@ static void x_draw_image_foreground_1 (struct 
glyph_string *, Pixmap);
 static void x_clear_glyph_string_rect (struct glyph_string *, int,
                                        int, int, int);
 static void x_draw_relief_rect (struct frame *, int, int, int, int,
-                                int, int, int, int, int, int,
+                                int, bool, bool, bool, bool, bool,
                                 XRectangle *);
 static void x_draw_box_rect (struct glyph_string *, int, int, int, int,
-                             int, int, int, XRectangle *);
+                             int, bool, bool, XRectangle *);
 static void x_scroll_bar_clear (struct frame *);
 
 #ifdef GLYPH_DEBUG
@@ -962,7 +954,7 @@ x_set_glyph_string_gc (struct glyph_string *s)
   else if (s->hl == DRAW_CURSOR)
     {
       x_set_cursor_gc (s);
-      s->stippled_p = 0;
+      s->stippled_p = false;
     }
   else if (s->hl == DRAW_MOUSE_FACE)
     {
@@ -1094,7 +1086,7 @@ x_draw_glyph_string_background (struct glyph_string *s, 
bool force_p)
                          s->background_width,
                          s->height - 2 * box_line_width);
          XSetFillStyle (s->display, s->gc, FillSolid);
-         s->background_filled_p = 1;
+         s->background_filled_p = true;
        }
       else if (FONT_HEIGHT (s->font) < s->height - 2 * box_line_width
               || s->font_not_found_p
@@ -1104,7 +1096,7 @@ x_draw_glyph_string_background (struct glyph_string *s, 
bool force_p)
          x_clear_glyph_string_rect (s, s->x, s->y + box_line_width,
                                     s->background_width,
                                     s->height - 2 * box_line_width);
-         s->background_filled_p = 1;
+         s->background_filled_p = true;
        }
     }
 }
@@ -1150,11 +1142,11 @@ x_draw_glyph_string_foreground (struct glyph_string *s)
       y = s->ybase - boff;
       if (s->for_overlaps
          || (s->background_filled_p && s->hl != DRAW_CURSOR))
-       font->driver->draw (s, 0, s->nchars, x, y, 0);
+       font->driver->draw (s, 0, s->nchars, x, y, false);
       else
-       font->driver->draw (s, 0, s->nchars, x, y, 1);
+       font->driver->draw (s, 0, s->nchars, x, y, true);
       if (s->face->overstrike)
-       font->driver->draw (s, 0, s->nchars, x + 1, y, 0);
+       font->driver->draw (s, 0, s->nchars, x + 1, y, false);
     }
 }
 
@@ -1199,9 +1191,9 @@ x_draw_composite_glyph_string_foreground (struct 
glyph_string *s)
            int xx = x + s->cmp->offsets[j * 2];
            int yy = y - s->cmp->offsets[j * 2 + 1];
 
-           font->driver->draw (s, j, j + 1, xx, yy, 0);
+           font->driver->draw (s, j, j + 1, xx, yy, false);
            if (s->face->overstrike)
-             font->driver->draw (s, j, j + 1, xx + 1, yy, 0);
+             font->driver->draw (s, j, j + 1, xx + 1, yy, false);
          }
     }
   else
@@ -1222,17 +1214,18 @@ x_draw_composite_glyph_string_foreground (struct 
glyph_string *s)
 
              if (j < i)
                {
-                 font->driver->draw (s, j, i, x, y, 0);
+                 font->driver->draw (s, j, i, x, y, false);
                  if (s->face->overstrike)
-                   font->driver->draw (s, j, i, x + 1, y, 0);
+                   font->driver->draw (s, j, i, x + 1, y, false);
                  x += width;
                }
              xoff = LGLYPH_XOFF (glyph);
              yoff = LGLYPH_YOFF (glyph);
              wadjust = LGLYPH_WADJUST (glyph);
-             font->driver->draw (s, i, i + 1, x + xoff, y + yoff, 0);
+             font->driver->draw (s, i, i + 1, x + xoff, y + yoff, false);
              if (s->face->overstrike)
-               font->driver->draw (s, i, i + 1, x + xoff + 1, y + yoff, 0);
+               font->driver->draw (s, i, i + 1, x + xoff + 1, y + yoff,
+                                   false);
              x += wadjust;
              j = i + 1;
              width = 0;
@@ -1240,9 +1233,9 @@ x_draw_composite_glyph_string_foreground (struct 
glyph_string *s)
        }
       if (j < i)
        {
-         font->driver->draw (s, j, i, x, y, 0);
+         font->driver->draw (s, j, i, x, y, false);
          if (s->face->overstrike)
-           font->driver->draw (s, j, i, x + 1, y, 0);
+           font->driver->draw (s, j, i, x + 1, y, false);
        }
     }
 }
@@ -1310,11 +1303,11 @@ x_draw_glyphless_glyph_string_foreground (struct 
glyph_string *s)
          s->font->driver->draw (s, 0, upper_len,
                                 x + glyph->slice.glyphless.upper_xoff,
                                 s->ybase + glyph->slice.glyphless.upper_yoff,
-                                0);
+                                false);
          s->font->driver->draw (s, upper_len, len,
                                 x + glyph->slice.glyphless.lower_xoff,
                                 s->ybase + glyph->slice.glyphless.lower_yoff,
-                                0);
+                                false);
        }
       if (glyph->u.glyphless.method != GLYPHLESS_DISPLAY_THIN_SPACE)
        XDrawRectangle (s->display, s->window, s->gc,
@@ -1781,7 +1774,7 @@ x_alloc_lighter_color (struct frame *f, Display *display, 
Colormap cmap,
          success_p = x_alloc_nearest_color (f, cmap, &new);
        }
       else
-       success_p = 1;
+       success_p = true;
       *pixel = new.pixel;
     }
 
@@ -1876,16 +1869,17 @@ x_setup_relief_colors (struct glyph_string *s)
 
 /* Draw a relief on frame F inside the rectangle given by LEFT_X,
    TOP_Y, RIGHT_X, and BOTTOM_Y.  WIDTH is the thickness of the relief
-   to draw, it must be >= 0.  RAISED_P non-zero means draw a raised
-   relief.  LEFT_P non-zero means draw a relief on the left side of
-   the rectangle.  RIGHT_P non-zero means draw a relief on the right
+   to draw, it must be >= 0.  RAISED_P means draw a raised
+   relief.  LEFT_P means draw a relief on the left side of
+   the rectangle.  RIGHT_P means draw a relief on the right
    side of the rectangle.  CLIP_RECT is the clipping rectangle to use
    when drawing.  */
 
 static void
 x_draw_relief_rect (struct frame *f,
-                   int left_x, int top_y, int right_x, int bottom_y, int width,
-                   int raised_p, int top_p, int bot_p, int left_p, int right_p,
+                   int left_x, int top_y, int right_x, int bottom_y,
+                   int width, bool raised_p, bool top_p, bool bot_p,
+                   bool left_p, bool right_p,
                    XRectangle *clip_rect)
 {
   Display *dpy = FRAME_X_DISPLAY (f);
@@ -1909,8 +1903,8 @@ x_draw_relief_rect (struct frame *f,
     {
       if (width == 1)
        XDrawLine (dpy, window, gc,
-                  left_x  + (left_p  ? 1 : 0), top_y,
-                  right_x + (right_p ? 0 : 1), top_y);
+                  left_x + left_p, top_y,
+                  right_x + !right_p, top_y);
 
       for (i = 1; i < width; ++i)
        XDrawLine (dpy, window, gc,
@@ -1945,8 +1939,8 @@ x_draw_relief_rect (struct frame *f,
       /* Outermost top line.  */
       if (top_p)
        XDrawLine (dpy, window, gc,
-                  left_x  + (left_p  ? 1 : 0), top_y,
-                  right_x + (right_p ? 0 : 1), top_y);
+                  left_x  + left_p, top_y,
+                  right_x + !right_p, top_y);
 
       /* Outermost left line.  */
       if (left_p)
@@ -1957,8 +1951,8 @@ x_draw_relief_rect (struct frame *f,
   if (bot_p)
     {
       XDrawLine (dpy, window, gc,
-                left_x  + (left_p  ? 1 : 0), bottom_y,
-                right_x + (right_p ? 0 : 1), bottom_y);
+                left_x + left_p, bottom_y,
+                right_x + !right_p, bottom_y);
       for (i = 1; i < width; ++i)
        XDrawLine (dpy, window, gc,
                   left_x  + i * left_p, bottom_y - i,
@@ -1982,15 +1976,15 @@ x_draw_relief_rect (struct frame *f,
 
 /* Draw a box on frame F inside the rectangle given by LEFT_X, TOP_Y,
    RIGHT_X, and BOTTOM_Y.  WIDTH is the thickness of the lines to
-   draw, it must be >= 0.  LEFT_P non-zero means draw a line on the
-   left side of the rectangle.  RIGHT_P non-zero means draw a line
+   draw, it must be >= 0.  LEFT_P means draw a line on the
+   left side of the rectangle.  RIGHT_P means draw a line
    on the right side of the rectangle.  CLIP_RECT is the clipping
    rectangle to use when drawing.  */
 
 static void
 x_draw_box_rect (struct glyph_string *s,
                 int left_x, int top_y, int right_x, int bottom_y, int width,
-                int left_p, int right_p, XRectangle *clip_rect)
+                bool left_p, bool right_p, XRectangle *clip_rect)
 {
   XGCValues xgcv;
 
@@ -2026,8 +2020,8 @@ x_draw_box_rect (struct glyph_string *s,
 static void
 x_draw_glyph_string_box (struct glyph_string *s)
 {
-  int width, left_x, right_x, top_y, bottom_y, last_x, raised_p;
-  int left_p, right_p;
+  int width, left_x, right_x, top_y, bottom_y, last_x;
+  bool raised_p, left_p, right_p;
   struct glyph *last_glyph;
   XRectangle clip_rect;
 
@@ -2067,7 +2061,8 @@ x_draw_glyph_string_box (struct glyph_string *s)
     {
       x_setup_relief_colors (s);
       x_draw_relief_rect (s->f, left_x, top_y, right_x, bottom_y,
-                         width, raised_p, 1, 1, left_p, right_p, &clip_rect);
+                         width, raised_p, true, true, left_p, right_p,
+                         &clip_rect);
     }
 }
 
@@ -2166,7 +2161,8 @@ x_draw_image_foreground (struct glyph_string *s)
 static void
 x_draw_image_relief (struct glyph_string *s)
 {
-  int x1, y1, thick, raised_p, top_p, bot_p, left_p, right_p;
+  int x1, y1, thick;
+  bool raised_p, top_p, bot_p, left_p, right_p;
   int extra_x, extra_y;
   XRectangle r;
   int x = s->x;
@@ -2215,16 +2211,16 @@ x_draw_image_relief (struct glyph_string *s)
        extra_x = extra_y = XINT (Vtool_bar_button_margin);
     }
 
-  top_p = bot_p = left_p = right_p = 0;
+  top_p = bot_p = left_p = right_p = false;
 
   if (s->slice.x == 0)
-    x -= thick + extra_x, left_p = 1;
+    x -= thick + extra_x, left_p = true;
   if (s->slice.y == 0)
-    y -= thick + extra_y, top_p = 1;
+    y -= thick + extra_y, top_p = true;
   if (s->slice.x + s->slice.width == s->img->width)
-    x1 += thick + extra_x, right_p = 1;
+    x1 += thick + extra_x, right_p = true;
   if (s->slice.y + s->slice.height == s->img->height)
-    y1 += thick + extra_y, bot_p = 1;
+    y1 += thick + extra_y, bot_p = true;
 
   x_setup_relief_colors (s);
   get_glyph_string_clip_rect (s, &r);
@@ -2422,7 +2418,7 @@ x_draw_image_glyph_string (struct glyph_string *s)
          x_draw_glyph_string_bg_rect (s, x, y, width, height);
        }
 
-      s->background_filled_p = 1;
+      s->background_filled_p = true;
     }
 
   /* Draw the foreground.  */
@@ -2546,7 +2542,7 @@ x_draw_stretch_glyph_string (struct glyph_string *s)
        x_draw_glyph_string_bg_rect (s, x, s->y, background_width, s->height);
     }
 
-  s->background_filled_p = 1;
+  s->background_filled_p = true;
 }
 
 /*
@@ -2564,7 +2560,8 @@ static void
 x_draw_underwave (struct glyph_string *s)
 {
   int wave_height = 3, wave_length = 2;
-  int dx, dy, x0, y0, width, x1, y1, x2, y2, odd, xmax;
+  int dx, dy, x0, y0, width, x1, y1, x2, y2, xmax;
+  bool odd;
   XRectangle wave_clip, string_clip, final_clip;
 
   dx = wave_length;
@@ -2591,7 +2588,7 @@ x_draw_underwave (struct glyph_string *s)
 
   x1 = x0 - (x0 % dx);
   x2 = x1 + dx;
-  odd = (x1/dx) % 2;
+  odd = (x1 / dx) & 1;
   y1 = y2 = y0;
 
   if (odd)
@@ -2620,7 +2617,7 @@ x_draw_underwave (struct glyph_string *s)
 static void
 x_draw_glyph_string (struct glyph_string *s)
 {
-  bool relief_drawn_p = 0;
+  bool relief_drawn_p = false;
 
   /* If S draws into the background of its successors, draw the
      background of the successors first so that S can draw into it.
@@ -2640,7 +2637,7 @@ x_draw_glyph_string (struct glyph_string *s)
            if (next->first_glyph->type == STRETCH_GLYPH)
              x_draw_stretch_glyph_string (next);
            else
-             x_draw_glyph_string_background (next, 1);
+             x_draw_glyph_string_background (next, true);
            next->num_clips = 0;
          }
     }
@@ -2657,10 +2654,10 @@ x_draw_glyph_string (struct glyph_string *s)
 
     {
       x_set_glyph_string_clipping (s);
-      x_draw_glyph_string_background (s, 1);
+      x_draw_glyph_string_background (s, true);
       x_draw_glyph_string_box (s);
       x_set_glyph_string_clipping (s);
-      relief_drawn_p = 1;
+      relief_drawn_p = true;
     }
   else if (!s->clip_head /* draw_glyphs didn't specify a clip mask. */
           && !s->clip_tail
@@ -2685,26 +2682,26 @@ x_draw_glyph_string (struct glyph_string *s)
 
     case CHAR_GLYPH:
       if (s->for_overlaps)
-       s->background_filled_p = 1;
+       s->background_filled_p = true;
       else
-       x_draw_glyph_string_background (s, 0);
+       x_draw_glyph_string_background (s, false);
       x_draw_glyph_string_foreground (s);
       break;
 
     case COMPOSITE_GLYPH:
       if (s->for_overlaps || (s->cmp_from > 0
                              && ! s->first_glyph->u.cmp.automatic))
-       s->background_filled_p = 1;
+       s->background_filled_p = true;
       else
-       x_draw_glyph_string_background (s, 1);
+       x_draw_glyph_string_background (s, true);
       x_draw_composite_glyph_string_foreground (s);
       break;
 
     case GLYPHLESS_GLYPH:
       if (s->for_overlaps)
-       s->background_filled_p = 1;
+       s->background_filled_p = true;
       else
-       x_draw_glyph_string_background (s, 1);
+       x_draw_glyph_string_background (s, true);
       x_draw_glyphless_glyph_string_foreground (s);
       break;
 
@@ -2971,7 +2968,7 @@ x_show_hourglass (struct frame *f)
       if (FRAME_OUTER_WINDOW (f))
 #endif
        {
-         x->hourglass_p = 1;
+         x->hourglass_p = true;
 
          if (!x->hourglass_window)
            {
@@ -3009,7 +3006,7 @@ x_hide_hourglass (struct frame *f)
       /* Sync here because XTread_socket looks at the
         hourglass_p flag that is reset to zero below.  */
       XSync (FRAME_X_DISPLAY (f), False);
-      x->hourglass_p = 0;
+      x->hourglass_p = false;
     }
 }
 
@@ -3034,7 +3031,7 @@ XTflash (struct frame *f)
       cairo_rectangle (cr, x, y, w, h);        \
       cairo_fill (cr);                         \
     }                                          \
-    while (0)
+    while (false)
 #else /* ! HAVE_GTK3 */
     GdkGCValues vals;
     GdkGC *gc;
@@ -3044,7 +3041,7 @@ XTflash (struct frame *f)
     gc = gdk_gc_new_with_values (window,
                                  &vals, GDK_GC_FUNCTION | GDK_GC_FOREGROUND);
 #define XFillRectangle(d, win, gc, x, y, w, h) \
-    gdk_draw_rectangle (window, gc, TRUE, x, y, w, h)
+    gdk_draw_rectangle (window, gc, true, x, y, w, h)
 #endif /* ! HAVE_GTK3 */
 #else /* ! USE_GTK */
     GC gc;
@@ -3157,7 +3154,7 @@ XTflash (struct frame *f)
 
 
 static void
-XTtoggle_invisible_pointer (struct frame *f, int invisible)
+XTtoggle_invisible_pointer (struct frame *f, bool invisible)
 {
   block_input ();
   FRAME_DISPLAY_INFO (f)->toggle_visible_pointer (f, invisible);
@@ -3277,7 +3274,7 @@ frame_highlight (struct frame *f)
                    f->output_data.x->border_pixel);
   x_uncatch_errors ();
   unblock_input ();
-  x_update_cursor (f, 1);
+  x_update_cursor (f, true);
   x_set_frame_alpha (f);
 }
 
@@ -3295,7 +3292,7 @@ frame_unhighlight (struct frame *f)
                          f->output_data.x->border_tile);
   x_uncatch_errors ();
   unblock_input ();
-  x_update_cursor (f, 1);
+  x_update_cursor (f, true);
   x_set_frame_alpha (f);
 }
 
@@ -3380,7 +3377,7 @@ x_focus_changed (int type, int state, struct 
x_display_info *dpyinfo, struct fra
         XUnsetICFocus (FRAME_XIC (frame));
 #endif
       if (frame->pointer_invisible)
-        XTtoggle_invisible_pointer (frame, 0);
+        XTtoggle_invisible_pointer (frame, false);
     }
 }
 
@@ -3693,11 +3690,11 @@ x_find_modifier_meanings (struct x_display_info 
*dpyinfo)
      Alt keysyms are on.  */
   {
     int row, col;      /* The row and column in the modifier table.  */
-    int found_alt_or_meta;
+    bool found_alt_or_meta;
 
     for (row = 3; row < 8; row++)
     {
-      found_alt_or_meta = 0;
+      found_alt_or_meta = false;
       for (col = 0; col < mods->max_keypermod; col++)
        {
          KeyCode code = mods->modifiermap[(row * mods->max_keypermod) + col];
@@ -3718,13 +3715,13 @@ x_find_modifier_meanings (struct x_display_info 
*dpyinfo)
                  {
                  case XK_Meta_L:
                  case XK_Meta_R:
-                   found_alt_or_meta = 1;
+                   found_alt_or_meta = true;
                    dpyinfo->meta_mod_mask |= (1 << row);
                    break;
 
                  case XK_Alt_L:
                  case XK_Alt_R:
-                   found_alt_or_meta = 1;
+                   found_alt_or_meta = true;
                    dpyinfo->alt_mod_mask |= (1 << row);
                    break;
 
@@ -3903,14 +3900,14 @@ construct_mouse_click (struct input_event *result,
    the mainstream emacs code by setting mouse_moved.  If not, ask for
    another motion event, so we can check again the next time it moves.  */
 
-static int
+static bool
 note_mouse_movement (struct frame *frame, const XMotionEvent *event)
 {
   XRectangle *r;
   struct x_display_info *dpyinfo;
 
   if (!FRAME_X_OUTPUT (frame))
-    return 0;
+    return false;
 
   dpyinfo = FRAME_DISPLAY_INFO (frame);
   dpyinfo->last_mouse_movement_time = event->time;
@@ -3920,11 +3917,11 @@ note_mouse_movement (struct frame *frame, const 
XMotionEvent *event)
 
   if (event->window != FRAME_X_WINDOW (frame))
     {
-      frame->mouse_moved = 1;
+      frame->mouse_moved = true;
       dpyinfo->last_mouse_scroll_bar = NULL;
       note_mouse_highlight (frame, -1, -1);
       dpyinfo->last_mouse_glyph_frame = NULL;
-      return 1;
+      return true;
     }
 
 
@@ -3934,16 +3931,16 @@ note_mouse_movement (struct frame *frame, const 
XMotionEvent *event)
       || event->x < r->x || event->x >= r->x + r->width
       || event->y < r->y || event->y >= r->y + r->height)
     {
-      frame->mouse_moved = 1;
+      frame->mouse_moved = true;
       dpyinfo->last_mouse_scroll_bar = NULL;
       note_mouse_highlight (frame, event->x, event->y);
       /* Remember which glyph we're now on.  */
       remember_mouse_glyph (frame, event->x, event->y, r);
       dpyinfo->last_mouse_glyph_frame = frame;
-      return 1;
+      return true;
     }
 
-  return 0;
+  return false;
 }
 
 /* Return the current position of the mouse.
@@ -3999,7 +3996,7 @@ XTmouse_position (struct frame **fp, int insist, 
Lisp_Object *bar_window,
       FOR_EACH_FRAME (tail, frame)
        if (FRAME_X_P (XFRAME (frame))
             && FRAME_X_DISPLAY (XFRAME (frame)) == FRAME_X_DISPLAY (*fp))
-         XFRAME (frame)->mouse_moved = 0;
+         XFRAME (frame)->mouse_moved = false;
 
       dpyinfo->last_mouse_scroll_bar = NULL;
 
@@ -4060,7 +4057,7 @@ XTmouse_position (struct frame **fp, int insist, 
Lisp_Object *bar_window,
          }
        else
          {
-           while (1)
+           while (true)
              {
                XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
 
@@ -4284,7 +4281,7 @@ static void
 xt_action_hook (Widget widget, XtPointer client_data, String action_name,
                XEvent *event, String *params, Cardinal *num_params)
 {
-  int scroll_bar_p;
+  bool scroll_bar_p;
   const char *end_action;
 
 #ifdef USE_MOTIF
@@ -4303,7 +4300,7 @@ xt_action_hook (Widget widget, XtPointer client_data, 
String action_name,
       struct scroll_bar *bar;
 
       x_send_scroll_bar_event (window_being_scrolled,
-                              scroll_bar_end_scroll, 0, 0, 0);
+                              scroll_bar_end_scroll, 0, 0, false);
       w = XWINDOW (window_being_scrolled);
       bar = XSCROLL_BAR (w->vertical_scroll_bar);
 
@@ -4318,7 +4315,7 @@ xt_action_hook (Widget widget, XtPointer client_data, 
String action_name,
       bar->last_seen_part = scroll_bar_nowhere;
 #endif
       /* Xt timeouts no longer needed.  */
-      toolkit_scroll_bar_interaction = 0;
+      toolkit_scroll_bar_interaction = false;
     }
 }
 
@@ -4327,7 +4324,7 @@ static void
 xt_horizontal_action_hook (Widget widget, XtPointer client_data, String 
action_name,
                           XEvent *event, String *params, Cardinal *num_params)
 {
-  int scroll_bar_p;
+  bool scroll_bar_p;
   const char *end_action;
 
 #ifdef USE_MOTIF
@@ -4346,7 +4343,7 @@ xt_horizontal_action_hook (Widget widget, XtPointer 
client_data, String action_n
       struct scroll_bar *bar;
 
       x_send_scroll_bar_event (window_being_scrolled,
-                              scroll_bar_end_scroll, 0, 0, 1);
+                              scroll_bar_end_scroll, 0, 0, true);
       w = XWINDOW (window_being_scrolled);
       bar = XSCROLL_BAR (w->horizontal_scroll_bar);
 
@@ -4361,7 +4358,7 @@ xt_horizontal_action_hook (Widget widget, XtPointer 
client_data, String action_n
       bar->last_seen_part = scroll_bar_nowhere;
 #endif
       /* Xt timeouts no longer needed.  */
-      toolkit_scroll_bar_interaction = 0;
+      toolkit_scroll_bar_interaction = false;
     }
 }
 #endif /* not USE_GTK */
@@ -4408,7 +4405,7 @@ x_send_scroll_bar_event (Lisp_Object window, enum 
scroll_bar_part part,
 
   /* Make Xt timeouts work while the scroll bar is active.  */
 #ifdef USE_X_TOOLKIT
-  toolkit_scroll_bar_interaction = 1;
+  toolkit_scroll_bar_interaction = true;
   x_activate_timeout_atimer ();
 #endif
 
@@ -4507,7 +4504,8 @@ xm_scroll_callback (Widget widget, XtPointer client_data, 
XtPointer call_data)
   struct scroll_bar *bar = client_data;
   XmScrollBarCallbackStruct *cs = call_data;
   enum scroll_bar_part part = scroll_bar_nowhere;
-  int horizontal = bar->horizontal, whole = 0, portion = 0;
+  bool horizontal = bar->horizontal;
+  int whole = 0, portion = 0;
 
   switch (cs->reason)
     {
@@ -4574,7 +4572,8 @@ xm_scroll_callback (Widget widget, XtPointer client_data, 
XtPointer call_data)
   if (part != scroll_bar_nowhere)
     {
       window_being_scrolled = bar->window;
-      x_send_scroll_bar_event (bar->window, part, portion, whole, 
bar->horizontal);
+      x_send_scroll_bar_event (bar->window, part, portion, whole,
+                              bar->horizontal);
     }
 }
 
@@ -4595,7 +4594,7 @@ xg_scroll_callback (GtkRange     *range,
   GtkAdjustment *adj = GTK_ADJUSTMENT (gtk_range_get_adjustment (range));
   struct frame *f = g_object_get_data (G_OBJECT (range), XG_FRAME_DATA);
 
-  if (xg_ignore_gtk_scrollbar) return FALSE;
+  if (xg_ignore_gtk_scrollbar) return false;
 
   switch (scroll)
     {
@@ -4647,10 +4646,11 @@ xg_scroll_callback (GtkRange     *range,
   if (part != scroll_bar_nowhere)
     {
       window_being_scrolled = bar->window;
-      x_send_scroll_bar_event (bar->window, part, portion, whole, 
bar->horizontal);
+      x_send_scroll_bar_event (bar->window, part, portion, whole,
+                              bar->horizontal);
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Callback for button release. Sets dragging to -1 when dragging is done.  */
@@ -4669,7 +4669,7 @@ xg_end_scroll_callback (GtkWidget *widget,
       window_being_scrolled = Qnil;
     }
 
-  return FALSE;
+  return false;
 }
 
 
@@ -4689,7 +4689,7 @@ xaw_jump_callback (Widget widget, XtPointer client_data, 
XtPointer call_data)
   float shown;
   int whole, portion, height, width;
   enum scroll_bar_part part;
-  int horizontal = bar->horizontal;
+  bool horizontal = bar->horizontal;
 
 
   if (horizontal)
@@ -4777,7 +4777,8 @@ xaw_scroll_callback (Widget widget, XtPointer 
client_data, XtPointer call_data)
       window_being_scrolled = bar->window;
       bar->dragging = -1;
       bar->last_seen_part = part;
-      x_send_scroll_bar_event (bar->window, part, position, width, 
bar->horizontal);
+      x_send_scroll_bar_event (bar->window, part, position, width,
+                              bar->horizontal);
     }
   else
     {
@@ -4800,7 +4801,8 @@ xaw_scroll_callback (Widget widget, XtPointer 
client_data, XtPointer call_data)
       window_being_scrolled = bar->window;
       bar->dragging = -1;
       bar->last_seen_part = part;
-      x_send_scroll_bar_event (bar->window, part, position, height, 
bar->horizontal);
+      x_send_scroll_bar_event (bar->window, part, position, height,
+                              bar->horizontal);
     }
 }
 
@@ -5033,7 +5035,7 @@ x_create_toolkit_scroll_bar (struct frame *f, struct 
scroll_bar *bar)
   xwindow = XtWindow (widget);
   bar->x_window = xwindow;
   bar->whole = 1;
-  bar->horizontal = 0;
+  bar->horizontal = false;
 
   unblock_input ();
 }
@@ -5233,7 +5235,7 @@ x_create_horizontal_toolkit_scroll_bar (struct frame *f, 
struct scroll_bar *bar)
   xwindow = XtWindow (widget);
   bar->x_window = xwindow;
   bar->whole = 1;
-  bar->horizontal = 1;
+  bar->horizontal = true;
 
   unblock_input ();
 }
@@ -5408,7 +5410,7 @@ x_set_toolkit_horizontal_scroll_bar_thumb (struct 
scroll_bar *bar, int portion,
                   XtNheight, &height,
                   NULL);
 
-#if 0
+#if false
     /* Massage the top+shown values.  */
     if (bar->dragging == -1 || bar->last_seen_part == scroll_bar_down_arrow)
       top = max (0, min (1, top));
@@ -5431,7 +5433,7 @@ x_set_toolkit_horizontal_scroll_bar_thumb (struct 
scroll_bar *bar, int portion,
        work, check that 'NARROWPROTO' is defined in src/config.h.
        If this is not so, most likely you need to fix configure.  */
     XawScrollbarSetThumb (widget, top, shown);
-#if 0
+#if false
     if (top != old_top || shown != old_shown)
       {
        if (bar->dragging == -1)
@@ -5467,7 +5469,8 @@ x_set_toolkit_horizontal_scroll_bar_thumb (struct 
scroll_bar *bar, int portion,
    scroll bar. */
 
 static struct scroll_bar *
-x_scroll_bar_create (struct window *w, int top, int left, int width, int 
height, bool horizontal)
+x_scroll_bar_create (struct window *w, int top, int left,
+                    int width, int height, bool horizontal)
 {
   struct frame *f = XFRAME (w->frame);
   struct scroll_bar *bar
@@ -5570,7 +5573,7 @@ x_scroll_bar_create (struct window *w, int top, int left, 
int width, int height,
 /* Draw BAR's handle in the proper position.
 
    If the handle is already drawn from START to END, don't bother
-   redrawing it, unless REBUILD is non-zero; in that case, always
+   redrawing it, unless REBUILD; in that case, always
    redraw it.  (REBUILD is handy for drawing the handle after expose
    events.)
 
@@ -5581,7 +5584,8 @@ x_scroll_bar_create (struct window *w, int top, int left, 
int width, int height,
    to move to the very end of the buffer.  */
 
 static void
-x_scroll_bar_set_handle (struct scroll_bar *bar, int start, int end, int 
rebuild)
+x_scroll_bar_set_handle (struct scroll_bar *bar, int start, int end,
+                        bool rebuild)
 {
   bool dragging = bar->dragging != -1;
   Window w = bar->x_window;
@@ -5731,7 +5735,7 @@ XTset_vertical_scroll_bar (struct window *w, int portion, 
int whole, int positio
          unblock_input ();
        }
 
-      bar = x_scroll_bar_create (w, top, left, width, max (height, 1), 0);
+      bar = x_scroll_bar_create (w, top, left, width, max (height, 1), false);
     }
   else
     {
@@ -5805,12 +5809,12 @@ XTset_vertical_scroll_bar (struct window *w, int 
portion, int whole, int positio
       int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, height);
 
       if (whole == 0)
-       x_scroll_bar_set_handle (bar, 0, top_range, 0);
+       x_scroll_bar_set_handle (bar, 0, top_range, false);
       else
        {
          int start = ((double) position * top_range) / whole;
          int end = ((double) (position + portion) * top_range) / whole;
-         x_scroll_bar_set_handle (bar, start, end, 0);
+         x_scroll_bar_set_handle (bar, start, end, false);
        }
     }
 #endif /* not USE_TOOLKIT_SCROLL_BARS */
@@ -5851,7 +5855,7 @@ XTset_horizontal_scroll_bar (struct window *w, int 
portion, int whole, int posit
          unblock_input ();
        }
 
-      bar = x_scroll_bar_create (w, top, left, width, height, 1);
+      bar = x_scroll_bar_create (w, top, left, width, height, true);
     }
   else
     {
@@ -5937,12 +5941,12 @@ XTset_horizontal_scroll_bar (struct window *w, int 
portion, int whole, int posit
       int left_range = HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, width);
 
       if (whole == 0)
-       x_scroll_bar_set_handle (bar, 0, left_range, 0);
+       x_scroll_bar_set_handle (bar, 0, left_range, false);
       else
        {
          int start = ((double) position * left_range) / whole;
          int end = ((double) (position + portion) * left_range) / whole;
-         x_scroll_bar_set_handle (bar, start, end, 0);
+         x_scroll_bar_set_handle (bar, start, end, false);
        }
     }
 #endif /* not USE_TOOLKIT_SCROLL_BARS */
@@ -6116,7 +6120,7 @@ x_scroll_bar_expose (struct scroll_bar *bar, const XEvent 
*event)
 
   block_input ();
 
-  x_scroll_bar_set_handle (bar, bar->start, bar->end, 1);
+  x_scroll_bar_set_handle (bar, bar->start, bar->end, true);
 
   /* Switch to scroll bar foreground color.  */
   if (f->output_data.x->scroll_bar_foreground_pixel != -1)
@@ -6190,7 +6194,7 @@ x_scroll_bar_handle_click (struct scroll_bar *bar,
          int new_start = - bar->dragging;
          int new_end = new_start + bar->end - bar->start;
 
-         x_scroll_bar_set_handle (bar, new_start, new_end, 0);
+         x_scroll_bar_set_handle (bar, new_start, new_end, false);
          bar->dragging = -1;
        }
 #endif
@@ -6221,7 +6225,7 @@ x_scroll_bar_handle_click (struct scroll_bar *bar,
          int new_start = y - bar->dragging;
          int new_end = new_start + bar->end - bar->start;
 
-         x_scroll_bar_set_handle (bar, new_start, new_end, 0);
+         x_scroll_bar_set_handle (bar, new_start, new_end, false);
          bar->dragging = -1;
        }
 #endif
@@ -6247,7 +6251,7 @@ x_scroll_bar_note_movement (struct scroll_bar *bar,
 
   dpyinfo->last_mouse_movement_time = event->time;
   dpyinfo->last_mouse_scroll_bar = bar;
-  f->mouse_moved = 1;
+  f->mouse_moved = true;
 
   /* If we're dragging the bar, display it.  */
   if (bar->dragging != -1)
@@ -6259,7 +6263,7 @@ x_scroll_bar_note_movement (struct scroll_bar *bar,
        {
          int new_end = new_start + bar->end - bar->start;
 
-         x_scroll_bar_set_handle (bar, new_start, new_end, 0);
+         x_scroll_bar_set_handle (bar, new_start, new_end, false);
        }
     }
 }
@@ -6326,7 +6330,7 @@ x_scroll_bar_report_motion (struct frame **fp, 
Lisp_Object *bar_window,
       XSETINT (*x, win_y);
       XSETINT (*y, top_range);
 
-      f->mouse_moved = 0;
+      f->mouse_moved = false;
       dpyinfo->last_mouse_scroll_bar = NULL;
       *timestamp = dpyinfo->last_mouse_movement_time;
     }
@@ -6395,7 +6399,7 @@ x_horizontal_scroll_bar_report_motion (struct frame **fp, 
Lisp_Object *bar_windo
       XSETINT (*y, win_x);
       XSETINT (*x, left_range);
 
-      f->mouse_moved = 0;
+      f->mouse_moved = false;
       dpyinfo->last_mouse_scroll_bar = NULL;
       *timestamp = dpyinfo->last_mouse_movement_time;
     }
@@ -6551,9 +6555,9 @@ x_net_wm_state (struct frame *f, Window window)
 {
   int value = FULLSCREEN_NONE;
   Lisp_Object lval = Qnil;
-  int sticky = 0;
+  bool sticky = false;
 
-  (void)get_current_wm_state (f, window, &value, &sticky);
+  get_current_wm_state (f, window, &value, &sticky);
 
   switch (value)
     {
@@ -6636,7 +6640,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                 if (f && FRAME_XIC (f))
                   XSetICFocus (FRAME_XIC (f));
 #endif
-#if 0 /* Emacs sets WM hints whose `input' field is `true'.  This
+#if false
+      /* Emacs sets WM hints whose `input' field is `true'.  This
         instructs the WM to set the input focus automatically for
         Emacs with a call to XSetInputFocus.  Setting WM_TAKE_FOCUS
         tells the WM to send us a ClientMessage WM_TAKE_FOCUS after
@@ -6669,7 +6674,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                     x_uncatch_errors ();
                   }
                 /* Not certain about handling scroll bars here */
-#endif /* 0 */
+#endif
                goto done;
               }
 
@@ -6850,22 +6855,22 @@ handle_one_xevent (struct x_display_info *dpyinfo,
       f = x_top_window_to_frame (dpyinfo, event->xproperty.window);
       if (f && event->xproperty.atom == dpyinfo->Xatom_net_wm_state)
        {
-          int not_hidden = x_handle_net_wm_state (f, &event->xproperty);
+          bool not_hidden = x_handle_net_wm_state (f, &event->xproperty);
          if (not_hidden && FRAME_ICONIFIED_P (f))
            {
              /* Gnome shell does not iconify us when C-z is pressed.
                 It hides the frame.  So if our state says we aren't
                 hidden anymore, treat it as deiconified.  */
              SET_FRAME_VISIBLE (f, 1);
-             SET_FRAME_ICONIFIED (f, 0);
-             f->output_data.x->has_been_visible = 1;
+             SET_FRAME_ICONIFIED (f, false);
+             f->output_data.x->has_been_visible = true;
              inev.ie.kind = DEICONIFY_EVENT;
              XSETFRAME (inev.ie.frame_or_window, f);
            }
          else if (! not_hidden && ! FRAME_ICONIFIED_P (f))
            {
              SET_FRAME_VISIBLE (f, 0);
-             SET_FRAME_ICONIFIED (f, 1);
+             SET_FRAME_ICONIFIED (f, true);
              inev.ie.kind = ICONIFY_EVENT;
              XSETFRAME (inev.ie.frame_or_window, f);
            }
@@ -6897,8 +6902,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
           if (!FRAME_VISIBLE_P (f))
             {
               SET_FRAME_VISIBLE (f, 1);
-              SET_FRAME_ICONIFIED (f, 0);
-              f->output_data.x->has_been_visible = 1;
+              SET_FRAME_ICONIFIED (f, false);
+              f->output_data.x->has_been_visible = true;
               SET_FRAME_GARBAGED (f);
             }
           else
@@ -6993,7 +6998,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              and that way, we know the window is not iconified now.  */
           if (visible || FRAME_ICONIFIED_P (f))
             {
-              SET_FRAME_ICONIFIED (f, 1);
+              SET_FRAME_ICONIFIED (f, true);
               inev.ie.kind = ICONIFY_EVENT;
               XSETFRAME (inev.ie.frame_or_window, f);
             }
@@ -7020,8 +7025,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
             x_check_fullscreen (f);
 
           SET_FRAME_VISIBLE (f, 1);
-          SET_FRAME_ICONIFIED (f, 0);
-          f->output_data.x->has_been_visible = 1;
+          SET_FRAME_ICONIFIED (f, false);
+          f->output_data.x->has_been_visible = true;
 
           if (iconified)
             {
@@ -7060,7 +7065,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              || !EQ (f->tool_bar_window, hlinfo->mouse_face_window)))
         {
           clear_mouse_face (hlinfo);
-          hlinfo->mouse_face_hidden = 1;
+          hlinfo->mouse_face_hidden = true;
         }
 #endif
 
@@ -7321,8 +7326,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                   which depends on which X*LookupString function
                   we used just above and the locale.  */
                setup_coding_system (coding_system, &coding);
-               coding.src_multibyte = 0;
-               coding.dst_multibyte = 1;
+               coding.src_multibyte = false;
+               coding.dst_multibyte = true;
                /* The input is converted to events, thus we can't
                   handle composition.  Anyway, there's no XIM that
                   gives us composition information.  */
@@ -7454,7 +7459,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
         if (hlinfo->mouse_face_hidden)
           {
-            hlinfo->mouse_face_hidden = 0;
+            hlinfo->mouse_face_hidden = false;
             clear_mouse_face (hlinfo);
           }
 
@@ -7471,7 +7476,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              {
                static Lisp_Object last_mouse_window;
                Lisp_Object window = window_from_coordinates
-                 (f, event->xmotion.x, event->xmotion.y, 0, 0);
+                 (f, event->xmotion.x, event->xmotion.y, 0, false);
 
                /* Window will be selected only when it is not selected now and
                   last mouse movement event was not in it.  Minibuffer window
@@ -7552,7 +7557,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
               || event->xconfigure.width != FRAME_PIXEL_WIDTH (f)
               || event->xconfigure.height != FRAME_PIXEL_HEIGHT (f))
             {
-              change_frame_size (f, width, height, 0, 1, 0, 1);
+              change_frame_size (f, width, height, false, true, false, true);
              x_clear_under_internal_border (f);
              SET_FRAME_GARBAGED (f);
               cancel_mouse_face (f);
@@ -7581,7 +7586,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
       {
         /* If we decide we want to generate an event to be seen
            by the rest of Emacs, we put it here.  */
-        bool tool_bar_p = 0;
+        bool tool_bar_p = false;
 
        memset (&compose_status, 0, sizeof (compose_status));
        dpyinfo->last_mouse_glyph_frame = NULL;
@@ -7605,7 +7610,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                 int x = event->xbutton.x;
                 int y = event->xbutton.y;
 
-                window = window_from_coordinates (f, x, y, 0, 1);
+                window = window_from_coordinates (f, x, y, 0, true);
                 tool_bar_p = EQ (window, f->tool_bar_window);
 
                 if (tool_bar_p && event->xbutton.button < 4)
@@ -7674,7 +7679,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
           any subsequent mouse-movement Emacs events should reflect
           only motion after the ButtonPress/Release.  */
        if (f != 0)
-         f->mouse_moved = 0;
+         f->mouse_moved = false;
 
 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
         f = x_menubar_window_to_frame (dpyinfo, event);
@@ -7766,7 +7771,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
       if (do_help > 0)
        {
-         any_help_event_p = 1;
+         any_help_event_p = true;
          gen_help_event (help_echo_string, frame, help_echo_window,
                          help_echo_object, help_echo_pos);
        }
@@ -7813,7 +7818,7 @@ static int
 XTread_socket (struct terminal *terminal, struct input_event *hold_quit)
 {
   int count = 0;
-  int event_found = 0;
+  bool event_found = false;
   struct x_display_info *dpyinfo = terminal->display_info.x;
 
   block_input ();
@@ -7838,7 +7843,7 @@ XTread_socket (struct terminal *terminal, struct 
input_event *hold_quit)
       if (x_filter_event (dpyinfo, &event))
         continue;
 #endif
-      event_found = 1;
+      event_found = true;
 
       count += handle_one_xevent (dpyinfo, &event, &finish, hold_quit);
 
@@ -8038,7 +8043,7 @@ x_draw_bar_cursor (struct window *w, struct glyph_row 
*row, int width, enum text
        xgcv.background = xgcv.foreground = face->foreground;
       else
        xgcv.background = xgcv.foreground = f->output_data.x->cursor_pixel;
-      xgcv.graphics_exposures = 0;
+      xgcv.graphics_exposures = False;
 
       if (gc)
        XChangeGC (dpy, gc, mask, &xgcv);
@@ -8134,14 +8139,14 @@ x_draw_window_cursor (struct window *w, struct 
glyph_row *glyph_row, int x,
   if (on_p)
     {
       w->phys_cursor_type = cursor_type;
-      w->phys_cursor_on_p = 1;
+      w->phys_cursor_on_p = true;
 
       if (glyph_row->exact_window_width_line_p
          && (glyph_row->reversed_p
              ? (w->phys_cursor.hpos < 0)
              : (w->phys_cursor.hpos >= glyph_row->used[TEXT_AREA])))
        {
-         glyph_row->cursor_in_fringe_p = 1;
+         glyph_row->cursor_in_fringe_p = true;
          draw_fringe_bitmap (w, glyph_row, glyph_row->reversed_p);
        }
       else
@@ -8188,13 +8193,13 @@ x_draw_window_cursor (struct window *w, struct 
glyph_row *glyph_row, int x,
 
 /* Make the x-window of frame F use the gnu icon bitmap.  */
 
-int
+bool
 x_bitmap_icon (struct frame *f, Lisp_Object file)
 {
   ptrdiff_t bitmap_id;
 
   if (FRAME_X_WINDOW (f) == 0)
-    return 1;
+    return true;
 
   /* Free up our existing icon bitmap and mask if any.  */
   if (f->output_data.x->icon_bitmap > 0)
@@ -8207,7 +8212,7 @@ x_bitmap_icon (struct frame *f, Lisp_Object file)
       /* Use gtk_window_set_icon_from_file () if available,
         It's not restricted to bitmaps */
       if (xg_set_icon (f, file))
-       return 0;
+       return false;
 #endif /* USE_GTK */
       bitmap_id = x_create_bitmap_from_file (f, file);
       x_create_bitmap_mask (f, bitmap_id);
@@ -8221,12 +8226,11 @@ x_bitmap_icon (struct frame *f, Lisp_Object file)
 
 #ifdef USE_GTK
 
-         if (FRAME_DISPLAY_INFO (f)->icon_bitmap_id == -2
-              || xg_set_icon (f, xg_default_icon_file)
+          if (xg_set_icon (f, xg_default_icon_file)
               || xg_set_icon_from_xpm_data (f, gnu_xpm_bits))
             {
               FRAME_DISPLAY_INFO (f)->icon_bitmap_id = -2;
-              return 0;
+              return false;
             }
 
 #elif defined (HAVE_XPM) && defined (HAVE_X_WINDOWS)
@@ -8243,7 +8247,7 @@ x_bitmap_icon (struct frame *f, Lisp_Object file)
              rc = x_create_bitmap_from_data (f, (char *) gnu_xbm_bits,
                                              gnu_xbm_width, gnu_xbm_height);
              if (rc == -1)
-               return 1;
+               return true;
 
              FRAME_DISPLAY_INFO (f)->icon_bitmap_id = rc;
              x_create_bitmap_mask (f, FRAME_DISPLAY_INFO (f)->icon_bitmap_id);
@@ -8262,18 +8266,18 @@ x_bitmap_icon (struct frame *f, Lisp_Object file)
   x_wm_set_icon_pixmap (f, bitmap_id);
   f->output_data.x->icon_bitmap = bitmap_id;
 
-  return 0;
+  return false;
 }
 
 
 /* Make the x-window of frame F use a rectangle with text.
    Use ICON_NAME as the text.  */
 
-int
+bool
 x_text_icon (struct frame *f, const char *icon_name)
 {
   if (FRAME_X_WINDOW (f) == 0)
-    return 1;
+    return true;
 
   {
     XTextProperty text;
@@ -8289,7 +8293,7 @@ x_text_icon (struct frame *f, const char *icon_name)
   f->output_data.x->icon_bitmap = 0;
   x_wm_set_icon_pixmap (f, 0);
 
-  return 0;
+  return false;
 }
 
 #define X_ERROR_MESSAGE_SIZE 200
@@ -8407,7 +8411,8 @@ x_clear_errors (Display *dpy)
   x_error_message->string[0] = 0;
 }
 
-#if 0 /* See comment in unwind_to_catch why calling this is a bad
+#if false
+      /* See comment in unwind_to_catch why calling this is a bad
        * idea.  --lorentey   */
 /* Close off all unclosed x_catch_errors calls.  */
 
@@ -8419,13 +8424,13 @@ x_fully_uncatch_errors (void)
 }
 #endif
 
-#if 0
+#if false
 static unsigned int x_wire_count;
 x_trace_wire (void)
 {
   fprintf (stderr, "Lib call: %d\n", ++x_wire_count);
 }
-#endif /* ! 0 */
+#endif
 
 
 /************************************************************************
@@ -8664,7 +8669,7 @@ x_new_font (struct frame *f, Lisp_Object font_object, int 
fontset)
       if (NILP (tip_frame) || XFRAME (tip_frame) != f)
          adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
                             FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 3,
-                            0, Qfont);
+                            false, Qfont);
     }
 
 #ifdef HAVE_X_I18N
@@ -8954,7 +8959,7 @@ x_set_offset (struct frame *f, register int xoff, 
register int yoff, int change_
   x_calc_absolute_position (f);
 
   block_input ();
-  x_wm_set_size_hint (f, 0, 0);
+  x_wm_set_size_hint (f, 0, false);
 
   modified_left = f->left_pos;
   modified_top = f->top_pos;
@@ -8972,8 +8977,7 @@ x_set_offset (struct frame *f, register int xoff, 
register int yoff, int change_
                modified_left, modified_top);
 
   x_sync_with_move (f, f->left_pos, f->top_pos,
-                    FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN
-                    ? 1 : 0);
+                    FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN);
 
   /* change_gravity is non-zero when this function is called from Lisp to
      programmatically move a frame.  In that case, we call
@@ -8985,32 +8989,33 @@ x_set_offset (struct frame *f, register int xoff, 
register int yoff, int change_
      either the window manager type (A/B) is unknown or it is Type A but we
      need to compute the top/left offset adjustment for this frame.  */
 
-  if (change_gravity != 0 &&
-      (FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN
-       || (FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A
-           && (FRAME_X_OUTPUT (f)->move_offset_left == 0
-               && FRAME_X_OUTPUT (f)->move_offset_top == 0))))
+  if (change_gravity != 0
+      && (FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN
+         || (FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A
+             && (FRAME_X_OUTPUT (f)->move_offset_left == 0
+                 && FRAME_X_OUTPUT (f)->move_offset_top == 0))))
     x_check_expected_move (f, modified_left, modified_top);
 
   unblock_input ();
 }
 
-/* Return non-zero if _NET_SUPPORTING_WM_CHECK window exists and _NET_SUPPORTED
+/* Return true if _NET_SUPPORTING_WM_CHECK window exists and _NET_SUPPORTED
    on the root window for frame F contains ATOMNAME.
    This is how a WM check shall be done according to the Window Manager
    Specification/Extended Window Manager Hints at
    http://freedesktop.org/wiki/Specifications/wm-spec.  */
 
-static int
+static bool
 wm_supports (struct frame *f, Atom want_atom)
 {
   Atom actual_type;
   unsigned long actual_size, bytes_remaining;
   int i, rc, actual_format;
+  bool ret;
   Window wmcheck_window;
   struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
   Window target_window = dpyinfo->root_window;
-  long max_len = 65536;
+  int max_len = 65536;
   Display *dpy = FRAME_X_DISPLAY (f);
   unsigned char *tmp_data = NULL;
   Atom target_type = XA_WINDOW;
@@ -9029,7 +9034,7 @@ wm_supports (struct frame *f, Atom want_atom)
       if (tmp_data) XFree (tmp_data);
       x_uncatch_errors ();
       unblock_input ();
-      return 0;
+      return false;
     }
 
   wmcheck_window = *(Window *) tmp_data;
@@ -9042,7 +9047,7 @@ wm_supports (struct frame *f, Atom want_atom)
     {
       x_uncatch_errors ();
       unblock_input ();
-      return 0;
+      return false;
     }
 
   if (dpyinfo->net_supported_window != wmcheck_window)
@@ -9067,7 +9072,7 @@ wm_supports (struct frame *f, Atom want_atom)
           if (tmp_data) XFree (tmp_data);
           x_uncatch_errors ();
           unblock_input ();
-          return 0;
+          return false;
         }
 
       dpyinfo->net_supported_atoms = (Atom *)tmp_data;
@@ -9075,19 +9080,19 @@ wm_supports (struct frame *f, Atom want_atom)
       dpyinfo->net_supported_window = wmcheck_window;
     }
 
-  rc = 0;
+  ret = false;
 
-  for (i = 0; rc == 0 && i < dpyinfo->nr_net_supported_atoms; ++i)
-    rc = dpyinfo->net_supported_atoms[i] == want_atom;
+  for (i = 0; !ret && i < dpyinfo->nr_net_supported_atoms; ++i)
+    ret = dpyinfo->net_supported_atoms[i] == want_atom;
 
   x_uncatch_errors ();
   unblock_input ();
 
-  return rc;
+  return ret;
 }
 
 static void
-set_wm_state (Lisp_Object frame, int add, Atom atom, Atom value)
+set_wm_state (Lisp_Object frame, bool add, Atom atom, Atom value)
 {
   struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (XFRAME (frame));
 
@@ -9096,7 +9101,7 @@ set_wm_state (Lisp_Object frame, int add, Atom atom, Atom 
value)
                        make_number (32),
                        /* 1 = add, 0 = remove */
                        Fcons
-                       (make_number (add ? 1 : 0),
+                       (make_number (add),
                         Fcons
                         (make_fixnum_or_float (atom),
                          (value != 0
@@ -9112,32 +9117,33 @@ x_set_sticky (struct frame *f, Lisp_Object new_value, 
Lisp_Object old_value)
 
   XSETFRAME (frame, f);
 
-  set_wm_state (frame, NILP (new_value) ? 0 : 1,
+  set_wm_state (frame, !NILP (new_value),
                 dpyinfo->Xatom_net_wm_state_sticky, None);
 }
 
 /* Return the current _NET_WM_STATE.
    SIZE_STATE is set to one of the FULLSCREEN_* values.
-   STICKY is set to 1 if the sticky state is set, 0 if not.
+   Set *STICKY to the sticky state.
 
-   Return non-zero if we are not hidden, zero if we are.  */
+   Return true iff we are not hidden.  */
 
-static int
+static bool
 get_current_wm_state (struct frame *f,
                       Window window,
                       int *size_state,
-                      int *sticky)
+                      bool *sticky)
 {
   Atom actual_type;
   unsigned long actual_size, bytes_remaining;
-  int i, rc, actual_format, is_hidden = 0;
+  int i, rc, actual_format;
+  bool is_hidden = false;
   struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
   long max_len = 65536;
   Display *dpy = FRAME_X_DISPLAY (f);
   unsigned char *tmp_data = NULL;
   Atom target_type = XA_ATOM;
 
-  *sticky = 0;
+  *sticky = false;
   *size_state = FULLSCREEN_NONE;
 
   block_input ();
@@ -9161,9 +9167,7 @@ get_current_wm_state (struct frame *f,
     {
       Atom a = ((Atom*)tmp_data)[i];
       if (a == dpyinfo->Xatom_net_wm_state_hidden)
-        {
-          is_hidden = 1;
-        }
+       is_hidden = true;
       else if (a == dpyinfo->Xatom_net_wm_state_maximized_horz)
         {
           if (*size_state == FULLSCREEN_HEIGHT)
@@ -9181,7 +9185,7 @@ get_current_wm_state (struct frame *f,
       else if (a == dpyinfo->Xatom_net_wm_state_fullscreen)
         *size_state = FULLSCREEN_BOTH;
       else if (a == dpyinfo->Xatom_net_wm_state_sticky)
-        *sticky = 1;
+        *sticky = true;
     }
 
   if (tmp_data) XFree (tmp_data);
@@ -9191,14 +9195,15 @@ get_current_wm_state (struct frame *f,
 
 /* Do fullscreen as specified in extended window manager hints */
 
-static int
+static bool
 do_ewmh_fullscreen (struct frame *f)
 {
   struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
-  int have_net_atom = wm_supports (f, dpyinfo->Xatom_net_wm_state);
-  int cur, dummy;
+  bool have_net_atom = wm_supports (f, dpyinfo->Xatom_net_wm_state);
+  int cur;
+  bool dummy;
 
-  (void)get_current_wm_state (f, FRAME_OUTER_WINDOW (f), &cur, &dummy);
+  get_current_wm_state (f, FRAME_OUTER_WINDOW (f), &cur, &dummy);
 
   /* Some window managers don't say they support _NET_WM_STATE, but they do say
      they support _NET_WM_STATE_FULLSCREEN.  Try that also.  */
@@ -9217,39 +9222,43 @@ do_ewmh_fullscreen (struct frame *f)
       switch (f->want_fullscreen)
         {
         case FULLSCREEN_BOTH:
-          if (cur == FULLSCREEN_WIDTH || cur == FULLSCREEN_MAXIMIZED
-              || cur == FULLSCREEN_HEIGHT)
-            set_wm_state (frame, 0, dpyinfo->Xatom_net_wm_state_maximized_horz,
-                          dpyinfo->Xatom_net_wm_state_maximized_vert);
-          set_wm_state (frame, 1, dpyinfo->Xatom_net_wm_state_fullscreen, 
None);
+          if (cur != FULLSCREEN_BOTH)
+            set_wm_state (frame, true, dpyinfo->Xatom_net_wm_state_fullscreen,
+                          None);
           break;
         case FULLSCREEN_WIDTH:
           if (cur == FULLSCREEN_BOTH || cur == FULLSCREEN_HEIGHT
               || cur == FULLSCREEN_MAXIMIZED)
-            set_wm_state (frame, 0, dpyinfo->Xatom_net_wm_state_fullscreen,
+            set_wm_state (frame, false, dpyinfo->Xatom_net_wm_state_fullscreen,
                           dpyinfo->Xatom_net_wm_state_maximized_vert);
           if (cur != FULLSCREEN_MAXIMIZED)
-            set_wm_state (frame, 1, 
dpyinfo->Xatom_net_wm_state_maximized_horz, None);
+            set_wm_state (frame, true,
+                         dpyinfo->Xatom_net_wm_state_maximized_horz, None);
           break;
         case FULLSCREEN_HEIGHT:
           if (cur == FULLSCREEN_BOTH || cur == FULLSCREEN_WIDTH
               || cur == FULLSCREEN_MAXIMIZED)
-            set_wm_state (frame, 0, dpyinfo->Xatom_net_wm_state_fullscreen,
+            set_wm_state (frame, false, dpyinfo->Xatom_net_wm_state_fullscreen,
                           dpyinfo->Xatom_net_wm_state_maximized_horz);
           if (cur != FULLSCREEN_MAXIMIZED)
-            set_wm_state (frame, 1, 
dpyinfo->Xatom_net_wm_state_maximized_vert, None);
+            set_wm_state (frame, true,
+                         dpyinfo->Xatom_net_wm_state_maximized_vert, None);
           break;
         case FULLSCREEN_MAXIMIZED:
           if (cur == FULLSCREEN_BOTH)
-            set_wm_state (frame, 0, dpyinfo->Xatom_net_wm_state_fullscreen, 
None);
-          set_wm_state (frame, 1, dpyinfo->Xatom_net_wm_state_maximized_horz,
+            set_wm_state (frame, false, dpyinfo->Xatom_net_wm_state_fullscreen,
+                         None);
+          set_wm_state (frame, true,
+                       dpyinfo->Xatom_net_wm_state_maximized_horz,
                         dpyinfo->Xatom_net_wm_state_maximized_vert);
           break;
         case FULLSCREEN_NONE:
           if (cur == FULLSCREEN_BOTH)
-            set_wm_state (frame, 0, dpyinfo->Xatom_net_wm_state_fullscreen, 
None);
+            set_wm_state (frame, false, dpyinfo->Xatom_net_wm_state_fullscreen,
+                         None);
           else
-            set_wm_state (frame, 0, dpyinfo->Xatom_net_wm_state_maximized_horz,
+            set_wm_state (frame, false,
+                         dpyinfo->Xatom_net_wm_state_maximized_horz,
                           dpyinfo->Xatom_net_wm_state_maximized_vert);
         }
 
@@ -9273,13 +9282,13 @@ XTfullscreen_hook (struct frame *f)
 }
 
 
-static int
+static bool
 x_handle_net_wm_state (struct frame *f, const XPropertyEvent *event)
 {
   int value = FULLSCREEN_NONE;
   Lisp_Object lval;
-  int sticky = 0;
-  int not_hidden = get_current_wm_state (f, event->window, &value, &sticky);
+  bool sticky = false;
+  bool not_hidden = get_current_wm_state (f, event->window, &value, &sticky);
 
   lval = Qnil;
   switch (value)
@@ -9381,7 +9390,7 @@ x_check_expected_move (struct frame *f, int 
expected_left, int expected_top)
       XMoveWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
                    adjusted_left, adjusted_top);
 
-      x_sync_with_move (f, expected_left, expected_top, 0);
+      x_sync_with_move (f, expected_left, expected_top, false);
     }
   else
     /* It's a "Type B" window manager.  We don't have to adjust the
@@ -9398,7 +9407,7 @@ x_check_expected_move (struct frame *f, int 
expected_left, int expected_top)
    of an exact comparison.  */
 
 static void
-x_sync_with_move (struct frame *f, int left, int top, int fuzzy)
+x_sync_with_move (struct frame *f, int left, int top, bool fuzzy)
 {
   int count = 0;
 
@@ -9429,7 +9438,7 @@ x_sync_with_move (struct frame *f, int left, int top, int 
fuzzy)
   /* As a last resort, just wait 0.5 seconds and hope that XGetGeometry
      will then return up-to-date position info. */
 
-  wait_reading_process_output (0, 500000000, 0, 0, Qnil, NULL, 0);
+  wait_reading_process_output (0, 500000000, 0, false, Qnil, NULL, 0);
 }
 
 
@@ -9452,7 +9461,7 @@ x_wait_for_event (struct frame *f, int eventtype)
 
   while (f->wait_event_type)
     {
-      pending_signals = 1;
+      pending_signals = true;
       totally_unblock_input ();
       /* XTread_socket is called after unblock.  */
       block_input ();
@@ -9475,12 +9484,13 @@ x_wait_for_event (struct frame *f, int eventtype)
 
 
 /* Change the size of frame F's X window to WIDTH/HEIGHT in the case F
-   doesn't have a widget.  If CHANGE_GRAVITY is 1, we change to
+   doesn't have a widget.  If CHANGE_GRAVITY, change to
    top-left-corner window gravity for this size change and subsequent
-   size changes.  Otherwise we leave the window gravity unchanged.  */
+   size changes.  Otherwise leave the window gravity unchanged.  */
 
 static void
-x_set_window_size_1 (struct frame *f, int change_gravity, int width, int 
height, bool pixelwise)
+x_set_window_size_1 (struct frame *f, bool change_gravity,
+                    int width, int height, bool pixelwise)
 {
   int pixelwidth, pixelheight;
 
@@ -9492,7 +9502,7 @@ x_set_window_size_1 (struct frame *f, int change_gravity, 
int width, int height,
                  : FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, height)));
 
   if (change_gravity) f->win_gravity = NorthWestGravity;
-  x_wm_set_size_hint (f, 0, 0);
+  x_wm_set_size_hint (f, 0, false);
   XResizeWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
                 pixelwidth, pixelheight + FRAME_MENUBAR_HEIGHT (f));
 
@@ -9514,7 +9524,7 @@ x_set_window_size_1 (struct frame *f, int change_gravity, 
int width, int height,
      wouldn't be reported in the frame parameters until some random
      point in the future when the ConfigureNotify event arrives.
 
-     We pass 1 for DELAY since we can't run Lisp code inside of
+     Pass true for DELAY since we can't run Lisp code inside of
      a BLOCK_INPUT.  */
 
   /* But the ConfigureNotify may in fact never arrive, and then this is
@@ -9524,25 +9534,26 @@ x_set_window_size_1 (struct frame *f, int 
change_gravity, int width, int height,
     x_wait_for_event (f, ConfigureNotify);
   else
     {
-      change_frame_size (f, pixelwidth, pixelheight, 0, 1, 0, 1);
+      change_frame_size (f, width, height, false, true, false, true);
       x_sync (f);
     }
 }
 
 
 /* Call this to change the size of frame F's x-window.
-   If CHANGE_GRAVITY is 1, we change to top-left-corner window gravity
+   If CHANGE_GRAVITY, change to top-left-corner window gravity
    for this size change and subsequent size changes.
    Otherwise we leave the window gravity unchanged.  */
 
 void
-x_set_window_size (struct frame *f, int change_gravity, int width, int height, 
bool pixelwise)
+x_set_window_size (struct frame *f, bool change_gravity,
+                  int width, int height, bool pixelwise)
 {
   block_input ();
 
   /* The following breaks our calculations.  If it's really needed,
      think of something else.  */
-#if 0
+#if false
   if (NILP (tip_frame) || XFRAME (tip_frame) != f)
     {
       int text_width, text_height;
@@ -9563,7 +9574,7 @@ x_set_window_size (struct frame *f, int change_gravity, 
int width, int height, b
       text_width = FRAME_PIXEL_TO_TEXT_WIDTH (f, FRAME_PIXEL_WIDTH (f));
       text_height = FRAME_PIXEL_TO_TEXT_HEIGHT (f, pixelh);
 
-      change_frame_size (f, text_width, text_height, 0, 1, 0, 1);
+      change_frame_size (f, text_width, text_height, false, true, false, true);
     }
 #endif
 
@@ -9594,7 +9605,7 @@ x_set_window_size (struct frame *f, int change_gravity, 
int width, int height, b
 
   unblock_input ();
 
-  do_pending_window_change (0);
+  do_pending_window_change (false);
 }
 
 /* Move the mouse to position pixel PIX_X, PIX_Y relative to frame F.  */
@@ -9669,7 +9680,7 @@ x_ewmh_activate_frame (struct frame *f)
 }
 
 static void
-XTframe_raise_lower (struct frame *f, int raise_flag)
+XTframe_raise_lower (struct frame *f, bool raise_flag)
 {
   if (raise_flag)
     x_raise_frame (f);
@@ -9751,7 +9762,7 @@ x_make_frame_visible (struct frame *f)
          && ! f->output_data.x->asked_for_visible)
        x_set_offset (f, f->left_pos, f->top_pos, 0);
 
-      f->output_data.x->asked_for_visible = 1;
+      f->output_data.x->asked_for_visible = true;
 
       if (! EQ (Vx_no_window_manager, Qt))
        x_wm_set_window_state (f, NormalState);
@@ -9786,7 +9797,7 @@ x_make_frame_visible (struct frame *f)
     /* This must be before UNBLOCK_INPUT
        since events that arrive in response to the actions above
        will set it when they are handled.  */
-    int previously_visible = f->output_data.x->has_been_visible;
+    bool previously_visible = f->output_data.x->has_been_visible;
 
     original_left = f->left_pos;
     original_top = f->top_pos;
@@ -9901,7 +9912,7 @@ x_make_frame_invisible (struct frame *f)
      program-specified, so that when the window is mapped again, it will be
      placed at the same location, without forcing the user to position it
      by hand again (they have already done that once for this window.)  */
-  x_wm_set_size_hint (f, 0, 1);
+  x_wm_set_size_hint (f, 0, true);
 
 #ifdef USE_GTK
   if (FRAME_GTK_OUTER_WIDGET (f))
@@ -9928,7 +9939,7 @@ x_make_frame_invisible (struct frame *f)
      FRAME_SAMPLE_VISIBILITY set this.  So do it by hand,
      and synchronize with the server to make sure we agree.  */
   SET_FRAME_VISIBLE (f, 0);
-  SET_FRAME_ICONIFIED (f, 0);
+  SET_FRAME_ICONIFIED (f, false);
 
   x_sync (f);
 
@@ -9963,7 +9974,7 @@ x_iconify_frame (struct frame *f)
 
       gtk_window_iconify (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
       SET_FRAME_VISIBLE (f, 0);
-      SET_FRAME_ICONIFIED (f, 1);
+      SET_FRAME_ICONIFIED (f, true);
       unblock_input ();
       return;
     }
@@ -9981,7 +9992,7 @@ x_iconify_frame (struct frame *f)
         that an invisible frame was changed to an icon,
         so we have to record it here.  */
       SET_FRAME_VISIBLE (f, 0);
-      SET_FRAME_ICONIFIED (f, 1);
+      SET_FRAME_ICONIFIED (f, true);
       unblock_input ();
       return;
     }
@@ -9994,7 +10005,7 @@ x_iconify_frame (struct frame *f)
   if (!result)
     error ("Can't notify window manager of iconification");
 
-  SET_FRAME_ICONIFIED (f, 1);
+  SET_FRAME_ICONIFIED (f, true);
   SET_FRAME_VISIBLE (f, 0);
 
   block_input ();
@@ -10044,7 +10055,7 @@ x_iconify_frame (struct frame *f)
       XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
     }
 
-  SET_FRAME_ICONIFIED (f, 1);
+  SET_FRAME_ICONIFIED (f, true);
   SET_FRAME_VISIBLE (f, 0);
 
   XFlush (FRAME_X_DISPLAY (f));
@@ -10466,7 +10477,7 @@ static XrmOptionDescRec emacs_options[] = {
 
 /* Whether atimer for Xt timeouts is activated or not.  */
 
-static int x_timeout_atimer_activated_flag;
+static bool x_timeout_atimer_activated_flag;
 
 #endif /* USE_X_TOOLKIT */
 
@@ -10474,12 +10485,13 @@ static int x_initialized;
 
 /* Test whether two display-name strings agree up to the dot that separates
    the screen number from the server number.  */
-static int
+static bool
 same_x_server (const char *name1, const char *name2)
 {
-  int seen_colon = 0;
-  const char *system_name = SSDATA (Vsystem_name);
-  ptrdiff_t system_name_length = SBYTES (Vsystem_name);
+  bool seen_colon = false;
+  Lisp_Object sysname = Fsystem_name ();
+  const char *system_name = SSDATA (sysname);
+  ptrdiff_t system_name_length = SBYTES (sysname);
   ptrdiff_t length_until_period = 0;
 
   while (system_name[length_until_period] != 0
@@ -10509,9 +10521,9 @@ same_x_server (const char *name1, const char *name2)
   for (; *name1 != '\0' && *name1 == *name2; name1++, name2++)
     {
       if (*name1 == ':')
-       seen_colon = 1;
+       seen_colon = true;
       if (seen_colon && *name1 == '.')
-       return 1;
+       return true;
     }
   return (seen_colon
          && (*name1 == '.' || *name1 == '\0')
@@ -10543,14 +10555,17 @@ get_bits_and_offset (unsigned long mask, int *bits, 
int *offset)
   *bits = nr;
 }
 
-/* Return 1 if display DISPLAY is available for use, 0 otherwise.
+/* Return true iff display DISPLAY is available for use.
    But don't permanently open it, just test its availability.  */
 
 bool
 x_display_ok (const char *display)
 {
   Display *dpy = XOpenDisplay (display);
-  return dpy ? (XCloseDisplay (dpy), 1) : 0;
+  if (!dpy)
+    return false;
+  XCloseDisplay (dpy);
+  return true;
 }
 
 #ifdef USE_GTK
@@ -10775,12 +10790,12 @@ x_term_init (Lisp_Object display_name, char 
*xrm_option, char *resource_name)
        argv[argc++] = "-xrm";
        argv[argc++] = xrm_option;
       }
-    turn_on_atimers (0);
+    turn_on_atimers (false);
     dpy = XtOpenDisplay (Xt_app_con, SSDATA (display_name),
                         resource_name, EMACS_CLASS,
                         emacs_options, XtNumber (emacs_options),
                         &argc, argv);
-    turn_on_atimers (1);
+    turn_on_atimers (true);
 
 #ifdef HAVE_X11XTR6
     /* I think this is to compensate for XtSetLanguageProc.  */
@@ -10863,19 +10878,20 @@ x_term_init (Lisp_Object display_name, char 
*xrm_option, char *resource_name)
   /* Set the name of the terminal. */
   terminal->name = xlispstrdup (display_name);
 
-#if 0
+#if false
   XSetAfterFunction (x_current_display, x_trace_wire);
-#endif /* ! 0 */
+#endif
 
   lim = min (PTRDIFF_MAX, SIZE_MAX) - sizeof "@";
-  if (lim - SBYTES (Vinvocation_name) < SBYTES (Vsystem_name))
+  Lisp_Object system_name = Fsystem_name ();
+  if (lim - SBYTES (Vinvocation_name) < SBYTES (system_name))
     memory_full (SIZE_MAX);
   dpyinfo->x_id = ++x_display_id;
   dpyinfo->x_id_name = xmalloc (SBYTES (Vinvocation_name)
-                               + SBYTES (Vsystem_name) + 2);
+                               + SBYTES (system_name) + 2);
   char *nametail = lispstpcpy (dpyinfo->x_id_name, Vinvocation_name);
   *nametail++ = '@';
-  lispstpcpy (nametail, Vsystem_name);
+  lispstpcpy (nametail, system_name);
 
   /* Figure out which modifier bits mean what.  */
   x_find_modifier_meanings (dpyinfo);
@@ -11231,7 +11247,7 @@ static void
 x_process_timeouts (struct atimer *timer)
 {
   block_input ();
-  x_timeout_atimer_activated_flag = 0;
+  x_timeout_atimer_activated_flag = false;
   if (toolkit_scroll_bar_interaction || popup_activated ())
     {
       while (XtAppPending (Xt_app_con) & XtIMTimer)
@@ -11258,7 +11274,7 @@ x_activate_timeout_atimer (void)
     {
       struct timespec interval = make_timespec (0, 100 * 1000 * 1000);
       start_atimer (ATIMER_RELATIVE, interval, x_process_timeouts, 0);
-      x_timeout_atimer_activated_flag = 1;
+      x_timeout_atimer_activated_flag = true;
     }
   unblock_input ();
 }
@@ -11318,8 +11334,7 @@ x_delete_terminal (struct terminal *terminal)
     xim_close_dpy (dpyinfo);
 #endif
 
-  /* If called from x_connection_closed, the display may already be closed
-     and dpyinfo->display was set to 0 to indicate that.  */
+  /* Normally, the display is available...  */
   if (dpyinfo->display)
     {
       x_destroy_all_bitmaps (dpyinfo);
@@ -11339,7 +11354,7 @@ x_delete_terminal (struct terminal *terminal)
         don't destroy the database here in order to avoid the crash
         in the above situations for now, though that may cause memory
         leaks in other situations.  */
-#if 0
+#if false
 #ifdef HAVE_XRMSETDATABASE
       XrmSetDatabase (dpyinfo->display, NULL);
 #else
@@ -11360,17 +11375,23 @@ x_delete_terminal (struct terminal *terminal)
       XCloseDisplay (dpyinfo->display);
 #endif
 #endif /* ! USE_GTK */
-
-      /* No more input on this descriptor.  Do not close it because
-        it's already closed by X(t)CloseDisplay (Bug#18403).  */
-      eassert (0 <= dpyinfo->connection);
-      delete_keyboard_wait_descriptor (dpyinfo->connection);
-
-      /* Mark as dead. */
+      /* Do not close the connection here because it's already closed
+        by X(t)CloseDisplay (Bug#18403).  */
       dpyinfo->display = NULL;
-      dpyinfo->connection = -1;
     }
 
+  /* ...but if called from x_connection_closed, the display may already
+     be closed and dpyinfo->display was set to 0 to indicate that.  Since
+     X server is most likely gone, explicit close is the only reliable
+     way to continue and avoid Bug#19147.  */
+  else if (dpyinfo->connection >= 0)
+    emacs_close (dpyinfo->connection);
+
+  /* No more input on this descriptor.  */
+  delete_keyboard_wait_descriptor (dpyinfo->connection);
+  /* Mark as dead. */
+  dpyinfo->connection = -1;
+
   x_delete_display (dpyinfo);
   unblock_input ();
 }
@@ -11425,7 +11446,7 @@ x_initialize (void)
   baud_rate = 19200;
 
   x_noop_count = 0;
-  any_help_event_p = 0;
+  any_help_event_p = false;
   ignore_next_mouse_click_timeout = 0;
 
 #ifdef USE_GTK
@@ -11497,7 +11518,7 @@ UNDERLINE_POSITION font properties, for example 7x13 on 
XFree prior
 to 4.1, set this to nil.  You can also use `underline-minimum-offset'
 to override the font's UNDERLINE_POSITION for small font display
 sizes.  */);
-  x_use_underline_position_properties = 1;
+  x_use_underline_position_properties = true;
 
   DEFVAR_BOOL ("x-underline-at-descent-line",
               x_underline_at_descent_line,
@@ -11505,7 +11526,7 @@ sizes.  */);
 A value of nil means to draw the underline according to the value of the
 variable `x-use-underline-position-properties', which is usually at the
 baseline level.  The default value is nil.  */);
-  x_underline_at_descent_line = 0;
+  x_underline_at_descent_line = false;
 
   DEFVAR_BOOL ("x-mouse-click-focus-ignore-position",
               x_mouse_click_focus_ignore_position,
@@ -11515,7 +11536,7 @@ click on a frame to select it (give it focus).  In that 
case, a value
 of nil, means that the selected window and cursor position changes to
 reflect the mouse click position, while a non-nil value means that the
 selected window or cursor position is preserved.  */);
-  x_mouse_click_focus_ignore_position = 0;
+  x_mouse_click_focus_ignore_position = false;
 
   DEFVAR_LISP ("x-toolkit-scroll-bars", Vx_toolkit_scroll_bars,
     doc: /* Which toolkit scroll bars Emacs uses, if any.
diff --git a/src/xterm.h b/src/xterm.h
index 23dd436..e597227 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication with X protocol.
-   Copyright (C) 1989, 1993-1994, 1998-2014 Free Software Foundation,
+   Copyright (C) 1989, 1993-1994, 1998-2015 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -834,7 +834,7 @@ struct scroll_bar
   int whole;
 #endif
 
-  /* 1 if the scroll bar is horizontal.  */
+  /* True if the scroll bar is horizontal.  */
   bool horizontal;
 };
 
@@ -979,7 +979,7 @@ XrmDatabase x_load_resources (Display *, const char *, 
const char *,
 
 /* Defined in xterm.c */
 
-extern int x_text_icon (struct frame *, const char *);
+extern bool x_text_icon (struct frame *, const char *);
 extern void x_catch_errors (Display *);
 extern void x_check_errors (Display *, const char *)
   ATTRIBUTE_FORMAT_PRINTF (2, 0);
@@ -1049,10 +1049,10 @@ extern void x_send_client_event (Lisp_Object display,
                                  Lisp_Object format,
                                  Lisp_Object values);
 
-extern int x_handle_dnd_message (struct frame *,
-                                 const XClientMessageEvent *,
-                                 struct x_display_info *,
-                                 struct input_event *);
+extern bool x_handle_dnd_message (struct frame *,
+                                 const XClientMessageEvent *,
+                                 struct x_display_info *,
+                                 struct input_event *);
 extern int x_check_property_data (Lisp_Object);
 extern void x_fill_property_data (Display *,
                                   Lisp_Object,
@@ -1067,8 +1067,8 @@ extern void x_clipboard_manager_save_frame (Lisp_Object);
 extern void x_clipboard_manager_save_all (void);
 
 #ifdef USE_GTK
-extern int xg_set_icon (struct frame *, Lisp_Object);
-extern int xg_set_icon_from_xpm_data (struct frame *, const char **);
+extern bool xg_set_icon (struct frame *, Lisp_Object);
+extern bool xg_set_icon_from_xpm_data (struct frame *, const char **);
 #endif /* USE_GTK */
 
 extern void xic_free_xfontset (struct frame *);
@@ -1081,7 +1081,7 @@ extern bool x_defined_color (struct frame *, const char 
*, XColor *, bool);
 #ifdef HAVE_X_I18N
 extern void free_frame_xic (struct frame *);
 # if defined HAVE_X_WINDOWS && defined USE_X_TOOLKIT
-extern char * xic_create_fontsetname (const char *base_fontname, int motif);
+extern char *xic_create_fontsetname (const char *, bool);
 # endif
 #endif
 
@@ -1099,7 +1099,7 @@ extern Lisp_Object xw_popup_dialog (struct frame *, 
Lisp_Object, Lisp_Object);
 #endif
 
 #if defined USE_GTK || defined USE_MOTIF
-extern void x_menu_set_in_use (int);
+extern void x_menu_set_in_use (bool);
 #endif
 extern void x_menu_wait_for_event (void *data);
 extern void initialize_frame_menubar (struct frame *);
@@ -1107,13 +1107,10 @@ extern void initialize_frame_menubar (struct frame *);
 /* Defined in xsmfns.c */
 #ifdef HAVE_X_SM
 extern void x_session_initialize (struct x_display_info *dpyinfo);
-extern int x_session_have_connection (void);
+extern bool x_session_have_connection (void);
 extern void x_session_close (void);
 #endif
 
-/* Defined in xterm.c */
-
-extern Lisp_Object Qx_gtk_map_stock;
 
 /* Is the frame embedded into another application? */
 
diff --git a/test/ChangeLog b/test/ChangeLog
index 475b6a3..a9834cc 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,379 @@
+2015-01-31  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-tests.el (eieio-test-23-inheritance-check): Simplify.
+
+2015-01-30  Stefan Monnier  <address@hidden>
+
+       * automated/core-elisp-tests.el (core-elisp-tests-3-backquote): New 
test.
+
+2015-01-28  Fabián Ezequiel Gallina  <address@hidden>
+
+       * automated/python-tests.el (python-indent-pep8-1)
+       (python-indent-pep8-2, python-indent-pep8-3)
+       (python-indent-after-comment-1, python-indent-after-comment-2)
+       (python-indent-inside-paren-1, python-indent-inside-paren-2)
+       (python-indent-after-block-1, python-indent-after-block-2)
+       (python-indent-after-backslash-1, python-indent-after-backslash-2)
+       (python-indent-after-backslash-3, python-indent-block-enders-1)
+       (python-indent-block-enders-2, python-indent-block-enders-3)
+       (python-indent-block-enders-4, python-indent-block-enders-5)
+       (python-indent-dedenters-1, python-indent-dedenters-2)
+       (python-indent-dedenters-3, python-indent-dedenters-4)
+       (python-indent-dedenters-5, python-indent-dedenters-6)
+       (python-indent-dedenters-7, python-indent-dedenters-8): Fix tests.
+       (python-indent-base-case, python-indent-after-block-3)
+       (python-indent-after-backslash-5, python-indent-inside-paren-3)
+       (python-indent-inside-paren-4, python-indent-inside-paren-5)
+       (python-indent-inside-paren-6, python-indent-inside-string-1)
+       (python-indent-inside-string-2, python-indent-inside-string-3)
+       (python-indent-dedent-line-backspace-1): New Tests.
+
+2015-01-28  Glenn Morris  <address@hidden>
+
+       * automated/regexp-tests.el: Require regexp-opt, which is
+       not preloaded --without-x.
+
+2015-01-26  Stefan Monnier  <address@hidden>
+
+       * automated/cl-generic-tests.el: Try and make sure cl-lib is not
+       required at run-time.
+
+2015-01-26  Stefan Monnier  <address@hidden>
+
+       * automated/cl-generic-tests.el (cl-generic-test-11-next-method-p):
+       New test.
+
+2015-01-25  Paul Eggert  <address@hidden>
+
+       * indent/shell.sh (bar): Use '[ $# -eq 0 ]', not '[ $# == 0 ]'.
+       This is more portable in shell scripts.
+       Fixes: bug#19658
+
+2015-01-23  Dmitry Gutov  <address@hidden>
+
+       Fix package tests when TMPDIR is in HOME.  (Bug#19657)
+       * automated/package-test.el (with-package-test):
+       Bind `abbreviated-home-dir' to nil.
+       (package-test-describe-package, package-test-signed):
+       Expect abbreviated directory names.
+
+2015-01-22  Jorgen Schaefer  <address@hidden>
+
+       * automated/package-test.el (package-test-install-prioritized):
+       Re-add the test case and add priority to the correct repository
+       this time around.
+
+2015-01-21  Stefan Monnier  <address@hidden>
+
+       * automated/cl-generic-tests.el (setf cl--generic-2): Make sure
+       the setf can be used already in the body of the method.
+
+2015-01-20  Jorgen Schaefer  <address@hidden>
+
+       * automated/package-test.el (package-test-install-prioritized):
+       Remove test due to unreproducible failures.
+
+2015-01-20  Michal Nazarewicz  <address@hidden>
+
+       * automated/descr-text-test.el: New file with tests for
+       `describe-char-eldoc--truncate', `describe-char-eldoc--format',
+       and `describe-char-eldoc'.
+
+2015-01-20  Michal Nazarewicz  <address@hidden>
+
+       * automated/tildify-tests.el (tildify-space-undo-test--test):
+       A new helper function for testing `tildify-double-space-undos'
+       behaviour in the `tildify-space' function.
+       (tildify-space-undo-test-html, tildify-space-undo-test-html-nbsp)
+       (tildify-space-undo-test-xml, tildify-space-undo-test-tex):
+       New tests for `tildify-doule-space-undos' behaviour.
+
+       * automated/tildify-tests.el (tildify-space-test--test):
+       A new helper function for testing `tildify-space' function.
+       (tildify-space-test-html, tildify-space-test-html-nbsp)
+       (tildify-space-test-xml, tildify-space-test-tex): New tests for
+       `tildify-space' function.
+
+2015-01-18  Stefan Monnier  <address@hidden>
+
+       * automated/Makefile.in (EMACS_EXTRAOPT): New var.
+       (EMACSOPT): Use it.
+
+       * automated/cl-generic-tests.el (cl-generic-test-10-weird): New test.
+       Rename other tests to preserve ordering.
+
+2015-01-18  Leo Liu  <address@hidden>
+
+       * automated/seq-tests.el (test-seq-subseq): Add more tests.
+       (Bug#19434)
+
+2015-01-18  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-test-methodinvoke.el (eieio-test-cl-generic-1):
+       Test `subclass' specializer.
+
+2015-01-17  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-tests.el
+       (eieio-test-37-obsolete-name-in-constructor): New test.
+
+2015-01-17  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-tests.el (eieio-test-25-slot-tests)
+       (eieio-test-26-default-inheritance, eieio-test-28-slot-protection)
+       (eieio-test-30-slot-attribute-override)
+       (eieio-test-31-slot-attribute-override-class-allocation): Don't check
+       that we enforce :protection since we don't any more.
+
+       * automated/eieio-test-methodinvoke.el (eieio-test-method-store):
+       Use an explicit arg instead of eieio--scoped-class.  Update all callers.
+
+2015-01-17  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-test-methodinvoke.el (eieio-test-cl-generic-1):
+       Reset eieio-test--1.
+
+       * automated/cl-generic-tests.el (cl-generic-test-8-after/before):
+       Rename from cl-generic-test-7-after/before.
+       (cl--generic-test-advice): New function.
+       (cl-generic-test-9-advice): New test.
+
+2015-01-16  Jorgen Schaefer  <address@hidden>
+
+       * automated/package-test.el (package-test-install-prioritized):
+       New test.
+
+2015-01-15  Wolfgang Jenkner  <address@hidden>
+
+       * automated/calc-tests.el (calc-tests-equal, calc-tests-simple):
+       New functions.
+       (test-calc-remove-units, test-calc-extract-units)
+       (test-calc-convert-units): New tests.
+
+2015-01-15  Wolfgang Jenkner  <address@hidden>
+
+       * automated/Makefile.in (WRITE_LOG): Use POSIX redirection.
+
+2015-01-15  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-test-methodinvoke.el (eieio-test-method-store): Add
+       keysym arg instead of relying on internal var eieio--generic-call-key.
+       Update all callers.
+       (eieio-test-cl-generic-1): New tests.
+
+2015-01-14  Stefan Monnier  <address@hidden>
+
+       * automated/cl-generic-tests.el: New file.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-tests.el (eieio-test-23-inheritance-check): Don't use
+       <foo>-child-p.
+
+       * automated/eieio-test-methodinvoke.el (eieio-test-method-store):
+       Update reference to eieio--generic-call-key.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-tests.el: Use cl-lib.  Don't use <class> as a 
variable.
+       Don't use <class>-list types and <class>-list-p predicates.
+
+       * automated/eieio-test-persist.el (persistent-with-objs-list-slot):
+       Don't use <class>-list type.
+
+       * automated/eieio-test-methodinvoke.el
+       (eieio-test-method-order-list-4):
+       Don't use <class> as a variable.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-tests.el (eieio-test-04-static-method)
+       (eieio-test-05-static-method-2): Use oref-default to access
+       class slots.
+       (eieio-test-23-inheritance-check): Don't assume that
+       eieio-class-parents returns class names, or that a class can only have
+       a single name.
+
+       * automated/eieio-test-persist.el (eieio--attribute-to-initarg):
+       Move from eieio-core.el.  Rename from eieio-attribute-to-initarg.
+       Change arg to be a class object.  Update all callers.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-test-methodinvoke.el (eieio-test-method-store):
+       Adjust to new semantics of eieio--scoped-class.
+       (eieio-test-match): Improve error feedback.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-tests.el: Remove dummy object names.
+
+       * automated/eieio-test-persist.el (persistent-with-objs-slot-subs):
+       The type FOO-child is the same as FOO.
+
+2015-01-08  Stefan Monnier  <address@hidden>
+
+       * automated/eieio-test-methodinvoke.el (eieio-test-method-store):
+       Remove use of eieio-generic-call-methodname.
+       (eieio-test-method-order-list-3, eieio-test-method-order-list-6)
+       (eieio-test-method-order-list-7, eieio-test-method-order-list-8):
+       Adjust the expected result accordingly.
+
+2015-01-01  Michael Albinus  <address@hidden>
+
+       * automated/tramp-tests.el (tramp--test-smb-or-windows-nt-p):
+       New defun.
+       (tramp-test30-special-characters): Use it.  (Bug#19463)
+       (tramp--test-check-files): Filter nil file names out.
+
+2015-01-01  Michael Albinus  <address@hidden>
+
+       Sync with Tramp 2.2.11.
+
+       * automated/tramp-tests.el (tramp-test30-special-characters):
+       Skip test on MS-Windows.
+
+2014-12-27  Glenn Morris  <address@hidden>
+
+       * automated/let-alist.el: Load dependency.
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       * automated/python-tests.el
+       (python-shell-completion-native-interpreter-disabled-p-1): New test.
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       * automated/python-tests.el (python-shell-get-or-create-process-1)
+       (python-shell-get-or-create-process-2)
+       (python-shell-get-or-create-process-3): Remove tests.
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       * automated/python-tests.el (python-shell-buffer-substring-9): New test.
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       * automated/python-tests.el (python-shell-buffer-substring-1)
+       (python-shell-buffer-substring-2, python-shell-buffer-substring-3)
+       (python-shell-buffer-substring-4, python-shell-buffer-substring-5)
+       (python-shell-buffer-substring-6, python-shell-buffer-substring-7)
+       (python-shell-buffer-substring-8)
+       (python-info-encoding-from-cookie-1)
+       (python-info-encoding-from-cookie-2)
+       (python-info-encoding-from-cookie-3)
+       (python-info-encoding-from-cookie-4)
+       (python-info-encoding-from-cookie-5)
+       (python-info-encoding-from-cookie-6)
+       (python-info-encoding-from-cookie-7, python-info-encoding-1)
+       (python-info-encoding-2): New tests.
+
+2014-12-27  Michael Albinus  <address@hidden>
+
+       * automated/tramp-tests.el (tramp-test17-insert-directory): Do not
+       expect a given order of "." and "..".
+
+2014-12-27  Fabián Ezequiel Gallina  <address@hidden>
+
+       * automated/python-tests.el (python-indent-electric-colon-2)
+       (python-indent-electric-colon-3): New tests.
+
+2014-12-27  João Távora  <address@hidden>
+
+       * automated/electric-tests.el (autowrapping-7): Tests for
+       tex-mode.
+
+2014-12-27  Glenn Morris  <address@hidden>
+
+       * automated/flymake/warnpred/test.pl: Tweak format, since the
+       previous one seems to have stopped giving a warning with perl 5.20.1.
+
+2014-12-26  Fabián Ezequiel Gallina  <address@hidden>
+
+       * automated/python-tests.el (python-shell-get-process-name-1)
+       (python-shell-internal-get-process-name-1): Cleanup.
+       (python-shell-get-process-name-2)
+       (python-shell-internal-get-process-name-2): New tests.
+       (python-shell-calculate-command-1)
+       (python-shell-calculate-process-environment-3)
+       (python-shell-calculate-exec-path-2, python-shell-make-comint-1)
+       (python-shell-make-comint-2, python-shell-make-comint-4)
+       (python-shell-get-process-1, python-util-clone-local-variables-1):
+       Replace obsolete function and variable references with current.
+
+2014-12-19  Artur Malabarba  <address@hidden>
+
+       * automated/let-alist.el: require `cl-lib'
+       New tests for accessing alists inside alists.
+
+2014-12-18  Artur Malabarba  <address@hidden>
+
+       * automated/let-alist.el: New file.
+
+2014-12-16  Nicolas Petton <address@hidden>
+
+       * automated/seq-tests.el: New file.
+
+2014-12-16  Glenn Morris  <address@hidden>
+
+       * automated/data/flymake/Makefile (check-syntax):
+       Prevent colorized gcc output from confusing flymake.
+
+       * automated/flymake-tests.el (flymake-tests-data-directory):
+       Change from flymake/warnpred to more standard data/flymake.
+       * automated/flymake/warnpred/: Rename to automated/data/flymake/.
+
+2014-12-11  Michael Albinus  <address@hidden>
+
+       * automated/vc-tests.el (vc-test--revision-granularity-function):
+       New defun.
+       (vc-test--create-repo-function): Rename from
+       `vc-test--create-repo-if-not-supported'.  Adapt all callees.
+       (vc-test--create-repo): Check also for revision-granularity.
+       (vc-test--unregister-function): Additional argument FILE.
+       Adapt all callees.
+       (vc-test--working-revision): New defun.
+       (vc-test-*-working-revision): New tests.
+
+2014-12-10  Michael Albinus  <address@hidden>
+
+       * automated/vc-tests.el (vc-test--register): Check, that the file
+       still exists after register and unregister operations.
+
+2014-12-06  Michael Albinus  <address@hidden>
+
+       * automated/vc-tests.el: New file.
+
+2014-12-03  Michael Albinus  <address@hidden>
+
+       * automated/tramp-tests.el (tramp-test29-vc-registered):
+       Fallback for changed `vc-register' argument list.
+
+2014-12-03  Glenn Morris  <address@hidden>
+
+       * automated/tramp-tests.el (tramp-test29-vc-registered):
+       Update for recent incompatible change in vc-register.
+
+2014-11-29  Fabián Ezequiel Gallina  <address@hidden>
+
+       * automated/python-tests.el
+       (python-shell-calculate-process-environment-4)
+       (python-shell-calculate-process-environment-5): New tests.
+       (python-shell-make-comint-3): Use file-equal-p.
+       (python-shell-get-or-create-process-1)
+       (python-shell-get-or-create-process-2)
+       (python-shell-get-or-create-process-3): Fix interpreter for
+       Windows (Bug#18595).
+
+2014-11-21  Ulf Jasper  <address@hidden>
+
+       * automated/libxml-tests.el
+       (libxml-tests--data-comments-preserved): Rename from
+       'libxml-tests--data'.
+       (libxml-tests--data-comments-discarded): New.
+       (libxml-tests): Check whether 'libxml-parse-xml-region' is
+       discarding comments correctly.
+
 2014-11-17  Michal Nazarewicz  <address@hidden>
 
        * automated/tildify-tests.el (tildify-test-html, tildify-test-xml):
@@ -19,8 +395,8 @@
 
 2014-11-17  Ulf Jasper  <address@hidden>
 
-       * automated/icalendar-tests.el (icalendar-tests--test-export): New
-       optional parameter `alarms'.
+       * automated/icalendar-tests.el (icalendar-tests--test-export):
+       New optional parameter `alarms'.
        (icalendar-export-alarms): New test for exporting icalendar
        alarms.
        (icalendar-tests--test-cycle): Let `icalendar-export-alarms' be nil.
@@ -34,8 +410,8 @@
 
 2014-11-16  Ulf Jasper  <address@hidden>
 
-       * automated/icalendar-tests.el (icalendar--parse-vtimezone): Add
-       testcase where offsets of standard time and daylight saving time
+       * automated/icalendar-tests.el (icalendar--parse-vtimezone):
+       Add testcase where offsets of standard time and daylight saving time
        are equal.
        (icalendar-real-world): Fix error in test case.  Expected result
        was wrong when offsets of standard time and daylight saving time
@@ -70,7 +446,7 @@
 
 2014-10-22  Noam Postavsky  <address@hidden>
 
-       * test/automated/process-tests.el (process-test-quoted-batfile):
+       * automated/process-tests.el (process-test-quoted-batfile):
        New test.
 
 2014-10-20  Glenn Morris  <address@hidden>
@@ -2316,7 +2692,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2008-2014 Free Software Foundation, Inc.
+  Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in
index e0eaffa..faf0b3d 100644
--- a/test/automated/Makefile.in
+++ b/test/automated/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2010-2014 Free Software Foundation, Inc.
+# Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -39,10 +39,12 @@ SEPCHAR = @SEPCHAR@
 # directory, we can use emacs --chdir.
 EMACS = ../../src/emacs
 
+EMACS_EXTRAOPT=
+
 # Command line flags for Emacs.
 # Apparently MSYS bash would convert "-L :" to "-L ;" anyway,
 # but we might as well be explicit.
-EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(SEPCHAR)$(srcdir)"
+EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(SEPCHAR)$(srcdir)" 
$(EMACS_EXTRAOPT)
 
 # Prevent any settings in the user environment causing problems.
 unexport EMACSDATA EMACSDOC EMACSPATH GREP_OPTIONS
@@ -64,7 +66,7 @@ all: check
 
 ## Ignore any test errors so we can continue to test other files.
 ## But compilation errors are always fatal.
-WRITE_LOG = >& $@ || { stat=ERROR; cat $@; }; echo $$stat: $@
+WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo $$stat: $@
 
 ## I'd prefer to use -emacs -f ert-run-tests-batch-and-exit rather
 ## than || true, since the former makes problems more obvious.
diff --git a/test/automated/add-log-tests.el b/test/automated/add-log-tests.el
index bfa86df..9909db0 100644
--- a/test/automated/add-log-tests.el
+++ b/test/automated/add-log-tests.el
@@ -1,6 +1,6 @@
 ;;; add-log-tests.el --- Test suite for add-log.
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Masatake YAMATO <address@hidden>
 ;; Keywords: vc tools
diff --git a/test/automated/advice-tests.el b/test/automated/advice-tests.el
index bbb4add..e1d125d 100644
--- a/test/automated/advice-tests.el
+++ b/test/automated/advice-tests.el
@@ -1,6 +1,6 @@
 ;;; advice-tests.el --- Test suite for the new advice thingy.
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/bytecomp-tests.el b/test/automated/bytecomp-tests.el
index 2bdc3c5..f51710a 100644
--- a/test/automated/bytecomp-tests.el
+++ b/test/automated/bytecomp-tests.el
@@ -1,6 +1,6 @@
 ;;; bytecomp-testsuite.el
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author:         Shigeru Fukaya <address@hidden>
 ;; Created:        November 2008
diff --git a/test/automated/calc-tests.el b/test/automated/calc-tests.el
index b96a9e8..d5252ea 100644
--- a/test/automated/calc-tests.el
+++ b/test/automated/calc-tests.el
@@ -1,6 +1,6 @@
 ;;; calc-tests.el --- tests for calc                 -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: Leo Liu <address@hidden>
 ;; Keywords: maint
@@ -27,6 +27,40 @@
 (require 'cl-lib)
 (require 'ert)
 (require 'calc)
+(require 'calc-ext)
+(require 'calc-units)
+
+;; XXX The order in which calc libraries (in particular calc-units)
+;; are loaded influences whether a calc integer in an expression
+;; involving units is represented as a lisp integer or a calc float,
+;; see bug#19582.  Until this will be fixed the following function can
+;; be used to compare such calc expressions.
+(defun calc-tests-equal (a b)
+  "Like `equal' but allow for different representations of numbers.
+For example: (calc-tests-equal 10 '(float 1 1)) => t.
+A and B should be calc expressions."
+  (cond ((math-numberp a)
+        (and (math-numberp b)
+             (math-equal a b)))
+       ((atom a)
+        (equal a b))
+       ((consp b)
+        ;; Can't be dotted or circular.
+        (and (= (length a) (length b))
+             (equal (car a) (car b))
+             (cl-every #'calc-tests-equal (cdr a) (cdr b))))))
+
+(defun calc-tests-simple (fun string &rest args)
+  "Push STRING on the calc stack, then call FUN and return the new top.
+The result is a calc (i.e., lisp) expression, not its string representation.
+Also pop the entire stack afterwards.
+An existing calc stack is reused, otherwise a new one is created."
+  (calc-eval string 'push)
+  (prog1
+      (ignore-errors
+       (apply fun args)
+       (calc-top-n 1))
+    (calc-pop 0)))
 
 (ert-deftest test-math-bignum ()
   ;; bug#17556
@@ -34,6 +68,24 @@
     (should (math-negp n))
     (should (cl-notany #'cl-minusp (cdr n)))))
 
+(ert-deftest test-calc-remove-units ()
+  (should (calc-tests-equal (calc-tests-simple #'calc-remove-units "-1 m") 
-1)))
+
+(ert-deftest test-calc-extract-units ()
+  (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m")
+                           '(var m var-m)))
+  (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m*cm")
+                           '(* (float 1 -2) (^ (var m var-m) 2)))))
+
+(ert-deftest test-calc-convert-units ()
+  ;; Used to ask for `(The expression is unitless when simplified) Old Units: 
'.
+  (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m" nil 
"cm")
+                           '(* -100 (var cm var-cm))))
+  ;; Gave wrong result.
+  (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m"
+                                              (math-read-expr "1m") "cm")
+                           '(* -100 (var cm var-cm)))))
+
 (provide 'calc-tests)
 ;;; calc-tests.el ends here
 
diff --git a/test/automated/cl-generic-tests.el 
b/test/automated/cl-generic-tests.el
new file mode 100644
index 0000000..5194802
--- /dev/null
+++ b/test/automated/cl-generic-tests.el
@@ -0,0 +1,183 @@
+;;; cl-generic-tests.el --- Tests for cl-generic.el functionality  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Stefan Monnier <address@hidden>
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(eval-when-compile (require 'ert)) ;Don't indirectly require cl-lib at 
run-time.
+(require 'cl-generic)
+
+(cl-defgeneric cl--generic-1 (x y))
+(cl-defgeneric (setf cl--generic-1) (v y z) "My generic doc.")
+
+(ert-deftest cl-generic-test-00 ()
+  (cl-defgeneric cl--generic-1 (x y))
+  (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
+  (should (equal (cl--generic-1 'a 'b) '(a . b))))
+
+(ert-deftest cl-generic-test-01-eql ()
+  (cl-defgeneric cl--generic-1 (x y))
+  (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
+  (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
+    (cons "quatre" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x (eql 5)) _y)
+    (cons "cinq" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x (eql 6)) y)
+    (cons "six" (cl-call-next-method 'a y)))
+  (should (equal (cl--generic-1 'a nil) '(a)))
+  (should (equal (cl--generic-1 4 nil) '("quatre" 4)))
+  (should (equal (cl--generic-1 5 nil) '("cinq" 5)))
+  (should (equal (cl--generic-1 6 nil) '("six" a))))
+
+(cl-defstruct cl-generic-struct-parent a b)
+(cl-defstruct (cl-generic-struct-child1 (:include cl-generic-struct-parent)) c)
+(cl-defstruct (cl-generic-struct-child11 (:include cl-generic-struct-child1)) 
d)
+(cl-defstruct (cl-generic-struct-child2 (:include cl-generic-struct-parent)) e)
+
+(ert-deftest cl-generic-test-02-struct ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (cl-defmethod cl--generic-1 ((x t) y) "Doc 1." (cons x y))
+  (cl-defmethod cl--generic-1 ((_x cl-generic-struct-parent) y)
+    "Doc 2." (cons "parent" (cl-call-next-method 'a y)))
+  (cl-defmethod cl--generic-1 ((_x cl-generic-struct-child1) _y)
+    (cons "child1" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 :around ((_x t) _y)
+    (cons "around" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 :around ((_x cl-generic-struct-child11) _y)
+    (cons "child11" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x cl-generic-struct-child2) _y)
+    (cons "child2" (cl-call-next-method)))
+  (should (equal (cl--generic-1 (make-cl-generic-struct-child1) nil)
+                 '("around" "child1" "parent" a)))
+  (should (equal (cl--generic-1 (make-cl-generic-struct-child2) nil)
+                 '("around""child2" "parent" a)))
+  (should (equal (cl--generic-1 (make-cl-generic-struct-child11) nil)
+                 '("child11" "around""child1" "parent" a))))
+
+;; I don't know how to put this inside an `ert-test'.  This tests that `setf'
+;; can be used directly inside the body of the setf method.
+(cl-defmethod (setf cl--generic-2) (v (y integer) z)
+  (setf (cl--generic-2 (nth y z) z) v))
+
+(ert-deftest cl-generic-test-03-setf ()
+  (cl-defmethod (setf cl--generic-1) (v (y t) z) (list v y z))
+  (cl-defmethod (setf cl--generic-1) (v (_y (eql 4)) z) (list v "four" z))
+  (should (equal (setf (cl--generic-1 'a 'b) 'v) '(v a b)))
+  (should (equal (setf (cl--generic-1 4 'b) 'v) '(v "four" b)))
+  (let ((x ()))
+    (should (equal (setf (cl--generic-1 (progn (push 1 x) 'a)
+                                        (progn (push 2 x) 'b))
+                         (progn (push 3 x) 'v))
+                   '(v a b)))
+    (should (equal x '(3 2 1)))))
+
+(ert-deftest cl-generic-test-04-overlapping-tagcodes ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (cl-defmethod cl--generic-1 ((y t) z) (list y z))
+  (cl-defmethod cl--generic-1 ((_y (eql 4)) _z)
+                (cons "four" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_y integer) _z)
+                (cons "integer" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_y number) _z)
+                (cons "number" (cl-call-next-method)))
+  (should (equal (cl--generic-1 'a 'b) '(a b)))
+  (should (equal (cl--generic-1 1 'b) '("integer" "number" 1 b)))
+  (should (equal (cl--generic-1 4 'b) '("four" "integer" "number" 4 b))))
+
+(ert-deftest cl-generic-test-05-alias ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (defalias 'cl--generic-2 #'cl--generic-1)
+  (cl-defmethod cl--generic-1 ((y t) z) (list y z))
+  (cl-defmethod cl--generic-2 ((_y (eql 4)) _z)
+                (cons "four" (cl-call-next-method)))
+  (should (equal (cl--generic-1 4 'b) '("four" 4 b))))
+
+(ert-deftest cl-generic-test-06-multiple-dispatch ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (cl-defmethod cl--generic-1 (x y) (list x y))
+  (cl-defmethod cl--generic-1 (_x (_y integer))
+    (cons "y-int" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x integer) _y)
+    (cons "x-int" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x integer) (_y integer))
+    (cons "x&y-int" (cl-call-next-method)))
+  (should (equal (cl--generic-1 1 2) '("x&y-int" "x-int" "y-int" 1 2))))
+
+(ert-deftest cl-generic-test-07-apo ()
+  (cl-defgeneric cl--generic-1 (x y)
+    (:documentation "My doc.") (:argument-precedence-order y x))
+  (cl-defmethod cl--generic-1 (x y) (list x y))
+  (cl-defmethod cl--generic-1 (_x (_y integer))
+    (cons "y-int" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x integer) _y)
+    (cons "x-int" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x integer) (_y integer))
+    (cons "x&y-int" (cl-call-next-method)))
+  (should (equal (cl--generic-1 1 2) '("x&y-int" "y-int" "x-int" 1 2))))
+
+(ert-deftest cl-generic-test-08-after/before ()
+  (let ((log ()))
+    (cl-defgeneric cl--generic-1 (x y))
+    (cl-defmethod cl--generic-1 ((_x t) y) (cons y log))
+    (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
+    (cons "quatre" (cl-call-next-method)))
+    (cl-defmethod cl--generic-1 :after (x _y)
+      (push (list :after x) log))
+    (cl-defmethod cl--generic-1 :before (x _y)
+      (push (list :before x) log))
+    (should (equal (cl--generic-1 4 6) '("quatre" 6 (:before 4))))
+    (should (equal log '((:after 4) (:before 4))))))
+
+(defun cl--generic-test-advice (&rest args) (cons "advice" (apply args)))
+
+(ert-deftest cl-generic-test-09-advice ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (cl-defmethod cl--generic-1 (x y) (list x y))
+  (advice-add 'cl--generic-1 :around #'cl--generic-test-advice)
+  (should (equal (cl--generic-1 4 5) '("advice" 4 5)))
+  (cl-defmethod cl--generic-1 ((_x integer) _y)
+    (cons "integer" (cl-call-next-method)))
+  (should (equal (cl--generic-1 4 5) '("advice" "integer" 4 5)))
+  (advice-remove 'cl--generic-1 #'cl--generic-test-advice)
+  (should (equal (cl--generic-1 4 5) '("integer" 4 5))))
+
+(ert-deftest cl-generic-test-10-weird ()
+  (cl-defgeneric cl--generic-1 (x &rest r) "My doc.")
+  (cl-defmethod cl--generic-1 (x &rest r) (cons x r))
+  ;; This kind of definition is not valid according to CLHS, but it does show
+  ;; up in EIEIO's tests for no-next-method, so we should either
+  ;; detect it and signal an error or do something meaningful with it.
+  (cl-defmethod cl--generic-1 (x (y integer) &rest r)
+    `("integer" ,y ,x ,@r))
+  (should (equal (cl--generic-1 'a 'b) '(a b)))
+  (should (equal (cl--generic-1 1 2) '("integer" 2 1))))
+
+(ert-deftest cl-generic-test-11-next-method-p ()
+  (cl-defgeneric cl--generic-1 (x y))
+  (cl-defmethod cl--generic-1 ((x t) y)
+    (list x y (cl-next-method-p)))
+  (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
+    (cl-list* "quatre" (cl-next-method-p) (cl-call-next-method)))
+  (should (equal (cl--generic-1 4 5) '("quatre" t 4 5 nil))))
+
+(provide 'cl-generic-tests)
+;;; cl-generic-tests.el ends here
diff --git a/test/automated/cl-lib-tests.el b/test/automated/cl-lib-tests.el
index e4c6e91..c83391b 100644
--- a/test/automated/cl-lib-tests.el
+++ b/test/automated/cl-lib-tests.el
@@ -1,6 +1,6 @@
 ;;; cl-lib.el --- tests for emacs-lisp/cl-lib.el
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -245,4 +245,7 @@
 (ert-deftest cl-loop-destructuring-with ()
   (should (equal (cl-loop with (a b c) = '(1 2 3) return (+ a b c)) 6)))
 
+(ert-deftest cl-flet-test ()
+  (should (equal (cl-flet ((f1 (x) x)) (let ((x #'f1)) (funcall x 5))) 5)))
+
 ;;; cl-lib.el ends here
diff --git a/test/automated/comint-testsuite.el 
b/test/automated/comint-testsuite.el
index b2e82b2..53f0a0d 100644
--- a/test/automated/comint-testsuite.el
+++ b/test/automated/comint-testsuite.el
@@ -1,6 +1,6 @@
 ;;; comint-testsuite.el
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/compile-tests.el b/test/automated/compile-tests.el
index e231331..24c4fde 100644
--- a/test/automated/compile-tests.el
+++ b/test/automated/compile-tests.el
@@ -1,6 +1,6 @@
 ;;; compile-tests.el --- Test suite for font parsing.
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <address@hidden>
 ;; Keywords:       internal
diff --git a/test/automated/completion-tests.el 
b/test/automated/completion-tests.el
index cfc353a..69e7b76 100644
--- a/test/automated/completion-tests.el
+++ b/test/automated/completion-tests.el
@@ -1,6 +1,6 @@
 ;;; completion-tests.el --- Tests for completion functions  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords:
diff --git a/test/automated/core-elisp-tests.el 
b/test/automated/core-elisp-tests.el
index 67ed6b6..c31ecef 100644
--- a/test/automated/core-elisp-tests.el
+++ b/test/automated/core-elisp-tests.el
@@ -1,6 +1,6 @@
 ;;; core-elisp-tests.el --- Testing some core Elisp rules
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords:
@@ -24,7 +24,7 @@
 
 ;;; Code:
 
-(ert-deftest core-elisp-tests ()
+(ert-deftest core-elisp-tests-1-defvar-in-let ()
   "Test some core Elisp rules."
   (with-temp-buffer
     ;; Check that when defvar is run within a let-binding, the toplevel default
@@ -36,7 +36,7 @@
                          c-e-x)
                    '(1 2)))))
 
-(ert-deftest core-elisp-test-window-configurations ()
+(ert-deftest core-elisp-tests-2-window-configurations ()
   "Test properties of window-configurations."
   (let ((wc (current-window-configuration)))
     (with-current-buffer (window-buffer (frame-selected-window))
@@ -45,5 +45,8 @@
     (set-window-configuration wc)
     (should (or (not mark-active) (mark)))))
 
+(ert-deftest core-elisp-tests-3-backquote ()
+  (should (eq 3 (eval ``,,'(+ 1 2)))))
+
 (provide 'core-elisp-tests)
 ;;; core-elisp-tests.el ends here
diff --git a/test/automated/data-tests.el b/test/automated/data-tests.el
index 17690c8..252a141 100644
--- a/test/automated/data-tests.el
+++ b/test/automated/data-tests.el
@@ -1,6 +1,6 @@
 ;;; data-tests.el --- tests for src/data.c
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/data/flymake/Makefile 
b/test/automated/data/flymake/Makefile
new file mode 100644
index 0000000..0f3f397
--- /dev/null
+++ b/test/automated/data/flymake/Makefile
@@ -0,0 +1,13 @@
+# Makefile for flymake tests
+
+CC_OPTS = -Wall
+
+## Recent gcc (e.g. 4.8.2 on RHEL7) can automatically colorize their output,
+## which can confuse flymake.  Set GCC_COLORS to disable that.
+## This only seems to be an issue in batch mode, where you would not
+## normally use flymake, so it seems like just avoiding the issue
+## in this test is fine.  Set flymake-log-level to 3 to investigate.
+check-syntax:
+       GCC_COLORS= $(CC) $(CC_OPTS) ${CHK_SOURCES}
+
+# eof
diff --git a/test/automated/flymake/warnpred/test.c 
b/test/automated/data/flymake/test.c
similarity index 100%
rename from test/automated/flymake/warnpred/test.c
rename to test/automated/data/flymake/test.c
diff --git a/test/automated/flymake/warnpred/test.pl 
b/test/automated/data/flymake/test.pl
similarity index 51%
rename from test/automated/flymake/warnpred/test.pl
rename to test/automated/data/flymake/test.pl
index 2013b2e..d5abcb4 100644
--- a/test/automated/flymake/warnpred/test.pl
+++ b/test/automated/data/flymake/test.pl
@@ -1,2 +1,2 @@
 @arr = [1,2,3,4];
address@hidden = -1;
+my $b = @arr[1];
diff --git a/test/automated/dbus-tests.el b/test/automated/dbus-tests.el
index b157a36..9465c85 100644
--- a/test/automated/dbus-tests.el
+++ b/test/automated/dbus-tests.el
@@ -1,6 +1,6 @@
 ;;; dbus-tests.el --- Tests of D-Bus integration into Emacs
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 
diff --git a/test/automated/decoder-tests.el b/test/automated/decoder-tests.el
index 2b27961..80ff520 100644
--- a/test/automated/decoder-tests.el
+++ b/test/automated/decoder-tests.el
@@ -1,6 +1,6 @@
 ;;; decoder-tests.el --- test for text decoder
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Kenichi Handa <address@hidden>
 
diff --git a/test/automated/descr-text-test.el 
b/test/automated/descr-text-test.el
new file mode 100644
index 0000000..81ae727
--- /dev/null
+++ b/test/automated/descr-text-test.el
@@ -0,0 +1,94 @@
+;;; descr-text-test.el --- ERT tests for descr-text.el -*- lexical-binding: t 
-*-
+
+;; Copyright (C) 2014 Free Software Foundation, Inc.
+
+;; Author:     Michal Nazarewicz <address@hidden>
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package defines regression tests for the descr-text package.
+
+;;; Code:
+
+(require 'ert)
+(require 'descr-text)
+
+
+(ert-deftest descr-text-test-truncate ()
+  "Tests describe-char-eldoc--truncate function."
+  (should (equal ""
+                 (describe-char-eldoc--truncate " \t \n" 100)))
+  (should (equal "foo"
+                 (describe-char-eldoc--truncate "foo" 1)))
+  (should (equal "foo..."
+                 (describe-char-eldoc--truncate "foo wilma fred" 0)))
+  (should (equal "foo..."
+                 (describe-char-eldoc--truncate
+                  "foo wilma fred" (length "foo wilma"))))
+  (should (equal "foo wilma..."
+                 (describe-char-eldoc--truncate
+                  "foo wilma fred" (+ 3 (length "foo wilma")))))
+  (should (equal "foo wilma..."
+                 (describe-char-eldoc--truncate
+                  "foo wilma fred" (1- (length "foo wilma fred")))))
+  (should (equal "foo wilma fred"
+                 (describe-char-eldoc--truncate
+                  "foo wilma fred" (length "foo wilma fred"))))
+  (should (equal "foo wilma fred"
+                 (describe-char-eldoc--truncate
+                  "  foo\t wilma \nfred\t " (length "foo wilma fred")))))
+
+(ert-deftest descr-text-test-format-desc ()
+  "Tests describe-char-eldoc--format function."
+  (should (equal "U+2026: Horizontal ellipsis (Po: Punctuation, Other)"
+                 (describe-char-eldoc--format ?…)))
+  (should (equal "U+2026: Horizontal ellipsis (Punctuation, Other)"
+                 (describe-char-eldoc--format ?… 51)))
+  (should (equal "U+2026: Horizontal ellipsis (Po)"
+                 (describe-char-eldoc--format ?… 40)))
+  (should (equal "Horizontal ellipsis (Po)"
+                 (describe-char-eldoc--format ?… 30)))
+  (should (equal "Horizontal ellipsis"
+                 (describe-char-eldoc--format ?… 20)))
+  (should (equal "Horizontal..."
+                 (describe-char-eldoc--format ?… 10))))
+
+(ert-deftest descr-text-test-desc ()
+  "Tests describe-char-eldoc function."
+  (with-temp-buffer
+    (insert "a…")
+    (goto-char (point-min))
+    (should (eq ?a (following-char))) ; make sure we are where we think we are
+    ;; Function should return nil for an ASCII character.
+    (should (not (describe-char-eldoc)))
+
+    (goto-char (1+ (point)))
+    (should (eq ?… (following-char)))
+    (let ((eldoc-echo-area-use-multiline-p t))
+      ;; Function should return description of an Unicode character.
+      (should (equal "U+2026: Horizontal ellipsis (Po: Punctuation, Other)"
+                     (describe-char-eldoc))))
+
+    (goto-char (point-max))
+    ;; At the end of the buffer, function should return nil and not blow up.
+    (should (not (describe-char-eldoc)))))
+
+
+(provide 'descr-text-test)
+
+;;; descr-text-test.el ends here
diff --git a/test/automated/eieio-test-methodinvoke.el 
b/test/automated/eieio-test-methodinvoke.el
index 0b0dd5d..da5f59a 100644
--- a/test/automated/eieio-test-methodinvoke.el
+++ b/test/automated/eieio-test-methodinvoke.el
@@ -1,6 +1,7 @@
 ;;; eieio-testsinvoke.el -- eieio tests for method invocation
 
-;; Copyright (C) 2005, 2008, 2010, 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2008, 2010, 2013-2015 Free Software Foundation,
+;; Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -57,19 +58,16 @@
 (defvar eieio-test-method-order-list nil
   "List of symbols stored during method invocation.")
 
-(defun eieio-test-method-store ()
+(defun eieio-test-method-store (&rest args)
   "Store current invocation class symbol in the invocation order list."
-  (let* ((keysym (aref [ :STATIC :BEFORE :PRIMARY :AFTER ]
-                      (or eieio-generic-call-key 0)))
-        (c (list eieio-generic-call-methodname keysym (eieio--scoped-class))))
-    (setq eieio-test-method-order-list
-         (cons c eieio-test-method-order-list))))
+  (push args eieio-test-method-order-list))
 
 (defun eieio-test-match (rightanswer)
   "Do a test match."
   (if (equal rightanswer eieio-test-method-order-list)
       t
-    (error "eieio-test-methodinvoke.el: Test Failed!")))
+    (error "eieio-test-methodinvoke.el: Test Failed: %S != %S"
+           rightanswer eieio-test-method-order-list)))
 
 (defvar eieio-test-call-next-method-arguments nil
   "List of passed to methods during execution of `call-next-method'.")
@@ -86,51 +84,51 @@
 (defclass eitest-B (eitest-B-base1 eitest-B-base2) ())
 
 (defmethod eitest-F :BEFORE ((p eitest-B-base1))
-  (eieio-test-method-store))
+  (eieio-test-method-store :BEFORE 'eitest-B-base1))
 
 (defmethod eitest-F :BEFORE ((p eitest-B-base2))
-  (eieio-test-method-store))
+  (eieio-test-method-store :BEFORE 'eitest-B-base2))
 
 (defmethod eitest-F :BEFORE ((p eitest-B))
-  (eieio-test-method-store))
+  (eieio-test-method-store :BEFORE 'eitest-B))
 
 (defmethod eitest-F ((p eitest-B))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'eitest-B)
   (call-next-method))
 
 (defmethod eitest-F ((p eitest-B-base1))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'eitest-B-base1)
   (call-next-method))
 
 (defmethod eitest-F ((p eitest-B-base2))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'eitest-B-base2)
   (when (next-method-p)
     (call-next-method))
   )
 
 (defmethod eitest-F :AFTER ((p eitest-B-base1))
-  (eieio-test-method-store))
+  (eieio-test-method-store :AFTER 'eitest-B-base1))
 
 (defmethod eitest-F :AFTER ((p eitest-B-base2))
-  (eieio-test-method-store))
+  (eieio-test-method-store :AFTER 'eitest-B-base2))
 
 (defmethod eitest-F :AFTER ((p eitest-B))
-  (eieio-test-method-store))
+  (eieio-test-method-store :AFTER 'eitest-B))
 
 (ert-deftest eieio-test-method-order-list-3 ()
   (let ((eieio-test-method-order-list nil)
        (ans '(
-              (eitest-F :BEFORE eitest-B)
-              (eitest-F :BEFORE eitest-B-base1)
-              (eitest-F :BEFORE eitest-B-base2)
+              (:BEFORE eitest-B)
+              (:BEFORE eitest-B-base1)
+              (:BEFORE eitest-B-base2)
 
-              (eitest-F :PRIMARY eitest-B)
-              (eitest-F :PRIMARY eitest-B-base1)
-              (eitest-F :PRIMARY eitest-B-base2)
+              (:PRIMARY eitest-B)
+              (:PRIMARY eitest-B-base1)
+              (:PRIMARY eitest-B-base2)
 
-              (eitest-F :AFTER eitest-B-base2)
-              (eitest-F :AFTER eitest-B-base1)
-              (eitest-F :AFTER eitest-B)
+              (:AFTER eitest-B-base2)
+              (:AFTER eitest-B-base1)
+              (:AFTER eitest-B)
               )))
     (eitest-F (eitest-B nil))
     (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
@@ -144,21 +142,21 @@
 
 (ert-deftest eieio-test-method-order-list-4 ()
   ;; Both of these situations should succeed.
-  (should (eitest-H eitest-A))
+  (should (eitest-H 'eitest-A))
   (should (eitest-H (eitest-A nil))))
 
 ;;; Return value from :PRIMARY
 ;;
 (defmethod eitest-I :BEFORE ((a eitest-A))
-  (eieio-test-method-store)
+  (eieio-test-method-store :BEFORE 'eitest-A)
   ":before")
 
 (defmethod eitest-I :PRIMARY ((a eitest-A))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'eitest-A)
   ":primary")
 
 (defmethod eitest-I :AFTER ((a eitest-A))
-  (eieio-test-method-store)
+  (eieio-test-method-store :AFTER 'eitest-A)
   ":after")
 
 (ert-deftest eieio-test-method-order-list-5 ()
@@ -175,27 +173,28 @@
 (defclass C-base2 () ())
 (defclass C (C-base1 C-base2) ())
 
+;; Just use the obsolete name once, to make sure it also works.
 (defmethod constructor :STATIC ((p C-base1) &rest args)
-  (eieio-test-method-store)
+  (eieio-test-method-store :STATIC 'C-base1)
   (if (next-method-p) (call-next-method))
   )
 
-(defmethod constructor :STATIC ((p C-base2) &rest args)
-  (eieio-test-method-store)
+(defmethod eieio-constructor :STATIC ((p C-base2) &rest args)
+  (eieio-test-method-store :STATIC 'C-base2)
   (if (next-method-p) (call-next-method))
   )
 
-(defmethod constructor :STATIC ((p C) &rest args)
-  (eieio-test-method-store)
+(defmethod eieio-constructor :STATIC ((p C) &rest args)
+  (eieio-test-method-store :STATIC 'C)
   (call-next-method)
   )
 
 (ert-deftest eieio-test-method-order-list-6 ()
   (let ((eieio-test-method-order-list nil)
        (ans '(
-              (constructor :STATIC C)
-              (constructor :STATIC C-base1)
-              (constructor :STATIC C-base2)
+              (:STATIC C)
+              (:STATIC C-base1)
+              (:STATIC C-base2)
               )))
     (C nil)
     (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
@@ -213,24 +212,24 @@
 
 (defmethod eitest-F ((p D))
   "D"
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'D)
   (call-next-method))
 
 (defmethod eitest-F ((p D-base0))
   "D-base0"
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'D-base0)
   ;; This should have no next
   ;; (when (next-method-p) (call-next-method))
   )
 
 (defmethod eitest-F ((p D-base1))
   "D-base1"
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'D-base1)
   (call-next-method))
 
 (defmethod eitest-F ((p D-base2))
   "D-base2"
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'D-base2)
   (when (next-method-p)
     (call-next-method))
   )
@@ -238,10 +237,10 @@
 (ert-deftest eieio-test-method-order-list-7 ()
   (let ((eieio-test-method-order-list nil)
        (ans '(
-              (eitest-F :PRIMARY D)
-              (eitest-F :PRIMARY D-base1)
-              ;; (eitest-F :PRIMARY D-base2)
-              (eitest-F :PRIMARY D-base0)
+              (:PRIMARY D)
+              (:PRIMARY D-base1)
+              ;; (:PRIMARY D-base2)
+              (:PRIMARY D-base0)
               )))
     (eitest-F (D nil))
     (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
@@ -255,21 +254,21 @@
 (defclass E (E-base1 E-base2) () :method-invocation-order :breadth-first)
 
 (defmethod eitest-F ((p E))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'E)
   (call-next-method))
 
 (defmethod eitest-F ((p E-base0))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'E-base0)
   ;; This should have no next
   ;; (when (next-method-p) (call-next-method))
   )
 
 (defmethod eitest-F ((p E-base1))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'E-base1)
   (call-next-method))
 
 (defmethod eitest-F ((p E-base2))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY 'E-base2)
   (when (next-method-p)
     (call-next-method))
   )
@@ -277,10 +276,10 @@
 (ert-deftest eieio-test-method-order-list-8 ()
   (let ((eieio-test-method-order-list nil)
        (ans '(
-              (eitest-F :PRIMARY E)
-              (eitest-F :PRIMARY E-base1)
-              (eitest-F :PRIMARY E-base2)
-              (eitest-F :PRIMARY E-base0)
+              (:PRIMARY E)
+              (:PRIMARY E-base1)
+              (:PRIMARY E-base2)
+              (:PRIMARY E-base0)
               )))
     (eitest-F (E nil))
     (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
@@ -293,6 +292,7 @@
 
 (defmethod initialize-instance :after ((this eitest-Ja) &rest slots)
   ;(message "+Ja")
+  ;; FIXME: Using next-method-p in an after-method is invalid!
   (when (next-method-p)
     (call-next-method))
   ;(message "-Ja")
@@ -303,6 +303,7 @@
 
 (defmethod initialize-instance :after ((this eitest-Jb) &rest slots)
   ;(message "+Jb")
+  ;; FIXME: Using next-method-p in an after-method is invalid!
   (when (next-method-p)
     (call-next-method))
   ;(message "-Jb")
@@ -377,3 +378,25 @@
                   '(CNM-1-1 CNM-2 INIT)))
     (should (equal (eieio-test-arguments-for 'CNM-2)
                   '(INIT)))))
+
+;;; Check cl-generic integration.
+
+(cl-defgeneric eieio-test--1 (x y))
+
+(ert-deftest eieio-test-cl-generic-1 ()
+  (cl-defgeneric eieio-test--1 (x y))
+  (cl-defmethod eieio-test--1 (x y) (list x y))
+  (cl-defmethod eieio-test--1 ((_x CNM-0) y)
+    (cons "CNM-0" (cl-call-next-method 7 y)))
+  (cl-defmethod eieio-test--1 ((_x CNM-1-1) _y)
+    (cons "CNM-1-1" (cl-call-next-method)))
+  (cl-defmethod eieio-test--1 ((_x CNM-1-2) _y)
+    (cons "CNM-1-2" (cl-call-next-method)))
+  (cl-defmethod eieio-test--1 ((_x (subclass CNM-1-2)) _y)
+    (cons "subclass CNM-1-2" (cl-call-next-method)))
+  (should (equal (eieio-test--1 4 5) '(4 5)))
+  (should (equal (eieio-test--1 (make-instance 'CNM-0) 5)
+                 '("CNM-0" 7 5)))
+  (should (equal (eieio-test--1 (make-instance 'CNM-2) 5)
+                 '("CNM-1-1" "CNM-1-2" "CNM-0" 7 5)))
+  (should (equal (eieio-test--1 'CNM-2 6) '("subclass CNM-1-2" CNM-2 6))))
diff --git a/test/automated/eieio-test-persist.el 
b/test/automated/eieio-test-persist.el
index 6869c7e..7bb2f1c 100644
--- a/test/automated/eieio-test-persist.el
+++ b/test/automated/eieio-test-persist.el
@@ -1,6 +1,6 @@
 ;;; eieio-persist.el --- Tests for eieio-persistent class
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -32,6 +32,14 @@
 (require 'eieio-base)
 (require 'ert)
 
+(defun eieio--attribute-to-initarg (class attribute)
+  "In CLASS, convert the ATTRIBUTE into the corresponding init argument tag.
+This is usually a symbol that starts with `:'."
+  (let ((tuple (rassoc attribute (eieio--class-initarg-tuples class))))
+    (if tuple
+       (car tuple)
+      nil)))
+
 (defun persist-test-save-and-compare (original)
   "Compare the object ORIGINAL against the one read fromdisk."
 
@@ -40,7 +48,7 @@
   (let* ((file (oref original :file))
         (class (eieio-object-class original))
         (fromdisk (eieio-persistent-read file class))
-        (cv (class-v class))
+        (cv (eieio--class-v class))
         (slot-names  (eieio--class-public-a cv))
         (slot-deflt  (eieio--class-public-d cv))
         )
@@ -53,7 +61,8 @@
       (let* ((oneslot (car slot-names))
             (origvalue (eieio-oref original oneslot))
             (fromdiskvalue (eieio-oref fromdisk oneslot))
-            (initarg-p (eieio-attribute-to-initarg class oneslot))
+            (initarg-p (eieio--attribute-to-initarg
+                         (eieio--class-v class) oneslot))
             )
 
        (if initarg-p
@@ -175,7 +184,7 @@ persistent class.")
 
 (defclass persistent-with-objs-slot-subs (eieio-persistent)
   ((pnp :initarg :pnp
-       :type (or null persist-not-persistent-child)
+       :type (or null persist-not-persistent)
        :initform nil))
   "Class for testing the saving of slots with objects in them.")
 
@@ -194,7 +203,7 @@ persistent class.")
 ;; A slot that contains another object that isn't persistent
 (defclass persistent-with-objs-list-slot (eieio-persistent)
   ((pnp :initarg :pnp
-       :type persist-not-persistent-list
+       :type (list-of persist-not-persistent)
        :initform nil))
   "Class for testing the saving of slots with objects in them.")
 
diff --git a/test/automated/eieio-tests.el b/test/automated/eieio-tests.el
index 9a88862..7532609 100644
--- a/test/automated/eieio-tests.el
+++ b/test/automated/eieio-tests.el
@@ -1,6 +1,7 @@
 ;;; eieio-tests.el -- eieio tests routines
 
-;; Copyright (C) 1999-2003, 2005-2010, 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2003, 2005-2010, 2012-2015 Free Software
+;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
@@ -28,7 +29,7 @@
 (require 'eieio-base)
 (require 'eieio-opt)
 
-(eval-when-compile (require 'cl))
+(eval-when-compile (require 'cl-lib))
 
 ;;; Code:
 ;; Set up some test classes
@@ -157,7 +158,7 @@
 (ert-deftest eieio-test-02-abstract-class ()
   ;; Abstract classes cannot be instantiated, so this should throw an
   ;; error
-  (should-error (abstract-class "Test")))
+  (should-error (abstract-class)))
 
 (defgeneric generic1 () "First generic function")
 
@@ -179,7 +180,7 @@
     "Method generic1 that can take a non-object."
     not-an-object)
 
-  (let ((ans-obj (generic1 (class-a "test")))
+  (let ((ans-obj (generic1 (class-a)))
        (ans-num (generic1 666)))
     (should (eq ans-obj 'monkey))
     (should (eq ans-num 666))))
@@ -198,10 +199,10 @@ Argument C is the class bound to this static method."
 
 (ert-deftest eieio-test-04-static-method ()
   ;; Call static method on a class and see if it worked
-  (static-method-class-method static-method-class 'class)
-  (should (eq (oref static-method-class some-slot) 'class))
-  (static-method-class-method (static-method-class "test") 'object)
-  (should (eq (oref static-method-class some-slot) 'object)))
+  (static-method-class-method 'static-method-class 'class)
+  (should (eq (oref-default 'static-method-class some-slot) 'class))
+  (static-method-class-method (static-method-class) 'object)
+  (should (eq (oref-default 'static-method-class some-slot) 'object)))
 
 (ert-deftest eieio-test-05-static-method-2 ()
   (defclass static-method-class-2 (static-method-class)
@@ -214,10 +215,10 @@ Argument C is the class bound to this static method."
     (if (eieio-object-p c) (setq c (eieio-object-class c)))
     (oset-default c some-slot (intern (concat "moose-" (symbol-name value)))))
 
-  (static-method-class-method static-method-class-2 'class)
-  (should (eq (oref static-method-class-2 some-slot) 'moose-class))
-  (static-method-class-method (static-method-class-2 "test") 'object)
-  (should (eq (oref static-method-class-2 some-slot) 'moose-object)))
+  (static-method-class-method 'static-method-class-2 'class)
+  (should (eq (oref-default 'static-method-class-2 some-slot) 'moose-class))
+  (static-method-class-method (static-method-class-2) 'object)
+  (should (eq (oref-default 'static-method-class-2 some-slot) 'moose-object)))
 
 
 ;;; Perform method testing
@@ -230,14 +231,14 @@ Argument C is the class bound to this static method."
 (defvar eitest-b nil)
 (ert-deftest eieio-test-06-allocate-objects ()
    ;; allocate an object to use
-   (should (setq eitest-ab (class-ab "abby")))
-   (should (setq eitest-a (class-a "aye")))
-   (should (setq eitest-b (class-b "fooby"))))
+   (should (setq eitest-ab (class-ab)))
+   (should (setq eitest-a (class-a)))
+   (should (setq eitest-b (class-b))))
 
 (ert-deftest eieio-test-07-make-instance ()
   (should (make-instance 'class-ab))
   (should (make-instance 'class-a :water 'cho))
-  (should (make-instance 'class-b "a name")))
+  (should (make-instance 'class-b)))
 
 (defmethod class-cn ((a class-a))
   "Try calling `call-next-method' when there isn't one.
@@ -354,7 +355,7 @@ METHOD is the method that was attempting to be called."
     (call-next-method)
     (oset a test-tag 1))
 
-  (let ((ca (class-a "class act")))
+  (let ((ca (class-a)))
     (should-not (/=  (oref ca test-tag) 2))))
 
 
@@ -403,7 +404,7 @@ METHOD is the method that was attempting to be called."
    (t (call-next-method))))
 
 (ert-deftest eieio-test-17-virtual-slot ()
-  (setq eitest-vsca (virtual-slot-class "eitest-vsca" :base-value 1))
+  (setq eitest-vsca (virtual-slot-class :base-value 1))
   ;; Check slot values
   (should (= (oref eitest-vsca :base-value) 1))
   (should (= (oref eitest-vsca :derived-value) 2))
@@ -418,7 +419,7 @@ METHOD is the method that was attempting to be called."
 
   ;; should also be possible to initialize instance using virtual slot
 
-  (setq eitest-vscb (virtual-slot-class "eitest-vscb" :derived-value 5))
+  (setq eitest-vscb (virtual-slot-class :derived-value 5))
   (should (= (oref eitest-vscb :base-value) 4))
   (should (= (oref eitest-vscb :derived-value) 5)))
 
@@ -444,7 +445,7 @@ METHOD is the method that was attempting to be called."
   ;; After setting 'water to 'moose, make sure a new object has
   ;; the right stuff.
   (oset-default (eieio-object-class eitest-a) water 'penguin)
-  (should (eq (oref (class-a "foo") water) 'penguin))
+  (should (eq (oref (class-a) water) 'penguin))
 
   ;; Revert the above
   (defmethod slot-unbound ((a class-a) &rest foo)
@@ -458,12 +459,12 @@ METHOD is the method that was attempting to be called."
   ;; We should not be able to set a string here
   (should-error (oset eitest-ab water "a string, not a symbol") :type 
'invalid-slot-type)
   (should-error (oset eitest-ab classslot "a string, not a symbol") :type 
'invalid-slot-type)
-  (should-error (class-a "broken-type-a" :water "a string not a symbol") :type 
'invalid-slot-type))
+  (should-error (class-a :water "a string not a symbol") :type 
'invalid-slot-type))
 
 (ert-deftest eieio-test-20-class-allocated-slots ()
   ;; Test out class allocated slots
   (defvar eitest-aa nil)
-  (setq eitest-aa (class-a "another"))
+  (setq eitest-aa (class-a))
 
   ;; Make sure class slots do not track between objects
   (let ((newval 'moose))
@@ -473,12 +474,12 @@ METHOD is the method that was attempting to be called."
 
   ;; Slot should be bound
   (should (slot-boundp eitest-a 'classslot))
-  (should (slot-boundp class-a 'classslot))
+  (should (slot-boundp 'class-a 'classslot))
 
   (slot-makeunbound eitest-a 'classslot)
 
   (should-not (slot-boundp eitest-a 'classslot))
-  (should-not (slot-boundp class-a 'classslot)))
+  (should-not (slot-boundp 'class-a 'classslot)))
 
 
 (defvar eieio-test-permuting-value nil)
@@ -498,7 +499,7 @@ METHOD is the method that was attempting to be called."
 (ert-deftest eieio-test-21-eval-at-construction-time ()
   ;; initforms that need to be evalled at construction time.
   (setq eieio-test-permuting-value 2)
-  (setq eitest-pvinit (inittest "permuteme"))
+  (setq eitest-pvinit (inittest))
 
   (should (eq (oref eitest-pvinit staticval) 1))
   (should (eq (oref eitest-pvinit symval) 'eieio-test-permuting-value))
@@ -514,11 +515,11 @@ METHOD is the method that was attempting to be called."
     "Test class that will be a calculated value.")
 
   (defclass eitest-superior nil
-    ((sub :initform (eitest-subordinate "test")
+    ((sub :initform (eitest-subordinate)
          :type eitest-subordinate))
     "A class with an initform that creates a class.")
 
-  (should (setq eitest-tests (eitest-superior "test")))
+  (should (setq eitest-tests (eitest-superior)))
 
   (should-error
    (eval
@@ -529,44 +530,45 @@ METHOD is the method that was attempting to be called."
    :type 'invalid-slot-type))
 
 (ert-deftest eieio-test-23-inheritance-check ()
-  (should (child-of-class-p class-ab class-a))
-  (should (child-of-class-p class-ab class-b))
-  (should (object-of-class-p eitest-a class-a))
-  (should (object-of-class-p eitest-ab class-a))
-  (should (object-of-class-p eitest-ab class-b))
-  (should (object-of-class-p eitest-ab class-ab))
-  (should (eq (eieio-class-parents class-a) nil))
-  (should (equal (eieio-class-parents class-ab) '(class-a class-b)))
-  (should (same-class-p eitest-a class-a))
+  (should (child-of-class-p 'class-ab 'class-a))
+  (should (child-of-class-p 'class-ab 'class-b))
+  (should (object-of-class-p eitest-a 'class-a))
+  (should (object-of-class-p eitest-ab 'class-a))
+  (should (object-of-class-p eitest-ab 'class-b))
+  (should (object-of-class-p eitest-ab 'class-ab))
+  (should (eq (eieio-class-parents 'class-a) nil))
+  (should (equal (eieio-class-parents 'class-ab)
+                 (mapcar #'find-class '(class-a class-b))))
+  (should (same-class-p eitest-a 'class-a))
   (should (class-a-p eitest-a))
   (should (not (class-a-p eitest-ab)))
-  (should (class-a-child-p eitest-a))
-  (should (class-a-child-p eitest-ab))
+  (should (cl-typep eitest-a 'class-a))
+  (should (cl-typep eitest-ab 'class-a))
   (should (not (class-a-p "foo")))
-  (should (not (class-a-child-p "foo"))))
+  (should (not (cl-typep "foo" 'class-a))))
 
 (ert-deftest eieio-test-24-object-predicates ()
-  (let ((listooa (list (class-ab "ab") (class-a "a")))
-       (listoob (list (class-ab "ab") (class-b "b"))))
-    (should (class-a-list-p listooa))
-    (should (class-b-list-p listoob))
-    (should-not (class-b-list-p listooa))
-    (should-not (class-a-list-p listoob))))
+  (let ((listooa (list (class-ab) (class-a)))
+       (listoob (list (class-ab) (class-b))))
+    (should (cl-typep listooa '(list-of class-a)))
+    (should (cl-typep listoob '(list-of class-b)))
+    (should-not (cl-typep listooa '(list-of class-b)))
+    (should-not (cl-typep listoob '(list-of class-a)))))
 
 (defvar eitest-t1 nil)
 (ert-deftest eieio-test-25-slot-tests ()
-  (setq eitest-t1 (class-c "C1"))
+  (setq eitest-t1 (class-c))
   ;; Slot initialization
   (should (eq (oref eitest-t1 slot-1) 'moose))
   (should (eq (oref eitest-t1 :moose) 'moose))
   ;; Don't pass reference of private slot
-  (should-error (oref eitest-t1 slot-2) :type 'invalid-slot-name)
+  ;;PRIVATE (should-error (oref eitest-t1 slot-2) :type 'invalid-slot-name)
   ;; Check private slot accessor
   (should (string= (get-slot-2 eitest-t1) "penguin"))
   ;; Pass string instead of symbol
-  (should-error (class-c "C2" :moose "not a symbol") :type 'invalid-slot-type)
+  (should-error (class-c :moose "not a symbol") :type 'invalid-slot-type)
   (should (eq (get-slot-3 eitest-t1) 'emu))
-  (should (eq (get-slot-3 class-c) 'emu))
+  (should (eq (get-slot-3 'class-c) 'emu))
   ;; Check setf
   (setf (get-slot-3 eitest-t1) 'setf-emu)
   (should (eq (get-slot-3 eitest-t1) 'setf-emu))
@@ -576,13 +578,13 @@ METHOD is the method that was attempting to be called."
 (defvar eitest-t2 nil)
 (ert-deftest eieio-test-26-default-inheritance ()
   ;; See previous test, nor for subclass
-  (setq eitest-t2 (class-subc "subc"))
+  (setq eitest-t2 (class-subc))
   (should (eq (oref eitest-t2 slot-1) 'moose))
   (should (eq (oref eitest-t2 :moose) 'moose))
   (should (string= (get-slot-2 eitest-t2) "linux"))
-  (should-error (oref eitest-t2 slot-2) :type 'invalid-slot-name)
+  ;;PRIVATE (should-error (oref eitest-t2 slot-2) :type 'invalid-slot-name)
   (should (string= (get-slot-2 eitest-t2) "linux"))
-  (should-error (class-subc "C2" :moose "not a symbol") :type 
'invalid-slot-type))
+  (should-error (class-subc :moose "not a symbol") :type 'invalid-slot-type))
 
 ;;(ert-deftest eieio-test-27-inherited-new-value ()
   ;;; HACK ALERT: The new value of a class slot is inherited by the
@@ -646,25 +648,28 @@ Do not override for `prot-2'."
 (defvar eitest-p1 nil)
 (defvar eitest-p2 nil)
 (ert-deftest eieio-test-28-slot-protection ()
-  (setq eitest-p1 (prot-1 ""))
-  (setq eitest-p2 (prot-2 ""))
+  (setq eitest-p1 (prot-1))
+  (setq eitest-p2 (prot-2))
   ;; Access public slots
   (oref eitest-p1 slot-1)
   (oref eitest-p2 slot-1)
-  ;; Accessing protected slot out of context must fail
-  (should-error (oref eitest-p1 slot-2) :type 'invalid-slot-name)
+  ;; Accessing protected slot out of context used to fail, but we dropped this
+  ;; feature, since it was underused and no one noticed that the check was
+  ;; incorrect (much too loose).
+  ;;PROTECTED (should-error (oref eitest-p1 slot-2) :type 'invalid-slot-name)
   ;; Access protected slot in method
   (prot1-slot-2 eitest-p1)
   ;; Protected slot in subclass method
   (prot1-slot-2 eitest-p2)
   ;; Protected slot from parent class method
   (prot0-slot-2 eitest-p1)
-  ;; Accessing private slot out of context must fail
-  (should-error (oref eitest-p1 slot-3) :type 'invalid-slot-name)
+  ;; Accessing private slot out of context used to fail, but we dropped this
+  ;; feature, since it was not used.
+  ;;PRIVATE (should-error (oref eitest-p1 slot-3) :type 'invalid-slot-name)
   ;; Access private slot in method
   (prot1-slot-3 eitest-p1)
   ;; Access private slot in subclass method must fail
-  (should-error (prot1-slot-3 eitest-p2) :type 'invalid-slot-name)
+  ;;PRIVATE (should-error (prot1-slot-3 eitest-p2) :type 'invalid-slot-name)
   ;; Access private slot by same class
   (prot1-slot-3-only eitest-p1)
   ;; Access private slot by subclass in sameclass method
@@ -726,12 +731,13 @@ Subclasses to override slot attributes.")
 
 (ert-deftest eieio-test-30-slot-attribute-override ()
   ;; Subclass should not override :protection slot attribute
-  (should-error
-       (eval
-        '(defclass slotattr-fail (slotattr-base)
-           ((protection :protection :public)
-            )
-           "This class should throw an error.")))
+  ;;PROTECTION is gone.
+  ;;(should-error
+  ;;       (eval
+  ;;        '(defclass slotattr-fail (slotattr-base)
+  ;;           ((protection :protection :public)
+  ;;            )
+  ;;           "This class should throw an error.")))
 
   ;; Subclass should not override :type slot attribute
   (should-error
@@ -742,7 +748,7 @@ Subclasses to override slot attributes.")
          "This class should throw an error.")))
 
   ;; Initform should override instance allocation
-  (let ((obj (slotattr-ok "moose")))
+  (let ((obj (slotattr-ok)))
     (should (eq (oref obj initform) 'no-init))))
 
 (defclass slotattr-class-base ()
@@ -779,22 +785,23 @@ Subclasses to override slot attributes.")
 
 (ert-deftest eieio-test-31-slot-attribute-override-class-allocation ()
   ;; Same as test-30, but with class allocation
-  (should-error
-      (eval
-       '(defclass slotattr-fail (slotattr-class-base)
-         ((protection :protection :public)
-          )
-         "This class should throw an error.")))
+  ;;PROTECTION is gone.
+  ;;(should-error
+  ;;     (eval
+  ;;      '(defclass slotattr-fail (slotattr-class-base)
+  ;;         ((protection :protection :public)
+  ;;          )
+  ;;         "This class should throw an error.")))
   (should-error
       (eval
        '(defclass slotattr-fail (slotattr-class-base)
          ((type :type string)
           )
          "This class should throw an error.")))
-  (should (eq (oref-default slotattr-class-ok initform) 'no-init)))
+  (should (eq (oref-default 'slotattr-class-ok initform) 'no-init)))
 
 (ert-deftest eieio-test-32-slot-attribute-override-2 ()
-  (let* ((cv (class-v 'slotattr-ok))
+  (let* ((cv (eieio--class-v 'slotattr-ok))
         (docs   (eieio--class-public-doc cv))
         (names  (eieio--class-public-a cv))
         (cust   (eieio--class-public-custom cv))
@@ -825,7 +832,7 @@ Subclasses to override slot attributes.")
 
 (ert-deftest eieio-test-32-test-clone-boring-objects ()
   ;; A simple make instance with EIEIO extension
-  (should (setq eitest-CLONETEST1 (make-instance 'class-a "a")))
+  (should (setq eitest-CLONETEST1 (make-instance 'class-a)))
   (should (setq eitest-CLONETEST2 (clone eitest-CLONETEST1)))
 
   ;; CLOS form of make-instance
@@ -839,7 +846,7 @@ Subclasses to override slot attributes.")
 
 (ert-deftest eieio-test-33-instance-tracker ()
   (let (IT-list IT1)
-    (should (setq IT1 (IT "trackme")))
+    (should (setq IT1 (IT)))
     ;; The instance tracker must find this
     (should (eieio-instance-tracker-find 'die 'slot1 'IT-list))
     ;; Test deletion
@@ -851,8 +858,8 @@ Subclasses to override slot attributes.")
   "A Singleton test object.")
 
 (ert-deftest eieio-test-34-singletons ()
-  (let ((obj1 (SINGLE "Moose"))
-       (obj2 (SINGLE "Cow")))
+  (let ((obj1 (SINGLE))
+       (obj2 (SINGLE)))
     (should (eieio-object-p obj1))
     (should (eieio-object-p obj2))
     (should (eq obj1 obj2))
@@ -865,7 +872,7 @@ Subclasses to override slot attributes.")
 
 (ert-deftest eieio-test-35-named-object ()
   (let (N)
-    (should (setq N (NAMED "Foo")))
+    (should (setq N (NAMED :object-name "Foo")))
     (should (string= "Foo" (oref N object-name)))
     (should-error (oref N missing-slot) :type 'invalid-slot-name)
     (oset N object-name "NewName")
@@ -881,8 +888,17 @@ Subclasses to override slot attributes.")
   "Instantiable child")
 
 (ert-deftest eieio-test-36-build-class-alist ()
-  (should (= (length (eieio-build-class-alist opt-test1 nil)) 2))
-  (should (= (length (eieio-build-class-alist opt-test1 t)) 1)))
+  (should (= (length (eieio-build-class-alist 'opt-test1 nil)) 2))
+  (should (= (length (eieio-build-class-alist 'opt-test1 t)) 1)))
+
+(defclass eieio--testing ()
+  ())
+
+(defmethod constructor :static ((_x eieio--testing) newname &rest _args)
+  (list newname 2))
+
+(ert-deftest eieio-test-37-obsolete-name-in-constructor ()
+  (should (equal (eieio--testing "toto") '("toto" 2))))
 
 (provide 'eieio-tests)
 
diff --git a/test/automated/electric-tests.el b/test/automated/electric-tests.el
index b1908e6..b675989 100644
--- a/test/automated/electric-tests.el
+++ b/test/automated/electric-tests.el
@@ -1,6 +1,6 @@
 ;;; electric-tests.el --- tests for electric.el
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: João Távora <address@hidden>
 ;; Keywords:
@@ -60,7 +60,7 @@
         (cl-progv
             (mapcar #'car bindings)
             (mapcar #'cdr bindings)
-          (self-insert-command 1))))
+          (call-interactively (key-binding `[,last-command-event])))))
     (should (equal (buffer-substring-no-properties (point-min) (point-max))
                    expected-string))
     (should (equal (point)
@@ -575,5 +575,14 @@ baz\"\""
                   (skip-chars-backward "\"")
                   (mark-sexp -1)))
 
+(define-electric-pair-test autowrapping-7
+  "foo" "\"" :expected-string "``foo''" :expected-point 8
+  :modes '(tex-mode)
+  :fixture-fn #'(lambda ()
+                  (electric-pair-mode 1)
+                  (goto-char (point-max))
+                  (skip-chars-backward "\"")
+                  (mark-sexp -1)))
+
 (provide 'electric-tests)
 ;;; electric-tests.el ends here
diff --git a/test/automated/ert-tests.el b/test/automated/ert-tests.el
index 45440e0..181df89 100644
--- a/test/automated/ert-tests.el
+++ b/test/automated/ert-tests.el
@@ -1,6 +1,6 @@
 ;;; ert-tests.el --- ERT's self-tests  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2008, 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2008, 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Christian Ohler <address@hidden>
 
diff --git a/test/automated/ert-x-tests.el b/test/automated/ert-x-tests.el
index 3402374..81d0f7c 100644
--- a/test/automated/ert-x-tests.el
+++ b/test/automated/ert-x-tests.el
@@ -1,6 +1,6 @@
 ;;; ert-x-tests.el --- Tests for ert-x.el
 
-;; Copyright (C) 2008, 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008, 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Phil Hagelberg
 ;;        Christian Ohler <address@hidden>
diff --git a/test/automated/eshell.el b/test/automated/eshell.el
index 82566a1..d51355f 100644
--- a/test/automated/eshell.el
+++ b/test/automated/eshell.el
@@ -1,6 +1,6 @@
 ;;; tests/eshell.el --- Eshell test suite
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <address@hidden>
 
diff --git a/test/automated/f90.el b/test/automated/f90.el
index e009f84..c6bc41f 100644
--- a/test/automated/f90.el
+++ b/test/automated/f90.el
@@ -1,6 +1,6 @@
 ;;; f90.el --- tests for progmodes/f90.el
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Glenn Morris <address@hidden>
 
diff --git a/test/automated/file-notify-tests.el 
b/test/automated/file-notify-tests.el
index d9a5b03..8e3a791 100644
--- a/test/automated/file-notify-tests.el
+++ b/test/automated/file-notify-tests.el
@@ -1,6 +1,6 @@
 ;;; file-notify-tests.el --- Tests of file notifications
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 
diff --git a/test/automated/files.el b/test/automated/files.el
index 8db06f7..0522e0c 100644
--- a/test/automated/files.el
+++ b/test/automated/files.el
@@ -1,6 +1,6 @@
 ;;; files.el --- tests for file handling.
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/flymake-tests.el b/test/automated/flymake-tests.el
index e5f444e..23dbb3d 100644
--- a/test/automated/flymake-tests.el
+++ b/test/automated/flymake-tests.el
@@ -1,6 +1,6 @@
 ;;; flymake-tests.el --- Test suite for flymake
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Eduard Wiebe <address@hidden>
 
@@ -26,7 +26,7 @@
 (require 'flymake)
 
 (defvar flymake-tests-data-directory
-  (expand-file-name "flymake/warnpred" (getenv "EMACS_TEST_DIRECTORY"))
+  (expand-file-name "data/flymake" (getenv "EMACS_TEST_DIRECTORY"))
   "Directory containing flymake test data.")
 
 
diff --git a/test/automated/flymake/warnpred/Makefile 
b/test/automated/flymake/warnpred/Makefile
deleted file mode 100644
index 33af51c..0000000
--- a/test/automated/flymake/warnpred/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# Makefile for flymake tests
-
-CC_OPTS = -Wall
-
-check-syntax:
-       $(CC) $(CC_OPTS) ${CHK_SOURCES}
-
-# eof
diff --git a/test/automated/fns-tests.el b/test/automated/fns-tests.el
index 56d7ece..7e9c1f1 100644
--- a/test/automated/fns-tests.el
+++ b/test/automated/fns-tests.el
@@ -1,6 +1,6 @@
 ;;; fns-tests.el --- tests for src/fns.c
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/font-parse-tests.el 
b/test/automated/font-parse-tests.el
index 16f98e2..e2c51e6 100644
--- a/test/automated/font-parse-tests.el
+++ b/test/automated/font-parse-tests.el
@@ -1,6 +1,6 @@
 ;;; font-parse-tests.el --- Test suite for font parsing.
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <address@hidden>
 ;; Keywords:       internal
diff --git a/test/automated/gnus-tests.el b/test/automated/gnus-tests.el
index a926e0d..ef785ec 100644
--- a/test/automated/gnus-tests.el
+++ b/test/automated/gnus-tests.el
@@ -1,6 +1,6 @@
 ;;; gnus-tests.el --- Wrapper for the Gnus tests
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <address@hidden>
 
diff --git a/test/automated/help-fns.el b/test/automated/help-fns.el
index 153de7f..ba87593 100644
--- a/test/automated/help-fns.el
+++ b/test/automated/help-fns.el
@@ -1,6 +1,6 @@
 ;;; help-fns.el --- tests for help-fns.el
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 
diff --git a/test/automated/icalendar-tests.el 
b/test/automated/icalendar-tests.el
index 5454672..68d0a40 100644
--- a/test/automated/icalendar-tests.el
+++ b/test/automated/icalendar-tests.el
@@ -1,6 +1,6 @@
 ;; icalendar-tests.el --- Test suite for icalendar.el
 
-;; Copyright (C) 2005, 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2008-2015 Free Software Foundation, Inc.
 
 ;; Author:         Ulf Jasper <address@hidden>
 ;; Created:        March 2005
diff --git a/test/automated/imenu-test.el b/test/automated/imenu-test.el
index 65c12fd..984e620 100644
--- a/test/automated/imenu-test.el
+++ b/test/automated/imenu-test.el
@@ -1,6 +1,6 @@
 ;;; imenu-tests.el --- Test suite for imenu.
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Masatake YAMATO <address@hidden>
 ;; Keywords: tools convenience
diff --git a/test/automated/info-xref.el b/test/automated/info-xref.el
index 2d81c22..98d24e1 100644
--- a/test/automated/info-xref.el
+++ b/test/automated/info-xref.el
@@ -1,6 +1,6 @@
 ;;; info-xref.el --- tests for info-xref.el
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/inotify-test.el b/test/automated/inotify-test.el
index cb2a044..187b590 100644
--- a/test/automated/inotify-test.el
+++ b/test/automated/inotify-test.el
@@ -1,6 +1,6 @@
 ;;; inotify-tests.el --- Test suite for inotify. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Rüdiger Sonderfeld <address@hidden>
 ;; Keywords:       internal
diff --git a/test/automated/let-alist.el b/test/automated/let-alist.el
new file mode 100644
index 0000000..c436d89
--- /dev/null
+++ b/test/automated/let-alist.el
@@ -0,0 +1,78 @@
+;;; let-alist.el --- tests for file handling. -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'cl-lib)
+(require 'let-alist)
+
+(ert-deftest let-alist-surface-test ()
+  "Tests basic macro expansion for `let-alist'."
+  (should
+   (equal '(let ((symbol data))
+             (let ((.test-one (cdr (assq 'test-one symbol)))
+                   (.test-two (cdr (assq 'test-two symbol))))
+               (list .test-one .test-two
+                     .test-two .test-two)))
+          (cl-letf (((symbol-function #'make-symbol) (lambda (x) 'symbol)))
+            (macroexpand
+             '(let-alist data (list .test-one .test-two
+                                    .test-two .test-two))))))
+  (should
+   (equal
+    (let ((.external "ext")
+          (.external.too "et"))
+      (let-alist '((test-two . 0)
+                   (test-three . 1)
+                   (sublist . ((foo . 2)
+                               (bar . 3))))
+        (list .test-one .test-two .test-three
+              .sublist.foo .sublist.bar
+              ..external ..external.too)))
+    (list nil 0 1 2 3 "ext" "et"))))
+
+(defvar let-alist--test-counter 0
+  "Used to count number of times a function is called.")
+
+(ert-deftest let-alist-evaluate-once ()
+  "Check that the alist argument is only evaluated once."
+  (let ((let-alist--test-counter 0))
+    (should
+     (equal
+      (let-alist (list
+                  (cons 'test-two (cl-incf let-alist--test-counter))
+                  (cons 'test-three (cl-incf let-alist--test-counter)))
+        (list .test-one .test-two .test-two .test-three .cl-incf))
+      '(nil 1 1 2 nil)))))
+
+(ert-deftest let-alist-remove-dot ()
+  "Remove first dot from symbol."
+  (should (equal (let-alist--remove-dot 'hi) 'hi))
+  (should (equal (let-alist--remove-dot '.hi) 'hi))
+  (should (equal (let-alist--remove-dot '..hi) '.hi)))
+
+(ert-deftest let-alist-list-to-sexp ()
+  "Check that multiple dots are handled correctly."
+  (should (= 1 (eval (let-alist--list-to-sexp '(a b c d) ''((d (c (b (a . 
1)))))))))
+  (should (equal (let-alist--access-sexp '.foo.bar.baz 'var)
+                 '(cdr (assq 'baz (cdr (assq 'bar (cdr (assq 'foo var))))))))
+  (should (equal (let-alist--access-sexp '..foo.bar.baz 'var) '.foo.bar.baz)))
+
+;;; let-alist.el ends here
diff --git a/test/automated/lexbind-tests.el b/test/automated/lexbind-tests.el
index 9f6d8c4..dd60cd6 100644
--- a/test/automated/lexbind-tests.el
+++ b/test/automated/lexbind-tests.el
@@ -1,6 +1,6 @@
 ;;; lexbind-tests.el --- Testing the lexbind byte-compiler
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords:
diff --git a/test/automated/libxml-tests.el b/test/automated/libxml-tests.el
index ced0df7..aa97b30 100644
--- a/test/automated/libxml-tests.el
+++ b/test/automated/libxml-tests.el
@@ -1,6 +1,6 @@
 ;;; libxml-parse-tests.el --- Test suite for libxml parsing.
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: Ulf Jasper <address@hidden>
 ;; Keywords:       internal
@@ -27,7 +27,7 @@
 
 (require 'ert)
 
-(defvar libxml-tests--data
+(defvar libxml-tests--data-comments-preserved
   `(;; simple case
     ("<?xml version=\"1.0\"?><foo baz=\"true\">bar</foo>"
      . (foo ((baz . "true")) "bar"))
@@ -40,17 +40,35 @@
              "<bar>blub</bar></foo><!--comment-b--><!--comment-c-->")
      . (top nil (comment nil "comment-a") (foo ((a . "b")) (bar nil "blub"))
             (comment nil "comment-b") (comment nil "comment-c"))))
-  "Alist of XML strings and their expected parse trees.")
+  "Alist of XML strings and their expected parse trees for preserved 
comments.")
+
+(defvar libxml-tests--data-comments-discarded
+  `(;; simple case
+    ("<?xml version=\"1.0\"?><foo baz=\"true\">bar</foo>"
+     . (foo ((baz . "true")) "bar"))
+    ;; toplevel comments -- first document child must not get lost
+    (,(concat "<?xml version=\"1.0\"?><foo>bar</foo><!--comment-1-->"
+             "<!--comment-2-->")
+     . (foo nil "bar"))
+    (,(concat "<?xml version=\"1.0\"?><!--comment-a--><foo a=\"b\">"
+             "<bar>blub</bar></foo><!--comment-b--><!--comment-c-->")
+     . (foo ((a . "b")) (bar nil "blub"))))
+  "Alist of XML strings and their expected parse trees for discarded 
comments.")
 
 
 (ert-deftest libxml-tests ()
   "Test libxml."
   (when (fboundp 'libxml-parse-xml-region)
     (with-temp-buffer
-      (dolist (test libxml-tests--data)
+      (dolist (test libxml-tests--data-comments-preserved)
+        (erase-buffer)
+        (insert (car test))
+        (should (equal (cdr test)
+                       (libxml-parse-xml-region (point-min) (point-max)))))
+      (dolist (test libxml-tests--data-comments-discarded)
         (erase-buffer)
         (insert (car test))
         (should (equal (cdr test)
-                       (libxml-parse-xml-region (point-min) (point-max))))))))
+                       (libxml-parse-xml-region (point-min) (point-max) nil 
t)))))))
 
 ;;; libxml-tests.el ends here
diff --git a/test/automated/man-tests.el b/test/automated/man-tests.el
index 63a0d52..adfeff8 100644
--- a/test/automated/man-tests.el
+++ b/test/automated/man-tests.el
@@ -1,6 +1,6 @@
 ;;; man-tests.el --- Test suite for man.
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Wolfgang Jenkner <address@hidden>
 ;; Keywords: help, internal, unix
diff --git a/test/automated/mule-util.el b/test/automated/mule-util.el
index b0037c0..038881a 100644
--- a/test/automated/mule-util.el
+++ b/test/automated/mule-util.el
@@ -1,6 +1,6 @@
 ;;; mule-util --- tests for international/mule-util.el -*- coding: utf-8; -*-
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/newsticker-tests.el 
b/test/automated/newsticker-tests.el
index 5f9ec04..1e51b9e 100644
--- a/test/automated/newsticker-tests.el
+++ b/test/automated/newsticker-tests.el
@@ -1,6 +1,6 @@
 ;;; newsticker-testsuite.el --- Test suite for newsticker.
 
-;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <address@hidden>
 ;; Keywords:    News, RSS, Atom
diff --git a/test/automated/occur-tests.el b/test/automated/occur-tests.el
index 5b90dab..1699cd0 100644
--- a/test/automated/occur-tests.el
+++ b/test/automated/occur-tests.el
@@ -1,6 +1,6 @@
 ;;; occur-tests.el --- Test suite for occur.
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <address@hidden>
 ;; Keywords: matching, internal
diff --git a/test/automated/package-test.el b/test/automated/package-test.el
index 6e7994a..a848865 100644
--- a/test/automated/package-test.el
+++ b/test/automated/package-test.el
@@ -1,6 +1,6 @@
 ;;; package-test.el --- Tests for the Emacs package system
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel Hackney <address@hidden>
 ;; Version: 1.0
@@ -95,6 +95,7 @@
           (package-archives `(("gnu" . ,package-test-data-dir)))
           (old-yes-no-defn (symbol-function 'yes-or-no-p))
           (default-directory package-test-file-dir)
+          abbreviated-home-dir
           package--initialized
           package-alist
           ,@(if update-news
@@ -230,6 +231,23 @@ Must called from within a `tar-mode' buffer."
     (package-refresh-contents)
     (package-install 'simple-single)))
 
+(ert-deftest package-test-install-prioritized ()
+  "Install a lower version from a higher-prioritized archive."
+  (with-package-test ()
+    (let* ((newer-version (expand-file-name "data/package/newer-versions"
+                                            package-test-file-dir))
+           (package-archives `(("older" . ,package-test-data-dir)
+                               ("newer" . ,newer-version)))
+           (package-archive-priorities '(("older" . 100))))
+
+      (package-initialize)
+      (package-refresh-contents)
+      (package-install 'simple-single)
+
+      (let ((installed (cadr (assq 'simple-single package-alist))))
+        (should (version-list-= '(1 3)
+                                (package-desc-version installed)))))))
+
 (ert-deftest package-test-install-multifile ()
   "Check properties of the installed multi-file package."
   (with-package-test (:basedir "data/package" :install '(multi-file))
@@ -322,8 +340,7 @@ Must called from within a `tar-mode' buffer."
      (goto-char (point-min))
      (should (search-forward "simple-single is an installed package." nil t))
      (should (search-forward
-              (format "Status: Installed in `%s/' (unsigned)."
-                      (expand-file-name "simple-single-1.3" package-user-dir))
+              "Status: Installed in `~/simple-single-1.3/' (unsigned)."
               nil t))
      (should (search-forward "Version: 1.3" nil t))
      (should (search-forward "Summary: A single-file package with no 
dependencies"
@@ -392,8 +409,7 @@ Must called from within a `tar-mode' buffer."
        (goto-char (point-min))
        (should (search-forward "signed-good is an installed package." nil t))
        (should (search-forward
-               (format "Status: Installed in `%s/'."
-                       (expand-file-name "signed-good-1.0" package-user-dir))
+               "Status: Installed in `~/signed-good-1.0/'."
                nil t))))))
 
 
diff --git a/test/automated/pcase-tests.el b/test/automated/pcase-tests.el
index f5ecadf..701bccc 100644
--- a/test/automated/pcase-tests.el
+++ b/test/automated/pcase-tests.el
@@ -1,6 +1,6 @@
 ;;; pcase-tests.el --- Test suite for pcase macro.
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/print-tests.el b/test/automated/print-tests.el
index 1974cc4..2761109 100644
--- a/test/automated/print-tests.el
+++ b/test/automated/print-tests.el
@@ -1,6 +1,6 @@
 ;;; print-tests.el --- tests for src/print.c         -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/process-tests.el b/test/automated/process-tests.el
index 6783a61..dabfbc5 100644
--- a/test/automated/process-tests.el
+++ b/test/automated/process-tests.el
@@ -1,6 +1,6 @@
 ;;; process-tests.el --- Testing the process facilities
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; 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
diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el
index 1b9d774..672b05c 100644
--- a/test/automated/python-tests.el
+++ b/test/automated/python-tests.el
@@ -1,6 +1,6 @@
 ;;; python-tests.el --- Test suite for python.el
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -174,13 +174,13 @@ aliqua."
 foo = long_function_name(var_one, var_two,
                          var_three, var_four)
 "
-   (should (eq (car (python-indent-context)) 'no-indent))
+   (should (eq (car (python-indent-context)) :no-indent))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "foo = long_function_name(var_one, var_two,")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "var_three, var_four)")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren))
    (should (= (python-indent-calculate-indentation) 25))))
 
 (ert-deftest python-indent-pep8-2 ()
@@ -192,19 +192,22 @@ def long_function_name(
         var_four):
     print (var_one)
 "
-   (should (eq (car (python-indent-context)) 'no-indent))
+   (should (eq (car (python-indent-context)) :no-indent))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "def long_function_name(")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "var_one, var_two, var_three,")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context))
+               :inside-paren-newline-start-from-block))
    (should (= (python-indent-calculate-indentation) 8))
    (python-tests-look-at "var_four):")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context))
+               :inside-paren-newline-start-from-block))
    (should (= (python-indent-calculate-indentation) 8))
    (python-tests-look-at "print (var_one)")
-   (should (eq (car (python-indent-context)) 'after-beginning-of-block))
+   (should (eq (car (python-indent-context))
+               :after-block-start))
    (should (= (python-indent-calculate-indentation) 4))))
 
 (ert-deftest python-indent-pep8-3 ()
@@ -215,18 +218,34 @@ foo = long_function_name(
   var_one, var_two,
   var_three, var_four)
 "
-   (should (eq (car (python-indent-context)) 'no-indent))
+   (should (eq (car (python-indent-context)) :no-indent))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "foo = long_function_name(")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "var_one, var_two,")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "var_three, var_four)")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 4))))
 
+(ert-deftest python-indent-base-case ()
+  "Check base case does not trigger errors."
+  (python-tests-with-temp-buffer
+   "
+
+"
+   (goto-char (point-min))
+   (should (eq (car (python-indent-context)) :no-indent))
+   (should (= (python-indent-calculate-indentation) 0))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))))
+
 (ert-deftest python-indent-after-comment-1 ()
   "The most simple after-comment case that shouldn't fail."
   (python-tests-with-temp-buffer
@@ -240,23 +259,23 @@ class Blag(object):
 # with the exception with which the first child failed.
 "
    (python-tests-look-at "# We only complete")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-block-end))
    (should (= (python-indent-calculate-indentation) 8))
    (python-tests-look-at "# terminal state")
-   (should (eq (car (python-indent-context)) 'after-comment))
+   (should (eq (car (python-indent-context)) :after-comment))
    (should (= (python-indent-calculate-indentation) 8))
    (python-tests-look-at "# with the exception")
-   (should (eq (car (python-indent-context)) 'after-comment))
+   (should (eq (car (python-indent-context)) :after-comment))
    ;; This one indents relative to previous block, even given the fact
    ;; that it was under-indented.
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "# terminal state" -1)
    ;; It doesn't hurt to check again.
-   (should (eq (car (python-indent-context)) 'after-comment))
+   (should (eq (car (python-indent-context)) :after-comment))
    (python-indent-line)
    (should (= (current-indentation) 8))
    (python-tests-look-at "# with the exception")
-   (should (eq (car (python-indent-context)) 'after-comment))
+   (should (eq (car (python-indent-context)) :after-comment))
    ;; Now everything should be lined up.
    (should (= (python-indent-calculate-indentation) 8))))
 
@@ -275,33 +294,33 @@ now_we_do_mess_cause_this_is_not_a_comment = 1
 # yeah, that.
 "
    (python-tests-look-at "# I don't do much")
-   (should (eq (car (python-indent-context)) 'after-beginning-of-block))
+   (should (eq (car (python-indent-context)) :after-block-start))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "return arg")
    ;; Comment here just gets ignored, this line is not a comment so
    ;; the rules won't apply here.
-   (should (eq (car (python-indent-context)) 'after-beginning-of-block))
+   (should (eq (car (python-indent-context)) :after-block-start))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "# This comment is badly")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-block-end))
    ;; The return keyword moves indentation backwards 4 spaces, but
    ;; let's assume this comment was placed there because the user
    ;; wanted to (manually adding spaces or whatever).
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "# but we won't mess")
-   (should (eq (car (python-indent-context)) 'after-comment))
+   (should (eq (car (python-indent-context)) :after-comment))
    (should (= (python-indent-calculate-indentation) 4))
    ;; Behave the same for blank lines: potentially a comment.
    (forward-line 1)
-   (should (eq (car (python-indent-context)) 'after-comment))
+   (should (eq (car (python-indent-context)) :after-comment))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "now_we_do_mess")
    ;; Here is where comment indentation starts to get ignored and
    ;; where the user can't freely indent anymore.
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-block-end))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "# yeah, that.")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))))
 
 (ert-deftest python-indent-inside-paren-1 ()
@@ -325,49 +344,53 @@ data = {
 }
 "
    (python-tests-look-at "data = {")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "'key':")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "{")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "'objlist': [")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 8))
    (python-tests-look-at "{")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 12))
    (python-tests-look-at "'pk': 1,")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 16))
    (python-tests-look-at "'name': 'first',")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 16))
    (python-tests-look-at "},")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context))
+               :inside-paren-at-closing-nested-paren))
    (should (= (python-indent-calculate-indentation) 12))
    (python-tests-look-at "{")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 12))
    (python-tests-look-at "'pk': 2,")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 16))
    (python-tests-look-at "'name': 'second',")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 16))
    (python-tests-look-at "}")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context))
+               :inside-paren-at-closing-nested-paren))
    (should (= (python-indent-calculate-indentation) 12))
    (python-tests-look-at "]")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context))
+               :inside-paren-at-closing-nested-paren))
    (should (= (python-indent-calculate-indentation) 8))
    (python-tests-look-at "}")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context))
+               :inside-paren-at-closing-nested-paren))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "}")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
    (should (= (python-indent-calculate-indentation) 0))))
 
 (ert-deftest python-indent-inside-paren-2 ()
@@ -384,43 +407,121 @@ data = {'key': {
 }}
 "
    (python-tests-look-at "data = {")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "'objlist': [")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "{'pk': 1,")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 8))
    (python-tests-look-at "'name': 'first'},")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren))
    (should (= (python-indent-calculate-indentation) 9))
    (python-tests-look-at "{'pk': 2,")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 8))
    (python-tests-look-at "'name': 'second'}")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren))
    (should (= (python-indent-calculate-indentation) 9))
    (python-tests-look-at "]")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context))
+               :inside-paren-at-closing-nested-paren))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "}}")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context))
+               :inside-paren-at-closing-nested-paren))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "}")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
    (should (= (python-indent-calculate-indentation) 0))))
 
+(ert-deftest python-indent-inside-paren-3 ()
+  "The simplest case possible."
+  (python-tests-with-temp-buffer
+   "
+data = ('these',
+        'are',
+        'the',
+        'tokens')
+"
+   (python-tests-look-at "data = ('these',")
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :inside-paren))
+   (should (= (python-indent-calculate-indentation) 8))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :inside-paren))
+   (should (= (python-indent-calculate-indentation) 8))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :inside-paren))
+   (should (= (python-indent-calculate-indentation) 8))))
+
+(ert-deftest python-indent-inside-paren-4 ()
+  "Respect indentation of first column."
+  (python-tests-with-temp-buffer
+   "
+data = [ [ 'these', 'are'],
+         ['the', 'tokens' ] ]
+"
+   (python-tests-look-at "data = [ [ 'these', 'are'],")
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :inside-paren))
+   (should (= (python-indent-calculate-indentation) 9))))
+
+(ert-deftest python-indent-inside-paren-5 ()
+  "Test when :inside-paren initial parens are skipped in context start."
+  (python-tests-with-temp-buffer
+   "
+while ((not some_condition) and
+       another_condition):
+    do_something_interesting(
+        with_some_arg)
+"
+   (python-tests-look-at "while ((not some_condition) and")
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :inside-paren))
+   (should (= (python-indent-calculate-indentation) 7))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :after-block-start))
+   (should (= (python-indent-calculate-indentation) 4))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
+   (should (= (python-indent-calculate-indentation) 8))))
+
+(ert-deftest python-indent-inside-paren-6 ()
+  "This should be aligned.."
+  (python-tests-with-temp-buffer
+   "
+CHOICES = (('some', 'choice'),
+           ('another', 'choice'),
+           ('more', 'choices'))
+"
+   (python-tests-look-at "CHOICES = (('some', 'choice'),")
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :inside-paren))
+   (should (= (python-indent-calculate-indentation) 11))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :inside-paren))
+   (should (= (python-indent-calculate-indentation) 11))))
+
 (ert-deftest python-indent-after-block-1 ()
   "The most simple after-block case that shouldn't fail."
   (python-tests-with-temp-buffer
    "
 def foo(a, b, c=True):
 "
-   (should (eq (car (python-indent-context)) 'no-indent))
+   (should (eq (car (python-indent-context)) :no-indent))
    (should (= (python-indent-calculate-indentation) 0))
    (goto-char (point-max))
-   (should (eq (car (python-indent-context)) 'after-beginning-of-block))
+   (should (eq (car (python-indent-context)) :after-block-start))
    (should (= (python-indent-calculate-indentation) 4))))
 
 (ert-deftest python-indent-after-block-2 ()
@@ -432,9 +533,28 @@ def foo(a, b, c={
 }):
 "
    (goto-char (point-max))
-   (should (eq (car (python-indent-context)) 'after-beginning-of-block))
+   (should (eq (car (python-indent-context)) :after-block-start))
    (should (= (python-indent-calculate-indentation) 4))))
 
+(ert-deftest python-indent-after-block-3 ()
+  "A weird (malformed) sample, usually found in python shells."
+  (python-tests-with-temp-buffer
+   "
+In [1]:
+def func():
+pass
+
+In [2]:
+something
+"
+   (python-tests-look-at "pass")
+   (should (eq (car (python-indent-context)) :after-block-start))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "something")
+   (end-of-line)
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))))
+
 (ert-deftest python-indent-after-backslash-1 ()
   "The most common case."
   (python-tests-with-temp-buffer
@@ -444,16 +564,16 @@ from foo.bar.baz import something, something_1 \\\\
     something_4, something_5
 "
    (python-tests-look-at "from foo.bar.baz import something, something_1")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at "something_2 something_3,")
-   (should (eq (car (python-indent-context)) 'after-backslash))
+   (should (eq (car (python-indent-context)) :after-backslash-first-line))
    (should (= (python-indent-calculate-indentation) 4))
    (python-tests-look-at "something_4, something_5")
-   (should (eq (car (python-indent-context)) 'after-backslash))
+   (should (eq (car (python-indent-context)) :after-backslash))
    (should (= (python-indent-calculate-indentation) 4))
    (goto-char (point-max))
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))))
 
 (ert-deftest python-indent-after-backslash-2 ()
@@ -471,40 +591,104 @@ objects = Thing.objects.all() \\\\
                        .values_list()
 "
    (python-tests-look-at "objects = Thing.objects.all()")
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))
    (python-tests-look-at ".filter(")
-   (should (eq (car (python-indent-context)) 'after-backslash))
+   (should (eq (car (python-indent-context))
+               :after-backslash-dotted-continuation))
    (should (= (python-indent-calculate-indentation) 23))
    (python-tests-look-at "type='toy',")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 27))
    (python-tests-look-at "status='bought'")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 27))
    (python-tests-look-at ") \\\\")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
    (should (= (python-indent-calculate-indentation) 23))
    (python-tests-look-at ".aggregate(")
-   (should (eq (car (python-indent-context)) 'after-backslash))
+   (should (eq (car (python-indent-context))
+               :after-backslash-dotted-continuation))
    (should (= (python-indent-calculate-indentation) 23))
    (python-tests-look-at "Sum('amount')")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-newline-start))
    (should (= (python-indent-calculate-indentation) 27))
    (python-tests-look-at ") \\\\")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
    (should (= (python-indent-calculate-indentation) 23))
    (python-tests-look-at ".values_list()")
-   (should (eq (car (python-indent-context)) 'after-backslash))
+   (should (eq (car (python-indent-context))
+               :after-backslash-dotted-continuation))
    (should (= (python-indent-calculate-indentation) 23))
    (forward-line 1)
-   (should (eq (car (python-indent-context)) 'after-line))
+   (should (eq (car (python-indent-context)) :after-line))
    (should (= (python-indent-calculate-indentation) 0))))
 
+(ert-deftest python-indent-after-backslash-3 ()
+  "Backslash continuation from block start."
+  (python-tests-with-temp-buffer
+   "
+with open('/path/to/some/file/you/want/to/read') as file_1, \\\\
+     open('/path/to/some/file/being/written', 'w') as file_2:
+    file_2.write(file_1.read())
+"
+   (python-tests-look-at
+    "with open('/path/to/some/file/you/want/to/read') as file_1, \\\\")
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))
+   (python-tests-look-at
+    "open('/path/to/some/file/being/written', 'w') as file_2")
+   (should (eq (car (python-indent-context))
+               :after-backslash-block-continuation))
+   (should (= (python-indent-calculate-indentation) 5))
+   (python-tests-look-at "file_2.write(file_1.read())")
+   (should (eq (car (python-indent-context)) :after-block-start))
+   (should (= (python-indent-calculate-indentation) 4))))
+
+(ert-deftest python-indent-after-backslash-4 ()
+  "Backslash continuation from assignment."
+  (python-tests-with-temp-buffer
+   "
+super_awful_assignment = some_calculation() and \\\\
+                         another_calculation() and \\\\
+                         some_final_calculation()
+"
+   (python-tests-look-at
+    "super_awful_assignment = some_calculation() and \\\\")
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))
+   (python-tests-look-at "another_calculation() and \\\\")
+   (should (eq (car (python-indent-context))
+               :after-backslash-assignment-continuation))
+   (should (= (python-indent-calculate-indentation) 25))
+   (python-tests-look-at "some_final_calculation()")
+   (should (eq (car (python-indent-context)) :after-backslash))
+   (should (= (python-indent-calculate-indentation) 25))))
+
+(ert-deftest python-indent-after-backslash-5 ()
+  "Dotted continuation bizarre example."
+  (python-tests-with-temp-buffer
+   "
+def delete_all_things():
+    Thing \\\\
+        .objects.all() \\\\
+                .delete()
+"
+   (python-tests-look-at "Thing \\\\")
+   (should (eq (car (python-indent-context)) :after-block-start))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at ".objects.all() \\\\")
+   (should (eq (car (python-indent-context)) :after-backslash-first-line))
+   (should (= (python-indent-calculate-indentation) 8))
+   (python-tests-look-at ".delete()")
+   (should (eq (car (python-indent-context))
+               :after-backslash-dotted-continuation))
+   (should (= (python-indent-calculate-indentation) 16))))
+
 (ert-deftest python-indent-block-enders-1 ()
   "Test de-indentation for pass keyword."
   (python-tests-with-temp-buffer
-      "
+   "
 Class foo(object):
 
     def bar(self):
@@ -516,17 +700,18 @@ Class foo(object):
         else:
             pass
 "
-    (python-tests-look-at "3)")
-    (forward-line 1)
-    (should (= (python-indent-calculate-indentation) 8))
-    (python-tests-look-at "pass")
-    (forward-line 1)
-    (should (= (python-indent-calculate-indentation) 8))))
+   (python-tests-look-at "3)")
+   (forward-line 1)
+   (should (= (python-indent-calculate-indentation) 8))
+   (python-tests-look-at "pass")
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :after-block-end))
+   (should (= (python-indent-calculate-indentation) 8))))
 
 (ert-deftest python-indent-block-enders-2 ()
   "Test de-indentation for return keyword."
   (python-tests-with-temp-buffer
-      "
+   "
 Class foo(object):
     '''raise lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
 
@@ -539,64 +724,68 @@ Class foo(object):
                     2,
                     3)
 "
-    (python-tests-look-at "def")
-    (should (= (python-indent-calculate-indentation) 4))
-    (python-tests-look-at "if")
-    (should (= (python-indent-calculate-indentation) 8))
-    (python-tests-look-at "return")
-    (should (= (python-indent-calculate-indentation) 12))
-    (goto-char (point-max))
-    (should (= (python-indent-calculate-indentation) 8))))
+   (python-tests-look-at "def")
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "if")
+   (should (= (python-indent-calculate-indentation) 8))
+   (python-tests-look-at "return")
+   (should (= (python-indent-calculate-indentation) 12))
+   (goto-char (point-max))
+   (should (eq (car (python-indent-context)) :after-block-end))
+   (should (= (python-indent-calculate-indentation) 8))))
 
 (ert-deftest python-indent-block-enders-3 ()
   "Test de-indentation for continue keyword."
   (python-tests-with-temp-buffer
-      "
+   "
 for element in lst:
     if element is None:
         continue
 "
-    (python-tests-look-at "if")
-    (should (= (python-indent-calculate-indentation) 4))
-    (python-tests-look-at "continue")
-    (should (= (python-indent-calculate-indentation) 8))
-    (forward-line 1)
-    (should (= (python-indent-calculate-indentation) 4))))
+   (python-tests-look-at "if")
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "continue")
+   (should (= (python-indent-calculate-indentation) 8))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :after-block-end))
+   (should (= (python-indent-calculate-indentation) 4))))
 
 (ert-deftest python-indent-block-enders-4 ()
   "Test de-indentation for break keyword."
   (python-tests-with-temp-buffer
-      "
+   "
 for element in lst:
     if element is None:
         break
 "
-    (python-tests-look-at "if")
-    (should (= (python-indent-calculate-indentation) 4))
-    (python-tests-look-at "break")
-    (should (= (python-indent-calculate-indentation) 8))
-    (forward-line 1)
-    (should (= (python-indent-calculate-indentation) 4))))
+   (python-tests-look-at "if")
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "break")
+   (should (= (python-indent-calculate-indentation) 8))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :after-block-end))
+   (should (= (python-indent-calculate-indentation) 4))))
 
 (ert-deftest python-indent-block-enders-5 ()
   "Test de-indentation for raise keyword."
   (python-tests-with-temp-buffer
-      "
+   "
 for element in lst:
     if element is None:
         raise ValueError('Element cannot be None')
 "
-    (python-tests-look-at "if")
-    (should (= (python-indent-calculate-indentation) 4))
-    (python-tests-look-at "raise")
-    (should (= (python-indent-calculate-indentation) 8))
-    (forward-line 1)
-    (should (= (python-indent-calculate-indentation) 4))))
+   (python-tests-look-at "if")
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "raise")
+   (should (= (python-indent-calculate-indentation) 8))
+   (forward-line 1)
+   (should (eq (car (python-indent-context)) :after-block-end))
+   (should (= (python-indent-calculate-indentation) 4))))
 
 (ert-deftest python-indent-dedenters-1 ()
   "Test de-indentation for the elif keyword."
   (python-tests-with-temp-buffer
-      "
+   "
 if save:
     try:
         write_to_disk(data)
@@ -604,15 +793,15 @@ if save:
         cleanup()
         elif
 "
-    (python-tests-look-at "elif\n")
-    (should (eq (car (python-indent-context)) 'dedenter-statement))
-    (should (= (python-indent-calculate-indentation) 0))
-    (should (equal (python-indent-calculate-levels) '(0)))))
+   (python-tests-look-at "elif\n")
+   (should (eq (car (python-indent-context)) :at-dedenter-block-start))
+   (should (= (python-indent-calculate-indentation) 0))
+   (should (= (python-indent-calculate-indentation t) 0))))
 
 (ert-deftest python-indent-dedenters-2 ()
   "Test de-indentation for the else keyword."
   (python-tests-with-temp-buffer
-      "
+   "
 if save:
     try:
         write_to_disk(data)
@@ -627,43 +816,50 @@ if save:
     finally:
         data.free()
 "
-    (python-tests-look-at "else\n")
-    (should (eq (car (python-indent-context)) 'dedenter-statement))
-    (should (= (python-indent-calculate-indentation) 8))
-    (should (equal (python-indent-calculate-levels) '(0 4 8)))))
+   (python-tests-look-at "else\n")
+   (should (eq (car (python-indent-context)) :at-dedenter-block-start))
+   (should (= (python-indent-calculate-indentation) 8))
+   (python-indent-line t)
+   (should (= (python-indent-calculate-indentation t) 4))
+   (python-indent-line t)
+   (should (= (python-indent-calculate-indentation t) 0))
+   (python-indent-line t)
+   (should (= (python-indent-calculate-indentation t) 8))))
 
 (ert-deftest python-indent-dedenters-3 ()
   "Test de-indentation for the except keyword."
   (python-tests-with-temp-buffer
-      "
+   "
 if save:
     try:
         write_to_disk(data)
         except
 "
-    (python-tests-look-at "except\n")
-    (should (eq (car (python-indent-context)) 'dedenter-statement))
-    (should (= (python-indent-calculate-indentation) 4))
-    (should (equal (python-indent-calculate-levels) '(4)))))
+   (python-tests-look-at "except\n")
+   (should (eq (car (python-indent-context)) :at-dedenter-block-start))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-indent-line t)
+   (should (= (python-indent-calculate-indentation t) 4))))
 
 (ert-deftest python-indent-dedenters-4 ()
   "Test de-indentation for the finally keyword."
   (python-tests-with-temp-buffer
-      "
+   "
 if save:
     try:
         write_to_disk(data)
         finally
 "
-    (python-tests-look-at "finally\n")
-    (should (eq (car (python-indent-context)) 'dedenter-statement))
-    (should (= (python-indent-calculate-indentation) 4))
-    (should (equal (python-indent-calculate-levels) '(4)))))
+   (python-tests-look-at "finally\n")
+   (should (eq (car (python-indent-context)) :at-dedenter-block-start))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-indent-line t)
+   (should (= (python-indent-calculate-indentation) 4))))
 
 (ert-deftest python-indent-dedenters-5 ()
   "Test invalid levels are skipped in a complex example."
   (python-tests-with-temp-buffer
-      "
+   "
 if save:
     try:
         write_to_disk(data)
@@ -676,29 +872,31 @@ if save:
             do_cleanup()
         else
 "
-    (python-tests-look-at "else\n")
-    (should (eq (car (python-indent-context)) 'dedenter-statement))
-    (should (= (python-indent-calculate-indentation) 8))
-    (should (equal (python-indent-calculate-levels) '(0 8)))))
+   (python-tests-look-at "else\n")
+   (should (eq (car (python-indent-context)) :at-dedenter-block-start))
+   (should (= (python-indent-calculate-indentation) 8))
+   (should (= (python-indent-calculate-indentation t) 0))
+   (python-indent-line t)
+   (should (= (python-indent-calculate-indentation t) 8))))
 
 (ert-deftest python-indent-dedenters-6 ()
   "Test indentation is zero when no opening block for dedenter."
   (python-tests-with-temp-buffer
-      "
+   "
 try:
     # if save:
         write_to_disk(data)
         else
 "
-    (python-tests-look-at "else\n")
-    (should (eq (car (python-indent-context)) 'dedenter-statement))
-    (should (= (python-indent-calculate-indentation) 0))
-    (should (equal (python-indent-calculate-levels) '(0)))))
+   (python-tests-look-at "else\n")
+   (should (eq (car (python-indent-context)) :at-dedenter-block-start))
+   (should (= (python-indent-calculate-indentation) 0))
+   (should (= (python-indent-calculate-indentation t) 0))))
 
 (ert-deftest python-indent-dedenters-7 ()
   "Test indentation case from Bug#15163."
   (python-tests-with-temp-buffer
-      "
+   "
 if a:
     if b:
         pass
@@ -706,10 +904,10 @@ if a:
         pass
         else:
 "
-    (python-tests-look-at "else:" 2)
-    (should (eq (car (python-indent-context)) 'dedenter-statement))
-    (should (= (python-indent-calculate-indentation) 0))
-    (should (equal (python-indent-calculate-levels) '(0)))))
+   (python-tests-look-at "else:" 2)
+   (should (eq (car (python-indent-context)) :at-dedenter-block-start))
+   (should (= (python-indent-calculate-indentation) 0))
+   (should (= (python-indent-calculate-indentation t) 0))))
 
 (ert-deftest python-indent-dedenters-8 ()
   "Test indentation for Bug#18432."
@@ -721,10 +919,99 @@ if (a == 1 or
 elif (a == 3 or
 a == 4):
 "
+   (python-tests-look-at "elif (a == 3 or")
+   (should (eq (car (python-indent-context)) :at-dedenter-block-start))
+   (should (= (python-indent-calculate-indentation) 0))
+   (should (= (python-indent-calculate-indentation t) 0))
    (python-tests-look-at "a == 4):\n")
-   (should (eq (car (python-indent-context)) 'inside-paren))
+   (should (eq (car (python-indent-context)) :inside-paren))
    (should (= (python-indent-calculate-indentation) 6))
-   (should (equal (python-indent-calculate-levels) '(0 4 6)))))
+   (python-indent-line)
+   (should (= (python-indent-calculate-indentation t) 4))
+   (python-indent-line t)
+   (should (= (python-indent-calculate-indentation t) 0))
+   (python-indent-line t)
+   (should (= (python-indent-calculate-indentation t) 6))))
+
+(ert-deftest python-indent-inside-string-1 ()
+  "Test indentation for strings."
+  (python-tests-with-temp-buffer
+   "
+multiline = '''
+bunch
+of
+lines
+'''
+"
+   (python-tests-look-at "multiline = '''")
+   (should (eq (car (python-indent-context)) :after-line))
+   (should (= (python-indent-calculate-indentation) 0))
+   (python-tests-look-at "bunch")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 0))
+   (python-tests-look-at "of")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 0))
+   (python-tests-look-at "lines")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 0))
+   (python-tests-look-at "'''")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 0))))
+
+(ert-deftest python-indent-inside-string-2 ()
+  "Test indentation for docstrings."
+  (python-tests-with-temp-buffer
+   "
+def fn(a, b, c=True):
+    '''docstring
+    bunch
+    of
+    lines
+    '''
+"
+   (python-tests-look-at "'''docstring")
+   (should (eq (car (python-indent-context)) :after-block-start))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "bunch")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "of")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "lines")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "'''")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 4))))
+
+(ert-deftest python-indent-inside-string-3 ()
+  "Test indentation for nested strings."
+  (python-tests-with-temp-buffer
+   "
+def fn(a, b, c=True):
+    some_var = '''
+    bunch
+    of
+    lines
+    '''
+"
+   (python-tests-look-at "some_var = '''")
+   (should (eq (car (python-indent-context)) :after-block-start))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "bunch")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "of")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "lines")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 4))
+   (python-tests-look-at "'''")
+   (should (eq (car (python-indent-context)) :inside-string))
+   (should (= (python-indent-calculate-indentation) 4))))
 
 (ert-deftest python-indent-electric-colon-1 ()
   "Test indentation case from Bug#18228."
@@ -740,6 +1027,39 @@ def b()
    (python-tests-self-insert ":")
    (should (= (current-indentation) 0))))
 
+(ert-deftest python-indent-electric-colon-2 ()
+  "Test indentation case for dedenter."
+  (python-tests-with-temp-buffer
+   "
+if do:
+    something()
+    else
+"
+   (python-tests-look-at "else")
+   (goto-char (line-end-position))
+   (python-tests-self-insert ":")
+   (should (= (current-indentation) 0))))
+
+(ert-deftest python-indent-electric-colon-3 ()
+  "Test indentation case for multi-line dedenter."
+  (python-tests-with-temp-buffer
+   "
+if do:
+    something()
+    elif (this
+          and
+          that)
+"
+   (python-tests-look-at "that)")
+   (goto-char (line-end-position))
+   (python-tests-self-insert ":")
+   (python-tests-look-at "elif" -1)
+   (should (= (current-indentation) 0))
+   (python-tests-look-at "and")
+   (should (= (current-indentation) 6))
+   (python-tests-look-at "that)")
+   (should (= (current-indentation) 6))))
+
 (ert-deftest python-indent-region-1 ()
   "Test indentation case from Bug#18843."
   (let ((contents "
@@ -1769,58 +2089,64 @@ def f():
    (python-nav-backward-up-list)
    (should (looking-at "def f():"))))
 
+(ert-deftest python-indent-dedent-line-backspace-1 ()
+  "Check de-indentation on first call.  Bug#18319."
+  (python-tests-with-temp-buffer
+   "
+if True:
+    x ()
+    if False:
+"
+   (python-tests-look-at "if False:")
+   (call-interactively #'python-indent-dedent-line-backspace)
+   (should (zerop (current-indentation)))
+   ;; XXX: This should be a call to `undo' but it's triggering errors.
+   (insert "    ")
+   (should (= (current-indentation) 4))
+   (call-interactively #'python-indent-dedent-line-backspace)
+   (should (zerop (current-indentation)))))
+
 
 ;;; Shell integration
 
 (defvar python-tests-shell-interpreter "python")
 
 (ert-deftest python-shell-get-process-name-1 ()
-  "Check process name calculation on different scenarios."
+  "Check process name calculation sans `buffer-file-name'."
   (python-tests-with-temp-buffer
-      ""
-    (should (string= (python-shell-get-process-name nil)
-                     python-shell-buffer-name))
-    ;; When the `current-buffer' doesn't have `buffer-file-name', even
-    ;; if dedicated flag is non-nil should not include its name.
-    (should (string= (python-shell-get-process-name t)
-                     python-shell-buffer-name)))
+   ""
+   (should (string= (python-shell-get-process-name nil)
+                    python-shell-buffer-name))
+   (should (string= (python-shell-get-process-name t)
+                    (format "%s[%s]" python-shell-buffer-name 
(buffer-name))))))
+
+(ert-deftest python-shell-get-process-name-2 ()
+  "Check process name calculation with `buffer-file-name'."
   (python-tests-with-temp-file
-      ""
-    ;; `buffer-file-name' is non-nil but the dedicated flag is nil and
-    ;; should be respected.
-    (should (string= (python-shell-get-process-name nil)
-                     python-shell-buffer-name))
-    (should (string=
-             (python-shell-get-process-name t)
-             (format "%s[%s]" python-shell-buffer-name buffer-file-name)))))
+   ""
+   ;; `buffer-file-name' is non-nil but the dedicated flag is nil and
+   ;; should be respected.
+   (should (string= (python-shell-get-process-name nil)
+                    python-shell-buffer-name))
+   (should (string=
+            (python-shell-get-process-name t)
+            (format "%s[%s]" python-shell-buffer-name (buffer-name))))))
 
 (ert-deftest python-shell-internal-get-process-name-1 ()
-  "Check the internal process name is config-unique."
-  (let* ((python-shell-interpreter python-tests-shell-interpreter)
-         (python-shell-interpreter-args "")
-         (python-shell-prompt-regexp ">>> ")
-         (python-shell-prompt-block-regexp "[.][.][.] ")
-         (python-shell-setup-codes "")
-         (python-shell-process-environment "")
-         (python-shell-extra-pythonpaths "")
-         (python-shell-exec-path "")
-         (python-shell-virtualenv-path "")
-         (expected (python-tests-with-temp-buffer
-                       "" (python-shell-internal-get-process-name))))
-    ;; Same configurations should match.
-    (should
-     (string= expected
-              (python-tests-with-temp-buffer
-                  "" (python-shell-internal-get-process-name))))
-    (let ((python-shell-interpreter-args "-B"))
-      ;; A minimal change should generate different names.
-      (should
-       (not (string=
-             expected
-             (python-tests-with-temp-buffer
-                 "" (python-shell-internal-get-process-name))))))))
-
-(ert-deftest python-shell-parse-command-1 ()
+  "Check the internal process name is buffer-unique sans `buffer-file-name'."
+  (python-tests-with-temp-buffer
+   ""
+   (should (string= (python-shell-internal-get-process-name)
+                    (format "%s[%s]" python-shell-internal-buffer-name 
(buffer-name))))))
+
+(ert-deftest python-shell-internal-get-process-name-2 ()
+  "Check the internal process name is buffer-unique with `buffer-file-name'."
+  (python-tests-with-temp-file
+   ""
+   (should (string= (python-shell-internal-get-process-name)
+                    (format "%s[%s]" python-shell-internal-buffer-name 
(buffer-name))))))
+
+(ert-deftest python-shell-calculate-command-1 ()
   "Check the command to execute is calculated correctly.
 Using `python-shell-interpreter' and
 `python-shell-interpreter-args'."
@@ -1832,7 +2158,7 @@ Using `python-shell-interpreter' and
              (format "%s %s"
                      python-shell-interpreter
                      python-shell-interpreter-args)
-             (python-shell-parse-command)))))
+             (python-shell-calculate-command)))))
 
 (ert-deftest python-shell-calculate-process-environment-1 ()
   "Test `python-shell-process-environment' modification."
@@ -1857,19 +2183,36 @@ Using `python-shell-interpreter' and
                     path-separator original-pythonpath)))))
 
 (ert-deftest python-shell-calculate-process-environment-3 ()
-  "Test `python-shell-virtualenv-path' modification."
+  "Test `python-shell-virtualenv-root' modification."
   (let* ((original-path (or (getenv "PATH") ""))
-         (python-shell-virtualenv-path
+         (python-shell-virtualenv-root
           (directory-file-name user-emacs-directory))
          (process-environment
           (python-shell-calculate-process-environment)))
     (should (not (getenv "PYTHONHOME")))
-    (should (string= (getenv "VIRTUAL_ENV") python-shell-virtualenv-path))
+    (should (string= (getenv "VIRTUAL_ENV") python-shell-virtualenv-root))
     (should (equal (getenv "PATH")
                    (format "%s/bin%s%s"
-                           python-shell-virtualenv-path
+                           python-shell-virtualenv-root
                            path-separator original-path)))))
 
+(ert-deftest python-shell-calculate-process-environment-4 ()
+  "Test `python-shell-unbuffered' modification."
+  (setenv "PYTHONUNBUFFERED")
+  (let* ((process-environment
+          (python-shell-calculate-process-environment)))
+    ;; Defaults to t
+    (should python-shell-unbuffered)
+    (should (string= (getenv "PYTHONUNBUFFERED") "1"))))
+
+(ert-deftest python-shell-calculate-process-environment-5 ()
+  (setenv "PYTHONUNBUFFERED")
+  "Test `python-shell-unbuffered' modification."
+  (let* ((python-shell-unbuffered nil)
+         (process-environment
+          (python-shell-calculate-process-environment)))
+    (should (not (getenv "PYTHONUNBUFFERED")))))
+
 (ert-deftest python-shell-calculate-exec-path-1 ()
   "Test `python-shell-exec-path' modification."
   (let* ((original-exec-path exec-path)
@@ -1883,13 +2226,13 @@ Using `python-shell-interpreter' and
 (ert-deftest python-shell-calculate-exec-path-2 ()
   "Test `python-shell-exec-path' modification."
   (let* ((original-exec-path exec-path)
-         (python-shell-virtualenv-path
+         (python-shell-virtualenv-root
           (directory-file-name (expand-file-name user-emacs-directory)))
          (exec-path (python-shell-calculate-exec-path)))
     (should (equal
              exec-path
              (append (cons
-                      (format "%s/bin" python-shell-virtualenv-path)
+                      (format "%s/bin" python-shell-virtualenv-root)
                       original-exec-path))))))
 
 (ert-deftest python-shell-make-comint-1 ()
@@ -1905,7 +2248,7 @@ Using `python-shell-interpreter' and
          (shell-buffer
           (python-tests-with-temp-buffer
            "" (python-shell-make-comint
-               (python-shell-parse-command) proc-name)))
+               (python-shell-calculate-command) proc-name)))
          (process (get-buffer-process shell-buffer)))
     (unwind-protect
         (progn
@@ -1926,7 +2269,7 @@ Using `python-shell-interpreter' and
          (shell-buffer
           (python-tests-with-temp-buffer
            "" (python-shell-make-comint
-               (python-shell-parse-command) proc-name nil t)))
+               (python-shell-calculate-command) proc-name nil t)))
          (process (get-buffer-process shell-buffer)))
     (unwind-protect
         (progn
@@ -1959,8 +2302,9 @@ and `python-shell-interpreter-args' in the new shell 
buffer."
           (should (process-live-p process))
           (with-current-buffer shell-buffer
             (should (eq major-mode 'inferior-python-mode))
-            (should (string= python-shell-interpreter
-                             (executable-find python-tests-shell-interpreter)))
+            (should (file-equal-p
+                     python-shell-interpreter
+                     (executable-find python-tests-shell-interpreter)))
             (should (string= python-shell-interpreter-args "-i"))))
       (kill-buffer shell-buffer))))
 
@@ -1992,7 +2336,7 @@ and `python-shell-interpreter-args' in the new shell 
buffer."
             (setenv "PYTHONSTARTUP" startup-file)
             (python-tests-with-temp-buffer
              "" (python-shell-make-comint
-                 (python-shell-parse-command) proc-name nil))))
+                 (python-shell-calculate-command) proc-name nil))))
          (process (get-buffer-process shell-buffer)))
     (unwind-protect
         (progn
@@ -2022,10 +2366,10 @@ and `python-shell-interpreter-args' in the new shell 
buffer."
            (dedicated-proc-name (python-shell-get-process-name t))
            (global-shell-buffer
             (python-shell-make-comint
-             (python-shell-parse-command) global-proc-name))
+             (python-shell-calculate-command) global-proc-name))
            (dedicated-shell-buffer
             (python-shell-make-comint
-             (python-shell-parse-command) dedicated-proc-name))
+             (python-shell-calculate-command) dedicated-proc-name))
            (global-process (get-buffer-process global-shell-buffer))
            (dedicated-process (get-buffer-process dedicated-shell-buffer)))
       (unwind-protect
@@ -2043,87 +2387,6 @@ and `python-shell-interpreter-args' in the new shell 
buffer."
         (ignore-errors (kill-buffer global-shell-buffer))
         (ignore-errors (kill-buffer dedicated-shell-buffer))))))
 
-(ert-deftest python-shell-get-or-create-process-1 ()
-  "Check shell dedicated process creation."
-  (skip-unless (executable-find python-tests-shell-interpreter))
-  (python-tests-with-temp-file
-   ""
-   (let* ((python-shell-interpreter
-           (executable-find python-tests-shell-interpreter))
-          (use-dialog-box)
-          (dedicated-process-name (python-shell-get-process-name t))
-          (dedicated-process
-           (python-shell-get-or-create-process python-shell-interpreter t))
-          (dedicated-shell-buffer (process-buffer dedicated-process)))
-     (unwind-protect
-         (progn
-           (set-process-query-on-exit-flag dedicated-process nil)
-           ;; should be dedicated.
-           (should (equal (process-name dedicated-process)
-                          dedicated-process-name))
-           (kill-buffer dedicated-shell-buffer)
-           ;; Check there are no processes for current buffer.
-           (should (not (python-shell-get-process))))
-       (ignore-errors (kill-buffer dedicated-shell-buffer))))))
-
-(ert-deftest python-shell-get-or-create-process-2 ()
-  "Check shell global process creation."
-  (skip-unless (executable-find python-tests-shell-interpreter))
-  (python-tests-with-temp-file
-   ""
-   (let* ((python-shell-interpreter
-           (executable-find python-tests-shell-interpreter))
-          (use-dialog-box)
-          (process-name (python-shell-get-process-name nil))
-          (process
-           (python-shell-get-or-create-process python-shell-interpreter))
-          (shell-buffer (process-buffer process)))
-     (unwind-protect
-         (progn
-           (set-process-query-on-exit-flag process nil)
-           ;; should be global.
-           (should (equal (process-name process) process-name))
-           (kill-buffer shell-buffer)
-           ;; Check there are no processes for current buffer.
-           (should (not (python-shell-get-process))))
-       (ignore-errors (kill-buffer dedicated-shell-buffer))))))
-
-(ert-deftest python-shell-get-or-create-process-3 ()
-  "Check shell dedicated/global process preference."
-  (skip-unless (executable-find python-tests-shell-interpreter))
-  (python-tests-with-temp-file
-   ""
-   (let* ((python-shell-interpreter
-           (executable-find python-tests-shell-interpreter))
-          (use-dialog-box)
-          (dedicated-process-name (python-shell-get-process-name t))
-          (global-process)
-          (dedicated-process))
-     (unwind-protect
-         (progn
-           ;; Create global process
-           (run-python python-shell-interpreter nil)
-           (setq global-process (get-buffer-process "*Python*"))
-           (should global-process)
-           (set-process-query-on-exit-flag global-process nil)
-           ;; Create dedicated process
-           (run-python python-shell-interpreter t)
-           (setq dedicated-process (get-process dedicated-process-name))
-           (should dedicated-process)
-           (set-process-query-on-exit-flag dedicated-process nil)
-           ;; Prefer dedicated.
-           (should (equal (python-shell-get-or-create-process)
-                          dedicated-process))
-           ;; Kill the dedicated so the global takes over.
-           (kill-buffer (process-buffer dedicated-process))
-           ;; Detect global.
-           (should (equal (python-shell-get-or-create-process) global-process))
-           ;; Kill the global.
-           (kill-buffer (process-buffer global-process))
-           ;; Check there are no processes for current buffer.
-           (should (not (python-shell-get-process))))
-       (ignore-errors (kill-buffer dedicated-shell-buffer))))))
-
 (ert-deftest python-shell-internal-get-or-create-process-1 ()
   "Check internal shell process creation fallback."
   (skip-unless (executable-find python-tests-shell-interpreter))
@@ -2409,9 +2672,229 @@ and `python-shell-interpreter-args' in the new shell 
buffer."
                            "^\\(o\\.t \\|\\)")))
       (ignore-errors (delete-file startup-file)))))
 
+(ert-deftest python-shell-buffer-substring-1 ()
+  "Selecting a substring of the whole buffer must match its contents."
+  (python-tests-with-temp-buffer
+   "
+class Foo(models.Model):
+    pass
+
+
+class Bar(models.Model):
+    pass
+"
+   (should (string= (buffer-string)
+                    (python-shell-buffer-substring (point-min) (point-max))))))
+
+(ert-deftest python-shell-buffer-substring-2 ()
+  "Main block should be removed if NOMAIN is non-nil."
+  (python-tests-with-temp-buffer
+   "
+class Foo(models.Model):
+    pass
+
+class Bar(models.Model):
+    pass
+
+if __name__ == \"__main__\":
+    foo = Foo()
+    print (foo)
+"
+   (should (string= (python-shell-buffer-substring (point-min) (point-max) t)
+                    "
+class Foo(models.Model):
+    pass
+
+class Bar(models.Model):
+    pass
+
+
+
+
+"))))
+
+(ert-deftest python-shell-buffer-substring-3 ()
+  "Main block should be removed if NOMAIN is non-nil."
+  (python-tests-with-temp-buffer
+   "
+class Foo(models.Model):
+    pass
+
+if __name__ == \"__main__\":
+    foo = Foo()
+    print (foo)
+
+class Bar(models.Model):
+    pass
+"
+   (should (string= (python-shell-buffer-substring (point-min) (point-max) t)
+                    "
+class Foo(models.Model):
+    pass
+
+
+
+
+
+class Bar(models.Model):
+    pass
+"))))
+
+(ert-deftest python-shell-buffer-substring-4 ()
+  "Coding cookie should be added for substrings."
+  (python-tests-with-temp-buffer
+   "# coding: latin-1
+
+class Foo(models.Model):
+    pass
+
+if __name__ == \"__main__\":
+    foo = Foo()
+    print (foo)
+
+class Bar(models.Model):
+    pass
+"
+   (should (string= (python-shell-buffer-substring
+                     (python-tests-look-at "class Foo(models.Model):")
+                     (progn (python-nav-forward-sexp) (point)))
+                    "# -*- coding: latin-1 -*-
+
+class Foo(models.Model):
+    pass"))))
+
+(ert-deftest python-shell-buffer-substring-5 ()
+  "The proper amount of blank lines is added for a substring."
+  (python-tests-with-temp-buffer
+   "# coding: latin-1
+
+class Foo(models.Model):
+    pass
+
+if __name__ == \"__main__\":
+    foo = Foo()
+    print (foo)
+
+class Bar(models.Model):
+    pass
+"
+   (should (string= (python-shell-buffer-substring
+                     (python-tests-look-at "class Bar(models.Model):")
+                     (progn (python-nav-forward-sexp) (point)))
+                    "# -*- coding: latin-1 -*-
+
+
+
+
+
+
+
+
+class Bar(models.Model):
+    pass"))))
+
+(ert-deftest python-shell-buffer-substring-6 ()
+  "Handle substring with coding cookie in the second line."
+  (python-tests-with-temp-buffer
+   "
+# coding: latin-1
+
+class Foo(models.Model):
+    pass
+
+if __name__ == \"__main__\":
+    foo = Foo()
+    print (foo)
+
+class Bar(models.Model):
+    pass
+"
+   (should (string= (python-shell-buffer-substring
+                     (python-tests-look-at "# coding: latin-1")
+                     (python-tests-look-at "if __name__ == \"__main__\":"))
+                    "# -*- coding: latin-1 -*-
+
+
+class Foo(models.Model):
+    pass
+
+"))))
+
+(ert-deftest python-shell-buffer-substring-7 ()
+  "Ensure first coding cookie gets precedence."
+  (python-tests-with-temp-buffer
+   "# coding: utf-8
+# coding: latin-1
+
+class Foo(models.Model):
+    pass
+
+if __name__ == \"__main__\":
+    foo = Foo()
+    print (foo)
+
+class Bar(models.Model):
+    pass
+"
+   (should (string= (python-shell-buffer-substring
+                     (python-tests-look-at "# coding: latin-1")
+                     (python-tests-look-at "if __name__ == \"__main__\":"))
+                    "# -*- coding: utf-8 -*-
+
+
+class Foo(models.Model):
+    pass
+
+"))))
+
+(ert-deftest python-shell-buffer-substring-8 ()
+  "Ensure first coding cookie gets precedence when sending whole buffer."
+  (python-tests-with-temp-buffer
+   "# coding: utf-8
+# coding: latin-1
+
+class Foo(models.Model):
+    pass
+"
+   (should (string= (python-shell-buffer-substring (point-min) (point-max))
+                    "# coding: utf-8
+
+
+class Foo(models.Model):
+    pass
+"))))
+
+(ert-deftest python-shell-buffer-substring-9 ()
+  "Check substring starting from `point-min'."
+  (python-tests-with-temp-buffer
+   "# coding: utf-8
+
+class Foo(models.Model):
+    pass
+
+class Bar(models.Model):
+    pass
+"
+   (should (string= (python-shell-buffer-substring
+                     (point-min)
+                     (python-tests-look-at "class Bar(models.Model):"))
+                    "# coding: utf-8
+
+class Foo(models.Model):
+    pass
+
+"))))
+
 
 ;;; Shell completion
 
+(ert-deftest python-shell-completion-native-interpreter-disabled-p-1 ()
+  (let* ((python-shell-completion-native-disabled-interpreters (list "pypy"))
+         (python-shell-interpreter "/some/path/to/bin/pypy"))
+    (should (python-shell-completion-native-interpreter-disabled-p))))
+
+
+
 
 ;;; PDB Track integration
 
@@ -3723,6 +4206,85 @@ foo = True  # another comment
    (forward-line 1)
    (should (python-info-current-line-empty-p))))
 
+(ert-deftest python-info-encoding-from-cookie-1 ()
+  "Should detect it on first line."
+  (python-tests-with-temp-buffer
+   "# coding=latin-1
+
+foo = True  # another comment
+"
+   (should (eq (python-info-encoding-from-cookie) 'latin-1))))
+
+(ert-deftest python-info-encoding-from-cookie-2 ()
+  "Should detect it on second line."
+  (python-tests-with-temp-buffer
+   "
+# coding=latin-1
+
+foo = True  # another comment
+"
+   (should (eq (python-info-encoding-from-cookie) 'latin-1))))
+
+(ert-deftest python-info-encoding-from-cookie-3 ()
+  "Should not be detected on third line (and following ones)."
+  (python-tests-with-temp-buffer
+   "
+
+# coding=latin-1
+foo = True  # another comment
+"
+   (should (not (python-info-encoding-from-cookie)))))
+
+(ert-deftest python-info-encoding-from-cookie-4 ()
+  "Should detect Emacs style."
+  (python-tests-with-temp-buffer
+   "# -*- coding: latin-1 -*-
+
+foo = True  # another comment"
+   (should (eq (python-info-encoding-from-cookie) 'latin-1))))
+
+(ert-deftest python-info-encoding-from-cookie-5 ()
+  "Should detect Vim style."
+  (python-tests-with-temp-buffer
+   "# vim: set fileencoding=latin-1 :
+
+foo = True  # another comment"
+   (should (eq (python-info-encoding-from-cookie) 'latin-1))))
+
+(ert-deftest python-info-encoding-from-cookie-6 ()
+  "First cookie wins."
+  (python-tests-with-temp-buffer
+   "# -*- coding: iso-8859-1 -*-
+# vim: set fileencoding=latin-1 :
+
+foo = True  # another comment"
+   (should (eq (python-info-encoding-from-cookie) 'iso-8859-1))))
+
+(ert-deftest python-info-encoding-from-cookie-7 ()
+  "First cookie wins."
+  (python-tests-with-temp-buffer
+   "# vim: set fileencoding=latin-1 :
+# -*- coding: iso-8859-1 -*-
+
+foo = True  # another comment"
+   (should (eq (python-info-encoding-from-cookie) 'latin-1))))
+
+(ert-deftest python-info-encoding-1 ()
+  "Should return the detected encoding from cookie."
+  (python-tests-with-temp-buffer
+   "# vim: set fileencoding=latin-1 :
+
+foo = True  # another comment"
+   (should (eq (python-info-encoding) 'latin-1))))
+
+(ert-deftest python-info-encoding-2 ()
+  "Should default to utf-8."
+  (python-tests-with-temp-buffer
+   "# No encoding for you
+
+foo = True  # another comment"
+   (should (eq (python-info-encoding) 'utf-8))))
+
 
 ;;; Utility functions
 
@@ -3752,7 +4314,7 @@ def foo(a, b, c):
             . "from IPython.core.completerlib import module_completion")
            (python-shell-completion-string-code
             . "';'.join(get_ipython().Completer.all_completions('''%s'''))\n")
-           (python-shell-virtualenv-path
+           (python-shell-virtualenv-root
             . "/home/user/.virtualenvs/project"))))
     (with-current-buffer buffer
       (kill-all-local-variables)
diff --git a/test/automated/reftex-tests.el b/test/automated/reftex-tests.el
index 15bdc74..962e39f 100644
--- a/test/automated/reftex-tests.el
+++ b/test/automated/reftex-tests.el
@@ -1,6 +1,6 @@
 ;;; reftex-tests.el --- Test suite for reftex. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Rüdiger Sonderfeld <address@hidden>
 ;; Keywords:       internal
diff --git a/test/automated/regexp-tests.el b/test/automated/regexp-tests.el
index 9185adf..ee177b3 100644
--- a/test/automated/regexp-tests.el
+++ b/test/automated/regexp-tests.el
@@ -1,6 +1,6 @@
 ;;; regexp-tests.el --- Test suite for regular expression handling.
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords:       internal
@@ -23,6 +23,8 @@
 
 ;;; Code:
 
+(require 'regexp-opt)
+
 (ert-deftest regexp-test-regexp-opt ()
   "Test the `compilation-error-regexp-alist' regexps.
 The test data is in `compile-tests--test-regexps-data'."
diff --git a/test/automated/ruby-mode-tests.el 
b/test/automated/ruby-mode-tests.el
index 1c14a0c..065aa56 100644
--- a/test/automated/ruby-mode-tests.el
+++ b/test/automated/ruby-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; ruby-mode-tests.el --- Test suite for ruby-mode
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/seq-tests.el b/test/automated/seq-tests.el
new file mode 100644
index 0000000..2398979
--- /dev/null
+++ b/test/automated/seq-tests.el
@@ -0,0 +1,201 @@
+;;; seq-tests.el --- Tests for sequences.el
+
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
+
+;; Author: Nicolas Petton <address@hidden>
+;; Maintainer: address@hidden
+
+;; 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 3 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Tests for sequences.el
+
+;;; Code:
+
+(require 'ert)
+(require 'seq)
+
+(defmacro with-test-sequences (spec &rest body)
+  "Successively bind VAR to a list, vector, and string built from SEQ.
+Evaluate BODY for each created sequence.
+
+\(fn (var seq) body)"
+  (declare (indent 1) (debug ((symbolp form) body)))
+  (let ((initial-seq (make-symbol "initial-seq")))
+    `(let ((,initial-seq ,(cadr spec)))
+       ,@(mapcar (lambda (s)
+                   `(let ((,(car spec) (apply (function ,s) ,initial-seq)))
+                      ,@body))
+                 '(list vector string)))))
+
+(defun same-contents-p (seq1 seq2)
+  "Return t if SEQ1 and SEQ2 have the same contents, nil otherwise."
+  (equal (append seq1 '()) (append seq2 '())))
+
+(defun test-sequences-evenp (integer)
+  "Return t if INTEGER is even."
+  (eq (logand integer 1) 0))
+
+(defun test-sequences-oddp (integer)
+  "Return t if INTEGER is odd."
+  (not (test-sequences-evenp integer)))
+
+(ert-deftest test-seq-drop ()
+  (with-test-sequences (seq '(1 2 3 4))
+    (should (equal (seq-drop seq 0) seq))
+    (should (equal (seq-drop seq 1) (seq-subseq seq 1)))
+    (should (equal (seq-drop seq 2) (seq-subseq seq 2)))
+    (should (seq-empty-p (seq-drop seq 4)))
+    (should (seq-empty-p (seq-drop seq 10))))
+  (with-test-sequences (seq '())
+    (should (seq-empty-p (seq-drop seq 0)))
+    (should (seq-empty-p (seq-drop seq 1)))))
+
+(ert-deftest test-seq-take ()
+  (with-test-sequences (seq '(2 3 4 5))
+    (should (seq-empty-p (seq-take seq 0)))
+    (should (= (seq-length (seq-take seq 1)) 1))
+    (should (= (seq-elt (seq-take seq 1) 0) 2))
+    (should (same-contents-p (seq-take seq 3) '(2 3 4)))
+    (should (equal (seq-take seq 10) seq))))
+
+(ert-deftest test-seq-drop-while ()
+  (with-test-sequences (seq '(1 3 2 4))
+    (should (equal (seq-drop-while #'test-sequences-oddp seq)
+                   (seq-drop seq 2)))
+    (should (equal (seq-drop-while #'test-sequences-evenp seq)
+                   seq))
+    (should (seq-empty-p (seq-drop-while #'numberp seq))))
+  (with-test-sequences (seq '())
+    (should (seq-empty-p (seq-drop-while #'test-sequences-oddp seq)))))
+
+(ert-deftest test-seq-take-while ()
+  (with-test-sequences (seq '(1 3 2 4))
+    (should (equal (seq-take-while #'test-sequences-oddp seq)
+                   (seq-take seq 2)))
+    (should (seq-empty-p (seq-take-while #'test-sequences-evenp seq)))
+    (should (equal (seq-take-while #'numberp seq) seq)))
+  (with-test-sequences (seq '())
+    (should (seq-empty-p (seq-take-while #'test-sequences-oddp seq)))))
+
+(ert-deftest test-seq-filter ()
+  (with-test-sequences (seq '(6 7 8 9 10))
+    (should (equal (seq-filter #'test-sequences-evenp seq) '(6 8 10)))
+    (should (equal (seq-filter #'test-sequences-oddp seq) '(7 9)))
+    (should (equal (seq-filter (lambda (elt) nil) seq) '())))
+  (with-test-sequences (seq '())
+    (should (equal (seq-filter #'test-sequences-evenp seq) '()))))
+
+(ert-deftest test-seq-remove ()
+  (with-test-sequences (seq '(6 7 8 9 10))
+    (should (equal (seq-remove #'test-sequences-evenp seq) '(7 9)))
+    (should (equal (seq-remove #'test-sequences-oddp seq) '(6 8 10)))
+    (should (same-contents-p (seq-remove (lambda (elt) nil) seq) seq)))
+  (with-test-sequences (seq '())
+    (should (equal (seq-remove #'test-sequences-evenp seq) '()))))
+
+(ert-deftest test-seq-count ()
+  (with-test-sequences (seq '(6 7 8 9 10))
+    (should (equal (seq-count #'test-sequences-evenp seq) 3))
+    (should (equal (seq-count #'test-sequences-oddp seq) 2))
+    (should (equal (seq-count (lambda (elt) nil) seq) 0)))
+  (with-test-sequences (seq '())
+    (should (equal (seq-count #'test-sequences-evenp seq) 0))))
+
+(ert-deftest test-seq-reduce ()
+  (with-test-sequences (seq '(1 2 3 4))
+    (should (= (seq-reduce #'+ seq 0) 10))
+    (should (= (seq-reduce #'+ seq 5) 15)))
+  (with-test-sequences (seq '())
+    (should (eq (seq-reduce #'+ seq 0) 0))
+    (should (eq (seq-reduce #'+ seq 7) 7))))
+
+(ert-deftest test-seq-some-p ()
+  (with-test-sequences (seq '(4 3 2 1))
+    (should (= (seq-some-p #'test-sequences-evenp seq) 4))
+    (should (= (seq-some-p #'test-sequences-oddp seq) 3))
+    (should-not (seq-some-p (lambda (elt) (> elt 10)) seq)))
+  (with-test-sequences (seq '())
+    (should-not (seq-some-p #'test-sequences-oddp seq))))
+
+(ert-deftest test-seq-contains-p ()
+  (with-test-sequences (seq '(3 4 5 6))
+    (should (seq-contains-p seq 3))
+    (should-not (seq-contains-p seq 7)))
+  (with-test-sequences (seq '())
+    (should-not (seq-contains-p seq 3))
+    (should-not (seq-contains-p seq nil))))
+
+(ert-deftest test-seq-every-p ()
+  (with-test-sequences (seq '(43 54 22 1))
+    (should (seq-every-p (lambda (elt) t) seq))
+    (should-not (seq-every-p #'test-sequences-oddp seq))
+    (should-not (seq-every-p #'test-sequences-evenp seq)))
+  (with-test-sequences (seq '(42 54 22 2))
+    (should (seq-every-p #'test-sequences-evenp seq))
+    (should-not (seq-every-p #'test-sequences-oddp seq)))
+  (with-test-sequences (seq '())
+    (should (seq-every-p #'identity seq))
+    (should (seq-every-p #'test-sequences-evenp seq))))
+
+(ert-deftest test-seq-empty-p ()
+  (with-test-sequences (seq '(0))
+    (should-not (seq-empty-p seq)))
+  (with-test-sequences (seq '(0 1 2))
+    (should-not (seq-empty-p seq)))
+  (with-test-sequences (seq '())
+    (should (seq-empty-p seq))))
+
+(ert-deftest test-seq-sort ()
+  (should (equal (seq-sort #'< "cbaf") "abcf"))
+  (should (equal (seq-sort #'< '(2 1 9 4)) '(1 2 4 9)))
+  (should (equal (seq-sort #'< [2 1 9 4]) [1 2 4 9]))
+  (should (equal (seq-sort #'< "") "")))
+
+(ert-deftest test-seq-uniq ()
+  (with-test-sequences (seq '(2 4 6 8 6 4 3))
+    (should (equal (seq-uniq seq) '(2 4 6 8 3))))
+  (with-test-sequences (seq '(3 3 3 3 3))
+    (should (equal (seq-uniq seq) '(3))))
+  (with-test-sequences (seq '())
+    (should (equal (seq-uniq seq) '()))))
+
+(ert-deftest test-seq-subseq ()
+  (with-test-sequences (seq '(2 3 4 5))
+    (should (equal (seq-subseq seq 0 4) seq))
+    (should (same-contents-p (seq-subseq seq 2 4) '(4 5)))
+    (should (same-contents-p (seq-subseq seq 1 3) '(3 4)))
+    (should (same-contents-p (seq-subseq seq 1 -1) '(3 4))))
+  (should (vectorp (seq-subseq [2 3 4 5] 2)))
+  (should (stringp (seq-subseq "foo" 2 3)))
+  (should (listp (seq-subseq '(2 3 4 4) 2 3)))
+  (should-error (seq-subseq '(1 2 3) 4))
+  (should-not   (seq-subseq '(1 2 3) 3))
+  (should       (seq-subseq '(1 2 3) -3))
+  (should-error (seq-subseq '(1 2 3) 1 4))
+  (should       (seq-subseq '(1 2 3) 1 3)))
+
+(ert-deftest test-seq-concatenate ()
+  (with-test-sequences (seq '(2 4 6))
+    (should (equal (seq-concatenate 'string seq [8]) (string 2 4 6 8)))
+    (should (equal (seq-concatenate 'list seq '(8 10)) '(2 4 6 8 10)))
+    (should (equal (seq-concatenate 'vector seq '(8 10)) [2 4 6 8 10]))
+    (should (equal (seq-concatenate 'vector nil '(8 10)) [8 10]))
+    (should (equal (seq-concatenate 'vector seq nil) [2 4 6]))))
+
+(provide 'seq-tests)
+;;; seq-tests.el ends here
diff --git a/test/automated/subr-x-tests.el b/test/automated/subr-x-tests.el
index 03541f1..bdd3dff 100644
--- a/test/automated/subr-x-tests.el
+++ b/test/automated/subr-x-tests.el
@@ -1,6 +1,6 @@
 ;;; subr-x-tests.el --- Testing the extended lisp routines
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: Fabián E. Gallina <address@hidden>
 ;; Keywords:
diff --git a/test/automated/subword-tests.el b/test/automated/subword-tests.el
index 7c6c77d..bedb152 100644
--- a/test/automated/subword-tests.el
+++ b/test/automated/subword-tests.el
@@ -1,6 +1,6 @@
 ;;; subword-tests.el --- Testing the subword rules
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords:
diff --git a/test/automated/syntax-tests.el b/test/automated/syntax-tests.el
index 9b97001..b884c3e 100644
--- a/test/automated/syntax-tests.el
+++ b/test/automated/syntax-tests.el
@@ -1,6 +1,6 @@
 ;;; syntax-tests.el --- Testing syntax rules and basic movement -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel Colascione <address@hidden>
 ;; Keywords:
diff --git a/test/automated/thingatpt.el b/test/automated/thingatpt.el
index 74240f8..1231238 100644
--- a/test/automated/thingatpt.el
+++ b/test/automated/thingatpt.el
@@ -1,6 +1,6 @@
 ;;; thingatpt.el --- tests for thing-at-point.
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/tildify-tests.el b/test/automated/tildify-tests.el
index 55d2d57..b53f58c 100644
--- a/test/automated/tildify-tests.el
+++ b/test/automated/tildify-tests.el
@@ -1,6 +1,6 @@
 ;;; tildify-test.el --- ERT tests for tildify.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author:     Michal Nazarewicz <address@hidden>
 ;; Version:    4.5
@@ -185,6 +185,77 @@ The function must terminate as soon as callback returns 
nil."
       (+ (point-min) 10) (+ (point-min) 20)))) ; start at "3" end past "5"
 
 
+(defun tildify-space-test--test (modes nbsp env-open &optional 
set-space-string)
+  (with-temp-buffer
+    (dolist (mode modes)
+      (funcall mode)
+      (when set-space-string
+        (setq-local tildify-space-string nbsp))
+      (let ((header (concat "Testing `tildify-space' in "
+                            (symbol-name mode) "\n")))
+        ;; Replace space with hard space.
+        (erase-buffer)
+        (insert header "Lorem v ")
+        (should (tildify-space))
+        (should (string-equal (concat header "Lorem v" nbsp) (buffer-string)))
+        ;; Inside and ignore environment, replacing does not happen.
+        (erase-buffer)
+        (insert header env-open "Lorem v ")
+        (should (not (tildify-space)))
+        (should (string-equal (concat header env-open "Lorem v ")
+                              (buffer-string)))))))
+
+(ert-deftest tildify-space-test-html ()
+  "Tests auto-tildification in an HTML document"
+  (tildify-space-test--test '(html-mode sgml-mode) " " "<pre>"))
+
+(ert-deftest tildify-space-test-html-nbsp ()
+  "Tests auto-tildification in an HTML document"
+  (tildify-space-test--test '(html-mode sgml-mode) "&nbsp;" "<pre>" t))
+
+(ert-deftest tildify-space-test-xml ()
+  "Tests auto-tildification in an XML document"
+  (tildify-space-test--test '(nxml-mode) " " "<! -- "))
+
+(ert-deftest tildify-space-test-tex ()
+  "Tests tildification in a TeX document"
+  (tildify-space-test--test '(tex-mode latex-mode plain-tex-mode)
+                            "~" "\\verb# "))
+
+
+(defun tildify-space-undo-test--test
+    (modes nbsp env-open &optional set-space-string)
+  (with-temp-buffer
+    (dolist (mode modes)
+      (funcall mode)
+      (when set-space-string
+        (setq-local tildify-space-string nbsp))
+      (let ((header (concat "Testing double-space-undos in "
+                            (symbol-name mode) "\n")))
+        (erase-buffer)
+        (insert header "Lorem v" nbsp " ")
+        (should (not (tildify-space)))
+        (should (string-equal (concat header "Lorem v ") (buffer-string)))))))
+
+(ert-deftest tildify-space-undo-test-html ()
+  "Tests auto-tildification in an HTML document"
+  (tildify-space-undo-test--test '(html-mode sgml-mode) " " "<pre>"))
+
+(ert-deftest tildify-space-undo-test-html-nbsp ()
+  "Tests auto-tildification in an HTML document"
+  (tildify-space-undo-test--test '(html-mode sgml-mode) "&nbsp;" "<pre>" t))
+
+(ert-deftest tildify-space-undo-test-xml ()
+  "Tests auto-tildification in an XML document"
+  (tildify-space-undo-test--test '(nxml-mode) " " "<! -- "))
+
+(ert-deftest tildify-space-undo-test-tex ()
+  "Tests tildification in a TeX document"
+  (tildify-space-undo-test--test '(tex-mode latex-mode plain-tex-mode)
+                                 "~" "\\verb# "))
+
+
+
 (provide 'tildify-tests)
 
 ;;; tildify-tests.el ends here
diff --git a/test/automated/timer-tests.el b/test/automated/timer-tests.el
index f8e8414..b006b39 100644
--- a/test/automated/timer-tests.el
+++ b/test/automated/timer-tests.el
@@ -1,6 +1,6 @@
 ;;; timer-tests.el --- tests for timers -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/automated/tramp-tests.el b/test/automated/tramp-tests.el
index 864a43d..2c4610c 100644
--- a/test/automated/tramp-tests.el
+++ b/test/automated/tramp-tests.el
@@ -1,6 +1,6 @@
 ;;; tramp-tests.el --- Tests of remote file access
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 
@@ -953,7 +953,12 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
            (goto-char (point-min))
            (should
             (looking-at-p
-             "\\(total.+[[:digit:]]+\n\\)?.+ \\.\n.+ \\.\\.\n.+ foo$"))))
+             (concat
+              ;; There might be a summary line.
+              "\\(total.+[[:digit:]]+\n\\)?"
+              ;; We don't know in which order "." and ".." appear.
+              "\\(.+ \\.?\\.\n\\)\\{2\\}"
+              ".+ foo$")))))
       (ignore-errors (delete-directory tmp-name1 'recursive)))))
 
 (ert-deftest tramp-test18-file-attributes ()
@@ -1469,13 +1474,27 @@ This tests also `make-symbolic-link', `file-truename' 
and `add-name-to-file'."
            (vc-create-repo (car vc-handled-backends))
            ;; The structure of VC-FILESET is not documented.  Let's
            ;; hope it won't change.
-           (vc-register
-            nil (list (car vc-handled-backends)
-                      (list (file-name-nondirectory tmp-name2)))))
+           (condition-case nil
+               (vc-register
+                (list (car vc-handled-backends)
+                      (list (file-name-nondirectory tmp-name2))))
+             ;; `vc-register' has changed its arguments in Emacs 25.1.
+             (error
+              (vc-register
+               nil (list (car vc-handled-backends)
+                         (list (file-name-nondirectory tmp-name2)))))))
          (should (vc-registered tmp-name2)))
 
        (ignore-errors (delete-directory tmp-name1 'recursive)))))
 
+(defun tramp--test-smb-or-windows-nt-p ()
+  "Check, whether the locale or remote host runs MS Windows.
+This requires restrictions of file name syntax."
+  (or (eq system-type 'windows-nt)
+      (eq (tramp-find-foreign-file-name-handler
+          tramp-test-temporary-file-directory)
+       'tramp-smb-file-name-handler)))
+
 (defun tramp--test-check-files (&rest files)
   "Runs a simple but comprehensive test over every file in FILES."
   (let ((tmp-name1 (tramp--test-make-temp-name))
@@ -1484,7 +1503,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
        (progn
          (make-directory tmp-name1)
          (make-directory tmp-name2)
-         (dolist (elt files)
+         (dolist (elt (delq nil files))
            (let ((file1 (expand-file-name elt tmp-name1))
                  (file2 (expand-file-name elt tmp-name2)))
              (write-region elt nil file1)
@@ -1540,24 +1559,23 @@ This tests also `make-symbolic-link', `file-truename' 
and `add-name-to-file'."
     (memq
      (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
      '(tramp-adb-file-name-handler
-       tramp-gvfs-file-name-handler
-       tramp-smb-file-name-handler))))
+       tramp-gvfs-file-name-handler))))
 
   ;; Newlines, slashes and backslashes in file names are not supported.
   ;; So we don't test.
   (tramp--test-check-files
-   " foo\tbar baz\t"
+   (if (tramp--test-smb-or-windows-nt-p) "foo bar baz" " foo\tbar baz\t")
    "$foo$bar$$baz$"
    "-foo-bar-baz-"
    "%foo%bar%baz%"
    "&foo&bar&baz&"
-   "?foo?bar?baz?"
-   "*foo*bar*baz*"
-   "'foo\"bar'baz\""
+   (unless (tramp--test-smb-or-windows-nt-p) "?foo?bar?baz?")
+   (unless (tramp--test-smb-or-windows-nt-p) "*foo*bar*baz*")
+   (if (tramp--test-smb-or-windows-nt-p) "'foo'bar'baz'" "'foo\"bar'baz\"")
    "#foo~bar#baz~"
-   "!foo|bar!baz|"
-   ":foo;bar:baz;"
-   "<foo>bar<baz>"
+   (if (tramp--test-smb-or-windows-nt-p) "!foo!bar!baz!" "!foo|bar!baz|")
+   (if (tramp--test-smb-or-windows-nt-p) ";foo;bar;baz;" ":foo;bar:baz;")
+   (unless (tramp--test-smb-or-windows-nt-p) "<foo>bar<baz>")
    "(foo)bar(baz)"
    "[foo]bar[baz]"
    "{foo}bar{baz}"))
@@ -1737,10 +1755,9 @@ Since it unloads Tramp, it shall be the last test to 
run."
 ;;   doesn't work well when an interactive password must be provided.
 ;; * Fix `tramp-test27-start-file-process' for `nc' and on MS
 ;;   Windows (`process-send-eof'?).
-;; * Fix `tramp-test28-shell-command' on MS Windows (nasty plink message).
-;; * Fix `tramp-test30-special-characters' for `adb', `nc' and `smb'.
-;; * Fix `tramp-test31-utf8' for MS Windows and `nc'/`telnet' (when
-;;   target is a dumb busybox).  Seems to be in `directory-files'.
+;; * Fix `tramp-test30-special-characters' for `adb' and `nc'.
+;; * Fix `tramp-test31-utf8' for `nc'/`telnet' (when target is a dumb
+;;   busybox).  Seems to be in `directory-files'.
 ;; * Fix Bug#16928.  Set expected error of 
`tramp-test32-asynchronous-requests'.
 ;; * Fix `tramp-test34-unload' (Not all symbols are unbound).  Set
 ;;   expected error.
diff --git a/test/automated/undo-tests.el b/test/automated/undo-tests.el
index 178eaf1..f462b26 100644
--- a/test/automated/undo-tests.el
+++ b/test/automated/undo-tests.el
@@ -1,6 +1,6 @@
 ;;; undo-tests.el --- Tests of primitive-undo
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Aaron S. Hawley <address@hidden>
 
diff --git a/test/automated/url-future-tests.el 
b/test/automated/url-future-tests.el
index 9171e89..66ce7d6 100644
--- a/test/automated/url-future-tests.el
+++ b/test/automated/url-future-tests.el
@@ -1,6 +1,6 @@
 ;;; url-future-tests.el --- Test suite for url-future.
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <address@hidden>
 ;; Keywords: data
diff --git a/test/automated/url-util-tests.el b/test/automated/url-util-tests.el
index 92ff361..21ddeb5 100644
--- a/test/automated/url-util-tests.el
+++ b/test/automated/url-util-tests.el
@@ -1,6 +1,6 @@
 ;;; url-util-tests.el --- Test suite for url-util.
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <address@hidden>
 ;; Keywords: data
diff --git a/test/automated/vc-bzr.el b/test/automated/vc-bzr.el
index 4c16465..c548562 100644
--- a/test/automated/vc-bzr.el
+++ b/test/automated/vc-bzr.el
@@ -1,6 +1,6 @@
 ;;; vc-bzr.el --- tests for vc/vc-bzr.el
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Glenn Morris <address@hidden>
 ;; Maintainer: address@hidden
diff --git a/test/automated/vc-tests.el b/test/automated/vc-tests.el
new file mode 100644
index 0000000..5b7b3cc
--- /dev/null
+++ b/test/automated/vc-tests.el
@@ -0,0 +1,455 @@
+;;; vc-tests.el --- Tests of different backends of vc.el
+
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
+
+;; Author: Michael Albinus <address@hidden>
+
+;; 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 3 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, see `http://www.gnu.org/licenses/'.
+
+;;; Commentary:
+
+;; For every supported VC on the machine, different test cases are
+;; generated automatically.
+
+;; Functions to be tested (see Commentary of vc.el).  Mandatory
+;; functions are marked with `*', optional functions are marked with `-':
+
+;; BACKEND PROPERTIES
+;;
+;; * revision-granularity
+
+;; STATE-QUERYING FUNCTIONS
+;;
+;; * registered (file)
+;; * state (file)
+;; - dir-status (dir update-function)
+;; - dir-status-files (dir files default-state update-function)
+;; - dir-extra-headers (dir)
+;; - dir-printer (fileinfo)
+;; - status-fileinfo-extra (file)
+;; * working-revision (file)
+;; - latest-on-branch-p (file)
+;; * checkout-model (files)
+;; - mode-line-string (file)
+
+;; STATE-CHANGING FUNCTIONS
+;;
+;; * create-repo (backend)
+;; * register (files &optional comment)
+;; - responsible-p (file)
+;; - receive-file (file rev)
+;; - unregister (file)
+;; * checkin (files comment)
+;; * find-revision (file rev buffer)
+;; * checkout (file &optional rev)
+;; * revert (file &optional contents-done)
+;; - rollback (files)
+;; - merge-file (file rev1 rev2)
+;; - merge-branch ()
+;; - merge-news (file)
+;; - pull (prompt)
+;; - steal-lock (file &optional revision)
+;; - modify-change-comment (files rev comment)
+;; - mark-resolved (files)
+;; - find-admin-dir (file)
+
+;; HISTORY FUNCTIONS
+;;
+;; * print-log (files buffer &optional shortlog start-revision limit)
+;; * log-outgoing (backend remote-location)
+;; * log-incoming (backend remote-location)
+;; - log-view-mode ()
+;; - show-log-entry (revision)
+;; - comment-history (file)
+;; - update-changelog (files)
+;; * diff (files &optional async rev1 rev2 buffer)
+;; - revision-completion-table (files)
+;; - annotate-command (file buf &optional rev)
+;; - annotate-time ()
+;; - annotate-current-time ()
+;; - annotate-extract-revision-at-line ()
+;; - region-history (FILE BUFFER LFROM LTO)
+;; - region-history-mode ()
+
+;; TAG SYSTEM
+;;
+;; - create-tag (dir name branchp)
+;; - retrieve-tag (dir name update)
+
+;; MISCELLANEOUS
+;;
+;; - make-version-backups-p (file)
+;; - root (file)
+;; - ignore (file &optional directory)
+;; - ignore-completion-table
+;; - previous-revision (file rev)
+;; - next-revision (file rev)
+;; - log-edit-mode ()
+;; - check-headers ()
+;; - delete-file (file)
+;; - rename-file (old new)
+;; - find-file-hook ()
+;; - extra-menu ()
+;; - extra-dir-menu ()
+;; - conflicted-files (dir)
+
+;;; Code:
+
+(require 'ert)
+(require 'vc)
+
+;; The working horses.
+
+(defvar vc-test--cleanup-hook nil
+  "Functions for cleanup at the end of an ert test.
+Don't set it globally, the functions shall be let-bound.")
+
+(defun vc-test--revision-granularity-function (backend)
+  "Run the `vc-revision-granularity' backend function."
+  (funcall (intern (downcase (format "vc-%s-revision-granularity" backend)))))
+
+(defun vc-test--create-repo-function (backend)
+  "Run the `vc-create-repo' backend function.
+For backends which dont support it, it is emulated."
+
+  (cond
+   ((eq backend 'CVS)
+    (let ((tmp-dir
+          (expand-file-name
+           (make-temp-name "vc-test") temporary-file-directory)))
+      (make-directory (expand-file-name "module" tmp-dir) 'parents)
+      (make-directory (expand-file-name "CVSROOT" tmp-dir) 'parents)
+      (shell-command-to-string (format "cvs -Q -d:local:%s co module" tmp-dir))
+      (rename-file "module/CVS" default-directory)
+      (delete-directory "module" 'recursive)
+      ;; We must cleanup the "remote" CVS repo as well.
+      (add-hook 'vc-test--cleanup-hook
+               `(lambda () (delete-directory ,tmp-dir 'recursive)))))
+
+   ((eq backend 'Arch)
+    (let ((archive-name (format "%s--%s" user-mail-address (random))))
+      (when (string-match
+            "no arch user id set" (shell-command-to-string "tla my-id"))
+       (shell-command-to-string
+        (format "tla my-id \"<%s>\"" user-mail-address)))
+      (shell-command-to-string
+       (format "tla make-archive %s %s" archive-name default-directory))
+      (shell-command-to-string
+       (format "tla my-default-archive %s" archive-name))))
+
+   ((eq backend 'Mtn)
+    (let ((archive-name "foo.mtn"))
+      (shell-command-to-string
+       (format
+       "mtn db init --db=%s"
+       (expand-file-name archive-name default-directory)))
+      (shell-command-to-string
+       (format "mtn --db=%s --branch=foo setup ." archive-name))))
+
+   (t (vc-create-repo backend))))
+
+(defun vc-test--create-repo (backend)
+  "Create a test repository in `default-directory', a temporary directory."
+
+  (let ((vc-handled-backends `(,backend))
+       (default-directory
+         (file-name-as-directory
+          (expand-file-name
+           (make-temp-name "vc-test") temporary-file-directory)))
+       vc-test--cleanup-hook)
+
+    (unwind-protect
+       (progn
+         ;; Cleanup.
+         (add-hook
+          'vc-test--cleanup-hook
+          `(lambda () (delete-directory ,default-directory 'recursive)))
+
+         ;; Check the revision granularity.
+         (should (memq (vc-test--revision-granularity-function backend)
+                '(file repository)))
+
+         ;; Create empty repository.
+         (make-directory default-directory)
+         (should (file-directory-p default-directory))
+         (vc-test--create-repo-function backend))
+
+      ;; Save exit.
+      (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
+
+;; Why isn't there `vc-unregister'?
+(defun vc-test--unregister-function (backend file)
+  "Run the `vc-unregister' backend function.
+For backends which dont support it, `vc-not-supported' is signalled."
+
+  (let ((symbol (intern (downcase (format "vc-%s-unregister" backend)))))
+    (if (functionp symbol)
+       (funcall symbol file)
+      ;; CVS, SVN, SCCS, SRC and Mtn are not supported.
+      (signal 'vc-not-supported (list 'unregister backend)))))
+
+(defun vc-test--register (backend)
+  "Register and unregister a file."
+
+  (let ((vc-handled-backends `(,backend))
+       (default-directory
+         (file-name-as-directory
+          (expand-file-name
+           (make-temp-name "vc-test") temporary-file-directory)))
+       vc-test--cleanup-hook)
+
+    (unwind-protect
+       (progn
+         ;; Cleanup.
+         (add-hook
+          'vc-test--cleanup-hook
+          `(lambda () (delete-directory ,default-directory 'recursive)))
+
+         ;; Create empty repository.
+         (make-directory default-directory)
+         (vc-test--create-repo-function backend)
+
+         (let ((tmp-name1 (expand-file-name "foo" default-directory))
+               (tmp-name2 "bla"))
+           ;; Register files.  Check for it.
+           (write-region "foo" nil tmp-name1 nil 'nomessage)
+           (should (file-exists-p tmp-name1))
+           (should-not (vc-registered tmp-name1))
+           (write-region "bla" nil tmp-name2 nil 'nomessage)
+           (should (file-exists-p tmp-name2))
+           (should-not (vc-registered tmp-name2))
+           (vc-register
+            (list backend (list tmp-name1 tmp-name2)))
+           (should (file-exists-p tmp-name1))
+           (should (vc-registered tmp-name1))
+           (should (file-exists-p tmp-name2))
+           (should (vc-registered tmp-name2))
+
+           ;; Unregister the files.
+           (condition-case err
+               (progn
+                 (vc-test--unregister-function backend tmp-name1)
+                 (should-not (vc-registered tmp-name1))
+                 (vc-test--unregister-function backend tmp-name2)
+                 (should-not (vc-registered tmp-name2)))
+             ;; CVS, SVN, SCCS, SRC and Mtn are not supported.
+             (vc-not-supported (message "%s" (error-message-string err))))
+           (should (file-exists-p tmp-name1))
+           (should (file-exists-p tmp-name2))))
+
+      ;; Save exit.
+      (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
+
+;; `vc-state' returns different results for different backends.  So we
+;; don't check with `should', but print the results for analysis.
+(defun vc-test--state (backend)
+  "Check the different states of a file."
+
+  (let ((vc-handled-backends `(,backend))
+       (default-directory
+         (file-name-as-directory
+          (expand-file-name
+           (make-temp-name "vc-test") temporary-file-directory)))
+       vc-test--cleanup-hook errors)
+
+    (unwind-protect
+       (progn
+         ;; Cleanup.
+         (add-hook
+          'vc-test--cleanup-hook
+          `(lambda () (delete-directory ,default-directory 'recursive)))
+
+         ;; Create empty repository.
+         (make-directory default-directory)
+         (vc-test--create-repo-function backend)
+
+         (message "%s" (vc-state default-directory backend))
+         ;(should (eq (vc-state default-directory backend) 'up-to-date))
+
+         (let ((tmp-name (expand-file-name "foo" default-directory)))
+           ;; Check for initial state.
+           (message "%s" (vc-state tmp-name backend))
+           ;(should (eq (vc-state tmp-name backend) 'unregistered))
+
+           ;; Write a new file.  Check for state.
+           (write-region "foo" nil tmp-name nil 'nomessage)
+           (message "%s" (vc-state tmp-name backend))
+           ;(should (eq (vc-state tmp-name backend) 'unregistered))
+
+           ;; Register a file.  Check for state.
+           (vc-register
+            (list backend (list (file-name-nondirectory tmp-name))))
+           (message "%s" (vc-state tmp-name backend))
+           ;(should (eq (vc-state tmp-name backend) 'added))
+
+           ;; Unregister the file.  Check for state.
+           (condition-case nil
+               (progn
+                 (vc-test--unregister-function backend tmp-name)
+                 (message "%s" (vc-state tmp-name backend))
+                 );(should (eq (vc-state tmp-name backend) 'unregistered)))
+             (vc-not-supported (message "%s" 'unsupported)))))
+
+      ;; Save exit.
+      (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
+
+(defun vc-test--working-revision (backend)
+  "Check the working revision of a repository."
+
+  (let ((vc-handled-backends `(,backend))
+       (default-directory
+         (file-name-as-directory
+          (expand-file-name
+           (make-temp-name "vc-test") temporary-file-directory)))
+       vc-test--cleanup-hook errors)
+
+    (unwind-protect
+       (progn
+         ;; Cleanup.
+         (add-hook
+          'vc-test--cleanup-hook
+          `(lambda () (delete-directory ,default-directory 'recursive)))
+
+         ;; Create empty repository.
+         (make-directory default-directory)
+         (vc-test--create-repo-function backend)
+
+         (should
+          (member
+           (vc-working-revision default-directory backend) '("0" "master")))
+
+         (let ((tmp-name (expand-file-name "foo" default-directory)))
+           ;; Check for initial state.
+           (should
+            (member (vc-working-revision tmp-name backend) '("0" "master")))
+
+           ;; Write a new file.  Check for state.
+           (write-region "foo" nil tmp-name nil 'nomessage)
+           (should
+            (member (vc-working-revision tmp-name backend) '("0" "master")))
+
+           ;; Register a file.  Check for state.
+           (vc-register
+            (list backend (list (file-name-nondirectory tmp-name))))
+           (should
+            (member (vc-working-revision tmp-name backend) '("0" "master")))
+
+           ;; Unregister the file.  Check for working-revision.
+           (condition-case nil
+               (progn
+                 (vc-test--unregister-function backend tmp-name)
+                 (should
+                  (member
+                   (vc-working-revision tmp-name backend) '("0" "master"))))
+             (vc-not-supported (message "%s" 'unsupported)))))
+
+      ;; Save exit.
+      (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
+
+;; Create the test cases.
+
+(defun vc-test--rcs-enabled ()
+  (executable-find "rcs"))
+
+(defun vc-test--cvs-enabled ()
+  (executable-find "cvs"))
+
+(defvar vc-svn-program)
+(defun vc-test--svn-enabled ()
+  (executable-find vc-svn-program))
+
+(defun vc-test--sccs-enabled ()
+  (executable-find "sccs"))
+
+(defvar vc-src-program)
+(defun vc-test--src-enabled ()
+  (executable-find vc-src-program))
+
+(defvar vc-bzr-program)
+(defun vc-test--bzr-enabled ()
+  (executable-find vc-bzr-program))
+
+(defvar vc-git-program)
+(defun vc-test--git-enabled ()
+  (executable-find vc-git-program))
+
+(defvar vc-hg-program)
+(defun vc-test--hg-enabled ()
+  (executable-find vc-hg-program))
+
+(defvar vc-mtn-program)
+(defun vc-test--mtn-enabled ()
+  (executable-find vc-mtn-program))
+
+(defvar vc-arch-program)
+(defun vc-test--arch-enabled ()
+  (executable-find vc-arch-program))
+
+
+;; There are too many failed test cases yet.  We suppress them on hydra.
+(if (getenv "NIX_STORE")
+    (ert-deftest vc-test ()
+      "Dummy test case for hydra."
+      (ert-pass))
+
+  ;; Create the test cases.
+  (dolist (backend vc-handled-backends)
+    (let ((backend-string (downcase (symbol-name backend))))
+      (require (intern (format "vc-%s" backend-string)))
+      (eval
+       ;; Check, whether the backend is supported.
+       `(when (funcall ',(intern (format "vc-test--%s-enabled" 
backend-string)))
+
+         (ert-deftest
+             ,(intern (format "vc-test-%s00-create-repo" backend-string)) ()
+           ,(format "Check `vc-create-repo' for the %s backend." 
backend-string)
+           (vc-test--create-repo ',backend))
+
+         (ert-deftest
+             ,(intern (format "vc-test-%s01-register" backend-string)) ()
+           ,(format
+             "Check `vc-register' and `vc-registered' for the %s backend."
+             backend-string)
+           (skip-unless
+            (ert-test-passed-p
+             (ert-test-most-recent-result
+              (ert-get-test
+               ',(intern
+                  (format "vc-test-%s00-create-repo" backend-string))))))
+           (vc-test--register ',backend))
+
+         (ert-deftest
+             ,(intern (format "vc-test-%s02-state" backend-string)) ()
+           ,(format "Check `vc-state' for the %s backend." backend-string)
+           (skip-unless
+            (ert-test-passed-p
+             (ert-test-most-recent-result
+              (ert-get-test
+               ',(intern
+                  (format "vc-test-%s01-register" backend-string))))))
+           (vc-test--state ',backend))
+
+         (ert-deftest
+             ,(intern (format "vc-test-%s03-working-revision" backend-string)) 
()
+           ,(format "Check `vc-working-revision' for the %s backend." 
backend-string)
+           (skip-unless
+            (ert-test-passed-p
+             (ert-test-most-recent-result
+              (ert-get-test
+               ',(intern
+                  (format "vc-test-%s01-register" backend-string))))))
+           (vc-test--working-revision ',backend)))))))
+
+(provide 'vc-tests)
+;;; vc-tests.el ends here
diff --git a/test/automated/xml-parse-tests.el 
b/test/automated/xml-parse-tests.el
index ac6bef54..95eb286 100644
--- a/test/automated/xml-parse-tests.el
+++ b/test/automated/xml-parse-tests.el
@@ -1,6 +1,6 @@
 ;;; xml-parse-tests.el --- Test suite for XML parsing.
 
-;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <address@hidden>
 ;; Keywords:       internal
diff --git a/test/automated/zlib-tests.el b/test/automated/zlib-tests.el
index 83ba29e..6718601 100644
--- a/test/automated/zlib-tests.el
+++ b/test/automated/zlib-tests.el
@@ -1,6 +1,6 @@
 ;;; zlib-tests.el --- Test suite for zlib.
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <address@hidden>
 
diff --git a/test/biditest.el b/test/biditest.el
index 4dd3a8c..e221208 100644
--- a/test/biditest.el
+++ b/test/biditest.el
@@ -1,9 +1,9 @@
 ;;; biditest.el --- test bidi reordering in GNU Emacs display engine.
 
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii
-;; Maintainer: FSF
+;; Maintainer: address@hidden
 ;; Package: emacs
 
 ;; This program is free software: you can redistribute it and/or modify
diff --git a/test/cedet/cedet-utests.el b/test/cedet/cedet-utests.el
index 116568c..7690363 100644
--- a/test/cedet/cedet-utests.el
+++ b/test/cedet/cedet-utests.el
@@ -1,6 +1,6 @@
 ;;; cedet-utests.el --- Run all unit tests in the CEDET suite.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/ede-tests.el b/test/cedet/ede-tests.el
index 65f01b6..293c037 100644
--- a/test/cedet/ede-tests.el
+++ b/test/cedet/ede-tests.el
@@ -1,6 +1,6 @@
 ;;; ede-tests.el --- Some tests for the Emacs Development Environment
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/semantic-ia-utest.el b/test/cedet/semantic-ia-utest.el
index 985ea12..71736c8 100644
--- a/test/cedet/semantic-ia-utest.el
+++ b/test/cedet/semantic-ia-utest.el
@@ -1,6 +1,6 @@
 ;;; semantic-ia-utest.el --- Analyzer unit tests
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/semantic-tests.el b/test/cedet/semantic-tests.el
index 857d2dc..0d9b688 100644
--- a/test/cedet/semantic-tests.el
+++ b/test/cedet/semantic-tests.el
@@ -1,6 +1,6 @@
 ;;; semantic-utest.el --- Miscellaneous Semantic tests.
 
-;;; Copyright (C) 2003-2004, 2007-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2003-2004, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/semantic-utest-c.el b/test/cedet/semantic-utest-c.el
index e42ff1a..ccf5707 100644
--- a/test/cedet/semantic-utest-c.el
+++ b/test/cedet/semantic-utest-c.el
@@ -1,6 +1,6 @@
 ;;; semantic-utest-c.el --- C based parsing tests.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/semantic-utest.el b/test/cedet/semantic-utest.el
index 231d257..2c9ccd3 100644
--- a/test/cedet/semantic-utest.el
+++ b/test/cedet/semantic-utest.el
@@ -1,6 +1,6 @@
 ;;; semantic-utest.el --- Tests for semantic's parsing system.
 
-;;; Copyright (C) 2003-2004, 2007-2014 Free Software Foundation, Inc.
+;;; Copyright (C) 2003-2004, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/srecode-tests.el b/test/cedet/srecode-tests.el
index e9b24df..423df72 100644
--- a/test/cedet/srecode-tests.el
+++ b/test/cedet/srecode-tests.el
@@ -1,6 +1,6 @@
 ;;; srecode-tests.el --- Some tests for CEDET's srecode
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/test.c b/test/cedet/tests/test.c
index 4f518a2..8f72087 100644
--- a/test/cedet/tests/test.c
+++ b/test/cedet/tests/test.c
@@ -1,6 +1,6 @@
 /* test.c --- Semantic unit test for C.
 
-   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/test.el b/test/cedet/tests/test.el
index 512001b..28b9775 100644
--- a/test/cedet/tests/test.el
+++ b/test/cedet/tests/test.el
@@ -1,6 +1,6 @@
 ;;; test.el --- Unit test file for Semantic Emacs Lisp support.
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/test.make b/test/cedet/tests/test.make
index 402537f..ac8c599 100644
--- a/test/cedet/tests/test.make
+++ b/test/cedet/tests/test.make
@@ -1,6 +1,6 @@
 # test.make --- Semantic unit test for Make -*- makefile -*-
 
-# Copyright (C) 2001-2002, 2010-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2002, 2010-2015 Free Software Foundation, Inc.
 
 # Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testdoublens.cpp 
b/test/cedet/tests/testdoublens.cpp
index 7ecfc42..b503c21 100644
--- a/test/cedet/tests/testdoublens.cpp
+++ b/test/cedet/tests/testdoublens.cpp
@@ -1,6 +1,6 @@
 // testdoublens.cpp --- semantic-ia-utest completion engine unit tests
 
-// Copyright (C) 2008-2014 Free Software Foundation, Inc.
+// Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testdoublens.hpp 
b/test/cedet/tests/testdoublens.hpp
index 3fc3059..609ea74 100644
--- a/test/cedet/tests/testdoublens.hpp
+++ b/test/cedet/tests/testdoublens.hpp
@@ -1,6 +1,6 @@
 // testdoublens.hpp --- Header file used in one of the Semantic tests
 
-// Copyright (C) 2008-2014 Free Software Foundation, Inc.
+// Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testjavacomp.java 
b/test/cedet/tests/testjavacomp.java
index 8dc40eb..d17f304 100644
--- a/test/cedet/tests/testjavacomp.java
+++ b/test/cedet/tests/testjavacomp.java
@@ -1,6 +1,6 @@
 //  testjavacomp.java --- Semantic unit test for Java
 
-// Copyright (C) 2009-2014 Free Software Foundation, Inc.
+// Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 //  Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testpolymorph.cpp 
b/test/cedet/tests/testpolymorph.cpp
index aba0dfe..9195bb6 100644
--- a/test/cedet/tests/testpolymorph.cpp
+++ b/test/cedet/tests/testpolymorph.cpp
@@ -1,6 +1,6 @@
 /** testpolymorph.cpp --- A sequence of polymorphism examples.
  *
- * Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ * Copyright (C) 2009-2015 Free Software Foundation, Inc.
  *
  * Author: Eric M. Ludlam <address@hidden>
  *
diff --git a/test/cedet/tests/testspp.c b/test/cedet/tests/testspp.c
index 0d91e6d..168898a 100644
--- a/test/cedet/tests/testspp.c
+++ b/test/cedet/tests/testspp.c
@@ -1,6 +1,6 @@
 /* testspp.cpp --- Semantic unit test for the C preprocessor
 
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testsppreplace.c 
b/test/cedet/tests/testsppreplace.c
index 6bdea6e..e831ea1 100644
--- a/test/cedet/tests/testsppreplace.c
+++ b/test/cedet/tests/testsppreplace.c
@@ -1,5 +1,5 @@
 /* testsppreplace.c --- unit test for CPP/SPP Replacement
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testsppreplaced.c 
b/test/cedet/tests/testsppreplaced.c
index 706753e..bb6a552 100644
--- a/test/cedet/tests/testsppreplaced.c
+++ b/test/cedet/tests/testsppreplaced.c
@@ -1,5 +1,5 @@
 /* testsppreplaced.c --- unit test for CPP/SPP Replacement
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testsubclass.cpp 
b/test/cedet/tests/testsubclass.cpp
index 0565314..6dee867 100644
--- a/test/cedet/tests/testsubclass.cpp
+++ b/test/cedet/tests/testsubclass.cpp
@@ -1,6 +1,6 @@
 // testsubclass.cpp --- unit test for analyzer and complex C++ inheritance
 
-// Copyright (C) 2007-2014 Free Software Foundation, Inc.
+// Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testsubclass.hh b/test/cedet/tests/testsubclass.hh
index 7f1bd1e..13e907d 100644
--- a/test/cedet/tests/testsubclass.hh
+++ b/test/cedet/tests/testsubclass.hh
@@ -1,6 +1,6 @@
 // testsubclass.hh --- unit test for analyzer and complex C++ inheritance
 
-// Copyright (C) 2007-2014 Free Software Foundation, Inc.
+// Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testtypedefs.cpp 
b/test/cedet/tests/testtypedefs.cpp
index 8647b70..fa94af3 100644
--- a/test/cedet/tests/testtypedefs.cpp
+++ b/test/cedet/tests/testtypedefs.cpp
@@ -1,6 +1,6 @@
 // testtypedefs.cpp --- Sample with some fake bits out of std::string
 
-// Copyright (C) 2008-2014 Free Software Foundation, Inc.
+// Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/cedet/tests/testvarnames.c b/test/cedet/tests/testvarnames.c
index 5c0a68a..f08b773 100644
--- a/test/cedet/tests/testvarnames.c
+++ b/test/cedet/tests/testvarnames.c
@@ -1,7 +1,7 @@
 /* testvarnames.cpp
    Test variable and function names, lists of variables on one line, etc.
 
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <address@hidden>
 
diff --git a/test/indent/js.js b/test/indent/js.js
index d623a0d..2d458e1 100644
--- a/test/indent/js.js
+++ b/test/indent/js.js
@@ -7,6 +7,11 @@ let c = 1,
 var e = 100500,
     + 1;
 
+function test ()
+{
+     return /[/]/.test ('/')     // (bug#19397)
+}
+
 var f = bar('/protocols/')
 baz();
 
@@ -47,3 +52,11 @@ var p = {
 
 var evens = [e for each (e in range(0, 21))
                if (ed % 2 == 0)];
+
+!b
+  !=b
+  !==b
+
+a++
+b +=
+  c
diff --git a/test/indent/pascal.pas b/test/indent/pascal.pas
index 0005b95..bb2e700 100644
--- a/test/indent/pascal.pas
+++ b/test/indent/pascal.pas
@@ -1,6 +1,6 @@
 { GPC demo program for the CRT unit.
 
-Copyright (C) 1999-2006, 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2006, 2013-2015 Free Software Foundation, Inc.
 
 Author: Frank Heckenbach <address@hidden>
 
diff --git a/test/indent/shell.sh b/test/indent/shell.sh
index e361905..b0f69bd 100755
--- a/test/indent/shell.sh
+++ b/test/indent/shell.sh
@@ -54,6 +54,17 @@ filter_3 ()                     # bug#17842
        grep -v "^," | sort -t, -k2,2
 }
 
+foo | bar | {
+    toto
+}
+
+grep -e "^$userregexp:" /etc/passwd | cut -d :  -f 1 | while read user ; do
+    print -u2 "user=$user"      # bug#18031
+    sudo -U $user -ll | while read line ; do
+        :
+    done
+done
+
 echo -n $(( 5 << 2 ))
 # This should not be treated as a heredoc (bug#12770).
 2
@@ -89,7 +100,7 @@ foo () {
         d)
             echo 3;;
     esac
-    
+
     case $as_nl`(ac_space=' '; set) 2>&1` in #(
         *${as_nl}ac_space=\ *)
             # `set' does not quote correctly, so add quotes: double-quote
@@ -106,7 +117,7 @@ foo () {
     esac |
         grep '.' |              # KNOWN INDENT BUG
         sed 1d
-    
+
     case toto in
         -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
             | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* \
@@ -122,7 +133,7 @@ foo () {
         5) hello ;;
         5) hello ;;
     esac
-    
+
     echo "'" wfgfe
 
     #!/bin/bash
@@ -141,7 +152,7 @@ help2
 EOF2
 }
 bar () {
-    if [ $# == 0 ]; then
+    if [ $# -eq 0 ]; then
         while
             f                   # KNOWN INDENT BUG
         do
@@ -152,18 +163,18 @@ bar () {
             # adsgsdg
             echo "screwed up"
         fi
-        
+
         $@ $? $#
-        
+
         for f in *
         do
             sdfg
         done
-        
+
         if swrgfef
         then blas
         else sdf
         fi
-        
+
     fi
 }
diff --git a/test/redisplay-testsuite.el b/test/redisplay-testsuite.el
index b7fe9b0..357ab08 100644
--- a/test/redisplay-testsuite.el
+++ b/test/redisplay-testsuite.el
@@ -1,6 +1,6 @@
 ;;; redisplay-testsuite.el --- Test suite for redisplay.
 
-;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <address@hidden>
 ;; Keywords:       internal
diff --git a/test/rmailmm.el b/test/rmailmm.el
index 96a7541..a20ae40 100644
--- a/test/rmailmm.el
+++ b/test/rmailmm.el
@@ -1,6 +1,6 @@
 ;;; rmailmm.el --- tests for mail/rmailmm.el
 
-;; Copyright (C) 2006-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]